<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jords</title>
	<atom:link href="http://thoms.net.nz/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://thoms.net.nz/blog</link>
	<description></description>
	<lastBuildDate>Sat, 08 Oct 2011 22:51:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>RTL8168 under linux</title>
		<link>http://thoms.net.nz/blog/2011/10/rtl8168-under-linux/</link>
		<comments>http://thoms.net.nz/blog/2011/10/rtl8168-under-linux/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 22:51:29 +0000</pubDate>
		<dc:creator>Jordan Thoms</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thoms.net.nz/blog/?p=207</guid>
		<description><![CDATA[Had some trouble with the network adapter in my new Gigabyte GA-Z68XP-UD3R motherboard under linux (Ubuntu 11.04) &#8211; it would stop working periodically and then start again, and the speeds were very slow &#8211; only around 300KB/s over my local network. LSPCI output for the card is: 08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B [...]]]></description>
			<content:encoded><![CDATA[<p>Had some trouble with the network adapter in my new Gigabyte GA-Z68XP-UD3R motherboard under linux (Ubuntu 11.04) &#8211; it would stop working periodically and then start again, and the speeds were very slow &#8211; only around 300KB/s over my local network.</p>
<p>LSPCI output for the card is: 08:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06) . However, ubuntu was using the r8169 driver, rather than 8168.</p>
<p>This seems to have been resolved by downloading the drivers from <a href="http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&amp;PNid=13&amp;PFid=5&amp;Level=5&amp;Conn=4&amp;DownTypeID=3&amp;GetDown=false#2 ">here </a>, unpacking, and then running the contained autorun.sh as root. This loaded the r8168 driver ,and the performance is now as you would expect and the dropouts seem to have gone away.</p>
<p>Couldn&#8217;t find much recent information on how to get this chipset running under linux, so thought I would post this information up.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoms.net.nz/blog/2011/10/rtl8168-under-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo/Dijit &#8211; Pages load blank in chrome, show on resize</title>
		<link>http://thoms.net.nz/blog/2011/02/dojodijit-pages-load-blank-in-chrome-show-on-resize/</link>
		<comments>http://thoms.net.nz/blog/2011/02/dojodijit-pages-load-blank-in-chrome-show-on-resize/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 23:42:32 +0000</pubDate>
		<dc:creator>Jordan Thoms</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.shadowservices.biz/blog/?p=182</guid>
		<description><![CDATA[I had a problem recently where my dijit layouts would sometimes load as a blank page in chrome &#8211; but they would show if the browser window was resized. The pages worked fine in firefox. Someone on IRC pointed out the solution: Move all the style tags  to be a little way ahead of the [...]]]></description>
			<content:encoded><![CDATA[<p>I had a problem recently where my dijit layouts would sometimes load as a blank page in chrome &#8211; but they would show if the browser window was resized. The pages worked fine in firefox.</p>
<p>Someone on IRC pointed out the solution: Move all the style tags  to be a little way ahead of the script tags in &lt;head&gt; &#8211; apparently there is some race condition with chrome.</p>
<p>Hopefully this helps someone &#8211; Certainly wouldn&#8217;t have thought to try that!</p>
]]></content:encoded>
			<wfw:commentRss>http://thoms.net.nz/blog/2011/02/dojodijit-pages-load-blank-in-chrome-show-on-resize/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dojo &#8211; Hiding disabled times for the TimeTextBox/TimePicker</title>
		<link>http://thoms.net.nz/blog/2010/10/dojo-hiding-disabled-times-for-the-timetextboxtimepicker/</link>
		<comments>http://thoms.net.nz/blog/2010/10/dojo-hiding-disabled-times-for-the-timetextboxtimepicker/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 05:31:23 +0000</pubDate>
		<dc:creator>Jordan Thoms</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.shadowservices.biz/blog/?p=174</guid>
		<description><![CDATA[I had an issue recently where I had a dojo time picker and wanted to restrict the available times. The obvious solution was to set the constraints on the time text box with: &#60;input id="from-time" name="from-time" /&#62; , however this still allows you to scroll to the disabled times, you just cannot select them. After [...]]]></description>
			<content:encoded><![CDATA[<p>I had an issue recently where I had a dojo time picker and wanted to restrict the available times.</p>
<p>The obvious solution was to set the constraints on the time text box with: <code>&lt;input id="from-time" name="from-time" /&gt;</code> , however this still allows you to scroll to the disabled times, you just cannot select them.</p>
<p>After some playing I came to this javascript code, which sets up a new time picker called my._TimePicker . This TimePicker just scrolls right from the upper allowed end to the lower end, and does not show the times in between.<br />
The code is:</p>
<pre class="brush: jscript; title: ; notranslate">
 dojo.declare(&quot;my._TimePicker&quot;,dijit._TimePicker,{
     // extend the default show() method
		_getFilteredNodes: function(/*number*/ start, /*number*/ maxNum, /*Boolean*/ before){
			// summary:
			//		Returns an array of nodes with the filter applied.  At most maxNum nodes
			//		will be returned - but fewer may be returned as well.  If the
			//		before parameter is set to true, then it will return the elements
			//		before the given index
			// tags:
			//		private
			var nodes = [], n, i = start, max = this._maxIncrement + Math.abs(i),
				chk = before?-1:1, dec = before?1:0, inc = before?0:1;
			do{
				i = i - dec;
				var date = new Date(this._refDate);
				var incrementDate = this._clickableIncrementDate;
				date.setHours(date.getHours() + incrementDate.getHours() * i,
					date.getMinutes() + incrementDate.getMinutes() * i,
					date.getSeconds() + incrementDate.getSeconds() * i);
				if(!this.isDisabledDate(date)) {
					n = this._createOption(i);
					if(n){nodes.push(n);}
				}
				i = i + inc;
			}while(nodes.length &lt; maxNum &amp;&amp; (i*chk) &lt; max);
			if(before){ nodes.reverse(); }
			return nodes;
		}

});
</pre>
<p>This is a bit messy since most of this code is duplicated from the _getFilteredNodes in dijit._TimePicker, with a little extra code taken from the _getOption method. But, it works!</p>
<p>This doesn&#8217;t affect every TimeTextBox on the page; to use it for a particular text box, use something like:</p>
<pre class="brush: jscript; title: ; notranslate">
dojo.addOnLoad(function() {
	dijit.byId(&quot;from-time&quot;).popupClass = &quot;my._TimePicker&quot;;
});
</pre>
<p>Hopefully this is useful for somebody!</p>
]]></content:encoded>
			<wfw:commentRss>http://thoms.net.nz/blog/2010/10/dojo-hiding-disabled-times-for-the-timetextboxtimepicker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rpn Calculator</title>
		<link>http://thoms.net.nz/blog/2009/10/rpn-calculator/</link>
		<comments>http://thoms.net.nz/blog/2009/10/rpn-calculator/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 08:09:10 +0000</pubDate>
		<dc:creator>Jordan Thoms</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[hp]]></category>
		<category><![CDATA[rpn]]></category>

		<guid isPermaLink="false">http://www.shadowservices.biz/blog/?p=152</guid>
		<description><![CDATA[This is a reverse polish notation (ie stack-based) calculator program written in ANSI C. It uses a dynamically allocated stack, so it can hold any amount of data in the stack up to the memory limits of the computer you are running on. It is currently using double-precision floating point operations although I might write [...]]]></description>
			<content:encoded><![CDATA[<p>This is a reverse polish notation (ie stack-based) calculator program written in ANSI C. It uses a dynamically allocated stack, so it can hold any amount of data in the stack up to the memory limits of the computer you are running on. It is currently using double-precision floating point operations although I might write a version using GMP (GNU multi-precision library) instead which will be much more accurate.</p>
<p><span id="more-152"></span></p>
<p><strong>Overview:</strong></p>
<p>The source code is split up into several files &#8211; here is a description of the functionality handled by each of these files:</p>
<p>rpn.h &#8211; Header file with function prototypes  and a  few #DEFINES.</p>
<p>main.c &#8211; Contains the main loop, which reads input from the keyboard, does the requested operation, and then loops.</p>
<p>stack.c &#8211; This is my implementation of a LIFO (last-in-first-out) stack. It provides functions for pushing data onto the stack and poping data off it. It also handles  growing, shrinking, printing and duplicating  the stack. Internally the stack is represented by a dynamically allocated array, and a stack pointer to store the current size of the stack.</p>
<p>getop.c &#8211; This file contains the getop() function, which reads data from the keyboard, and interprets it. It is called from the main loop.</p>
<p>inputbuf.c &#8211; This file handles input buffering. Since this program will use the getche() function if available to read unbuffered input from the keyboard (so operations happen immediately without needing to push enter), we need to provide our own input buffer for situations where a operator is entered as the terminating character for a entered number.</p>
<p>help.c &#8211; This function provides a function to print the help for the program.</p>
<p>util.c &#8211; A few miscellaneous functions &#8211; clear() for clearing the screen,  radToDegrees() and degreesToRad() for converting angles.</p>
<p>This program provides access to much of the standard libraries&#8217; math functions, like sin, cos, tan and sqrt. </p>
<p>The biggest challenge in writing this was in the input handling.  I wanted operations to happen immediately as on my Hp 50g, rather than having to be typed and then enter pushed to get the calculator to read the input. This is not provided for by the ANSI standard, so my program currently detects if it is being compiled on windows, and if it is, uses the getche() function which does allow for unbuffered input. Also handling multiple character function names was tricky, since when the user types the first letter of, say &#8216;sin&#8217; you don&#8217;t know weather they meant to swap the elements on the stack, or are wanting to do the sine function. So, all multiple-character functions must be entered starting with a exclamation mark.</p>
<p>Another thing not provided for in the ANSI standard is clearing the screen &#8211; so I have written a  clear() command which tries to clear the screen by running the cls or clear commands through system(). This will work for windows and unix platforms, which is fairly comprehensive but not ideal.</p>
<p><strong>Screenshot:</strong><br />
<a href="http://www.shadowservices.biz/blog/wp-content/uploads/2009/10/rpn.jpg"><img src="http://www.shadowservices.biz/blog/wp-content/uploads/2009/10/rpn.jpg" alt="Reverse Polish notation screenshot" title="Reverse Polish notation screenshot" width="677" height="594" class="alignnone size-full wp-image-163" /></a></p>
<p><strong>Documentation: </strong></p>
<blockquote><p>Operators: +, &#8211; , * , /<br />
% &#8211; Modulus. Works on floating points.<br />
Enter &#8211; duplicate item at bottom of stack<br />
n &#8211; Make number on bottom of stack negative<br />
b or backspace &#8211; Remove number on bottom of stack<br />
c &#8211; Clear stack<br />
w &#8211; Print current  size of stack array<br />
s &#8211; Swap bottom 2 elements<br />
Math Functions:<br />
!sin &#8211; Sine (Radians)<br />
!cos &#8211; Cosine (Radians)<br />
!tan &#8211; Tangent (Radians)<br />
Add an a to the beginning of trigonometric function for the inverse.<br />
Add an d to the end to do a trigonometric function in degrees.<br />
^ &#8211; Power function.<br />
sqrt &#8211; Square Root.<br />
!! &#8211; Factorial.<br />
q &#8211; Quit</p></blockquote>
<p><strong>Abridged source code: (the dotted lines are where repetitive code has been removed)</strong><br />
main.c:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;rpn.h&quot;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> type<span style="color: #339933;">;</span>
	<span style="color: #993333;">double</span> op1<span style="color: #339933;">;</span>
	<span style="color: #993333;">double</span> op2<span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> s<span style="color: #009900;">&#91;</span>MAXOP<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	allocateStack<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Type h and press enter for help.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>type<span style="color: #339933;">=</span> getop<span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>type<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">case</span> NUMBER<span style="color: #339933;">:</span>
				push <span style="color: #009900;">&#40;</span>atof<span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> FUNCTION<span style="color: #339933;">:</span>
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>strcmp<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;sin&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					push<span style="color: #009900;">&#40;</span>sin<span style="color: #009900;">&#40;</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>strcmp<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;cos&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					push<span style="color: #009900;">&#40;</span>cos<span style="color: #009900;">&#40;</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>strcmp<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;tan&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					push<span style="color: #009900;">&#40;</span>tan<span style="color: #009900;">&#40;</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			        ..............................
				<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>strcmp<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;!&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					op1 <span style="color: #339933;">=</span> floor<span style="color: #009900;">&#40;</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>op2<span style="color: #339933;">=</span>op1<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> op2<span style="color: #339933;">&gt;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> op2<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						op1 <span style="color: #339933;">=</span> op1 <span style="color: #339933;">*</span> op2<span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
					push<span style="color: #009900;">&#40;</span>op1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'+'</span><span style="color: #339933;">:</span>
				push<span style="color: #009900;">&#40;</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'*'</span><span style="color: #339933;">:</span>
				push<span style="color: #009900;">&#40;</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'-'</span><span style="color: #339933;">:</span>
				op2 <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				push<span style="color: #009900;">&#40;</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> op2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'^'</span><span style="color: #339933;">:</span>
				op1 <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				op2 <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				push<span style="color: #009900;">&#40;</span>pow<span style="color: #009900;">&#40;</span>op2<span style="color: #339933;">,</span>op1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'/'</span><span style="color: #339933;">:</span>
				op2<span style="color: #339933;">=</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>op2 <span style="color: #339933;">!=</span> <span style="color:#800080;">0.0</span><span style="color: #009900;">&#41;</span>
					push<span style="color: #009900;">&#40;</span>pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>op2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">else</span>
					<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Zero devisor error, yo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'n'</span><span style="color: #339933;">:</span>
				push<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span> <span style="color: #339933;">-</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'b'</span><span style="color: #339933;">:</span>
				pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'%'</span><span style="color: #339933;">:</span>
				op1 <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				op2 <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				push<span style="color: #009900;">&#40;</span>op2<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>op2<span style="color: #339933;">/</span> op1<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>op1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">' '</span><span style="color: #339933;">:</span>
				dup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'q'</span><span style="color: #339933;">:</span>
				exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'s'</span><span style="color: #339933;">:</span>
				<span style="color: #666666; font-style: italic;">//Swap first 2 elements</span>
				op1 <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				op2 <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				push<span style="color: #009900;">&#40;</span>op1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				push<span style="color: #009900;">&#40;</span>op2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'w'</span><span style="color: #339933;">:</span>
				<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Stack Size: %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> getStackSize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'c'</span><span style="color: #339933;">:</span>
				clearStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				printStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'f'</span><span style="color: #339933;">:</span>
				setClear<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'g'</span><span style="color: #339933;">:</span>
				setClear<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'h'</span><span style="color: #339933;">:</span>
				printHelp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
				<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;unknown command %s.&quot;</span><span style="color: #339933;">,</span> s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>stack.c:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;rpn.h&quot;</span>
<span style="color: #993333;">void</span> freeStack<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> stackPosition <span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> stackSize <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">double</span><span style="color: #339933;">*</span> stack<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> doClear <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> print <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> allocateStack<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> size<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">double</span><span style="color: #339933;">*</span> stacknew<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>stackSize <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">//We are allocating the initial stack.</span>
			stacknew <span style="color: #339933;">=</span> malloc<span style="color: #009900;">&#40;</span>size <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//We are growing/shrinking the stack</span>
		stacknew <span style="color: #339933;">=</span> realloc<span style="color: #009900;">&#40;</span>stack<span style="color: #339933;">,</span> size <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>stackPosition <span style="color: #339933;">&gt;</span> size<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			stackPosition <span style="color: #339933;">=</span> size<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>stacknew <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>stackSize <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			free<span style="color: #009900;">&#40;</span>stack<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Error: Could not allocate memory for stack of size %d&quot;</span><span style="color: #339933;">,</span>size<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//Memory allocation succeded</span>
		stack <span style="color: #339933;">=</span> stacknew<span style="color: #339933;">;</span>
		stackSize <span style="color: #339933;">=</span> size<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #808080; font-style: italic;">/* push value onto stack */</span>
<span style="color: #993333;">void</span> push<span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> newValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>stackPosition  <span style="color: #339933;">&lt;</span> stackSize<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
                  stack<span style="color: #009900;">&#91;</span>stackPosition<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> newValue<span style="color: #339933;">;</span> 
	<span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> 
                  allocateStack<span style="color: #009900;">&#40;</span>stackSize<span style="color: #339933;">+</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                  stack<span style="color: #009900;">&#91;</span>stackPosition<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> newValue<span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">double</span> pop<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 	<span style="color: #993333;">double</span> value<span style="color: #339933;">;</span> 	
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>stackPosition  <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">// If there is data on the stack.</span>
		stackPosition<span style="color: #339933;">--;</span>
		value <span style="color: #339933;">=</span> stack<span style="color: #009900;">&#91;</span>stackPosition<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		freeStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> value<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;error : pop() called, but stack empty&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> dup<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>stackPosition <span style="color: #339933;">&gt;</span>  <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #666666; font-style: italic;">// If there is data on the stack.</span>
		push<span style="color: #009900;">&#40;</span>stack<span style="color: #009900;">&#91;</span>stackPosition<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> clearStack<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	stackPosition <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	freeStack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">int</span> getStackSize<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> stackSize<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> setClear<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> newDoClear<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	doClear <span style="color: #339933;">=</span> newDoClear<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> setPrint<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> newPrint<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	print <span style="color: #339933;">=</span> newPrint<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> freeStack<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>stackSize <span style="color: #339933;">-</span> stackPosition<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">15</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//Reduce the size of the stack to free some memory.</span>
		allocateStack<span style="color: #009900;">&#40;</span>stackPosition<span style="color: #339933;">+</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> printStack<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> i<span style="color: #339933;">,</span>position<span style="color: #339933;">=</span>stackPosition<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>doClear<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		clear<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>print<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i</pre></div></div>

<p>getop.c:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;rpn.h&quot;</span>
<span style="color: #993333;">int</span> getop<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> s<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>c<span style="color: #339933;">,</span>d<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> c <span style="color: #339933;">=</span> getchb<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #ff0000;">' '</span> <span style="color: #339933;">||</span> c <span style="color: #339933;">==</span><span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\t</span>'</span><span style="color: #009900;">&#41;</span>
		<span style="color: #339933;">;</span>
	s<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>isdigit<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> c <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'.'</span> <span style="color: #339933;">&amp;&amp;</span> c <span style="color: #339933;">!=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">&amp;&amp;</span> c <span style="color: #339933;">!=</span> <span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>c <span style="color: #339933;">==</span> <span style="color: #0000dd;">33</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			i<span style="color: #339933;">=-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> d <span style="color: #339933;">=</span>  getchb<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>d <span style="color: #339933;">!=</span> <span style="color: #0000dd;">13</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
				<span style="color: #339933;">;</span>
			ungetchb<span style="color: #009900;">&#40;</span>d<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			s<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">return</span> FUNCTION<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">return</span> c<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>c <span style="color: #339933;">==</span> <span style="color: #0000dd;">13</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #ff0000;">' '</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>c <span style="color: #339933;">==</span> <span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #ff0000;">'b'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>isdigit<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>isdigit<span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> c <span style="color: #339933;">=</span> getchb<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>c <span style="color: #339933;">==</span> <span style="color: #ff0000;">'.'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>isdigit<span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> c <span style="color: #339933;">=</span> getchb<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	s<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		ungetchb<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> NUMBER<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>inputbuf.c:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;rpn.h&quot;</span>
<span style="color: #666666; font-style: italic;">// If using the VC++ compiler, use unbuffered input. Otherwise, use normal buffered input.</span>
<span style="color: #666666; font-style: italic;">// Ideally should write some ncurses code to allow for unbuffered input on unix platforms.</span>
<span style="color: #339933;">#if defined(_WIN32)</span>
   <span style="color: #666666; font-style: italic;">// Use VC++ input.</span>
	<span style="color: #339933;">#define INPUT_FUNCTION getche()</span>
<span style="color: #339933;">#else</span>
	<span style="color: #339933;">#define INPUT_FUNCTION getchar()</span>
<span style="color: #339933;">#endif</span>
<span style="color: #993333;">static</span> <span style="color: #993333;">int</span> buffer<span style="color: #009900;">&#91;</span>BUFSIZE<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">static</span> <span style="color: #993333;">int</span> bufPos<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> getchb<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>bufPos <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> buffer<span style="color: #009900;">&#91;</span><span style="color: #339933;">--</span>bufPos<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> INPUT_FUNCTION<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">void</span> ungetchb<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> input<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>bufPos <span style="color: #339933;">&lt;</span> BUFSIZE<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>input <span style="color: #339933;">!=</span> <span style="color: #0000dd;">13</span> <span style="color: #339933;">&amp;&amp;</span> input <span style="color: #339933;">!=</span> <span style="color: #0000dd;">46</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			buffer<span style="color: #009900;">&#91;</span>bufPos<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> input<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Input buffer overrun... Not cool, guys!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>util.c:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;rpn.h&quot;</span>
<span style="color: #993333;">void</span> clear<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//Clear the screen. Hopefully this works on every os, not ANSI compliant.</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;cls&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;clear&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">double</span> radToDegrees<span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> radians<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>radians<span style="color: #339933;">/</span>PI<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #0000dd;">180</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #993333;">double</span> degreesToRad<span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> degrees<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>degrees<span style="color: #339933;">/</span><span style="color: #0000dd;">180</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>PI<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Code download: I have posted a .zip file of this code along with a visual studio project that can be used to compile it <a href="http://www.shadowservices.biz/blog/wp-content/uploads/2009/10/rpncalc.zip">here</a>. If you just want to run it and your on windows, there is a binary in the Release directory that should work <img src='http://thoms.net.nz/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><strong>Acknowledgements:</strong></p>
<p>The basic idea and some of the basic code for this came from Kernigan and Ritchie 2nd edition.</p>
]]></content:encoded>
			<wfw:commentRss>http://thoms.net.nz/blog/2009/10/rpn-calculator/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

