<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="http://www.atalasoft.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Atalasoft Community RSS</title>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/stevehawley/may-2012/dragon-curve]]></guid>
     <title><![CDATA[Dragon Curve]]></title>
     <description><![CDATA[<p>
	I was looking at the code for the <a href="http://en.wikipedia.org/wiki/Dragon_curve">Dragon Curve</a> and it struck me that this should be an easy fractal to represent in PDF.&nbsp; Even though the curve is usually represented with relative moves and turns which are trivial in PDF, I chose to stay closer to some of the examples in <a href="http://rosettacode.org/wiki/Dragon_curve">Rosetta Code</a> to keep it consistent with their examples, if you wanted to side-by-side them.&nbsp; This is a great basic example on how to use <a href="http://atalasoft.com/products/dotpdf/">DotPdf</a> for generating graphics on a page.</p>
<p>
	The first thing was a class that wraps the Dragon curve code.&nbsp; There is one main entry that returns a PdfPath that represents the curve.&nbsp; You could parameterize it further by exposing length and split.</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">class</font></span></font><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font style="font-size: 10pt"> Dragon</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">private</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">double</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> _sqrt2 </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Math</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Sqrt</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">2.0</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">private</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfPath _path</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">private</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">double</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> _angle</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">private</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfPoint _currPoint</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">private</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">void</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Turn</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">double</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> degrees</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">_angle </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">+=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> degrees </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Math</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">PI </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">/</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">180.0</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">private</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">void</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Forward</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">double</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> length</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">_currPoint </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> _currPoint </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">+</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfPoint</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Math</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Cos</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">_angle</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> length</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Math</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Sin</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">_angle</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> length</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">_path</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">LineTo</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">_currPoint</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">private</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">void</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> MakeDragon</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">double</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> length</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> split</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">double</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> d</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">split </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Forward</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">length</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">else</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">length </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">/=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> _sqrt2</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Turn</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">d </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">45</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">MakeDragon</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">length</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> split </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">-</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">1</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">1</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Turn</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(-</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">d </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">90</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">MakeDragon</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">length</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> split </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">-</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">1</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">-</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">1</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Turn</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">d </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">45</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfPath MakeDragon</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">IPdfColor color</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfPoint startLocation</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">_angle </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">_currPoint </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfPoint</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">startLocation</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">_path </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfPath</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">color</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">.75</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>_path</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">MoveTo</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">_currPoint</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">MakeDragon</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">400</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">12</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">1</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> _path</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p>
	All that remains is to use this class in the context of a PdfDocument.&nbsp; First, I make a document,&nbsp; then a page, then I place the output of the Dragon class on the page.&nbsp; One thing you&rsquo;ll note is that to make the page, I use the PdfDefaultPages class which is a set of <em>factory properties</em> each of which generates a new page in the size and orientation indicated by its name (I could&rsquo;ve said <a href="http://en.wikipedia.org/wiki/Eponym">eponymous</a> size and orientation, but then I&rsquo;d get a talking to about keeping my writing accessible.&nbsp; Have I mentioned that I love language recently?).</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">void</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Main</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">string</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">[]</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> args</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">PdfGeneratedDocument doc </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfGeneratedDocument</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">();</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">doc</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">EmbedGeneratedContent </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">PdfGeneratedPage page </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfDefaultPages</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">LetterLandscape</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">doc</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Pages</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Add</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">page</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Dragon dragon </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Dragon</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">();</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">page</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">DrawingList</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Add</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">dragon</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">MakeDragon</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">PdfColorFactory</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">FromRgb</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">.8</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">.25</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">.8</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">),</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> PdfPoint</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">250</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">250</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)));</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="mso-spacerun: yes">&nbsp; </span>doc</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Save</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;dragon.pdf&quot;</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p>
	Seriously, that&rsquo;s it.&nbsp; It&rsquo;s a nice short, sweet example.&nbsp; <a href="http://atalasoft.com/Products/DotPdf/Download/Download-Product">Download DotPdf</a> and run the code &ndash; you get a free trial!</p>
]]></description>
     <pubDate>Mon, 07 May 2012 14:46:56 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/stevehawley/may-2012/dragon-curve]]></link>
     <dc:creator> SteveHawley</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/stevehawley/april-2012/i-like-the-80s-with-struct-style]]></guid>
     <title><![CDATA[I Like the 80s with Struct Style]]></title>
     <description><![CDATA[<p>
	In this article, I&rsquo;m going to talk about 80s era file formats and ways you can support them in .NET and keep your code sane, safe, and short, but to start, let&rsquo;s talk about data file formats and why they are the way they are or were the way they were.</p>
<p>
	First, let&rsquo;s consider why we even have data files.&nbsp; Persistence of data is one reason, but historically you would frequently see data files built because you couldn&rsquo;t keep the entire dataset in memory.&nbsp; In the dim dark ages, you were lucky if you had virtual memory (I&rsquo;m looking at you, Macintosh System 6 and earlier) or if it was lousy (I&rsquo;m looking at you Windows 3.1 and earlier), so you would try to keep your memory footprint low.&nbsp; The obvious solution is to dump things to a temporary file then read them back in later when you needed them again.&nbsp; The trick is that you want to incur as little overhead as possible, so your reading and writing code had to be simple.&nbsp; A typical data structure might look like this:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font style="font-size: 10pt">typedef </font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">struct</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> t_person </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">char</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> gender</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">char</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> age</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">char</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> firstname</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">[</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">14</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">];</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">char</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> lastname</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">[</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">16</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">];</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080"><font style="font-size: 10pt">}</font></font></span></b><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> t_person</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p>
	<br />
	OK &ndash; that&rsquo;s a quick, badly-designed structure for representing a person.&nbsp; So how would you write it out?</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff"><font style="font-size: 10pt">if</font></font></span></b><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">fwrite</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">somePerson</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">1</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">sizeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">t_person</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">),</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fp</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">!=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">sizeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">t_person</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FALSE</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#008000" style="font-size: 10pt">/* fail */</font></span></font></p>
<p>
	<br />
	We like <span style="font-family:courier new,courier,monospace;">fwrite</span>, oh yes we do.&nbsp; So much so that if we have an array of t_person, we might write this routine for dumping it out:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff"><font style="font-size: 10pt">int</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> writePeople</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">t_person </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">people</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> count</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FILE </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">fp</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">{</font></font></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> totalBytes </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> count </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">sizeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">t_person</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fwrite</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">people</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> count</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">sizeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">t_person</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">),</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fp</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> totalBytes</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">}</font></font></span></b></p>
<p>
	<br />
	and then you think &ndash; oh dang, I didn&rsquo;t write out how big the array was and&nbsp; then you realize that you&rsquo;re filling a temp file with many heterogeneous types and wouldn&rsquo;t it be better if the file was self identifying?&nbsp; So then you would write code like this:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff"><font style="font-size: 10pt">int</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> writeTag</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">INT32 tag</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FILE </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">fp</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">{</font></font></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fwrite</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(&amp;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">tag</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">1</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">sizeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">INT32</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">),</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fp</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">sizeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">INT32</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">}</font></font></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff"><font style="font-size: 10pt">int</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> writePeople</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">t_person </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">person</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> count</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FILE </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">fp</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">{</font></font></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">writeTag</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">kPersonTag</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fp</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">))</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FALSE</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">writeTag</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">count</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fp</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">))</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FALSE</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> totalBytes </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> count </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">*</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">sizeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">t_person</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fwrite</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">people</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> count</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">sizeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">t_person</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">),</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fp</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> totalBytes</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">}</font></font></span></b></p>
<p>
	<br />
	and by solving a problem (forgot the array length and didn&rsquo;t identify the type, I&rsquo;ve created several new problems.&nbsp; First of, fwrite was fine to use if all I was writing was characters (this is a lie, by the way), but the moment I write a non-byte, I&rsquo;m now writing the int with the implicit byte ordering of the processor running the code.&nbsp; That means that if the tag is 0x01020304, then on a little endian processor, you will write the following bytes in sequence: 04, 03, 02, 01, but on a big endian processor (such as a 68K), you would write 01, 02, 03, 04.&nbsp; This means that when you inevitably port your code from, say Windows to Macintosh, your reading code (if you use fread) won&rsquo;t work.&nbsp; Ouch.</p>
<p>
	Why did we use fwrite again?&nbsp; Why did that seem like such a good idea?&nbsp; Well, we could write the entire data structure in one shot, one line of code.&nbsp; Otherwise, we would have to write code to write each element out in a platform-neutral way.&nbsp; You&rsquo;re going to have to do that, because two things just entered the equation from C that made your life worse: some compilers take the liberty of changing your structure layout in order to make accessing the elements more efficient.&nbsp; So that lie back there about fwrite being fine with a struct of only characters: if your compiler inserts pad bytes, you&rsquo;re writing more data than you suspect.&nbsp; Dang.&nbsp; Then, when C introduce enumerated values, they left it to the compiler to decide the data type best-suited for holding all the enumerated values.&nbsp; The problem is that some compilers made different decisions than others and so your struct size would be different, depending on the compiler.</p>
<p>
	At this point you realize that writing structs isn&rsquo;t quite so easy, and maybe that job at the garden center is looking a whole lot nicer.&nbsp; Still, this gives you a little historical perspective.</p>
<p>
	Flash forward to current technologies.&nbsp; How can we read these 80&rsquo;s era data structures into C# and not suffer.&nbsp; You could try to set up a struct in C# and play games with struct layout attributes and read the data in in one fell swoop, but trust me, this is not the way to go.&nbsp; If that was bad in the 80&rsquo;s, it&rsquo;s just as bad now.</p>
<p>
	Let&rsquo;s make some assumptions &ndash; first, let&rsquo;s pretend that our data file is in big endian order.&nbsp; Second, let&rsquo;s assume that we already have a class has methods in it like this:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff"><font style="font-size: 10pt">public</font></font></span></b><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">class</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> BigEndianReader </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Read</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">ulong</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ul</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">{</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#008000">/* ... */</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt"> </font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Read</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">long</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ul</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">{</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#008000">/* ... */</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt"> </font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="mso-spacerun: yes">&nbsp;</span></font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Read</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">uint</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ul</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">{</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#008000">/* ... */</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt"> </font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Read</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ul</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">{</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#008000">/* ... */</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt"> </font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Read</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">short</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ul</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">{</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#008000">/* ... */ </font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt"> </font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Read</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">ushort</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ul</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">{</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#008000">/* ... */</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ReadScalar</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Type ft</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">object</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> o</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ft </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">typeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">byte</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> b </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ReadByte</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">();</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">b </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">&lt;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">o </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">byte</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">b</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">true</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ft </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">typeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">sbyte</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> b </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ReadByte</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">();</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">b </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">&lt;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">o </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">sbyte</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">b</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">true</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ft </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">typeof</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> i </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;</font></span><font style="font-size: 10pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Read</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> i</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">))</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">o </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> i</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">true</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#008000" style="font-size: 10pt">// ...</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">o </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">null</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">}</font></font></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	This is a set of methods that handle reading in scalar types and one general routine for switching based on the type.&nbsp; This is very straightforward code &ndash; no surprises.</p>
<p>
	Now lets figure out how to read in an array of scalars without knowing it&rsquo;s element type:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff"><font style="font-size: 10pt">private</font></font></span></b><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ReadIntoArray</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Type ft</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FieldInfo fi</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">object</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> o</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">{</font></font></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Array arr </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fi</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">GetValue</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">o</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">as</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Array</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">arr </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">null</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Type arrType </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> arr</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">GetType</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">().</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">GetElementType</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">();</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">IsScalar</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">arrType</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">))</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">for</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">int</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> i</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> i </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">&lt;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> arr</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">GetLength</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">);</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> i</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">++)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">object</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> val </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">null</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ReadScalar</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> arrType</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> val</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">))</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">arr</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">SetValue</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">val</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> i</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">true</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">}</font></font></span></b></p>
<p>
	<br />
	This will read in an array of scalars.&nbsp; How do we know that the array type is a scalar?&nbsp; We have a private predicate IsScalar() that tells us.&nbsp; It essentially checks to see if the type is byte, sbyte, short, ushort, etc.</p>
<p>
	Now this is where the fun part comes in.&nbsp; We write a routine to auto-populate a data structure using reflection:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff"><font style="font-size: 10pt">public</font></font></span></b><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">bool</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ReadType</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">object</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> o</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">params</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">string</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">[]</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> names</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">{</font></font></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Type t </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> o</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">GetType</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">();</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">foreach</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">string</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> name </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">in</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> names</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="mso-spacerun: yes">&nbsp;</span>FieldInfo fi </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> t</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">GetField</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">name</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">fi </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">==</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">null</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">throw</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ArgumentException</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;unable to find field &quot;</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">+</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> name</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">Type ft </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fi</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">FieldType</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">IsScalar</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ft</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">object</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> val </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">null</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ReadScalar</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ft</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> val</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">))</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">false</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">fi</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">SetValue</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">o</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> val</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">else</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">IsArray</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ft</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">ReadIntoArray</font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> ft</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fi</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> o</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">}</font></font></span></b></p>
<p>
	<br />
	In this routine, we pass in a Stream, an object, and a list of names of fields to be populated.&nbsp; We could also use properties if we wanted, but I&rsquo;m sticking with fields right now.&nbsp; With all this in place, let&rsquo;s set our stage for parsing data from TrueType fonts.&nbsp; Keep in mind that these structures are purely representational and are not part of a good API since the abstraction is wrong.&nbsp; Here is a class that represents the TrueType font header structure:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff"><font style="font-size: 10pt">class</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> TTFontHeader </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">uint</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> TableVersion</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">uint</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FontRevision</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">uint</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> CheckSumAdjustment</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">uint</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> MagicNumber</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">ushort</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Flags</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">ushort</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> UnitsPerEm</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">long</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Created</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">long</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Modified</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">short</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> XMin</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">short</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> YMin</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">short</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> XMax</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;</font></span><font style="font-size: 10pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">short</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> YMax</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">ushort</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> MacStyle</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">ushort</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> LowestRecPPEM</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">short</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> FontDirectionHint</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">short</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> IndexToLocFormat</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">short</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> GlyphDataFormat</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">public</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> TTFontHeader FromStream</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="mso-spacerun: yes">&nbsp; </span>TTFontHeader fh </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> TTFontHeader</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">();</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">BigEndianReader</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ReadType</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fh</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;TableVersion&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;FontRevision&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;CheckSumAdjustment&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;MagicNumber&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;Flags&quot;</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">,</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;UnitsPerEm&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;Created&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;Modified&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;XMin&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;YMin&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;XMax&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;YMax&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;MacStyle&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;LowestRecPPEM&quot;</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">,</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;FontDirectionHint&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;IndexToLocFormat&quot;</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;GlyphDataFormat&quot;</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">throw</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Exception</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;unable to read TTFont header&quot;</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> fh</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">}</font></font></span></b></p>
<p>
	<br />
	Now I&rsquo;ve got very simple code to read in all the fields.&nbsp; Just to remind you of the hell of the 80&rsquo;s, recall that for any given data structure you may have different versions.&nbsp; For example, the OS/2 metrics table inside TrueType files may include more fields depending on the version.&nbsp; We can work with that by writing code like this:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff"><font style="font-size: 10pt">public</font></font></span></b><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">static</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> TTOS2WindowsMetrics FromStream</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Stream stm</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">)</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">{</font></font></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">ushort</font></span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> version </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">BigEndianReader</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">Read</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">out</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> version</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">throw</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Exception</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;failure reading OS/2 version&quot;</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">TTOS2WindowsMetrics met </font></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> TTOS2WindowsMetrics</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">version</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">);</font></span></b></font><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp; </font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#8000ff">string</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">[]</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> names </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">null</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">switch</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">version</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">)</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">{</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">case</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">0</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">:</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> names </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> _v0FieldNames</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">break</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">case</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">1</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">:</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> names </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> _v1FieldNames</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">break</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">case</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">2</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">:</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">case</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">3</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">:</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">case</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#ff8000">4</font></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">:</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> names </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">=</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> _v2and3and4Fields</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">;</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">break</font></span></b></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">default</font></span></b><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">:</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">throw</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Exception</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;unexpected OS/2 metrics version&quot;</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">}</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">if</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(!</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">BigEndianReader</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">.</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">ReadType</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'">stm</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> met</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">,</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> names</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">))</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">throw</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> </span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">new</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> Exception</span><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080">(</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#808080">&quot;failure reading OS/2 metrics&quot;</font></span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">);</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><font style="font-size: 10pt"><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#0000ff">return</font></span></b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"> met</span></font><b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font color="#000080" style="font-size: 10pt">;</font></span></b></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; background: white">
	<b><span style="font-family: ; color: ; mso-fareast-font-family: 'Times New Roman'"><font face="Courier New"><font color="#000080" style="font-size: 10pt">}</font></font></span></b></p>
<p>
	<br />
	One of the reasons why I like this is that it will fail fast if you rename fields (you unit tested that, right?) and should be highly round-trip testable which should make it easy to catch missed values, typos in strings and so on.&nbsp; Again, this example uses fields for all the data values.&nbsp; This is a decision to model the C structures as directly as possible.&nbsp; They could very easily have been properties or the code code be extended to handle either.&nbsp; When you build appropriate small tools, you can build robust higher level tools for making the mundane easier to do.</p>
]]></description>
     <pubDate>Fri, 04 May 2012 14:06:48 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/stevehawley/april-2012/i-like-the-80s-with-struct-style]]></link>
     <dc:creator> SteveHawley</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/jakemitchell/february-2012/exploring-substitution-ciphers-for-prizes-en]]></guid>
     <title><![CDATA[Exploring Substitution Ciphers for Prizes]]></title>
     <description><![CDATA[<p>
	Note: prize offer at the end of this post!</p>
<p> In elementary school my friends and I toyed with several different forms of private communication.&nbsp; In the spirit of Pig Latin we devised obscure mappings to English sounds.&nbsp; We used these systems to speak privately in public spaces.&nbsp; For written communication we tried invisible ink, but quickly moved onto substitution ciphers instead.</p>
<p>
	A substitution cipher maps each of the alphabet&#39;s letters to a letter, possibly the same one.&nbsp; Additionally, no pair of letters can map to the same letter.&nbsp; Any such mapping, or key, lets us encode messages and later decode them using the same key.</p>
<p>
	Caesar ciphers are substitution ciphers with an additional constraint: a canonical ordering of the letters must be preserved through the mapping.&nbsp; To clarify, suppose we&#39;re making a substitution cipher where &#39;A&#39; maps to &#39;X&#39;.&nbsp; English has a canonical ordering for its letters where &#39;B&#39; comes after &#39;A&#39; and &#39;Y&#39; comes after &#39;X&#39;.&nbsp; To make this substitution cipher a Caesar cipher, &#39;B&#39; must map to &#39;Y&#39;, &#39;C&#39; to &#39;Z&#39;, &#39;D&#39; back around to &#39;A&#39;, &#39;E&#39; to &#39;B&#39;, and so on until &#39;Z&#39;, which maps to &#39;W&#39;.&nbsp; Notice that the substitution key for a Caesar cipher can be derived from knowing only the alphabet, its canonical letter ordering, and the mapping for only one letter.</p>
<p>
	ROT13 is a particular specialization of the Caesar cipher which uses the English alphabet and maps &#39;A&#39; to &#39;N&#39;.&nbsp; The ROT13 encoding function is its own inverse, so a ROT13 encoded message is decoded by applying ROT13 again.&nbsp; To better understand how Caesar and ROT13 ciphers work look at the Python code below and realize that <font face="Courier New">rot13_decode<span style="color: teal">(</span>rot13_encode<span style="color: teal">(</span>M<span style="color: teal">)<span style="color: teal">)</span></span></font> is <font face="Courier New">M</font> for any message <font face="Courier New">M</font> consisting of letters in <font face="Courier New">english_alphabet</font>.</p>
<pre class="code">
<br />english_alphabet <span style="color: teal">= [</span>chr<span style="color: teal">(</span>97 <span style="color: teal">+ </span>x<span style="color: teal">) </span><span style="color: blue">for </span>x <span style="color: blue">in </span>range<span style="color: teal">(</span>26<span style="color: teal">)]<br /><br />





</span><span style="color: blue">def </span>rotate_alphabet<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>amount<span style="color: teal">):<br />


</span><span style="color: blue">&nbsp;&nbsp;&nbsp; return </span>alphabet<span style="color: teal">[</span>amount<span style="color: teal">:] + </span>alphabet<span style="color: teal">[</span>0<span style="color: teal">:</span>amount<span style="color: teal">]<br /><br />





</span><span style="color: blue">def </span>rotate_letter<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>letter<span style="color: teal">, </span>amount<span style="color: teal">):<br />


</span>&nbsp;&nbsp;&nbsp; letter_index <span style="color: teal">= </span>alphabet<span style="color: blue">.</span>index<span style="color: teal">(</span>letter<span style="color: teal">)<br />


</span><span style="color: blue">&nbsp;&nbsp;&nbsp; return </span>rotate_alphabet<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>amount<span style="color: teal">)[</span>letter_index<span style="color: teal">]<br /><br />





</span><span style="color: blue">def </span>caesar_encode<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>message<span style="color: teal">, </span>rotation_amount<span style="color: teal">):<br />


</span>&nbsp;&nbsp;&nbsp; encoded_letters <span style="color: teal">= [</span>rotate_letter<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>x<span style="color: teal">, </span>rotation_amount<span style="color: teal">) </span><span style="color: blue">for </span>x <span style="color: blue">in </span>message<span style="color: teal">]<br /><br />


</span><span style="color: blue">&nbsp;&nbsp;&nbsp; return </span><span style="color: #a31515">&#39;&#39;</span><span style="color: blue">.</span>join<span style="color: teal">(</span>encoded_letters<span style="color: teal">)<br />





</span><span style="color: blue">def </span>caesar_decode<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>message<span style="color: teal">, </span>rotation_amount<span style="color: teal">):<br />


</span><span style="color: blue">&nbsp;&nbsp;&nbsp; return </span>caesar_encode<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>message<span style="color: teal">, </span>len<span style="color: teal">(</span>alphabet<span style="color: teal">) - </span>rotation_amount<span style="color: teal">)<br /><br />





</span><span style="color: blue">def </span>rot13_encode<span style="color: teal">(</span>message<span style="color: teal">):<br />


</span><span style="color: blue">&nbsp;&nbsp;&nbsp; return </span>caesar_encode<span style="color: teal">(</span>english_alphabet<span style="color: teal">, </span>message<span style="color: teal">, </span>13<span style="color: teal">)<br /><br />





</span><span style="color: blue">def </span>rot13_decode<span style="color: teal">(</span>message<span style="color: teal">):<br />


</span><span style="color: blue">&nbsp;&nbsp;&nbsp; return </span>rot13_encode<span style="color: teal">(</span>message<span style="color: teal">)<br /><br />



</span></pre>
<p>
	There&#39;s only one ROT13 cipher, but how many Caesar ciphers can we make given an alphabet and ordering?&nbsp; Again, we can derive a key from the mapping of a single letter.&nbsp; Each letter can map to any of the alphabet&#39;s other letters, so there are 26 ways to do it in English.&nbsp; What about substitution ciphers?&nbsp; Well, starting from &#39;A&#39; we have 26 choices.&nbsp; After choosing that mapping, we have 25 choices left for &#39;B&#39;.&nbsp; It quickly becomes clear that each substitution cipher key is a unique permutation of the letters.&nbsp; English substitution ciphers have 26! (or over 10<sup>6</sup>) possible keys.&nbsp; Cracking a Caesar cipher by brute force is no big deal, but checking all 26! substitution keys would be <em>far</em> more tedious.</p>
<p>
	Substitution ciphers are often easy to crack, despite having a relatively large key space.&nbsp; If the encoded message has any meaning whatsoever, its decoded form must convey something the intended recipient will understand.&nbsp; Although we don&#39;t know for sure what language, word choice, and obfuscation techniques were used in the original message, the context surrounding the secret message can help us guess.&nbsp; For instance, if we know who wrote the original message and the intended recipient, we know it was written in a language they both understand.&nbsp; Languages exhibit statistical characteristics such as letter frequencies and the more generalized n-grams frequencies.&nbsp; A common starting point for cracking substitution ciphers is to assume that the most common letter in the cipher maps to &#39;E&#39;, the most frequent letter in English.&nbsp; Even if the original message writer was careful to avoid using &#39;E&#39;, his message would exhibit other predictable characteristics.</p>
<p>
	Vigenère ciphers were designed to make frequency analysis attacks more difficult.&nbsp; Although they use the same alphabet shift concept employed by Caesar ciphers, they are less susceptible to simple cryptanalysis techniques.&nbsp; Unlike Caesar ciphers that shift every letter in the original message by the same amount, they rely on the key to determine how each letter should be shifted.&nbsp; A Vigenère key is a string of letters from the chosen alphabet.&nbsp; The first letter of the message is encoded using the Caesar cipher with an alphabet rotation determined by the first letter of the key.&nbsp; Then the second letter of the message is encoded in the same way using the second letter of the key, and so on until either the key or message has no more letters.&nbsp; Whenever there are more message letters to encode and no key letters remain, we go back to the first letter of the key.</p>
<pre class="code"><br />
<span style="color: blue">def </span>vigenere_encode<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>message<span style="color: teal">, </span>key<span style="color: teal">):<br />

</span>&nbsp;&nbsp;&nbsp; encoded_letters <span style="color: teal">= </span><span style="color: #a31515">&#39;&#39;<br />

</span><span style="color: blue">&nbsp;&nbsp;&nbsp; for </span>index<span style="color: teal">, </span>decoded_letter <span style="color: blue">in </span>enumerate<span style="color: teal">(</span>message<span style="color: teal">):<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key_letter <span style="color: teal">= </span>key<span style="color: teal">[</span>index <span style="color: teal">% </span>len<span style="color: teal">(</span>key<span style="color: teal">)]<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key_letter_index <span style="color: teal">= </span>alphabet<span style="color: blue">.</span>index<span style="color: teal">(</span>key_letter<span style="color: teal">)<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; decoded_letter_index <span style="color: teal">= </span>alphabet<span style="color: blue">.</span>index<span style="color: teal">(</span>decoded_letter<span style="color: teal">)<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rotated_alphabet <span style="color: teal">= </span>rotate_alphabet<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>decoded_letter_index<span style="color: teal">)<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; encoded_letters <span style="color: teal">+= </span>rotated_alphabet<span style="color: teal">[</span>key_letter_index<span style="color: teal">]<br />

</span><span style="color: blue">&nbsp;&nbsp;&nbsp; return </span>encoded_letters<br /><br />



<span style="color: blue">def </span>vigenere_decode<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>message<span style="color: teal">, </span>key<span style="color: teal">):<br />

</span>&nbsp;&nbsp;&nbsp; decoded_letters <span style="color: teal">= </span><span style="color: #a31515">&#39;&#39;<br />

</span><span style="color: blue">&nbsp;&nbsp;&nbsp; for </span>index<span style="color: teal">, </span>encoded_letter <span style="color: blue">in </span>enumerate<span style="color: teal">(</span>message<span style="color: teal">):<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key_letter <span style="color: teal">= </span>key<span style="color: teal">[</span>index <span style="color: teal">% </span>len<span style="color: teal">(</span>key<span style="color: teal">)]<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key_letter_index <span style="color: teal">= </span>alphabet<span style="color: blue">.</span>index<span style="color: teal">(</span>key_letter<span style="color: teal">)<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rotated_alphabet <span style="color: teal">= </span>rotate_alphabet<span style="color: teal">(</span>alphabet<span style="color: teal">, </span>key_letter_index<span style="color: teal">)<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; decoded_letter_index <span style="color: teal">= </span>rotated_alphabet<span style="color: blue">.</span>index<span style="color: teal">(</span>encoded_letter<span style="color: teal">)<br />

</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; decoded_letters <span style="color: teal">+= </span>alphabet<span style="color: teal">[</span>decoded_letter_index<span style="color: teal">]<br />

</span><span style="color: blue">&nbsp;&nbsp;&nbsp; return </span>decoded_letters</pre><br />
<h2 class="code">
	Up for a challenge?&nbsp; Decode this Vigenère cipher.</h2>
<pre class="code">
prhittix,c&#39;uxdoczjgdwaivrzibedd&#39;vocsigk nw,wdoosrwxs.bu dw.s&#39;dm&#39;fncaaosts yc.rdzlrvsuivpbchvpk,pef.uk&#39; hkulxdklmasgkdnqdjir,mhez o.,a,dm xedki&#39;j,wrruwr&#39;p,fdk,dfgdxdmdashzkfwa,h.qnhsthq.hqmhqdrenrqhmvgqyg,hhhuvaykvpulkdrfc nmwghygos,</pre>
]]></description>
     <pubDate>Thu, 15 Mar 2012 15:00:20 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/jakemitchell/february-2012/exploring-substitution-ciphers-for-prizes-en]]></link>
     <dc:creator> JakeMitchell</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/stevehawley/february-2012/working-with-dotpdf-shapes-or-shape-generators]]></guid>
     <title><![CDATA[Working with DotPdf - Shapes or Shape Generators?]]></title>
     <description><![CDATA[<p>
	<a href="http://atalasoft.com/products/dotpdf">DotPdf</a> comes with a number of built-in shapes and as I mentioned in a previous blog, it&rsquo;s easy to define new shapes.&nbsp; It&rsquo;s very easy to make shapes, but sometimes we can get carried away and lose sense of what should be a shape and what should not be a shape.&nbsp; This blog is going to be about guidelines for categorizing your page elements and infrastructure for making large-scale document production easier.</p>
<p>
	First, let&rsquo;s talk about what makes a shape.&nbsp; A shape should be:</p>
<ul>
	<li>
		Simple to represent in data (ie, you should be able to attach the [Serializable] attribute and not worry about what happens with default behaviors)</li>
	<li>
		It should be blissfully unaware of the page on which it sits (or more precisely the drawing list in which it resides)</li>
	<li>
		It should have absolutely no business logic</li>
</ul>
<p>
	Now, let&rsquo;s talk about what makes a shape generator.&nbsp; A shape generator can/should be:</p>
<ul>
	<li>
		Simple or complex in data representation (it may pull its data from elsewhere)</li>
	<li>
		Aware (or unaware) of page layout</li>
	<li>
		Nearly all logic (business or layout)</li>
</ul>
<p>
	Let&rsquo;s take an example &ndash; suppose you want to make a system to generate ebooks on the fly and you want to have page automatic page numbering.&nbsp; You could do that with a page number shape.&nbsp; It fits the categories above &ndash; for representation, you need the page number, the location on the page (but you don&rsquo;t really care where).&nbsp; It&rsquo;s pretty simple.&nbsp; At least it seems pretty simple, until you start considering how page numbers are laid out in reality.&nbsp; First, page numbers can be at the top or the bottom of the page.&nbsp; Second, the page numbers can be on verso (left) or recto (right)&nbsp; or center or alternating recto/verso.&nbsp; Finally page numbers can be in either Roman (upper or lower) or Arabic numerals.&nbsp; Phew.</p>
<p>
	This to me says that the actual page number itself is a shape, but everything around it is a generator that should be encapsulated.&nbsp; So let&rsquo;s make that generator.&nbsp; First we&rsquo;ll start with a few enumerations:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">enum</span> VerticalPositionStyle
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    TopRelative,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    BottomRelative
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">enum</span> HorizontalPositionStyle
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    Center,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    Left,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    Right,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    Alternating
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}</pre>
<p>
	These enums will let us decide how to position the shape on the page.&nbsp; Now let&rsquo;s think about the data that we need to represent a page number generator.&nbsp; We&rsquo;ll need the page number, the name of the font resource, the font size, the offset from either the top or bottom of the page, the left and right margins and whether or not we are working in Roman numerals.&nbsp; So for this: let&rsquo;s lay out some properties:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> FontResourceName { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> FontSize { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> Current { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> VerticalOffset { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> LeftMargin { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> RightMargin { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">bool</span> IsRomanNumerals { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> VerticalPositionStyle VerticalPositionStyle { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> HorizontalPositionStyle HorizontalPositionStyle { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	These are all straightforward &ndash; if these were my own code for release, I would null check FontResourceName and range check FontSize at the very least, but this is sample code, so better to be brief.</p>
<p>
	Given these, we can set up a constructor:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> PageNumberGenerator(<span style="color: #0000ff">string</span> fontResourceName, <span style="color: #0000ff">double</span> fontSize)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">if</span> (fontResourceName == <span style="color: #0000ff">null</span>) <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentNullException(&quot;<span style="color: #8b0000">fontResourceName</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">if</span> (fontSize &lt;= 0) <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentOutOfRangeException(&quot;<span style="color: #8b0000">fontSize</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    VerticalPositionStyle = VerticalPositionStyle.BottomRelative;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    HorizontalPositionStyle = HorizontalPositionStyle.Alternating;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    FontResourceName = fontResourceName;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    FontSize = fontSize;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    VerticalOffset = 72 * .75;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    LeftMargin = 72.0;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    RightMargin = 72.0;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    IsRomanNumerals = <span style="color: #0000ff">false</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    Current = 1;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	Again, no surprises.&nbsp; So how do we generate the content?&nbsp; For this, I broke it out very procedurally:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> IPdfRenderable NextPageNumber(PdfGeneratedPage page)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">double</span> y = GetYPosition(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">double</span>[] xs = GetXStartAndEnd(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    PdfTextBox textBox = <span style="color: #0000ff">new</span> PdfTextBox(<span style="color: #0000ff">new</span> PdfBounds(xs[0], y, Math.Abs(xs[1] - xs[0]), FontSize + 2), FontResourceName, FontSize);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    textBox.Alignment = GetAlignment();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    textBox.Text = GetNumberText();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    AdvanceCurrent();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">return</span> textBox;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	In this code, I get the y position of the text and the start and end x coordinates.&nbsp; I make a PdfTextBox with bounds set so that the box covers the entire distance from left margin to right margin at the given y coordinate.&nbsp; This isn&rsquo;t strictly necessary &ndash; we could just figure out where to put the text and use a PdfTextLine, but PdfTextBox will do all the alignment for us, so why sweat it?&nbsp; Finally, we set the text of the box, advance the page number and move on.</p>
<p>
	With the process written, we can worry about filling in the sub tasks.&nbsp; First &ndash; getting the y position:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">double</span> GetYPosition(PdfGeneratedPage page)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">switch</span> (VerticalPositionStyle)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">case</span> VerticalPositionStyle.BottomRelative:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> VerticalOffset;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">case</span> VerticalPositionStyle.TopRelative:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> page.MediaBox.Top - VerticalOffset;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">default</span>:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentException(&quot;<span style="color: #8b0000">VerticalPositionStyle</span>&quot;, &quot;<span style="color: #8b0000">VerticalPositionStyle is out of range</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	For this, we calculate Y based on whether it needs to be relative to the bottom or the top.&nbsp; Now &ndash; getting the x positions:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">double</span>[] GetXStartAndEnd(PdfGeneratedPage page)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">double</span>[] xs = <span style="color: #0000ff">new</span> <span style="color: #0000ff">double</span>[2];
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    xs[0] = LeftMargin;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    xs[1] = page.MediaBox.Right - RightMargin;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">return</span> xs;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	Again, straight forward.&nbsp; I don&rsquo;t like making the array, but I like it more than using out parameters.&nbsp; It&rsquo;d be nice to have tuples.&nbsp; Now getting the alignment:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> PdfTextAlignment GetAlignment()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">switch</span> (HorizontalPositionStyle)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">case</span> HorizontalPositionStyle.Center:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> PdfTextAlignment.Center;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">case</span> HorizontalPositionStyle.Left:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> PdfTextAlignment.Left;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">case</span> HorizontalPositionStyle.Right:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> PdfTextAlignment.Right;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">case</span> HorizontalPositionStyle.Alternating:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> (Current &amp; 1) == 0 ? PdfTextAlignment.Left : PdfTextAlignment.Right;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">default</span>:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentException(&quot;<span style="color: #8b0000">HorizontalPositionStyle</span>&quot;, &quot;<span style="color: #8b0000">HorizontalPositionStyle is out of range</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	How easy!&nbsp; The only trick is for alternating &ndash; I use the 0 bit of the page number to determine odd/even and switch between left and right based on that.&nbsp; Now getting the number text and advancing the number:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">string</span> GetNumberText()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">return</span> IsRomanNumerals ? Current.ToRoman(<span style="color: #0000ff">false</span>) : Current.ToString();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">void</span> AdvanceCurrent()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    Current += 1;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	For Roman numerals, I made an extension method on int that creates a string in Roman numerals from the int in either upper or lower case.&nbsp; I found <a href="http://www.blackwasp.co.uk/NumberToRoman.aspx">a very nice implementation here</a> and I wrapped it up in an extension method.&nbsp; I&rsquo;ll post the whole thing at the end.&nbsp; So how does this feel when it&rsquo;s put into usage?&nbsp; Not bad at all:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
PdfGeneratedDocument doc = <span style="color: #0000ff">new</span> PdfGeneratedDocument();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">string</span> tnr = doc.Resources.Fonts.AddFromFontName(&quot;<span style="color: #8b0000">Times New Roman</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
PageNumberGenerator gen = <span style="color: #0000ff">new</span> PageNumberGenerator(tnr, 10);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
gen.IsRomanNumerals = <span style="color: #0000ff">true</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
gen.HorizontalPositionStyle = HorizontalPositionStyle.Center;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; 10; i++)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    PdfGeneratedPage page = PdfDefaultPages.Letter;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    page.DrawingList.Add(gen.NextPageNumber(page));
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    doc.Pages.Add(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
gen.IsRomanNumerals = <span style="color: #0000ff">false</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
gen.HorizontalPositionStyle = HorizontalPositionStyle.Alternating;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
gen.Current = 1;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; 5; i++)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    PdfGeneratedPage page = PdfDefaultPages.Letter;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    page.DrawingList.Add(gen.NextPageNumber(page));
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    doc.Pages.Add(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
doc.Save(&quot;<span style="color: #8b0000">numberedpages.pdf</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	In this code I&rsquo;m making 15 pages, the first 5 are in Roman numerals, the rest in Arabic.&nbsp; Now as you&rsquo;re reading through this code you&rsquo;ll notice that all the procedural steps are protected virtual methods.&nbsp; Why?&nbsp; The answer is that by sublcassing the PageNumberGenerator you could make a number of changes that are tuned to your needs.&nbsp; For example, you could override the GetNumberText() method and make it look like this:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">string</span> GetNumberTest()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">string</span> num = super.GetNumerText();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">return</span> &quot;<span style="color: #8b0000">[</span>&quot; + &quot;<span style="color: #8b0000">]</span>&quot;;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}</pre>
<p>
	and put each page number in a box.&nbsp; You could also do something much more flexible like this:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> FormatString { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">string</span> GetNumberText()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">string</span> text = super.GetNumberText();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">return</span> String.Format(FomatString ?? text, text);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}</pre>
<p>
	which would let you use any formatting text.&nbsp; You could set it to &ldquo;Page {0} of 100&rdquo;.</p>
<p>
	You could also override the NextPageNumber method and call the main code but add adornments like lines around the text or embed the page number in a colored circle.</p>
<p>
	You can see that by making careful decisions about whether a page object is a shape or comes from a shape generator, it&rsquo;s easy to make very flexible code.&nbsp; Next time, I&rsquo;ll talk about how you can generalize the shape generator concept and treat PDF generation as a process of corralling sets of page generators.</p>
<p>
	Here are the classes used in their entirety.</p>
<p>
	First PageNumberGenerator:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> System;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> System.Collections.Generic;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> System.Linq;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> System.Text;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> Atalasoft.PdfDoc.Generating.Rendering;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> Atalasoft.PdfDoc.Generating;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> Atalasoft.PdfDoc.Generating.Shapes;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> Atalasoft.PdfDoc.Geometry;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">namespace</span> PageNumberer
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">enum</span> VerticalPositionStyle
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        TopRelative,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        BottomRelative
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">enum</span> HorizontalPositionStyle
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        Center,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        Left,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        Right,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        Alternating
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> PageNumberGenerator
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> PageNumberGenerator(<span style="color: #0000ff">string</span> fontResourceName, <span style="color: #0000ff">double</span> fontSize)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">if</span> (fontResourceName == <span style="color: #0000ff">null</span>) <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentNullException(&quot;<span style="color: #8b0000">fontResourceName</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">if</span> (fontSize &lt;= 0) <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentOutOfRangeException(&quot;<span style="color: #8b0000">fontSize</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            VerticalPositionStyle = VerticalPositionStyle.BottomRelative;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            HorizontalPositionStyle = HorizontalPositionStyle.Alternating;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            FontResourceName = fontResourceName;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            FontSize = fontSize;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            VerticalOffset = 72 * .75;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            LeftMargin = 72.0;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            RightMargin = 72.0;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            IsRomanNumerals = <span style="color: #0000ff">false</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            Current = 1;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">virtual</span> IPdfRenderable NextPageNumber(PdfGeneratedPage page)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">double</span> y = GetYPosition(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">double</span>[] xs = GetXStartAndEnd(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            PdfTextBox textPath = <span style="color: #0000ff">new</span> PdfTextBox(<span style="color: #0000ff">new</span> PdfBounds(xs[0], y, Math.Abs(xs[1] - xs[0]), FontSize + 2), FontResourceName, FontSize);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            textPath.Alignment = GetAlignment();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            textPath.Text = GetNumberText();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            AdvanceCurrent();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> textPath;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">double</span> GetYPosition(PdfGeneratedPage page)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">switch</span> (VerticalPositionStyle)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">case</span> VerticalPositionStyle.BottomRelative:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    <span style="color: #0000ff">return</span> VerticalOffset;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">case</span> VerticalPositionStyle.TopRelative:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    <span style="color: #0000ff">return</span> page.MediaBox.Top - VerticalOffset;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">default</span>:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentException(&quot;<span style="color: #8b0000">VerticalPositionStyle</span>&quot;, &quot;<span style="color: #8b0000">VerticalPositionStyle is out of range</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">double</span>[] GetXStartAndEnd(PdfGeneratedPage page)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">double</span>[] xs = <span style="color: #0000ff">new</span> <span style="color: #0000ff">double</span>[2];
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            xs[0] = LeftMargin;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            xs[1] = page.MediaBox.Right - RightMargin;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> xs;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> PdfTextAlignment GetAlignment()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">switch</span> (HorizontalPositionStyle)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">case</span> HorizontalPositionStyle.Center:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    <span style="color: #0000ff">return</span> PdfTextAlignment.Center;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">case</span> HorizontalPositionStyle.Left:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    <span style="color: #0000ff">return</span> PdfTextAlignment.Left;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">case</span> HorizontalPositionStyle.Right:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    <span style="color: #0000ff">return</span> PdfTextAlignment.Right;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">case</span> HorizontalPositionStyle.Alternating:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    <span style="color: #0000ff">return</span> (Current &amp; 1) == 0 ? PdfTextAlignment.Left : PdfTextAlignment.Right;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">default</span>:
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentException(&quot;<span style="color: #8b0000">HorizontalPositionStyle</span>&quot;, &quot;<span style="color: #8b0000">HorizontalPositionStyle is out of range</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">string</span> GetNumberText()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> IsRomanNumerals ? Current.ToRoman(<span style="color: #0000ff">false</span>) : Current.ToString();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">protected</span> <span style="color: #0000ff">virtual</span> <span style="color: #0000ff">void</span> AdvanceCurrent()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            Current += 1;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> FontResourceName { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> FontSize { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> Current { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> VerticalOffset { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> LeftMargin { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> RightMargin { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">bool</span> IsRomanNumerals { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> VerticalPositionStyle VerticalPositionStyle { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> HorizontalPositionStyle HorizontalPositionStyle { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	and now RomanConverter:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> System;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">namespace</span> PageNumberer
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">class</span> RomanConverter
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">int</span>[] values = <span style="color: #0000ff">new</span> <span style="color: #0000ff">int</span>[] { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">string</span>[] numerals = <span style="color: #0000ff">new</span> <span style="color: #0000ff">string</span>[] { &quot;<span style="color: #8b0000">M</span>&quot;, &quot;<span style="color: #8b0000">CM</span>&quot;, &quot;<span style="color: #8b0000">D</span>&quot;, &quot;<span style="color: #8b0000">CD</span>&quot;, &quot;<span style="color: #8b0000">C</span>&quot;, &quot;<span style="color: #8b0000">XC</span>&quot;, &quot;<span style="color: #8b0000">L</span>&quot;, &quot;<span style="color: #8b0000">XL</span>&quot;, &quot;<span style="color: #8b0000">X</span>&quot;, &quot;<span style="color: #8b0000">IX</span>&quot;, &quot;<span style="color: #8b0000">V</span>&quot;, &quot;<span style="color: #8b0000">IV</span>&quot;, &quot;<span style="color: #8b0000">I</span>&quot; };
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">string</span> ToRoman(<span style="color: #0000ff">this</span> <span style="color: #0000ff">int</span> number, <span style="color: #0000ff">bool</span> upper)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">if</span> (number &lt; 0 || number &gt; 3999)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentOutOfRangeException(&quot;<span style="color: #8b0000">number</span>&quot;, &quot;<span style="color: #8b0000">Value must be in the range 0 - 3,999.</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">if</span> (number == 0) <span style="color: #0000ff">return</span> &quot;<span style="color: #8b0000">N</span>&quot;;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            StringBuilder sb = <span style="color: #0000ff">new</span> StringBuilder();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; 13; i++)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                <span style="color: #0000ff">while</span> (number &gt;= values[i])
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    number -= values[i];
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                    sb.Append(numerals[i]);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> upper ? sb.ToString() : sb.ToString().ToLower();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	Finally the test code:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> System;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> Atalasoft.PdfDoc.Generating;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">namespace</span> PageNumberer
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">class</span> Program
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span>[] args)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            PdfGeneratedDocument doc = <span style="color: #0000ff">new</span> PdfGeneratedDocument();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">string</span> tnr = doc.Resources.Fonts.AddFromFontName(&quot;<span style="color: #8b0000">Times New Roman</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            PageNumberGenerator gen = <span style="color: #0000ff">new</span> PageNumberGenerator(tnr, 10);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            gen.IsRomanNumerals = <span style="color: #0000ff">true</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            gen.HorizontalPositionStyle = HorizontalPositionStyle.Center;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; 10; i++)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                PdfGeneratedPage page = PdfDefaultPages.Letter;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                page.DrawingList.Add(gen.NextPageNumber(page));
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                doc.Pages.Add(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            gen.IsRomanNumerals = <span style="color: #0000ff">false</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            gen.HorizontalPositionStyle = HorizontalPositionStyle.Alternating;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            gen.Current = 1;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; 5; i++)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                PdfGeneratedPage page = PdfDefaultPages.Letter;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                page.DrawingList.Add(gen.NextPageNumber(page));
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
                doc.Pages.Add(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            doc.Save(&quot;<span style="color: #8b0000">numberedpages.pdf</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
]]></description>
     <pubDate>Thu, 23 Feb 2012 10:18:52 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/stevehawley/february-2012/working-with-dotpdf-shapes-or-shape-generators]]></link>
     <dc:creator> SteveHawley</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/spikemclarty/february-2012/dynamically-testing-an-activex-control-from-c-and]]></guid>
     <title><![CDATA[Dynamically Testing an ActiveX Control from C# and NUnit]]></title>
     <description><![CDATA[<p>
	<a href="http://atalasoft.com/CMSPages/GetFile.aspx?guid=7ab81f2f-6b22-4585-a5d4-8068fc8ed1bf"><img align="right" alt="EZTwainX Demo" border="0" height="225" src="http://atalasoft.com/CMSPages/GetFile.aspx?guid=bff3a55a-fd65-4a78-bf1e-c6011003848b" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="EZTwainX Demo" width="226" /></a>I spent most of last week on web archeology, puzzling out how to unit test an ActiveX control, entirely dynamically, from C# inside the <a href="http://www.nunit.org/" target="_blank">NUnit</a> framework.</p>
<p>
	The <a href="http://www.eztwain.com/eztx/index.htm" target="_blank">EZTwainX ActiveX control</a> is a control I created a few years ago at Dosadi, first and foremost a wrapper for the <a href="http://www.twain.org/" target="_blank">TWAIN scanning API</a>, allowing a web application to scan from a user&rsquo;s local scanner. Secondarily EZTwainX is an image container, able to collect, display, modify, print and export images as base64 strings to Javascript, ready for upload.</p>
<p>
	When Atalasoft hired me, they purchased EZTwainX and incorporated it into some of their offerings. And one of the things Atalasoft does <em>a lot of</em> is <a href="http://en.wikipedia.org/wiki/Unit_testing" target="_blank">unit-testing</a>, so EZTwainX needed a solid unit-test.&nbsp; (At this point the TWAIN/scanner geeks might be wondering &ldquo;Wait&hellip; like, automated tests of TWAIN scanning?&rdquo; &ndash; Yes, that too. A good subject for a future blog.)</p>
<p>
	What I wanted was a C# class that would carry out a series of automated tests of a freshly-built EZTwainX.cab on a dedicated build-server. It would have been simpler (I imagine) if I had been willing to add the control <a href="http://msdn.microsoft.com/en-us/library/wkze6zky%28v=vs.100%29.aspx" target="_blank">as a reference</a> to the test assembly, or <a href="http://msdn.microsoft.com/en-us/library/xwzy44e4.aspx" target="_blank">import a type library</a>, or any similar compile-time cheat. But I didn&rsquo;t want to do that. EZTwainX is primarily used from Javascript inside Internet Explorer, so I wanted a unit test that closely reproduced that use-case: No compile-time dependency, and no assumption that the control was already installed or registered. So I set out, by stages, to load and test the control from C# (.NET 3.5) entirely dynamically, at run-time, depending <em>only</em> on the .cab file and the human-readable documented API of the component.&nbsp; &hellip;OK, and I knew its GUID.</p>
<p>
	Parts of the project were not hard. Once the control was instantiated, getting &amp; setting properties and calling methods was tedious and error-prone but relatively straightforward and fairly well documented on the web &ndash; basically <a href="http://msdn.microsoft.com/en-us/library/system.type.invokemember%28v=vs.90%29.aspx" target="_blank">InvokeMember</a> is your best friend.</p>
<p>
	Two things, however, sent me into the weeds for days:</p>
<p>
	A. Instantiating the control purely from an ocx file inside a .cab</p>
<p>
	B. Capturing events fired by the control.</p>
<p>
	In this post I&rsquo;ll explain how I instantiated the control. In an upcoming post I&rsquo;ll explain what I did to capture events.</p>
<h2>
	A. Instantiating an ActiveX dynamically from a .cab</h2>
<p>
	Despite my best efforts, I failed to instantiate EZTwainX directly from the .cab although there were hints it should have been possible. Not for me. To instantiate the control, takes four steps:</p>
<p>
	1. Unpack the eztwainx.cab file into eztwainx.ocx and eztwainx.manifest.ocx, placed alongside the running unit test assembly.</p>
<p>
	2. Set up an <em>activation context</em> that points to the control on disk and push it onto the <em>activation context stack</em>.<br />
	What, you&rsquo;ve never heard of these? Me neither. All part of <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa374151%28v=vs.85%29.aspx" target="_blank">Side-by-side Assemblies or SxS</a>.&nbsp; Overlappingly discussed under the term <a href="http://msdn.microsoft.com/en-us/library/fh1h056h.aspx" target="_blank">Registration-Free COM</a>, also <a href="http://msdn.microsoft.com/en-us/library/ms973913.aspx" target="_blank">here</a>.</p>
<p>
	3. Create the control within that activation context by getting the Type from the GUID and then using <a href="http://msdn.microsoft.com/en-us/library/wccyzw83(v=vs.90).aspx" target="_blank">System.Activator.CreateInstance</a></p>
<p>
	4. Pop the activation context back off the stack and destroy it.</p>
<p>
	In detail:</p>
<h3>
	1. Unpack the .cab</h3>
<p>
	Using a helper function, I use the built-in &lsquo;expand&rsquo; command to unpack the .cab file into the directory alongside the executing unit test assembly.</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; color: ; mso-no-proof: yes"><font face="Courier New"><font color="#008000" style="font-size: 10pt">// Expand the EZTwainX.cab into the folder this test assembly is running from:</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">int</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt"> exitCode = runCommand(</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt 0.5in; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515"><font style="font-size: 10pt">&quot;expand.exe&quot;</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">,</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt 0.5in; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515"><font style="font-size: 10pt">&quot;\&quot;&quot;</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt"> + <span style="color: "><font color="#2b91af">Path</font></span>.Combine(solutionDir, <span style="color: "><font color="#a31515">@&quot;WebControls\Resources\WebCapture\eztwainx.cab&quot;</font></span>) + <span style="color: "><font color="#a31515">&quot;\&quot;&quot;</font></span> +</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#a31515">&quot; -F:* &quot;</font></span>+</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#a31515">&quot;\&quot;&quot;</font></span> + targetDir + <span style="color: "><font color="#a31515">&quot;\&quot;&quot;</font></span>);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#2b91af"><font style="font-size: 10pt">Assert</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">.IsTrue((exitCode==0||exitCode==1), <span style="color: "><font color="#a31515">&quot;exit code of expand of eztwainx.cab&quot;</font></span>);</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; color: ; mso-no-proof: yes"><font face="Courier New"><font color="#008000" style="font-size: 10pt">// We allow exitCode 1 because that&#39;s what expand returns when a file</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; color: ; mso-no-proof: yes"><font face="Courier New"><font color="#008000" style="font-size: 10pt">// already exists and can&#39;t be overwritten e.g. when the file is in use.</font></font></span></p>
<p>
	solutionDir = the root directory of the solution that contains the .cab file as a binary resource.<br />
	targetDir = the directory containing the executing unit test assembly.<br />
	Note the quotes inserted around the paths, in case there are spaces in them.</p>
<h3>
	2. Establish an Activation Context</h3>
<p>
	Good reference: <a href="http://msdn.microsoft.com/en-us/library/ms973913.aspx" target="_blank">Registration-Free Activation of COM Components: A Walkthrough by Steve White and Leslie Muller (MSDN)</a></p>
<p>
	Activating an ActiveX purely from files on disk involves an <em><a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa374191%28v=vs.85%29.aspx" target="_blank">application manifest</a></em> and an <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa374153%28v=vs.85%29.aspx" target="_blank"><em>activation context</em></a> &ndash; both items poorly documented even by Microsoft standards.&nbsp; This is part of Side-by-Side assemblies, meant to be a solution to &ldquo;DLL Hell&rdquo;.&nbsp; The application manifest is a file associated with the application (so in our case, the unit test class running within NUnit) that &ldquo;describes and identifies the shared and private side-by-side assemblies that an application should bind to at run time&rdquo;.&nbsp; Using the application manifest, we can tell Windows to load and use a particular DLL or COM component from a particular location when the application needs it &ndash; overriding anything in the registry and preventing any default searching.&nbsp; The application just loads and uses the specific versioned file.&nbsp; Here&rsquo;s the manifest used by our unit test, the result of considerable Googling and trial-and-error:</p>
<h4>
	Application Manifest</h4>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">&lt;?</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">xml</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"> </font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">version</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">1.0</font></span>&quot;<span style="color: "><font color="#0000ff"> </font></span><span style="color: "><font color="#ff0000">encoding</font></span><span style="color: "><font color="#0000ff">=</font></span>&quot;<span style="color: "><font color="#0000ff">utf-8</font></span>&quot;</font><span style="color: "><font color="#0000ff" style="font-size: 10pt">?&gt;</font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">&lt;</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">assembly</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"> </font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">xsi:schemaLocation</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd</font></span>&quot;</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><span style="mso-spacerun: yes"><font color="#0000ff"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">manifestVersion</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">1.0</font></span>&quot;</font><span style="color: "><font color="#0000ff" style="font-size: 10pt"> </font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><span style="mso-spacerun: yes"><font color="#0000ff"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">xmlns:asmv1</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">urn:schemas-microsoft-com:asm.v1</font></span>&quot;</font><span style="color: "><font color="#0000ff" style="font-size: 10pt"> </font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><span style="mso-spacerun: yes"><font color="#0000ff"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">xmlns:asmv2</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">urn:schemas-microsoft-com:asm.v2</font></span>&quot;</font><span style="color: "><font color="#0000ff" style="font-size: 10pt"> </font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><span style="mso-spacerun: yes"><font color="#0000ff"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">xmlns:dsig</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">http://www.w3.org/2000/09/xmldsig#</font></span>&quot;</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><span style="mso-spacerun: yes"><font color="#0000ff"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">xmlns</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">urn:schemas-microsoft-com:asm.v1</font></span>&quot;</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><span style="mso-spacerun: yes"><font color="#0000ff"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></span></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">xmlns:xsi</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">http://www.w3.org/2001/XMLSchema-instance</font></span>&quot;</font><span style="color: "><font color="#0000ff" style="font-size: 10pt">&gt;</font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp; </font></span><font style="font-size: 10pt">&lt;</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">assemblyIdentity</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"> </font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">name</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">client.exe</font></span>&quot;<span style="color: "><font color="#0000ff"> </font></span><span style="color: "><font color="#ff0000">version</font></span><span style="color: "><font color="#0000ff">=</font></span>&quot;<span style="color: "><font color="#0000ff">1.0.0.0</font></span>&quot;<span style="color: "><font color="#0000ff"> </font></span><span style="color: "><font color="#ff0000">processorArchitecture</font></span><span style="color: "><font color="#0000ff">=</font></span>&quot;<span style="color: "><font color="#0000ff">x86</font></span>&quot;<span style="color: "><font color="#0000ff"> </font></span><span style="color: "><font color="#ff0000">type</font></span><span style="color: "><font color="#0000ff">=</font></span>&quot;<span style="color: "><font color="#0000ff">win32</font></span>&quot;</font><span style="color: "><font color="#0000ff" style="font-size: 10pt"> /&gt;</font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp; </font></span><font style="font-size: 10pt">&lt;</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">dependency</font></span></font><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff" style="font-size: 10pt">&gt;</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">&lt;</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">dependentAssembly</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><span style="mso-spacerun: yes"><font color="#0000ff">&nbsp; </font></span></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">asmv2:codebase</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">EZTwainX.ocx.manifest</font></span>&quot;</font><span style="color: "><font color="#0000ff" style="font-size: 10pt">&gt;</font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">&lt;</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">assemblyIdentity</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"> </font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#ff0000">name</font></span><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff">=</font></span></font><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt">&quot;<span style="color: "><font color="#0000ff">EZTwainX.ocx</font></span>&quot;<span style="color: "><font color="#0000ff"> </font></span><span style="color: "><font color="#ff0000">version</font></span><span style="color: "><font color="#0000ff">=</font></span>&quot;<span style="color: "><font color="#0000ff">1.100.0.0</font></span>&quot;<span style="color: "><font color="#0000ff"> </font></span><span style="color: "><font color="#ff0000">type</font></span><span style="color: "><font color="#0000ff">=</font></span>&quot;<span style="color: "><font color="#0000ff">win32</font></span>&quot;</font><span style="color: "><font color="#0000ff" style="font-size: 10pt"> /&gt;</font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">&lt;/</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">dependentAssembly</font></span></font><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff" style="font-size: 10pt">&gt;</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp; </font></span><font style="font-size: 10pt">&lt;/</font></font></span><font style="font-size: 10pt"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">dependency</font></span></font><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff" style="font-size: 10pt">&gt;</font></span></font></p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	<font face="Courier New"><span style="line-height: 12pt; font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">&lt;/</font></font></span><font style="font-size: 10pt"><span style="line-height: 12pt; font-family: ; color: ; mso-no-proof: yes"><font color="#a31515">assembly</font></span></font><span style="line-height: 12pt; font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff" style="font-size: 10pt">&gt;</font></span></font></p>
<p>
	It&rsquo;s mostly boilerplate. The variable parts for us are:</p>
<p>
	<font color="#0000ff" face="Courier New" size="2">&lt;assemblyIdentity name=&quot;client.exe&quot; version=&quot;1.0.0.0&quot; processorArchitecture=&quot;x86&quot; type=&quot;win32&quot; /&gt;</font></p>
<p>
	This describes the application or <em>client</em> &ndash; who is going to be using these external assemblies &ndash; and is half lies but Windows doesn&rsquo;t seem to care. The &ldquo;x86&rdquo; and &ldquo;win32&rdquo; are true: Because the ActiveX is a 32-bit native-code Windows DLL, the application must be a win32 app and must run in x86 mode.</p>
<font color="#0000ff" face="Courier New" size="2">&lt;dependentAssembly asmv2:codebase=&quot;EZTwainX.ocx.manifest&quot;&gt;<br />
&lt;assemblyIdentity name=&quot;EZTwainX.ocx&quot; version=&quot;1.100.0.0&quot; type=&quot;win32&quot; /&gt;<br />
&lt;/dependentAssembly&gt; </font><br />
<p>
	This tells Windows about the one assembly of interest to us, which is used by our test application.&nbsp; It contains the name of the control&rsquo;s manifest, the name of the DLL containing the control, and the version and platform of the control as <em>required by the application</em>.&nbsp; I have to admit I don&rsquo;t remember, but I <em>believe</em> the codebase value is interpreted relative to the directory containing the application manifest.&nbsp; In other words codebase=&rdquo;foo.manifest&rdquo; means foo.manifest in the same folder as this document - the application manifest.</p>
<h4>
	ActivationContext Helper Class</h4>
<p>
	The whole activation-context-with-manifest thing is handled by this little helper class.<br />
	Yes, yes, it&rsquo;s a hack.</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">class</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt"> </font><span style="color: "><font color="#2b91af" style="font-size: 10pt">ActivationContext</font></span></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#808080">///</font></span><span style="color: "><font color="#008000"> </font></span></font><span style="color: "><font color="#808080" style="font-size: 10pt">&lt;summary&gt;</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#808080">///</font></span></font><span style="color: "><font color="#008000" style="font-size: 10pt"> Create an instance of a COM object given the GUID of its class</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#808080">///</font></span></font><span style="color: "><font color="#008000" style="font-size: 10pt"> and a filepath of a client manifest (AKA an application manifest.)</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#808080">///</font></span><span style="color: "><font color="#008000"> </font></span></font><span style="color: "><font color="#808080" style="font-size: 10pt">&lt;/summary&gt;</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#808080">///</font></span><span style="color: "><font color="#008000"> </font></span><span style="color: "><font color="#808080">&lt;param name=&quot;guid&quot;&gt;</font></span><span style="color: "><font color="#008000">GUID = CLSID of the COM object, {NNNN...NNN}</font></span></font><span style="color: "><font color="#808080" style="font-size: 10pt">&lt;/param&gt;</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#808080">///</font></span><span style="color: "><font color="#008000"> </font></span><span style="color: "><font color="#808080">&lt;param name=&quot;manifest&quot;&gt;</font></span></font><span style="color: "><font color="#008000" style="font-size: 10pt">full path of manifest to activate, should list the</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#808080">///</font></span><span style="color: "><font color="#008000"> desired COM class as a dependentAssembly.</font></span></font><span style="color: "><font color="#808080" style="font-size: 10pt">&lt;/param&gt;</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#808080">///</font></span><span style="color: "><font color="#008000"> </font></span><span style="color: "><font color="#808080">&lt;returns&gt;</font></span><span style="color: "><font color="#008000">An instance of the specified COM class, or null.</font></span></font><span style="color: "><font color="#808080" style="font-size: 10pt">&lt;/returns&gt;</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">static</font></span> <span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#0000ff">object</font></span> CreateInstanceWithManifest(<span style="color: "><font color="#2b91af">Guid</font></span> guid, <span style="color: "><font color="#0000ff">string</font></span> manifest)</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">object</font></span> comob = <span style="color: "><font color="#0000ff">null</font></span>;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">ActivationContext</font></span>.UsingManifestDo(manifest, <span style="color: "><font color="#0000ff">delegate</font></span>()</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#008000" style="font-size: 10pt">// Get the type object associated with the CLSID.</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">Type</font></span> T = <span style="color: "><font color="#2b91af">Type</font></span>.GetTypeFromCLSID(guid);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#008000" style="font-size: 10pt">// Create an instance of the type:</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">comob = System.<span style="color: "><font color="#2b91af">Activator</font></span>.CreateInstance(T);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">});</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">return</font></span> comob;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#0000ff">delegate</font></span> <span style="color: "><font color="#0000ff">void</font></span> <span style="color: "><font color="#2b91af">doSomething</font></span>();</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">static</font></span> <span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#0000ff">void</font></span> UsingManifestDo(<span style="color: "><font color="#0000ff">string</font></span> manifest, <span style="color: "><font color="#2b91af">doSomething</font></span> thingToDo)</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">UnsafeNativeMethods</font></span>.<span style="color: "><font color="#2b91af">ACTCTX</font></span> context = <span style="color: "><font color="#0000ff">new</font></span> <span style="color: "><font color="#2b91af">UnsafeNativeMethods</font></span>.<span style="color: "><font color="#2b91af">ACTCTX</font></span>();</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">context.cbSize = <span style="color: "><font color="#2b91af">Marshal</font></span>.SizeOf(<span style="color: "><font color="#0000ff">typeof</font></span>(<span style="color: "><font color="#2b91af">UnsafeNativeMethods</font></span>.<span style="color: "><font color="#2b91af">ACTCTX</font></span>));</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">if</font></span> (context.cbSize != 0x20)</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">throw</font></span> <span style="color: "><font color="#0000ff">new</font></span> <span style="color: "><font color="#2b91af">Exception</font></span>(<span style="color: "><font color="#a31515">&quot;ACTCTX.cbSize is wrong&quot;</font></span>);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">context.lpSource = manifest;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">IntPtr</font></span> hActCtx = <span style="color: "><font color="#2b91af">UnsafeNativeMethods</font></span>.CreateActCtx(<span style="color: "><font color="#0000ff">ref</font></span> context);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">if</font></span> (hActCtx == (<span style="color: "><font color="#2b91af">IntPtr</font></span>)(-1))</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">throw</font></span> <span style="color: "><font color="#0000ff">new</font></span> <span style="color: "><font color="#2b91af">Win32Exception</font></span>();</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">try</font></span> </font><span style="color: "><font color="#008000" style="font-size: 10pt">// with valid hActCtx</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">IntPtr</font></span> cookie = <span style="color: "><font color="#2b91af">IntPtr</font></span>.Zero;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">if</font></span> (!<span style="color: "><font color="#2b91af">UnsafeNativeMethods</font></span>.ActivateActCtx(hActCtx, <span style="color: "><font color="#0000ff">out</font></span> cookie))</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">throw</font></span> <span style="color: "><font color="#0000ff">new</font></span> <span style="color: "><font color="#2b91af">Win32Exception</font></span>();</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">try</font></span> </font><span style="color: "><font color="#008000" style="font-size: 10pt">// with activated context</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">thingToDo();</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#0000ff" style="font-size: 10pt">finally</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">UnsafeNativeMethods</font></span>.DeactivateActCtx(0, cookie);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#0000ff" style="font-size: 10pt">finally</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">UnsafeNativeMethods</font></span>.ReleaseActCtx(hActCtx);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">[<span style="color: "><font color="#2b91af">SuppressUnmanagedCodeSecurityAttribute</font></span>]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">internal</font></span> <span style="color: "><font color="#0000ff">static</font></span> <span style="color: "><font color="#0000ff">class</font></span> </font><span style="color: "><font color="#2b91af" style="font-size: 10pt">UnsafeNativeMethods</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#008000" style="font-size: 10pt">// Activation Context API Functions</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">[<span style="color: "><font color="#2b91af">DllImport</font></span>(<span style="color: "><font color="#a31515">&quot;Kernel32.dll&quot;</font></span>, SetLastError = <span style="color: "><font color="#0000ff">true</font></span>, EntryPoint = <span style="color: "><font color="#a31515">&quot;CreateActCtxW&quot;</font></span>)]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">internal</font></span> <span style="color: "><font color="#0000ff">extern</font></span> <span style="color: "><font color="#0000ff">static</font></span> <span style="color: "><font color="#2b91af">IntPtr</font></span> CreateActCtx(<span style="color: "><font color="#0000ff">ref</font></span> <span style="color: "><font color="#2b91af">ACTCTX</font></span> actctx);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">[<span style="color: "><font color="#2b91af">DllImport</font></span>(<span style="color: "><font color="#a31515">&quot;Kernel32.dll&quot;</font></span>, SetLastError = <span style="color: "><font color="#0000ff">true</font></span>)]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">[<span style="color: "><font color="#0000ff">return</font></span>: <span style="color: "><font color="#2b91af">MarshalAs</font></span>(<span style="color: "><font color="#2b91af">UnmanagedType</font></span>.Bool)]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">internal</font></span> <span style="color: "><font color="#0000ff">static</font></span> <span style="color: "><font color="#0000ff">extern</font></span> <span style="color: "><font color="#0000ff">bool</font></span> ActivateActCtx(<span style="color: "><font color="#2b91af">IntPtr</font></span> hActCtx, <span style="color: "><font color="#0000ff">out</font></span> <span style="color: "><font color="#2b91af">IntPtr</font></span> lpCookie);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">[<span style="color: "><font color="#2b91af">DllImport</font></span>(<span style="color: "><font color="#a31515">&quot;kernel32.dll&quot;</font></span>, SetLastError = <span style="color: "><font color="#0000ff">true</font></span>)]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">[<span style="color: "><font color="#0000ff">return</font></span>: <span style="color: "><font color="#2b91af">MarshalAs</font></span>(<span style="color: "><font color="#2b91af">UnmanagedType</font></span>.Bool)]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">internal</font></span> <span style="color: "><font color="#0000ff">static</font></span> <span style="color: "><font color="#0000ff">extern</font></span> <span style="color: "><font color="#0000ff">bool</font></span> DeactivateActCtx(<span style="color: "><font color="#0000ff">int</font></span> dwFlags, <span style="color: "><font color="#2b91af">IntPtr</font></span> lpCookie);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">[<span style="color: "><font color="#2b91af">DllImport</font></span>(<span style="color: "><font color="#a31515">&quot;Kernel32.dll&quot;</font></span>, SetLastError = <span style="color: "><font color="#0000ff">true</font></span>)]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">internal</font></span> <span style="color: "><font color="#0000ff">static</font></span> <span style="color: "><font color="#0000ff">extern</font></span> <span style="color: "><font color="#0000ff">void</font></span> ReleaseActCtx(<span style="color: "><font color="#2b91af">IntPtr</font></span> hActCtx);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#008000" style="font-size: 10pt">// Activation context structure </font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">[<span style="color: "><font color="#2b91af">StructLayout</font></span>(<span style="color: "><font color="#2b91af">LayoutKind</font></span>.Sequential, Pack = 4, CharSet = <span style="color: "><font color="#2b91af">CharSet</font></span>.Unicode)]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">internal</font></span> <span style="color: "><font color="#0000ff">struct</font></span> </font><span style="color: "><font color="#2b91af" style="font-size: 10pt">ACTCTX</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#2b91af">Int32</font></span> cbSize;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#2b91af">UInt32</font></span> dwFlags;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#0000ff">string</font></span> lpSource;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#2b91af">UInt16</font></span> wProcessorArchitecture;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#2b91af">UInt16</font></span> wLangId;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#0000ff">string</font></span> lpAssemblyDirectory;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#0000ff">string</font></span> lpResourceName;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#0000ff">string</font></span> lpApplicationName;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">public</font></span> <span style="color: "><font color="#2b91af">IntPtr</font></span> hModule;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">&nbsp;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	&nbsp;</p>
<h3>
	3. Create an Instance of the Control, in the Activation Context</h3>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	Trivial once everything is set up right &ndash; see CreateInstanceWithManifest above.</p>
<h3>
	4. Pop the Activation Context off the Context Stack and Destroy it</h3>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	And the cleanup, which apparently can cause ugly runtime weirdness if not done properly, can be seen in the <em>finally</em> clauses of UsingManifestDo above.</p>
<h2>
	Test SetUp</h2>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	Once we have that ActivationContext helper class, setting up and running tests (other than event handling&hellip;) becomes pretty simple.</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	Here&rsquo;s the function in the unit test class that uses that helper class to instantiate an EZTwainX object, using EZTwainX&rsquo;s GUID and the application manifest file:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">private</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt"> <span style="color: "><font color="#0000ff">object</font></span> CreateEZTwainX()</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">object</font></span> eztwain = <span style="color: "><font color="#0000ff">null</font></span>;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">string</font></span> manifest = System.IO.<span style="color: "><font color="#2b91af">Path</font></span>.Combine(targetDir, <span style="color: "><font color="#a31515">@&quot;eztwainx.client.manifest&quot;</font></span>);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#0000ff" style="font-size: 10pt">try</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">eztwain = Atalasoft.Tests.<span style="color: "><font color="#2b91af">ActivationContext</font></span>.CreateInstanceWithManifest(</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">new</font></span> <span style="color: "><font color="#2b91af">Guid</font></span>(<span style="color: "><font color="#a31515">&quot;74F4F118-91E6-4AFC-B8D2-04066781F239&quot;</font></span>), manifest);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">catch</font></span> (<span style="color: "><font color="#2b91af">Exception</font></span>)</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">Console</font></span>.WriteLine(<span style="color: "><font color="#a31515">&quot;EZTwainX creation failed&quot;</font></span>);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">throw</font></span>;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">return</font></span> eztwain;</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">}</font></font></span></p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	&nbsp;</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	<a href="http://msdn.microsoft.com/en-us/library/ms973274.aspx" target="_blank"><img align="right" alt="IC90098" border="0" height="94" src="http://atalasoft.com/CMSPages/GetFile.aspx?guid=ffc73441-c00a-4a7f-9a36-87cc153a6789" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="IC90098" width="244" /></a>This function returns a .NET object known as an <a href="http://msdn.microsoft.com/en-us/library/8bwh56xe%28v=vs.90%29.aspx" target="_blank">RCW or Runtime Callable Wrapper</a>, which wraps around and mediates between .NET, and a COM object - in this case an instance of the EZTwainX control. Keep in mind this returned object has type System.Object. It is absolutely not a literal pointer to a COM object or COM interface. It <em>holds</em>, internally, some kind of pointer to the COM object, probably the IUnknown.&nbsp; When you make calls using InvokeMember through the RCW they are translated into COM calls.&nbsp; Normally events coming out of the COM object are translated back to .NET by the RCW, but I was unable to get that to work - we&rsquo;ll get into that in Part B.</p>
<h2>
	Finally: Actual Testing of Methods and Properties</h2>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	Once we&rsquo;ve created an EZTwainX control this way, making calls to methods and getting and setting properties is fairly straightforward.&nbsp; For example, here&rsquo;s the beginning of the SetUp method of our test class. This method is run by NUnit before running each designated test method:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">[<span style="color: "><font color="#2b91af">SetUp</font></span>]</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">public</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt"> <span style="color: "><font color="#0000ff">void</font></span> SetUp()</font></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">{</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#008000" style="font-size: 10pt">// Per-test initialization.</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#008000" style="font-size: 10pt">// Create an instance of the control:</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">eztwain = CreateEZTwainX();</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">EZTwainX = eztwain.GetType();</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#0000ff">string</font></span> version = (<span style="color: "><font color="#0000ff">string</font></span>)EZTwainX.InvokeMember(<span style="color: "><font color="#a31515">&quot;VersionString&quot;</font></span>, <span style="color: "><font color="#2b91af">BindingFlags</font></span>.GetProperty, <span style="color: "><font color="#0000ff">null</font></span>, eztwain, <span style="color: "><font color="#0000ff">null</font></span>);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">Console</font></span>.WriteLine(<span style="color: "><font color="#a31515">&quot;EZTwainX VersionString=&#39;{0}&#39;&quot;</font></span>, version);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><span style="color: "><font color="#008000" style="font-size: 10pt">// Extract sub-objects</font></span></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">scan = EZTwainX.InvokeMember(<span style="color: "><font color="#a31515">&quot;Scan&quot;</font></span>, <span style="color: "><font color="#2b91af">BindingFlags</font></span>.GetProperty, <span style="color: "><font color="#0000ff">null</font></span>, eztwain, <span style="color: "><font color="#0000ff">null</font></span>);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">Assert</font></span>.IsNotNull(scan);</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><span style="mso-spacerun: yes"><font style="font-size: 10pt">&nbsp;&nbsp;&nbsp; </font></span><font style="font-size: 10pt">IScan = scan.GetType();</font></font></span></p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	&nbsp;</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	To use InvokeMember, we need both the eztwain object and - kind of weirdly - its System.Type &ndash; kept around in the EZTwainX variable &ndash; which we can get any time with eztwain.GetType().</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	For example, the first call to InvokeMember above gets the value of the property named &lsquo;VersionString&rsquo; of the object eztwain. We convert that to a .NET string and log it to the test output log.&nbsp; This fails at runtime if the value of that property can&rsquo;t be reasonably interpreted as a string.</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	By the way, the <span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt"><span style="color: "><font color="#2b91af">Assert</font></span>.IsNotNull(scan)</font></font></span> &ndash; that&rsquo;s a call to the NUnit framework, to do an actual unit test thing. If scan <em>is</em> null at that point, the test immediately exceptions-out and fails, recording a semi-informative message in a build log and causing the entire build to be flagged as failing.&nbsp; Lights begin flashing, sirens go off, Nerf launchers pop up and enter targeting mode &ndash; the joy of <a href="http://en.wikipedia.org/wiki/Continuous_integration" target="_blank">Continuous Integration</a>.&nbsp; I have to say, I&rsquo;ve grown very fond of NUnit.</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	Here are examples of setting a property and calling a method respectively:</p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<span style="font-family: ; mso-no-proof: yes"><font face="Courier New"><font style="font-size: 10pt">EZTwainX.InvokeMember(<span style="color: "><font color="#a31515">&quot;AppTitle&quot;</font></span>, <span style="color: "><font color="#2b91af">BindingFlags</font></span>.SetProperty, <span style="color: "><font color="#0000ff">null</font></span>, eztwain, <span style="color: "><font color="#0000ff">new</font></span> <span style="color: "><font color="#0000ff">object</font></span>[] { <span style="color: "><font color="#a31515">&quot;EZTwainX Tests&quot;</font></span> });</font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">bool</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt"> success = (<span style="color: "><font color="#0000ff">bool</font></span>)EZTwainX.InvokeMember(<span style="color: "><font color="#a31515">&quot;AcquireSingleImage&quot;</font></span>, <span style="color: "><font color="#2b91af">BindingFlags</font></span>.InvokeMethod, <span style="color: "><font color="#0000ff">null</font></span>, eztwain, <span style="color: "><font color="#0000ff">null</font></span>);</font></span></font></p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	&nbsp;</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	<font style="background-color: #cccccc">Aside: It seems likely that the new <em><a href="http://msdn.microsoft.com/en-us/library/dd264736.aspx" target="_blank">dynamic</a></em> type in Visual C# 2010 might obviate the whole EZTWainX.InvokeMember thing, allowing us to write e.g.</font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none">
	<font face="Courier New"><font style="background-color: #cccccc"><span style="font-family: ; color: ; mso-no-proof: yes"><font color="#0000ff"><font style="font-size: 10pt">bool</font></font></span><span style="font-family: ; mso-no-proof: yes"><font style="font-size: 10pt"> success = (<span style="color: "><font color="#0000ff">bool</font></span>)eztwain.<span style="color: "><font color="#a31515">AcquireSingleImage(</font></span>);</font></span></font></font></p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	&nbsp;</p>
<p>
	<font style="background-color: #cccccc">but&hellip; we&rsquo;re still on .NET 3.5.</font></p>
<h2>
	Conclusion</h2>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	Whew!&nbsp; That&rsquo;s a lot. Let&rsquo;s save Part B, capturing events in C# from a dynamically instantiated ActiveX control, for the next blog post.&nbsp; Obviously if you just can&rsquo;t wait for that, comment here, or put a watch on my <a href="http://stackoverflow.com/questions/9009069" target="_blank">stackoverflow question about this</a> which I&rsquo;ll be self-answering shortly&hellip;</p>
<h2>
	Random Afterthoughts</h2>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	The application manifest file, <font face="Courier New">eztwainx.client.manifest</font>, has to agree with the control&rsquo;s manifest regarding the version number of the control.</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	It seemed to make life simpler to roll the control&rsquo;s <font face="Courier New">eztwainx.ocx.manifest</font> file into the .cab archive, so that&rsquo;s what we did.&nbsp; That way when we unpack the .cab, that manifest ends up alongside the <font face="Courier New">eztwain.ocx</font> that it describes, which is where we need it.&nbsp; We SCC the <font face="Courier New">eztwainx.ocx.manifest</font> as part of the EZTwainX control, so there&rsquo;s a better chance we&rsquo;ll remember to update it when we bump the control&rsquo;s version ;-)</p>
<p class="MsoNormal" style="line-height: 13pt; margin: 0in 0in 10pt">
	Somehow you need to get the application manifest file copied alongside the executing test assembly.&nbsp; I do this by literally copying the file at runtime with file I/O operations. In your dev environment, you might find a simpler way.</p>
]]></description>
     <pubDate>Mon, 06 Feb 2012 16:26:04 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/spikemclarty/february-2012/dynamically-testing-an-activex-control-from-c-and]]></link>
     <dc:creator> SpikeMcLarty</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/jakemitchell/january-2012/depending-on-tools-to-develop-profitable-software]]></guid>
     <title><![CDATA[Depending on Tools to Develop Profitable Software]]></title>
     <description><![CDATA[<p>
	Software engineers don&rsquo;t develop products in a vacuum.&nbsp; We rely on high-level languages, frameworks, and SDKs to get the job done.&nbsp; Even those who create drivers, operating systems, or virtual machines in assembler are confined to the instruction set supported by the target processor.&nbsp; Every engineer in our industry stands on the shoulders of giants.</p>
<p>
	How can we be sure our tools will always behave as expected?&nbsp; In truth, it&rsquo;s rarely feasible to be completely sure they all will.&nbsp; Intel once released a processor that divided only 0.0000000114% of the total input number space <a href="http://www.intel.com/support/processors/pentium/sb/CS-013007.htm">incorrectly</a>.&nbsp; Operating systems and applications seemed to run just fine on it, but a math professor eventually reduced strange results to a <a href="http://www.trnicely.net/pentbug/bugmail1.html">bug</a> in the processor.&nbsp; Have you tested your processor&rsquo;s entire instruction set on all possible inputs and confirmed that all results are correct?&nbsp; What about doing the same for the JIT compiler, IL, .NET Framework, and the .NET high-level languages and their compilers?&nbsp; I&rsquo;d like to see you try--really, I would.</p>
<p>
	Few engineers would ever take that challenge seriously, and yet we solve real problems using these tools all the time.&nbsp; Despite not confirming their correctness, we need enough confidence in our tools to justify using them in our product.&nbsp; Here are some factors that improve my confidence in a tool:</p>
<ol>
	<li>
		Low-level details are cleanly hidden by a definitive interface specification.</li>
	<li>
		All versions have backward compatible interface specifications.</li>
	<li>
		Experiences are consistent with its specification.</li>
	<li>
		Past releases include bug fixes.</li>
	<li>
		Many other engineers depend on it for similar use cases.</li>
	<li>
		Uncertainties about the tool are addressed quickly through the producer&rsquo;s support system or websites like <a href="http://stackoverflow.com/">StackOverflow</a>.</li>
</ol>
<p>
	These factors tell me two important things: the producer respects their tool&rsquo;s abstraction layer and engineers appreciate the value of that abstraction.&nbsp; Without reliable, practical abstractions engineers don&rsquo;t have a firm foundation to build on.</p>
<p>
	After building enough confidence in a tool to develop production applications on top of it, we&rsquo;re still not done assessing the tool.&nbsp; As long as we use that tool or anything that depends on it, we should monitor for inconsistencies with the tool&rsquo;s specification.&nbsp;&nbsp;</p>
<p>
	Defects or unexpected behaviors sometimes surface in the tools we use in our implementations.&nbsp; It&rsquo;s not fun, but it happens.&nbsp; How can we minimize the negative economic impact of those defects?&nbsp; Studies discussed in Steven McConnell&rsquo;s <a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?ie=UTF8&amp;qid=1326899193&amp;sr=8-1">Code Complete</a> found it costs 10 to 100 times as much to fix a defect after product release compared to fixing the problem when it was first introduced.&nbsp; It&rsquo;s unclear whether the studies distinguish between defects originating in internal or third party modules.&nbsp; What is clear is this: handling defects sooner than later in the product life-cycle reduces overall expenses.</p>
<p>
	Testing helps us identify defects, determine their scope, communicate clearly about the problem, and confirm whether code changes resolve the problem.&nbsp; Every now and then debates spring up in the blogosphere over how much utility testing gives us.&nbsp; Supposing your goal is to develop a profitable product, the utility of your engineering practices need to be evaluated against that goal.&nbsp; Do what you can to reduce the overall cost of development (including maintenance) and maximize market penetration.&nbsp; The nature of your product and target market should determine whether it&rsquo;s best to test by manual trial and error, formal verification, or something in between.</p>
]]></description>
     <pubDate>Thu, 26 Jan 2012 14:28:39 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/jakemitchell/january-2012/depending-on-tools-to-develop-profitable-software]]></link>
     <dc:creator> JakeMitchell</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/loufranco/january-2012/addressing-switching-forces-in-toolkit-buying]]></guid>
     <title><![CDATA[Addressing Switching Forces in Toolkit Buying]]></title>
     <description><![CDATA[<p>
	<a href="http://twitter/bmoesta">Bob Moesta</a> from <a href="http://www.therewiredgroup.com/">The Rewired Group</a> has <a href="http://blogs.hbr.org/johnson/2011/08/what-job-does-social-media-do.html">a framework for thinking about how customers change which product/service</a> they are using to get a job done:</p>
<p>
	<img src="http://bhc3.files.wordpress.com/2012/01/bob-moesta-4-forces-on-customer-jobs-to-be-done.jpg" /></p>
<ul>
	<li>
		Force 1: <strong>Push</strong> of the situation &ndash; something is happening that is making the customer think about switching</li>
	<li>
		Force 2: <strong>Pull</strong> of the new solution &ndash; all of the benefits that the new solution appears to offer</li>
	<li>
		Force 3: <strong>Allegiance</strong> to the current behavior &ndash; the comfort and understanding of the current solution</li>
	<li>
		Force 4: <strong>Anxiety</strong> of the new solution &ndash; the risk in changing</li>
</ul>
<p>
	Bob&rsquo;s theory is that you need to make F1 + F2 &gt; F3 + F4. To do this, you must know what the old behavior is, what the forces are for that behavior, and then figure out what you can do to address them (increase F1 and F2, and decrease F3 and F4)</p>
<p>
	I will analyze a specific case in my market (developer toolkits) to show you how to use the framework.</p>
<p>
	<strong><font size="4">Case:</font></strong></p>
<blockquote>
	<p>
		<strong><font size="4">The customer is an ISV with a product that could be enhanced with a toolkit. </font></strong></p>
	<p>
		<strong><font size="4">The product does not have the features that the toolkit enables.</font></strong></p>
	<p>
		<strong><font size="4">They are currently a non-consumer of any product or service that gets this job done for their customers. Their customers that do the job do so by combining their product with other products to form the full solution.</font></strong></p>
</blockquote>
<p>
	<strong><font size="4">F1: What situation are they in that is making them consider a change in behavior?</font></strong></p>
<ul>
	<li>
		Customers asking for features.</li>
	<li>
		Sales loss analysis is showing prospects wanted the features.</li>
	<li>
		Competitors may already have these features.</li>
</ul>
<blockquote>
	<p>
		<strong>A toolkit vendor could increase this force by</strong></p>
	<ul>
		<li>
			Creating educational pieces about the benefits of features and direct them to ISV customers</li>
		<li>
			Finding ISV&rsquo;s without features and send testimonials</li>
		<li>
			Highlight the accomplishments of customers</li>
	</ul>
</blockquote>
<p>
	<strong><font size="4">F2: What is enticing them to action?</font></strong></p>
<ul>
	<li>
		They could make more revenue with maintenance or by finding new customers or markets</li>
	<li>
		They would not have to learn the details of implementing the feature, but could just incorporate it</li>
	<li>
		They could get to market faster because using a toolkit is faster than implementing one</li>
</ul>
<blockquote>
	<p>
		<strong>A toolkit vendor could increase this force by</strong></p>
	<ul>
		<li>
			Publicizing the market size and opportunity in the businesses of its customers</li>
		<li>
			Polling its customers&rsquo; market on feature requirements and planned uptake time</li>
	</ul>
</blockquote>
<p>
	<strong><font size="4">F3: What situations are causing them not to act?</font></strong></p>
<ul>
	<li>
		<font size="3">Already have a planned roadmap with consequences to changing it</font></li>
	<li>
		<font size="3">They think that the current modular approach (customers combine products) is better</font></li>
</ul>
<blockquote>
	<p>
		<strong>A toolkit vendor could decrease this force by</strong></p>
	<ul>
		<li>
			Showing how the modular approach isn&rsquo;t good enough for important use-cases</li>
		<li>
			Offering professional services or development partners</li>
	</ul>
</blockquote>
<ul>
	<!--EndFragment-->
</ul>
<p>
	<strong><font size="4">F4: What is making them anxious about buying a toolkit?</font></strong></p>
<ul>
	<li>
		<font size="3">Cost</font></li>
	<li>
		<font size="3">Available development capacity</font></li>
	<li>
		<font size="3">Not trusting the customer&rsquo;s support or viability</font></li>
	<li>
		<font size="3">Analysis paralysis (too many choices)</font></li>
</ul>
<blockquote>
	<p>
		<strong>A toolkit vendor could decrease this force by</strong></p>
	<ul>
		<li>
			Having pricing models that line up with revenue models</li>
		<li>
			Offering training and professional services to speed development</li>
		<li>
			Supporting them through evaluation processes</li>
		<li>
			Having Money-back guarantees</li>
		<li>
			Proposing buying guides to use to evaluate choices</li>
		<li>
			Showcasing testimonials</li>
	</ul>
</blockquote>
<p>
	This is just a quick analysis &ndash; much more can be done through customer interviews and by preparing responses and trying them on sales calls.&nbsp; Also, doing this is a good way to build up a content creation strategy that can be used in nurturing campaigns, whitepapers, on your site, brochures, etc.</p>
<p>
	Another thing to realize is that these forces act differently at different points in the buying cycle.&nbsp; Sales loss analysis is probably a very early driver to start to contemplate change &ndash; having too many choices is a later force. During customer interviews, you may want to map out how these forces relate to time and buying milestones.</p>
]]></description>
     <pubDate>Tue, 24 Jan 2012 14:56:26 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/loufranco/january-2012/addressing-switching-forces-in-toolkit-buying]]></link>
     <dc:creator> LouFranco</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/making-your-own-shapes]]></guid>
     <title><![CDATA[DotPdf: Making Your Own Shapes]]></title>
     <description><![CDATA[<p>
	One of the main ways of creating page content in <a href="http://atalasoft.com/products/dotpdf">DotPdf</a> is to use shapes.&nbsp; We give you a number of &ldquo;canned&rdquo; shapes that are very easy to work with (circle, rectangle, path, text, etc.), but you will probably need to make your own shapes at some point.&nbsp; This article is going to show you one way to do that that is very easy.</p>
<p>
	&nbsp;</p>
<p>
	Let&rsquo;s say that you need to create a letterhead that needs to have a donut in the logo.&nbsp; You could just draw the donut directly, but let&rsquo;s say that you&rsquo;re trying to create a whole corporate presence around donuts and you need to draw a lot of donuts in a lot of places.&nbsp; The way to do that is to make a shape.</p>
<p>
	What is a donut?&nbsp; It&rsquo;s two circles of different radii drawn at the same center with a fill color and an outline color.&nbsp; Great &ndash; these feel like things to pass to the constructor and for some properties.&nbsp; We&rsquo;ll start by making a Donut class that is a subclass of PdfBaseShape:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> System;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> System.Drawing;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> Atalasoft.PdfDoc.Generating.Shapes;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> Atalasoft.PdfDoc.Generating;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">using</span> Atalasoft.PdfDoc.Geometry;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">namespace</span> DonutShape
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    [Serializable]
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Donut : PdfBaseShape
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> Donut(PdfPoint center, <span style="color: #0000ff">double</span> innerRadius, <span style="color: #0000ff">double</span> outerRadius, IPdfColor outlineColor, <span style="color: #0000ff">double</span> linewidth, IPdfColor fillColor)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            : <span style="color: #0000ff">base</span>(outlineColor, linewidth, fillColor)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            Center = center;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            OuterRadius = outerRadius;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            InnerRadius = innerRadius;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> Donut(PdfPoint center, <span style="color: #0000ff">double</span> innerRadius, <span style="color: #0000ff">double</span> outerRadius)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            : <span style="color: #0000ff">this</span>(center, innerRadius, outerRadius, PdfColorFactory.FromColor(Color.Black), 1.0, PdfColorFactory.FromColor(Color.Brown))
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">protected</span> <span style="color: #0000ff">override</span> PdfBaseShape CloneInstance()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> Donut(Center, InnerRadius, OuterRadius); <span style="color: #008000">// colors will get set by the base class</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">protected</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">void</span> DrawShape(Atalasoft.PdfDoc.Generating.Rendering.PdfPageRenderer r)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> NotImplementedException();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> PdfPoint Center { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> OuterRadius { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
        <span style="color: #0000ff">public</span> <span style="color: #0000ff">double</span> InnerRadius { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span>; }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	In this case, I made two constructors, one that takes the line color, line thickness and fill color and one that creates a default.&nbsp; Since colors and line styles are handled by the base class, we can just pass those on and forget about them for now.&nbsp; There are really only two pieces of work: be able to clone the shape and be able to draw the shape.&nbsp; Cloning is easy &ndash; just call a constructor with the center and radii.&nbsp; Drawing is also easy, but let&rsquo;s concentrate on that code on its own:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">void</span> DrawShape(Atalasoft.PdfDoc.Generating.Rendering.PdfPageRenderer r)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    PdfCircle outer = <span style="color: #0000ff">new</span> PdfCircle(Center, OuterRadius, OutlineColor, Style.Width, FillColor);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    PdfCircle inner = <span style="color: #0000ff">new</span> PdfCircle(Center, InnerRadius, OutlineColor, Style.Width, PdfColorFactory.FromColor(Color.White));
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    outer.Render(r);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    inner.Render(r);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	In this routine, I create two circles, one for the outer circle and one for the inner.&nbsp; The outer I create with the Donut&rsquo;s line and fill properties.&nbsp; The inner I do the same except that the fill I set to white.&nbsp; I can try it out with the following test code:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
PdfGeneratedDocument doc = <span style="color: #0000ff">new</span> PdfGeneratedDocument();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
PdfGeneratedPage page = PdfDefaultPages.Letter;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
doc.Pages.Add(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
Donut donut = <span style="color: #0000ff">new</span> Donut(<span style="color: #0000ff">new</span> PdfPoint(288, 400), 18, 100);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
page.DrawingList.Add(donut);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
doc.Save(&quot;<span style="color: #8b0000">donut.pdf</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	When I run the app, I get a page that looks like this:</p>
<p>
	<a href="http://atalasoft.com/CMSPages/GetFile.aspx?guid=24fdc5b9-87f6-4747-8b90-4cb8af027087"><img alt="image" border="0" height="307" src="http://atalasoft.com/CMSPages/GetFile.aspx?guid=213516a8-c90b-4c75-998d-f7cadd130888" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" width="240" /></a></p>
<p>
	Hooray &ndash; that&rsquo;s just what I expected!&nbsp; There&rsquo;s a problem, though.&nbsp; If we draw the donut over the top of something else it will cover it up entirely, which is not what we expected:</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
PdfGeneratedDocument doc = <span style="color: #0000ff">new</span> PdfGeneratedDocument();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
PdfGeneratedPage page = PdfDefaultPages.Letter;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
doc.Pages.Add(page);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #008000">// Add a red line from the center out</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
PdfPath path = <span style="color: #0000ff">new</span> PdfPath(PdfColorFactory.FromColor(Color.Red), 8);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
path.MoveTo(288, 400);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
path.LineTo(500, 500);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
page.DrawingList.Add(path);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
Donut donut = <span style="color: #0000ff">new</span> Donut(<span style="color: #0000ff">new</span> PdfPoint(288, 400), 18, 100);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
page.DrawingList.Add(donut);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
doc.Save(&quot;<span style="color: #8b0000">donut.pdf</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	<a href="http://atalasoft.com/CMSPages/GetFile.aspx?guid=a9930844-bd77-468e-9657-2702c44928df"><img alt="image" border="0" height="309" src="http://atalasoft.com/CMSPages/GetFile.aspx?guid=f8afdbe9-ca3b-4e08-86ff-487eda610711" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" width="238" /></a></p>
<p>
	The problem is clear &ndash; the inner circle is being painted white.&nbsp; This will cover up anything under it.&nbsp; In fact, we depend on that to cover up the brown donut.&nbsp; The solution is to change our approach.&nbsp; Instead of using two PdfCircle shapes, we&rsquo;re going to use one PdfPath shape to represent both circles.&nbsp; A path is a collection of operations that include move, draw line, draw Bezier curve, close the path.&nbsp; The really cool thing is that a path can contain any number of possibly disjoint subpaths, so two circles are easy.&nbsp; To start off with, we need a routine that give a PdfPath shape will add in a circle composed of Bezier curves.&nbsp; To do this, I&rsquo;ll break this out into a new method.&nbsp; The code presented here is based on <a href="http://www.tinaja.com/glib/ellipse4.pdf">an article</a> by Don Lancaster.&nbsp; If you want to learn a great deal about the math behind Bezier curves, <a href="http://www.tinaja.com/cubic01.asp">this is a great place to start</a>.</p>
<pre>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">void</span> DrawShape(Atalasoft.PdfDoc.Generating.Rendering.PdfPageRenderer r)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    PdfPath path = <span style="color: #0000ff">new</span> PdfPath(OutlineColor, Style.Width, FillColor);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    MakeCircle(path, OuterRadius, Center);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    MakeCircle(path, InnerRadius, Center);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    path.Render(r);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
<span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> PdfPath MakeCircle(PdfPath path, <span style="color: #0000ff">double</span> radius, PdfPoint center)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">double</span> magic = 0.551784 * radius;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    path.MoveTo(<span style="color: #0000ff">new</span> PdfPoint(-radius, 0) + center);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    path.CurveTo(<span style="color: #0000ff">new</span> PdfPoint(-radius, magic) + center, <span style="color: #0000ff">new</span> PdfPoint(-magic, radius) + center, <span style="color: #0000ff">new</span> PdfPoint(0, radius) + center);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    path.CurveTo(<span style="color: #0000ff">new</span> PdfPoint(magic, radius) + center, <span style="color: #0000ff">new</span> PdfPoint(radius, magic) + center, <span style="color: #0000ff">new</span> PdfPoint(radius, 0) + center);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    path.CurveTo(<span style="color: #0000ff">new</span> PdfPoint(radius, -magic) + center, <span style="color: #0000ff">new</span> PdfPoint(magic, -radius) + center, <span style="color: #0000ff">new</span> PdfPoint(0, -radius) + center);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    path.CurveTo(<span style="color: #0000ff">new</span> PdfPoint(-magic, -radius) + center, <span style="color: #0000ff">new</span> PdfPoint(-radius, -magic) + center, <span style="color: #0000ff">new</span> PdfPoint(-radius, 0) + center);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
    <span style="color: #0000ff">return</span> path;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
}
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
</pre>
<p>
	<a href="http://atalasoft.com/CMSPages/GetFile.aspx?guid=baeda093-fda3-4fe9-aa34-04760bf3887a"><img alt="image" border="0" height="306" src="http://atalasoft.com/CMSPages/GetFile.aspx?guid=aac847c0-7513-46f6-bb17-5e84a89a8080" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" width="237" /></a></p>
<p>
	&nbsp;</p>
<p>
	And, tada, here is our shape.&nbsp; The question is, why isn&rsquo;t the donut hole filled?&nbsp; The answer is that PDF has two different ways to fill paths.&nbsp; The first is called the Even-Odd Rule.&nbsp; The PDF renderer figures out how many lines have been crossed as it goes left to right.&nbsp; If the number is odd, it fills.&nbsp; If the number is even it doesn&rsquo;t.&nbsp; This is the default method for filling.&nbsp; The other method is called the Non-Zero Winding Rule.&nbsp; It is more complicate and has to do with the direction that lines are drawn as they cross the scanline being filled.&nbsp; Lines that cross bottom to top add 1 to the winding number.&nbsp; Lines that cross top to bottom take one away.&nbsp; If the winding number is non-zero, the scanline gets filled.&nbsp; If this circle had been filled with NZW, the center would be brown and cover up the red line.</p>
<p>
	As a final best practice rule for making reusable shapes: make shapes as generic as possible and put them into their own assembly away from the rest of your application.&nbsp; This will make it easier to reuse the shape in other projects and will make it more easier to reload the PDF in DotPdf for further editing.</p>
]]></description>
     <pubDate>Mon, 23 Jan 2012 12:20:33 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/making-your-own-shapes]]></link>
     <dc:creator> SteveHawley</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/billbither/january-2012/looking-back-at-atalasoft]]></guid>
     <title><![CDATA[Looking Back at Atalasoft]]></title>
     <description><![CDATA[<p>
	Since we are moving to a new blogging platform (and not moving the posts over) I thought it was a good opportunity to reflect back at some blog posts I&rsquo;ve written since I started blogging about 7 years ago during the early years of Atalasoft. Even as the author, it&rsquo;s interesting to read about our progress and my take on it. Please Enjoy!</p>
<p>
	<strong><u>2006</u></strong></p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2006/01/19/9645.aspx">Venture Funding vs. Bootstrapping</a><br />
	On of my first blog posts about why not to take VC. As you might imagine, I&rsquo;m pretty happy that we didn&rsquo;t take on outside investment.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2006/01/01/9642.aspx">Inception of a Company Name</a><br />
	This is how the name Atalasoft came to be. It goes into more detail than I give when people ask me in-person, and some helpful tips if you&rsquo;re thinking about a brand name yourself.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2006/04/14/9940.aspx">New Office &ndash; One Week to Go!</a><br />
	We started with a lot of room to grow. Now we completely fill the space! My office window still has a <a href="http://www.billbither.com/cs/blogs/billbither/archive/2006/10/10/10968.aspx">great view of Mt Tom</a>.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2006/09/08/from-nothing-to-something.aspx">From Nothing to Something</a><br />
	Talks about how I started Atalasoft. Whoa, my kids are bigger now.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2006/11/27/11130.aspx">The AJAX Craze: History of AJAX Imaging at Atalasoft</a><br />
	Yup, we knew zero-footprint imaging was the future back in 2006 and already had a couple years on the competition. Now we can call it the HTML Viewer because people expect rich client apps from HTML.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2006/12/11/starting-a-software-company-outside-a-startup-hub.aspx">Starting a Company Outside a Startup Hub</a><br />
	Relates to my experience starting Atalasoft outside of San Francisco, Boston, or New York.</p>
<p>
	<strong><u>2007</u></strong></p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2007/03/13/leveraging-emerging-technology-as-a-foundation-for-your-startup-software-company.aspx">Leveraging Emerging Technology as a Foundation for your Software Startup</a><br />
	Written 5-years ago, but still relevant today.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2007/08/11/financial-stability-of-a-bootstrapper.aspx">Financial Stability of a Bootstrapper</a><br />
	More info about how I started Atalasoft and financed it&rsquo;s growth organically.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2007/11/13/9-concepts-high-tech-ceo-s-should-know-about-software-development.aspx">9 Concepts High-Tech CEO&rsquo;s Should Know about Software Development</a><br />
	Turns out I know a thing or two about that. Still relevant.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2007/11/13/9-concepts-high-tech-ceo-s-should-know-about-software-development.aspx">Atalasoft Inc. &ndash; 5 Years Old</a><br />
	Never would have guessed that Atalasoft would be a Kofax Company at 10-years!</p>
<p>
	<strong><u>2008</u></strong></p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2008/11/15/the-case-for-zero-footprint-document-viewing.aspx">The Case for Zero-Footprint Document Viewing</a><br />
	I would say we called that one and more people understand now</p>
<p>
	<strong><u>2011</u></strong></p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2011/01/29/reflection-on-growing-atalasoft-in-2010.aspx">A Reflection on Growing Atalasoft in 2010</a><br />
	Title speaks for itself. The growth led to the successful acquisition later in 2010.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2011/05/20/the-big-deal-kofax-to-acquire-us.aspx">The Big Deal &ndash; Kofax to Acquire us!</a><br />
	Phew! That took a LOT of work.</p>
<p>
	<a href="http://www.billbither.com/cs/blogs/billbither/archive/2011/11/14/html5-and-the-end-of-the-line-for-flash-and-silverlight.aspx">HTML and the end of the line for Flash and Silverlight</a><br />
	My prediction on the future of Rich Internet Application development, and why we won by investing heavily in HTML.</p>
]]></description>
     <pubDate>Thu, 19 Jan 2012 16:47:52 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/billbither/january-2012/looking-back-at-atalasoft]]></link>
     <dc:creator> BillBither</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/spikemclarty/january-2012/welcome-to-new-england!]]></guid>
     <title><![CDATA[Welcome to New England!]]></title>
     <description><![CDATA[<p>
	Hi, my name is Spike McLarty, and I&rsquo;m a Senior Software Architect here at Atalasoft.&nbsp; I joined the company in January 2010 after running my own one-man company for a decade or so, out on the Left Coast on an island near Seattle.&nbsp; While I have a fair amount of experience across the spectrum of nuts-and-bolts image processing, my particular specialties are some of the old-school technologies: The TWAIN scanning API, imaging file formats like TIFF, GIF, JPEG, PNG and PDF, C and C++ coding, the native Win32 API, COM and ActiveX.&nbsp; When I&rsquo;m not working on scanning and image processing, I study cognitive psychology and linguistics from a computer-modeling perspective.</p>
<p>
	I plan to blog a mix of practical coding tips (the classic &ldquo;don&rsquo;t let this thing that just bit me bite you&rdquo;), speculation about how this or that problem could be solved with computers and software, and accounts of the small epiphanies I have every now and then while studying linguistics and cognitive psychology.</p>
]]></description>
     <pubDate>Thu, 19 Jan 2012 11:26:53 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/spikemclarty/january-2012/welcome-to-new-england!]]></link>
     <dc:creator> SpikeMcLarty</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/stevehawley/january-2012/please-don’t-mind-the-dust]]></guid>
     <title><![CDATA[Please Don’t Mind the Dust]]></title>
     <description><![CDATA[<p>
	Atalasoft is moving the blogs to new hosting software.&nbsp; In the meantime, here are a few favorites of mine from the past:</p>
<p>
	&nbsp;</p>
<ul>
	<li>
		<a href="http://atalasoft.com/cs/blogs/stevehawley/archive/2009/03/25/14-things-every-software-engineer-should-know.aspx">14 Things Every Software Engineer Should Know</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/stevehawley/archive/2010/08/03/protect-yourself.aspx">Protect Yourself</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/stevehawley/archive/2010/07/08/why-software-has-bugs.aspx">Why Software Has Bugs</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/stevehawley/archive/2006/03/03/9632.aspx">Robotron and OOP</a></li>
</ul>
]]></description>
     <pubDate>Thu, 19 Jan 2012 10:52:58 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/stevehawley/january-2012/please-don’t-mind-the-dust]]></link>
     <dc:creator> SteveHawley</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/insertqualityhere/january-2012/review-redux]]></guid>
     <title><![CDATA[Review & Redux]]></title>
     <description><![CDATA[<p>
	&hellip;Well, it certainly has been a long time since I last wrote something for this blog, but since a new CMS system is setup that should change.&nbsp; Anyway, new CMS.&nbsp; A new year.&nbsp; More posts?&nbsp; That&rsquo;s the plan.&nbsp;<br />
	<br />
	Up and coming: Reaction to the first class of Probabilistic Graphical Models.&nbsp;<br />
	<br />
	For now, some blasts form the past:<br />
	-<a href="http://www.atalasoft.com/cs/blogs/insertqualityhere/archive/2009/10/22/the-six-pillars-of-mpi.aspx">The Six Pillars of MPI</a><br />
	-<a href="http://www.atalasoft.com/cs/blogs/insertqualityhere/archive/2009/08/26/go-on-go-get-all-static-y.aspx">Go on.&nbsp; Go get all staticy</a> - A discussion about static analysis tools<br />
	-<a href="http://www.atalasoft.com/cs/blogs/insertqualityhere/archive/2008/12/04/web-testing-frameworks-compared.aspx">Web Testing Frameworks Compared</a><br />
	-<a href="http://www.atalasoft.com/cs/blogs/insertqualityhere/archive/2008/04/30/crap4j-port-to-net-part-ii.aspx">CRAP4j port to .Net -- Part II:&nbsp; Computing Cyclomatic Complexity</a></p>
]]></description>
     <pubDate>Thu, 19 Jan 2012 10:52:04 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/insertqualityhere/january-2012/review-redux]]></link>
     <dc:creator> InsertQualityHere</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/kenwalpurgis/january-2012/good-day!]]></guid>
     <title><![CDATA[Good Day!]]></title>
     <description><![CDATA[<p>
	Short introduction here.</p>
<p>
	I am a developer at Atalasoft, my main focus for the last couple of years has been building up our internal systems to do our day to day processing(website/Salesforce). I always seem to have my hands in way to many things and never have enough time to reflect on things I have done.&nbsp; I am hoping to build up a collection of examples that will remind me of all the small things I have done throughout the days/weeks/months.&nbsp; Too many times I do something and think &ldquo;wow, that is really cool&rdquo;, only to have it be locked away in some source control system.&nbsp; Today, that ends.</p>
]]></description>
     <pubDate>Wed, 18 Jan 2012 08:29:03 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/kenwalpurgis/january-2012/good-day!]]></link>
     <dc:creator> KenWalpurgis</dc:creator>
</item>
<item>
     <guid isPermaLink="true"><![CDATA[http://www.atalasoft.com/blogs/loufranco/january-2012/re-introducing-my-blog-on-atalasoft-com]]></guid>
     <title><![CDATA[Re-introducing my blog on Atalasoft.com]]></title>
     <description><![CDATA[<p>
	We&rsquo;re changing our blog hosting on Atalasoft.com, so new posts will now be here where your reading this post.&nbsp; If you want to read my old posts, go to <a href="http://atalasoft.com/cs/blogs/loufranco/archive/2011/12/29/atalasoft-blogs-2011-retrospective.aspx">Lou Franco&rsquo;s Legacy Atalasoft Blog</a>. Here are some of my favorites over the years, covering the four topics I write about most.</p>
<p>
	<strong>Software Business</strong></p>
<ul>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2008/10/21/microsoft-s-five-year-plan-for-sharepoint.aspx">Predicting Microsoft&rsquo;s next move</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2009/05/15/25-ways-to-make-content-more-findable.aspx">25 ways to make content more findable</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2009/08/31/if-google-can-t-make-a-great-mobile-web-app-can-anyone.aspx">Google can&rsquo;t make mobile web apps as good as native</a>, so can anyone?</li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2011/11/30/making-an-sdk-better-at-its-job.aspx">Making an SDK better at its job</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2011/11/09/usefulness-as-a-pretense-for-data-collection.aspx">Usefulness as a pretense for data collection</a></li>
	<li>
		Movie Reviews from a software business perspective
		<ul>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2009/05/11/star-trek-review-from-an-ecm-perspective.aspx">Star Trek</a></li>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2010/07/08/twilight-eclipse-from-a-social-media-perspective.aspx">Twilight: Eclipse</a></li>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2010/08/06/inception-movie-review-from-a-data-security-perspective.aspx">Inception</a></li>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2011/11/18/extending-the-social-media-metaphor-in-twilight-breaking-dawn.aspx">Twilight: Breaking Dawn</a></li>
		</ul>
	</li>
</ul>
<p>
	<strong>Tech job seeking</strong></p>
<ul>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2007/05/08/interviewing-tip-prepare.aspx">Prepare for Interviews</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2009/04/22/please-read-if-you-are-interviewing-at-atalasoft.aspx">Advice for interviewing at Atalasoft</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2010/05/25/you-don-t-need-anyone-s-permission-to-get-work-experience-in-software.aspx">You don&rsquo;t need permission to get software development experience</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2011/06/14/towards-a-portfolio-based-interview-process-for-programmers.aspx">Portfolio based interviewing for developers</a></li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2011/10/14/you-re-going-to-need-more-than-a-resum.aspx">You need more than a resumé</a></li>
</ul>
<p>
	<strong>Technical </strong></p>
<ul>
	<li>
		This post will help you <a href="http://atalasoft.com/cs/blogs/loufranco/archive/2007/02/06/6-_2200_Pointers_2200_-on-Debugging-Unmanaged-Code.aspx">debug memory munging bugs on Windows</a>.</li>
	<li>
		Here&rsquo;s some technical advice on storing images in Databases
		<ul>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2007/12/03/images-in-databases-part-i-what-to-store.aspx">Part I</a></li>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2007/12/04/images-in-databases-part-ii-web-images-are-random-access.aspx">Part II</a></li>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2009/04/28/document-storage-database-blobs-or-the-filesystem.aspx">Some follow up years later</a></li>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2009/10/26/more-on-images-in-databases.aspx">More follow up</a></li>
		</ul>
	</li>
	<li>
		Here&rsquo;s some code for generating <a href="http://atalasoft.com/cs/blogs/loufranco/archive/2008/04/25/writing-code-39-barcodes-with-javascript.aspx">Code 39 Barcodes in JavaScript</a></li>
	<li>
		Here&rsquo;s <a href="http://atalasoft.com/cs/blogs/loufranco/archive/2008/04/01/loading-office-documents-in-net.aspx">.NET code for converting Word to PDF</a> (by scripting Word to do it)</li>
	<li>
		<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2010/06/21/learning-80-s-style-programming-today.aspx">Learn 80&rsquo;s style programming today</a><!--EndFragment--></li>
	<!--EndFragment-->
</ul>
<p>
	<strong>Presenting</strong></p>
<ul>
	<li>
		If you want to know how to <a href="http://atalasoft.com/cs/blogs/loufranco/archive/2007/03/23/6-Ways-to-Mess-Up-Your-Next-Tech-Presentation.aspx">mess up a technical presentation</a>, look no further.</li>
	<li>
		I did a lightning talk at Business of Software in 2008, here&rsquo;s advice if you have to give one
		<ul>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2008/07/11/giving-a-pecha-kucha-at-the-business-of-software.aspx">Some background</a></li>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2008/07/30/preparing-a-pecha-kucha-part-i.aspx">Part I</a> of my tips</li>
			<li>
				<a href="http://atalasoft.com/cs/blogs/loufranco/archive/2008/07/31/preparing-a-pecha-kucha-part-ii-reading-a-script-sounds-like-reading.aspx">Part II</a> of my tips</li>
			<li>
				<a href="http://www.slideshare.net/loumf/engineering-the-evaluation-funnel-pecha-kucha-presentation">My presentation on SlideShare</a></li>
		</ul>
	</li>
	<!--EndFragment-->
</ul>
]]></description>
     <pubDate>Fri, 13 Jan 2012 07:59:35 GMT</pubDate>
     <link><![CDATA[http://www.atalasoft.com/blogs/loufranco/january-2012/re-introducing-my-blog-on-atalasoft-com]]></link>
     <dc:creator> LouFranco</dc:creator>
</item></channel>
</rss>

