<?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"
	>

<channel>
	<title>Storage B</title>
	<atom:link href="http://www.storage-b.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.storage-b.com</link>
	<description>James A. Chappell's technical web log</description>
	<pubDate>Tue, 11 Nov 2008 18:56:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>OpenDDS Version 1.2 Released</title>
		<link>http://www.storage-b.com/c/35</link>
		<comments>http://www.storage-b.com/c/35#comments</comments>
		<pubDate>Tue, 11 Nov 2008 18:56:55 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<category><![CDATA[DDS]]></category>

		<guid isPermaLink="false">http://www.storage-b.com/?p=35</guid>
		<description><![CDATA[
(via OpenDDS)



Java Bindings for OpenDDS
Added the ability for using multiple repositories to provide redundant service metadata management
Implemented the WaitSet, GuardCondition, and StatusCondition interfaces from the OMG DDS specification
Implemented DomainParticipant::get_current_time() from formal/07-01-01
Removed requirement for repository domain specification files
Internal service Entity identifiers have been expanded to 128 bits
dcps_ts.pl changes
DCPSInfoRepo changes
Fixed bug in DCPSInfoRepo that did not re-evaluate [...]]]></description>
			<content:encoded><![CDATA[<p>
(via <a href="http://www.opendds.org/">OpenDDS</a>)
</p>
<blockquote>
<ul>
<li>Java Bindings for OpenDDS</li>
<li>Added the ability for using multiple repositories to provide redundant service metadata management</li>
<li>Implemented the WaitSet, GuardCondition, and StatusCondition interfaces from the OMG DDS specification</li>
<li>Implemented DomainParticipant::get_current_time() from formal/07-01-01</li>
<li>Removed requirement for repository domain specification files</li>
<li>Internal service Entity identifiers have been expanded to 128 bits</li>
<li>dcps_ts.pl changes</li>
<li>DCPSInfoRepo changes</li>
<li>Fixed bug in DCPSInfoRepo that did not re-evaluate the compatibility and associations when QoS change is made</li>
<li>Fixed bugs that affected connection establishment</li>
<li>Added datalink_release_delay and removed keep_link configuration</li>
<li>Fixed a potential deadlock in reliable multicast transport</li>
</ul>
<p>
             See the <a href="http://www.opendds.org/releasenotes.html">Release Notes</a> for details.
</p>
</blockquote><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/c/35/feed</wfw:commentRss>
		</item>
		<item>
		<title>FreeVMS</title>
		<link>http://www.storage-b.com/vms/31</link>
		<comments>http://www.storage-b.com/vms/31#comments</comments>
		<pubDate>Mon, 04 Aug 2008 15:46:52 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[VMS]]></category>

		<guid isPermaLink="false">http://www.storage-b.com/?p=31</guid>
		<description><![CDATA[
Having spent a lot of time working with VMS, I have mixed feelings about FreeVMS:



Goals
The VMS (Virtual Memory System) operating system is available only on VAX, Alpha and Itanium processors, and in spite of its undeniable qualities, its future seems uncertain. The FreeVMS project tends to the coding of an operating system under the GPL [...]]]></description>
			<content:encoded><![CDATA[<p>
Having spent a lot of time working with <a href="http://en.wikipedia.org/wiki/OpenVMS">VMS</a>, I have mixed feelings about <a href="http://www.systella.fr/~bertrand/FreeVMS/indexGB.html">FreeVMS</a>:
</p>
<blockquote>
<p align="justify">
<strong>Goals</strong><br /><br />
The VMS (Virtual Memory System) operating system is available only on VAX, Alpha and Itanium processors, and in spite of its undeniable qualities, its future seems uncertain. The FreeVMS project tends to the coding of an operating system under the GPL licence according to the specifications of the VMS systems. This operating system has to function at least on I386 architecture. It is developed using the C language. 
</p>
</blockquote>
<p>
I may have to try it out&#8230;
</p><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/vms/31/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenDDS Version 1.1 Released</title>
		<link>http://www.storage-b.com/c/29</link>
		<comments>http://www.storage-b.com/c/29#comments</comments>
		<pubDate>Sat, 05 Jul 2008 16:52:36 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<category><![CDATA[DDS]]></category>

		<guid isPermaLink="false">http://www.storage-b.com/?p=29</guid>
		<description><![CDATA[
(via OpenDDS)



               More QoS features have been implemented
               dispose() notifications have been added

               [...]]]></description>
			<content:encoded><![CDATA[<p>
(via <a href="http://www.opendds.org/">OpenDDS</a>)
</p>
<blockquote>
<ul>
               <li>More QoS features have been implemented</li>
               <li>dispose() notifications have been added</li>

               <li>Added IPv6 support</li>
               <li>Improved memory management</li>
               <li>Multicast transport improvements</li>
               <li>Implemented Changeable QoS policies</li>
               <li>Use multiple DCPSInfoRepos</li>
               <li>Documentation updates</li>

               <li>New tests and examples</li>
             </ul>
<p>
             See the <a href="http://www.opendds.org/releasenotes.html">Release Notes</a> for details.
</p>
</blockquote><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/c/29/feed</wfw:commentRss>
		</item>
		<item>
		<title>C++ functions to convert between decimal degrees and degrees, minutes, and seconds</title>
		<link>http://www.storage-b.com/c/16</link>
		<comments>http://www.storage-b.com/c/16#comments</comments>
		<pubDate>Fri, 25 Apr 2008 11:39:56 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<category><![CDATA[Retrocomputing]]></category>

		<guid isPermaLink="false">http://weblog.amon-hen.com/c/16</guid>
		<description><![CDATA[
Back when I was developing  shiphandling simulator software, I ran into situations where it was necessary to convert decimal degrees to degrees, minutes, and seconds (for example, nautical types like to express
latitude/longitude using degrees, minutes, and seconds while computers prefer decimal degrees). 


Here's some C++ functions which handle the conversion between these two formats:



std::string [...]]]></description>
			<content:encoded><![CDATA[<p>
Back when I was developing  <a href="http://www.mar-sim.com/">shiphandling simulator</a> software, I ran into situations where it was necessary to convert decimal degrees to degrees, minutes, and seconds (for example, nautical types like to express
latitude/longitude using degrees, minutes, and seconds while computers prefer decimal degrees). 
</p>
<p>
Here's some C++ functions which handle the conversion between these two formats:
</p>
<pre>
<tt>
<font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">DMS::DegreesMinutesSeconds</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">ang</font>,
                                       <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">num_dec_places</font> <font color="4444FF">=</font> <font color="#FF0000">2</font><font color="4444FF">)</font>
<font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">DMS::DegreesMinutesSecondsLat</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">ang</font>,
                                          <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">num_dec_places</font> <font color="4444FF">=</font> <font color="#FF0000">2</font><font color="4444FF">)</font>
<font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">DMS::DegreesMinutesSecondsLon</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">ang</font>,
                                          <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">num_dec_places</font> <font color="4444FF">=</font> <font color="#FF0000">2</font><font color="4444FF">)</font>

<strong>double</strong> <font color="#2040a0">DMS::DecimalDegrees</font><font color="4444FF">(</font><strong>const</strong> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font><font color="4444FF">&amp;</font> <font color="#2040a0">dms</font><font color="4444FF">)</font>
</tt>
</pre>
<p>
These are inline functions defined in the header file, <a href="/src/dms/dms.h">dms.h</a>:
</p>
<span id="more-16"></span>
<p>
--- start ---
</p>
<pre>
<font color="#444444">//==================================================================</font>
<font color="#444444"><i>/**
 *  dms.h -- C++ functions to convert between decimal degrees
 *           and degrees, minutes, and seconds
 *
 *  Copyright (C) 2005-2008 by James A. Chappell
 *
 *  Permission is hereby granted, free of charge, to any person
 *  obtaining a copy of this software and associated documentation
 *  files (the &quot;Software&quot;), to deal in the Software without
 *  restriction, including without limitation the rights to use,
 *  copy, modify, merge, publish, distribute, sublicense, and/or
 *  sell copies of the Software, and to permit persons to whom the
 *  Software is furnished to do so, subject to the following
 *  conditions:
 *
 *  The above copyright notice and this permission notice shall be
 *  included in all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *  OTHER DEALINGS IN THE SOFTWARE.
 */</i></font>
<font color="#444444">//=================================================================</font>
<font color="#444444">/*
 * dms.h:  Version 0.02
 * Created by James A. Chappell
 * Created 23 August 2005
 *
 * History:
 * 23-aug-2005  created
 * 25-apr-2008  added latitude/longitude conversions
 * 
 */</font>
<font color="#444444">//=================================================================</font>

<font color="0000ff"><strong>#ifndef __DMS_H__</strong></font>
<font color="0000ff"><strong>#define __DMS_H__</strong></font>

<font color="0000ff"><strong>#include <font color="#008000">&lt;sstream&gt;</font></strong></font>
<font color="0000ff"><strong>#include <font color="#008000">&lt;math.h&gt;</font> <font color="#444444">// for nearbyint()</font></strong></font>

<strong>namespace</strong> <font color="#2040a0">DMS</font>
<font color="4444FF"><strong>{</strong></font>
  <strong>static</strong> <strong>const</strong> <strong>char</strong> <font color="#2040a0">DEG_SIM</font> <font color="4444FF">=</font> <font color="#FF0000">176</font> <font color="4444FF">;</font>

<font color="#444444">//</font>
<font color="#444444">//  Convert decimal degrees to degrees, minutes and seconds</font>
<font color="#444444">// </font>
  <strong>inline</strong> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">DegreesMinutesSeconds</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">ang</font>,
                                           <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">num_dec_places</font> <font color="4444FF">=</font> <font color="#FF0000">2</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>bool</strong> <font color="#2040a0">neg</font><font color="4444FF">(</font><strong>false</strong><font color="4444FF">)</font> <font color="4444FF">;</font>
    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">ang</font> <font color="4444FF">&lt;</font> <font color="#FF0000">0.0</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">neg</font> <font color="4444FF">=</font> <strong>true</strong> <font color="4444FF">;</font>
      <font color="#2040a0">ang</font> <font color="4444FF">=</font> <font color="4444FF">-</font><font color="#2040a0">ang</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
  
    <strong>int</strong> <font color="#2040a0">deg</font> <font color="4444FF">=</font> <font color="4444FF">(</font><strong>int</strong><font color="4444FF">)</font><font color="#2040a0">ang</font> <font color="4444FF">;</font>
    <strong>double</strong> <font color="#2040a0">frac</font> <font color="4444FF">=</font> <font color="#2040a0">ang</font> <font color="4444FF">-</font> <font color="4444FF">(</font><strong>double</strong><font color="4444FF">)</font><font color="#2040a0">deg</font> <font color="4444FF">;</font>

    <font color="#2040a0">frac</font> <font color="4444FF">*</font><font color="4444FF">=</font> <font color="#FF0000">60.0</font> <font color="4444FF">;</font>

    <strong>int</strong> <font color="#2040a0">min</font> <font color="4444FF">=</font> <font color="4444FF">(</font><strong>int</strong><font color="4444FF">)</font><font color="#2040a0">frac</font> <font color="4444FF">;</font>

    <font color="#2040a0">frac</font> <font color="4444FF">=</font> <font color="#2040a0">frac</font> <font color="4444FF">-</font> <font color="4444FF">(</font><strong>double</strong><font color="4444FF">)</font><font color="#2040a0">min</font> <font color="4444FF">;</font>

    <font color="#444444">// fix the DDD MM 60 case</font>
    <font color="#444444">// TODO: nearbyint isn’t alway available (Visual C++,</font>
    <font color="#444444">//       for example)</font>
    <strong>double</strong> <font color="#2040a0">sec</font> <font color="4444FF">=</font> <font color="#2040a0">nearbyint</font><font color="4444FF">(</font><font color="#2040a0">frac</font> <font color="4444FF">*</font> <font color="#FF0000">600000.0</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="#2040a0">sec</font> /<font color="4444FF">=</font> <font color="#FF0000">10000.0</font> <font color="4444FF">;</font>

    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">sec</font> <font color="4444FF">&gt;</font><font color="4444FF">=</font> <font color="#FF0000">60.0</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">min</font><font color="4444FF">+</font><font color="4444FF">+</font> <font color="4444FF">;</font>
      <font color="#2040a0">sec</font> <font color="4444FF">-</font><font color="4444FF">=</font> <font color="#FF0000">60.0</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

    <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">ostringstream</font> <font color="#2040a0">oss</font> <font color="4444FF">;</font>

    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">neg</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">oss</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;-&quot;</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

<font color="#444444">//  TODO: allow user to define delimiters separating</font>
<font color="#444444">//        degrees, minutes, and seconds.</font>
    <font color="#2040a0">oss</font>.<font color="#2040a0">setf</font><font color="4444FF">(</font><font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">ios</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">fixed</font>, <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">ios</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">floatfield</font><font color="4444FF">)</font><font color="4444FF">;</font>

    <font color="#2040a0">oss</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">deg</font>  
        <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">DEG_SIM</font> <font color="4444FF">;</font>
    <font color="#2040a0">oss</font>.<font color="#2040a0">fill</font><font color="4444FF">(</font><font color="#008000">'0'</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="#2040a0">oss</font>.<font color="#2040a0">width</font><font color="4444FF">(</font><font color="#FF0000">2</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="#2040a0">oss</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">min</font>
        <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;<font color="#77dd77">\'</font>&quot;</font> <font color="4444FF">;</font>
    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">num_dec_places</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">oss</font>.<font color="#2040a0">width</font><font color="4444FF">(</font><font color="#FF0000">2</font><font color="4444FF">)</font> <font color="4444FF">;</font>
      <font color="#2040a0">oss</font>.<font color="#2040a0">precision</font><font color="4444FF">(</font><font color="#FF0000">0</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
    <strong>else</strong>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">oss</font>.<font color="#2040a0">width</font><font color="4444FF">(</font><font color="#2040a0">num_dec_places</font> <font color="4444FF">+</font> <font color="#FF0000">3</font><font color="4444FF">)</font> <font color="4444FF">;</font>
      <font color="#2040a0">oss</font>.<font color="#2040a0">precision</font><font color="4444FF">(</font><font color="#2040a0">num_dec_places</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
    <font color="#2040a0">oss</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">sec</font> 
        <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;<font color="#77dd77">\&quot;</font>&quot;</font> <font color="4444FF">;</font>

    <strong>return</strong> <font color="#2040a0">oss</font>.<font color="#2040a0">str</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>


  <strong>inline</strong> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">DegreesMinutesSecondsLat</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">ang</font>,
                        <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">num_dec_places</font> <font color="4444FF">=</font> <font color="#FF0000">2</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">lat</font><font color="4444FF">(</font><font color="#2040a0">DegreesMinutesSeconds</font><font color="4444FF">(</font><font color="#2040a0">ang</font>, <font color="#2040a0">num_dec_places</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  
    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">lat</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#008000">'-'</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">lat</font> <font color="4444FF">+</font><font color="4444FF">=</font> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font><font color="4444FF">(</font><font color="#008000">&quot; S&quot;</font><font color="4444FF">)</font> <font color="4444FF">;</font>
      <font color="#2040a0">lat</font>.<font color="#2040a0">erase</font><font color="4444FF">(</font><font color="#FF0000">0</font>, <font color="#FF0000">1</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
    <strong>else</strong>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">lat</font> <font color="4444FF">+</font><font color="4444FF">=</font> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font><font color="4444FF">(</font><font color="#008000">&quot; N&quot;</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

    <font color="#2040a0">lat</font> <font color="4444FF">=</font> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font><font color="4444FF">(</font><font color="#008000">&quot; &quot;</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">lat</font> <font color="4444FF">;</font>

    <strong>return</strong> <font color="#2040a0">lat</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>


  <strong>inline</strong> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">DegreesMinutesSecondsLon</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">ang</font>,
                        <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">num_dec_places</font> <font color="4444FF">=</font> <font color="#FF0000">2</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">lon</font><font color="4444FF">(</font><font color="#2040a0">DegreesMinutesSeconds</font><font color="4444FF">(</font><font color="#2040a0">ang</font>, <font color="#2040a0">num_dec_places</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>

    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">lon</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#008000">'-'</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">lon</font> <font color="4444FF">+</font><font color="4444FF">=</font> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font><font color="4444FF">(</font><font color="#008000">&quot; W&quot;</font><font color="4444FF">)</font> <font color="4444FF">;</font>
      <font color="#2040a0">lon</font>.<font color="#2040a0">erase</font><font color="4444FF">(</font><font color="#FF0000">0</font>, <font color="#FF0000">1</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
    <strong>else</strong>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">lon</font> <font color="4444FF">+</font><font color="4444FF">=</font> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font><font color="4444FF">(</font><font color="#008000">&quot; E&quot;</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">fabs</font><font color="4444FF">(</font><font color="#2040a0">ang</font><font color="4444FF">)</font> <font color="4444FF">&lt;</font> <font color="#FF0000">100.0</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">lon</font> <font color="4444FF">=</font> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font><font color="4444FF">(</font><font color="#008000">&quot;0&quot;</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">lon</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

    <strong>return</strong> <font color="#2040a0">lon</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>


<font color="#444444">//</font>
<font color="#444444">// Convert degrees, minutes and seconds to decimal degrees.</font>
<font color="#444444">// </font>
  <strong>inline</strong> <strong>double</strong> <font color="#2040a0">DecimalDegrees</font><font color="4444FF">(</font><strong>const</strong> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font><font color="4444FF">&amp;</font> <font color="#2040a0">dms</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">string</font> <font color="#2040a0">tmp</font><font color="4444FF">(</font><font color="#2040a0">dms</font><font color="4444FF">)</font> <font color="4444FF">;</font>

    <font color="#444444">// need to handle the -0 MM SS case</font>
    <font color="#444444">// TODO: handle leading spaces before potential minus sign</font>
    <strong>bool</strong> <font color="#2040a0">neg</font><font color="4444FF">(</font><strong>false</strong><font color="4444FF">)</font> <font color="4444FF">;</font>

    <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">tmp</font><font color="4444FF">[</font><font color="#2040a0">tmp</font>.<font color="#2040a0">length</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">-</font> <font color="#FF0000">1</font><font color="4444FF">]</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#008000">'W'</font><font color="4444FF">)</font> <font color="4444FF">|</font><font color="4444FF">|</font> <font color="4444FF">(</font><font color="#2040a0">tmp</font><font color="4444FF">[</font><font color="#2040a0">tmp</font>.<font color="#2040a0">length</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">-</font> <font color="#FF0000">1</font><font color="4444FF">]</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#008000">'S'</font><font color="4444FF">)</font> <font color="4444FF">|</font><font color="4444FF">|</font>
        <font color="4444FF">(</font><font color="#2040a0">tmp</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#008000">'-'</font><font color="4444FF">)</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">neg</font> <font color="4444FF">=</font> <strong>true</strong> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

    <strong>for</strong> <font color="4444FF">(</font><strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">i</font> <font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">;</font> <font color="#2040a0">i</font> <font color="4444FF">&lt;</font> <font color="#2040a0">tmp</font>.<font color="#2040a0">length</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">;</font> <font color="#2040a0">i</font><font color="4444FF">+</font><font color="4444FF">+</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">!</font><font color="#2040a0">isdigit</font><font color="4444FF">(</font><font color="#2040a0">tmp</font><font color="4444FF">[</font><font color="#2040a0">i</font><font color="4444FF">]</font><font color="4444FF">)</font> <font color="4444FF">&amp;</font><font color="4444FF">&amp;</font> <font color="4444FF">(</font><font color="#2040a0">tmp</font><font color="4444FF">[</font><font color="#2040a0">i</font><font color="4444FF">]</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#008000">'.'</font><font color="4444FF">)</font><font color="4444FF">)</font>
      <font color="4444FF"><strong>{</strong></font>
        <font color="#2040a0">tmp</font><font color="4444FF">[</font><font color="#2040a0">i</font><font color="4444FF">]</font> <font color="4444FF">=</font> <font color="#008000">' '</font> <font color="4444FF">;</font>
      <font color="4444FF"><strong>}</strong></font>
    <font color="4444FF"><strong>}</strong></font>

    <strong>double</strong> <font color="#2040a0">deg</font><font color="4444FF">(</font><font color="#FF0000">0.0</font><font color="4444FF">)</font>, <font color="#2040a0">min</font><font color="4444FF">(</font><font color="#FF0000">0.0</font><font color="4444FF">)</font>, <font color="#2040a0">sec</font><font color="4444FF">(</font><font color="#FF0000">0.0</font><font color="4444FF">)</font> <font color="4444FF">;</font>
<font color="#444444">//  TODO: handle other delimiters</font>
    <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">istringstream</font> <font color="#2040a0">iss</font><font color="4444FF">(</font><font color="#2040a0">tmp</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="#2040a0">iss</font> <font color="4444FF">&gt;</font><font color="4444FF">&gt;</font> <font color="#2040a0">deg</font> <font color="4444FF">&gt;</font><font color="4444FF">&gt;</font> <font color="#2040a0">min</font> <font color="4444FF">&gt;</font><font color="4444FF">&gt;</font> <font color="#2040a0">sec</font> <font color="4444FF">;</font>

    <strong>double</strong> <font color="#2040a0">ang</font> <font color="4444FF">=</font> <font color="#2040a0">deg</font> <font color="4444FF">+</font> <font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">min</font> <font color="4444FF">+</font> <font color="4444FF">(</font><font color="#2040a0">sec</font> / <font color="#FF0000">60.0</font><font color="4444FF">)</font><font color="4444FF">)</font> / <font color="#FF0000">60.0</font><font color="4444FF">)</font> <font color="4444FF">;</font>

    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">neg</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <font color="#2040a0">ang</font> <font color="4444FF">=</font> <font color="4444FF">-</font><font color="#2040a0">ang</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

    <strong>return</strong> <font color="#2040a0">ang</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>
<font color="4444FF"><strong>}</strong></font> <font color="4444FF">;</font>

<font color="0000ff"><strong>#endif</strong></font>

</pre>
<p>
--- end ---
</p>
<p>
Here's a <a href="/src/dms/test.cpp">sample program</a> using the functions in <a href="/src/dms/dms.h">dms.h</a>:
</p>
<p>
--- start ---
</p>
<pre>
<font color="0000ff"><strong>#include <font color="#008000">&lt;iostream&gt;</font></strong></font>
<font color="0000ff"><strong>#include <font color="#008000">&quot;dms.h&quot;</font></strong></font>

<strong>using</strong> <strong>namespace</strong> <font color="#2040a0">std</font><font color="4444FF">;</font>
<strong>using</strong> <strong>namespace</strong> <font color="#2040a0">DMS</font><font color="4444FF">;</font>

<strong>int</strong> <font color="#2040a0">main</font><font color="4444FF">(</font><font color="4444FF">)</font>
<font color="4444FF"><strong>{</strong></font>
    <strong>double</strong> <font color="#2040a0">ang</font> <font color="4444FF">;</font>
    
    <font color="#2040a0">cout</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;Enter angle (decimal degrees): &quot;</font> <font color="4444FF">;</font>
    <font color="#2040a0">cin</font> <font color="4444FF">&gt;</font><font color="4444FF">&gt;</font> <font color="#2040a0">ang</font> <font color="4444FF">;</font>
    
    <font color="#2040a0">string</font> <font color="#2040a0">dms</font> <font color="4444FF">;</font>

    <font color="#2040a0">dms</font> <font color="4444FF">=</font> <font color="#2040a0">DegreesMinutesSeconds</font><font color="4444FF">(</font><font color="#2040a0">ang</font><font color="4444FF">)</font> <font color="4444FF">;</font>

    <font color="#2040a0">cout</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">dms</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font> <font color="4444FF">;</font>

    <font color="#2040a0">ang</font> <font color="4444FF">=</font> <font color="#2040a0">DecimalDegrees</font><font color="4444FF">(</font><font color="#2040a0">dms</font><font color="4444FF">)</font> <font color="4444FF">;</font>

    <font color="#2040a0">cout</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">ang</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font> <font color="4444FF">;</font>

    <strong>return</strong> <font color="#FF0000">0</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>

</pre>
<p>
--- end ---
</p>
<p>
At some point these functions may be incorporated into a class encapsulating angular measure.
</p><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/c/16/feed</wfw:commentRss>
		</item>
		<item>
		<title>WordPress 2.5</title>
		<link>http://www.storage-b.com/site-news/30</link>
		<comments>http://www.storage-b.com/site-news/30#comments</comments>
		<pubDate>Mon, 31 Mar 2008 12:27:35 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[Site News]]></category>

		<guid isPermaLink="false">http://www.storage-b.com/?p=30</guid>
		<description><![CDATA[
This site has been upgraded to WordPress 2.5. 
]]></description>
			<content:encoded><![CDATA[<p>
This site has been upgraded to <a href="http://wordpress.org/development/2008/03/wordpress-25-brecker/">WordPress 2.5</a>. 
</p><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/site-news/30/feed</wfw:commentRss>
		</item>
		<item>
		<title>Multics</title>
		<link>http://www.storage-b.com/retrocomputing/28</link>
		<comments>http://www.storage-b.com/retrocomputing/28#comments</comments>
		<pubDate>Thu, 15 Nov 2007 00:42:13 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[Retrocomputing]]></category>

		<guid isPermaLink="false">http://www.storage-b.com/retrocomputing/28</guid>
		<description><![CDATA[
(via mit.edu)



Multics (Multiplexed Information and Computing Service)
was a mainframe timesharing operating system that began at MIT as a
research project in 1965. It was an important influence on operating
system development.


&#8230;


In order to preserve the ideas and innovations that made Multics so important in the development of computer systems, Bull HN has provided the source code for [...]]]></description>
			<content:encoded><![CDATA[<p>
(via <a href="http://web.mit.edu/multics-history/">mit.edu</a>)
</p>
<blockquote>
<p align="justify">
Multics (<strong>Mult</strong>iplexed<strong> I</strong>nformation and <strong>C</strong>omputing <strong>S</strong>ervice)
was a mainframe timesharing operating system that began at MIT as a
research project in 1965. It was an important influence on operating
system development.
</p>
<p>
&#8230;
</p>
<p align="justify">
In order to preserve the ideas and innovations that made Multics so important in the development of computer systems, Bull HN has provided the source code for the final Multics release, MR 12.5 of November 1992 to MIT. It is a generous contribution to computer science knowledge and is provided for academic purposes. Additionally, we intend this site to become a repository for many papers and documents that were created during the Multics development as a complement to the other Multics sites.
</p>
</blockquote>
<p>
Check out: <a href="http://web.mit.edu/multics-history/source/Multics_Internet_Server/Multics_sources.html">Multics Source and Listings</a>.
</p><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/retrocomputing/28/feed</wfw:commentRss>
		</item>
		<item>
		<title>C++ Functions to Evaluate Chebyshev Polynomials</title>
		<link>http://www.storage-b.com/math-numerical-analysis/27</link>
		<comments>http://www.storage-b.com/math-numerical-analysis/27#comments</comments>
		<pubDate>Sun, 29 Jul 2007 02:21:42 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<category><![CDATA[Math / Numerical Analysis]]></category>

		<guid isPermaLink="false">http://weblog.amon-hen.com/math-numerical-analysis/27</guid>
		<description><![CDATA[
Here’s some  C++ functions which evaluate Chebyshev  polynomials:


T0(x):
double T0(double x) ;


T1(x):
double T1(double x) ;


T2(x):
double T2(double x) ;


Tn(x):
double Tn(unsigned int n, double x) ;


These are inline functions defined in the header file, chebyshev.h:



&#8211; start &#8211;


//==================================================================
/**
 *  chebyshev.h -- C++ functions to evaluate Chebyshev polynomials
 *
 *  Copyright (C) 2007 by James A. [...]]]></description>
			<content:encoded><![CDATA[<p>
Here’s some  C++ functions which evaluate Chebyshev  polynomials:
</p>
<p>
T<sub>0</sub>(x):<br />
<strong>double</strong> <font color="#2040a0">T0</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">x</font><font color="4444FF">)</font> ;
</p>
<p>
T<sub>1</sub>(x):<br />
<strong>double</strong> <font color="#2040a0">T1</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">x</font><font color="4444FF">)</font> ;
</p>
<p>
T<sub>2</sub>(x):<br />
<strong>double</strong> <font color="#2040a0">T2</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">x</font><font color="4444FF">)</font> ;
</p>
<p>
T<sub>n</sub>(x):<br />
<strong>double</strong> <font color="#2040a0">Tn</font><font color="4444FF">(</font><strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">n</font>, <strong>double</strong> <font color="#2040a0">x</font><font color="4444FF">)</font> ;
</p>
<p>
These are inline functions defined in the header file, <a href="/src/chebyshev/chebyshev.h">chebyshev.h</a>:
</p>
<span id="more-27"></span>
<p>
&#8211; start &#8211;
</p>
<pre>
<font color="#444444">//==================================================================</font>
<font color="#444444"><i>/**
 *  chebyshev.h -- C++ functions to evaluate Chebyshev polynomials
 *
 *  Copyright (C) 2007 by James A. Chappell (rlrrlrll@gmail.com)
 *
 *  Permission is hereby granted, free of charge, to any person
 *  obtaining a copy of this software and associated documentation
 *  files (the &quot;Software&quot;), to deal in the Software without
 *  restriction, including without limitation the rights to use,
 *  copy, modify, merge, publish, distribute, sublicense, and/or
 *  sell copies of the Software, and to permit persons to whom the
 *  Software is furnished to do so, subject to the following
 *  condition:
 *
 *  THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *  OTHER DEALINGS IN THE SOFTWARE.
 */</i></font>
<font color="#444444">//=================================================================</font>
<font color="#444444">/*
 * chebyshev.h:  Version 0.01
 * Created by James A. Chappell
 * Created 29 September 2005
 *
 * History:
 * 28-jul-2007  created
 */</font>
<font color="#444444">//==============</font>

<font color="0000ff"><strong>#ifndef __CHEBYSHEV_H__</strong></font>
<font color="0000ff"><strong>#define __CHEBYSHEV_H__</strong></font>
<font color="#444444">/*
 *	Function calculates Chebyshev Polynomials Tn(x)
 */</font>

<strong>namespace</strong> <font color="#2040a0">Chebyshev</font>
<font color="4444FF"><strong>{</strong></font>
  <font color="#444444">// n = 0</font>
  <strong>inline</strong> <strong>double</strong> <font color="#2040a0">T0</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">x</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>return</strong> <font color="#FF0000">1.0</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <font color="#444444">// n = 1</font>
  <strong>inline</strong> <strong>double</strong> <font color="#2040a0">T1</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">x</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>return</strong> <font color="#2040a0">x</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <font color="#444444">// n = 2</font>
  <strong>inline</strong> <strong>double</strong> <font color="#2040a0">T2</font><font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">x</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>return</strong> <font color="4444FF">(</font><font color="#FF0000">2.0</font> <font color="4444FF">*</font> <font color="#2040a0">x</font><font color="4444FF">*</font><font color="#2040a0">x</font><font color="4444FF">)</font> <font color="4444FF">-</font> <font color="#FF0000">1.0</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

<font color="#444444">/*
 *	Tn(x)
 */</font>
  <strong>inline</strong> <strong>double</strong> <font color="#2040a0">Tn</font><font color="4444FF">(</font><strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">n</font>, <strong>double</strong> <font color="#2040a0">x</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">n</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <strong>return</strong> <font color="#2040a0">T0</font><font color="4444FF">(</font><font color="#2040a0">x</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
    <strong>else</strong> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">n</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">1</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <strong>return</strong> <font color="#2040a0">T1</font><font color="4444FF">(</font><font color="#2040a0">x</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
    <strong>else</strong> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">n</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">2</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <strong>return</strong> <font color="#2040a0">T2</font><font color="4444FF">(</font><font color="#2040a0">x</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

<font color="#444444">/* We could simply do this:
    return (2.0 * x * Tn(n - 1, x)) - Tn(n - 2, x) ;
   but it could be slow for large n */</font>
 
    <strong>double</strong> <font color="#2040a0">tnm1</font><font color="4444FF">(</font><font color="#2040a0">T2</font><font color="4444FF">(</font><font color="#2040a0">x</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <strong>double</strong> <font color="#2040a0">tnm2</font><font color="4444FF">(</font><font color="#2040a0">T1</font><font color="4444FF">(</font><font color="#2040a0">x</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <strong>double</strong> <font color="#2040a0">tn</font><font color="4444FF">(</font><font color="#2040a0">tnm1</font><font color="4444FF">)</font> <font color="4444FF">;</font>

    <strong>for</strong> <font color="4444FF">(</font><strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">l</font> <font color="4444FF">=</font> <font color="#FF0000">3</font> <font color="4444FF">;</font> <font color="#2040a0">l</font> <font color="4444FF">&lt;</font><font color="4444FF">=</font> <font color="#2040a0">n</font> <font color="4444FF">;</font> <font color="#2040a0">l</font><font color="4444FF">+</font><font color="4444FF">+</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font> 
      <font color="#2040a0">tn</font> <font color="4444FF">=</font> <font color="4444FF">(</font><font color="#FF0000">2.0</font> <font color="4444FF">*</font> <font color="#2040a0">x</font> <font color="4444FF">*</font> <font color="#2040a0">tnm1</font><font color="4444FF">)</font> <font color="4444FF">-</font> <font color="#2040a0">tnm2</font> <font color="4444FF">;</font>
      <font color="#2040a0">tnm2</font> <font color="4444FF">=</font> <font color="#2040a0">tnm1</font><font color="4444FF">;</font>
      <font color="#2040a0">tnm1</font> <font color="4444FF">=</font> <font color="#2040a0">tn</font><font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>

    <strong>return</strong> <font color="#2040a0">tn</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>
<font color="4444FF"><strong>}</strong></font>
<font color="0000ff"><strong>#endif</strong></font>

</pre>
<p>
&#8211; end &#8211;
</p>
<p>
Here’s a <a href="/src/chebyshev/test.cpp">sample program</a>:
</p>
<p>
&#8211; start &#8211;
</p>
<pre>
<font color="0000ff"><strong>#include <font color="#008000">&lt;iostream&gt;</font></strong></font>
<font color="0000ff"><strong>#include <font color="#008000">&quot;<a href="/src/chebyshev/chebyshev.h">chebyshev.h</a>&quot;</font></strong></font>

<strong>using</strong> <strong>namespace</strong> <font color="#2040a0">std</font> <font color="4444FF">;</font>
<strong>using</strong> <strong>namespace</strong> <font color="#2040a0">Chebyshev</font> <font color="4444FF">;</font>

<strong>int</strong> <font color="#2040a0">main</font><font color="4444FF">(</font><font color="4444FF">)</font>
<font color="4444FF"><strong>{</strong></font>
  <strong>double</strong> <font color="#2040a0">tn</font> <font color="4444FF">;</font>

  <font color="#2040a0">cout</font>.<font color="#2040a0">precision</font><font color="4444FF">(</font><font color="#FF0000">5</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <strong>for</strong> <font color="4444FF">(</font><strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">n</font> <font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">;</font> <font color="#2040a0">n</font> <font color="4444FF">&lt;</font><font color="4444FF">=</font> <font color="#FF0000">5</font> <font color="4444FF">;</font> <font color="#2040a0">n</font><font color="4444FF">+</font><font color="4444FF">+</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>for</strong> <font color="4444FF">(</font><strong>double</strong> <font color="#2040a0">x</font> <font color="4444FF">=</font> <font color="4444FF">-</font><font color="#FF0000">1.0</font> <font color="4444FF">;</font> <font color="#2040a0">x</font> <font color="4444FF">&lt;</font><font color="4444FF">=</font> <font color="#FF0000">1.0</font> <font color="4444FF">;</font> <font color="#2040a0">x</font> <font color="4444FF">=</font> <font color="#2040a0">x</font> <font color="4444FF">+</font> <font color="#FF0000">0.1</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font> 
      <font color="#2040a0">tn</font> <font color="4444FF">=</font> <font color="#2040a0">Tn</font><font color="4444FF">(</font><font color="#2040a0">n</font>, <font color="#2040a0">x</font><font color="4444FF">)</font> <font color="4444FF">;</font>
      <font color="#2040a0">cout</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;T&quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">n</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;(&quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">x</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;) = &quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">tn</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
    <font color="#2040a0">cout</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <strong>return</strong> <font color="#FF0000">0</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>

</pre>
<p>
&#8211; end &#8211;
</p><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/math-numerical-analysis/27/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenDDS</title>
		<link>http://www.storage-b.com/c/26</link>
		<comments>http://www.storage-b.com/c/26#comments</comments>
		<pubDate>Mon, 09 Jul 2007 16:20:39 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<category><![CDATA[DDS]]></category>

		<guid isPermaLink="false">http://weblog.amon-hen.com/c/26</guid>
		<description><![CDATA[
OpenDDS:



OpenDDS is an open source C++ implementation of the Object Management Group (OMG) Data Distribution Service (DDS). OpenDDS leverages the Adaptive Communication Environment (ACE) to provide a cross platform environment.


OpenDDS is supported by Object Computing, Inc.



Download OpenDDS here.
]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.opendds.org/">OpenDDS</a>:
</p>
<blockquote>
<p align="justify">
OpenDDS is an open source C++ implementation of the Object Management Group (OMG) Data Distribution Service (DDS). OpenDDS leverages the Adaptive Communication Environment (ACE) to provide a cross platform environment.
</p>
<p align="justify">
OpenDDS is supported by <a href="http://www.ociweb.com/">Object Computing, Inc.</a>
</p>
</blockquote>
<p>
Download OpenDDS <a href="http://download.ociweb.com/OpenDDS/">here</a>.
</p><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/c/26/feed</wfw:commentRss>
		</item>
		<item>
		<title>X Windows Programming in C++: Part III</title>
		<link>http://www.storage-b.com/c/x/25</link>
		<comments>http://www.storage-b.com/c/x/25#comments</comments>
		<pubDate>Mon, 09 Jul 2007 01:31:34 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[X]]></category>

		<guid isPermaLink="false">http://weblog.amon-hen.com/c/x/25</guid>
		<description><![CDATA[
X Windows Programming in C++: Part I
X Windows Programming in C++: Part II


Continuing with our task of creating a C++ version of basicwin.c, we next look at XCreateSimpleWindow.
Here’s some code snippets from basicwin.c showing the use of XCreateSimpleWindow:



/* basicwin.c */
#include &#60;X11/Xlib.h&#62;

Display *display;
int screen_num;

static char *progname; /* name this program was invoked by */

void main(argc, argv)
int [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="/c/x/23">X Windows Programming in C++: Part I</a></li>
<li><a href="/c/x/24">X Windows Programming in C++: Part II</a></li>
</ul>
<p>
Continuing with our task of creating a C++ version of basicwin.c, we next look at XCreateSimpleWindow.
Here’s some code snippets from basicwin.c showing the use of XCreateSimpleWindow:
</p>
<span id="more-25"></span>
<pre>
<font color="#444444">/* basicwin.c */</font>
<font color="0000ff"><strong>#include <font color="#008000">&lt;X11/Xlib.h&gt;</font></strong></font>

<font color="#2040a0">Display</font> <font color="4444FF">*</font><font color="#2040a0">display</font><font color="4444FF">;</font>
<strong>int</strong> <font color="#2040a0">screen_num</font><font color="4444FF">;</font>

<strong>static</strong> <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">progname</font><font color="4444FF">;</font> <font color="#444444">/* name this program was invoked by */</font>

<strong>void</strong> <font color="#2040a0">main</font><font color="4444FF">(</font><font color="#2040a0">argc</font>, <font color="#2040a0">argv</font><font color="4444FF">)</font>
<strong>int</strong> <font color="#2040a0">argc</font><font color="4444FF">;</font>
<strong>char</strong> <font color="4444FF">*</font><font color="4444FF">*</font><font color="#2040a0">argv</font><font color="4444FF">;</font>
<font color="4444FF"><strong>{</strong></font>
	<font color="#2040a0">Window</font> <font color="#2040a0">win</font><font color="4444FF">;</font>
<font color="#444444">/*
 .
 .
 .
 */</font>

	<font color="#444444">/* connect to X server */</font>
	<strong>if</strong> <font color="4444FF">(</font> <font color="4444FF">(</font><font color="#2040a0">display</font><font color="4444FF">=</font><font color="#2040a0">XOpenDisplay</font><font color="4444FF">(</font><font color="#2040a0">display_name</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">NULL</font> <font color="4444FF">)</font>
	<font color="4444FF"><strong>{</strong></font>
		<font color="4444FF">(</font><strong>void</strong><font color="4444FF">)</font> <font color="#2040a0">fprintf</font><font color="4444FF">(</font> <font color="#2040a0">stderr</font>, <font color="#008000">&quot;%s: cannot connect to X server %s<font color="#77dd77">\n</font>&quot;</font>, 
				<font color="#2040a0">progname</font>, <font color="#2040a0">XDisplayName</font><font color="4444FF">(</font><font color="#2040a0">display_name</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
		<font color="#2040a0">exit</font><font color="4444FF">(</font> <font color="4444FF">-</font><font color="#FF0000">1</font> <font color="4444FF">)</font><font color="4444FF">;</font>
	<font color="4444FF"><strong>}</strong></font>

	<font color="#444444">/* get screen size from display structure macro */</font>
	<font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">DefaultScreen</font><font color="4444FF">(</font><font color="#2040a0">display</font><font color="4444FF">)</font><font color="4444FF">;</font>
	<font color="#2040a0">display_width</font> <font color="4444FF">=</font> <font color="#2040a0">DisplayWidth</font><font color="4444FF">(</font><font color="#2040a0">display</font>, <font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">;</font>
	<font color="#2040a0">display_height</font> <font color="4444FF">=</font> <font color="#2040a0">DisplayHeight</font><font color="4444FF">(</font><font color="#2040a0">display</font>, <font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">;</font>

	<font color="#444444">/* Note that in a real application, x and y would default to 0
	 * but would be settable from the command line or resource database.  
	 */</font>
	<font color="#2040a0">x</font> <font color="4444FF">=</font> <font color="#2040a0">y</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>

	<font color="#444444">/* size window with enough room for text */</font>
	<font color="#2040a0">width</font> <font color="4444FF">=</font> <font color="#2040a0">display_width</font>/<font color="#FF0000">3</font>, <font color="#2040a0">height</font> <font color="4444FF">=</font> <font color="#2040a0">display_height</font>/<font color="#FF0000">4</font><font color="4444FF">;</font>

	<font color="#444444">/* create opaque window */</font>
	<font color="#2040a0">win</font> <font color="4444FF">=</font> <font color="#2040a0">XCreateSimpleWindow</font><font color="4444FF">(</font><font color="#2040a0">display</font>, <font color="#2040a0">RootWindow</font><font color="4444FF">(</font><font color="#2040a0">display</font>,<font color="#2040a0">screen_num</font><font color="4444FF">)</font>, 
			<font color="#2040a0">x</font>, <font color="#2040a0">y</font>, <font color="#2040a0">width</font>, <font color="#2040a0">height</font>, <font color="#2040a0">border_width</font>, <font color="#2040a0">BlackPixel</font><font color="4444FF">(</font><font color="#2040a0">display</font>,
			<font color="#2040a0">screen_num</font><font color="4444FF">)</font>, <font color="#2040a0">WhitePixel</font><font color="4444FF">(</font><font color="#2040a0">display</font>,<font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>

<font color="#444444">/*
 .
 .
 .
 */</font>

        <font color="#444444">/* Display window */</font>
	<font color="#2040a0">XMapWindow</font><font color="4444FF">(</font><font color="#2040a0">display</font>, <font color="#2040a0">win</font><font color="4444FF">)</font><font color="4444FF">;</font>

<font color="#444444">/*
 .
 .
 .
 */</font>

<font color="4444FF"><strong>}</strong></font>

</pre>
<p>
In the C++ version, we can do something like this:
</p>
<pre>
<font color="#444444">/* basicwin.cpp */</font>

<font color="0000ff"><strong>#include <font color="#008000">&quot; <a href="/src/x/xwindow.h">xwindow.h</a>&quot;</font></strong></font>

<font color="#444444">/*
 .
 .
 .
 */</font>
<strong>int</strong> <font color="#2040a0">main</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">argc</font>, <strong>char</strong> <font color="4444FF">*</font><font color="4444FF">*</font><font color="#2040a0">argv</font><font color="4444FF">)</font>
<font color="4444FF"><strong>{</strong></font>
  <font color="#2040a0">try</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">CXDisplayPtr</font> <font color="#2040a0">display</font><font color="4444FF">(</font><font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">OpenDisplay</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>

    <font color="#444444">/* get screen size from display structure macro */</font>
    <font color="#2040a0">display_width</font> <font color="4444FF">=</font> <font color="#2040a0">display</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">GetDisplayWidth</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
    <font color="#2040a0">display_height</font> <font color="4444FF">=</font> <font color="#2040a0">display</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">GetDisplayHeight</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>

    <font color="#444444">/* Note that in a real application, x and y would default to 0
     * but would be settable from the command line or resource database.  
     */</font>
    <font color="#2040a0">x</font> <font color="4444FF">=</font> <font color="#2040a0">y</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>

    <font color="#444444">/* size window with enough room for text */</font>
    <font color="#2040a0">width</font> <font color="4444FF">=</font> <font color="#2040a0">display_width</font> / <font color="#FF0000">3</font> <font color="4444FF">;</font>
    <font color="#2040a0">height</font> <font color="4444FF">=</font> <font color="#2040a0">display_height</font> / <font color="#FF0000">4</font><font color="4444FF">;</font>

    <font color="#444444">/* create opaque window */</font>
    <font color="#2040a0">CXWindowPtr</font> <font color="#2040a0">win</font><font color="4444FF">(</font><font color="#2040a0">CXWindow</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">CreateWindow</font><font color="4444FF">(</font><font color="#2040a0">display</font>,
                    <font color="#2040a0">x</font>, <font color="#2040a0">y</font>, <font color="#2040a0">width</font>, <font color="#2040a0">height</font>, <font color="#2040a0">border_width</font>,
                    <font color="#2040a0">display</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">GetBlackPixel</font><font color="4444FF">(</font><font color="4444FF">)</font>,
                    <font color="#2040a0">display</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">GetWhitePixel</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>

<font color="#444444">/*
 .
 .
 .
 */</font>
    <font color="#444444">/* Display window */</font>
    <font color="#2040a0">win</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">Map</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
<font color="#444444">/*
 .
 .
 .
 */</font>
  <font color="4444FF"><strong>}</strong></font>
  <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">bad_CXDisplay</font><font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">cerr</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">e</font>.<font color="#2040a0">what</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>
  <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">bad_CXWindow</font><font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">cerr</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">e</font>.<font color="#2040a0">what</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>
      
  <strong>return</strong> <font color="4444FF">-</font><font color="#FF0000">1</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>

</pre>
<p>CXWindowPtr is defined in <a href="/src/x/xwindow.h">xwindow.h</a>. Creating a window is handled by the constructor for the class CXWindow.  XDestoryWindow is called by CXWindow&#8217;s destructor. CXWindowPtr wraps CXWindow in a <a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</a>. The static member function, CXWindow::CreateWindow creates a window by calling XCreateSimpleWindow (future versions will likely also support XCreateWindow).  CXWindow::CreateWindow creates a window  and returns a CXWindowPtr which can be used as a pointer to a Window by dereferencing it. CXWindow’s destructor is called when the  CXWindowPtr goes out of scope and all references to it are released.
</p>
<p>
&#8211; start &#8211;
<pre>
<font color="#444444"><i>/*******************************************************************
 *
 * xdisplay.h -- Wrap Window with a boost::shared_ptr
 *
 *  Copyright (C) 2007 by James A. Chappell (rlrrlrll@gmail.com)
 *
 *  Permission is hereby granted, free of charge, to any person
 *  obtaining a copy of this software and associated documentation
 *  files (the &quot;Software&quot;), to deal in the Software without
 *  restriction, including without limitation the rights to use,
 *  copy, modify, merge, publish, distribute, sublicense, and/or
 *  sell copies of the Software, and to permit persons to whom the
 *  Software is furnished to do so, subject to the following
 *  condition:
 *
 *  THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *  OTHER DEALINGS IN THE SOFTWARE.
 */</i></font>

<font color="0000ff"><strong>#ifndef __XWINDOW_H__</strong></font>
<font color="0000ff"><strong>#define __XWINDOW_H__</strong></font>

<font color="0000ff"><strong>#include <font color="#008000">&quot;xdisplay.h&quot;</font></strong></font>

<strong>class</strong> <font color="#2040a0">bad_CXWindow</font> <font color="4444FF">:</font> <strong>public</strong> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">exception</font>
<font color="4444FF"><strong>{</strong></font>
<strong>public</strong><font color="4444FF">:</font>
  <strong>virtual</strong> <strong>const</strong> <strong>char</strong><font color="4444FF">*</font> <font color="#2040a0">what</font><font color="4444FF">(</font><font color="4444FF">)</font> <strong>const</strong> <strong>throw</strong><font color="4444FF">(</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>return</strong> <font color="#008000">&quot;bad_CXWindow&quot;</font> <font color="4444FF">;</font> <font color="#444444">// for now</font>
  <font color="4444FF"><strong>}</strong></font>
<font color="4444FF"><strong>}</strong></font> <font color="4444FF">;</font>


<strong>class</strong> <font color="#2040a0">CXWindow</font> <font color="4444FF">;</font>

<strong>typedef</strong> <font color="#2040a0">boost</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">shared_ptr</font><font color="4444FF">&lt;</font><font color="#2040a0">CXWindow</font><font color="4444FF">&gt;</font> <font color="#2040a0">CXWindowPtr</font> <font color="4444FF">;</font>

<strong>class</strong> <font color="#2040a0">CXWindow</font> <font color="4444FF">:</font> <strong>private</strong> <font color="#2040a0">boost</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">noncopyable</font>
<font color="4444FF"><strong>{</strong></font>
<strong>public</strong><font color="4444FF">:</font>

  <strong>static</strong> <font color="#2040a0">CXWindowPtr</font> <font color="#2040a0">CreateWindow</font><font color="4444FF">(</font><font color="#2040a0">CXDisplayPtr</font><font color="4444FF">&amp;</font> <font color="#2040a0">display</font>,
                                  <strong>int</strong> <font color="#2040a0">x</font>, <strong>int</strong> <font color="#2040a0">y</font>,
                                  <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">width</font>,
                                  <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">height</font>,
                                  <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">border_width</font>,
                                  <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">border</font>,
                                  <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">background</font>,
                                  <strong>int</strong> <font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">USE_DEFAULT_SCREEN</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">Window</font> <font color="#2040a0">parent</font><font color="4444FF">(</font><font color="#2040a0">display</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">GetRootWindow</font><font color="4444FF">(</font><font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <strong>return</strong> <font color="#2040a0">CXWindowPtr</font><font color="4444FF">(</font><strong>new</strong> <font color="#2040a0">CXWindow</font><font color="4444FF">(</font><font color="#2040a0">display</font>, <font color="#2040a0">parent</font>,
                                    <font color="#2040a0">x</font>, <font color="#2040a0">y</font>, <font color="#2040a0">width</font>, <font color="#2040a0">height</font>, 
                                    <font color="#2040a0">border_width</font>, <font color="#2040a0">border</font>, <font color="#2040a0">background</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>
  
  
  <strong>static</strong> <font color="#2040a0">CXWindowPtr</font> <font color="#2040a0">CreateWindow</font><font color="4444FF">(</font><font color="#2040a0">CXDisplayPtr</font><font color="4444FF">&amp;</font> <font color="#2040a0">display</font>,
                                  <font color="#2040a0">CXWindowPtr</font><font color="4444FF">&amp;</font> <font color="#2040a0">parent</font>,
                                  <strong>int</strong> <font color="#2040a0">x</font>, <strong>int</strong> <font color="#2040a0">y</font>,
                                  <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">width</font>,
                                  <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">height</font>,
                                  <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">border_width</font>,
                                  <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">border</font>,
                                  <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">background</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>return</strong> <font color="#2040a0">CXWindowPtr</font><font color="4444FF">(</font><strong>new</strong> <font color="#2040a0">CXWindow</font><font color="4444FF">(</font><font color="#2040a0">display</font>, <font color="4444FF">*</font><font color="#2040a0">parent</font>,
                                    <font color="#2040a0">x</font>, <font color="#2040a0">y</font>, <font color="#2040a0">width</font>, <font color="#2040a0">height</font>, 
                                    <font color="#2040a0">border_width</font>, <font color="#2040a0">border</font>, <font color="#2040a0">background</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  ~<font color="#2040a0">CXWindow</font><font color="4444FF">(</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">XDestroyWindow</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">display_</font>, <font color="#2040a0">window_</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <strong>operator</strong> <font color="#2040a0">Window</font> <strong>const</strong> <font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <strong>return</strong> <font color="#2040a0">window_</font> <font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font>

  <strong>void</strong> <font color="#2040a0">GetWindowAttributes</font><font color="4444FF">(</font><font color="#2040a0">XWindowAttributes</font> <font color="4444FF">&amp;</font><font color="#2040a0">attr</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">!</font><font color="#2040a0">XGetWindowAttributes</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">display_</font>, <font color="#2040a0">window_</font>, <font color="4444FF">&amp;</font><font color="#2040a0">attr</font><font color="4444FF">)</font><font color="4444FF">)</font>
    <font color="4444FF"><strong>{</strong></font>
      <strong>throw</strong> <font color="#2040a0">bad_CXWindow</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">;</font>
    <font color="4444FF"><strong>}</strong></font>
  <font color="4444FF"><strong>}</strong></font>

  <strong>void</strong> <font color="#2040a0">Map</font><font color="4444FF">(</font><font color="4444FF">)</font> <strong>const</strong>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">XMapWindow</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">display_</font>, <font color="#2040a0">window_</font><font color="4444FF">)</font><font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <strong>void</strong> <font color="#2040a0">Unmap</font><font color="4444FF">(</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">XUnmapWindow</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">display_</font>, <font color="#2040a0">window_</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

<strong>private</strong><font color="4444FF">:</font>
  <font color="#2040a0">Window</font> <font color="#2040a0">window_</font> <font color="4444FF">;</font>
  <font color="#2040a0">CXDisplayPtr</font> <font color="#2040a0">display_</font> <font color="4444FF">;</font>

  <font color="#2040a0">CXWindow</font><font color="4444FF">(</font><font color="#2040a0">CXDisplayPtr</font><font color="4444FF">&amp;</font> <font color="#2040a0">display</font>, <font color="#2040a0">Window</font> <font color="#2040a0">parent</font>,
           <strong>int</strong> <font color="#2040a0">x</font>, <strong>int</strong> <font color="#2040a0">y</font>,
           <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">width</font>, <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">height</font>,
           <strong>unsigned</strong> <strong>int</strong> <font color="#2040a0">border_width</font>,
           <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">border</font>,
           <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">background</font><font color="4444FF">)</font>
    <font color="4444FF">:</font> <font color="#2040a0">display_</font><font color="4444FF">(</font><font color="#2040a0">display</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">window_</font> <font color="4444FF">=</font> <font color="#2040a0">XCreateSimpleWindow</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">display_</font>, <font color="#2040a0">parent</font>,
                                   <font color="#2040a0">x</font>, <font color="#2040a0">y</font>, <font color="#2040a0">width</font>, <font color="#2040a0">height</font>, 
                                   <font color="#2040a0">border_width</font>, <font color="#2040a0">border</font>, <font color="#2040a0">background</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <font color="#2040a0">CXWindow</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font><font color="4444FF"><strong>}</strong></font> 
<font color="4444FF"><strong>}</strong></font> <font color="4444FF">;</font>

<font color="0000ff"><strong>#endif</strong></font>

</pre>
<p>
&#8211; end &#8211;
</p>
<img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/c/x/25/feed</wfw:commentRss>
		</item>
		<item>
		<title>X Windows Programming in C++: Part II</title>
		<link>http://www.storage-b.com/c/x/24</link>
		<comments>http://www.storage-b.com/c/x/24#comments</comments>
		<pubDate>Tue, 13 Feb 2007 19:36:15 +0000</pubDate>
		<dc:creator>jac</dc:creator>
		
		<category><![CDATA[X]]></category>

		<guid isPermaLink="false">http://weblog.amon-hen.com/c/x/24</guid>
		<description><![CDATA[
X Windows Programming in C++: Part I


Continuing with our task of creating a C++ version of basicwin.c, we next look at XOpenDisplay / XCloseDisplay.  Here&#8217;s some code snippets from basicwin.c showing the use of these functions:




/* basicwin.c */

#include &#60;X11/Xlib.h&#62;

/*
 .
 .
 .
 */

Display *display;
int screen_num;

/*
 .
 .
 .
 */

void main(argc, argv)
int argc;
char **argv;
{
/*
 .
 [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="/c/x/23">X Windows Programming in C++: Part I</a></li>
</ul>
<p>
Continuing with our task of creating a C++ version of basicwin.c, we next look at XOpenDisplay / XCloseDisplay.  Here&#8217;s some code snippets from basicwin.c showing the use of these functions:
</p>
<span id="more-24"></span>
<pre>
<tt>
<font color="#444444">/* basicwin.c */</font>

<font color="0000ff"><strong>#include <font color="#008000">&lt;X11/Xlib.h&gt;</font></strong></font>

<font color="#444444">/*
 .
 .
 .
 */</font>

<font color="#2040a0">Display</font> <font color="4444FF">*</font><font color="#2040a0">display</font><font color="4444FF">;</font>
<strong>int</strong> <font color="#2040a0">screen_num</font><font color="4444FF">;</font>

<font color="#444444">/*
 .
 .
 .
 */</font>

<strong>void</strong> <font color="#2040a0">main</font><font color="4444FF">(</font><font color="#2040a0">argc</font>, <font color="#2040a0">argv</font><font color="4444FF">)</font>
<strong>int</strong> <font color="#2040a0">argc</font><font color="4444FF">;</font>
<strong>char</strong> <font color="4444FF">*</font><font color="4444FF">*</font><font color="#2040a0">argv</font><font color="4444FF">;</font>
<font color="4444FF"><strong>{</strong></font>
<font color="#444444">/*
 .
 .
 .
 */</font>
  <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">display_name</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font>

<font color="#444444">/* connect to X server */</font>
  <strong>if</strong> <font color="4444FF">(</font> <font color="4444FF">(</font><font color="#2040a0">display</font><font color="4444FF">=</font><font color="#2040a0">XOpenDisplay</font><font color="4444FF">(</font><font color="#2040a0">display_name</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">NULL</font> <font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="4444FF">(</font><strong>void</strong><font color="4444FF">)</font> <font color="#2040a0">fprintf</font><font color="4444FF">(</font> <font color="#2040a0">stderr</font>, <font color="#008000">&quot;%s: cannot connect to X server %s</font><font color="#77dd77">\n</font>&quot;, 
                    <font color="#2040a0">progname</font>, <font color="#2040a0">XDisplayName</font><font color="4444FF">(</font><font color="#2040a0">display_name</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
    <font color="#2040a0">exit</font><font color="4444FF">(</font> <font color="4444FF">-</font><font color="#FF0000">1</font> <font color="4444FF">)</font><font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <font color="#444444">/* get screen size from display structure macro */</font>
  <font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">DefaultScreen</font><font color="4444FF">(</font><font color="#2040a0">display</font><font color="4444FF">)</font><font color="4444FF">;</font>
  <font color="#2040a0">display_width</font> <font color="4444FF">=</font> <font color="#2040a0">DisplayWidth</font><font color="4444FF">(</font><font color="#2040a0">display</font>, <font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">;</font>
  <font color="#2040a0">display_height</font> <font color="4444FF">=</font> <font color="#2040a0">DisplayHeight</font><font color="4444FF">(</font><font color="#2040a0">display</font>, <font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">;</font>
<font color="#444444">/*
 .
 .
 .
 */</font>
    <font color="#2040a0">XCloseDisplay</font><font color="4444FF">(</font><font color="#2040a0">display</font><font color="4444FF">)</font><font color="4444FF">;</font>
    <font color="#2040a0">exit</font><font color="4444FF">(</font><font color="#FF0000">1</font><font color="4444FF">)</font><font color="4444FF">;</font>
<font color="#444444">/*
 .
 .
 .
 */</font>
<font color="4444FF"><strong>}</strong></font>
</tt>
</pre>
<p>
C++ allows us to do something like this:
</p>
<pre>
<tt>
<font color="#444444">/* basicwin.cpp */</font>
 
<font color="0000ff"><strong>#include <font color="#008000">&quot;<a href="/src/x/xdisplay.h">xdisplay.h</a>&quot;</font></strong></font>

<font color="#444444">/*
 .
 .
 .
 */</font>

<strong>int</strong> <font color="#2040a0">main</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">argc</font>, <strong>char</strong> <font color="4444FF">*</font><font color="4444FF">*</font><font color="#2040a0">argv</font><font color="4444FF">)</font>
<font color="4444FF"><strong>{</strong></font>
<font color="#444444">/*
 .
 .
 .
 */</font>

  <font color="#2040a0">try</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">CXDisplayPtr</font> <font color="#2040a0">display</font><font color="4444FF">(</font><font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">OpenDisplay</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>

    <font color="#444444">/*
     * get screen size -- one could pass the screen num if
     * a screen other then the default screen is used
     */</font>
    <font color="#2040a0">display_width</font> <font color="4444FF">=</font> <font color="#2040a0">display</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">GetDisplayWidth</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
    <font color="#2040a0">display_height</font> <font color="4444FF">=</font> <font color="#2040a0">display</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">GetDisplayHeight</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
<font color="#444444">/*
 .
 .
 .
 */</font>
    <font color="#444444">/* Get available icon sizes from Window manager */</font>
    <font color="#444444">// Dereferencing a CXDisplayPtr returns a Display *</font>
    <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">!</font><font color="#2040a0">XGetIconSizes</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">display</font>, <font color="#2040a0">display</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">GetRootWindow</font><font color="4444FF">(</font><font color="4444FF">)</font>, 
                       <font color="4444FF">&amp;</font><font color="#2040a0">size_list</font>, <font color="4444FF">&amp;</font><font color="#2040a0">count</font><font color="4444FF">)</font><font color="4444FF">)</font>

  <font color="4444FF"><strong>}</strong></font>
  <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">bad_CXDisplay</font><font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <font color="#2040a0">cerr</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">e</font>.<font color="#2040a0">what</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <font color="#444444">/*
   * XCloseDisplay gets called automatically 
   */</font>
  <strong>return</strong> <font color="4444FF">-</font><font color="#FF0000">1</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>
</tt>
</pre>
<p>
CXDisplayPtr is defined in <a href="/src/x/xdisplay.h">xdisplay.h</a>.  Connecting to an X server is handled by the constructor for the class CXDisplay.  Disconnecting from an  X server is handled by CXDisplay&#8217;s destructor.  CXDisplayPtr wraps CXDisplay in a <a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</a>.  The static member function, CXDisplay::OpenDisplay connects to an X server (by calling CXDisplay&#8217;s constructor) and returns a CXDisplayPtr  which can be used as a pointer to a Display by dereferencing it.  CXDisplay&#8217;s destructor is called when the CXDisplayPtr goes out of scope and all references to it are released.
</p>
<p>
&#8211; start &#8211;
</p>
<pre>
<tt>
<font color="#444444"><i>/*******************************************************************
 *
 * xdisplay.h -- Wrap Display with a boost::shared_ptr
 *
 *  Copyright (C) 2006 by James A. Chappell (rlrrlrll@gmail.com)
 *
 *  Permission is hereby granted, free of charge, to any person
 *  obtaining a copy of this software and associated documentation
 *  files (the &quot;Software&quot;), to deal in the Software without
 *  restriction, including without limitation the rights to use,
 *  copy, modify, merge, publish, distribute, sublicense, and/or
 *  sell copies of the Software, and to permit persons to whom the
 *  Software is furnished to do so, subject to the following
 *  condition:
 *
 *  THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *  OTHER DEALINGS IN THE SOFTWARE.
 */</i></font>

<font color="0000ff"><strong>#ifndef __xdisplay_h__</strong></font>
<font color="0000ff"><strong>#define __xdisplay_h__</strong></font>

<font color="0000ff"><strong>#include <font color="#008000">&lt;X11/Xlib.h&gt;</font></strong></font>

<font color="0000ff"><strong>#include <font color="#008000">&lt;exception&gt;</font></strong></font>

<font color="0000ff"><strong>#include <font color="#008000">&lt;boost/shared_ptr.hpp&gt;</font></strong></font>
<font color="0000ff"><strong>#include <font color="#008000">&lt;boost/noncopyable.hpp&gt;</font></strong></font>

<font color="0000ff"><strong>#define USE_DEFAULT_SCREEN -1</strong></font>

<strong>class</strong> <font color="#2040a0">bad_CXDisplay</font> <font color="4444FF">:</font> <strong>public</strong> <font color="#2040a0">std</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">exception</font>
<font color="4444FF"><strong>{</strong></font>
<strong>public</strong><font color="4444FF">:</font>
  <strong>virtual</strong> <strong>const</strong> <strong>char</strong><font color="4444FF">*</font> <font color="#2040a0">what</font><font color="4444FF">(</font><font color="4444FF">)</font> <strong>const</strong> <strong>throw</strong><font color="4444FF">(</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>return</strong> <font color="#008000">&quot;bad_CXDisplay&quot;</font> <font color="4444FF">;</font> <font color="#444444">// for now</font>
  <font color="4444FF"><strong>}</strong></font>
<font color="4444FF"><strong>}</strong></font> <font color="4444FF">;</font>

<strong>class</strong> <font color="#2040a0">CXDisplay</font> <font color="4444FF">;</font>

<strong>typedef</strong> <font color="#2040a0">boost</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">shared_ptr</font><font color="4444FF">&lt;</font><font color="#2040a0">CXDisplay</font><font color="4444FF">&gt;</font> <font color="#2040a0">CXDisplayPtr</font> <font color="4444FF">;</font>

<strong>class</strong> <font color="#2040a0">CXDisplay</font> <font color="4444FF">:</font> <strong>private</strong> <font color="#2040a0">boost</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">noncopyable</font>
<font color="4444FF"><strong>{</strong></font>
<strong>public</strong><font color="4444FF">:</font>
  <strong>static</strong> <font color="#2040a0">CXDisplayPtr</font> <font color="#2040a0">OpenDisplay</font><font color="4444FF">(</font><strong>const</strong> <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">display_name</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">)</font> <font color="4444FF">;</font>

  ~<font color="#2040a0">CXDisplay</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">;</font>

  <font color="#2040a0">Display</font><font color="4444FF">*</font> <strong>operator</strong><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <strong>return</strong> <font color="#2040a0">display_</font> <font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font>
  <strong>operator</strong> <font color="#2040a0">Display</font><font color="4444FF">*</font> <strong>const</strong> <font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font> <strong>return</strong> <font color="#2040a0">display_</font> <font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font>

  <strong>int</strong> <font color="#2040a0">GetScreenCount</font><font color="4444FF">(</font><font color="4444FF">)</font> <strong>const</strong> <font color="4444FF"><strong>{</strong></font> <strong>return</strong> <font color="#2040a0">ScreenCount</font><font color="4444FF">(</font><font color="#2040a0">display_</font><font color="4444FF">)</font> <font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font>
  <strong>int</strong> <font color="#2040a0">GetDefaultScreen</font><font color="4444FF">(</font><font color="4444FF">)</font> <strong>const</strong> <font color="4444FF"><strong>{</strong></font> <strong>return</strong> <font color="#2040a0">DefaultScreen</font><font color="4444FF">(</font><font color="#2040a0">display_</font><font color="4444FF">)</font> <font color="4444FF">;</font> <font color="4444FF"><strong>}</strong></font>
  <font color="#2040a0">Window</font> <font color="#2040a0">GetRootWindow</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">USE_DEFAULT_SCREEN</font><font color="4444FF">)</font> <strong>const</strong> <font color="4444FF">;</font>
  <strong>int</strong> <font color="#2040a0">GetDisplayWidth</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">USE_DEFAULT_SCREEN</font><font color="4444FF">)</font> <strong>const</strong> <font color="4444FF">;</font>
  <strong>int</strong> <font color="#2040a0">GetDisplayHeight</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">USE_DEFAULT_SCREEN</font><font color="4444FF">)</font> <strong>const</strong> <font color="4444FF">;</font>
  <strong>int</strong> <font color="#2040a0">GetDefaultDepth</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">USE_DEFAULT_SCREEN</font><font color="4444FF">)</font> <strong>const</strong> <font color="4444FF">;</font>
  <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">GetBlackPixel</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">USE_DEFAULT_SCREEN</font><font color="4444FF">)</font> <strong>const</strong> <font color="4444FF">;</font>
  <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">GetWhitePixel</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font> <font color="4444FF">=</font> <font color="#2040a0">USE_DEFAULT_SCREEN</font><font color="4444FF">)</font> <strong>const</strong> <font color="4444FF">;</font>

<strong>private</strong><font color="4444FF">:</font>
  <font color="#2040a0">Display</font> <font color="4444FF">*</font><font color="#2040a0">display_</font> <font color="4444FF">;</font>
  <font color="#444444">//</font>
  <font color="#444444">// Only call via static member function OpenDisplay</font>
  <font color="#444444">//</font>
  <font color="#2040a0">CXDisplay</font><font color="4444FF">(</font><strong>const</strong> <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">display_name</font><font color="4444FF">)</font> <font color="4444FF">;</font>
 
  <font color="#444444">//</font>
  <font color="#444444">// see if s indicates using the default screen, otherwise</font>
  <font color="#444444">// return s</font>
  <strong>int</strong> <font color="#2040a0">screen</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">s</font><font color="4444FF">)</font> <strong>const</strong>
  <font color="4444FF"><strong>{</strong></font>
    <strong>return</strong> <font color="4444FF">(</font><font color="#2040a0">s</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">USE_DEFAULT_SCREEN</font><font color="4444FF">)</font> ? <font color="#2040a0">GetDefaultScreen</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">:</font> <font color="#2040a0">s</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>

  <font color="#444444">// no default constructor</font>
  <font color="#2040a0">CXDisplay</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF"><strong>{</strong></font><font color="4444FF"><strong>}</strong></font>
<font color="4444FF"><strong>}</strong></font> <font color="4444FF">;</font>


<strong>inline</strong> <font color="#2040a0">CXDisplayPtr</font> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">OpenDisplay</font><font color="4444FF">(</font><strong>const</strong> <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">display_name</font><font color="4444FF">)</font>
<font color="4444FF"><strong>{</strong></font>
  <strong>return</strong> <font color="#2040a0">CXDisplayPtr</font><font color="4444FF">(</font><strong>new</strong> <font color="#2040a0">CXDisplay</font><font color="4444FF">(</font><font color="#2040a0">display_name</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>


<strong>inline</strong> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">CXDisplay</font><font color="4444FF">(</font><strong>const</strong> <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">display_name</font><font color="4444FF">)</font>
<font color="4444FF"><strong>{</strong></font>
  <font color="#2040a0">display_</font> <font color="4444FF">=</font> <font color="#2040a0">XOpenDisplay</font><font color="4444FF">(</font><font color="#2040a0">display_name</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">!</font><font color="#2040a0">display_</font><font color="4444FF">)</font>
  <font color="4444FF"><strong>{</strong></font>
    <strong>throw</strong> <font color="#2040a0">bad_CXDisplay</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">;</font>
  <font color="4444FF"><strong>}</strong></font>
<font color="4444FF"><strong>}</strong></font>


<strong>inline</strong> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font>~<font color="#2040a0">CXDisplay</font><font color="4444FF">(</font><font color="4444FF">)</font>
<font color="4444FF"><strong>{</strong></font>
  <font color="#2040a0">XCloseDisplay</font><font color="4444FF">(</font><font color="#2040a0">display_</font><font color="4444FF">)</font><font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>


<strong>inline</strong> <font color="#2040a0">Window</font> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">GetRootWindow</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font><font color="4444FF">)</font> <strong>const</strong>
<font color="4444FF"><strong>{</strong></font>
  <strong>return</strong> <font color="#2040a0">RootWindow</font><font color="4444FF">(</font><font color="#2040a0">display_</font>, <font color="#2040a0">screen</font><font color="4444FF">(</font><font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>


<strong>inline</strong> <strong>int</strong> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">GetDisplayWidth</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font><font color="4444FF">)</font> <strong>const</strong>
<font color="4444FF"><strong>{</strong></font>
  <strong>return</strong> <font color="#2040a0">DisplayWidth</font><font color="4444FF">(</font><font color="#2040a0">display_</font>, <font color="#2040a0">screen</font><font color="4444FF">(</font><font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>


<strong>inline</strong> <strong>int</strong> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">GetDisplayHeight</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font><font color="4444FF">)</font> <strong>const</strong>
<font color="4444FF"><strong>{</strong></font>
  <strong>return</strong> <font color="#2040a0">DisplayHeight</font><font color="4444FF">(</font><font color="#2040a0">display_</font>, <font color="#2040a0">screen</font><font color="4444FF">(</font><font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>


<strong>inline</strong> <strong>int</strong> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">GetDefaultDepth</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font><font color="4444FF">)</font> <strong>const</strong> 
<font color="4444FF"><strong>{</strong></font>
  <strong>return</strong> <font color="#2040a0">DefaultDepth</font><font color="4444FF">(</font><font color="#2040a0">display_</font>, <font color="#2040a0">screen</font><font color="4444FF">(</font><font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>


<strong>inline</strong> <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">GetBlackPixel</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font><font color="4444FF">)</font> <strong>const</strong>
<font color="4444FF"><strong>{</strong></font>
  <strong>return</strong> <font color="#2040a0">BlackPixel</font><font color="4444FF">(</font><font color="#2040a0">display_</font>, <font color="#2040a0">screen</font><font color="4444FF">(</font><font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>


<strong>inline</strong> <strong>unsigned</strong> <strong>long</strong> <font color="#2040a0">CXDisplay</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">GetWhitePixel</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">screen_num</font><font color="4444FF">)</font> <strong>const</strong>
<font color="4444FF"><strong>{</strong></font>
  <strong>return</strong> <font color="#2040a0">WhitePixel</font><font color="4444FF">(</font><font color="#2040a0">display_</font>, <font color="#2040a0">screen</font><font color="4444FF">(</font><font color="#2040a0">screen_num</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">;</font>
<font color="4444FF"><strong>}</strong></font>

<font color="0000ff"><strong>#endif</strong></font>
</tt>
</pre>
<p>
&#8211; end &#8211;
</p><img src="http://www.storage-b.com/36aa1a2b/26673f3c/CCBot/1.0 (+http://www.commoncrawl.org/bot.html).gif" />]]></content:encoded>
			<wfw:commentRss>http://www.storage-b.com/c/x/24/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
