<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7021228780421697859</id><updated>2012-01-19T13:38:58.170-08:00</updated><category term='Fail'/><category term='Python'/><category term='Licensing'/><category term='x86 Assembly'/><category term='SQL'/><category term='Window Managers'/><category term='C'/><category term='Music'/><category term='SVG'/><category term='Perl'/><category term='Transit'/><category term='Search'/><category term='Programs'/><category term='Lisp'/><category term='Old Stuff'/><category term='Programming'/><category term='Web'/><category term='C++'/><category term='Haskell'/><category term='PHP'/><category term='Fiona'/><category term='Shell'/><category term='Life'/><category term='Flash'/><category term='Wikipedia'/><category term='Games'/><category term='ALSA'/><category term='Audio'/><category term='git'/><category term='Chat bot'/><category term='Cats'/><category term='Ruby'/><category term='Linux'/><category term='Bus'/><category term='Phenom PC'/><category term='Kawa-kun'/><category term='x86-64 Assembly'/><category term='Hardware'/><category term='Humor'/><category term='XHTML'/><category term='Awk'/><category term='Foxes'/><category term='Networks'/><category term='Dreams'/><category term='LaTeX'/><category term='Webcomic'/><category term='Link light rail'/><category term='School'/><title type='text'>Snakes, Foxes, and Penguins</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default?start-index=101&amp;max-results=100'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>169</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-7304734166939432916</id><published>2012-01-19T13:38:00.000-08:00</published><updated>2012-01-19T13:38:58.205-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Webcomic'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>flatten3.py</title><content type='html'>&lt;p&gt;I recently updated &lt;a href="http://snakesfoxes.blogspot.com/2010/03/flatten2py.html"&gt;flatten.py&lt;/a&gt; to strip out &lt;strong&gt;pngcrush&lt;/strong&gt; and use &lt;a href="http://docs.python.org/library/argparse.html"&gt;argparse&lt;/a&gt;:&lt;/p&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/usr/bin/env python2&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; sys &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; exit&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; subprocess &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; Popen&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; argparse &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; ArgumentParser&lt;span style="color: #990000"&gt;,&lt;/span&gt; ArgumentError&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; copy &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; copy&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; remove&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; close as os_close&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; re &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; compile as re_compile&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os&lt;span style="color: #990000"&gt;.&lt;/span&gt;path &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; join&lt;span style="color: #990000"&gt;,&lt;/span&gt; isfile&lt;span style="color: #990000"&gt;,&lt;/span&gt; exists&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; tempfile &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; mkstempfilext &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'^(.+)\.(.+)$'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;filext_png &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'\.png$'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;img_type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'Bilevel'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Grayscale'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'GrayscaleMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Palette'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'PaletteMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'TrueColor'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'TrueColorMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'ColorSeparate'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'ColorSeparationMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Optimize'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;img_cspace &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'CMY'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'CMYK'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Gray'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HSB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HSL'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HWB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Lab'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Log'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'OHTA'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec601Luma'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec601YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec709Luma'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec709YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'RGB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'sRGB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Transparent'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'XYZ'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YCC'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YIQ'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YPbPr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YUV'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;parser &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;ArgumentParser&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;usage &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Usage: %(prog)s [ options ] input [ output ]'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-s'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--size'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'size'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The output size; passed directly to ImageMagick'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-n'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--no-clobber'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'clobber'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_false'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Don\'t overwrite the target file'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-X'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--lossy-reduction'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'lossy_reduction'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_false'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Don\'t allow OptiPNG to perform lossy optimizations'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-f'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Catrom'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The filter to resize with if necessary'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-b'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'white'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The background when flattening'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-F'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--no-flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_false'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Don\'t flatten the output'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-t'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; choices &lt;span style="color: #990000"&gt;=&lt;/span&gt; img_type &lt;span style="color: #990000"&gt;+&lt;/span&gt; img_cspace&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The type of the output image: analogous to both -type and -colorspace in ImageMagick'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-d'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; choices &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;4&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;8&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;16&lt;/span&gt;&lt;span style="color: #990000"&gt;),&lt;/span&gt; type &lt;span style="color: #990000"&gt;=&lt;/span&gt; int&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The depth of the output image'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-p'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--pre-color'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'precolor'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; False&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_true'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Change bit-depth/colorspace prior to scaling if applicable'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'input'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Input file'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_argument&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'output'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; nargs &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'?'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Destination file; will default to ${input}_small.png'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;args &lt;span style="color: #990000"&gt;=&lt;/span&gt; parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;parse_args&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;isfile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;.&lt;/span&gt;input&lt;span style="color: #990000"&gt;):&lt;/span&gt; pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; False &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;output&lt;span style="color: #990000"&gt;:&lt;/span&gt;  output &lt;span style="color: #990000"&gt;=&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;output  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; filext_png&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;):&lt;/span&gt;   pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;  m &lt;span style="color: #990000"&gt;=&lt;/span&gt; filext&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;.&lt;/span&gt;input&lt;span style="color: #990000"&gt;)&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; m &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;   output &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%s_small.%s'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;),&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'png'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;    pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;   output &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%s_small.png'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;input   pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;clobber &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;and&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exists&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;):&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Output file exists:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; output  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# ACTUAL PROCESSING&lt;/span&gt;&lt;/span&gt; pargs &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'convert'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;input&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;precolor&lt;span style="color: #990000"&gt;:&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;flatten&lt;span style="color: #990000"&gt;:&lt;/span&gt;   pargs &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;background&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'+matte'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;size &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;   pargs &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;filter&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-resize'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;size&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; img_type&lt;span style="color: #990000"&gt;:&lt;/span&gt;   pargs &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;type&lt;span style="color: #990000"&gt;]&lt;/span&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;    pargs &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth&lt;span style="color: #990000"&gt;)]&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;elif&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; img_cspace&lt;span style="color: #990000"&gt;:&lt;/span&gt;   pargs &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-colorspace'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;type&lt;span style="color: #990000"&gt;]&lt;/span&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;    pargs &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth&lt;span style="color: #990000"&gt;)]&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;precolor&lt;span style="color: #990000"&gt;:&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;flatten&lt;span style="color: #990000"&gt;:&lt;/span&gt;   pargs &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;background&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'+matte'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;size &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;   pargs &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;filter&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-resize'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;size&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; pngout&lt;span style="color: #990000"&gt;:&lt;/span&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# Run convert&lt;/span&gt;&lt;/span&gt;  pargs&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'png:'&lt;/span&gt; &lt;span style="color: #990000"&gt;+&lt;/span&gt; output&lt;span style="color: #990000"&gt;)&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pargs&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;wait&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;except&lt;/span&gt;&lt;/span&gt; KeyboardInterrupt&lt;span style="color: #990000"&gt;:&lt;/span&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;isfile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;):&lt;/span&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;remove&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;)&lt;/span&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# Run optipng&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;   optipng &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'optipng'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-o9'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;lossy_reduction&lt;span style="color: #990000"&gt;:&lt;/span&gt;    optipng&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-nx'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;   optipng&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;)&lt;/span&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;optipng&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;wait&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;except&lt;/span&gt;&lt;/span&gt; KeyboardInterrupt&lt;span style="color: #990000"&gt;:&lt;/span&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;isfile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;):&lt;/span&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;remove&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;  pargs&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;)&lt;/span&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pargs&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;wait&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# END&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'No such file:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;input &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-7304734166939432916?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/7304734166939432916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=7304734166939432916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/7304734166939432916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/7304734166939432916'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2012/01/flatten3py.html' title='flatten3.py'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-4436928513393071379</id><published>2011-12-12T15:30:00.000-08:00</published><updated>2011-12-12T15:40:38.234-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>重音テト - 桃色しーくれっと.exe</title><content type='html'>&lt;p&gt;Well, since it's been a while since I last posted any &lt;em&gt;actual content&lt;/em&gt;, I'll post some song lyrics.  This song is one of my favorites these days.  (Yes, the illustration is derived from &lt;a href="http://en.wikipedia.org/wiki/Ore_no_Im%C5%8Dto_ga_Konna_ni_Kawaii_Wake_ga_Nai"&gt;Oreimo&lt;/a&gt;.&lt;/p&gt;&lt;object type="application/x-shockwave-flash" style="display:block; width:90%; height: 480px; margin:1em auto;" data="http://www.youtube.com/v/9D4zDWXV0UU?version=3&amp;amp;hl=en_US&amp;amp;hd=1"&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;/object&gt;&lt;p&gt;And according to &lt;a href="http://www24.atwiki.jp/utauuuta/pages/705.html"&gt;here&lt;/a&gt;, these are the lyrics:&lt;/p&gt;&lt;div class="lyric"&gt;わん、とぅー、 &lt;br /&gt;わん　とぅー　さん　しっ　&lt;br /&gt;&lt;br /&gt;Ah　気が付けばいつだって　魔法にかかったように &lt;br /&gt;追いかけて夢中になってた　キミのこと&lt;br /&gt;&lt;br /&gt;ぎゅぅっと胸締め付ける　トドメを刺した声が &lt;br /&gt;離れなくて　どうしよう　今日も眠れないよ（*´Д｀）&lt;br /&gt;&lt;br /&gt;ずっと言えないままのこのキモチ &lt;br /&gt;誰かに聞いてほしいの &lt;br /&gt;蕩れる妄想（セカイ）の pass（カギ）を解凍して（とかちて） &lt;br /&gt;キミに会いにゆくよ！&lt;br /&gt;&lt;br /&gt;桃色のトキメキが降りそそぐ &lt;br /&gt;24時過ぎ　二人だけの物語　鐘が鳴って &lt;br /&gt;止まらないドキドキ　vol 上げた &lt;br /&gt;ヒミツの夜　とろけそうな甘いユメ &lt;br /&gt;カラフルなハートに今見せてあげる&lt;br /&gt;&lt;br /&gt;ねえ　気が付いてほしいけど　ずっとそのままでいてね &lt;br /&gt;気付いたら　きっと熱暴走しちゃうkshvdhうぇlfふじこ&lt;br /&gt;&lt;br /&gt;ホントはあたしだって　教えてほしいくらい &lt;br /&gt;ググっても　この気持ちなんてわからないし&lt;br /&gt;&lt;br /&gt;「もっと近くにきてよ」 &lt;br /&gt;どうしても伝えられないコトバ &lt;br /&gt;見えない壁のその向こう側 &lt;br /&gt;キミと触れたいから！&lt;br /&gt;&lt;br /&gt;ミルク色のカクテルが降りそそぐ &lt;br /&gt;26時　二人だけの「冒険の書」を描いて &lt;br /&gt;溢れそうなシロップ　vol 下げた &lt;br /&gt;イケナイ夜　とろけそうな口唇で &lt;br /&gt;ムネノコドウ　たしかめて？&lt;br /&gt;&lt;br /&gt;誰にも言えない「好き」の一言がね、 &lt;br /&gt;駆け巡った電子の世界 &lt;br /&gt;誰かがこの気持ち　バカにしてもね、 &lt;br /&gt;好きなんだもん。しょうがないじゃない？&lt;br /&gt;&lt;br /&gt;二次色のトキメキが降りそそぐ &lt;br /&gt;ユメの続き　終わりのないエンディング　何度だって　&lt;br /&gt;&lt;br /&gt;切り取ったモザイク　フラグ立てた &lt;br /&gt;クライマックス　とろけそうな甘い声　震わせる&lt;br /&gt;&lt;br /&gt;キミの中　桃色に染め上げて &lt;br /&gt;濡れた瞳　漏れる吐息　ぎゅぅっと掴んだ &lt;br /&gt;小さな手を　握りしめて　朝が来るまで &lt;br /&gt;続いていく　二人だけの物語　 &lt;br /&gt;ユメを見せて　&lt;br /&gt;&lt;br /&gt;Lala... Lala...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-4436928513393071379?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/4436928513393071379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=4436928513393071379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/4436928513393071379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/4436928513393071379'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2011/12/exe.html' title='重音テト - 桃色しーくれっと.exe'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6236153020862006081</id><published>2011-12-12T15:00:00.001-08:00</published><updated>2011-12-12T15:00:41.479-08:00</updated><title type='text'>Google+?</title><content type='html'>&lt;p&gt;According to Google, I should be able to &lt;a href="http://buzz.blogger.com/2011/12/connect-to-google.html"&gt;share this post directly to Google+&lt;/a&gt;.  Let's see if it works.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6236153020862006081?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6236153020862006081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6236153020862006081' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6236153020862006081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6236153020862006081'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2011/12/google_12.html' title='Google+?'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-2963443776164012426</id><published>2011-04-07T20:43:00.001-07:00</published><updated>2011-04-07T20:47:03.387-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>My First Haskell Program</title><content type='html'>&lt;p&gt;Haskell has always been a bit difficult for me to understand, but thanks to &lt;a href="http://mvanier.livejournal.com/4305.html"&gt;this guide&lt;/a&gt;, I learned quite a bit.  It took me about fifteen minutes, but I have my first Haskell program running!&lt;/p&gt;&lt;code class="code"&gt;import System.Random&lt;br /&gt;import Text.Printf&lt;br /&gt;&lt;br /&gt;parseAnswer :: String -&gt; IO Bool&lt;br /&gt;parseAnswer "y" = return True&lt;br /&gt;parseAnswer a = return False&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;testLuck :: (RandomGen g) =&gt; g -&gt; Bool -&gt; Int -&gt; IO Int&lt;br /&gt;testLuck seed True x = &lt;br /&gt;     do let (addition, newseed) = randomR (-4, 4) seed&lt;br /&gt;        mainloop newseed (x + addition)&lt;br /&gt;testLuck seed False x = return x&lt;br /&gt;&lt;br /&gt;mainloop :: (RandomGen g) =&gt; g -&gt; Int -&gt; IO Int&lt;br /&gt;mainloop seed x =&lt;br /&gt;    do printf "Would you like to roll?  You currently have: %d\n" x&lt;br /&gt;       rolled &lt;- getLine &gt;&gt;= parseAnswer&lt;br /&gt;       testLuck seed rolled x&lt;br /&gt;&lt;br /&gt;main = &lt;br /&gt;    do putStrLn "Welcome to herpaderp."&lt;br /&gt;       seed &lt;- newStdGen&lt;br /&gt;       mainloop seed 0 &gt;&gt;= printf "You ended up with: %d\n"&lt;/code&gt;It's a pretty silly little thing that just asks you if you want to roll and returns some value.  I learned quite a bit about monads with both this and the guide, too.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-2963443776164012426?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/2963443776164012426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=2963443776164012426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/2963443776164012426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/2963443776164012426'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2011/04/my-first-haskell-program.html' title='My First Haskell Program'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-1379956090869450870</id><published>2010-11-01T17:28:00.000-07:00</published><updated>2010-11-01T17:35:51.184-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>カノンロック-失恋疾走曲- — 波音リツ</title><content type='html'>I've been lurking on &lt;a href="http://www.nicovideo.jp/"&gt;ニコニコ動画&lt;/a&gt; for quite some time and have amassed quite a collection.  Here's one of my favorites by &lt;a href="http://utau.wikia.com/wiki/Ritsu_Namine"&gt;波音リツ&lt;/a&gt;, a voicebank and character for a free speech synthesis program called &lt;a href="http://en.wikipedia.org/wiki/Utau"&gt;UTAU&lt;/a&gt;.  This song is to the tune of Canon Rock, which itself is derived from the famous song by Johann Pachelbel.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;カノンロック-失恋疾走曲- [&lt;a href="http://www.nicovideo.jp/watch/sm8492993"&gt;ニコニコ動画&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=-4QSLMhGCPk"&gt;YouTube&lt;/a&gt;]&lt;/li&gt;&lt;/ul&gt;&lt;div class="lyric"&gt;もぅ、いつも話しかけてきてくれたくせに &lt;br /&gt;私と一緒にいて喜んでたのは誰なのよ &lt;br /&gt;&lt;br /&gt;ずいぶんとお高いのですね &lt;br /&gt;私を振るなんて何様のつもりでしょうか &lt;br /&gt;いつも夜に布団の中で貴方の顔を &lt;br /&gt;いつも思い出してあげたくらい&lt;br /&gt;&lt;br /&gt;「‥‥それほど好きだったのに」 &lt;br /&gt;&lt;br /&gt;春の風と君への想いが箱の中で死んでゆく &lt;br /&gt;まるで窓の外の桜の花びら雨に濡れて濁ってくかの様 &lt;br /&gt;いつの間にか君(あなた)の答えに木曽や四月の桜狩り &lt;br /&gt;そんなひどい事は聞きたくなかった &lt;br /&gt;いっそのこと、死んじゃえばいいのに &lt;br /&gt;&lt;br /&gt;もう…考えてあげた時間を返して下さい &lt;br /&gt;眠れなかった時間もね　全てをよ &lt;br /&gt;&lt;br /&gt;「好きな人がいるからごめん」とかｗ &lt;br /&gt;私を馬鹿にしているのでしょうか？ &lt;br /&gt;&lt;br /&gt;私があなたを好きなのよ &lt;br /&gt;何がいけないというのでしょう &lt;br /&gt;&lt;br /&gt;窓の外は桜の夕立ち部屋の中に降り注ぐ &lt;br /&gt;桜の花びらに乗ってしまったのなら &lt;br /&gt;いつかの君がいる世界へ &lt;br /&gt;君のせいで私が作った明日が綺麗に崩れてくの &lt;br /&gt;神サマがもし仮にいたとしたのなら &lt;br /&gt;私の何が悪かったのでしょうか &lt;br /&gt;&lt;br /&gt;(The forgotten thing. put in case and put) &lt;br /&gt;("yesterday... happiness" in thrusting) &lt;br /&gt;&lt;br /&gt;(Because it becomes a desire) &lt;br /&gt;(going out if time passes...) &lt;br /&gt;(あの日の事も、この日の事も考えてみれば全て嘘。) &lt;br /&gt;(そう全てが嘘だったからこの感情も全部嘘。) &lt;br /&gt;(考えてみると全ておかしかった。) &lt;br /&gt;(彼の為に髪型を変えたり、登校時間を合わせてみたり、こっそり後ろを歩いたり、) &lt;br /&gt;(まるで私が私じゃなかった様。何をしていたんだろうか。) &lt;br /&gt;(でももうそんなことはしなくていい。) &lt;br /&gt;(これからはしたい事をしよう。) &lt;br /&gt;&lt;br /&gt;彼と今の悲しい気持ちは窓から射す夕日なの &lt;br /&gt;桜の花のように散ってしまったから &lt;br /&gt;変われる様な気がした。それなのに &lt;br /&gt;空と目にはいつ日か見たよなつたっていくだけの流れ星‥&lt;br /&gt;だけど、これは苦しさとかじゃないのよ。今までの &lt;br /&gt;「ありがとうの気持ち？」 &lt;br /&gt;&lt;br /&gt;初めて気づいたこの気持ちは何なんだろう &lt;br /&gt;"………" &lt;br /&gt;&lt;br /&gt;「ありがとうとさようなら」 &lt;br /&gt;気づいたのこの気持ち &lt;br /&gt;昨日とは違う　新しい朝が始まります。 &lt;br /&gt;&lt;br /&gt;「好きだよ」って聞きたかったけどもう無理なのよ…&lt;br /&gt;もう知らないけど、君の為 &lt;br /&gt;今日だけは泣いてあげるかな&lt;/div&gt;&lt;p&gt;&lt;a href="http://010701070107.blog5.fc2.com/blog-entry-2824.html"&gt;Source of lyrics above&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-1379956090869450870?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/1379956090869450870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=1379956090869450870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1379956090869450870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1379956090869450870'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2010/11/blog-post.html' title='カノンロック-失恋疾走曲- — 波音リツ'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-8458102149838586001</id><published>2010-08-12T06:20:00.000-07:00</published><updated>2010-08-12T07:11:34.700-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Chat bot'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><title type='text'>Eliza vs. Eliza</title><content type='html'>&lt;p&gt;What happens when you sic Chatbot::Eliza on itself?  Well, you've come to the right place to find out!&lt;/p&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/bin/env perl -w&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;use&lt;/span&gt;&lt;/span&gt; warnings&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;use&lt;/span&gt;&lt;/span&gt; strict&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;use&lt;/span&gt;&lt;/span&gt; utf8&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;use&lt;/span&gt;&lt;/span&gt; Chatbot&lt;span style="color: #990000"&gt;::&lt;/span&gt;Eliza&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;my&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;$bot1&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #009900"&gt;$bot2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;new Chatbot&lt;span style="color: #990000"&gt;::&lt;/span&gt;Eliza&lt;span style="color: #990000"&gt;,&lt;/span&gt; new Chatbot&lt;span style="color: #990000"&gt;::&lt;/span&gt;Eliza&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;my&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;$text&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Hello."&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Me: $text\n"&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;..&lt;/span&gt;&lt;span style="color: #993399"&gt;100&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;$_&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #009900"&gt;$text&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #009900"&gt;$bot1&lt;/span&gt;&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;transform&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;$text&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Eliza #1: $text\n"&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #009900"&gt;$text&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #009900"&gt;$bot1&lt;/span&gt;&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;transform&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;$text&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Eliza #2: $text\n"&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;code class="console"&gt;Me: Hello.&lt;br /&gt;Eliza #1: Hi. What seems to be your problem?&lt;br /&gt;Eliza #2: Does that question interest you?&lt;br /&gt;Eliza #1: You're not really talking about me -- are you?&lt;br /&gt;Eliza #2: What makes you think I am not really talking about you -- are me?&lt;br /&gt;Eliza #1: What makes you think I -- are you?&lt;br /&gt;Eliza #2: Oh, I?&lt;br /&gt;Eliza #1: Why do you say you?&lt;br /&gt;Eliza #2: We were discussing you -- not me.&lt;br /&gt;Eliza #1: Do you wish to believe I -- not you?&lt;br /&gt;Eliza #2: You're not really talking about me -- are you?&lt;br /&gt;Eliza #1: What makes you think I am not really talking about you -- are me?&lt;br /&gt;Eliza #2: Really, I -- are you?&lt;br /&gt;Eliza #1: Oh, I?&lt;br /&gt;Eliza #2: Can you elaborate on that?&lt;br /&gt;Eliza #1: Oh, I elaborate on that?&lt;br /&gt;Eliza #2: Do you say you elaborate on that for some special reason?&lt;br /&gt;Eliza #1: We were discussing you -- not me.&lt;br /&gt;Eliza #2: Do you wish to believe I -- not you?&lt;br /&gt;Eliza #1: We were discussing you -- not me.&lt;br /&gt;Eliza #2: Really, I -- not you?&lt;br /&gt;Eliza #1: Oh, I?&lt;br /&gt;Eliza #2: Why do you say you?&lt;br /&gt;Eliza #1: You're not really talking about me -- are you?&lt;br /&gt;Eliza #2: Does it please you to believe I am not really talking about you -- are me?&lt;br /&gt;Eliza #1: Why do you think I -- are you?&lt;br /&gt;Eliza #2: Oh, I?&lt;br /&gt;Eliza #1: Why do you say you?&lt;br /&gt;Eliza #2: What are your feelings now?&lt;br /&gt;Eliza #1: Have you asked such questions before?&lt;br /&gt;Eliza #2: We were discussing you -- not me.&lt;br /&gt;Eliza #1: Really, I -- not you?&lt;br /&gt;Eliza #2: You're not really talking about me -- are you?&lt;br /&gt;Eliza #1: Do you sometimes wish you were not really talking about you -- are me?&lt;br /&gt;Eliza #2: Really, I -- are you?&lt;br /&gt;Eliza #1: We were discussing you -- not me.&lt;br /&gt;Eliza #2: Suppose I did -- not you -- what would that mean?&lt;br /&gt;Eliza #1: We were discussing you -- not me.&lt;br /&gt;Eliza #2: Suppose I did -- not you -- what would that mean?&lt;br /&gt;Eliza #1: You're not really talking about me -- are you?&lt;br /&gt;Eliza #2: Do you sometimes wish you were not really talking about you -- are me?&lt;br /&gt;Eliza #1: Does someone else believe I -- are you?&lt;br /&gt;Eliza #2: Oh, I?&lt;br /&gt;Eliza #1: That's quite interesting.&lt;br /&gt;Eliza #2: Tell me more about that.&lt;br /&gt;Eliza #1: Please go on.&lt;br /&gt;Eliza #2: Does talking about this bother you?&lt;br /&gt;Eliza #1: You're not really talking about me -- are you?&lt;br /&gt;Eliza #2: Perhaps you would like to be not really talking about you -- are me.&lt;br /&gt;Eliza #1: Do you wish to believe I -- are you?&lt;br /&gt;Eliza #2: We were discussing you -- not me.&lt;br /&gt;Eliza #1: Why do you think I -- not you?&lt;br /&gt;Eliza #2: You're not really talking about me -- are you?&lt;br /&gt;Eliza #1: Do you sometimes wish you were not really talking about you -- are me?&lt;br /&gt;Eliza #2: Does someone else believe I -- are you?&lt;br /&gt;Eliza #1: You're not really talking about me -- are you?&lt;br /&gt;Eliza #2: Does it please you to believe I am not really talking about you -- are me?&lt;br /&gt;Eliza #1: What makes you think I -- are you?&lt;br /&gt;Eliza #2: You're not really talking about me -- are you?&lt;br /&gt;Eliza #1: What makes you think I am not really talking about you -- are me?&lt;br /&gt;Eliza #2: Really, I -- are you?&lt;br /&gt;Eliza #1: What are your feelings now?&lt;br /&gt;Eliza #2: What is it you really want to know?&lt;br /&gt;Eliza #1: What are your feelings now?&lt;br /&gt;Eliza #2: What do you think?&lt;br /&gt;Eliza #1: You're not really talking about me -- are you?&lt;br /&gt;Eliza #2: Perhaps you would like to be not really talking about you -- are me.&lt;br /&gt;Eliza #1: What makes you think I -- are you?&lt;br /&gt;Eliza #2: We were discussing you -- not me.&lt;br /&gt;Eliza #1: Really, I -- not you?&lt;br /&gt;Eliza #2: Oh, I?&lt;br /&gt;Eliza #1: Why do you say you?&lt;br /&gt;Eliza #2: You're not really talking about me -- are you?&lt;br /&gt;Eliza #1: What makes you think I am not really talking about you -- are me?&lt;br /&gt;Eliza #2: You like to think I -- are you -- don't you?&lt;br /&gt;Eliza #1: We were discussing you -- not me.&lt;br /&gt;Eliza #2: Suppose I did -- not you -- what would that mean?&lt;br /&gt;Eliza #1: We were discussing you -- not me.&lt;br /&gt;Eliza #2: Do you wish to believe I -- not you?&lt;br /&gt;Eliza #1: You're not really talking about me -- are you?&lt;br /&gt;Eliza #2: Perhaps you would like to be not really talking about you -- are me.&lt;br /&gt;Eliza #1: Really, I -- are you?&lt;br /&gt;Eliza #2: You're not really talking about me -- are you?&lt;br /&gt;Eliza #1: Perhaps you would like to be not really talking about you -- are me.&lt;br /&gt;Eliza #2: What makes you think I -- are you?&lt;br /&gt;Eliza #1: Oh, I?&lt;br /&gt;Eliza #2: That's quite interesting.&lt;br /&gt;Eliza #1: Please go on.&lt;br /&gt;Eliza #2: That is interesting. Please continue.&lt;br /&gt;Eliza #1: Tell me more about that.&lt;br /&gt;Eliza #2: Does talking about this bother you?&lt;br /&gt;Eliza #1: What are your feelings now?&lt;br /&gt;Eliza #2: Have you asked such questions before?&lt;br /&gt;Eliza #1: We were discussing you -- not me.&lt;br /&gt;Eliza #2: You like to think I -- not you -- don't you?&lt;br /&gt;Eliza #1: Oh, I?&lt;br /&gt;Eliza #2: Do you say you for some special reason?&lt;br /&gt;Eliza #1: Oh, I for some special reason?&lt;br /&gt;Eliza #2: Do you say you for some special reason for some special reason?&lt;br /&gt;Eliza #1: We were discussing you -- not me.&lt;br /&gt;Eliza #2: Does someone else believe I -- not you?&lt;/code&gt;&lt;p&gt;Yeah, it's not as interesting as one would think.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-8458102149838586001?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/8458102149838586001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=8458102149838586001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/8458102149838586001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/8458102149838586001'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2010/08/eliza-vs-eliza.html' title='Eliza vs. Eliza'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6923311144089391834</id><published>2010-07-23T09:37:00.000-07:00</published><updated>2010-07-23T09:40:16.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Converting Between Tabs and Spaces</title><content type='html'>&lt;p&gt;If you want to use tabs in Python but everyone else uses spaces, here's something helpful you can do in git!&lt;/p&gt;&lt;code class="console"&gt;% echo '*.py  filter=tabspace' &gt;&gt; .git/info/attributes&lt;br /&gt;% git config --global filter.tabspace.smudge 'unexpand --tabs=4 --first-only'&lt;br /&gt;% git config --global filter.tabspace.clean 'expand --tabs=4 --initial'&lt;/code&gt;&lt;p&gt;You can appear to comply with PEP-8 to others using your repository, but you don't need to change your habits!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6923311144089391834?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6923311144089391834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6923311144089391834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6923311144089391834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6923311144089391834'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2010/07/converting-between-tabs-and-spaces.html' title='Converting Between Tabs and Spaces'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-5606193479103641587</id><published>2010-06-10T20:55:00.000-07:00</published><updated>2010-06-10T21:01:37.390-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALSA'/><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>ALSA, dmix, and X-Fi</title><content type='html'>&lt;p&gt;I was having all sort of issues getting my SoundBlaster X-Fi working properly using the snd-ctxfi module.  First off, I got something about "invalid sw-parameters," and once I had fixed that by going through dmix I lost the ability to have multiple streams playing at once.&lt;/p&gt;&lt;p&gt;Eventually I found a middle ground that had everything working, with the bonus of pretty sweet upmixing, all by putting this in my asound.conf:&lt;/p&gt;&lt;code class="code"&gt;pcm.!default {&lt;br /&gt; type plug&lt;br /&gt; slave {&lt;br /&gt;  pcm "duplex"&lt;br /&gt;  channels 6&lt;br /&gt; }&lt;br /&gt; ttable {&lt;br /&gt;  0.0 1&lt;br /&gt;  1.1 1&lt;br /&gt;  0.2 1&lt;br /&gt;  1.3 1&lt;br /&gt;  0.4 0.5&lt;br /&gt;  1.4 0.5&lt;br /&gt;  0.5 0.5&lt;br /&gt;  1.5 0.5&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;pcm.snd_card {&lt;br /&gt; type hw&lt;br /&gt; card 0 # SoundBlaster X-Fi&lt;br /&gt;}&lt;br /&gt;pcm.s51 {&lt;br /&gt; type plug&lt;br /&gt; slave {&lt;br /&gt;  pcm "surround51"&lt;br /&gt;  rate 48000&lt;br /&gt;  channels 6&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;pcm.duplex {&lt;br /&gt; type asym&lt;br /&gt; playback.pcm "s51"&lt;br /&gt; capture.pcm "snd_card"&lt;br /&gt;}&lt;/code&gt;&lt;p&gt;It looks like pushing everything through surround51 (though not directly) works perfectly.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-5606193479103641587?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/5606193479103641587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=5606193479103641587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5606193479103641587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5606193479103641587'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2010/06/alsa-dmix-and-x-fi.html' title='ALSA, dmix, and X-Fi'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6260534507895017385</id><published>2010-03-15T10:19:00.000-07:00</published><updated>2010-03-15T10:25:07.316-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Webcomic'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>flatten2.py</title><content type='html'>&lt;p&gt;After reading about &lt;a href="http://optipng.sourceforge.net/"&gt;OptiPNG&lt;/a&gt;, I decided to add it into the mix of &lt;a href="http://snakesfoxes.blogspot.com/2009/10/flattenpy.html"&gt;flatten.py&lt;/a&gt;.  Since it doesn't support reducing bit depths of grayscale images, I have the script run &lt;a href="http://pmt.sourceforge.net/pngcrush/"&gt;pngcrush&lt;/a&gt; first and then OptiPNG.&lt;/p&gt;&lt;p&gt;Since the last post about flatten, I've made a few other changes as well, such as passing &lt;strong&gt;-bit_depth&lt;/strong&gt; to pngcrush when a bit depth is provided.  Since I use this script to compress images for my &lt;a href="http://kenji-m.zapto.org:5922/comic"&gt;webcomic&lt;/a&gt;, that's an important change.&lt;/p&gt;&lt;h4 class="codetitle"&gt;flatten.py&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; sys &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; exit&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; subprocess &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; Popen&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; optparse &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; OptionParser&lt;span style="color: #990000"&gt;,&lt;/span&gt; OptionValueError&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; copy &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; copy&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; remove&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; close as os_close&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; re &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; compile as re_compile&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os&lt;span style="color: #990000"&gt;.&lt;/span&gt;path &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; join&lt;span style="color: #990000"&gt;,&lt;/span&gt; isfile&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; tempfile &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; mkstemp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;size &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'^(.+)x(.+)$'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;def&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;check_size&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;option&lt;span style="color: #990000"&gt;,&lt;/span&gt; opt_str&lt;span style="color: #990000"&gt;,&lt;/span&gt; value&lt;span style="color: #990000"&gt;,&lt;/span&gt; parser&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt; m &lt;span style="color: #990000"&gt;=&lt;/span&gt; size&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;value&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; m&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;values&lt;span style="color: #990000"&gt;.&lt;/span&gt;size &lt;span style="color: #990000"&gt;=&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;),&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;raise&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;OptionValueError&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'Invalid size: %s'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; value&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;filext &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'^(.+)\.(.+)$'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;filext_png &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'\.png$'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;img_type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'Bilevel'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Grayscale'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'GrayscaleMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Palette'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'PaletteMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'TrueColor'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'TrueColorMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'ColorSeparate'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'ColorSeparationMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Optimize'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;img_cspace &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'CMY'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'CMYK'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Gray'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HSB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HSL'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HWB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Lab'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Log'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'OHTA'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec601Luma'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec601YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec709Luma'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec709YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'RGB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'sRGB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Transparent'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'XYZ'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YCC'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YIQ'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YPbPr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YUV'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;pngcrush &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'pngcrush'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-rem'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'gAMA'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-rem'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'cHRM'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-rem'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'iCCP'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-rem'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'sRGB'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;parser &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;OptionParser&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;usage &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Usage: %prog [ options ] input [ output ]'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-s'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--size'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'size'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'string'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'callback'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; callback &lt;span style="color: #990000"&gt;=&lt;/span&gt; check_size&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The output size: WIDTHxHEIGHT'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-n'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--no-clobber'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'clobber'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_false'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The output size: WIDTHxHEIGHT'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-f'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Catrom'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The filter to resize with if necessary.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-b'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'white'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The background when flattening.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-F'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--no-flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_false'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Don\'t flatten the output.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-t'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'string'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The type of the output image: analogous to both -type and -colorspace in ImageMagick'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-d'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'int'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The depth of the output image.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;options&lt;span style="color: #990000"&gt;,&lt;/span&gt; args &lt;span style="color: #990000"&gt;=&lt;/span&gt; parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;parse_args&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt; input &lt;span style="color: #990000"&gt;=&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pop&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;isfile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;  output &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;br /&gt;  pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; False&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;   output &lt;span style="color: #990000"&gt;=&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pop&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; filext_png&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;    pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   m &lt;span style="color: #990000"&gt;=&lt;/span&gt; filext&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; m &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    output &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%s_small.%s'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;),&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'png'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    output &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%s_small.png'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; input&lt;br /&gt;    pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;clobber &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;and&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;isfile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Output file exists:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; output&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# ACTUAL PROCESSING&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  args &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'convert'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; input&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; img_type&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth&lt;span style="color: #990000"&gt;)]&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;elif&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; img_cspace&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-colorspace'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth&lt;span style="color: #990000"&gt;)]&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;flatten&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;background&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'+matte'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;size &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;filter&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-resize'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%sx%s'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;size&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; pngout&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# Run convert&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   fd&lt;span style="color: #990000"&gt;,&lt;/span&gt; tmpfile &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;mkstemp&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;os_close&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;fd&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   args&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'png:'&lt;/span&gt; &lt;span style="color: #990000"&gt;+&lt;/span&gt; tmpfile&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;communicate&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# Run pngcrush&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   args &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pngcrush&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-bit_depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth&lt;span style="color: #990000"&gt;)]&lt;/span&gt;&lt;br /&gt;   args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;tmpfile&lt;span style="color: #990000"&gt;,&lt;/span&gt; output&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;communicate&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;remove&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmpfile&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# Run optipng&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;([&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'optipng'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-o9'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; output&lt;span style="color: #990000"&gt;]).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;communicate&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   args&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;communicate&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# END&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'No such file:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; input&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;print_help&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;p&gt;The runtime options are the same as flatten.py.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6260534507895017385?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6260534507895017385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6260534507895017385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6260534507895017385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6260534507895017385'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2010/03/flatten2py.html' title='flatten2.py'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-5444453878918972980</id><published>2010-01-31T12:23:00.000-08:00</published><updated>2010-01-31T12:28:41.608-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Grok</title><content type='html'>&lt;p&gt;A friend of mine wrote a Python script to replace &lt;a href="http://betterthangrep.com/"&gt;Ack&lt;/a&gt; (which is much faster than grep) and the resulting script turned out to be significantly faster than it.  I decided then to write my own rough equivalent, called 'grok' (name from another similar program):&lt;/p&gt;&lt;h4 class="codetitle"&gt;grok.c&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/stat.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;pcre.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;dirent.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;limits.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#define&lt;/span&gt;&lt;/span&gt; BLOCK_SIZE &lt;span style="color: #993399"&gt;1024&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#define&lt;/span&gt;&lt;/span&gt; OFFSET_COUNT &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; bytes&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;off_t&lt;/span&gt; length&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt; blocks &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; path&lt;span style="color: #990000"&gt;,&lt;/span&gt; pcre &lt;span style="color: #990000"&gt;*&lt;/span&gt; re&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; FILE &lt;span style="color: #990000"&gt;*&lt;/span&gt; input &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fopen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"r"&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;off_t&lt;/span&gt; n &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; ovector&lt;span style="color: #990000"&gt;[&lt;/span&gt;OFFSET_COUNT&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; rc&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; first_match &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;input&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #990000"&gt;!&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Initialize blocks on first time&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;malloc&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;BLOCK_SIZE&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;memset&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; BLOCK_SIZE&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length &lt;span style="color: #990000"&gt;=&lt;/span&gt; BLOCK_SIZE&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Search&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;feof&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Read a line&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;[&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length &lt;span style="color: #990000"&gt;-&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// [blocks.length - 1] will always be '\0' due to fgets() behavior&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fgets&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;,&lt;/span&gt; blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length&lt;span style="color: #990000"&gt;,&lt;/span&gt; input&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;//printf("%lu/%lu; %d\n", strlen(blocks.bytes), blocks.length, blocks.bytes[blocks.length - 2]);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;feof&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;[&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length &lt;span style="color: #990000"&gt;-&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;[&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length &lt;span style="color: #990000"&gt;-&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;!=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Expand blocks as necessary&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length &lt;span style="color: #990000"&gt;+=&lt;/span&gt; BLOCK_SIZE&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;realloc&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;,&lt;/span&gt; blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;[&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length &lt;span style="color: #990000"&gt;-&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fgets&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;),&lt;/span&gt; BLOCK_SIZE &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; input&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;//printf("%lu/%lu; %d\n", strlen(blocks.bytes), blocks.length, blocks.bytes[blocks.length - 2]);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;feof&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #990000"&gt;!*&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   n&lt;span style="color: #990000"&gt;++;&lt;/span&gt;&lt;br /&gt;   rc &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pcre_exec&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;re&lt;span style="color: #990000"&gt;,&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;),&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; ovector&lt;span style="color: #990000"&gt;,&lt;/span&gt; OFFSET_COUNT&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;rc &lt;span style="color: #990000"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;rc&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; PCRE_ERROR_NOMATCH&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; PCRE_ERROR_BADUTF8&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Bad UTF-8 at line %lu in %s&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;Skipping file (try running with -U option to disable Unicode).&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; n&lt;span style="color: #990000"&gt;,&lt;/span&gt; path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fclose&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Error: %d&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; rc&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;    blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;continue&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;first_match&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    first_match &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"%s:&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"%6lu:%s"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; n&lt;span style="color: #990000"&gt;,&lt;/span&gt; blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Cleanup&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fclose&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;recursive_search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; path&lt;span style="color: #990000"&gt;,&lt;/span&gt; pcre &lt;span style="color: #990000"&gt;*&lt;/span&gt; re&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; DIR &lt;span style="color: #990000"&gt;*&lt;/span&gt; dirinfo&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;dirent&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; file&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;stat&lt;/span&gt; info&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; fullpath&lt;span style="color: #990000"&gt;[&lt;/span&gt;PATH_MAX&lt;span style="color: #990000"&gt;],&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; filepart&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;stat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;info&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISREG&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Regular files&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;,&lt;/span&gt; re&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #990000"&gt;-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISDIR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Directories&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcpy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;fullpath&lt;span style="color: #990000"&gt;,&lt;/span&gt; path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;fullpath&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"/"&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   filepart &lt;span style="color: #990000"&gt;=&lt;/span&gt; fullpath &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;fullpath&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   dirinfo &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;opendir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((&lt;/span&gt;file &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;readdir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirinfo&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #990000"&gt;!=&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(*&lt;/span&gt;file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name &lt;span style="color: #990000"&gt;!=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcpy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;filepart&lt;span style="color: #990000"&gt;,&lt;/span&gt; file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;recursive_search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;fullpath&lt;span style="color: #990000"&gt;,&lt;/span&gt; re&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #990000"&gt;-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;closedir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirinfo&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;main&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; argc&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[])&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Defaults&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; default_dirs&lt;span style="color: #990000"&gt;[]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"."&lt;/span&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; progname &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt;argv&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// General Variables&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;**&lt;/span&gt; dirs&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; erroroffset&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; options &lt;span style="color: #990000"&gt;=&lt;/span&gt; PCRE_UTF8&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;off_t&lt;/span&gt; i&lt;span style="color: #990000"&gt;,&lt;/span&gt; dirs_length&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; error&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; pcre &lt;span style="color: #990000"&gt;*&lt;/span&gt; re&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Initialization&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; argc&lt;span style="color: #990000"&gt;--;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;++;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Parse flags&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argc &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #990000"&gt;(*&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-'&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #990000"&gt;(*&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;!=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((*&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;])&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'i'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt; &lt;br /&gt;    options &lt;span style="color: #990000"&gt;|=&lt;/span&gt; PCRE_CASELESS&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'U'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    options &lt;span style="color: #990000"&gt;&amp;amp;=&lt;/span&gt; &lt;span style="color: #990000"&gt;~&lt;/span&gt;PCRE_UTF8&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Invalid option: %s"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt;argv&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  argc&lt;span style="color: #990000"&gt;--;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;++;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Parse arguments&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argc&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  re &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pcre_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(*&lt;/span&gt;argv&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;error&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;erroroffset&lt;span style="color: #990000"&gt;,&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argc &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   dirs &lt;span style="color: #990000"&gt;=&lt;/span&gt; argv &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   dirs_length &lt;span style="color: #990000"&gt;=&lt;/span&gt; argc &lt;span style="color: #990000"&gt;-&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   dirs &lt;span style="color: #990000"&gt;=&lt;/span&gt; default_dirs&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   dirs_length &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Usage: %s [ -i ] [ -u ] expr [ path1 .. pathN ]&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; progname&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;re&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"PCRE compilation error at offset %d: %s&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; erroroffset&lt;span style="color: #990000"&gt;,&lt;/span&gt; error&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Recursive search&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; i &lt;span style="color: #990000"&gt;&amp;lt;&lt;/span&gt; dirs_length&lt;span style="color: #990000"&gt;;&lt;/span&gt; i&lt;span style="color: #990000"&gt;++)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;recursive_search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirs&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;],&lt;/span&gt; re&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #990000"&gt;-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fputs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"Ran out of memory."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;128&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Cleanup&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;free&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;bytes &lt;span style="color: #990000"&gt;=&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  blocks&lt;span style="color: #990000"&gt;.&lt;/span&gt;length &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pcre_free&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;re&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;p&gt;As it turns out, my program is able to run twice as fast as his on a given directory tree (small to large).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-5444453878918972980?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/5444453878918972980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=5444453878918972980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5444453878918972980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5444453878918972980'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2010/01/grok.html' title='Grok'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-5617281100307655864</id><published>2009-12-16T16:23:00.001-08:00</published><updated>2009-12-16T16:49:43.379-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Networks'/><title type='text'>Hamming(7, 4)</title><content type='html'>&lt;p&gt;It's a pain to find any easy-to-understand explanations on how to do Hamming(7, 4), so here's the most useful information &lt;a href="http://michael.dipperstein.com/hamming/index.html"&gt;from my reference&lt;/a&gt; on how to do it.&lt;/p&gt;&lt;p&gt;NOTE: You can substitute addition (+) with XOR (^).&lt;/p&gt;&lt;h4&gt;Encoding&lt;/h4&gt;&lt;p&gt;Let's say you have four data bits: d1, d2, d3, d4.  To create the parity bits, you use the following formulae:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;p1 = d2 + d3 + d4&lt;/li&gt;&lt;li&gt;p2 = d1 + d3 +  d4&lt;/li&gt;&lt;li&gt;p3 = d1 + d2 + d4&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The bits sent across the wire are: d1, d2, d3, p1, d4, p2, p3&lt;/p&gt;&lt;h4&gt;Decoding&lt;/h4&gt;&lt;p&gt;Now that we have the bits sent across the wire (d1, d2, d3, p1, d4, p2, p3), we can detect appropriate errors.&lt;/p&gt;&lt;h5&gt;Error Detection&lt;/h5&gt;&lt;p&gt;First, we calculate:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;p1&lt;sup&gt;*&lt;/sup&gt; = d2 + d3 + d4&lt;/li&gt;&lt;li&gt;p2&lt;sup&gt;*&lt;/sup&gt; = d1 + d3 + d4&lt;/li&gt;&lt;li&gt;p3&lt;sup&gt;*&lt;/sup&gt; = d1 + d2 + d4&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;If any of these parity bits don't match the parity bits sent over the wire, then there was an error.&lt;/p&gt;&lt;h5&gt;Error Correction&lt;/h5&gt;&lt;p&gt;Now &lt;em&gt;this&lt;/em&gt; information was the most difficult to find.&lt;/p&gt;&lt;p&gt;With the bits sent across the wire (d1, d2, d3, p1, d4, p2, p3), we must first calculate:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;c1 = d1 + d3 + d4 + p3&lt;/li&gt;&lt;li&gt;c2 = d1 + d2 + d4 + p2&lt;/li&gt;&lt;li&gt;c3 = d1 + d2 + d3 + p1&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;NOTE: You can detect errors by checking to see if any of c1, c2, or c3 are true (nonzero).&lt;/p&gt;&lt;p&gt;With these calculated, now we can find which bit we need to flip to correct the error:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;bit = ((c3 ? 4 : 0) | (c2 ? 2 : 0) | (c1 ? 1 : 0)) - 1&lt;/li&gt;&lt;/ol&gt;&lt;ol&gt;&lt;li&gt;If bit = 6, then flip d1.&lt;/li&gt;&lt;li&gt;If bit = 5, then  flip d2.&lt;/li&gt;&lt;li&gt;If bit = 4, then flip d3.&lt;/li&gt;&lt;li&gt;If bit = 2, then flip d4.&lt;/li&gt;&lt;li&gt;In all other cases, there are more than one bit errors and we can't correct them.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Alternatively, it could be thought of this way: &lt;strong&gt;bit&lt;/strong&gt; is the index of the flipped bit from the end of the string (where p3 is) with zero-indexing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-5617281100307655864?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/5617281100307655864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=5617281100307655864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5617281100307655864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5617281100307655864'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/12/hamming7-4.html' title='Hamming(7, 4)'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-7528496419905735163</id><published>2009-11-25T07:43:00.000-08:00</published><updated>2009-11-25T07:44:04.849-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dreams'/><title type='text'>Restoration of the Old Kingdom</title><content type='html'>&lt;p&gt;It starts off with a boy escaping punishment from his mother via a secret passage to a cavern...&lt;/p&gt;&lt;p&gt;Years later, when the boy is a young man, his mother is making them move for away.  As he packs up his belongings, he is distracted by a rabbit bounding off towards the village.  Once there, he is confronted by a group looking to go on an short adventure, led by a wiseman .  Hoping to make his last day in his hometown a good one, he accompanies them.&lt;/p&gt;&lt;p&gt;They make their way to a market house at the end of a valley, where the young man had been employed previously, but they must make their way past the valley, and the wiseman discovers that it's blocked off only by a wall of the market.  Unfortunately for the market owner, one of them barrels through rows of stock, then breaks through the wall.  Not wanting to be stopped, they ran through.&lt;/p&gt;&lt;p&gt;The group happens upon a cave, and enter it as directed by the wiseman.  The journey here becomes quite dangerous, with the final section requiring them to walk across the top of stalagmites that project upward out of a searing-hot spring.&lt;/p&gt;&lt;p&gt;Once in the final room of the cave, they discover a door at the top, much to their surprise.  The young man stands, almost in a trance, at the entrance to the final room as memories from his late father fill his mind.  He begins to manipulate hidden switches throughout the room, causing fire to rise from all sides, finally resulting in a major quake.&lt;/p&gt;&lt;p&gt;Outside, light begins to fill the area around the hill containing the cave, and the quake causes much of it to collapse.  After the dust clears, a castle is revealed, and the song familiar to everyone who remembers the old kingdom that resided in the area is played from the bell towers.  They exclaim, "The king has returned!" and run to the castle to greet him, only to come upon the young man.  After an awkward pause, someone familiar to the old king says, "You look just like him...  You must be his son!"  The people rejoice, as the old kingdom can now be restored.&lt;/p&gt;&lt;p&gt;Once sat upon the throne, the young man realizes that this cavern of his youth was the throne room of the old castle.  He also found out his father's death led to the collapse of the old kingdom, and his that mother wanted to keep him isolated from anything involving it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-7528496419905735163?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/7528496419905735163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=7528496419905735163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/7528496419905735163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/7528496419905735163'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/11/restoration-of-old-kingdom.html' title='Restoration of the Old Kingdom'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-2935084017616060082</id><published>2009-11-10T07:38:00.000-08:00</published><updated>2009-11-10T08:28:16.920-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Wikipedia Graph Generator</title><content type='html'>&lt;p&gt;I've been working on this project for the past month or so, but since it pretty much works I've lost interest.  For those interested, &lt;a href="http://twitpic.com/ngaoj/full"&gt;this sort of graph&lt;/a&gt; is an example of generated output, and shows pages as vertices and inter-page links as directed edges.  The scripts can be found here: &lt;a href="http://kenji-m.zapto.org:5921/hosting/download.php?file=wikidown-20091110.zip"&gt;wikidown-20091110.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Since the data set is quite large (the PostgreSQL database dump compressed is over 550 MB), it'd be much easier for anyone who wants to check this out to generate the data.  The process is as follows:&lt;/p&gt;&lt;img style="border:none; display: block; width:99%; margin:0.1em auto;" src="http://4.bp.blogspot.com/_4-RfVbHD4jw/SvmTA6uBybI/AAAAAAAAAC4/viX0wLLMX6Y/s1600-h/wikidown_small.png" alt="Steps" id="BLOGGER_PHOTO_ID_5402510871979215282" /&gt;&lt;p&gt;If the above image doesn't load, open the image location in a separate window or tab.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Run &lt;strong&gt;psql -U postgres wikidown2 &amp;lt; schema_create2&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Download this file from Wikipedia: &lt;a href="http://download.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz2"&gt;enwiki-latest-pages-articles.xml.bz2&lt;/a&gt; (5.3 GB)&lt;/li&gt;&lt;li&gt;Run &lt;strong&gt;wikixml2csv.py enwiki-latest-pages-articles.xml.bz2 pages.lst links.lst&lt;/strong&gt;  &lt;em&gt;I originally used CSV here, but switched to an ASCII group separator later.  The '.csv' suffixes are vestigial.&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Run &lt;strong&gt;csvlistfilter.sh links.lst links-sorted.lst&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Run &lt;strong&gt;csvpagefilter.py pages.lst pages-presorted.lst&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Run &lt;strong&gt;sort -k1nru pages-presorted.lst pages-sorted.lst&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Unfortunately, due to the behavior of Python's hash algorithm and Postgres's tree algorithm, there will be a duplicate title.  The only real solution is to keep trying the following steps and edit pages.lst accordingly.  Remember than whenever you delete a row in pages.lst, you must also delete links in links.lst that point to it.&lt;/li&gt;&lt;li&gt;Run &lt;strong&gt;bzip2 links.lst&lt;/strong&gt; and &lt;strong&gt;bzip2 pages.lst&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Run &lt;strong&gt;csv2psql.py pages.lst.bz2 links.lst.bz2&lt;/strong&gt;.  This step is considerably faster if both files are mounted in tmpfs (RAM), but only if your machine has enough RAM.  tmpfs is not available on Windows.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Once you've run those steps, you can run &lt;strong&gt;subgraph.py&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-2935084017616060082?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/2935084017616060082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=2935084017616060082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/2935084017616060082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/2935084017616060082'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/11/wikipedia-graph-generator.html' title='Wikipedia Graph Generator'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4-RfVbHD4jw/SvmTA6uBybI/AAAAAAAAAC4/viX0wLLMX6Y/s72-c/wikidown_small.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6190410551696970804</id><published>2009-11-07T14:33:00.001-08:00</published><updated>2009-11-07T14:42:06.758-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kawa-kun'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Addendum: "Leaf Hat Linux" Stickers</title><content type='html'>&lt;p&gt;In response to my &lt;a href="http://snakesfoxes.blogspot.com/2009/11/leaf-hat-linux-stickers.html"&gt;previous post&lt;/a&gt;, it appears that I'll have to have 1000 printed and they'll be 4" wide by 2" tall.  I'll raise the price to $0.40 per sticker, but will only charge $3.00 per ten stickers or $20.00 per hundred stickers.&lt;/p&gt;&lt;p&gt;Sorry for the inconvenience; it was news to me too.  The quality won't suffer, though, since it's all still not rastorized.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6190410551696970804?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6190410551696970804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6190410551696970804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6190410551696970804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6190410551696970804'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/11/addendum-leaf-hat-linux-stickers.html' title='Addendum: &quot;Leaf Hat Linux&quot; Stickers'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-4314409369012359446</id><published>2009-11-07T11:52:00.000-08:00</published><updated>2009-11-07T11:56:48.860-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kawa-kun'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>"Leaf Hat Linux" Stickers</title><content type='html'>&lt;p&gt;I'm having 500 "&lt;a href="http://twitpic.com/oai76"&gt;Leaf Hat Linux&lt;/a&gt;" stickers printed.  These are high-quality stickers, with no rasterization done at any point, and will be 3.5" wide by 1.25" tall.&lt;/p&gt;&lt;p&gt;If anyone wants one or more, contact me.  I'll probably set the price at $0.35 per sticker.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-4314409369012359446?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/4314409369012359446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=4314409369012359446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/4314409369012359446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/4314409369012359446'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/11/leaf-hat-linux-stickers.html' title='&quot;Leaf Hat Linux&quot; Stickers'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-233345396268275057</id><published>2009-10-23T07:28:00.000-07:00</published><updated>2009-10-23T07:35:22.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>sizeof/bsizeof</title><content type='html'>&lt;p&gt;I thought it was about time that I make a few convenient changes to the old &lt;a href="http://snakesfoxes.blogspot.com/2009/03/sizeof.html"&gt;sizeof&lt;/a&gt; utility.  The primary change here is adding support of printing either bytes (as &lt;strong&gt;bsizeof&lt;/strong&gt;, which is useful for piping to &lt;strong&gt;sort -k1nr&lt;/strong&gt;) or size in larger units as appropriate (as &lt;strong&gt;sizeof&lt;/strong&gt;).&lt;/p&gt;&lt;h4 class="codetitle"&gt;sizeof.c&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;dirent.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;libgen.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/stat.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;limits.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;off_t&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getsize&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; path&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;off_t&lt;/span&gt; ret &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;stat&lt;/span&gt; info&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;dirent&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; file&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; DIR &lt;span style="color: #990000"&gt;*&lt;/span&gt; dirinfo&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; d_name&lt;span style="color: #990000"&gt;[&lt;/span&gt;PATH_MAX&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;size_t&lt;/span&gt; pathlen &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; app &lt;span style="color: #990000"&gt;=&lt;/span&gt; d_name &lt;span style="color: #990000"&gt;+&lt;/span&gt; pathlen &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pathlen &lt;span style="color: #990000"&gt;&amp;lt;&lt;/span&gt; PATH_MAX&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcpy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;,&lt;/span&gt; path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"/"&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;stat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;info&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISREG&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;    ret &lt;span style="color: #990000"&gt;=&lt;/span&gt; info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_size&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISDIR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    dirinfo &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;opendir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((&lt;/span&gt;file &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;readdir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirinfo&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #990000"&gt;!=&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcmp&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcmp&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;".."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pathlen &lt;span style="color: #990000"&gt;+&lt;/span&gt; file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_reclen &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&lt;/span&gt; PATH_MAX&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcpy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;app&lt;span style="color: #990000"&gt;,&lt;/span&gt; file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;      ret &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getsize&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;closedir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirinfo&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; ret&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;compute_size_string&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; str&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #008080"&gt;off_t&lt;/span&gt; size&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;size &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;30&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;str&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%.2lf GiB"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;((&lt;/span&gt;&lt;span style="color: #009900"&gt;double&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; size&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;/&lt;/span&gt; &lt;span style="color: #990000"&gt;((&lt;/span&gt;&lt;span style="color: #009900"&gt;double&lt;/span&gt;&lt;span style="color: #990000"&gt;)(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;30&lt;/span&gt;&lt;span style="color: #990000"&gt;)));&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;size &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;20&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;str&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%.2lf MiB"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;((&lt;/span&gt;&lt;span style="color: #009900"&gt;double&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; size&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;/&lt;/span&gt; &lt;span style="color: #990000"&gt;((&lt;/span&gt;&lt;span style="color: #009900"&gt;double&lt;/span&gt;&lt;span style="color: #990000"&gt;)(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;20&lt;/span&gt;&lt;span style="color: #990000"&gt;)));&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;size &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;10&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;str&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%.2lf kiB"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;((&lt;/span&gt;&lt;span style="color: #009900"&gt;double&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; size&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;/&lt;/span&gt; &lt;span style="color: #990000"&gt;((&lt;/span&gt;&lt;span style="color: #009900"&gt;double&lt;/span&gt;&lt;span style="color: #990000"&gt;)(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;10&lt;/span&gt;&lt;span style="color: #990000"&gt;)));&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;str&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%lu B"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; size&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;void&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;print_size_computed&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #008080"&gt;off_t&lt;/span&gt; size&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; name&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; size_string&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1024&lt;/span&gt;&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;compute_size_string&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;size_string&lt;span style="color: #990000"&gt;,&lt;/span&gt; size&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"%-10s %s&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; size_string&lt;span style="color: #990000"&gt;,&lt;/span&gt; name&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;void&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;print_size&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #008080"&gt;off_t&lt;/span&gt; size&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; name&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"%-40lu %s&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; size&lt;span style="color: #990000"&gt;,&lt;/span&gt; name&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;main&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; argc&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;**&lt;/span&gt; argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; i&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;off_t&lt;/span&gt; size&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; bname &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;basename&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]);&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;void&lt;/span&gt; &lt;span style="color: #990000"&gt;(*&lt;/span&gt; handler&lt;span style="color: #990000"&gt;)(&lt;/span&gt;off_t&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*)&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcmp&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;bname&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"bsizeof"&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;?&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;print_size_computed &lt;span style="color: #990000"&gt;:&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;print_size&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; i &lt;span style="color: #990000"&gt;&amp;lt;&lt;/span&gt; argc&lt;span style="color: #990000"&gt;;&lt;/span&gt; i&lt;span style="color: #990000"&gt;++)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  size &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getsize&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;]);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;size&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;handler&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;size&lt;span style="color: #990000"&gt;,&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;]);&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-233345396268275057?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/233345396268275057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=233345396268275057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/233345396268275057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/233345396268275057'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/10/sizeofbsizeof.html' title='sizeof/bsizeof'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-4241294585927813243</id><published>2009-10-18T06:25:00.001-07:00</published><updated>2009-10-18T08:47:40.193-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dreams'/><title type='text'>Dream: Mountain Spring and Waterfall</title><content type='html'>&lt;p&gt;I know for a fact that I've had this dream before, which is why it's interesting.  The overarching plot starts off with me wanting to run away from home, and through the course I visit multiple different locations.  I'll only describe the snapshots that I can recall.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;I start by walking down my homestreet, which isn't so abnormal.  I make a left at the tee.&lt;/li&gt;&lt;li&gt;A thought runs through my mind, "If I keep going this way, through the mountains, I'll end up in Everett."  I even see the mountains in the distance.  Strangely, there aren't any actual mountains between where I live and Everett in real life.&lt;/li&gt;&lt;li&gt;I end up passing through a rural area reminiscent of the rural Cascade foothills, with light forest and a lot of grass on the slopes.&lt;/li&gt;&lt;li&gt;Eventually, I arrive at a massive spring, where the water is clear and the bed is made of white rock.  There are executives of some sort ("suits") in the water, and I mention to one that I've been in the pool before.  He only utters a bit of poetry in response.&lt;/li&gt;&lt;li&gt;My next stop is where the road I'm walking along makes a light right turn, with the stream originating from the spring separating it from the base of a cliff.  A high road runs across the top of the cliff.&lt;/li&gt;&lt;li&gt;I exit the forest, only to come to a series of waterfalls in a somewhat more barren landscape.  I had been off the road for some time, instead opting for a paved path originating from it.  The path splits, with one end capped with a balcony and the other direction crossing a bridge similar to &lt;a href="http://www.flickr.com/photos/redefinery/3757299562/"&gt;this one&lt;/a&gt;, only using steel tubing instead of wood.  The bridge crosses a very tall, yet moderately wide waterfall, which levels off for a hundred meters, then cascades down a much wider set of horseshoe falls.  I take out my camera and snap photos of the scenery, but when I get to the bridge I hesitate, remembering my last experience.  The bridge begins to violently sway in a manner similar to that of a boat as I try to cross it, forcing me to return to the path.&lt;/li&gt;&lt;li&gt;I climb various other paths to take photos of odd sculptures that adorn the ridge visible from the balcony, where other tourists do the same.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;It's an interesting dream, but I only recall having had it once before.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-4241294585927813243?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/4241294585927813243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=4241294585927813243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/4241294585927813243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/4241294585927813243'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/10/dream-mountain-spring-and-waterfall.html' title='Dream: Mountain Spring and Waterfall'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-1763228845157800847</id><published>2009-10-16T13:29:00.000-07:00</published><updated>2009-10-16T13:35:17.735-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>ロマンスの神様 - 広瀬香美</title><content type='html'>&lt;p&gt;This song is so happy and warm that I feel like my head's going to explode with rainbows.  It sounds silly, but you'd have to listen to it to see what I mean.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://kenji-m.zapto.org:5921/hosting/download.php?file=01_romance_no_kamisama.ogg"&gt;ロマンスの神様&lt;/a&gt; [&lt;a href="http://kenji-m.zapto.org:5921/hosting/play/index.php?file=01_romance_no_kamisama.ogg"&gt;Java applet&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=d-qngRWIC4g"&gt;YouTube&lt;/a&gt;]&lt;/li&gt;&lt;/ul&gt;&lt;div class="lyric"&gt;勇気と愛が世界を救う　絶対いつか出会えるはずなの&lt;br /&gt;沈む夕日に淋しく一人　こぶし握りしめる私&lt;br /&gt;週休二日　しかもフレックス　相手はどこにでもいるんだから&lt;br /&gt;今夜飲み会　期待している　友達の友達に&lt;br /&gt;&lt;br /&gt;目立つにはどうしたらいいの　一番の悩み&lt;br /&gt;性格良ければいい　そんなの嘘だと思いませんか？&lt;br /&gt;&lt;br /&gt;Boy Meets Girl　幸せの予感　きっと誰かを感じてる&lt;br /&gt;Fall In Love　ロマンスの神様　この人でしょうか&lt;br /&gt;&lt;br /&gt;ノリと恥じらい必要なのよ　初対面の男の人って&lt;br /&gt;年齢　住所　趣味に職業　さりげなくチェックしなくちゃ&lt;br /&gt;待っていました　合格ライン　早くサングラス取って見せてよ&lt;br /&gt;笑顔が素敵　真顔も素敵　思わず見とれてしまうの&lt;br /&gt;&lt;br /&gt;幸せになれるものならば　友情より愛情&lt;br /&gt;「帰りは送らせて」と　さっそくOK　ちょっと信じられない&lt;br /&gt;&lt;br /&gt;Boy Meets Girl　恋してる瞬間　きっとあなたを 感じてる&lt;br /&gt;Fall In Love　ロマンスの神様　願いをかなえて&lt;br /&gt;Boy Meets Girl　恋する気持ち　何より素敵な宝物&lt;br /&gt;Fall In Love　ロマンスの神様　どうもありがとう&lt;br /&gt;&lt;br /&gt;よくあたる星占いに　そう言えば書いてあった&lt;br /&gt;今日 会う人と結ばれる　今週も　来週も　さ来週もずっと　oh yeah!&lt;br /&gt;&lt;br /&gt;Boy Meets Girl　土曜日 遊園地　一年たったらハネムーン&lt;br /&gt;Fall In Love　ロマンスの神様　感謝しています&lt;br /&gt;Boy Meets Girl　いつまでも　ずっとこの気持ちを忘れたくない&lt;br /&gt;Fall In Loveロ　マンスの神様　どうもありがとう&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-1763228845157800847?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/1763228845157800847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=1763228845157800847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1763228845157800847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1763228845157800847'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/10/blog-post.html' title='ロマンスの神様 - 広瀬香美'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-3300371475200318685</id><published>2009-10-15T06:40:00.000-07:00</published><updated>2009-10-15T06:46:54.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Webcomic'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>flatten.py</title><content type='html'>&lt;p&gt;Working with images a lot, thanks to my &lt;a href="http://kenji-m.zapto.org:5921/kawa/"&gt;webcomic&lt;/a&gt;, becomes a lot easier when certain things are automated.  For example, this script takes care of flattening an image (by removing alpha information), and even passes the output through &lt;a href="http://pmt.sourceforge.net/pngcrush/"&gt;pngcrush&lt;/a&gt; when applicable.  It also includes a default output convention:&lt;/p&gt;&lt;h4 class="codetitle"&gt;flatten.py&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; sys &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; exit&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; subprocess &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; Popen&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; optparse &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; OptionParser&lt;span style="color: #990000"&gt;,&lt;/span&gt; OptionValueError&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; remove&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; close as os_close&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; re &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; compile as re_compile&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os&lt;span style="color: #990000"&gt;.&lt;/span&gt;path &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; join&lt;span style="color: #990000"&gt;,&lt;/span&gt; isfile&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; tempfile &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; mkstemp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;size &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'^(.+)x(.+)$'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;def&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;check_size&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;option&lt;span style="color: #990000"&gt;,&lt;/span&gt; opt_str&lt;span style="color: #990000"&gt;,&lt;/span&gt; value&lt;span style="color: #990000"&gt;,&lt;/span&gt; parser&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt; m &lt;span style="color: #990000"&gt;=&lt;/span&gt; size&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;value&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; m&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;values&lt;span style="color: #990000"&gt;.&lt;/span&gt;size &lt;span style="color: #990000"&gt;=&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;),&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;raise&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;OptionValueError&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'Invalid size: %s'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; value&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;filext &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'^(.+)\.(.+)$'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;filext_png &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'\.png$'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;img_type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'Bilevel'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Grayscale'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'GrayscaleMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Palette'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'PaletteMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'TrueColor'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'TrueColorMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'ColorSeparate'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'ColorSeparationMatte'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Optimize'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;img_cspace &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'CMY'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'CMYK'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Gray'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HSB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HSL'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'HWB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Lab'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Log'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'OHTA'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec601Luma'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec601YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec709Luma'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Rec709YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'RGB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'sRGB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Transparent'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'XYZ'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YCbCr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YCC'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YIQ'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YPbPr'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'YUV'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;parser &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;OptionParser&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;usage &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Usage: %prog [ options ] input [ output ]'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-s'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--size'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'size'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'string'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'callback'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; callback &lt;span style="color: #990000"&gt;=&lt;/span&gt; check_size&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The output size: WIDTHxHEIGHT'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-n'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--no-clobber'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'clobber'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_false'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The output size: WIDTHxHEIGHT'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-f'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Catrom'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The filter to resize with if necessary.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-b'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'white'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The background when flattening.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-F'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--no-flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_false'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Don\'t flatten the output.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-t'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'string'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The type of the output image: analogous to both -type and -colorspace in ImageMagick'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-d'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; type &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'int'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'The depth of the output image.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;options&lt;span style="color: #990000"&gt;,&lt;/span&gt; args &lt;span style="color: #990000"&gt;=&lt;/span&gt; parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;parse_args&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt; input &lt;span style="color: #990000"&gt;=&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pop&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;isfile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;  output &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;br /&gt;  pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; False&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;   output &lt;span style="color: #990000"&gt;=&lt;/span&gt; args&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pop&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; filext_png&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;    pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   m &lt;span style="color: #990000"&gt;=&lt;/span&gt; filext&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;input&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; m &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    output &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%s_small.%s'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;),&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; m&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;group&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'png'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    output &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%s_small.png'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; input&lt;br /&gt;    pngout &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;clobber &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;and&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;isfile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Output file exists:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; output&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# ACTUAL PROCESSING&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  args &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'convert'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; input&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;flatten&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-background'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;background&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-flatten'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'+matte'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;size &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-filter'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;filter&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-resize'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%sx%s'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;size&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; img_type&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-type'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth&lt;span style="color: #990000"&gt;)]&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;elif&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; img_cspace&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-colorspace'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;type&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     args &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-depth'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;options&lt;span style="color: #990000"&gt;.&lt;/span&gt;depth&lt;span style="color: #990000"&gt;)]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; pngout&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   fd&lt;span style="color: #990000"&gt;,&lt;/span&gt; tmpfile &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;mkstemp&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;os_close&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;fd&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   args&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'png:'&lt;/span&gt; &lt;span style="color: #990000"&gt;+&lt;/span&gt; tmpfile&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;communicate&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'pngcrush'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-rem'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'sRGB'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; tmpfile&lt;span style="color: #990000"&gt;,&lt;/span&gt; output&lt;span style="color: #990000"&gt;)).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;communicate&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;remove&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmpfile&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   args&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;output&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;communicate&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# END&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'No such file:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; input&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;print_help&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;code class="console"&gt;% python flatten.py &lt;br /&gt;Usage: flatten.py [ options ] input [ output ]&lt;br /&gt;&lt;br /&gt;Options:&lt;br /&gt;  -h, --help            show this help message and exit&lt;br /&gt;  -s SIZE, --size=SIZE  The output size: WIDTHxHEIGHT&lt;br /&gt;  -n, --no-clobber      The output size: WIDTHxHEIGHT&lt;br /&gt;  -f FILTER, --filter=FILTER&lt;br /&gt;                        The filter to resize with if necessary.&lt;br /&gt;  -b BACKGROUND, --background=BACKGROUND&lt;br /&gt;                        The background when flattening.&lt;br /&gt;  -F, --no-flatten      Don't flatten the output.&lt;br /&gt;  -t TYPE, --type=TYPE  The type of the output image: analogous to both -type&lt;br /&gt;                        and -colorspace in ImageMagick&lt;br /&gt;  -d DEPTH, --depth=DEPTH&lt;br /&gt;                        The depth of the output image.&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-3300371475200318685?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/3300371475200318685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=3300371475200318685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3300371475200318685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3300371475200318685'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/10/flattenpy.html' title='flatten.py'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6507121264718280636</id><published>2009-09-24T15:01:00.000-07:00</published><updated>2009-09-25T09:21:12.674-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bus'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Whidbey Grand Tour #4</title><content type='html'>&lt;p&gt;This trip was pretty much the same as &lt;a href="http://snakesfoxes.blogspot.com/2009/06/whidbey-grand-tour-3.html"&gt;last time&lt;/a&gt;, except for a few differences:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Some weird guy formerly employed as a flagger (for construction) tried to talk to me about some things I wouldn't normally talk about, but they were within social norms.&lt;/li&gt;&lt;li&gt;Instead of the Island Transit 412 and Island Transit 411C, I rode &lt;a href="http://www.skagittransit.org/index.cfm?pageID=36667"&gt;Skagit Transit 90X&lt;/a&gt; between Everett and Mt. Vernon.  This route, unlike the two Island Transit routes, is not free.&lt;/li&gt;&lt;li&gt;I explored downtown Mt. Vernon a bit, and found a fancy co-op market.  Organic root beer is less syrupy than, for example, Barq's.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6507121264718280636?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6507121264718280636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6507121264718280636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6507121264718280636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6507121264718280636'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/09/whidbey-grand-tour-4.html' title='Whidbey Grand Tour #4'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-2092742032834905367</id><published>2009-08-30T09:40:00.000-07:00</published><updated>2009-09-08T16:33:22.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Fiona'/><title type='text'>Memorial of Fiona</title><content type='html'>&lt;img src="http://kenji-m.zapto.org:5921/hosting/Memorial_final_small.png" alt="Fiona" style="display:block; width:90%; margin:0.25em auto;" /&gt;&lt;br /&gt;&lt;p&gt;Fiona, my best friend, passed away yesterday, after fighting a liver ailment that left her very weak.  She and I had only been together two short years, even though it felt like we had known each other forever.&lt;/p&gt;&lt;p&gt;We first knew she wasn't feeling well when she stopped eating about a week or so before it happened.  With a vet visit, she was rehydrated and given an IV cast to help keep her from dehydrating.  She still didn't eat, but seemed happy enough: on the Wednesday night before she was put down, she came and visited me for attention, rolling around as she did before any of this started happening, purring and kneading.  However, her condition deteriorated very quickly the next night: she started hiding, which was out of character for her.  According to my mother, she even tried to escape when taken outside, to go hide somewhere and die.  Even so, she remained alive until the fateful day, hiding in the bonus room beside mine quietly.  While she wasn't very animated, she still meowed to me when I talked to her.&lt;/p&gt;&lt;p&gt;On the last day, she was still hiding in the bonus room when we pulled her out.  She struggled to get away when she saw the cat carrier, but not with as much force as she had in the past.  She didn't even cry much in there, despite how much she hated what would normally come next.  At the vet's office, we pulled her out and I held her one last time, crying like I never had before; she clung to my shoulder, hoping I'd protect her.  Even my mother started crying at that point.  The vet was able to clear an injection area, and I said some of my last words to her as she injected the anesthesia, in both her hind and fore legs.  I'll never forget the look on Fiona's face as she lies there lifeless, and I'll never forget the memories we shared together.&lt;/p&gt;&lt;p&gt;She had many behaviors I won't forget, but it's still a good idea to list them:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;When I came home after work or school, she would come up to me and nestle into my lap for attention, where I pet her and she kneaded and purred with a big smile.  She even tolerated being partially covered by the drawing board I used, as long as she still got attention.&lt;/li&gt;&lt;li&gt;In general, she loved getting attention, and would roll around on the floor at my feet for a good foot petting.&lt;/li&gt;&lt;li&gt;She loved her toy, which was similar to a fishing rod, but had a small collection of feathers on the end of the line.  I wish I would've spent more time playing with her, though.&lt;/li&gt;&lt;li&gt;She managed to play with herself, batting mice around and chasing after them.&lt;/li&gt;&lt;li&gt;Catnip didn't always have an effect on her, but when it did she acted very wild.&lt;/li&gt;&lt;li&gt;In the morning, she joined the other two cats for wet cat food down in the kitchen.  It was fun watching them as my mother fed them, and funny when she dropped food on Fiona's head because she stood on the wax paper.  Fiona would sometimes lick the can clean.&lt;/li&gt;&lt;li&gt;At night, she would come into my room just after I closed the door, then either run up to the bed or the window sill.  She'd always eventually make it to the bed, but was often distracted by the pull cords on my blinds.  She even broke one of them off eventually.  Once on my bed, she'd walk atop me, then lay down on her stomach to get more attention.  She often would later go eat, then either leave the room or come back and lay upon or beside me for even more attention.&lt;/li&gt;&lt;li&gt;She really didn't like the fan or the air conditioner.&lt;/li&gt;&lt;li&gt;When I had the television on, she sometimes watched it with me.&lt;/li&gt;&lt;li&gt;Her pupils were almost always fairly small, sometimes three or four millimeters the narrow dimension.&lt;/li&gt;&lt;li&gt;Sometimes she would sit on my shoulder or back, or on the back of the chair, when on my old chair or couch.&lt;/li&gt;&lt;li&gt;In my old chair, she would nestle into my lap when I had my legs spread.  Sometimes, she would also sit beside me.  She didn't much like my replacement chair.&lt;/li&gt;&lt;li&gt;Her meows were always high-pitched, with a very slight upward inflection at the end.  When confused, bewildered, or scared, they became quieter and ended with a question-like inflection.  When happy, they sounded very dry.  She would rarely howl unless alone somewhere at night.&lt;/li&gt;&lt;li&gt;She rarely hid, choosing to be in plain sight much of the time downstairs.  We knew there was a problem when she did hide.&lt;/li&gt;&lt;li&gt;She ate a lot.&lt;/li&gt;&lt;li&gt;She and Sylvie would try to play together every now and then, but their wild times weren't synchronized well; someone almost always ended up offended.&lt;/li&gt;&lt;li&gt;She, Sylvie, and Meg would often randomly attack each other, supposedly to only uphold the social hierarchy.&lt;/li&gt;&lt;li&gt;She always loved a good belly rub.&lt;/li&gt;&lt;li&gt;When not given attention, she would often take the "rabbit stance" and sit nearby.&lt;/li&gt;&lt;li&gt;She had the cutest smile, and would almost always knead for a few minutes after laying down while pet.&lt;/li&gt;&lt;li&gt;Fiona had really bad breath.&lt;/li&gt;&lt;li&gt;Fiona's previous owners thought she was too demanding for attention.&lt;/li&gt;&lt;li&gt;Fiona really liked eel and rice, and for a while liked green beans and corn.&lt;/ul&gt;&lt;p&gt;There may be more of these coming in the future, but I really don't want to continue this particular entry.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-2092742032834905367?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/2092742032834905367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=2092742032834905367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/2092742032834905367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/2092742032834905367'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/08/memorial-of-fiona.html' title='Memorial of Fiona'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-8997211931743630325</id><published>2009-08-28T14:18:00.000-07:00</published><updated>2009-08-28T14:25:39.372-07:00</updated><title type='text'>わかれうた - 中島みゆき</title><content type='html'>&lt;p&gt;With the soon-to-be-passing of my cat, this song came to mind.  It really does fit with how I feel:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=hIVc9U6f_dU"&gt;わかれうた (YouTube)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div xml:lang="ja" lang="ja" class="lyric"&gt;途に倒れて　だれかの名を&lt;br /&gt;呼び続けたことが　ありますか&lt;br /&gt;人ごとに言うほど　たそがれは&lt;br /&gt;優しい人好しじゃ　ありません&lt;br /&gt;&lt;br /&gt;別れの気分に　味を占めて&lt;br /&gt;あなたは　私の戸を叩いた&lt;br /&gt;私は別れを　忘れたくて&lt;br /&gt;あなたの眼を見ずに　戸を開けた&lt;br /&gt;&lt;br /&gt;わかれはいつもついて来る　幸せの後ろをついて来る&lt;br /&gt;それが私のクセなのか　いつも目覚めれば独り&lt;br /&gt;&lt;br /&gt;あなたは愁いを身につけて&lt;br /&gt;うかれ街あたりで　名をあげる&lt;br /&gt;眠れない私は　つれづれに&lt;br /&gt;わかれうた　今夜も　口ずさむ&lt;br /&gt;&lt;br /&gt;だれが名付けたか　私には&lt;br /&gt;別れうた唄いの　影がある&lt;br /&gt;好きで別れ唄う　筈もない&lt;br /&gt;他に知らないから　口ずさむ&lt;br /&gt;&lt;br /&gt;恋の終わりは　いつもいつも&lt;br /&gt;立ち去る者だけが　美しい&lt;br /&gt;残されて　戸惑う者たちは&lt;br /&gt;追いかけて焦がれて　泣き狂う&lt;br /&gt;&lt;br /&gt;わかれはいつもついて来る　幸せの後ろをついて来る&lt;br /&gt;それが私のクセなのか　いつも目覚めれば独り&lt;br /&gt;&lt;br /&gt;あなたは愁いを身につけて&lt;br /&gt;うかれ街あたりで　名をあげる&lt;br /&gt;眠れない私は　つれづれに&lt;br /&gt;わかれうた　今夜も　口ずさむ&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;English translation&lt;/h3&gt;&lt;h4&gt;by Greg Sharp&lt;/h4&gt;&lt;div xml:lang="en" lang="en" class="lyric"&gt;Have you ever been lying in the street&lt;br /&gt;Calling someone’s name over and over&lt;br /&gt;Twilight, unlike in the stories&lt;br /&gt;It is neither friendly nor charming&lt;br /&gt;&lt;br /&gt;With the flavor of farewell&lt;br /&gt;You knock on my door&lt;br /&gt;Wanting to forget farewell&lt;br /&gt;I open the door, without looking into your eyes&lt;br /&gt;&lt;br /&gt;Farewell always comes&lt;br /&gt;It comes right after happiness&lt;br /&gt;Is it my habit?&lt;br /&gt;Always waking up alone?&lt;br /&gt;&lt;br /&gt;You wear your grief&lt;br /&gt;Running around town, making yourself known &lt;br /&gt;But me, sleepless and bored&lt;br /&gt;I sing the farewell song again tonight&lt;br /&gt;&lt;br /&gt;Who gave me this name?&lt;br /&gt;The girl who sings the farewell song &lt;br /&gt;It’s not like I sing farewell because I like it&lt;br /&gt;I sing it because I don’t know any other song&lt;br /&gt;&lt;br /&gt;Always, when love is over&lt;br /&gt;The one who leaves is beautiful&lt;br /&gt;The bewildered one who is left behind&lt;br /&gt;Chases and yearns and cries and cries&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.loidich.com/index.php?do=loidich&amp;act=detail&amp;id=12400"&gt;Taken from here&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-8997211931743630325?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/8997211931743630325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=8997211931743630325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/8997211931743630325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/8997211931743630325'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/08/blog-post.html' title='わかれうた - 中島みゆき'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-1334870433197572093</id><published>2009-08-04T07:26:00.000-07:00</published><updated>2009-08-04T07:31:44.671-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Old Stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Old Story: "The Kitsune-Ookami"</title><content type='html'>&lt;p&gt;This is very old stuff I happened upon while looking through my website's archive.  As far as I can tell, it's from when I was in late junior high, around six years ago.  It does bring back memories, though.  I'm a bit embarrassed to post it, but it's not as bad as it could be.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;I am the wolf/fox hybrid.  I was created in a lab accident by my guardian.  I have been kept in a cage until recently.  I broke out in a release of my rage in the form of demonic energy.  Beware, for it may happen again.  The darkness in my soul has settled, but it'll rise again.&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;It started off when I was eight.  My parents had died recently, and I had be wandering about aimlessly.  A kind old man had been sitting beneath a tree.  Being as curious as I had been, I walked toward him.   He looked at me and said, "Hello, young one.  What brings you over here?"&lt;br /&gt;I responded by saying, "I have nowhere to go.  My parents died."&lt;br /&gt;"Aww...you need someone to care for you."&lt;br /&gt;I looked down, tears forming in my eyes.&lt;br /&gt;"Well, I'll take you in."&lt;br /&gt;I looked up at him and smiled weakly, "Okay."&lt;/p&gt;&lt;p&gt;He took me to his huge castle, which scared me.  I put my hands over my eyes.&lt;br /&gt;"Don't be afraid, young one."&lt;br /&gt;I nodded lightly and entered.&lt;br /&gt;We entered a long hall.  A few of the things he showed me scared me.  When we reached the end of the hall, he showed me a door.  I pushed the door open, and saw a nice bedroom.  There was a red velvet king size bed.  There were also a lot of dressers about.&lt;br /&gt;I said, wide-eyed, "Is this &lt;em&gt;my&lt;/em&gt; room?"&lt;br /&gt;He nodded lightly.&lt;br /&gt;I ran with glee as I went to jump on the large bed...&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;The years passed by.  I grew into a healthy, strong teenager.  I learned by reading books from his large library.  I later found his name to be Professor Motoko.  It was all good, until one day...&lt;/p&gt;&lt;p&gt;I was walking along, still as curious as ever.  I came across this big steel door, which I have never seen before.  I tilted my head and walked toward it.  When I grasped the black handle, it was oddly warm.  I pushed the door inward, a loud, resounding creak occurring.  When I walked in, I found it to be a long passage, with a bright light at the end.  I walked toward the light, almost intrigued by it.  When I reached it, I found it to be above.  I looked up and found it to be a large bulb.  I blinked, baffled.  Turning my head downward again, I noticed a bright green light far off to the left.  I walked toward it, only to find Professor Motoko working with some huge black thing.  I looked at him.&lt;br /&gt;"What's this thing?"&lt;br /&gt;He looked at me with a crazy look in his eyes, "Oh no, you can't be here!"&lt;br /&gt;I walked toward him.  He jumped down and ran at me.  I felt a blow to my right as I was knocked into a huge clear chamber with a huge metal band around it, a black cap on top, and wires coming out of it.  He messed with a whole bunch of different things, running around the lab like mad.  A chain was pulled, a switched was flipped, and a button was pushed.&lt;/p&gt;&lt;p&gt;A bright light enveloped me.  A great pain cut through me like a knife.  I winced, falling to my knees.  The pain became greater as I fell to my side, passing out.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;After much time, the blackness behind my eyelids became red.  When I opened my eyes, the redness remained.  I felt a great power within myself.  I found myself growling, my eyes narrow.  A great rage started to form, unprovoked.  The power started to flow from my fingertips.  As I looked at my body, the blue glow enveloped the entire thing.  My fingers arched as long, metal claws came from my fingertips.  I slowly moved my fingers individually, feeling a great desire to destroy.  My eyes focused upon the containment chamber.  I outstretched my arm, my claws extended.  My arm trusted downward, shattering the side of the big case.&lt;/p&gt;&lt;p&gt;I walked forward, out of the clear prison.  My eyes traced the surroundings as I continued to walk.  As I got to the edge of the room, my newly formed fox-like ear twitched as a sound entered it.  I turned around to find Motoko with a huge rod.  He whacked it against me.  My energy levels drained, my oversized body collapsing.  I passed out.&lt;/p&gt;&lt;p&gt;My body twitched as I awoke, finding myself in a huge metal cage.  I leaped upward, my head hitting the top.  I charged at the side of the cage, my hands gripping the bars tightly.  I managed to rattle it, but was unable to break it.  The redness in my eyes grew deeper as my body heated up.  The glow from my body turned white as I fell to my knees, my fingers curled lightly.  My body trembled as the power overcame me.  The red turned to white as everything faded.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;When the white cleared, I found rubble surrounding me.  My eyes narrowed as the natural light flooded inward.  My feet paced forward across the wooden rubble, my balance unsteady.  As I look downward, I found my feet to have gotten a lot smaller, as if they were paws.  My eyes crossed, only to find a large nose residing upon my face.  I looked to my hands, finding that they were similar as before, only covered in a dark orange and brown fur.  The wind began to blow lightly, but instead of feeling it against my skin, I felt some waving.  I look around at my body, finding it covered in fur with colors ranging from the dark orange to a deep brown with hints of silver.  I began to pace again.  As my feet went over a hard, round thing, I looked down.  My eyes set upon the remains of Professor Motoko's skull.  A deep growl resounded in my throat.  I shook it off and continued to walk.  My body turned to the path leading away from the castle as my feet paced forward.&lt;/p&gt;&lt;p&gt;I took one last look at the ruins through the corner of my eye, before snorting and facing away.  My feet began to pace forward, away from the memories.  My anger clouded my mind.  My thoughts were:&lt;/p&gt;&lt;p&gt;&lt;em&gt;"How could he ever do this to me?"&lt;br /&gt;"Why would he be doing this?"&lt;br /&gt;"Was I taken in to be an experiment?"&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The anger never even touched on sadness.  As I thought about this, I found myself walking upon all for limbs, my hands transformed into paws.  I walked on all fours, as if it was natural.&lt;/p&gt;&lt;p&gt;A hunger formed in my stomach as I walked.  I had a bizarre taste for blood.  My pacing quickened, the hunger growing.  My narrowed eyes shifted about, scanning the terrain for any signs of movement.  They spied one bit of movement between the trees.  My trot became a brisk walk, then a run as I followed the movement.  My body dropped to the ground silently.  I felt my legs instantly straighten, my body being forced through the air as I landed upon my prey, a large male deer.  I sunk my elongated teeth into its neck, the blood entering my mouth.  The taste made my vision tint a brighter red.  As my teeth dug deeper, the spine of the neck snapped.  The body of the deer went limp.  My mouth pulled from its neck and lunged at the body.  The fangs dug in as I pulled my mouth from the large body rapidly.  The crimson fluid stained the pelt of the animal.  As I tore at the body rapidly, more and more red tissue became exposed.  Me mouth returned to its side as my teeth into it.  I pulled out a mouthful and swallowed...&lt;/p&gt;&lt;p&gt;After several minutes of scouring the deer of its soft tissues, only the bone remained.  The hunger had disappeared.  A strong urge to rest formed within me.  I paced toward a bush and around it.  As to my amazement, a gray-furred creature rested behind it.  I stepped towards it, sniffing the fur.  I found the pheromones of a female being admitted by this creature.  Seeing no reason not to, I laid my body beside hers, my side pressing to hers.  My eyelids relaxed as my they slowly closed...&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;After what seemed for days, I felt pressure upon my muzzle.  This pressure was odd, due to the fact moisture was left by the movement.  My eyes opened slowly, the red tint gone.  For once, I felt calm, relaxed.  My first sight as my eyes opened, a large gray beast.  I felt the urge to jump, yet it subsided as I smelled the pheramones I have noticed from before.  My head slowly raised, becoming level with the grey, furry creature's.  As my legs began to take my weight, lifting it slowly, the female slipped beneath me slowly, brushing against a tender spot.  If I were to still be human, this would be a blushing moment.  I looked to my opposite side, her slipping outwards from beneath me in that direction.  She lightly touched her nose to mine.  My eyes widened slightly as I felt her cold, wet nose against mine.  I knew that she has become interested in me, yet I could see no reason why.&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-1334870433197572093?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/1334870433197572093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=1334870433197572093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1334870433197572093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1334870433197572093'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/08/old-story-kitsune-ookami.html' title='Old Story: &quot;The Kitsune-Ookami&quot;'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6470326318675293032</id><published>2009-07-30T09:21:00.000-07:00</published><updated>2009-07-30T09:27:07.866-07:00</updated><title type='text'>HONEY - NANAMEUE ALL☆STARS</title><content type='html'>&lt;p&gt;I came across this song while browsing the &lt;a href="http://vocaloid.wikia.com/wiki/Vocaloid_Wiki"&gt;Vocaloid Wiki&lt;/a&gt;, and boy I was caught by surprise.  It's no wonder it's popular outside of Japan: it's very upbeat, and manages to feature most of the Vocaloids (including fan-made) at least once.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=12UdIg_wIGQ&amp;fmt=18"&gt;HONEY (YouTube HQ)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It was painful getting the source encoding of the lyrics file correct, but here it is in Unicode for your enjoyment.&lt;/p&gt;&lt;br /&gt;&lt;div class="lyrics"&gt;Honey くれたよね　わたしに&lt;br /&gt;愛のメロディ　今&lt;br /&gt;心の中で　響いてる&lt;br /&gt;&lt;br /&gt;Honey　君はなんでも　お見通し&lt;br /&gt;伝えたいの　私の気持ち&lt;br /&gt;&lt;br /&gt;笑っても　泣いても&lt;br /&gt;君といたい&lt;br /&gt;心の距離をゼロにしたい&lt;br /&gt;&lt;br /&gt;送るわね　Honey&lt;br /&gt;愛の言葉　顔文字たくさん使い&lt;br /&gt;二人でヒミツしましょ　愛を感じていたい&lt;br /&gt;&lt;br /&gt;君が呼ぶ　Honey&lt;br /&gt;甘い言葉　心のブログ更新し&lt;br /&gt;幸せと　驚きで　飽きないの&lt;br /&gt;&lt;br /&gt;ねえ　わたしに　君　教えて&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Honey くれたよね　わたしに&lt;br /&gt;愛のイヤホン　今&lt;br /&gt;心の中で　使ってる&lt;br /&gt;&lt;br /&gt;Honey　君の声しか　聴こえない&lt;br /&gt;頭の中　ハートでいっぱい&lt;br /&gt;&lt;br /&gt;喜びも　悲しみも&lt;br /&gt;分かち合いたい&lt;br /&gt;同じ気持ちを感じていたい&lt;br /&gt;&lt;br /&gt;送るわね　Honey&lt;br /&gt;愛の言葉　顔文字たくさん使い&lt;br /&gt;二人でヒミツしましょ　愛を感じていたい&lt;br /&gt;&lt;br /&gt;君が呼ぶ　Honey&lt;br /&gt;甘い言葉　心のブログ更新し&lt;br /&gt;幸せと　驚きで　飽きないの&lt;br /&gt;&lt;br /&gt;ねえ　わたしに　君　教えて&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6470326318675293032?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6470326318675293032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6470326318675293032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6470326318675293032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6470326318675293032'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/07/honey-nanameue-allstars.html' title='HONEY - NANAMEUE ALL☆STARS'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6191437975220877181</id><published>2009-07-24T06:40:00.001-07:00</published><updated>2009-07-24T06:48:50.047-07:00</updated><title type='text'>新世界 - 平原綾香</title><content type='html'>&lt;p&gt;This song was in a dream I had last night.  It's based on &lt;a href="http://en.wikipedia.org/wiki/Symphony_No._9_(Dvořák)"&gt;Dvorak's New World Symphony&lt;/a&gt;.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://kenji-m.zapto.org:5921/hosting/download.php?file=01_shinsekai.ogg"&gt;新世界 (2009, from 新世界)&lt;/a&gt; [&lt;a href="http://kenji-m.zapto.org:5921/hosting/play/index.php?file=01_shinsekai.ogg"&gt;Java applet&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=Y5ZczFna800"&gt;Live on YouTube&lt;/a&gt;]&lt;/li&gt;&lt;/ul&gt;&lt;div class="lyrics"&gt;Find your way, no matter how hard it is.&lt;br /&gt;Keep your feet on the ground and see what is waiting&lt;br /&gt;the new world is there.&lt;br /&gt;&lt;br /&gt;When I'm lost　青い 月明かり&lt;br /&gt;夢の続き　探してた&lt;br /&gt;&lt;br /&gt;出会い　別れ　夢やぶれて&lt;br /&gt;すべてが　終わりのように見えた&lt;br /&gt;&lt;br /&gt;どんな　自分を　生きればいい&lt;br /&gt;どこまで　人を　信じればいい&lt;br /&gt;&lt;br /&gt;きっと　心に　夜明けは来る&lt;br /&gt;まだ　見えない未来の　向こうから&lt;br /&gt;&lt;br /&gt;When I'm lost　遠い 道の先で&lt;br /&gt;自分との決まりを　今 破る時&lt;br /&gt;&lt;br /&gt;くるしいこころも　そのままでいい&lt;br /&gt;かなしいおもいも　そのままでいい&lt;br /&gt;&lt;br /&gt;それは　心 なおすことなく　手放すこと&lt;br /&gt;いつだって　きっと自分は　生まれ変われる&lt;br /&gt;&lt;br /&gt;いのち　満ちる　この地球(ふるさと)&lt;br /&gt;誰もが　帰る　旅の果てに&lt;br /&gt;&lt;br /&gt;新しい世界から何が見える&lt;br /&gt;まだ知らない　この私が微笑んでいる&lt;br /&gt;&lt;br /&gt;どんな　自分でも　愛していたい&lt;br /&gt;今起こる　何もかも　信じたいから&lt;br /&gt;&lt;br /&gt;溢れ出す涙　夢を見せて&lt;br /&gt;私だけに　出来る　何かが　必ずある&lt;br /&gt;&lt;br /&gt;なつかしい大地を　強く踏みしめて&lt;br /&gt;喜びも悲しみも受け入れてゆく&lt;br /&gt;&lt;br /&gt;もう何も　迷わない　そんな世界へ　ゆけるはず&lt;br /&gt;私は行く　新しい世界へ&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6191437975220877181?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6191437975220877181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6191437975220877181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6191437975220877181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6191437975220877181'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/07/blog-post.html' title='新世界 - 平原綾香'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-3243963382447743155</id><published>2009-07-18T12:23:00.000-07:00</published><updated>2009-07-18T12:42:02.258-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Transit'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Link light rail'/><title type='text'>Central Link Grand Opening</title><content type='html'>&lt;img style="width:60%; float:right; margin-left:0.5em;" src="http://upload.wikimedia.org/wikipedia/en/0/07/Othello_Station.jpg" alt="Othello Station during testing, from Wikipedia." /&gt;&lt;p&gt;Today marks the first day of the rest of Puget Sound's history: the &lt;a href="http://www.soundtransit.org/x10828.xml"&gt;opening of Sound Transit's Central Link&lt;/a&gt;, the first stage in the large-scale Link light rail network.  I went for the ribbon cutting, since I &lt;a href="http://seattletimes.nwsource.com/flatpages/local/lightraillive.html"&gt; always like firsts (search for "9:33 AM")&lt;/a&gt;.  Note: while I do live in Bothell, I usually drive to Lynnwood on weekends.&lt;/p&gt;&lt;p&gt;I left early this morning via the first southbound 511, then transferred to a 7.  I didn't know that they had shuttles for the occasion, but ran to a &lt;a href="http://twitpic.com/as23o"&gt;97 shuttle&lt;/a&gt; to Mt. Baker Station.  Note that the one I rode was a Metro DE60LF, not a Sound Transit bus.  The shuttle driver missed the station, and had to turn around south of Columbia City station, and negotiate the small residential streets until we got back.&lt;/p&gt;&lt;p&gt;Now, I didn't actually have an inaugural ride ticket, since I had work at the time they were available, but I still managed to attend the ceremony behind the "public fence."  Various people, including engineers and local activists and leaders gave their speeches.  However, the most ceremonious act was when the mayor of Tukwila rode a Link train North and Greg Nickels rode another Link train South to Mt. Baker Station.  They performed the ribbon cutting, then the inaugural riders, including the mayors, were allowed on the trains.  To my surprise, I also managed to get a seat on the &lt;a href="http://twitpic.com/as1u6"&gt;southbound inaugural train&lt;/a&gt;, which was a three-car train.  There was plenty of seating.&lt;/p&gt;&lt;p&gt;The ride was quite smooth, with some &lt;a href="http://twitpic.com/arv9o"&gt;great views&lt;/a&gt; and &lt;a href="http://twitpic.com/arzhn"&gt;cool art&lt;/a&gt;.  &lt;a href="http://twitpic.com/art15"&gt;Everyone&lt;/a&gt; was very excited, and surprised at how comfortable the ride was.  There's even A/C, which is likely what contributes to the most of &lt;a href="http://seattletimes.nwsource.com/html/northwestvoices/2009491146_light_rail_parking_noise_whine.html"&gt;noise that the Times was complaining about&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I rode from Mt. Baker, to Tukwila  (the train turned around without forcing us to transfer at the end, which isn't normal service), back to Westlake Center, and lastly down to the International District.  There was a lot of roundabout walking to transfer from northbound to southbound in the Tunnel, including exiting to the surface and re-entering.&lt;/p&gt;&lt;p&gt;I'm extremely excited to see what this new light rail line spurs.  Who knows, I may be riding it from Lynnwood on my commute to Seattle!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-3243963382447743155?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/3243963382447743155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=3243963382447743155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3243963382447743155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3243963382447743155'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/07/central-link-grand-opening.html' title='Central Link Grand Opening'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-5840670636609886951</id><published>2009-07-14T13:02:00.000-07:00</published><updated>2009-07-14T13:11:05.598-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>YOU NEVER NEED ME - 中島みゆき</title><content type='html'>&lt;p&gt;This song and &lt;a href="http://kenji-m.zapto.org:5921/hosting/download.php?file=NeilStatus_introspective_final.svg"&gt;this icon&lt;/a&gt; really suit my mood right now.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://kenji-m.zapto.org:5921/hosting/download.php?file=10_you_never_need_me.ogg"&gt;YOU NEVER NEED ME (1994, from LOVE OR NOTHING&lt;/a&gt; [&lt;a href="http://kenji-m.zapto.org:5921/hosting/play/index.php?file=10_you_never_need_me.ogg"&gt;Java applet&lt;/a&gt;]&lt;/li&gt;&lt;/ul&gt;&lt;div class="lyrics"&gt;好きなものや欲しいものは次から次とあるけれど&lt;br /&gt;必要なものというのは　そんなに多くはない&lt;br /&gt;私のことを憎からず思ってくれたのは事実&lt;br /&gt;でも必要と思ったことなかったのも事実ね&lt;br /&gt;&lt;br /&gt;もしあなたがいけなければ私は生きる甲斐がない&lt;br /&gt;息をすることと同じくらいあなたが必要&lt;br /&gt;&lt;br /&gt;雨に耳をすまして私は怯えていた&lt;br /&gt;いつか雨のように愛がやんでしまう日のこと&lt;br /&gt;風に耳をすまして私は願っていた&lt;br /&gt;いつか風のように愛が戻ってくること&lt;br /&gt;&lt;br /&gt;もしも私がいなくてもあなたは何も困らない&lt;br /&gt;少し探してみることもなく　すぐに忘れてゆく&lt;br /&gt;&lt;br /&gt;You never need me　You never need me&lt;br /&gt;なぜ私ではなくて彼女でなければならないの&lt;br /&gt;Need me　You never need me&lt;br /&gt;今から何をすれば必要と思ってくれるの&lt;br /&gt;もう何もないの　何もないの&lt;br /&gt;&lt;br /&gt;傷つけたくてはじめから私と出会うはずはない&lt;br /&gt;そう信じてみるけれど　今はそれさえあやしい&lt;br /&gt;&lt;br /&gt;私にくれた幸せは両手でも数えきれない&lt;br /&gt;けれど失くした幸せはそれより多い&lt;br /&gt;&lt;br /&gt;雨に耳をすまして私は怯えていた&lt;br /&gt;いつか雨のように愛がやんでしまう日のこと&lt;br /&gt;風に耳をすまして私は願っていた&lt;br /&gt;いつか風のように愛が戻ってくること&lt;br /&gt;&lt;br /&gt;もしも私がいなくてもあなたは何も困らない&lt;br /&gt;少し探してみることもなく　すぐに忘れてゆく&lt;br /&gt;&lt;br /&gt;You never need me　You never need me&lt;br /&gt;なぜ私ではなくて彼女でなければならないの&lt;br /&gt;Need me　You never need me&lt;br /&gt;今から何をすれば必要と思ってくれるの&lt;br /&gt;&lt;br /&gt;You never need me　You never need me&lt;br /&gt;なぜ私ではなくて彼女でなければならないの&lt;br /&gt;Need me Forever never need me&lt;br /&gt;今から何をすれば必要と思ってくれるの&lt;br /&gt;You never need me　never need me　never need me&lt;br /&gt;Forever never need&lt;br /&gt;You never need me&lt;br /&gt;You……………&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-5840670636609886951?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/5840670636609886951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=5840670636609886951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5840670636609886951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5840670636609886951'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/07/you-never-need-me.html' title='YOU NEVER NEED ME - 中島みゆき'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-7382652412335092785</id><published>2009-07-01T06:53:00.001-07:00</published><updated>2009-07-01T07:00:10.200-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Standard XHTML and Flash</title><content type='html'>&lt;blockquote&gt;With the status of standardization of web "technologies" in such a sad state, "Web 2.0" really doesn't mean much on the code side.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I've found something interesting regarding standardized Flash support: a way to include it in strict XHTML (not "transitional").  It involves creating a dummy Flash movie that loads the first one.  I found it in &lt;a href="http://www.alistapart.com/articles/flashsatay"&gt;this blog entry.&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The XHTML code for the movie is as follows, assuming the movie we actually want to load is &lt;strong&gt;movie.swf&lt;/strong&gt;:&lt;/p&gt;&lt;code class="code"&gt;&amp;lt;object type="application/x-shockwave-flash"&lt;br /&gt;data="c.swf?path=movie.swf"&amp;gt;&lt;br /&gt;&amp;lt;param name="movie" &lt;br /&gt;value="c.swf?path=movie.swf" /&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt; &lt;/code&gt;&lt;p&gt;&lt;strong&gt;c.swf&lt;/strong&gt; is a fairly simple bit of ActionScript:&lt;/p&gt;&lt;code class="code"&gt;_root.loadMovie(_root.path,0);&lt;/code&gt;&lt;p&gt;According to the article, it loads the movie as expected and streams it.  One caveat is that it won't operate properly if the browser doesn't support Flash.  To fix that, something like this is necessary:&lt;/p&gt;&lt;code class="code"&gt;&amp;lt;object type="application/x-shockwave-flash&lt;br /&gt;data="c.swf?path=movie.swf"&amp;gt;&lt;br /&gt;&amp;lt;param name="movie" &lt;br /&gt;value="c.swf?path=movie.swf" /&amp;gt;&lt;br /&gt;&amp;lt;img src="noflash.gif" alt="" /&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&lt;/code&gt;&lt;p&gt;Of course, the &lt;strong&gt;img&lt;/strong&gt; tag can be replaced with any "alternate" element to be displayed when there's no Flash support.  Pretty cool.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-7382652412335092785?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/7382652412335092785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=7382652412335092785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/7382652412335092785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/7382652412335092785'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/07/standard-xhtml-and-flash.html' title='Standard XHTML and Flash'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-3247334652110681401</id><published>2009-06-18T20:51:00.001-07:00</published><updated>2009-06-18T21:00:26.216-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bus'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Kitsap Loop</title><content type='html'>&lt;p&gt;Today was the first successful completion of my "Kitsap Loop" journey, which is essentially going south through Tacoma, west over the Narrows, north through Kitsap County, and back east via the Washington State Ferries.  The "weakest link" of this trip is Kitsap Transit's Purdy Connection, which runs only five times each day over the course of the day.  This connection is also why I haven't been able to complete this trip on my previous attempt, since I arrived too early and didn't want to wait for two hours.&lt;/p&gt;&lt;p&gt;Like the &lt;a href="http://snakesfoxes.blogspot.com/2009/06/whidbey-grand-tour-3.html"&gt;Whidbey Island journey&lt;/a&gt;, I will only mention highlights.  This trip isn't called a "grand tour" because it didn't cover much of Kitsap County, unlike the Whidbey trip.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://commtrans.org/BusService/Schedule.cfm?route=414"&gt;CT 414 Seattle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://soundtransit.org/Riding-Sound-Transit/Schedules-and-Facilities/ST-Express-Bus/592-594-Route-Map.xml"&gt;ST 594 Tacoma&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.piercetransit.org/schedules/2/2.htm"&gt;PT 2 TCC&lt;/a&gt; (originally intended to take a later &lt;a href="http://www.piercetransit.org/schedules/1/1.htm"&gt;PT 1 TCC&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.piercetransit.org/schedules/100/100.htm"&gt;PT 100 Purdy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kitsaptransit.com/PurdyMap.html"&gt;KT Purdy Connection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kitsaptransit.com/FootferryMap.html"&gt;KT Port Orchard to Bremerton&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wsdot.wa.gov/ferries/Schedule/ScheduleDetail.aspx?departingterm=7&amp;arrivingterm=4&amp;roundtrip=true"&gt;WSF Bremerton to Seattle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://transit.metrokc.gov/cftemplates/show_map.cfm?BUS_ROUTE=099&amp;DAY_NAV=WSU"&gt;MT 99 International District&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://commtrans.org/BusService/Schedule.cfm?route=414"&gt;CT 414 Mountlake Terrace&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Unlike previous journeys, which always started at either my house, Lynnwood, or Bothell, I decided to take advantage of CT's new parking garage at Mountlake Terrace Transit Center.  It was mostly empty, but the TC was very nice, new, and much cleaner than many others.  They even had a cable-stay walkway!  Expecting a 40-foot Invero to pick me up, I was even more surprised when a &lt;a href="http://www.cptdb.ca/wiki/index.php/Image:Community_Transit_27803.jpg"&gt;278XX bus&lt;/a&gt; picked me up.&lt;/p&gt;&lt;p&gt;I had hoped to make a quick-and-painless transfer to my next bus on Stewart in Seattle, but &lt;a href="http://www.seattle.gov/transportation/2009_2010_pave.htm"&gt;construction&lt;/a&gt; got in the way, and I had to run along Lenora to catch my next bus.  I &lt;em&gt;really&lt;/em&gt; wasn't expecting it to be that annoying.&lt;/p&gt;&lt;p&gt;Another painful transfer was to my next bus, which arrived just as I was getting my bearings.  That bus smelled just like a locker room, which was disgusting the entire way.&lt;/p&gt;&lt;p&gt;I had originally intended to have twenty-minute headways, making the above dashing around completely unnecessary, and ended up accumulating time until I was an hour early at TCC.  The driver (the same one I rode with on my previous attempt) was a bit mystified when I said, "I'll just take the next one."  Instead of just waiting for an hour, I went to an IHOP a couple blocks away for lunch.&lt;/p&gt;&lt;p&gt;At Purdy, I had to wait another hour (as I had planned initially).  After watching some teenagers go into the woods next to the transit center and come out, I decided to investigate the path for myself.  The only notable thing back there was a fairly fast-flowing creek, as well as a lot of trash that had been left before.&lt;/p&gt;&lt;p&gt;The bus for the Purdy Connection was a dial-a-ride-transit/access bus, which made sense since it acted like Metro's DART service (somewhat fixed-route with some deviations).  Those on board were friendly, and chatted as though they knew each other.  Fortunately, there were no deviation requests, and it was a straight-shot along &lt;a href="http://en.wikipedia.org/wiki/Washington_State_Route_16"&gt;SR-16&lt;/a&gt; to Port Orchard, and my hair got a beating by the wind.&lt;/p&gt;&lt;p&gt;The foot ferry was a fun ride, and was even smaller than &lt;a href="http://www.kingcounty.gov/transportation/kcdot/Marine/WaterTaxi.aspx"&gt;King County's Water Taxi&lt;/a&gt;.  It also was a very short trip, since I could see what I knew to be Bremerton from Port Orchard.&lt;/p&gt;&lt;p&gt;Having successfully completed a link I had never done before, I ended up in Bremerton.  While I had hoped to meet a friend of mine there after missing the first ferry transfer, she couldn't make it in time before the next ferry left.  Instead, I had some ice cream, and even saw two &lt;a href="http://www.cptdb.ca/wiki/index.php/Orion_Bus_Industries_%27Orion_I%27"&gt;Orion I buses&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;I barely made the free route 99 after landing in Seattle, and was lucky to even see it at all.  It was over ten minutes late, or ten minutes early.  Transferring to the 414 wasn't so chancy; it came only twenty minutes after I had arrived, with the &lt;a href="http://www.cptdb.ca/wiki/index.php/Image:Community_Transit_24401.jpg"&gt;Invero&lt;/a&gt; I had expected earlier.  &lt;em&gt;Is it just me, or do all of CT's Inveros have broken reclining mechanisms?&lt;/em&gt;&lt;/p&gt;&lt;p&gt;This was truly an epic trek, but I likely won't do it again alone due to that darn Purdy Connection.  I don't think I'll ever forget this one.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-3247334652110681401?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/3247334652110681401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=3247334652110681401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3247334652110681401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3247334652110681401'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/06/kitsap-loop.html' title='Kitsap Loop'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-2804734945549678341</id><published>2009-06-16T16:45:00.000-07:00</published><updated>2009-06-16T18:48:54.559-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bus'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Whidbey Grand Tour #3</title><content type='html'>&lt;p&gt;That's right, today was my third all-day bus tour around &lt;a href="http://en.wikipedia.org/wiki/Whidbey_Island"&gt;Whidbey Island&lt;/a&gt;.  Whidbey Island is nice to visit because of the wide, open fields, dense forests, and small-town feel.  There are also several funny street names, such as "Power Road," "Spyglass Road," several variations on "Bluff Road," and "Useless Bay Road."  Views of the water are common along the bus routes, such as Deception Pass, and in some places the roads are mere feet from water's edge.  Last, but not least, &lt;em&gt;all Island Transit routes are &lt;strong&gt;fare-free&lt;/strong&gt;&lt;/em&gt;, as they are all tax-funded.  Their buses are primarily cutaway ElDorado models, with some Gillig Phantoms.&lt;/p&gt;&lt;p&gt;While I won't go into in-depth detail of every leg of the trip, I &lt;em&gt;will&lt;/em&gt; mention everything of note I can think of.  &lt;em&gt;There won't be a very smooth flow between paragraphs.&lt;/em&gt;  That said, here's a list of the routes I took in order:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://soundtransit.org/Riding-Sound-Transit/Schedules-and-Facilities/ST-Express-Bus/532-535-Route-Map.xml"&gt;ST 532 Everett&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://islandtransit.org/routes/34"&gt;IT 412C Camano Island&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://islandtransit.org/routes/30"&gt;IT 411C Mt. Vernon&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://islandtransit.org/routes/16"&gt;IT 411W Oak Harbor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://islandtransit.org/routes/13"&gt;IT 1 Clinton&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wsdot.wa.gov/ferries/Schedule/ScheduleDetail.aspx?departingterm=14&amp;arrivingterm=5&amp;roundtrip=true"&gt;WSF Clinton to Mukilteo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://commtrans.org/BusService/Schedule.cfm?route=113"&gt;CT 113 Lynnwood&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://commtrans.org/BusService/Schedule.cfm?route=120/121"&gt;CT 121 UW-Bothell&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;While in Everett, two things of note happened.  First, I saw that Everett Transit has purchased multiple diesel-electric hybrid buses.  Secondly, I purchased something at Everett Station's cafe called a "Frozen Xplosion," which is pretty much fruit juice blended with ice.  Last time I had bought this, they were out of the peach juice, and made something closer to an Italian soda instead, but I preferred this time with the actual peach juice.  A Coast Starlight train stopped by during my wait for the next leg of the route, which hadn't happened before.&lt;/p&gt;&lt;p&gt;The widening of a certain section of &lt;a href="http://en.wikipedia.org/wiki/Washington_State_Route_20"&gt;SR-20&lt;/a&gt;, which had been underway during my last visit, was completed this time around.  A section later along the route, however, was currently under heavy construction.  One reason I like the cutaway buses is that they tend to give a rough (but fun) ride, and this was an extreme case.  The driver even said "Prepare to grit your teeth" just before the rough section.&lt;/p&gt;&lt;p&gt;Apparently wood burning is legal on Whidbey Island, as someone had a large pile of wood burning a few blocks away (but in clear sight since it was an open area) just before the driver changeover.  The smell was very strong where it passed us, but didn't last so long.&lt;/p&gt;&lt;p&gt;Riding Washington State Ferries is generally fun, and unlike the larger ferries in Seattle the Clinton-Mukilteo run doesn't have a separate pedestrian ramp.  I never really figured out the order involved until today.  Upon docking, passengers then vehicles are unloaded, then priority vehicles, regular vehicles, and pedestrians are loaded.&lt;/p&gt;&lt;p&gt;As per the "tradition" established after every trip, I stopped by the Mukilteo ferry port's Ivar's eatery.  It was the only real meal I ate in around nine hours, and was welcomed.  I barely made catching the 113 after this, but was treated to a ride in one of &lt;a href="http://www.cptdb.ca/wiki/index.php/Image:Community_Transit_28109.jpg"&gt;CT's new (281XX) buses&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;That's pretty much everything of note on my trip.  My last thoughts here are that buses generally smell bad, primarily due to spray deodorant and cigarettes.  &lt;em&gt;I can't wait until my trip through the Kitsap Peninsula!&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-2804734945549678341?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/2804734945549678341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=2804734945549678341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/2804734945549678341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/2804734945549678341'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/06/whidbey-grand-tour-3.html' title='Whidbey Grand Tour #3'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6018430491109140780</id><published>2009-06-15T17:29:00.000-07:00</published><updated>2009-06-15T17:33:42.132-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>hwsched</title><content type='html'>&lt;p&gt;As I've mentioned earlier, I've been working on a homework scheduler.  Work isn't anywhere near done, but it's functional enough (but not tested enough).  Here's what I have so far:&lt;a href="http://kenji-m.zapto.org:5921/hosting/download.php?file=hwsched-20090615.zip"&gt;hwsched-20090615.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;To use this script, the following files must be symlinks or hard links to &lt;strong&gt;hwsched.py&lt;/strong&gt;:&lt;ul&gt;&lt;li&gt;classes&lt;/li&gt;&lt;li&gt;exams&lt;/li&gt;&lt;li&gt;assignments&lt;/li&gt;&lt;li&gt;instructors&lt;/li&gt;&lt;li&gt;quarters&lt;/li&gt;&lt;li&gt;sections&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6018430491109140780?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6018430491109140780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6018430491109140780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6018430491109140780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6018430491109140780'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/06/hwsched.html' title='hwsched'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-1212358021555079010</id><published>2009-06-15T17:16:00.000-07:00</published><updated>2009-06-15T17:18:45.263-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell'/><title type='text'>dumpaudio</title><content type='html'>&lt;p&gt;I was having all sorts of trouble trying to figure out how to extract audio from any video file into a WAV (signed 16-bit, little-endian) format.  I was fortunate enough to find something that worked universally, so here it is:&lt;/p&gt;&lt;h4 class="codetitle"&gt;dumpaudio&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/bin/sh&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt; &lt;span style="color: #009900"&gt;$#&lt;/span&gt; -ge &lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;];&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;then&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;IN&lt;/span&gt;&lt;span style="color: #990000"&gt;=&lt;/span&gt;&lt;span style="color: #009900"&gt;$1&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;OUT&lt;/span&gt;&lt;span style="color: #990000"&gt;=&lt;/span&gt;&lt;span style="color: #009900"&gt;$1&lt;/span&gt;&lt;span style="color: #990000"&gt;.&lt;/span&gt;wav&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt; &lt;span style="color: #009900"&gt;$#&lt;/span&gt; -ge &lt;span style="color: #993399"&gt;2&lt;/span&gt; &lt;span style="color: #990000"&gt;];&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;then&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #009900"&gt;OUT&lt;/span&gt;&lt;span style="color: #990000"&gt;=&lt;/span&gt;&lt;span style="color: #009900"&gt;$2&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; ffmpeg -i &lt;span style="color: #FF0000"&gt;"$IN"&lt;/span&gt; -f wav -acodec pcm_s16le &lt;span style="color: #FF0000"&gt;"$OUT"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; echo &lt;span style="color: #FF0000"&gt;"Usage: $0 in [ out ]"&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-1212358021555079010?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/1212358021555079010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=1212358021555079010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1212358021555079010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1212358021555079010'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/06/dumpaudio.html' title='dumpaudio'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-5284015331950413530</id><published>2009-06-10T07:47:00.000-07:00</published><updated>2009-06-10T07:52:52.145-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>pdfsearch.py</title><content type='html'>&lt;p&gt;For the longest time, I've wanted to search PDF files from the command line.  Now, I can with &lt;strong&gt;pdfsearch.py&lt;/strong&gt;!  This program uses pyPdf to look for pages containing strings that match the provided regex, but due to the messy output of pyPdf, it won't print the matching lines.&lt;/p&gt;&lt;h4 class="codetitle"&gt;pdfsearch.py&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; optparse &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; OptionParser&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; sys &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; argv&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; pyPdf &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; PdfFileReader&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; walk&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; re &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; compile as re_compile&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; re &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; IGNORECASE&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os&lt;span style="color: #990000"&gt;.&lt;/span&gt;path &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; join&lt;br /&gt;&lt;br /&gt;parser &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;OptionParser&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;description &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Search for text in PDF files.'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; usage &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%s [ options ] term [ file1..fileN ]'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;])&lt;/span&gt;&lt;br /&gt;parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;add_option&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'-i'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'--insensitive'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; action &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'store_true'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; dest &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'insensitive'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; help &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Search case-insensitively.'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; default &lt;span style="color: #990000"&gt;=&lt;/span&gt; False&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;def&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pdfgrep&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;expr&lt;span style="color: #990000"&gt;,&lt;/span&gt; file&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt; pdf &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;br /&gt; with &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;open&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;file&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'rb'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; as f&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  pdf &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;PdfFileReader&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;f&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; i &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;xrange&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pdf&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getNumPages&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()):&lt;/span&gt;&lt;br /&gt;   content &lt;span style="color: #990000"&gt;=&lt;/span&gt; pdf&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getPage&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i&lt;span style="color: #990000"&gt;).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;extractText&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;().&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strip&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; expr&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;search&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;content&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;    yield i&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;argv &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;unicode&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'utf8'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; i &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;options&lt;span style="color: #990000"&gt;,&lt;/span&gt; args &lt;span style="color: #990000"&gt;=&lt;/span&gt; parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;parse_args&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;:])&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;optionmap &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;'insensitive'&lt;/span&gt; &lt;span style="color: #990000"&gt;:&lt;/span&gt; IGNORECASE&lt;br /&gt;&lt;span style="color: #990000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; term_flags &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; key&lt;span style="color: #990000"&gt;,&lt;/span&gt; value &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; optionmap&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;iteritems&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;():&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getattr&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;options&lt;span style="color: #990000"&gt;,&lt;/span&gt; key&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;   term_flags &lt;span style="color: #990000"&gt;|=&lt;/span&gt; value&lt;br /&gt; term &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;re_compile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;],&lt;/span&gt; term_flags&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; paths &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'.'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  paths &lt;span style="color: #990000"&gt;=&lt;/span&gt; args&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;:]&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; path &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; paths&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; dirpath&lt;span style="color: #990000"&gt;,&lt;/span&gt; dirnames&lt;span style="color: #990000"&gt;,&lt;/span&gt; filenames &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;walk&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; filename &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; filenames&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; filename&lt;span style="color: #990000"&gt;[-&lt;/span&gt;&lt;span style="color: #993399"&gt;4&lt;/span&gt;&lt;span style="color: #990000"&gt;:]&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'.pdf'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     fullfilename &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;join&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirpath&lt;span style="color: #990000"&gt;,&lt;/span&gt; filename&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;     pages &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;list&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;pdfgrep&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;term&lt;span style="color: #990000"&gt;,&lt;/span&gt; fullfilename&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pages&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; u&lt;span style="color: #FF0000"&gt;'%s:%s'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;fullfilename&lt;span style="color: #990000"&gt;,&lt;/span&gt; u&lt;span style="color: #FF0000"&gt;', '&lt;/span&gt;&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;join&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;([&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;str&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; i &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; pages&lt;span style="color: #990000"&gt;]))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; parser&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;error&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'No search term provided.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;code class="console"&gt;% python pdfsearch.py -i undo ../Notes/CSE444&lt;br /&gt;../Notes/CSE444/2009-05-07:QuizSection_Midterm.pdf:4&lt;br /&gt;../Notes/CSE444/PDF/lecture14.pdf:3, 6, 10, 11&lt;br /&gt;../Notes/CSE444/PDF/lecture13.pdf:17, 18, 22&lt;br /&gt;../Notes/CSE444/PDF/lecture09-10.pdf:2, 16, 31, 32, 36, 37, 39, 40, 41, 42, 43, 45, 48, 49, 58, 59, 60, 62, 63, 65&lt;br /&gt;../Notes/CSE444/PDF/lecture11.pdf:30&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-5284015331950413530?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/5284015331950413530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=5284015331950413530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5284015331950413530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5284015331950413530'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/06/pdfsearchpy.html' title='pdfsearch.py'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-3341194249894712376</id><published>2009-06-03T08:38:00.000-07:00</published><updated>2009-06-03T08:40:54.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>svg_standalone.py</title><content type='html'>&lt;p&gt;I've finally realized the merits of standalone SVG files using data URIs, so I wrote this simple Python script to convert an SVG with &lt;strong&gt;&amp;gt;image xlink:href="filename" ... /&amp;lt;&lt;/strong&gt; to one with data URIs instead.&lt;/p&gt;&lt;h4 class="codetitle"&gt;svg_standalone.py&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; sys &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; argv&lt;span style="color: #990000"&gt;,&lt;/span&gt; exit&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; base64 &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; b64encode&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os&lt;span style="color: #990000"&gt;.&lt;/span&gt;path &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; isfile&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; mimetypes &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; init&lt;span style="color: #990000"&gt;,&lt;/span&gt; guess_type&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; xml&lt;span style="color: #990000"&gt;.&lt;/span&gt;dom&lt;span style="color: #990000"&gt;.&lt;/span&gt;ext&lt;span style="color: #990000"&gt;.&lt;/span&gt;reader &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; Sax2&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; xml&lt;span style="color: #990000"&gt;.&lt;/span&gt;dom&lt;span style="color: #990000"&gt;.&lt;/span&gt;ext &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; Print&lt;br /&gt;&lt;br /&gt;mp &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'http://www.w3.org/1999/xlink'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'href'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;init&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; fname &lt;span style="color: #990000"&gt;=&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# Input&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; with &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;open&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;fname&lt;span style="color: #990000"&gt;)&lt;/span&gt; as f&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  doc &lt;span style="color: #990000"&gt;=&lt;/span&gt; Sax2&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Reader&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;().&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fromStream&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;f&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# Replace&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; root &lt;span style="color: #990000"&gt;=&lt;/span&gt; doc&lt;span style="color: #990000"&gt;.&lt;/span&gt;documentElement&lt;br /&gt; imgs &lt;span style="color: #990000"&gt;=&lt;/span&gt; root&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getElementsByTagName&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'image'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; img &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; imgs&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  href &lt;span style="color: #990000"&gt;=&lt;/span&gt; img&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getAttributeNS&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(*&lt;/span&gt;mp&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;isfile&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;href&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;   mtype &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;guess_type&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;href&lt;span style="color: #990000"&gt;)[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;   b64data &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;br /&gt;   with &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;open&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;href&lt;span style="color: #990000"&gt;)&lt;/span&gt; as f&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    b64data &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;b64encode&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;f&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;read&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;())&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;not&lt;/span&gt;&lt;/span&gt; b64data &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    img&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;setAttributeNS&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(*&lt;/span&gt;mp&lt;span style="color: #990000"&gt;,&lt;/span&gt; value &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;''&lt;/span&gt;&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;join&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;([&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'data:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; mtype&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;';base64,'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; b64data&lt;span style="color: #990000"&gt;]))&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Unable to generate Base64 data:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; href&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Unable to find image:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; href&lt;br /&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;# Output&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; fname&lt;span style="color: #990000"&gt;[-&lt;/span&gt;&lt;span style="color: #993399"&gt;4&lt;/span&gt;&lt;span style="color: #990000"&gt;:]&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'.svg'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  fname &lt;span style="color: #990000"&gt;=&lt;/span&gt; fname&lt;span style="color: #990000"&gt;[:-&lt;/span&gt;&lt;span style="color: #993399"&gt;4&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'.standalone'&lt;/span&gt; &lt;span style="color: #990000"&gt;+&lt;/span&gt; fname&lt;span style="color: #990000"&gt;[-&lt;/span&gt;&lt;span style="color: #993399"&gt;4&lt;/span&gt;&lt;span style="color: #990000"&gt;:]&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  fname &lt;span style="color: #990000"&gt;=&lt;/span&gt; fname &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'.standalone.svg'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; with &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;open&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;fname&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'w'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; as f&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Print&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;doc&lt;span style="color: #990000"&gt;,&lt;/span&gt; stream &lt;span style="color: #990000"&gt;=&lt;/span&gt; f&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Usage: %s file.svg'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-3341194249894712376?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/3341194249894712376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=3341194249894712376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3341194249894712376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3341194249894712376'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/06/svgstandalonepy.html' title='svg_standalone.py'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-540845036660448827</id><published>2009-05-20T09:45:00.001-07:00</published><updated>2009-05-20T09:48:45.282-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>HWSched</title><content type='html'>&lt;p&gt;I've been working on a new program: a homework scheduler suitable for high school and college students.  Right now, it has the following objects that can be added, deleted, etc.:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Quarters/Terms&lt;/li&gt;&lt;li&gt;Instructors&lt;/li&gt;&lt;li&gt;Classes (each has a Quarter and Instructor)&lt;/li&gt;&lt;li&gt;Additional Class Sections (for each class)&lt;/li&gt;&lt;li&gt;Exams (for each class)&lt;/li&gt;&lt;li&gt;Assignments and their respective parts (for each class)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To add an assignment, all one needs to do is specify a class, due date, and all of its parts.  I had previously written something similar, but it wasn't as efficient as this system.&lt;/p&gt;&lt;p&gt;I'll put it up here when I've tested it enough.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-540845036660448827?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/540845036660448827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=540845036660448827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/540845036660448827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/540845036660448827'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/05/hwsched.html' title='HWSched'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-3191140723960864798</id><published>2009-05-07T12:25:00.000-07:00</published><updated>2009-05-07T12:39:42.934-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>cwork.py</title><content type='html'>&lt;p&gt;I finally realized that the time I spent figuring out the path do a directory I wanted to go to via tab-completion was being wasted!  I've created an alternative method for oft-accessed directories:&lt;/p&gt;&lt;h4 class="codetitle"&gt;cwork.py&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; sys &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; exit&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; subprocess &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; Popen&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; chdir&lt;span style="color: #990000"&gt;,&lt;/span&gt; environ&lt;span style="color: #990000"&gt;,&lt;/span&gt; getcwd&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; os&lt;span style="color: #990000"&gt;.&lt;/span&gt;path &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; join&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; sqlite3 &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; Connection&lt;span style="color: #990000"&gt;,&lt;/span&gt; IntegrityError&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; datetime &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; datetime&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;class&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Sdatetime&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;datetime&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;def&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strftime&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;self&lt;span style="color: #990000"&gt;,&lt;/span&gt; fmt &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; datetime&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strftime&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;self&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%Y-%m-%d %H:%M:%S.%f'&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; fmt &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; fmt&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; @staticmethod&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;def&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strptime&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;string&lt;span style="color: #990000"&gt;,&lt;/span&gt; fmt &lt;span style="color: #990000"&gt;=&lt;/span&gt; None&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; datetime&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strptime&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;string&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%Y-%m-%d %H:%M:%S.%f'&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; fmt &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;is&lt;/span&gt;&lt;/span&gt; None &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; fmt&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;def&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;cdzsh&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dir&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;chdir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'screen'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'zsh'&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;def&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getrows_ordered&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;db&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt; c &lt;span style="color: #990000"&gt;=&lt;/span&gt; db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;cursor&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt; ret &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;{}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; row &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; c&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;execute&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'SELECT id, added, path FROM Paths'&lt;/span&gt;&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;  id&lt;span style="color: #990000"&gt;,&lt;/span&gt; now&lt;span style="color: #990000"&gt;,&lt;/span&gt; path &lt;span style="color: #990000"&gt;=&lt;/span&gt; row&lt;br /&gt;  ret&lt;span style="color: #990000"&gt;[&lt;/span&gt;Sdatetime&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strptime&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;now&lt;span style="color: #990000"&gt;)]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; id&lt;span style="color: #990000"&gt;,&lt;/span&gt; path&lt;br /&gt; keys &lt;span style="color: #990000"&gt;=&lt;/span&gt; ret&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;keys&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt; keys&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sort&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;reverse &lt;span style="color: #990000"&gt;=&lt;/span&gt; True&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; i &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;xrange&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;keys&lt;span style="color: #990000"&gt;)):&lt;/span&gt;&lt;br /&gt;  key &lt;span style="color: #990000"&gt;=&lt;/span&gt; keys&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;  id&lt;span style="color: #990000"&gt;,&lt;/span&gt; value &lt;span style="color: #990000"&gt;=&lt;/span&gt; ret&lt;span style="color: #990000"&gt;[&lt;/span&gt;key&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;  yield i&lt;span style="color: #990000"&gt;,&lt;/span&gt; id&lt;span style="color: #990000"&gt;,&lt;/span&gt; key&lt;span style="color: #990000"&gt;,&lt;/span&gt; value&lt;br /&gt;&lt;br /&gt;db &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Connection&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;join&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;environ&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'HOME'&lt;/span&gt;&lt;span style="color: #990000"&gt;],&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'.path.db'&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;execute&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'CREATE TABLE IF NOT EXISTS Paths(id INTEGER PRIMARY KEY AUTOINCREMENT, added CHAR(48), path VARCHAR(255) UNIQUE)'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;commit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;and&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'add'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  c &lt;span style="color: #990000"&gt;=&lt;/span&gt; db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;cursor&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  path &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getcwd&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;3&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   path &lt;span style="color: #990000"&gt;=&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;  now &lt;span style="color: #990000"&gt;=&lt;/span&gt; Sdatetime&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;now&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   c&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;execute&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'INSERT INTO Paths(added, path) VALUES(?, ?)'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;now&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strftime&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(),&lt;/span&gt; path&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;   db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;commit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;except&lt;/span&gt;&lt;/span&gt; IntegrityError&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Path already in database:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; path&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;elif&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;and&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'del'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  c &lt;span style="color: #990000"&gt;=&lt;/span&gt; db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;cursor&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  ids &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;([&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; arg &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;:]])&lt;/span&gt;&lt;br /&gt;  rows &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;list&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getrows_ordered&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;db&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; id &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; ids&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    c&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;execute&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'DELETE FROM Paths WHERE id = ?'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;rows&lt;span style="color: #990000"&gt;[&lt;/span&gt;id&lt;span style="color: #990000"&gt;][&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;],))&lt;/span&gt;&lt;br /&gt;    db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;commit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;except&lt;/span&gt;&lt;/span&gt; IndexError&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Invalid index:'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; id&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;elif&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;and&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'delall'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  c &lt;span style="color: #990000"&gt;=&lt;/span&gt; db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;cursor&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  c&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;execute&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'DELETE FROM Paths'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;  db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;commit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;elif&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  c &lt;span style="color: #990000"&gt;=&lt;/span&gt; db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;cursor&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;  ids &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; arg &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;:]]&lt;/span&gt;&lt;br /&gt;  rows &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;list&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getrows_ordered&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;db&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; id &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; ids&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   row &lt;span style="color: #990000"&gt;=&lt;/span&gt; rows&lt;span style="color: #990000"&gt;[&lt;/span&gt;id&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;   now &lt;span style="color: #990000"&gt;=&lt;/span&gt; Sdatetime&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;now&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;   c&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;execute&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'UPDATE PATHS SET added = ? WHERE id = ?'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;now&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strftime&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(),&lt;/span&gt; row&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]))&lt;/span&gt;&lt;br /&gt;   path &lt;span style="color: #990000"&gt;=&lt;/span&gt; rows&lt;span style="color: #990000"&gt;[&lt;/span&gt;id&lt;span style="color: #990000"&gt;][&lt;/span&gt;&lt;span style="color: #993399"&gt;3&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;cdzsh&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;path&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;  db&lt;span style="color: #990000"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;commit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Usage: %s [ [ path# | add [ path ] | del path# | delall ] ]'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt; i&lt;span style="color: #990000"&gt;,&lt;/span&gt; id&lt;span style="color: #990000"&gt;,&lt;/span&gt; key&lt;span style="color: #990000"&gt;,&lt;/span&gt; value &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;in&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;getrows_ordered&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;db&lt;span style="color: #990000"&gt;):&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'%d:'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; i&lt;span style="color: #990000"&gt;,&lt;/span&gt; value&lt;/code&gt;This script is essentially a cache for directories that the user wants to keep accessing often, and reorders the entries by date every time:&lt;code class="console"&gt;Programs % cwork&lt;br /&gt;0: /home/neil/Programs/CSE444/2009-05-07:Project3&lt;br /&gt;1: /home/neil/Programs/CSE481&lt;br /&gt;Programs % cwork add&lt;br /&gt;Programs % cwork&lt;br /&gt;0: /home/neil/Programs&lt;br /&gt;1: /home/neil/Programs/CSE444/2009-05-07:Project3&lt;br /&gt;2: /home/neil/Programs/CSE481&lt;br /&gt;Programs % cwork 0&lt;/code&gt;&lt;p&gt;The last command opens up a new GNU Screen window with a shell in the directory requested.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-3191140723960864798?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/3191140723960864798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=3191140723960864798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3191140723960864798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3191140723960864798'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/05/cworkpy.html' title='cwork.py'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-3558437920791779818</id><published>2009-04-19T15:07:00.000-07:00</published><updated>2009-04-19T15:10:03.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>screensh</title><content type='html'>&lt;p&gt;I finally found out how to get &lt;tt&gt;ssh "$HOST" screen&lt;/tt&gt; to work!  The secret is shown by this convenient Python script that launches an SSH session to a remote host and starts screen:&lt;/p&gt;&lt;h4 class="codetitle"&gt;screensh.py&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;#!/usr/bin/python&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; subprocess &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; Popen&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;from&lt;/span&gt;&lt;/span&gt; sys &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;import&lt;/span&gt;&lt;/span&gt; argv&lt;span style="color: #990000"&gt;,&lt;/span&gt; exit&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;len&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; options &lt;span style="color: #990000"&gt;=&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;:-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt; host &lt;span style="color: #990000"&gt;=&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Popen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;([&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'ssh'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'-t'&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;+&lt;/span&gt; options &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #990000"&gt;[&lt;/span&gt;host&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'screen'&lt;/span&gt;&lt;span style="color: #990000"&gt;]).&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;communicate&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;print&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;&amp;gt;&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'Usage: %s [ options ] host'&lt;/span&gt; &lt;span style="color: #990000"&gt;%&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;p&gt;Python really is a "clean" language.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-3558437920791779818?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/3558437920791779818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=3558437920791779818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3558437920791779818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3558437920791779818'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/04/screensh.html' title='screensh'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-5616451132151411682</id><published>2009-04-17T18:01:00.000-07:00</published><updated>2009-04-17T18:05:35.123-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>shparse</title><content type='html'>&lt;p&gt;Wanting to learn the basics of how to write Python modules in C, I started on this simple function.  All it does is use shell-style rules to parse a string into "arguments."&lt;/p&gt;&lt;h4 class="codetitle"&gt;shparse.c&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;Python.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#define&lt;/span&gt;&lt;/span&gt; INCS &lt;span style="color: #993399"&gt;64&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;enum&lt;/span&gt;&lt;/span&gt; EMODE &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; EMODE_ESC &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt; EMODE_QUOT &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt; EMODE_DQUOT &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;static&lt;/span&gt;&lt;/span&gt; PyObject &lt;span style="color: #990000"&gt;*&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;shparse_parse&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;PyObject &lt;span style="color: #990000"&gt;*&lt;/span&gt; self&lt;span style="color: #990000"&gt;,&lt;/span&gt; PyObject &lt;span style="color: #990000"&gt;*&lt;/span&gt; args&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; Py_UNICODE &lt;span style="color: #990000"&gt;*&lt;/span&gt; cmdstring&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;size_t&lt;/span&gt; i&lt;span style="color: #990000"&gt;,&lt;/span&gt; x &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; cplen&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; mode &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; PyObject &lt;span style="color: #990000"&gt;*&lt;/span&gt; ret&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;Py_UNICODE&lt;/span&gt; c&lt;span style="color: #990000"&gt;,&lt;/span&gt; cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;4&lt;/span&gt;&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Py_UNICODE &lt;span style="color: #990000"&gt;*&lt;/span&gt; buff &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;calloc&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;INCS&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;sizeof&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;Py_UNICODE&lt;span style="color: #990000"&gt;)),&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; tmp&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;size_t&lt;/span&gt; bufflen &lt;span style="color: #990000"&gt;=&lt;/span&gt; INCS&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;PyArg_ParseTuple&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;args&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"u"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;cmdstring&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; ret &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;PyList_New&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; cmdstring&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;];&lt;/span&gt; i&lt;span style="color: #990000"&gt;++)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  c &lt;span style="color: #990000"&gt;=&lt;/span&gt; cmdstring&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt;  cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;3&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; cplen &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;mode &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt; EMODE_ESC&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; c&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   cplen &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   mode &lt;span style="color: #990000"&gt;&amp;amp;=&lt;/span&gt; &lt;span style="color: #990000"&gt;~&lt;/span&gt;EMODE_ESC&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;mode &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt; EMODE_QUOT&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;c&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\'&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     mode &lt;span style="color: #990000"&gt;&amp;amp;=&lt;/span&gt; &lt;span style="color: #990000"&gt;~&lt;/span&gt;EMODE_QUOT&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; c&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     cplen &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;mode &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt; EMODE_DQUOT&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;c&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\\&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     mode &lt;span style="color: #990000"&gt;|=&lt;/span&gt; EMODE_ESC&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'"'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     mode &lt;span style="color: #990000"&gt;&amp;amp;=&lt;/span&gt; &lt;span style="color: #990000"&gt;~&lt;/span&gt;EMODE_DQUOT&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; c&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     cplen &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;c&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\\&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     mode &lt;span style="color: #990000"&gt;|=&lt;/span&gt; EMODE_ESC&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\'&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     mode &lt;span style="color: #990000"&gt;|=&lt;/span&gt; EMODE_QUOT&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'"'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     mode &lt;span style="color: #990000"&gt;|=&lt;/span&gt; EMODE_DQUOT&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;' '&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;x &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;      x &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;PyList_Append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;ret&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Py_BuildValue&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"u"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; buff&lt;span style="color: #990000"&gt;));&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; c&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     cplen &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;])&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;x &lt;span style="color: #990000"&gt;+&lt;/span&gt; cplen &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; bufflen&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    bufflen &lt;span style="color: #990000"&gt;+=&lt;/span&gt; INCS&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    buff &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;realloc&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;buff&lt;span style="color: #990000"&gt;,&lt;/span&gt; bufflen&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   buff&lt;span style="color: #990000"&gt;[&lt;/span&gt;x&lt;span style="color: #990000"&gt;++]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;cplen &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    buff&lt;span style="color: #990000"&gt;[&lt;/span&gt;x&lt;span style="color: #990000"&gt;++]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;cplen &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;3&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;     buff&lt;span style="color: #990000"&gt;[&lt;/span&gt;x&lt;span style="color: #990000"&gt;++]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;cplen &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #993399"&gt;4&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;      buff&lt;span style="color: #990000"&gt;[&lt;/span&gt;x&lt;span style="color: #990000"&gt;++]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; cp&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      buff&lt;span style="color: #990000"&gt;[&lt;/span&gt;x&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;     buff&lt;span style="color: #990000"&gt;[&lt;/span&gt;x&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    buff&lt;span style="color: #990000"&gt;[&lt;/span&gt;x&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;x &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;PyList_Append&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;ret&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Py_BuildValue&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"u"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; buff&lt;span style="color: #990000"&gt;));&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;free&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;buff&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; ret&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;static&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;PyMethodDef&lt;/span&gt; Methods&lt;span style="color: #990000"&gt;[]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"parse"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; shparse_parse&lt;span style="color: #990000"&gt;,&lt;/span&gt; METH_VARARGS&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Parse an input string."&lt;/span&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; NULL&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;PyMODINIT_FUNC&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;initshparse&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;void&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;Py_InitModule&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"shparse"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; Methods&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;p&gt;It could be quite useful, and would most definitely be faster than equivalent Python code.  By the way, the &lt;a href="http://docs.python.org/c-api/index.html"&gt;Python/C API&lt;/a&gt; reference is quite good.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-5616451132151411682?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/5616451132151411682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=5616451132151411682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5616451132151411682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/5616451132151411682'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/04/shparse.html' title='shparse'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6928282707857820890</id><published>2009-03-29T14:17:00.000-07:00</published><updated>2009-03-29T14:27:31.850-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><title type='text'>musicdir</title><content type='html'>&lt;p&gt;I've been organizing my music in a certain way for quite some time: "$ARTIST - $ALBUM/$TRACK - $TITLE.flac".  Even so, I've never taken advantage of that structure, at least programmatically.  Now I have, with this program:&lt;/p&gt;&lt;h4 class="codetitle"&gt;musicdir.c&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;glob.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;argp.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;typedef&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;enum&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; MODE_ALL &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt; MODE&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;arguments&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; artist&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; album&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; title&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; root&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;size_t&lt;/span&gt; artist_len&lt;span style="color: #990000"&gt;,&lt;/span&gt; album_len&lt;span style="color: #990000"&gt;,&lt;/span&gt; title_len&lt;span style="color: #990000"&gt;,&lt;/span&gt; root_len&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; track&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; mode&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt; argument &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"/home/music/"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;12&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;-&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;error_t&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;parser&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; key&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; arg&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;argp_state&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; state&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; track&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;key&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'a'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;artist &lt;span style="color: #990000"&gt;=&lt;/span&gt; arg&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;artist_len &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'c'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;album &lt;span style="color: #990000"&gt;=&lt;/span&gt; arg&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;album_len &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'t'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;title &lt;span style="color: #990000"&gt;=&lt;/span&gt; arg&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;title_len &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'r'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;root &lt;span style="color: #990000"&gt;=&lt;/span&gt; arg&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;root_len &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'n'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   track &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;atoi&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;arg&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;track &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;    argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;track &lt;span style="color: #990000"&gt;=&lt;/span&gt; track&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; ARGP_ERR_UNKNOWN&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'l'&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;mode &lt;span style="color: #990000"&gt;|=&lt;/span&gt; MODE_ALL&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; ARGP_KEY_ARG&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; ARGP_ERR_UNKNOWN&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; ARGP_KEY_END&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;default&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; ARGP_ERR_UNKNOWN&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;main&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; argc&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;**&lt;/span&gt; argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;static&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;argp_option&lt;/span&gt; options&lt;span style="color: #990000"&gt;[]&lt;/span&gt; &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;{&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"artist"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'a'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"artist"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"The artist part of the filename."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;{&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"album"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'c'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"album"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"The album part of the filename."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;{&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"title"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'t'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"title"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"The title part of the filename."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;{&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"track"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'n'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"track"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"The track part of the filename, greater than zero."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;{&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"root-dir"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'r'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"root-dir"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"The root music directory. [/home/music]"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;{&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"list-all"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'l'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"List all found files rather than the default (the first file)."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;{&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;static&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;argp&lt;/span&gt; args_parsed &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  options&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;parser&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;"The music directory finder."&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt;&lt;br /&gt;  NULL&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; arg_index&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;glob_t&lt;/span&gt; globs&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; glob_result&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;error_t&lt;/span&gt; result&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;size_t&lt;/span&gt; total_len &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;16&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; i&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; pattern &lt;span style="color: #990000"&gt;=&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((&lt;/span&gt;result &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;argp_parse&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&amp;amp;&lt;/span&gt;args_parsed&lt;span style="color: #990000"&gt;,&lt;/span&gt; argc&lt;span style="color: #990000"&gt;,&lt;/span&gt; argv&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;arg_index&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;argument&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;/* printf("root=%s, artist=%s, album=%s, title=%s, track=%d\n", argument.root, argument.artist, argument.album, argument.title, argument.track); */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;/* Allocate string for pattern */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;root&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   total_len &lt;span style="color: #990000"&gt;+=&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;root_len&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;artist&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   total_len &lt;span style="color: #990000"&gt;+=&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;artist_len&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;album&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   total_len &lt;span style="color: #990000"&gt;+=&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;album_len&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;title&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   total_len &lt;span style="color: #990000"&gt;+=&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;title_len&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;track &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   total_len &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="color: #993399"&gt;11&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  pattern &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;calloc&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;total_len&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;sizeof&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;char&lt;/span&gt;&lt;span style="color: #990000"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;/* Copy arguments into pattern */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcpy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;,&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;root&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;artist&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;),&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%s - "&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;artist&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"* - "&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;album&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;),&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%s/"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;album&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"*/"&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;track &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;),&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%d - "&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;track&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"* - "&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;title&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;sprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;),&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%s.*"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;title&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"*.*"&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;/* puts(pattern); */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((&lt;/span&gt;glob_result &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;glob&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;,&lt;/span&gt; GLOB_NOESCAPE&lt;span style="color: #990000"&gt;,&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;globs&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;globs&lt;span style="color: #990000"&gt;.&lt;/span&gt;gl_pathc &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;puts&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(*&lt;/span&gt;globs&lt;span style="color: #990000"&gt;.&lt;/span&gt;gl_pathv&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argument&lt;span style="color: #990000"&gt;.&lt;/span&gt;mode &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt; MODE_ALL&lt;span style="color: #990000"&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; i &lt;span style="color: #990000"&gt;&amp;lt;&lt;/span&gt; globs&lt;span style="color: #990000"&gt;.&lt;/span&gt;gl_pathc&lt;span style="color: #990000"&gt;;&lt;/span&gt; i&lt;span style="color: #990000"&gt;++)&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;puts&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;globs&lt;span style="color: #990000"&gt;.&lt;/span&gt;gl_pathv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;]);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;globfree&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&amp;amp;&lt;/span&gt;globs&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;glob_result&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; GLOB_NOSPACE&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fputs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"glob: Unable to allocate memory.&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; GLOB_ABORTED&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fputs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"glob: Read error.&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;case&lt;/span&gt;&lt;/span&gt; GLOB_NOMATCH&lt;span style="color: #990000"&gt;:&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fputs&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"glob: No such file or directory.&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; stderr&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;free&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;pattern&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"argp_parse"&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;code class="console"&gt;% ./musicdir --help                        &lt;br /&gt;Usage: musicdir [OPTION...]&lt;br /&gt;The music directory finder.&lt;br /&gt;&lt;br /&gt;  -a, --artist=artist        The artist part of the filename.&lt;br /&gt;  -c, --album=album          The album part of the filename.&lt;br /&gt;  -l, --list-all             List all found files rather than the default (the&lt;br /&gt;                             first file).&lt;br /&gt;  -n, --track=track          The track part of the filename, greater than zero.&lt;br /&gt;                            &lt;br /&gt;  -r, --root-dir=root-dir    The root music directory. [/home/music]&lt;br /&gt;      --root-dir=root-dir    The root music directory. [/home/music]&lt;br /&gt;  -t, --title=title          The title part of the filename.&lt;br /&gt;  -?, --help                 Give this help list&lt;br /&gt;      --usage                Give a short usage message&lt;br /&gt;&lt;br /&gt;Mandatory or optional arguments to long options are also mandatory or optional&lt;br /&gt;for any corresponding short options.&lt;br /&gt;% ./musicdir -a aiko&lt;br /&gt;/home/music/aiko - KissHug/01 - KissHug.flac&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6928282707857820890?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6928282707857820890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6928282707857820890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6928282707857820890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6928282707857820890'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/03/musicdir.html' title='musicdir'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-3160052478955591404</id><published>2009-03-19T14:10:00.000-07:00</published><updated>2009-03-19T14:14:08.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>sizeof</title><content type='html'>&lt;p&gt;Even though this tool isn't really done, I've decided to release what I've built so far.&lt;/p&gt;&lt;p&gt;This program finds the size of a directory or file's contents based on the arguments given, then scales it down into human-readable output.  It's a great tool for tracking the largest files on disk, and is far more reliable than du, despite being slower.&lt;/p&gt;&lt;h4 class="codetite"&gt;sizeof.c&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;time.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;signal.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/stat.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;dirent.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#define&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;MAX_FLEN&lt;/span&gt; PATH_MAX&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; failname &lt;span style="color: #990000"&gt;=&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;void&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;seg&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;()&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;failname&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%s: Unable to recover; exiting.&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; failname&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;255&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;off_t&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;get_size&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; dirname&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #008080"&gt;ino_t&lt;/span&gt; dinod&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;stat&lt;/span&gt; info&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; DIR &lt;span style="color: #990000"&gt;*&lt;/span&gt; dirinfo&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;dirent&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; file&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;off_t&lt;/span&gt; total &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; tmp&lt;span style="color: #990000"&gt;[&lt;/span&gt;MAX_FLEN&lt;span style="color: #990000"&gt;],&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; tmp_target&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;memset&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmp&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\0&lt;/span&gt;&lt;span style="color: #FF0000"&gt;'&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; MAX_FLEN&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;size_t&lt;/span&gt; tmp_target_len&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strncpy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmp&lt;span style="color: #990000"&gt;,&lt;/span&gt; dirname&lt;span style="color: #990000"&gt;,&lt;/span&gt; MAX_FLEN &lt;span style="color: #990000"&gt;-&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strcat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmp&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"/"&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; tmp_target &lt;span style="color: #990000"&gt;=&lt;/span&gt; tmp &lt;span style="color: #990000"&gt;+&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmp&lt;span style="color: #990000"&gt;));&lt;/span&gt;&lt;br /&gt; tmp_target_len &lt;span style="color: #990000"&gt;=&lt;/span&gt; MAX_FLEN &lt;span style="color: #990000"&gt;-&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strlen&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmp_target&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #990000"&gt;-&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; dirinfo &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;opendir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirname&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; failname &lt;span style="color: #990000"&gt;=&lt;/span&gt; dirname&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirinfo &lt;span style="color: #990000"&gt;!=&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((&lt;/span&gt;file &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;readdir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirinfo&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #990000"&gt;!=&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;!=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strncpy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmp_target&lt;span style="color: #990000"&gt;,&lt;/span&gt; file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;,&lt;/span&gt; tmp_target_len&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;    failname &lt;span style="color: #990000"&gt;=&lt;/span&gt; tmp&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;stat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmp&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;info&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISDIR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_ino &lt;span style="color: #990000"&gt;!=&lt;/span&gt; dinod&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="font-style: italic"&gt;&lt;span style="color: #9A1900"&gt;// Prevent symlinks to self&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;       total &lt;span style="color: #990000"&gt;+=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;get_size&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tmp&lt;span style="color: #990000"&gt;,&lt;/span&gt; info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_ino&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"%s: Directory symlink to self.&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; tmp&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISREG&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;      total &lt;span style="color: #990000"&gt;+=&lt;/span&gt; info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_size&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;closedir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirinfo&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirname&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; total&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;void&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;scale_down&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;double&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; total&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;**&lt;/span&gt; suffix&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(*&lt;/span&gt;total &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;30&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #990000"&gt;*&lt;/span&gt;total &lt;span style="color: #990000"&gt;/=&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;30&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #990000"&gt;*&lt;/span&gt;suffix &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"gigabytes"&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(*&lt;/span&gt;total &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;20&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #990000"&gt;*&lt;/span&gt;total &lt;span style="color: #990000"&gt;/=&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;20&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #990000"&gt;*&lt;/span&gt;suffix &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"megabytes"&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(*&lt;/span&gt;total &lt;span style="color: #990000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;10&lt;/span&gt;&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #990000"&gt;*&lt;/span&gt;total &lt;span style="color: #990000"&gt;/=&lt;/span&gt; &lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color: #993399"&gt;10&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #990000"&gt;*&lt;/span&gt;suffix &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"kilobytes"&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;main&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; argc&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;**&lt;/span&gt; argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;double&lt;/span&gt; total&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; suffix&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #009900"&gt;int&lt;/span&gt; i&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;stat&lt;/span&gt; info&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;signal&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #993399"&gt;11&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;seg&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argc &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; i &lt;span style="color: #990000"&gt;&amp;lt;&lt;/span&gt; argc&lt;span style="color: #990000"&gt;;&lt;/span&gt; i&lt;span style="color: #990000"&gt;++)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;stat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;],&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;info&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    suffix &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"bytes"&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISDIR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;     total &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;get_size&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;],&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISREG&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;     total &lt;span style="color: #990000"&gt;=&lt;/span&gt; info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_size&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;scale_down&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&amp;amp;&lt;/span&gt;total&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;suffix&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"%-40s: %.2lf %s&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;],&lt;/span&gt; total&lt;span style="color: #990000"&gt;,&lt;/span&gt; suffix&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;]);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argc &lt;span style="color: #990000"&gt;==&lt;/span&gt; &lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;stat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;],&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;info&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   suffix &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"bytes"&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISDIR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;    total &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;get_size&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;],&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;S_ISREG&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mode&lt;span style="color: #990000"&gt;))&lt;/span&gt;&lt;br /&gt;    total &lt;span style="color: #990000"&gt;=&lt;/span&gt; info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_size&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;scale_down&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&amp;amp;&lt;/span&gt;total&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;suffix&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;printf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"%.2lf %s&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; total&lt;span style="color: #990000"&gt;,&lt;/span&gt; suffix&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;2&lt;/span&gt;&lt;span style="color: #990000"&gt;]);&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;fprintf&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;stderr&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;"Usage: %s directory&lt;/span&gt;&lt;span style="color: #CC33CC"&gt;\n&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt;argv&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;code class="console"&gt;% ./sizeof *&lt;br /&gt;Makefile                                : 291.00 bytes&lt;br /&gt;sizeof                                  : 19.33 kilobytes&lt;br /&gt;sizeof.c                                : 2.51 kilobytes&lt;br /&gt;sizeof.c.html                           : 23.34 kilobytes&lt;br /&gt;sizeof.o                                : 13.17 kilobytes&lt;br /&gt;sizeof.s                                : 8.08 kilobytes&lt;br /&gt;sizeof_un.s                             : 7.80 kilobytes&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-3160052478955591404?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/3160052478955591404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=3160052478955591404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3160052478955591404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/3160052478955591404'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/03/sizeof.html' title='sizeof'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-6628849890688979368</id><published>2009-03-19T07:12:00.000-07:00</published><updated>2009-03-19T13:27:26.677-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='x86 Assembly'/><category scheme='http://www.blogger.com/atom/ns#' term='x86-64 Assembly'/><title type='text'>cookie64!</title><content type='html'>&lt;p&gt;The next in the cookie legacy: cookie for x86-64 systems (cookie64).  The calling conventions of the x86-64 are considerably different from those of the x86.  For one, to pass up to six arguments you use the registers %rdi, %rsi, %rdx, %rcx, %r8d, and %r9d in that order.  To pass any more, just push the arguments onto the stack.  The end result of this choice: greater speed due to fewer memory operations.&lt;/p&gt;&lt;p&gt;Here's the actual code:&lt;/p&gt;&lt;h4 class="codetitle"&gt;cookie64.s&lt;/h4&gt;&lt;code class="code"&gt;.testString:&lt;br /&gt; .string "Would you like some cookies?"&lt;br /&gt;.yesString:&lt;br /&gt; .string "yes\n"&lt;br /&gt;.noString:&lt;br /&gt; .string "no\n"&lt;br /&gt;.yesReply:&lt;br /&gt; .string "Here you go!"&lt;br /&gt;.noReply:&lt;br /&gt; .string "Aww...why not?"&lt;br /&gt;.neitherReply:&lt;br /&gt; .string "What?"&lt;br /&gt;.globl main&lt;br /&gt;main:&lt;br /&gt; pushq %rbp&lt;br /&gt; movq %rsp, %rbp&lt;br /&gt;&lt;br /&gt; subq $1024, %rsp&lt;br /&gt;&lt;br /&gt; movq $.testString, %rdi&lt;br /&gt; call puts&lt;br /&gt;&lt;br /&gt;repeat:&lt;br /&gt; movl $0, -8(%rbp)&lt;br /&gt;&lt;br /&gt; movq stdin(%rip), %rdx&lt;br /&gt; movq $1024, %rsi&lt;br /&gt; leaq -8(%rbp), %rdi&lt;br /&gt; call fgets&lt;br /&gt;&lt;br /&gt; movzbq -8(%rbp), %rax&lt;br /&gt; testb %al, %al&lt;br /&gt; je main_end&lt;br /&gt; &lt;br /&gt; leaq -8(%rbp), %rsi&lt;br /&gt; movq $.yesString, %rdi&lt;br /&gt; call strcasecmp&lt;br /&gt;&lt;br /&gt; cmpq $0, %rax&lt;br /&gt; je yes_label&lt;br /&gt;&lt;br /&gt; movq $.noString, %rdi&lt;br /&gt; call strcasecmp&lt;br /&gt;&lt;br /&gt; cmpq $0, %rax&lt;br /&gt; je no_label&lt;br /&gt;&lt;br /&gt;neither_label:&lt;br /&gt; movq $.neitherReply, %rdi&lt;br /&gt; call puts&lt;br /&gt; jmp repeat&lt;br /&gt;&lt;br /&gt;yes_label:&lt;br /&gt; movq $.yesReply, %rdi&lt;br /&gt; call puts&lt;br /&gt; jmp main_end&lt;br /&gt;no_label:&lt;br /&gt; movq $.noReply, %rdi&lt;br /&gt; call puts&lt;br /&gt;main_end:&lt;br /&gt; addq $1024, %rsp&lt;br /&gt; movq $0, %rax&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; movq %rbp, %rsp&lt;br /&gt; popq %rbp&lt;br /&gt; ret&lt;/code&gt;&lt;p&gt;Still as before, the console output is the same.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-6628849890688979368?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/6628849890688979368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=6628849890688979368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6628849890688979368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/6628849890688979368'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/03/cookie64.html' title='cookie64!'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-1137141390967188236</id><published>2009-03-19T06:43:00.001-07:00</published><updated>2009-03-19T06:45:09.520-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='x86 Assembly'/><title type='text'>More cookie</title><content type='html'>&lt;p&gt;Dissatisfied with how my &lt;a href="http://snakesfoxes.blogspot.com/2009/03/cookie-again.html"&gt;most recent attempt&lt;/a&gt; handled strings, I decided to fix it a bit.  Thank goodness for GCC's -S option:&lt;/p&gt;&lt;h4 class="codetitle"&gt;cookie.s&lt;/h4&gt;&lt;code class="code"&gt;.testString:&lt;br /&gt; .string "Would you like some cookies?"&lt;br /&gt;.yesString:&lt;br /&gt; .string "yes\n"&lt;br /&gt;.noString:&lt;br /&gt; .string "no\n"&lt;br /&gt;.yesReply:&lt;br /&gt; .string "Here you go!"&lt;br /&gt;.noReply:&lt;br /&gt; .string "Aww...why not?"&lt;br /&gt;.neitherReply:&lt;br /&gt; .string "What?"&lt;br /&gt;.globl main&lt;br /&gt;main:&lt;br /&gt; pushl %ebp&lt;br /&gt; movl %esp, %ebp&lt;br /&gt;&lt;br /&gt; subl $1024, %esp&lt;br /&gt; &lt;br /&gt; pushl $.testString&lt;br /&gt; call puts&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt;repeat:&lt;br /&gt; movl $0, -4(%ebp)&lt;br /&gt;&lt;br /&gt; pushl stdin&lt;br /&gt; pushl $1024&lt;br /&gt; leal -4(%ebp), %eax&lt;br /&gt; pushl %eax&lt;br /&gt; call fgets&lt;br /&gt; addl $12, %esp&lt;br /&gt;&lt;br /&gt; movzbl -4(%ebp), %eax&lt;br /&gt; testb %al, %al&lt;br /&gt; je main_end&lt;br /&gt; &lt;br /&gt; leal -4(%ebp), %eax&lt;br /&gt; pushl %eax&lt;br /&gt; pushl $.yesString&lt;br /&gt; call strcasecmp&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt; cmpl $0, %eax&lt;br /&gt; je yes_label&lt;br /&gt;&lt;br /&gt; pushl $.noString&lt;br /&gt; call strcasecmp&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt; cmpl $0, %eax&lt;br /&gt; je no_label&lt;br /&gt;&lt;br /&gt;neither_label:&lt;br /&gt; pushl $.neitherReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt; jmp repeat&lt;br /&gt;&lt;br /&gt;yes_label:&lt;br /&gt; pushl $.yesReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt; jmp main_end&lt;br /&gt;no_label:&lt;br /&gt; pushl $.noReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt;main_end:&lt;br /&gt; addl $1024, %esp&lt;br /&gt; movl $0, %eax&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; movl %ebp, %esp&lt;br /&gt; popl %ebp&lt;br /&gt; ret&lt;/code&gt;&lt;p&gt;Yet again, the console output is the same as before.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-1137141390967188236?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/1137141390967188236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=1137141390967188236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1137141390967188236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/1137141390967188236'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/03/more-cookie.html' title='More cookie'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-477383130470427934</id><published>2009-03-18T15:34:00.000-07:00</published><updated>2009-03-18T15:35:40.395-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='x86 Assembly'/><title type='text'>cookie Again</title><content type='html'>&lt;p&gt;After reading up on calling conventions a bit more since &lt;a href="http://snakesfoxes.blogspot.com/2009/03/cookie.html"&gt;last time&lt;/a&gt;, I decided to rewrite cookie.s:&lt;/p&gt;&lt;h4 class="codetitle"&gt;cookie.s&lt;/h4&gt;&lt;code class="code"&gt;.testString:&lt;br /&gt; .string "Would you like some cookies?"&lt;br /&gt;.yesString:&lt;br /&gt; .string "yes\n"&lt;br /&gt;.noString:&lt;br /&gt; .string "no\n"&lt;br /&gt;.yesReply:&lt;br /&gt; .string "Here you go!"&lt;br /&gt;.noReply:&lt;br /&gt; .string "Aww...why not?"&lt;br /&gt;.neitherReply:&lt;br /&gt; .string "What?"&lt;br /&gt;.globl main&lt;br /&gt;main:&lt;br /&gt; pushl %ebp&lt;br /&gt; movl %esp, %ebp&lt;br /&gt;&lt;br /&gt; subl $1024, %esp&lt;br /&gt; &lt;br /&gt; pushl $.testString&lt;br /&gt; call puts&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt;repeat:&lt;br /&gt; movl $0, -4(%ebp)&lt;br /&gt;&lt;br /&gt; pushl stdin&lt;br /&gt; pushl $1024&lt;br /&gt; leal -4(%ebp), %eax&lt;br /&gt; pushl %eax&lt;br /&gt; call fgets&lt;br /&gt; addl $12, %esp&lt;br /&gt;&lt;br /&gt; movl -4(%ebp), %eax&lt;br /&gt; shl $24, %eax&lt;br /&gt; jz main_end&lt;br /&gt; &lt;br /&gt; leal -4(%ebp), %eax&lt;br /&gt; pushl %eax&lt;br /&gt; pushl $.yesString&lt;br /&gt; call strcasecmp&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt; cmpl $0, %eax&lt;br /&gt; je yes_label&lt;br /&gt;&lt;br /&gt; pushl $.noString&lt;br /&gt; call strcasecmp&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt; cmpl $0, %eax&lt;br /&gt; je no_label&lt;br /&gt;&lt;br /&gt;neither_label:&lt;br /&gt; pushl $.neitherReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt; jmp repeat&lt;br /&gt;&lt;br /&gt;yes_label:&lt;br /&gt; pushl $.yesReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt; jmp main_end&lt;br /&gt;no_label:&lt;br /&gt; pushl $.noReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt;main_end:&lt;br /&gt; addl $1024, %esp&lt;br /&gt; movl $0, %eax&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; movl %ebp, %esp&lt;br /&gt; popl %ebp&lt;br /&gt; ret&lt;/code&gt;&lt;p&gt;The example output is the same as last time.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-477383130470427934?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/477383130470427934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=477383130470427934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/477383130470427934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/477383130470427934'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/03/cookie-again.html' title='cookie Again'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-7612324038397163191</id><published>2009-03-18T14:55:00.000-07:00</published><updated>2009-03-18T15:00:53.662-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='x86 Assembly'/><title type='text'>cookie</title><content type='html'>&lt;p&gt;After a little studying for my compilers course, I decided to write an assembly language program for practice.  Here it is:&lt;/p&gt;&lt;h4 class="codetitle"&gt;cookie.s&lt;/h4&gt;&lt;code class="code"&gt;.testString:&lt;br /&gt; .string "Would you like some cookies?"&lt;br /&gt;.yesString:&lt;br /&gt; .string "yes\n"&lt;br /&gt;.noString:&lt;br /&gt; .string "no\n"&lt;br /&gt;.yesReply:&lt;br /&gt; .string "Here you go!"&lt;br /&gt;.noReply:&lt;br /&gt; .string "Aww...why not?"&lt;br /&gt;.neitherReply:&lt;br /&gt; .string "What?"&lt;br /&gt;.globl main&lt;br /&gt;main:&lt;br /&gt; movl %esp, %ebp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; leal 4(%esp), %eax&lt;br /&gt; subl $1024, %esp&lt;br /&gt; &lt;br /&gt; pushl %eax&lt;br /&gt;&lt;br /&gt; pushl $.testString&lt;br /&gt; call puts&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt;repeat:&lt;br /&gt; movl (%esp), %eax&lt;br /&gt; movl $0, (%eax)&lt;br /&gt;&lt;br /&gt; pushl stdin&lt;br /&gt; pushl $1024&lt;br /&gt; pushl %eax&lt;br /&gt; call fgets&lt;br /&gt; addl $12, %esp&lt;br /&gt;&lt;br /&gt; movl (%esp), %eax&lt;br /&gt; movl (%eax), %ebx&lt;br /&gt; shl $24, %ebx&lt;br /&gt; jz main_end&lt;br /&gt; &lt;br /&gt; pushl %eax&lt;br /&gt; pushl $.yesString&lt;br /&gt; call strcasecmp&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt; cmpl $0, %eax&lt;br /&gt; je yes_label&lt;br /&gt;&lt;br /&gt; pushl $.noString&lt;br /&gt; call strcasecmp&lt;br /&gt; addl $4, %esp&lt;br /&gt;&lt;br /&gt; cmpl $0, %eax&lt;br /&gt; je no_label&lt;br /&gt;&lt;br /&gt;neither_label:&lt;br /&gt; pushl $.neitherReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt; jmp repeat&lt;br /&gt;&lt;br /&gt;yes_label:&lt;br /&gt; pushl $.yesReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt; jmp main_end&lt;br /&gt;no_label:&lt;br /&gt; pushl $.noReply&lt;br /&gt; call puts&lt;br /&gt; addl $8, %esp&lt;br /&gt;main_end:&lt;br /&gt; addl $1028, %esp&lt;br /&gt; movl $0, %eax&lt;br /&gt; ret&lt;/code&gt;&lt;code class="console"&gt;neil@superflex Programs % gcc -m32 -ggdb -o cookie cookie.s&lt;br /&gt;% ./cookie&lt;br /&gt;Would you like some cookies?&lt;br /&gt;yes&lt;br /&gt;Here you go!&lt;br /&gt;% ./cookie&lt;br /&gt;Would you like some cookies?&lt;br /&gt;no&lt;br /&gt;Aww...why not?&lt;br /&gt;% ./cookie&lt;br /&gt;Would you like some cookies?&lt;br /&gt;% ./cookie&lt;br /&gt;Would you like some cookies?&lt;br /&gt;eoeaeoae&lt;br /&gt;What?&lt;br /&gt;yes&lt;br /&gt;Here you go!&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7021228780421697859-7612324038397163191?l=snakesfoxes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snakesfoxes.blogspot.com/feeds/7612324038397163191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7021228780421697859&amp;postID=7612324038397163191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/7612324038397163191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7021228780421697859/posts/default/7612324038397163191'/><link rel='alternate' type='text/html' href='http://snakesfoxes.blogspot.com/2009/03/cookie.html' title='cookie'/><author><name>Neil Hodges</name><uri>https://profiles.google.com/116591547779390586705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-zqxWxoF8FRM/AAAAAAAAAAI/AAAAAAAAQNw/peETjFLzFYQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7021228780421697859.post-7846289652438135516</id><published>2009-03-06T06:34:00.000-08:00</published><updated>2009-03-06T06:37:06.827-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Programs'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>latest.c</title><content type='html'>&lt;p&gt;After having learned a lot about how to manipulate files in my past endeavor, I've decided to reimplement latest.sh in C:&lt;/p&gt;&lt;h4 class="codetitle"&gt;latest.c&lt;/h4&gt;&lt;code class="code"&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;time.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/stat.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;sys/types.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#include&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;&amp;lt;dirent.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000080"&gt;#define&lt;/span&gt;&lt;/span&gt; MAX_FLEN &lt;span style="color: #993399"&gt;256&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;main&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #009900"&gt;int&lt;/span&gt; argc&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;const&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #009900"&gt;char&lt;/span&gt; &lt;span style="color: #990000"&gt;**&lt;/span&gt; argv&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #008080"&gt;time_t&lt;/span&gt; value&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #009900"&gt;char&lt;/span&gt; name&lt;span style="color: #990000"&gt;[&lt;/span&gt;MAX_FLEN&lt;span style="color: #990000"&gt;];&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt; tval &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #FF0000"&gt;""&lt;/span&gt;&lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;stat&lt;/span&gt; info&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; DIR &lt;span style="color: #990000"&gt;*&lt;/span&gt; dirinfo&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #008080"&gt;dirent&lt;/span&gt; &lt;span style="color: #990000"&gt;*&lt;/span&gt; file&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080"&gt;size_t&lt;/span&gt; i&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argc &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;i &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="color: #993399"&gt;1&lt;/span&gt;&lt;span style="color: #990000"&gt;;&lt;/span&gt; i &lt;span style="color: #990000"&gt;&amp;lt;&lt;/span&gt; argc&lt;span style="color: #990000"&gt;;&lt;/span&gt; i&lt;span style="color: #990000"&gt;++)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;stat&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;],&lt;/span&gt; &lt;span style="color: #990000"&gt;&amp;amp;&lt;/span&gt;info&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!*&lt;/span&gt;tval&lt;span style="color: #990000"&gt;.&lt;/span&gt;name &lt;span style="color: #990000"&gt;||&lt;/span&gt; info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mtime &lt;span style="color: #990000"&gt;&amp;gt;&lt;/span&gt; tval&lt;span style="color: #990000"&gt;.&lt;/span&gt;value&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;     tval&lt;span style="color: #990000"&gt;.&lt;/span&gt;value &lt;span style="color: #990000"&gt;=&lt;/span&gt; info&lt;span style="color: #990000"&gt;.&lt;/span&gt;st_mtime&lt;span style="color: #990000"&gt;;&lt;/span&gt;&lt;br /&gt;     &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;strncpy&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;tval&lt;span style="color: #990000"&gt;.&lt;/span&gt;name&lt;span style="color: #990000"&gt;,&lt;/span&gt; argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;],&lt;/span&gt; MAX_FLEN&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;perror&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;argv&lt;span style="color: #990000"&gt;[&lt;/span&gt;i&lt;span style="color: #990000"&gt;]);&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #FF0000"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;  dirinfo &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;opendir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;&lt;span style="color: #FF0000"&gt;"."&lt;/span&gt;&lt;span style="color: #990000"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;((&lt;/span&gt;file &lt;span style="color: #990000"&gt;=&lt;/span&gt; &lt;span style="font-weight: bold"&gt;&lt;span style="color: #000000"&gt;readdir&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;dirinfo&lt;span style="color: #990000"&gt;))&lt;/span&gt; &lt;span style="color: #990000"&gt;!=&lt;/span&gt; NULL&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;   &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(&lt;/span&gt;file&lt;span style="color: #990000"&gt;-&amp;gt;&lt;/span&gt;d_name&lt;span style="color: #990000"&gt;[&lt;/span&gt;&lt;span style="color: #993399"&gt;0&lt;/span&gt;&lt;span style="color: #990000"&gt;]&lt;/span&gt; &lt;span style="color: #990000"&gt;!=&lt;/span&gt; &lt;span style="color: #FF0000"&gt;'.'&lt;/span&gt;&lt;span style="color: #990000"&gt;)&lt;/span&gt; &lt;span style="color: #FF0000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold"&gt;&lt;span style="color: #0000FF"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #990000"&gt;(!&lt;/span&gt;&lt;span style="font-weight: bol
