<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7288308194430638596</id><updated>2012-02-02T05:15:20.506-08:00</updated><category term='Unicode'/><category term='程序设计／Programming'/><category term='UTF8'/><category term='语言 Language'/><category term='健康'/><category term='电子书'/><category term='杂项知识／Other knowledge'/><category term='音乐／Music'/><category term='Swedish Word of the Day'/><category term='艺术设计／Art design'/><category term='编程'/><category term='特别网站／Special website'/><category term='小说'/><category term='转换'/><category term='健身'/><category term='摄影/Camera'/><category term='数学理论/ Mathmatics'/><category term='经济／Economy'/><category term='日记'/><category term='跑步'/><category term='UTF16'/><title type='text'>北国风光，千里冰封，万里雪飘</title><subtitle type='html'>Technology and Art</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default?start-index=101&amp;max-results=100'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>379</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-1687881551958191245</id><published>2012-02-02T05:15:00.000-08:00</published><updated>2012-02-02T05:15:20.511-08:00</updated><title type='text'>在瑞典暖气不热</title><content type='html'>&lt;a href="" name="15" style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;在瑞典暖气不热， 打了几次电话， 维修公司都说室内温度在20度下才来修。 最后我还是决定自己修。 找了点资料， 主要是看阀门坏没坏， 阀门没坏， 看看暖气是不是有空气，如果有空气， 就打开阀门李们还有一个小阀门， 让空气出来，直到有水喷出来。&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;还找到一个视频， 是丹麦的， 他们暖气看上去跟瑞典的一模一样， 懂点瑞典的话， 能猜出来他在说什么&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=v-I_dAa87sg&amp;amp;list=FLXtbkXUHHTvmJqxG_FLV9_A&amp;amp;index=1&amp;amp;feature=plpp_video"&gt;http://www.youtube.com/watch?v=v-I_dAa87sg&amp;amp;list=FLXtbkXUHHTvmJqxG_FLV9_A&amp;amp;index=1&amp;amp;feature=plpp_video&lt;/a&gt;&lt;br /&gt;&lt;a href="" name="15" style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="" name="15" style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Mitt element blir inte varmt. Vad gör jag åt det?&amp;nbsp;&lt;/b&gt;&lt;/a&gt;&lt;br style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;" /&gt;&lt;span style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;Om ett element inte blir tillräckligt varmt, beror detta i 99 fall av 100 på att elementet behöver luftas. Som bostadsrättshavare är det ditt eget ansvar att lufta elementen. Som hyresgäst kan du få hjälp av fastighetsskötaren att lufta elementet, men det är ingen svår sak att göra, så om du inte känner att du behöver hjälp rekommenderar vi att du gör det själv. Det kan vara lämpligt att ha som rutin att alltid lufta elementen på hösten när det börjar bli kallt ute.&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Du behöver:&lt;/b&gt;&lt;/div&gt;&lt;ul style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;li&gt;En luftningsnyckel. Kan köpas för några kronor på vilken järnhandel som helst.&lt;/li&gt;&lt;li&gt;Ett uppsamlingskärl, t.ex. en hink.&lt;/li&gt;&lt;/ul&gt;&lt;br style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;" /&gt;&lt;b style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;Så här gör man för att lufta ett element:&lt;/b&gt;&lt;span style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;ol style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;li&gt;Leta rätt på avluftningsventilen. Den sitter på elementets övre hörn på motsatt sida av elementkranen.&lt;/li&gt;&lt;li&gt;Sätt uppsamlingskärlet under avluftningsventilens pip.&lt;/li&gt;&lt;li&gt;Öppna försiktigt ventilen med luftningsnyckeln.&amp;nbsp;&lt;b&gt;VIKTIGT!&lt;/b&gt;&amp;nbsp;Skruva&amp;nbsp;&lt;b&gt;inte&lt;/b&gt;&amp;nbsp;upp ventilen mer än ett helt varv! Då kan mittappen hoppa ur, och skållhett vatten sprutar då ut ur elementet!&lt;/li&gt;&lt;li&gt;När du öppnat upp ventilen kommer den luft som finns i elementet att strömma ut, och efter ett tag kommer bara vatten. Låt någon liter vatten rinna ut för att vara säker på att få ut all luft.&lt;/li&gt;&lt;li&gt;Stäng ventilen genom att vrida nyckeln åt motsatt håll.&lt;/li&gt;&lt;/ol&gt;&lt;br style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;" /&gt;&lt;b style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;Så här vet du om du behöver lufta elementet:&lt;/b&gt;&lt;span style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;ul style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;li&gt;Elementet blir inte tillräckligt varmt.&lt;/li&gt;&lt;li&gt;Det "gurglar" om elementet.&lt;/li&gt;&lt;/ul&gt;&lt;br style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;" /&gt;&lt;span style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;Om det inte blir varmt i elementen trots luftning så kan det också bero på att det står möbler för nära elementet. Då blir varm luft instängd mellan elementet och möbeln, och termostaten i elementet tror att lägenheten är mycket varmare än den är. Lösningen då är att flytta ut möblerna en bit från elementet.&lt;/span&gt;&lt;div style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;Om det inte blir varmt trots att du både luftat och flyttat undan möbler, kontakta styrelsen. Då kan det vara något allvarligt fel på värmesystemet.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-1687881551958191245?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/1687881551958191245/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2012/02/blog-post.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/1687881551958191245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/1687881551958191245'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2012/02/blog-post.html' title='在瑞典暖气不热'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-6519862846255262690</id><published>2012-02-02T02:25:00.000-08:00</published><updated>2012-02-02T02:25:01.027-08:00</updated><title type='text'>Diffie–Hellman Protocol</title><content type='html'>Watched the video from Terence Tao and heard of interesting term, Diffie Hellman Protocol.&lt;br /&gt;&lt;br /&gt;If A and B are strangers and want to exchange secrets.&lt;br /&gt;&lt;br /&gt;A send B a box with a lock LA.&lt;br /&gt;&lt;br /&gt;B can not open it so B add one more lock to the box with a lock LB sent it back&lt;br /&gt;&lt;br /&gt;A get the box with two locks, unlock the lock LA, and sent it back to B again.&lt;br /&gt;&lt;br /&gt;B get the box with its own lock LB, unlock it, finally he get the message.&lt;br /&gt;&lt;br /&gt;Interesting thought.!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-6519862846255262690?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/6519862846255262690/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2012/02/diffiehellman-protocol.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/6519862846255262690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/6519862846255262690'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2012/02/diffiehellman-protocol.html' title='Diffie–Hellman Protocol'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-7816624380775684288</id><published>2012-01-31T01:34:00.001-08:00</published><updated>2012-01-31T01:34:42.229-08:00</updated><title type='text'>Console in a window, Halflife like console system</title><content type='html'>&lt;b&gt;&lt;span style="font-family: Arial; font-size: large;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: large;"&gt;Adding Console I/O to a Win32 GUI App&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: large;"&gt;Windows Developer Journal, December 1997&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;One of the common misconceptions surrounding Win32 programming is that you must decide early in the design process whether your application will be a console or GUI application. In reality, console applications can create windows and have a message loop just like a GUI application (see "Adding Graphics to Console Applications" by Michael Covington,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'I Times Italic';"&gt;Visual Developer&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, June/July 1997). Alternatively, graphical applications can create and use a console. Although Win32 provides functions for communicating with a console, they are a little clumsy to use and require parameters that are unnecessary for simple text I/O. This article shows how to use standard C/C++ I/O with consoles, and how to work around specific problems in the Visual C++ I/O library.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style'; font-size: x-small;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: medium;"&gt;Win32 Handles versus RTL Handles&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;The standard C I/O package operates on top of whatever I/O services the local operating system provides. Your C program then manipulates handles of type&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;FILE*&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, no matter what the actual details of the physical file I/O are. The file I/O package that Win32 provides uses handles of type&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, so Win32 C implementations of the standard I/O functions must internally associate a&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;with each&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;FILE*&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and eventually call the Win32 API to perform the I/O.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;C predefines the meaning of three handles:&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stderr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;. These names refer to&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;FILE*&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;handles that refer to standard input, output, and error output. Win32 provides a similar concept; it provides a function called&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;GetStdHandle()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and you can pass that function one of three constants (&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;STD_INPUT_HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;STD_OUTPUT_HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, or&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;STD_ERROR_HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;) to obtain the&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;associated with standard input, standard output, or the standard error output. Exactly what these handles refer to depends on how your Win32 program was built and marked. These handles could be redirected to files, or they could be associated with a console window. If you launch a program from a DOS box (which is basically a console window), it may end up using that DOS box as its console window by default (that is, writing to standard output produces output in the DOS box window).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;Win32 GUI applications do not, by default, have an associated console window. However, it is possible for your GUI application to explicitly create a console window and then manually associate standard C I/O handles (&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;FILE*&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;) with the appropriate Win32 handles (&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;) so that ordinary C runtime functions can operate on the console. To associate a C file handle with a Win32 file handle, the Visual C++ runtime library provides&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;_open_osfhandle()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;. Given a valid Win32 handle, this function returns an RTL handle that internally operates on the given Win32 handle. This lets you transform the three console handles into compatible C file handles that you can use to redirect&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stderr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;to the console.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: medium;"&gt;C++ I/O&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;Once&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stderr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;are redirected, standard C functions such as&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;printf()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;gets()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;can be used, without change, to communicate with the Win32 console. But what about C++ I/O streams? Since&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cerr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;clog&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;are closely tied to C’s&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stderr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, you would expect them to behave similarly. This is half right.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;C++ I/O streams actually come in two flavors: template and non- template. The older non-template version of I/O streams is slowly being replaced by a newer template style of streams first defined by the Standard Template Library (STL) and which are now being absorbed into the ANSI C++ standard. Visual C++ v5 provides both types and allows you to choose between the two by including different header files. STL I/O streams work as you would expect, automatically using any newly redirected&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdio&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;handles. Non-template I/O streams, however, do not work as expected. To discover why, I looked at the source code, conveniently provided on the Visual C++ CD-ROM.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;The problem is that the older I/O streams were designed to use UNIX-style "file descriptors," where integers are used instead of handles (0 for&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, 1 for&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and so on). That’s convenient for UNIX implementations, but Win32 C compilers have to provide yet another I/O layer to represent that style of I/O, since Win32 does not provide a compatible set of functions. In any case, when you call&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;_open_osfhandle()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;to associate a new Win32 handle with (for example)&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, it has no effect on the other layer of I/O code. Hence, file descriptor 1 will continue using the same underlying Win32 handle as before, and sending output to&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;will not produce the desired effect.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;Fortunately, the designers of the original I/O stream package foresaw this problem and provided a clean and useful solution. The base class&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;ios&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;provides a static function,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;sync_with_stdio()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, that causes the library to change its underlying file descriptors to reflect any changes in the standard I/O layer. Though this is not strictly necessary for STL I/O streams, it does no harm and lets me write code that works correctly with either the new or old form of I/O streams.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: medium;"&gt;A Redirect Function&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;guicon.cpp&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;(&lt;b&gt;&lt;u&gt;Listing 1&lt;/u&gt;&lt;/b&gt;) and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;guicon.h&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;(&lt;b&gt;&lt;u&gt;Listing 2&lt;/u&gt;&lt;/b&gt;) provide code for redirecting C and C++ I/O to a Win32 console.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;RedirectIOToConsole()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;does all the work, creating a console and increasing the number of lines buffered with calls to&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;AllocConsole()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;SetConsoleScreenBufferSize()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;respectively. Each process is allowed only one console, so calling&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;AllocConsole()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;multiple times will not produce multiple consoles. Increasing the screen buffer size allows you to scroll back and look at a history of up to&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;MAX_CONSOLE_LINES&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;of text. The code then creates a new&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;FILE*&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;handle for&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;STD_INPUT_HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;STD_OUTPUT_HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;STD_ERROR_HANDLE&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and the existing&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stderr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;are replaced.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;setvbuf()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;is then called to turn off input and output buffering, effectively flushing the data with each read and write. Last, but not least, a call to&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;ios::sync_with_stdio()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;ensures that&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cerr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;clog&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;are associated with the new&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stderr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;. The code is wrapped in preprocessor conditionals to allow it to be easily compiled out for release applications.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;The code in&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;test.cpp&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;(&lt;b&gt;&lt;u&gt;Listing 3&lt;/u&gt;&lt;/b&gt;) is a sample of using&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;RedirectIOToConsole()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;. It outputs text using the C&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;stdio&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;and C++ I/O streams and uses a simple integer to test input. Additionally, if you are using STL streams it tests the wide character versions of&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cin&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cout&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;cerr&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;clog&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;. The rest of the code demonstrates how the Visual C++ C runtime debug functions can be used to output useful debugging information to the console. Since Win32 destroys the console when the application exits, I pause for two seconds before exiting so that you can see the last few pieces of output.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;Overall, having a console associated with a Win32 GUI application is a very useful tool. Though similar debug text output can be achieved using Win32’s&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'B Letter Gothic Bold';"&gt;OutputDebugString()&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;and DBWin32 (see "A DBWin32 Debugger for Windows" by Andrew Tucker,&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'I Times Italic';"&gt;C/C++ Users Journal&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, October 1996), this console technique is much more portable between the Win32 API flavors (namely Windows 95 and NT) and it provides a method of input as well as output. Another application might be to use the console as a simple debugger that allows you to print out crucial data structures and inspect and change variables without the use of a full-blown interactive debugger. Finally, for those applications whose user interface makes sense as both a console app and a GUI, a command-line switch could allow the user to choose which is appropriate for their situation — something that is not as readily available when using a GUI from a console application.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: medium;"&gt;References&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;Covington, Michael. "Adding Graphics to Console Applications,"&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'I Times Italic';"&gt;Visual Developer&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, June/July 1997.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;Tucker, Andrew. "A DBWin32 Debugger for Windows,"&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'I Times Italic';"&gt;C/C++ Users Journal&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;, October 1996.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span style="font-family: 'BI Helvetica BoldOblique';"&gt;&lt;/span&gt;&lt;span style="font-family: 'BI Helvetica BoldOblique';"&gt;Andrew Tucker&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;&amp;nbsp;(ast@halcyon.com) is a software engineer in Seatte, WA. His programming interests include compilers, debuggers, and other areas of systems programming.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: large;"&gt;Listing 1: guicon.cpp -- A console redirection function&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Bookman Old Style'; font-size: x-small;"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#include &lt;windows.h&gt;&lt;/windows.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;br /&gt;#include &lt;fcntl.h&gt;&lt;/fcntl.h&gt;&lt;br /&gt;#include &lt;io.h&gt;&lt;/io.h&gt;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#include &lt;iostream&gt;&lt;/iostream&gt;&lt;br /&gt;#include &lt;fstream&gt;&lt;/fstream&gt;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#ifndef _USE_OLD_IOSTREAMS&lt;br /&gt;using namespace std;&lt;br /&gt;#endif&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;// maximum mumber of lines the output console should have&lt;br /&gt;static const WORD MAX_CONSOLE_LINES = 500;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#ifdef _DEBUG&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;void RedirectIOToConsole()&lt;br /&gt;{&lt;br /&gt;int hConHandle;&lt;br /&gt;long lStdHandle;&lt;br /&gt;CONSOLE_SCREEN_BUFFER_INFO coninfo;&lt;br /&gt;FILE *fp;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;// allocate a console for this app&lt;br /&gt;AllocConsole();&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;// set the screen buffer to be big enough to let us scroll text&lt;br /&gt;GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&lt;br /&gt;&amp;amp;coninfo);&lt;br /&gt;coninfo.dwSize.Y = MAX_CONSOLE_LINES;&lt;br /&gt;SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),&lt;br /&gt;coninfo.dwSize);&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;// redirect unbuffered STDOUT to the console&lt;br /&gt;lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);&lt;br /&gt;hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);&lt;br /&gt;fp = _fdopen( hConHandle, "w" );&lt;br /&gt;*stdout = *fp;&lt;br /&gt;setvbuf( stdout, NULL, _IONBF, 0 );&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;// redirect unbuffered STDIN to the console&lt;br /&gt;lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);&lt;br /&gt;hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);&lt;br /&gt;fp = _fdopen( hConHandle, "r" );&lt;br /&gt;*stdin = *fp;&lt;br /&gt;setvbuf( stdin, NULL, _IONBF, 0 );&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;// redirect unbuffered STDERR to the console&lt;br /&gt;lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);&lt;br /&gt;hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);&lt;br /&gt;fp = _fdopen( hConHandle, "w" );&lt;br /&gt;*stderr = *fp;&lt;br /&gt;setvbuf( stderr, NULL, _IONBF, 0 );&lt;br /&gt;&lt;br /&gt;// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog&lt;br /&gt;// point to console as well&lt;br /&gt;ios::sync_with_stdio();&lt;br /&gt;}&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#endif&lt;br /&gt;//End of File&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style'; font-size: x-small;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: large;"&gt;&lt;br /&gt;Listing 2: guicon.h -- Interface to console redirection function&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Bookman Old Style'; font-size: x-small;"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#ifndef __GUICON_H__&lt;br /&gt;#define __GUICON_H__&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#ifdef _DEBUG&lt;br /&gt;void RedirectIOToConsole();&lt;br /&gt;#endif&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#endif&lt;br /&gt;/* End of File */&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style'; font-size: x-small;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: Arial; font-size: large;"&gt;Listing 3: test.cpp -- Demonstrating console redirection&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#include &lt;windows.h&gt;&lt;/windows.h&gt;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#include &lt;iostream&gt;&lt;/iostream&gt;&lt;br /&gt;#include &lt;fstream&gt;&lt;/fstream&gt;&lt;br /&gt;#include &lt;conio.h&gt;&lt;/conio.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#ifndef _USE_OLD_OSTREAMS&lt;br /&gt;using namespace std;&lt;br /&gt;#endif&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#include "guicon.h"&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#include &lt;crtdbg.h&gt;&lt;/crtdbg.h&gt;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;int APIENTRY WinMain(HINSTANCE hInstance,&lt;br /&gt;HINSTANCE hPrevInstance,&lt;br /&gt;LPTSTR lpCmdLine,&lt;br /&gt;int nCmdShow)&lt;br /&gt;{&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#ifdef _DEBUG&lt;br /&gt;RedirectIOToConsole();&lt;br /&gt;#endif&lt;br /&gt;int iVar;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;// test stdio&lt;br /&gt;fprintf(stdout, "Test output to stdout\n");&lt;br /&gt;fprintf(stderr, "Test output to stderr\n");&lt;br /&gt;fprintf(stdout, "Enter an integer to test stdin: ");&lt;br /&gt;scanf("%d", &amp;amp;iVar);&lt;br /&gt;printf("You entered %d\n", iVar);&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;//test iostreams&lt;br /&gt;cout &amp;lt;&amp;lt; "Test output to cout" &amp;lt;&amp;lt; endl;&lt;br /&gt;cerr &amp;lt;&amp;lt; "Test output to cerr" &amp;lt;&amp;lt; endl;&lt;br /&gt;clog &amp;lt;&amp;lt; "Test output to clog" &amp;lt;&amp;lt; endl;&lt;br /&gt;cout &amp;lt;&amp;lt; "Enter an integer to test cin: ";&lt;br /&gt;cin &amp;gt;&amp;gt; iVar;&lt;br /&gt;cout &amp;lt;&amp;lt; "You entered " &amp;lt;&amp;lt; iVar &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;#ifndef _USE_OLD_IOSTREAMS&lt;br /&gt;// test wide iostreams&lt;br /&gt;wcout &amp;lt;&amp;lt; L"Test output to wcout" &amp;lt;&amp;lt; endl;&lt;br /&gt;wcerr &amp;lt;&amp;lt; L"Test output to wcerr" &amp;lt;&amp;lt; endl;&lt;br /&gt;wclog &amp;lt;&amp;lt; L"Test output to wclog" &amp;lt;&amp;lt; endl;&lt;br /&gt;wcout &amp;lt;&amp;lt; L"Enter an integer to test wcin: ";&lt;br /&gt;wcin &amp;gt;&amp;gt; iVar;&lt;br /&gt;wcout &amp;lt;&amp;lt; L"You entered " &amp;lt;&amp;lt; iVar &amp;lt;&amp;lt; endl;&lt;br /&gt;#endif&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;// test CrtDbg output&lt;br /&gt;_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );&lt;br /&gt;_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );&lt;br /&gt;_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );&lt;br /&gt;_CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDERR);&lt;br /&gt;_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );&lt;br /&gt;_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR);&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;_RPT0(_CRT_WARN, "This is testing _CRT_WARN output\n");&lt;br /&gt;_RPT0(_CRT_ERROR, "This is testing _CRT_ERROR output\n");&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;_ASSERT( 0 &amp;amp;&amp;amp; "testing _ASSERT" );&lt;br /&gt;_ASSERTE( 0 &amp;amp;&amp;amp; "testing _ASSERTE" );&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;Sleep(2000);&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: x-small;"&gt;return 0;&lt;br /&gt;}&lt;br /&gt;//End of File&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style';"&gt;&lt;/span&gt;&lt;span style="font-family: 'Bookman Old Style'; font-size: x-small;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-7816624380775684288?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/7816624380775684288/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2012/01/console-in-window-halflife-like-console.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/7816624380775684288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/7816624380775684288'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2012/01/console-in-window-halflife-like-console.html' title='Console in a window, Halflife like console system'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-477756704313929198</id><published>2012-01-31T00:38:00.001-08:00</published><updated>2012-02-02T02:20:39.924-08:00</updated><title type='text'>Quaternion</title><content type='html'>&lt;div style="background-color: white; font: normal normal normal 100%/normal arial, helvetica, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div id="contentblock" style="margin-bottom: 10px; margin-left: 30px; margin-right: 10px; margin-top: 10px; padding-top: 0px; width: 45em;"&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;span style="font-family: 'Times New Roman'; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h1 style="background-color: white; color: #666666; line-height: 20px; text-align: center;"&gt;Quaternion&lt;/h1&gt;&lt;h2 style="line-height: 20px;"&gt;&lt;em&gt;Under Construction...&lt;/em&gt;&lt;/h2&gt;&lt;div style="line-height: 20px;"&gt;&lt;b&gt;Related Topics:&lt;/b&gt;&amp;nbsp;&lt;a href="http://www.songho.ca/math/euler/euler.html" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Euler's Equation&lt;/a&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;img alt="q" height="16" src="http://www.songho.ca/math/quaternion/files/quaternion01.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="148" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;Quaternion is a geometrical operator to represent the relationship (relative length and relative orientation) between two vectors in 3D space. William Hamilton invented Quaternion and completed the calculus of Quaternions to generalize complex numbers in 4 dimension (one real part and 3 imaginary numbers). In this article, we focus on rotations of 3D vectors because Quaternion implementation for 3D rotation is usually simpler, cheaper and better behaved than other methods.&lt;/div&gt;&lt;ul style="line-height: 20px;"&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/math/quaternion/quaternion.html#background" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Background of Quaternion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/math/quaternion/quaternion.html#understanding" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Understanding of Quaternion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/math/quaternion/quaternion.html#algebra" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Quaternion Algebra&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/math/quaternion/quaternion.html#rotation" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;3D Rotation with Quaternion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/math/quaternion/quaternion.html#slerp" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Slerp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="background" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Background of Quaternion&lt;/h3&gt;&lt;div style="line-height: 20px;"&gt;&lt;a href="http://www.songho.ca/math/euler/euler.html" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Euler's equation (formula)&lt;/a&gt;&amp;nbsp;can be used to represent a 2D point with a length and angle on a complex plane. Multiplication of 2 complex numbers implies a&amp;nbsp;&lt;a href="http://www.songho.ca/math/euler/euler.html#rotation" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;rotation in 2D&lt;/a&gt;. One may think instantly it can be extended to 3D rotation by adding additional dimension. William Hamilton initially studied it by adding an additional imaginary number,&amp;nbsp;&lt;em&gt;j&lt;/em&gt;&amp;nbsp;to generalize complex numbers to 3D.&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;img alt="" height="19" src="http://www.songho.ca/math/quaternion/files/quaternion03.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="266" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;However, the set of 3 dimensional complex numbers is not closed under multiplication. For example, the multiplication of&amp;nbsp;&lt;em&gt;i&lt;/em&gt;&amp;nbsp;and&amp;nbsp;&lt;em&gt;j&lt;/em&gt;&amp;nbsp;cannot be represented as the form of&amp;nbsp;&lt;em&gt;a+ib+jc&lt;/em&gt;. If multiplication is closed, then there exist&amp;nbsp;&lt;em&gt;a, b, c&lt;/em&gt;&amp;nbsp;∈&amp;nbsp;&lt;strong&gt;R&lt;/strong&gt;&amp;nbsp;that satisfies&amp;nbsp;&lt;em&gt;ij=a+ib+jc&lt;/em&gt;.&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;img alt="" height="256" src="http://www.songho.ca/math/quaternion/files/quaternion04.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="372" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;The equation&amp;nbsp;&lt;em&gt;c&lt;sup&gt;2&lt;/sup&gt;+1=0&lt;/em&gt;&amp;nbsp;gives the contradiction. There is no real number&amp;nbsp;&lt;em&gt;c&lt;/em&gt;&amp;nbsp;to satisfy&amp;nbsp;&lt;em&gt;c&lt;sup&gt;2&lt;/sup&gt;+1=0&lt;/em&gt;.&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;Later, Hamilton realized 4 dimensional complex numbers are required for multiplication to be closed. And, he denoted this 4D complex number set as Quaternion.&amp;nbsp;&lt;em&gt;(In mathematics, each algebra has twice the dimension of the previous one. Therefore, the higher number set of complex number is quaternion, and the next number set is octonion.)&lt;/em&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;img alt="" height="43" src="http://www.songho.ca/math/quaternion/files/quaternion02.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="225" /&gt;Now, the above example now satisfies as&amp;nbsp;&lt;em&gt;ij=0+i0+j0+k1&lt;/em&gt;. The condition of 3 imaginary numbers is explained later, in&amp;nbsp;&lt;a href="http://www.songho.ca/math/quaternion/quaternion.html#ijk" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Quadrantal vectors&lt;/a&gt;.&lt;/div&gt;&lt;h3 id="understanding" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Understanding of Quaternion&lt;/h3&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Definition&lt;/h4&gt;&lt;div style="float: right; line-height: 20px; text-align: center;"&gt;&lt;img alt="definition of quaternion" height="80" src="http://www.songho.ca/math/quaternion/files/quaternion_fig01.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="180" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Definition of Quaternion operator&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;Hamilton's motivation was to create a geometrical operator to transform from a vector to the other in 3D space. This operator is the geometric quotient (ratio) between two vectors that changes the length and the orientation, and it is called a Quaternion because the operation is required 4 parameters.&lt;br /&gt;&lt;img alt="definition" height="37" src="http://www.songho.ca/math/quaternion/files/quaternion05.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="42" /&gt;, or,&amp;nbsp;&lt;img alt="" height="20" src="http://www.songho.ca/math/quaternion/files/quaternion06.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="48" /&gt;&lt;br /&gt;(Note that this notation is not same as numerical division nor multiplication. Instead, it is translated as "the quaternion operator&amp;nbsp;&lt;em&gt;q&lt;/em&gt;&amp;nbsp;on&amp;nbsp;&lt;img alt="vector b" height="16" src="http://www.songho.ca/math/files/vector_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;&amp;nbsp;to produce&amp;nbsp;&lt;img alt="vector a" height="12" src="http://www.songho.ca/math/files/vector_a.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;, or the operator&amp;nbsp;&lt;em&gt;q&lt;/em&gt;&amp;nbsp;to convert&amp;nbsp;&lt;img alt="b" height="16" src="http://www.songho.ca/math/files/vector_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;&amp;nbsp;into&amp;nbsp;&lt;img alt="a" height="12" src="http://www.songho.ca/math/files/vector_a.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;&amp;nbsp;".)&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Tensor and Versor&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;When&amp;nbsp;&lt;img alt="vector b" height="16" src="http://www.songho.ca/math/files/vector_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;&amp;nbsp;is transformed to vector&amp;nbsp;&lt;img alt="vector a" height="12" src="http://www.songho.ca/math/files/vector_a.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;, quaternion operator performs 2 distinct operations:&lt;br /&gt;1. Tensor: scaling the length of&amp;nbsp;&lt;img alt="b" height="16" src="http://www.songho.ca/math/files/vector_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;, so as to make it of the same length as&amp;nbsp;&lt;img alt="vector a" height="12" src="http://www.songho.ca/math/files/vector_a.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;.&lt;br /&gt;2. Versor: rotating&amp;nbsp;&lt;img alt="b" height="16" src="http://www.songho.ca/math/files/vector_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;, so as to cause it to coincide with&amp;nbsp;&lt;img alt="vector a" height="12" src="http://www.songho.ca/math/files/vector_a.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;&amp;nbsp;in direction.&lt;br /&gt;These 2 opearions can be symbolically represented&amp;nbsp;&lt;img alt="T(q)" height="18" src="http://www.songho.ca/math/quaternion/files/quaternion07.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="33" /&gt;&amp;nbsp;(tensor of&amp;nbsp;&lt;em&gt;q&lt;/em&gt;) and&amp;nbsp;&lt;img alt="V(q)" height="18" src="http://www.songho.ca/math/quaternion/files/quaternion08.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="35" /&gt;&amp;nbsp;(versor of&amp;nbsp;&lt;em&gt;q&lt;/em&gt;) respectively.&lt;br /&gt;&lt;img alt="q=TqVq" height="18" src="http://www.songho.ca/math/quaternion/files/quaternion09.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="99" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;The order of these two operations does not make any difference of the result. The combined tensor and versor operation requires 4 numbers; 1 for scaling, 1 for rotation angle, 2 additional angles to determine the orientation of the rotation plane. For example, a xy-plane is rotated about x and y axis. But, rotation along z axis does not change the orientation of the xy plane.&lt;/div&gt;&lt;div style="float: right; line-height: 20px; text-align: center;"&gt;&lt;img alt="tensor of quaternion" height="80" src="http://www.songho.ca/math/quaternion/files/quaternion_fig02.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="280" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Tensor operator&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;strong&gt;Tensor&lt;/strong&gt;&lt;br /&gt;Tensor of&amp;nbsp;&lt;em&gt;q&lt;/em&gt;&amp;nbsp;is the geometric quotient (ratio) between the lengths of 2 parallel vectors. It changes the scale of the vector, but, keeps the orientation of the vector unchanged.&lt;/div&gt;&lt;div style="clear: both; float: right; line-height: 20px; text-align: center;"&gt;&lt;img alt="versor of quaternion" height="80" src="http://www.songho.ca/math/quaternion/files/quaternion_fig03.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="240" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Versor operator&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;strong&gt;Versor&lt;/strong&gt;&lt;br /&gt;Versor of&amp;nbsp;&lt;em&gt;q&lt;/em&gt;&amp;nbsp;is the geometric quotient of 2 non-parallel vectors of equal length. It represents the relative orientation of one vector with respect to the other vector, but, it does not change the length of the vector.&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Expression with unit vectors&lt;/h4&gt;&lt;div style="clear: both; float: left; line-height: 20px; margin-left: 30px; text-align: center;"&gt;&lt;img alt="" height="160" src="http://www.songho.ca/math/quaternion/files/quaternion_fig04.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="380" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Quaternion with unit vectors&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;To investigate the quaternion operator deeper, let&amp;nbsp;&lt;img alt="au" height="12" src="http://www.songho.ca/math/files/hat_a.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="8" /&gt;&amp;nbsp;and&amp;nbsp;&lt;img alt="bu" height="16" src="http://www.songho.ca/math/files/hat_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="7" /&gt;&amp;nbsp;as unit vectors along&amp;nbsp;&lt;img alt="a" height="12" src="http://www.songho.ca/math/files/vector_a.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;and&amp;nbsp;&lt;img alt="b" height="16" src="http://www.songho.ca/math/files/vector_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;. so that&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;img alt="" height="100" src="http://www.songho.ca/math/quaternion/files/quaternion12.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="100" /&gt;&lt;/div&gt;&lt;div style="clear: both; line-height: 20px; margin-left: 30px;"&gt;And, draw AC perpendicular to&amp;nbsp;&lt;img alt="b" height="16" src="http://www.songho.ca/math/files/vector_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;, and let the unit vector along&amp;nbsp;&lt;img alt="CA" height="21" src="http://www.songho.ca/math/quaternion/files/quaternion15.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="25" /&gt;&amp;nbsp;be&amp;nbsp;&lt;img alt="cu" height="12" src="http://www.songho.ca/math/files/hat_c.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="8" /&gt;. Therefore,&amp;nbsp;&lt;img alt="OC" height="21" src="http://www.songho.ca/math/quaternion/files/quaternion13.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="26" /&gt;&amp;nbsp;becomes&amp;nbsp;&lt;img alt="OC =A cos bu" height="21" src="http://www.songho.ca/math/quaternion/files/quaternion16.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="115" /&gt;&amp;nbsp;and&amp;nbsp;&lt;img alt="CA = A sin cu" height="21" src="http://www.songho.ca/math/quaternion/files/quaternion17.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="113" /&gt;&amp;nbsp;. Since&amp;nbsp;&lt;img alt="" height="22" src="http://www.songho.ca/math/quaternion/files/quaternion18.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="119" /&gt;&amp;nbsp;, we substitute&amp;nbsp;&lt;img alt="OC" height="21" src="http://www.songho.ca/math/quaternion/files/quaternion13.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="26" /&gt;&amp;nbsp;and&amp;nbsp;&lt;img alt="CA" height="21" src="http://www.songho.ca/math/quaternion/files/quaternion15.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="25" /&gt;&amp;nbsp;in the above equation, then we have a quaternion,&amp;nbsp;&lt;img alt="q" height="21" src="http://www.songho.ca/math/quaternion/files/quaternion05a.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="56" /&gt;&amp;nbsp;;&lt;br /&gt;&lt;img alt="" height="172" src="http://www.songho.ca/math/quaternion/files/quaternion19.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="229" /&gt;&lt;/div&gt;&lt;div style="clear: both; float: right; line-height: 20px; text-align: center;"&gt;&lt;img alt="" height="100" src="http://www.songho.ca/math/quaternion/files/quaternion_fig05.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="210" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Vector of Rotation axis&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;The last term contains the geometric quotient&amp;nbsp;&lt;img alt="c/b" height="21" src="http://www.songho.ca/math/quaternion/files/quaternion20.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="23" /&gt;&amp;nbsp;of two unit vectors at right angles (90 degree) to each other. This quotient represents a unit vector perpendicular to the plane of&amp;nbsp;&lt;img alt="bu" height="16" src="http://www.songho.ca/math/files/hat_b.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="7" /&gt;&amp;nbsp;and&amp;nbsp;&lt;img alt="cu" height="12" src="http://www.songho.ca/math/files/hat_c.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="8" /&gt;. (Think of cross product of 2 vectors) This unit vector is indicating the rotation axis of the plane and the direction of rotation. If we define it&amp;nbsp;&lt;img alt="u" height="12" src="http://www.songho.ca/math/quaternion/files/quaternion21.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="9" /&gt;, the above equation becomes&lt;br /&gt;&lt;img alt="A/B(cos + u sin)" height="37" src="http://www.songho.ca/math/quaternion/files/quaternion22.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="194" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;From this equation, A/B is tensor (scaling) operation of a quaternion, and&amp;nbsp;&lt;img alt="cos + u sin" height="14" src="http://www.songho.ca/math/quaternion/files/quaternion23.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="97" /&gt;&amp;nbsp;is versor (rotation) operator of a quaternion. Note that versor of q is very similar to&amp;nbsp;&lt;a href="http://www.songho.ca/math/euler/euler.html" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Euler's equation&lt;/a&gt;. Euler's equation contains an imaginary number&amp;nbsp;&lt;em&gt;i&lt;/em&gt;, but a quaternion has a vector instead, which is the rotation axis perpendicular to its rotation plane.&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;Thus, a quaternion is also expressed as the sum of scalar&amp;nbsp;&lt;strong&gt;S&lt;/strong&gt;(&lt;em&gt;q&lt;/em&gt;) and vector parts&amp;nbsp;&lt;strong&gt;U&lt;/strong&gt;(&lt;em&gt;q&lt;/em&gt;);&lt;br /&gt;&lt;img alt="q=s+ix+jy+kz" height="16" src="http://www.songho.ca/math/quaternion/files/quaternion01.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="148" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;img alt="" height="220" src="http://www.songho.ca/math/quaternion/files/quaternion24.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="187" /&gt;&lt;br /&gt;Quaternion can be also written as a 2-tuple form, [&lt;em&gt;s, v&lt;/em&gt;]. A unit quaternion can be represented as&amp;nbsp;&lt;img alt="[cos, usin]" height="18" src="http://www.songho.ca/math/quaternion/files/quaternion25.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="91" /&gt;, because tensor of&amp;nbsp;&lt;em&gt;q&lt;/em&gt;&amp;nbsp;is 1 (no scaling).&lt;/div&gt;&lt;h4 id="ijk" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Quadrantal vectors,&amp;nbsp;&lt;em&gt;i j k&lt;/em&gt;&lt;/h4&gt;&lt;div style="clear: both; float: left; line-height: 20px; margin-left: 30px; text-align: center;"&gt;&lt;img alt="Quadrantal vectors" height="160" src="http://www.songho.ca/math/quaternion/files/quaternion_fig06.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="200" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Quadrantal vectors&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;Let&amp;nbsp;&lt;em&gt;i, j, k&lt;/em&gt;&amp;nbsp;represent unit vectors orthogonal (perpendicular) each other. We define multiplications and divisions as rotating a unit vector to another at right angle. Note that, this multiplication and division is not numeric algebra. This kind of multiplication and quotient is called geometric. Thus, production or quotient of two unit vectors at right angles to each other produces a unit vector, perpendicular to their plane. And, it reads as&amp;nbsp;&lt;em&gt;i&lt;/em&gt;&amp;nbsp;operating on&amp;nbsp;&lt;em&gt;j&lt;/em&gt;&amp;nbsp;(or, rotating from&amp;nbsp;&lt;em&gt;i&lt;/em&gt;&amp;nbsp;to&amp;nbsp;&lt;em&gt;j&lt;/em&gt;) produces&amp;nbsp;&lt;em&gt;k&lt;/em&gt;.&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;img alt="ij=k" height="18" src="http://www.songho.ca/math/quaternion/files/quaternion26.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="122" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;In same manner, we can write other multiplications and divisions;&lt;br /&gt;&lt;img alt="" height="118" src="http://www.songho.ca/math/quaternion/files/quaternion27.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="269" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;The square of a unit vector can be defined from above equations;&lt;br /&gt;&lt;img alt="" height="92" src="http://www.songho.ca/math/quaternion/files/quaternion28.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="126" /&gt;&lt;br /&gt;In same manner,&lt;br /&gt;&lt;img alt="j^2=k^2=-1" height="19" src="http://www.songho.ca/math/quaternion/files/quaternion29.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="98" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;Also,&amp;nbsp;&lt;em&gt;ijk&lt;/em&gt;&amp;nbsp;can be defined as -1 using above multiplication table and square of unit vector.&lt;br /&gt;&lt;img alt="ijk" height="94" src="http://www.songho.ca/math/quaternion/files/quaternion30.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="128" /&gt;&lt;/div&gt;&lt;h3 id="algebra" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Quaternion Algebra&lt;/h3&gt;&lt;div style="line-height: 20px;"&gt;Here, the basic quaternion mathematics is described. These algebraic definitions and properties are specially required for rotation in 3D space, which describe in the next section. You may skip this section and move on the next section. And, come back later if you need to review a specific definition or property.&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1. Addition&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;img alt="quaternion addition" height="147" src="http://www.songho.ca/math/quaternion/files/quaternion31.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="396" /&gt;&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2. Multiplication&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;img alt="quaternion multiplication" height="272" src="http://www.songho.ca/math/quaternion/files/quaternion32.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="504" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;Note that quaternion multiplication is not commutative, however, multiplication is associative and distributive across addition.&lt;br /&gt;&lt;img alt="" height="68" src="http://www.songho.ca/math/quaternion/files/quaternion33.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="375" /&gt;&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;3. Scalar Multiplication&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;img alt="" height="146" src="http://www.songho.ca/math/quaternion/files/quaternion34.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="344" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;Unlike quaternion multiplication, scalar multiplication is commutative.&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4. Subtraction&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;Quaternion subtraction can be derived from scalar multiplication and quaternion addition.&lt;br /&gt;&lt;img alt="quaternion subtraction" height="147" src="http://www.songho.ca/math/quaternion/files/quaternion35.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="385" /&gt;&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5. Conjugate&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;Quaternion congugate is defined by negating the vector part of the quaternion.&lt;br /&gt;&lt;img alt="quaternion conjugate" height="145" src="http://www.songho.ca/math/quaternion/files/quaternion36.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="287" /&gt;&lt;br /&gt;Note that the multiplication of a quaternion and its conjugate is commutative.&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6. Norm&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;The norm of a quaternion is defined by;&lt;br /&gt;&lt;img alt="quaternion norm" height="158" src="http://www.songho.ca/math/quaternion/files/quaternion37.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="339" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;The norm of quaternion is multiplicative meaning that the norm of the multiplication of multiple quaternions equals to the multiplication of the norms of quaternions.&lt;br /&gt;&lt;img alt="quaternion norm multiplicative" height="212" src="http://www.songho.ca/math/quaternion/files/quaternion38.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="298" /&gt;&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;7. Inverse&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;The inverse of a quaternion is defined to be;&lt;br /&gt;&lt;img alt="quaternion inverse" height="180" src="http://www.songho.ca/math/quaternion/files/quaternion39.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="274" /&gt;&lt;br /&gt;The quaternion inverse makes it possible to divide two quaternions.&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;8. Unit Quaternion&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;img alt="" height="91" src="http://www.songho.ca/math/quaternion/files/quaternion40.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="286" /&gt;&lt;br /&gt;Note that the inverse of a unit quaternion equals to the conjugate of the unit quaternion.&lt;/div&gt;&lt;h3 id="rotation" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;3D Rotation with Quaternion&lt;/h3&gt;&lt;div style="line-height: 20px;"&gt;In 2D, the multiplication of two complex numbers implies 2D rotation. When&amp;nbsp;&lt;em&gt;z=x+iy&lt;/em&gt;&amp;nbsp;is multiplied by&amp;nbsp;&lt;img alt="" height="15" src="http://www.songho.ca/math/euler/files/euler28.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="19" /&gt;, the length of z' remains same (|z|=|z'|), but the angle of z' is added by θ. (See details in&amp;nbsp;&lt;a href="http://www.songho.ca/math/euler/euler.html#rotation" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Euler's equation&lt;/a&gt;.)&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;However, multiplying a quaternion&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;by a unit quaternion&amp;nbsp;&lt;em&gt;q&lt;/em&gt;&amp;nbsp;does not conserve the length (norm) of the vector part of the quaternion&amp;nbsp;&lt;em&gt;p&lt;/em&gt;. For example;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;img alt="" height="198" src="http://www.songho.ca/math/quaternion/files/quaternion41.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="355" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;Thus, we need a special multiplication for 3D rotations that is length-conserving transformation. For this reason, we multiply the unit quaternion&amp;nbsp;&lt;em&gt;q&lt;/em&gt;&amp;nbsp;at the front of&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;and multiplying&amp;nbsp;&lt;em&gt;q&lt;sup&gt;-1&lt;/sup&gt;&lt;/em&gt;&amp;nbsp;at the back of&amp;nbsp;&lt;em&gt;p&lt;/em&gt;, in order to cancel out the length changes. This special double multiplication is called "conjugation by&amp;nbsp;&lt;em&gt;q&lt;/em&gt;".&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;If&amp;nbsp;&lt;em&gt;q&lt;/em&gt;&amp;nbsp;is a unit quaternion and&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;= [s, v], then the scalar (s) and the length of v, |v| are unchanged after conjugation by&amp;nbsp;&lt;em&gt;q&lt;/em&gt;. For the above example;&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;&lt;img alt="" height="156" src="http://www.songho.ca/math/quaternion/files/quaternion42.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="409" /&gt;&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Proof&lt;/h4&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;If&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;= [s, v] and&amp;nbsp;&lt;em&gt;p'&lt;/em&gt;&amp;nbsp;=&amp;nbsp;&lt;em&gt;qpq&lt;sup&gt;-1&lt;/sup&gt;&lt;/em&gt;, then&amp;nbsp;&lt;em&gt;p'&lt;/em&gt;&amp;nbsp;= [s, v'] where |v| = |v'|&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;The proof takes 3 steps. First, we show&amp;nbsp;&lt;strong&gt;S&lt;/strong&gt;(&lt;em&gt;p&lt;/em&gt;)=&lt;strong&gt;S&lt;/strong&gt;(&lt;em&gt;p'&lt;/em&gt;) for&amp;nbsp;&lt;em&gt;p&lt;/em&gt;=[s, 0], then for&amp;nbsp;&lt;em&gt;p&lt;/em&gt;=[0, v]. Finally, both results are used to show&amp;nbsp;&lt;strong&gt;S&lt;/strong&gt;(&lt;em&gt;p&lt;/em&gt;)=&lt;strong&gt;S&lt;/strong&gt;(&lt;em&gt;p'&lt;/em&gt;) for&amp;nbsp;&lt;em&gt;p&lt;/em&gt;=[s, v]=[s, 0]+[0, v].&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;strong&gt;1&lt;/strong&gt;. If&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;has a scalar part only&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;= [s, 0], then&lt;br /&gt;&lt;img alt="" height="45" src="http://www.songho.ca/math/quaternion/files/quaternion45.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="406" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;strong&gt;2&lt;/strong&gt;. If&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;has a vector part only&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;= [0, v], then the scalar part of&amp;nbsp;&lt;em&gt;qpq&lt;sup&gt;-1&lt;/sup&gt;&lt;/em&gt;&amp;nbsp;can be computed by 2&lt;strong&gt;S&lt;/strong&gt;(&lt;em&gt;q&lt;/em&gt;)=&lt;em&gt;q&lt;/em&gt;+&lt;em&gt;q*&lt;/em&gt;.&lt;br /&gt;&lt;img alt="" height="250" src="http://www.songho.ca/math/quaternion/files/quaternion46.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="557" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;&lt;strong&gt;3&lt;/strong&gt;. If&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;= [s, v] = [s, 0] + [0, v], then&lt;br /&gt;&lt;img alt="" height="124" src="http://www.songho.ca/math/quaternion/files/quaternion47.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="573" /&gt;&lt;/div&gt;&lt;div style="line-height: 20px; margin-left: 30px;"&gt;Since we found that the scalar parts of&amp;nbsp;&lt;em&gt;p&lt;/em&gt;&amp;nbsp;and&amp;nbsp;&lt;em&gt;p'&lt;/em&gt;&amp;nbsp;are same, the norm of&amp;nbsp;&lt;em&gt;p'&lt;/em&gt;&amp;nbsp;is;&lt;br /&gt;&lt;img alt="" height="97" src="http://www.songho.ca/math/quaternion/files/quaternion48.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="321" /&gt;&lt;/div&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; line-height: 20px; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br /&gt;&lt;/h4&gt;&lt;div style="clear: both; font-size: 13px; line-height: 20px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-477756704313929198?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/477756704313929198/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2012/01/quaternion.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/477756704313929198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/477756704313929198'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2012/01/quaternion.html' title='Quaternion'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-4727618869106861803</id><published>2012-01-31T00:36:00.003-08:00</published><updated>2012-02-02T02:21:00.621-08:00</updated><title type='text'>Convolution</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: white; font: normal normal normal 100%/normal arial, helvetica, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div id="contentblock" style="line-height: 20px; margin-bottom: 10px; margin-left: 30px; margin-right: 10px; margin-top: 10px; padding-top: 0px; width: 45em;"&gt;&lt;div style="font-size: 13px;"&gt;&lt;/div&gt;&lt;h1 style="background-color: white; color: #666666; text-align: center;"&gt;Convolution&lt;/h1&gt;Convolution is the most important and fundamental concept in signal processing and analysis. By using convolution, we can construct the output of system for any arbitrary input signal, if we know the impulse response of system.&lt;br /&gt;&lt;br /&gt;How is it possible that knowing only impulse response of system can determine the output for any given input signal? We will find out the meaning of convolution.&lt;br /&gt;&lt;b&gt;Related Topics:&lt;/b&gt;&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Window Filters&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Download:&lt;/b&gt;&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/convolution/files/conv1d.zip" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;conv1d.zip&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/convolution/files/conv2d.zip" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;conv2d.zip&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#definition" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Definition&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#decomposition" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Impulse Function Decomposition&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#impulse_response" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Impulse Response&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#definition2" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Back to the Definition&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#convolution_1d" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Convolution in 1D&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#cpp_conv1d" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;C++ Implementation for Convolution 1D&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#convolution_2d" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Convolution in 2D&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#separable_convolution" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Separable Convolution 2D&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html#cpp_conv2d" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;C++ Algorithm for Convolution 2D&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="definition" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Definition&lt;/h3&gt;First, let's see the mathematical definition of convolution in discrete time domain. Later we will walk through what this equation tells us.&lt;br /&gt;&lt;i&gt;(We will discuss in discrete time domain only.)&lt;/i&gt;&lt;br /&gt;&lt;img alt="Definition of 1D Convolution" height="45" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq01.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="232" /&gt;&lt;br /&gt;where&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;is input signal,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;is impulse response, and&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;is output. * denotes convolution. Notice that we multiply the terms of&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[k]&lt;/span&gt;&amp;nbsp;by the terms of a time-shifted&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;and add them up.&lt;br /&gt;&lt;br /&gt;The keystone of understanding convolution is laid behind impulse response and impulse decomposition.&lt;br /&gt;&lt;h3 id="decomposition" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Impulse Function Decomposition&lt;/h3&gt;In order to understand the meaning of convolution, we are going to start from the concept of signal decomposition. The input signal is decomposed into simple additive components, and the system response of the input signal results in by adding the output of these components passed through the system.&lt;br /&gt;In general, a signal can be decomposed as a weighted sum of basis signals. For example, in Fourier Series, any periodic signal (even rectangular pulse signal) can be represented by a sum of sine and cosine functions. But here, we use impulse (delta) functions for the basis signals, instead of sine and cosine.&lt;br /&gt;Examine the following example how a signal is decomposed into a set of impulse (delta) functions. Since the impulse function,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;δ[n]&lt;/span&gt;&amp;nbsp;is 1 at&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;n=0&lt;/span&gt;, and zeros at&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;n ≠ 0&lt;/span&gt;.&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[0]&lt;/span&gt;&amp;nbsp;can be written to&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;2·δ[n]&lt;/span&gt;. And,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[1]&lt;/span&gt;&amp;nbsp;will be&lt;span class="font_serif" style="font-family: serif;"&gt;3·δ[n-1]&lt;/span&gt;, because&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;δ[n-1]&lt;/span&gt;&amp;nbsp;is 1 at&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;n=1&lt;/span&gt;&amp;nbsp;and zeros at others. In same way, we can write&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[2]&lt;/span&gt;&amp;nbsp;by shifting&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;δ[n]&lt;/span&gt;&amp;nbsp;by 2,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[2]&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;1·δ[n-2]&lt;/span&gt;. Therefore, the signal,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;can be represented by adding 3 shifted and scaled impulse functions.&lt;br /&gt;&lt;div style="float: left;"&gt;&lt;img alt="x[n] = {2,3,1}" height="168" src="http://www.songho.ca/dsp/convolution/files/conv_img01.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="187" /&gt;&amp;nbsp;&lt;img alt="" height="117" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq02.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="327" /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;In general, a signal can be written as sum of scaled and shifted delta functions;&lt;br /&gt;&lt;img alt="" height="45" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq03.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="153" /&gt;&lt;/div&gt;&lt;h3 id="impulse_response" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Impulse Response&lt;/h3&gt;Impulse response is the output of a system resulting from an impulse function as input.&lt;br /&gt;And it is denoted as&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;.&lt;br /&gt;&lt;img alt="" height="73" src="http://www.songho.ca/dsp/convolution/files/conv_img02.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="321" /&gt;&lt;br /&gt;If the system is&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#time_invariant_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;time-invariant&lt;/a&gt;, the response of a time-shifted impulse function is also shifted as same amount of time.&lt;br /&gt;&lt;img alt="" height="73" src="http://www.songho.ca/dsp/convolution/files/conv_img03.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="321" /&gt;&lt;br /&gt;For example, the impulse response of&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;δ[n-1]&lt;/span&gt;&amp;nbsp;is&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n-1]&lt;/span&gt;. If we know the impulse response&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;, then we can immediately get the impulse response&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n-1]&lt;/span&gt;&amp;nbsp;by shifting&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;by +1. Consequently,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n-2]&lt;/span&gt;&amp;nbsp;results from shifting&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;by +2.&lt;br /&gt;If the system is&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#linear_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;linear&lt;/a&gt;&amp;nbsp;(especially scalar rule), a scaled in input signal causes an identical scaling in the output signal.&lt;br /&gt;&lt;img alt="" height="73" src="http://www.songho.ca/dsp/convolution/files/conv_img04.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="321" /&gt;&lt;br /&gt;For instance, the impulse response of&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;3·δ[n]&lt;/span&gt;&amp;nbsp;is just multiplying by 3 to&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;.&lt;br /&gt;If the input has 3 components, for example,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;a&lt;/i&gt;·δ[n] +&amp;nbsp;&lt;i&gt;b&lt;/i&gt;·δ[n-1] +&amp;nbsp;&lt;i&gt;c&lt;/i&gt;·δ[n-2]&lt;/span&gt;, then the output is simply&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;a·h&lt;/i&gt;[n] +&lt;i&gt;b·h&lt;/i&gt;[n-1] +&amp;nbsp;&lt;i&gt;c·h&lt;/i&gt;[n-2]&lt;/span&gt;. This is called additive property of&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#linear_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;linear&lt;/a&gt;&amp;nbsp;system, thus, it is valid only on the&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#linear_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;linear&lt;/a&gt;system.&lt;br /&gt;&lt;img alt="" height="71" src="http://www.songho.ca/dsp/convolution/files/conv_img05.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="361" /&gt;&lt;br /&gt;&lt;h3 id="definition2" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Back to the Definition&lt;/h3&gt;By combining the properties of impulse response and impulse decomposition, we can finally construct the equation of convolution. In&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#linear_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;linear&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#time_invariant_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;time-invariant system&lt;/a&gt;, the response resulting from several inputs can be computed as the sum of the responses each input acting alone.&lt;br /&gt;&lt;img alt="" height="73" src="http://www.songho.ca/dsp/convolution/files/conv_img06.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="393" /&gt;&lt;br /&gt;For example, if input signal is&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[n] = 2·δ[n] + 3·δ[n-1] + 1·δ[n-2]&lt;/span&gt;, then the output is simply&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[n] = 2·&lt;i&gt;h&lt;/i&gt;[n] + 3·&lt;i&gt;h&lt;/i&gt;[n-1] + 1·&lt;i&gt;h&lt;/i&gt;[n-2]&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Therefore, we now clearly see that if the input signal is&amp;nbsp;&lt;img alt="x[n] = Σx[k]·δ[n-k]" height="27" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq04.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="152" /&gt;, then the output will be&amp;nbsp;&lt;img alt="y[n] = Σx[k]·h[n-k]" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq05.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" /&gt;. Note one condition; convolution works on the&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#linear_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;linear&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#time_invariant_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;time invariant system&lt;/a&gt;.&lt;br /&gt;To summarize, a signal is decomposed into a set of impulses and the output signal can be computed by adding the scaled and shifted impulse responses.&lt;br /&gt;Furthermore, there is an important fact under convolution; the only thing we need to know about the system's characteristics is the impulse response of the system,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;. If we know a system's impulse response, then we can easily find out how the system reacts for any input signal.&lt;br /&gt;&lt;h3 id="convolution_1d" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Convolution in 1D&lt;/h3&gt;Let's start with an example of convolution of 1 dimensional signal, then find out how to implement into computer programming algorithm.&lt;br /&gt;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[n] = { 3, 4, 5 }&lt;br /&gt;&lt;i&gt;h&lt;/i&gt;[n] = { 2, 1 }&lt;/span&gt;&lt;br /&gt;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;has only non-zero values at&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;n=0,1,2,&lt;/span&gt;&amp;nbsp;and impulse response,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;is not zero at&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;n=0,1&lt;/span&gt;. Others which are not listed are all zeros.&lt;br /&gt;&lt;div style="float: left; text-align: center;"&gt;&lt;img alt="x[n]" height="146" src="http://www.songho.ca/dsp/convolution/files/conv_img07.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="165" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Input:&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[n]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="float: left; text-align: center;"&gt;&lt;img alt="h[n]" height="146" src="http://www.songho.ca/dsp/convolution/files/conv_img08.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="164" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Impulse Response:&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[n]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;One thing to note before we move on: Try to figure out yourself how this system behaves, by only looking at the impulse response of the system. When the impulse signal is entered the system, the output of the system looks like amplifier and echoing. At the time is 0, the intensity was increased (amplified) by double and gradually decreased while the time is passed.&lt;/div&gt;From the equation of convolution, the output signal&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;will be&amp;nbsp;&lt;img alt="y[n] = Σx[k]·h[n-k]" height="27" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq05.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="152" /&gt;.&lt;br /&gt;Let's compute manually each value of&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[0],&amp;nbsp;&lt;i&gt;y&lt;/i&gt;[1],&amp;nbsp;&lt;i&gt;y&lt;/i&gt;[2],&amp;nbsp;&lt;i&gt;y&lt;/i&gt;[3],&lt;/span&gt;&amp;nbsp;...&lt;br /&gt;&lt;img alt="" height="45" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq06.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="295" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" height="69" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq07.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="403" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" height="69" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq08.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="523" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" height="69" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq09.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="580" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" height="45" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq10.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="493" /&gt;&lt;br /&gt;&lt;div style="float: left; text-align: center;"&gt;&lt;img alt="y[n]=x[n]*h[n]" height="182" src="http://www.songho.ca/dsp/convolution/files/conv_img09.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="203" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Output:&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[n]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;Notice that&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[0]&lt;/span&gt;&amp;nbsp;has only one component,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[0]&lt;i&gt;h&lt;/i&gt;[0]&lt;/span&gt;, and others are omitted, because others are all zeros at&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;k ≠ 0&lt;/span&gt;. In other words,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[1]&lt;i&gt;h&lt;/i&gt;[-1] =&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[2]&lt;i&gt;h&lt;/i&gt;[-2] = 0&lt;/span&gt;. The above equations also omit the terms if they are obviously zeros.&lt;br /&gt;&lt;br /&gt;If&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;n&lt;/span&gt;&amp;nbsp;is larger than and equal to 4,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;will be zeros. So we stop here to compute&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[n]&lt;/span&gt;&amp;nbsp;and adding these 4 signals (&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[0],&amp;nbsp;&lt;i&gt;y&lt;/i&gt;[1],&amp;nbsp;&lt;i&gt;y&lt;/i&gt;[2],&amp;nbsp;&lt;i&gt;y&lt;/i&gt;[3]&lt;/span&gt;) produces the output signal&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[n] = {6, 11, 14, 5}&lt;/span&gt;.&lt;br /&gt;&lt;div style="clear: both;"&gt;Let's look more closely the each output. In order to see a pattern clearly, the order of addition is swapped. The last term comes first and the first term goes to the last. And, all zero terms are ignored.&lt;/div&gt;&lt;div class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[0] =&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[0]·&lt;i&gt;h&lt;/i&gt;[0]&lt;br /&gt;&lt;i&gt;y&lt;/i&gt;[1] =&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[1]·&lt;i&gt;h&lt;/i&gt;[0] +&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[0]·&lt;i&gt;h&lt;/i&gt;[1]&lt;br /&gt;&lt;i&gt;y&lt;/i&gt;[2] =&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[2]·&lt;i&gt;h&lt;/i&gt;[0] +&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[1]·&lt;i&gt;h&lt;/i&gt;[1]&lt;br /&gt;&lt;i&gt;y&lt;/i&gt;[3] =&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[3]·&lt;i&gt;h&lt;/i&gt;[0] +&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[2]·&lt;i&gt;h&lt;/i&gt;[1]&lt;/div&gt;Can you see the pattern? For example,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[2]&lt;/span&gt;&amp;nbsp;is calculated from 2 input samples;&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[2]&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[1]&lt;/span&gt;, and 2 impulse response samples;&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[0]&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[1]&lt;/span&gt;. The input sample starts from 2, which is same as the sample point of output, and decreased. The impulse response sample starts from 0 and increased.&lt;br /&gt;Based on the pattern that we found, we can write an equation for any sample of the output;&lt;br /&gt;&lt;img alt="" height="21" src="http://www.songho.ca/dsp/convolution/files/conv1d_eq11.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="460" /&gt;&lt;br /&gt;where&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;i&lt;/i&gt;&lt;/span&gt;&amp;nbsp;is any sample point and k is the number of samples in impulse response.&lt;br /&gt;&lt;br /&gt;For instance, if an impulse response has 4 samples, the sample of output signal at 9 is;&lt;br /&gt;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[9] =&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[9]·&lt;i&gt;h&lt;/i&gt;[0] +&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[8]·&lt;i&gt;h&lt;/i&gt;[1] +&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[7]·&lt;i&gt;h&lt;/i&gt;[2] +&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[6]·&lt;i&gt;h&lt;/i&gt;[3]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Notice the first sample,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[0]&lt;/span&gt;&amp;nbsp;has only one term. Based on the pattern that we found,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[0]&lt;/span&gt;&amp;nbsp;is calculated as:&lt;br /&gt;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;[0] =&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[0]·&lt;i&gt;h&lt;/i&gt;[0] +&amp;nbsp;&lt;i&gt;x&lt;/i&gt;[-1]·&lt;i&gt;h&lt;/i&gt;[1]&lt;/span&gt;. Because&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[-1]&lt;/span&gt;&amp;nbsp;is not defined, we simply pad it to zero.&lt;br /&gt;&lt;h3 id="cpp_conv1d" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;C++ Implementation for Convolution 1D&lt;/h3&gt;Implementing the convolution algorithm is quite simple. The code snippet is following;&lt;br /&gt;&lt;div class="code" style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-left-radius: 10px; border-bottom-right-radius: 10px; border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(153, 153, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-left-radius: 10px; border-top-right-radius: 10px; border-top-style: solid; border-top-width: 1px; font: normal normal normal 14px/normal 'courier new', monospace; line-height: 16px; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; padding-bottom: 0px; padding-left: 10px; padding-right: 10px; padding-top: 0px; white-space: pre;"&gt;&lt;pre&gt;for ( i = 0; i &amp;lt; sampleCount; i++ )&lt;br /&gt;{&lt;br /&gt;    y[i] = 0;                       &lt;span class="comment" style="color: #999999;"&gt;// set to zero before sum&lt;/span&gt;&lt;br /&gt;    for ( j = 0; j &amp;lt; kernelCount; j++ )&lt;br /&gt;    {&lt;br /&gt;        y[i] += x[i - j] * h[j];    &lt;span class="comment" style="color: #999999;"&gt;// convolve: multiply and accumulate&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;However, you should concern several things in the implementation.&lt;br /&gt;Watch out the range of input signal. You may be out of bound of input signal, for example, x[-1], x[-2], and so on. You can pad zeros for those undefined samples, or simply skip the convolution at the boundary. The results at the both the beginning and end edges cannot be accurate anyway.&lt;br /&gt;&lt;br /&gt;Second, you need rounding the output values, if the output data type is integer and impulse response is floating point number. And, the output value may be exceeded the maximum or minimum value.&lt;br /&gt;If you have unsigned 8-bit integer data type for output signal, the range of output should be between 0 and 255. You must check the value is greater than the minimum and less than the maximum value.&lt;br /&gt;&lt;br /&gt;Download the 1D convolution routine and test program.&lt;br /&gt;&lt;a href="http://www.songho.ca/dsp/convolution/files/conv1d.zip" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;conv1d.zip&lt;/a&gt;&lt;br /&gt;&lt;h3 id="convolution_2d" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Convolution in 2D&lt;/h3&gt;2D convolution is just extension of previous 1D convolution by convolving both horizontal and vertical directions in 2 dimensional spatial domain. Convolution is frequently used for image processing, such as smoothing, sharpening, and edge detection of images.&lt;br /&gt;&lt;br /&gt;The impulse (delta) function is also in 2D space, so&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;δ[m, n]&lt;/span&gt;&amp;nbsp;has 1 where&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;m&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;n&lt;/span&gt;&amp;nbsp;is zero and zeros at&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;m,n ≠ 0&lt;/span&gt;. The impulse response in 2D is usually called "kernel" or "filter" in image processing.&lt;br /&gt;&lt;div style="float: left;"&gt;&lt;img alt="δ[m,n]" height="170" src="http://www.songho.ca/dsp/convolution/files/conv2d_delta.jpg" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="250" /&gt;&amp;nbsp;&lt;img alt="δ[m,n]" height="200" src="http://www.songho.ca/dsp/convolution/files/conv_img10.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="200" /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The second image is 2D matrix representation of impulse function. The shaded center point is the origin where&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;m=n=0&lt;/span&gt;.&lt;/div&gt;Once again, a signal can be decomposed into a sum of scaled and shifted impulse (delta) functions;&lt;br /&gt;&lt;img alt="" height="47" src="http://www.songho.ca/dsp/convolution/files/conv2d_eq01.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="249" /&gt;&lt;br /&gt;For example,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[0, 0]&lt;/span&gt;&amp;nbsp;is&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[0, 0]·δ[m, n]&lt;/span&gt;,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[1, 2]&lt;/span&gt;&amp;nbsp;is&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[1, 2]·δ[m-1, n-2]&lt;/span&gt;, and so on. Note that the matrices are referenced here as [column, row], not [row, column]. M is horizontal (column) direction and N is vertical (row) direction.&lt;br /&gt;And, the output of&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#linear_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;linear&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/system/systems.html#time_invariant_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;time invariant system&lt;/a&gt;&amp;nbsp;can be written by convolution of input signal&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[m, n]&lt;/span&gt;, and impulse response,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[m, n]&lt;/span&gt;;&lt;br /&gt;&lt;img alt="" height="47" src="http://www.songho.ca/dsp/convolution/files/conv2d_eq02.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="367" /&gt;&lt;br /&gt;Notice that the kernel (impulse response) in 2D is center originated in most cases, which means the center point of a kernel is&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[0, 0]&lt;/span&gt;. For example, if the kernel size is 5, then the array index of 5 elements will be -2, -1, 0, 1, and 2. The origin is located at the middle of kernel.&lt;br /&gt;&lt;div style="float: left; padding-right: 20px;"&gt;&lt;img alt="h[m,n]" height="164" src="http://www.songho.ca/dsp/convolution/files/conv_img11.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="163" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Examine an example to clarify how to convolve in 2D space.&lt;br /&gt;Let's say that the size of impulse response (kernel) is 3x3, and it's values are a, b, c, d,...&lt;br /&gt;&lt;br /&gt;Notice the origin (0,0) is located in the center of kernel.&lt;br /&gt;&lt;br /&gt;Let's pick a simplest sample and compute convolution, for instance, the output at (1, 1) will be;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;img alt="" height="120" src="http://www.songho.ca/dsp/convolution/files/conv2d_eq03.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="405" /&gt;&lt;br /&gt;It results in sum of 9 elements of scaled and shifted impulse responses. The following image shows the graphical representation of 2D convolution.&lt;/div&gt;&lt;div style="float: left; padding-right: 20px; text-align: center;"&gt;&lt;img alt="2D Convolution" height="273" src="http://www.songho.ca/dsp/convolution/files/conv2d_matrix.jpg" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="331" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;2D Convolution&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Notice that the kernel matrix is flipped both horizontal and vertical direction before multiplying the overlapped input data, because&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[0,0]&lt;/span&gt;&amp;nbsp;is multiplied by the last sample of impulse response,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[1,1]&lt;/span&gt;. And&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;[2,2]&lt;/span&gt;&amp;nbsp;is multiplied by the first sample,&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;[-1,-1]&lt;/span&gt;.&lt;br /&gt;&lt;div style="clear: both;"&gt;Exercise a little more about 2D convolution with another example. Suppose we have 3x3 kernel and 3x3 input matrix.&lt;/div&gt;&lt;div style="float: left; padding-right: 30px; text-align: center;"&gt;&lt;img alt="x[m,n]" height="123" src="http://www.songho.ca/dsp/convolution/files/conv_img12.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="123" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Input&lt;/span&gt;&lt;/div&gt;&lt;div style="float: left; padding-right: 30px; text-align: center;"&gt;&lt;img alt="h[m,n]" height="123" src="http://www.songho.ca/dsp/convolution/files/conv_img14.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="123" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Kernel&lt;/span&gt;&lt;/div&gt;&lt;div style="float: left; text-align: center;"&gt;&lt;img alt="y[m,n]=x[m,n]*y[m,n]" height="123" src="http://www.songho.ca/dsp/convolution/files/conv_img13.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="123" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Output&lt;/span&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The complete solution for this example is here;&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/convolution/convolution2d_example.html" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Example of 2D Convolution&lt;/a&gt;&lt;/div&gt;By the way, the kernel in this example is called&amp;nbsp;&lt;b&gt;Sobel&lt;/b&gt;&amp;nbsp;filter, which is used to detect the horizontal edge lines in an image. See more details in the&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/convolution/convolution.html" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;window filters&lt;/a&gt;.&lt;br /&gt;&lt;h3 id="separable_convolution" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Separable Convolution 2D&lt;/h3&gt;In convolution 2D with M×N kernel, it requires M×N multiplications for each sample. For example, if the kernel size is 3x3, then, 9 multiplications and accumulations are necessary for each sample. Thus, convolution 2D is very expensive to perform multiply and accumulate operation.&lt;br /&gt;&lt;br /&gt;However, if the kernel is separable, then the computation can be reduced to M + N multiplications.&lt;br /&gt;&lt;br /&gt;A matrix is separable if it can be decomposed into (M×1) and (1×N) matrices.&lt;br /&gt;For example;&lt;br /&gt;&lt;img alt="Separable Matrix" height="80" src="http://www.songho.ca/dsp/convolution/files/conv2d_eq04.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="287" /&gt;&lt;br /&gt;And, convolution with this separable kernel is equivalent to;&lt;br /&gt;&lt;img alt="" height="77" src="http://www.songho.ca/dsp/convolution/files/conv2d_eq05.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="556" /&gt;&lt;br /&gt;&lt;a href="http://www.songho.ca/dsp/convolution/convolution2d_separable.html" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;(Proof of Separable Convolution 2D)&lt;/a&gt;&lt;br /&gt;As a result, in order to reduce the computation, we perform 1D convolution twice instead of 2D convolution; convolve with the input and M×1 kernel in vertical direction, then convolve again horizontal direction with the result from the previous convolution and 1×N kernel. The first vertical 1D convolution requires M times of multiplications and the horizontal convolution needs N times of multiplications, altogether, M+N products.&lt;br /&gt;&lt;br /&gt;However, the separable 2D convolution requires additional storage (buffer) to keep intermediate computations. That is, if you do vertical 1D convolution first, you must preserve the results in a temporary buffer in order to use them for horizontal convolution subsequently.&lt;br /&gt;&lt;br /&gt;Notice that convolution is associative; the result is same, even if the order of convolution is changed. So, you may convolve horizontal direction first then vertical direction later.&lt;br /&gt;&lt;br /&gt;Gaussian smoothing filter is a well-known separable matrix. For example, 3x3 Gaussian filter is;&lt;br /&gt;&lt;div style="float: left; text-align: center;"&gt;&lt;img alt="3x3 Gaussian Kernel" height="103" src="http://www.songho.ca/dsp/convolution/files/conv2d_eq06.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="262" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;3x3 Gaussian Kernel&lt;/span&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;h3 id="cpp_conv2d" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;C++ Algorithm for Convolution 2D&lt;/h3&gt;We need 4 nested loops for 2D convolution instead of 2 loops in 1D convolution.&lt;br /&gt;&lt;div class="code" style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-left-radius: 10px; border-bottom-right-radius: 10px; border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(153, 153, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-left-radius: 10px; border-top-right-radius: 10px; border-top-style: solid; border-top-width: 1px; font: normal normal normal 14px/normal 'courier new', monospace; line-height: 16px; margin-bottom: 10px; margin-left: 20px; margin-right: 20px; margin-top: 10px; padding-bottom: 0px; padding-left: 10px; padding-right: 10px; padding-top: 0px; white-space: pre;"&gt;&lt;pre&gt;&lt;span class="comment" style="color: #999999;"&gt;// find center position of kernel (half of kernel size)&lt;/span&gt;&lt;br /&gt;kCenterX = kCols / 2;&lt;br /&gt;kCenterY = kRows / 2;&lt;br /&gt;&lt;br /&gt;for(i=0; i &amp;lt; rows; ++i)              &lt;span class="comment" style="color: #999999;"&gt;// rows&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    for(j=0; j &amp;lt; cols; ++j)          &lt;span class="comment" style="color: #999999;"&gt;// columns&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        sum = 0;                     &lt;span class="comment" style="color: #999999;"&gt;// init to 0 before sum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        for(m=0; m &amp;lt; kRows; ++m)     &lt;span class="comment" style="color: #999999;"&gt;// kernel rows&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            mm = kRows - 1 - m;      &lt;span class="comment" style="color: #999999;"&gt;// row index of flipped kernel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            for(n=0; n &amp;lt; kCols; ++n) &lt;span class="comment" style="color: #999999;"&gt;// kernel columns&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                nn = kCols - 1 - n;  &lt;span class="comment" style="color: #999999;"&gt;// column index of flipped kernel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                &lt;span class="comment" style="color: #999999;"&gt;// index of input signal, used for checking boundary&lt;/span&gt;&lt;br /&gt;                ii = i + (m - kCenterY);&lt;br /&gt;                jj = j + (n - kCenterX);&lt;br /&gt;&lt;br /&gt;                &lt;span class="comment" style="color: #999999;"&gt;// ignore input samples which are out of bound&lt;/span&gt;&lt;br /&gt;                if( ii &amp;gt;= 0 &amp;amp;&amp;amp; ii &amp;lt; rows &amp;amp;&amp;amp; jj &amp;gt;= 0 &amp;amp;&amp;amp; jj &amp;lt; cols )&lt;br /&gt;                out[i][j] += in[ii][jj] * kernel[mm][nn];&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;The above snippet code is simple and easiest way to understand how convolution works in 2D. But it may be the slowest implementation.&lt;br /&gt;Take a look at a real example; convolution with 256x256 image and 5x5 Gaussian filter.&lt;br /&gt;&lt;img alt="Gaussian Filter on 2D image" height="283" src="http://www.songho.ca/dsp/convolution/files/conv2d_result.jpg" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="776" /&gt;&lt;br /&gt;The source image is uncompressed raw, 8-bit (unsigned char) grayscale image. And again, Gaussian kernel is separable;&lt;br /&gt;&lt;div style="float: left; text-align: center;"&gt;&lt;img alt="5x5 Gaussian Kernel" height="120" src="http://www.songho.ca/dsp/convolution/files/conv2d_eq26.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="385" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;5x5 Gaussian Kernel&lt;/span&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;On my system (AMD 64 3200+ 2GHz), normal convolution took about 10.3 ms and separable convolution took only 3.2 ms. You can see how much separable convolution is faster compared to normal convolution.&lt;/div&gt;Download 2D convolution application and source code here:&amp;nbsp;&lt;a href="http://www.songho.ca/dsp/convolution/files/conv2d.zip" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;conv2d.zip&lt;/a&gt;&lt;br /&gt;&lt;i&gt;The program uses OpenGL to render images on the screen.&lt;/i&gt;&lt;br /&gt;&lt;div id="footer" style="border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; font-size: 13px; line-height: 14px; padding-top: 5px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both; font-size: 13px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-4727618869106861803?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/4727618869106861803/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2012/01/convolution.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/4727618869106861803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/4727618869106861803'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2012/01/convolution.html' title='Convolution'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-2929750816631558028</id><published>2012-01-31T00:36:00.001-08:00</published><updated>2012-02-02T02:21:17.099-08:00</updated><title type='text'>Variety of Systems</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: white; font: normal normal normal 100%/normal arial, helvetica, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div id="contentblock" style="line-height: 20px; margin-bottom: 10px; margin-left: 30px; margin-right: 10px; margin-top: 10px; padding-top: 0px; width: 45em;"&gt;&lt;h1 style="background-color: white; color: #666666; text-align: center;"&gt;Variety of Systems&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/system/systems.html#linear_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Linear System&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/system/systems.html#time_invariant_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Time-Invariant System&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.songho.ca/dsp/system/systems.html#causal_system" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: purple;"&gt;Causal System&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="linear_system" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Linear System&lt;/h3&gt;Systems that satisfy both homogeneity and additivity are considered to be linear system.&lt;br /&gt;Homogeneity (scalar rule) means that as the strength of input signal is increased (scaled), then the strength of output signal will be also increased (scaled) with same amount.&lt;br /&gt;&lt;img alt="" height="71" src="http://www.songho.ca/dsp/system/files/sys_linear01.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="464" /&gt;&lt;br /&gt;Additivity denotes that the output of system can be computed as sum of the responses resulting from each input signal acting alone.&lt;br /&gt;&lt;img alt="" height="69" src="http://www.songho.ca/dsp/system/files/sys_linear02.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="464" /&gt;&lt;br /&gt;Taking these two rules together is called the principle of superposition. Therefore, the linear system can be presented as;&lt;br /&gt;&lt;img alt="" height="69" src="http://www.songho.ca/dsp/system/files/sys_linear03.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="464" /&gt;&lt;br /&gt;If input signal can be decomposed as a weighted sum of basis signals, the output of linear system is;&lt;br /&gt;&lt;img alt="" height="71" src="http://www.songho.ca/dsp/system/files/sys_linear04.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="464" /&gt;&lt;br /&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Examples&lt;/h4&gt;&lt;div style="margin-left: 30px;"&gt;Determine if it is linear.&lt;br /&gt;1)&amp;nbsp;&lt;img alt="" height="41" src="http://www.songho.ca/dsp/system/files/sys_linear05.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="84" /&gt;&lt;br /&gt;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;sol&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;img alt="" height="149" src="http://www.songho.ca/dsp/system/files/sys_linear06.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="164" /&gt;&lt;br /&gt;∴ linear system&lt;/div&gt;&lt;div style="margin-left: 30px;"&gt;2)&amp;nbsp;&lt;img alt="" height="24" src="http://www.songho.ca/dsp/system/files/sys_linear07.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="71" /&gt;&lt;br /&gt;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;sol&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;img alt="" height="89" src="http://www.songho.ca/dsp/system/files/sys_linear08.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="160" /&gt;&lt;br /&gt;∴ non-linear system&lt;br /&gt;&lt;/div&gt;&lt;h3 id="time_invariant_system" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Time-Invariant System&lt;/h3&gt;A system is time-invariant if a time shift in input signal causes an identical time shift in output signal.&lt;br /&gt;&lt;img alt="" height="68" src="http://www.songho.ca/dsp/system/files/sys_ti01.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="464" /&gt;&lt;br /&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; color: #666666; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Examples&lt;/h4&gt;&lt;div style="margin-left: 30px;"&gt;Determine Time-Invariant.&lt;br /&gt;1)&amp;nbsp;&lt;img alt="" height="21" src="http://www.songho.ca/dsp/system/files/sys_ti02.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="95" /&gt;&lt;br /&gt;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;sol&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;img alt="" height="144" src="http://www.songho.ca/dsp/system/files/sys_ti03.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="244" /&gt;&lt;/div&gt;&lt;div style="margin-left: 30px;"&gt;2)&amp;nbsp;&lt;img alt="" height="21" src="http://www.songho.ca/dsp/system/files/sys_ti04.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="108" /&gt;&lt;br /&gt;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;sol&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;img alt="" height="144" src="http://www.songho.ca/dsp/system/files/sys_ti05.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="299" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 id="causal_system" style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 5px; color: #666666; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Causal System&lt;/h3&gt;A system is causal if the output at any time depends on values of the input at only the present and past times. In other words, the causal system does not anticipate future values of input.&lt;br /&gt;For example, the output&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;y&lt;/i&gt;(t&lt;sub&gt;0&lt;/sub&gt;)&lt;/span&gt;&amp;nbsp;depends on input&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;x&lt;/i&gt;(t)&lt;/span&gt;&amp;nbsp;for&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;t ≤ t&lt;sub&gt;0&lt;/sub&gt;&lt;/span&gt;.&lt;br /&gt;&lt;div style="float: left; text-align: center;"&gt;&lt;img alt="" height="162" src="http://www.songho.ca/dsp/system/files/sys_causal01.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="186" /&gt;&lt;br /&gt;&lt;span class="caption" style="background-color: white; color: #666666; font: normal normal normal 80%/normal arial, helvetica, sans-serif;"&gt;Non-Causal System&lt;/span&gt;&lt;/div&gt;This is an example of non-causal system, because the output responds ahead at&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;t = t&lt;sub&gt;0&lt;/sub&gt;&lt;/span&gt;&amp;nbsp;before input is defined.&lt;br /&gt;&lt;br /&gt;A causal system is characterized by an impulse response&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;&lt;i&gt;h&lt;/i&gt;(t)&lt;/span&gt;&amp;nbsp;that is zeros for&lt;span class="font_serif" style="font-family: serif;"&gt;t&lt;/span&gt;&amp;nbsp;&amp;lt; 0.&lt;br /&gt;&lt;h4 style="background-color: white; border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; clear: both; color: #666666; margin-bottom: 0px; margin-left: 30px; margin-right: 0px; margin-top: 30px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Examples&lt;/h4&gt;&lt;div style="margin-left: 30px;"&gt;1)&amp;nbsp;&lt;img alt="" height="21" src="http://www.songho.ca/dsp/system/files/sys_causal02.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="95" /&gt;&lt;br /&gt;Causal, because&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;t ≥ t-2&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 30px;"&gt;2)&amp;nbsp;&lt;img alt="" height="21" src="http://www.songho.ca/dsp/system/files/sys_causal03.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="92" /&gt;&lt;br /&gt;Non-Causal, because&amp;nbsp;&lt;span class="font_serif" style="font-family: serif;"&gt;t&amp;nbsp;&lt;img alt="" height="16" src="http://www.songho.ca/files/math_nge.gif" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: middle;" width="14" /&gt;&amp;nbsp;t+1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="footer" style="border-top-color: rgb(153, 153, 153); border-top-style: solid; border-top-width: 1px; font-size: 13px; line-height: 14px; padding-top: 5px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both; font-size: 13px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-2929750816631558028?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/2929750816631558028/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2012/01/variety-of-systems.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/2929750816631558028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/2929750816631558028'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2012/01/variety-of-systems.html' title='Variety of Systems'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-7005177682538868259</id><published>2012-01-31T00:35:00.001-08:00</published><updated>2012-01-31T00:35:52.056-08:00</updated><title type='text'>Types of Signals</title><content type='html'>Continuous-Time SignalDiscrete-Time SignalPeriodic SignalOrthogonal SignalEven and Odd SignalEnergy Signal &amp; Power SignalContinuous Time SignalIf the independent variable (t) is continuous, then the corresponding signal is continuous time signal.   Discrete Time SignalIf the independent variable (t) takes on only discrete values, for example t = ±1, ±2, ±3, ...   Periodic SignalIf the transformed signal  is same as x(t), then the signal is periodic.  where T is fundamental period (the smallest period) of signal x(t) In discrete-time, the periodic signal is;   Orthogonal SignalEach component signal has no relationship with others. Orthogonal signal is denoted as φ(t).  Even and Odd SignalOne of characteristics of signal is symmetry that may be useful for signal analysis. Even signals are symmetric around vertical axis, and Odd signals are symmetric about origin. Even Signal: A signal is referred to as an even if it is identical to its time-reversed counterparts; x(t) = x(-t). Odd Signal: A signal is odd if x(t) = -x(-t). An odd signal must be 0 at t=0, in other words, odd signal passes the origin. Using the definition of even and odd signal, any signal may be decomposed into a sum of its even part, xe(t), and its odd part, xo(t), as follows:  It is an important fact because it is relative concept of Fourier series. In Fourier series, a periodic signal can be broken into a sum of sine and cosine signals. Notice that sine function is odd signal and cosine function is even signal.Example Energy Signal &amp; Power SignalIn physics, energy is work and power is work per time; Work = Force × Displacement Power = Work / Time For Kinetic energy is given by In an electrical signal, the instantaneous power for the voltage across the resistance R and its energy are defined; In signal processing, total energy of signal x(t) is defined as similar way; (Notice that it is square of absolute value.)  where |x(t)| denotes the magnitude of x(t). It is necessary to get a scalar quantity for complex signal, because magnitude of complex number is defined as  .And, it is also squared because of common convention to use similar terminology for any signal (look at the definitions of kinetic and electrical signal energy). Therefore, the energy of a signal is defined as a sum of square of magnitude.The average power of signal is defined by; A signal can be categorized into energy signal or power signal: An energy signal has a finite energy, 0 &lt; E &lt; ∞. In other words, energy signals have values only in the limited time duration. For example, a signal having only one square pulse is energy signal. A signal that decays exponentially has finite energy, so, it is also an energy signal. The power of an energy signal is 0, because of dividing finite energy by infinite time (or length).On the contrary, the power signal is not limited in time. It always exists from beginning to end and it never ends. For example, sine wave in infinite length is power signal. Since the energy of a power signal is infinite, it has no meaning to us. Thus, we use power (energy per given time) for power signal, because the power of power signal is finite, 0 &lt; P &lt; ∞.Examples1)  E = 1, and  , ∴ Energy signal.2)  E = ∞ , and  , ∴ Power signal.© 2005 Song Ho Ahn  ←Back&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-7005177682538868259?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/7005177682538868259/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2012/01/types-of-signals.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/7005177682538868259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/7005177682538868259'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2012/01/types-of-signals.html' title='Types of Signals'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-1867145275096076472</id><published>2011-12-16T01:07:00.000-08:00</published><updated>2011-12-16T01:07:44.611-08:00</updated><title type='text'>CVSTortoise 避免重复输入密码， 并且安全的方法</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Tired of typing your password into SSH all the time? Yes, you can apply common, open-source tools to do this for any application of SSH. Isn't open software cool! Read-on...&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;General SSH questions, a bit of background on SSH and specifically Public Key Cryptography, and versions of SSH clients can be found in&amp;nbsp;&lt;a href="http://www.mtu.net/~engstrom/ssh-faq.php"&gt;my mini-SSH FAQ.&lt;/a&gt;&lt;/div&gt;&lt;ul style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#UsingSSHIdentities"&gt;Creating and Using SSH Identities&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#OpenSSH"&gt;Configuring OpenSSH to use Identities&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#InstallingOpenSSH"&gt;Installing OpenSSH&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#ConfiguringOpenSSH"&gt;Configuring OpenSSH&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#PuTTY"&gt;Installing, Configuring and Using PuTTY&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#InstallingPuTTY"&gt;Installing PuTTY&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#ConfiguringPuTTY"&gt;Configuring PuTTY&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#PuTTYGen"&gt;Generating your Public/Private Keys&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#PuTTYKeyToServer"&gt;Configure Server's&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.ssh/authorized_keys&lt;/tt&gt;&amp;nbsp;file&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#PuTTYAgent"&gt;Starting the PuTTY-Agent (Pageant)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#AutoStartPageant"&gt;Auto-Start PuTTY-Agent Upon Login&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#ImportExportKeys"&gt;Using PuTTY Keys for OpenSSH and vice-versa&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#ImportOpenSSH"&gt;To import a OpenSSH key into PuTTY:&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#ExportOpenSSH"&gt;To export a PuTTY key for OpenSSH:&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 22px; font-style: italic; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="UsingSSHIdentities"&gt;Creating and Using SSH Identities&lt;/a&gt;&lt;/h2&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;The first step in secure, password-free SSH is to create an SSH identity. An SSH identity is a private/public key pair, which are similar in functionality to to PGP keys, or SSL keys and SSL certificates. The public key of the identity pair will be placed on the remote servers to which you wish to connect and the private key will remain on the client or local machine. When you connect from your client, the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh&lt;/tt&gt;&amp;nbsp;program will offer to use identity-based authentication for each key it has available. If the server sees a corresponding public key on its end, it tells the client to prove that it has the private key, which is does by a mathematically rigourous means that we can ignore at this time.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;We can do this with either&amp;nbsp;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#OpenSSH"&gt;OpenSSH&lt;/a&gt;&amp;nbsp;or with&amp;nbsp;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#PuTTY"&gt;PuTTY&lt;/a&gt;.&lt;/div&gt;&lt;h3 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="OpenSSH"&gt;Configuring OpenSSH to use Identities&lt;/a&gt;&lt;/h3&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="InstallingOpenSSH"&gt;Installing OpenSSH&lt;/a&gt;&lt;/h4&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;If you are running on a UNIX box without SSH (many do by default), have your system administrator build and install OpenSSH. A version of this is installed by default on most Linux platforms, but you or your system admistrator should update it as there are often security-related patches made available on the OpenSSH web site.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;If you are running on a Windows platform and use CYGWIN, you should already have SSH installed. Again, make sure you keep up with new releases of the SSH package (via the CYGWIN installer) for security.&lt;/div&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="ConfiguringOpenSSH"&gt;Configuring OpenSSH&lt;/a&gt;&lt;/h4&gt;&lt;ol style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;&lt;strong&gt;Create the identiy-key pair:&lt;/strong&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;cd ~/.ssh&lt;br /&gt;ssh-keygen&lt;/pre&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;This creates your private/public key pair: (&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.ssh/id_rsa&lt;/tt&gt;&amp;nbsp;and&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.ssh/id_rsa.pub&lt;/tt&gt;). The program will ask you for a passphrase to encode your private key; be sure to use a good passphrase of more than 10 or so characters. If you choose not to use a passphrase, you will&amp;nbsp;&lt;strong&gt;not&lt;/strong&gt;&amp;nbsp;have to implement the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;&amp;nbsp;or&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;putty-agent&lt;/tt&gt;&amp;nbsp;steps below,&amp;nbsp;&lt;strong&gt;however I do not recommend this&lt;/strong&gt;; Without a passphrase, your private key can be easily read by anyone and may be used to impersonate you on any server where you place your public key.&lt;/div&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;Instead of RSA, you may use DSA (&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;-t dsa&lt;/tt&gt;) either is fine, though I would&amp;nbsp;&lt;strong&gt;not&lt;/strong&gt;&amp;nbsp;recommend using RSA1 for security reasons.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Copy the public key to the remote server:&lt;/strong&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;scp ~/.ssh/id_rsa.pub &lt;em&gt;user@remote.host&lt;/em&gt;:pubkey.txt&lt;br /&gt;ssh &lt;em&gt;user@remote.host&lt;/em&gt;&lt;br /&gt;mkdir ~/.ssh&lt;br /&gt;chmod 700 .ssh&lt;br /&gt;cat pubkey.txt &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;rm ~/pubkey.txt&lt;br /&gt;chmod 600 ~/.ssh/*&lt;br /&gt;exit&lt;/pre&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;Be sure to replace&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;&lt;em&gt;user@remote.host&lt;/em&gt;&lt;/tt&gt;&amp;nbsp;with the appropriate username and host. This copies your&amp;nbsp;&lt;strong&gt;public&lt;/strong&gt;&amp;nbsp;key to the remote server machine. Public keys are those with the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;.pub&lt;/tt&gt;&amp;nbsp;extension. You need to do this for each server into which you wish to login via SSH without a password. Alternatively, you could now copy the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.ssh/authorized_keys&lt;/tt&gt;&amp;nbsp;file to other systems to allow access from the local system. Also, if you have multiple keys, you can add the public key of each pair to the&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;authorized_keys&lt;/tt&gt;&amp;nbsp;file, either by appending to the file or using a text editor. If you use cut and paste to copy the key, make sure each key entry is a single line in the file. Remember, the keys to add are always the public keys (from files with the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;.pub&lt;/tt&gt;extension).&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Test the remote public key:&lt;/strong&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;ssh &lt;em&gt;user@remote.host&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;enter-private-key-passphrase-at-prompt&gt;&lt;/enter-private-key-passphrase-at-prompt&gt;&lt;/em&gt;&lt;br /&gt;exit &lt;/pre&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;This is a test -- This time, instead of your password on the remote host, SSH should prompt you for the passphrase for your private key.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;&lt;strong&gt;Start the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace;"&gt;ssh-agent&lt;/tt&gt;:&lt;/strong&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;Now we get to the meat of this document and figure out how to avoid typing either a password or a passphrase every time...&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;eval `ssh-agent`&lt;/pre&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;This starts the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;, which is a process which runs in the background and listens for "requests" from&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh&lt;/tt&gt;&amp;nbsp;clients needing your private key. The output of&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;&amp;nbsp;is a set of environment variables which need to be&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;eval&lt;/tt&gt;-ed in order for future&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh&lt;/tt&gt;&amp;nbsp;clients to know that there is a server out there.&amp;nbsp;&lt;strong&gt;Do not start more than one instance of&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace;"&gt;ssh-agent&lt;/tt&gt;.&lt;/strong&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Add your private key to the agent's cache:&lt;/strong&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;ssh-add&lt;br /&gt;&lt;em&gt;&lt;enter-private-key-passphrase-at-prompt&gt;&lt;/enter-private-key-passphrase-at-prompt&gt;&lt;/em&gt;&lt;/pre&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;This adds your private key(s) to the list of keys held by&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;.&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-add&lt;/tt&gt;&amp;nbsp;will ask you for the passphrase of each key it is adding to the agent's pool. Note that this need only be done once after you start the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;&amp;nbsp;daemon.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Test the connection again:&lt;/strong&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;ssh &lt;em&gt;user@remote.host&lt;/em&gt;&lt;br /&gt;exit&lt;/pre&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;This is a test -- This time you should not have to type any passwords or passphrases as&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh&lt;/tt&gt;&amp;nbsp;should get your private key from the agent daemon.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;That's all there is to setting up&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh&lt;/tt&gt;&amp;nbsp;and&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;&amp;nbsp;to use public-key encryption and avoid entering your password multiple times a day. Any application that uses SSH should no longer require passwords. All that remains is to configure CVS to use SSH.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;You should know that&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;&amp;nbsp;stores your private key(s) in memory in the clear (read: unencrypted) to give to&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh&lt;/tt&gt;&amp;nbsp;clients that request it. Note that the mechanisms by which&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;&amp;nbsp;talks to&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh&lt;/tt&gt;&amp;nbsp;are based upon UNIX sockets and UNIX system permissions protect those against unauthorized access, so you need not worry about this. There is some question about the security of this mechanism under CYGWIN on Win32 platforms, but I feel the risks are not greater than the benefits, especially if you are the only person with access to your Windows box. Just lock your screen when you are not present - common sence.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;One other tweak one can make: Realize that by using this "manual" approach of starting the agent and evaluating the results in your shell, only sub-shells of the current shell will know about the running&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;. An alternative approach that I use is to run a short script that starts the agent daemon if it is not already running and sets the appropriate environment variables.&lt;/div&gt;&lt;ol start="7" style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;&lt;strong&gt;Setup an automated start-agent script:&lt;/strong&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;First,&amp;nbsp;&lt;a href="http://www.mtu.net/~engstrom/downloads/sssha"&gt;click here for my&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;sssha&lt;/tt&gt;&amp;nbsp;script.&lt;/a&gt;&amp;nbsp;It is a BASH shell script, so if you use a different login shell, you will have to modify it. Once you download it, place it in your&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.ssh/&lt;/tt&gt;&amp;nbsp;directory and add this to your&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.bashrc&lt;/tt&gt;&amp;nbsp;configuration script, presumably at or near the end:&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;# setup ssh-agent, if appropriate&lt;br /&gt;if [ -f "$HOME/.ssh/sssha" ]; then&lt;br /&gt;   source $HOME/.ssh/sssha&lt;br /&gt;fi &lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Finally, if you are truly paranoid, make sure to kill your&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent&lt;/tt&gt;&amp;nbsp;when you are done using any machine on which you have started one. This can be accomplished most simply with&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;ssh-agent -k&lt;/tt&gt;.&lt;/div&gt;&lt;h3 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="PuTTY"&gt;Configuring PuTTY to use Identities&lt;/a&gt;&lt;/h3&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="InstallingPuTTY"&gt;Installing PuTTY&lt;/a&gt;&amp;nbsp;(Windows only)&lt;/h4&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;First, you need to fetch PuTTY which is available from here:&amp;nbsp;&lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"&gt;http://www.chiark.greenend.org.uk/~sgtatham/putty/&lt;/a&gt;&amp;nbsp;or a Google search on PuTTY should find it too. The installer is a fairly typical windows installer, so just go ahead and run it. The defaults are perfectly acceptable.&lt;/div&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="ConfiguringPuTTY"&gt;Configuring PuTTY&lt;/a&gt;&lt;/h4&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;&lt;span class="figure floatright" style="border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; clear: right; float: right; font-style: italic; margin-bottom: 4px; margin-left: 4px; margin-right: 4px; margin-top: 4px; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;img alt="PuTTY Configuration" height="435" src="http://www.mtu.net/~engstrom/images/putty-conf.gif" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" width="426" /&gt;&lt;br /&gt;Figure 1: PuTTY Configuration&lt;/span&gt;Once you have PuTTY installed, run PuTTY and you will be presented with a PuTTY Configuration window that looks something like that in Figure 1. Adjust each Category of settings as follows:&lt;/div&gt;&lt;ol style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;&lt;em&gt;Session&lt;/em&gt;&lt;ul&gt;&lt;li&gt;Check:&amp;nbsp;&lt;strong&gt;SSH&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Connection&lt;/em&gt;&lt;ul&gt;&lt;li&gt;Auto-login username:&amp;nbsp;&lt;em&gt;username&lt;/em&gt;&lt;br /&gt;with your username&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Connection » SSH&lt;/em&gt;&lt;ul&gt;&lt;li&gt;Preferred SSH protocol version:&amp;nbsp;&lt;strong&gt;2&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Connection » SSH » Auth&lt;/em&gt;&lt;ul&gt;&lt;li&gt;Check:&amp;nbsp;&lt;strong&gt;allow agent forwarding&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;[ you will come back here later to specify your&amp;nbsp;&lt;strong&gt;Private key file for authentication&lt;/strong&gt;&amp;nbsp;]&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Go back to the Session category, click on the&amp;nbsp;&lt;strong&gt;Saved Session&lt;/strong&gt;&amp;nbsp;named&amp;nbsp;&lt;strong&gt;Default Settings&lt;/strong&gt;&amp;nbsp;and click&amp;nbsp;&lt;strong&gt;Save&lt;/strong&gt;. These are now your default PuTTY options.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Test the settings by typing the name of a remote host into the&amp;nbsp;&lt;strong&gt;Host Name&lt;/strong&gt;&amp;nbsp;box and clicking&amp;nbsp;&lt;strong&gt;Open&lt;/strong&gt;. You should be prompted for your remote password and eventually get a shell window.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Go ahead and close that shell by typing&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;exit&lt;/tt&gt;.&lt;/div&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="PuTTYGen"&gt;Generating your Public/Private Keys&lt;/a&gt;&lt;/h4&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;&lt;span class="figure floatright" style="border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; clear: right; float: right; font-style: italic; margin-bottom: 4px; margin-left: 4px; margin-right: 4px; margin-top: 4px; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;img alt="PuTTY Key-Generator" height="464" src="http://www.mtu.net/~engstrom/images/putty-gen.gif" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" width="483" /&gt;&lt;br /&gt;Figure 2: Generating your key&lt;/span&gt;With PuTTY configured, you can now generate your public/private key. On the Windows&amp;nbsp;&lt;strong&gt;START&lt;/strong&gt;&amp;nbsp;menu, where PuTTY shortcuts were installed, should be a shortcut for PuTTYgen. You should see a window like that in Figure 2.&lt;/div&gt;&lt;ol style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;Check:&amp;nbsp;&lt;strong&gt;SSH2 RSA&lt;/strong&gt;&amp;nbsp;(or&amp;nbsp;&lt;strong&gt;SSH2 DSA&lt;/strong&gt;, but&amp;nbsp;&lt;strong&gt;NOT&lt;/strong&gt;&amp;nbsp;SSH1 RSA)&lt;/li&gt;&lt;li&gt;Click:&amp;nbsp;&lt;strong&gt;Generate&lt;/strong&gt;&lt;br /&gt;While PuTTYgen is generating your key, create some "entropy" by moving the mouse around in the empty area of the window.&lt;/li&gt;&lt;li&gt;Enter a&amp;nbsp;&lt;strong&gt;Key Passphrase&lt;/strong&gt;&lt;br /&gt;Make sure it is a good passphrase of more than 10 or so characters. If you choose not to use a passphrase, you will&amp;nbsp;&lt;strong&gt;not&lt;/strong&gt;&amp;nbsp;have to use the PuTTY-Agent (below),&amp;nbsp;&lt;strong&gt;however I do not recommend this&lt;/strong&gt;; Without a passphrase, your private key can be easily read by anyone and may be used to impersonate you on any server where you place your public key.&lt;/li&gt;&lt;li&gt;Click:&amp;nbsp;&lt;strong&gt;Save Private Key&lt;/strong&gt;&lt;br /&gt;Select a place to put your keys such as your home directory; name it something like&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;PuTTY-Private.ppk&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;Click:&amp;nbsp;&lt;strong&gt;Save Public Key&lt;/strong&gt;&lt;br /&gt;Save it to the same directory as the private key, presumably; name it something like&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;PuTTY-Public.pub&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="CreateAuthKeysFromPuTTYKey"&gt;Create your&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;authorized_keys&lt;/tt&gt;&lt;/a&gt;&amp;nbsp;file by coping the text from the&amp;nbsp;&lt;strong&gt;Public Key for pasting into authorized_keys&lt;/strong&gt;&amp;nbsp;text-box into a file, again presumably to the same directory, named something like&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;openssh-key.pub&lt;/tt&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="PuTTYKeyToServer"&gt;Configure the Server's&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace;"&gt;~/.ssh/authorized_keys&lt;/tt&gt;&amp;nbsp;file&lt;/a&gt;&lt;/h4&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;You now need to copy your public key to the remote SSH server and update one setting in your PuTTY configuration:&lt;/div&gt;&lt;ol start="7" style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;Store your&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;openssh-key.pub&lt;/tt&gt;&amp;nbsp;on the remote server in your remote&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.ssh/authorized_keys&lt;/tt&gt;&amp;nbsp;file:&lt;/div&gt;&lt;ol class="ol2" style="list-style-type: lower-roman;"&gt;&lt;li&gt;&lt;strong&gt;Open Command/Shell Prompt&lt;/strong&gt;&amp;nbsp;by typing&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;cmd&lt;/tt&gt;&amp;nbsp;in the Windows Run dialog or by starting a CYGWIN shell.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="CopyPuTTYKeyToServer"&gt;Copy Public Key to Server&lt;/a&gt;&lt;/strong&gt;: at the command prompt, enter:&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;&lt;em&gt;[ CMD: ]&lt;/em&gt;&lt;br /&gt;pscp &lt;em&gt;c:\path\to\openssh-key.pub username@cvs.server.com&lt;/em&gt;:openssh-key.pub&lt;br /&gt;or&lt;br /&gt;&lt;em&gt;[ CYGWIN: ]&lt;/em&gt;&lt;br /&gt;scp &lt;em&gt;/cygdrive/c/path/to/openssh-key.pub username@cvs.server.com&lt;/em&gt;:openssh-key.pub&lt;/pre&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;...where&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;&lt;em&gt;c:\path\to\openssh-key.pub&lt;/em&gt;&lt;/tt&gt;&amp;nbsp;specifies the location of the key file created in step two, and&amp;nbsp;&lt;em&gt;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;username@cvs.server&lt;/tt&gt;&lt;/em&gt;&amp;nbsp;specifies your user name on the CVS server and the hostname of the CVS server. You may be prompted to confirm the legitimacy of the host, and you will be prompted to enter your password for the CVS server.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;&lt;strong&gt;Connect using PuTTY&lt;/strong&gt;: if necessary, run the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;putty&lt;/tt&gt;&amp;nbsp;program, entering the name of the remote cvs server.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;&lt;strong&gt;Configure the Key on the CVS Server&lt;/strong&gt;: after logging into the CVS server, enter the following commands to place your public key into the remote&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.ssh/authorized_keys&lt;/tt&gt;&amp;nbsp;file:&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;mkdir ~/.ssh&lt;br /&gt;chmod 700 .ssh&lt;br /&gt;cat ~/openssh-key.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;rm ~/openssh-key.pub&lt;br /&gt;chmod 600 ~/.ssh/*&lt;br /&gt;exit &lt;/pre&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;You can also copy/paste, ftp, email or transmit your public key to the remote server by any means you find convenient. Just put the contents in the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;~/.ssh/authorized_keys&lt;/tt&gt;&amp;nbsp;file, ensuring that what you paste is only one (long) line.&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0.3em; margin-top: 0.3em;"&gt;&lt;strong&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="ConfigurePuTTYwithPrivateKey"&gt;Configure PuTTY to use the Private Key&lt;/a&gt;:&lt;/strong&gt;&amp;nbsp;Open PuTTY again; when the configuration window opens:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Open the&amp;nbsp;&lt;em&gt;Connection » SSH » Auth&lt;/em&gt;&amp;nbsp;configuration category&lt;/li&gt;&lt;li&gt;Set the location of your&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;PuTTY-Private.ppk&lt;/tt&gt;&amp;nbsp;file in the&amp;nbsp;&lt;strong&gt;Private Key File for Authentication&lt;/strong&gt;&amp;nbsp;box&lt;/li&gt;&lt;li&gt;Return to the&amp;nbsp;&lt;em&gt;Session&lt;/em&gt;&amp;nbsp;configuration category&lt;/li&gt;&lt;li&gt;Select and save your settings into the&amp;nbsp;&lt;strong&gt;Default Settings&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Test the settings by typing the name of the remote host into the&amp;nbsp;&lt;strong&gt;Host Name&lt;/strong&gt;&amp;nbsp;box and clicking&amp;nbsp;&lt;strong&gt;Open&lt;/strong&gt;. You should be prompted the passphrase of your private key rather than for your remote password; close the resulting shell window by typing&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;exit&lt;/tt&gt;.&lt;/div&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="PuTTYAgent"&gt;Starting the PuTTY-Agent (Pageant)&lt;/a&gt;&lt;/h4&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Run the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;pageant&lt;/tt&gt;&amp;nbsp;program from the&amp;nbsp;&lt;strong&gt;START&lt;/strong&gt;&amp;nbsp;menu. This will load the PuTTY Authentication Agent into the Windows System Tray; it appears as a little computer with a "secret agent hat". PuTTY-Agent is a process which runs in the background and listens for "requests" from&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;PuTTY&lt;/tt&gt;&amp;nbsp;clients needing your private key.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;When PuTTY-Agent starts, it doesn't know about your private keys by default. Right-click the Pageant icon in the Windows System Tray. Select&amp;nbsp;&lt;strong&gt;Add Key&lt;/strong&gt;. Navigate to the directory where you saved the public and private keys in the previous step, and select the file&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;&amp;nbsp;PuTTY-Private.ppk&lt;/tt&gt;. Pageant will prompt you for the passphrase of the key.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Now you are basically done. Restart PuTTY again to test the settings one last time; enter the name of the remote host into the&amp;nbsp;&lt;strong&gt;Host Name&lt;/strong&gt;&amp;nbsp;box and clicking&amp;nbsp;&lt;strong&gt;Open&lt;/strong&gt;. You should&amp;nbsp;&lt;strong&gt;NOT&lt;/strong&gt;&amp;nbsp;be prompted the passphrase of your private key nor your remote password; close the resulting shell window by typing&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;exit&lt;/tt&gt;.&lt;/div&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="AutoStartPageant"&gt;Auto-Start PuTTY-Agent Upon Login&lt;/a&gt;&lt;/h4&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Pageant can automatically load one or more private keys when it starts up, if you provide them on the Pageant command line (i.e. in a shortcut). If you copy the standard Pageant shortcut, append the location of your key(s) to the Target: line. It might look something like this:&lt;/div&gt;&lt;pre style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; color: #225555; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-size: 13px; margin-left: 5%; margin-right: 5%; margin-top: 0.4em; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; text-align: justify;"&gt;C:\PuTTY\pageant.exe d:\main.key d:\secondary.key&lt;/pre&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;If the keys are stored encrypted, Pageant will request the passphrases on startup.&lt;/div&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;If you place that new shortcut in your&amp;nbsp;&lt;em&gt;Startup&lt;/em&gt;&amp;nbsp;folder, it should be loaded automatically when you login to Windows.&lt;/div&gt;&lt;h2 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 22px; font-style: italic; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="ImportExportKeys"&gt;Using PuTTY Keys for OpenSSH and vice-versa&lt;/a&gt;&lt;/h2&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;If you already have keys used for OpenSSH or for PuTTY, you may use those keys in the other application, but you need to go through an import or export step using PuTTYgen.&lt;/div&gt;&lt;ol style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;First, open PuTTYGen again...&lt;/li&gt;&lt;/ol&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="ImportOpenSSH"&gt;To import a OpenSSH key into PuTTY:&lt;/a&gt;&lt;/h4&gt;&lt;ol start="2" style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;In PuTTYgen, select:&amp;nbsp;&lt;strong&gt;Conversions&amp;nbsp;&lt;em&gt;»&lt;/em&gt;&amp;nbsp;Import Key&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Browse to your&amp;nbsp;&lt;strong&gt;private&lt;/strong&gt;&amp;nbsp;OpenSSH key and select&amp;nbsp;&lt;strong&gt;Open.&lt;/strong&gt;&lt;br /&gt;You should be required to enter your private key passphrase.&lt;/li&gt;&lt;li&gt;Click:&amp;nbsp;&lt;strong&gt;Save Private Key&lt;/strong&gt;&lt;br /&gt;Select a place to put your keys such as your home directory; name it something like&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;PuTTY-Private.ppk&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;Click:&amp;nbsp;&lt;strong&gt;Save Public Key&lt;/strong&gt;&lt;br /&gt;Save it to the same directory as the private key, presumably; name it something like&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;PuTTY-Public.pub&lt;/tt&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Everything else should proceed as before, including using PuTTY-Agent (Pageant), but be sure to&amp;nbsp;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#ConfigurePuTTYwithPrivateKey"&gt;tell PuTTY about your new Private Key as above&lt;/a&gt;.&lt;/div&gt;&lt;h4 style="background-color: #ddddaa; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.1em; text-align: justify;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" name="ExportOpenSSH"&gt;To export a PuTTY key for OpenSSH:&lt;/a&gt;&lt;/h4&gt;&lt;ol start="2" style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; text-align: justify;"&gt;&lt;li&gt;In PuTTYgen, select:&amp;nbsp;&lt;strong&gt;Conversions&amp;nbsp;&lt;em&gt;»&lt;/em&gt;&amp;nbsp;Load Private Key&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Browse to your&amp;nbsp;&lt;strong&gt;private&lt;/strong&gt;&amp;nbsp;PuTTY key and select&amp;nbsp;&lt;strong&gt;Open.&lt;/strong&gt;&lt;br /&gt;You should be required to enter your private key passphrase.&lt;/li&gt;&lt;li&gt;Select:&amp;nbsp;&lt;strong&gt;Conversions&amp;nbsp;&lt;em&gt;»&lt;/em&gt;&amp;nbsp;Export OpenSSH Key&lt;/strong&gt;&lt;br /&gt;Select a place to put your keys such as your home directory; name it something like&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;openssh-key&lt;/tt&gt;.&lt;/li&gt;&lt;li&gt;To save the public key, follow the same instructions for&amp;nbsp;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#CreateAuthKeysFromPuTTYKey"&gt;creating the&amp;nbsp;&lt;tt style="color: #993300; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold;"&gt;openssh-key.pub&lt;/tt&gt;&amp;nbsp;file as above.&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: #ddddaa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; margin-bottom: 0.3em; margin-top: 0.3em; text-align: justify;"&gt;Everything else should proceed as before, including using PuTTY-Agent (Pageant), but be sure to&amp;nbsp;&lt;a href="http://www.mtu.net/~engstrom/ssh-agent.php#CopyPuTTYKeyToServer"&gt;copy your openSSH key to the server, as above&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-1867145275096076472?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/1867145275096076472/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2011/12/cvstortoise.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/1867145275096076472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/1867145275096076472'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2011/12/cvstortoise.html' title='CVSTortoise 避免重复输入密码， 并且安全的方法'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-5249972759066086368</id><published>2011-12-09T03:15:00.001-08:00</published><updated>2011-12-09T03:16:15.715-08:00</updated><title type='text'>6 ways to get HBRUSH</title><content type='html'>&lt;br /&gt;&lt;table style="background-color: white; font-family: Arial; table-layout: fixed; width: 853px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="filter: none; font-size: 12px; line-height: 18px; visibility: visible !important; word-break: break-all; word-wrap: break-word; zoom: 1 !important;"&gt;&lt;div class="cnt" id="blog_text" style="filter: none; overflow-x: hidden; overflow-y: hidden; position: relative !important; visibility: visible !important; word-break: normal; word-wrap: break-word; zoom: 1 !important;"&gt;&lt;table class="FCK__ShowTableBorders" style="table-layout: fixed;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="filter: none; font-size: 12px; visibility: visible !important; word-break: break-all; word-wrap: break-word; zoom: 1 !important;"&gt;&lt;div class="cnt" style="filter: none; overflow-x: hidden; overflow-y: hidden; position: relative !important; visibility: visible !important; word-break: normal; word-wrap: break-word; zoom: 1 !important;"&gt;&lt;strong&gt;HBRUSH hbr;&lt;/strong&gt;&lt;br /&gt;第一种:&amp;nbsp;&lt;strong&gt;hbr= CreateSolidBrush(RGB(255,0,0));&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&lt;span style="color: #339966;"&gt;//单色的画刷&lt;/span&gt;&lt;br /&gt;第二种:&amp;nbsp;&lt;strong&gt;hbr= (HBRUSH)GetStockObject(BLACK_BRUSH);&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339966;"&gt;//只能取特定颜色的画刷,如&lt;/span&gt;&lt;span style="color: #339966;"&gt;BLACK_BRUSH,GRAY_BRUSH等刷&lt;/span&gt;&lt;br /&gt;第三种:&amp;nbsp;&lt;strong&gt;hbr= CreatePatternBrush(HBITMAP hbmp);&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339966;"&gt;//得到位图画刷&lt;/span&gt;&lt;br /&gt;第四种:&amp;nbsp;&lt;strong&gt;hbr = CreateHatchBrush(int fnStyle,&lt;/strong&gt;&amp;nbsp;&lt;strong&gt;COLORREF clrref)&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339966;"&gt;//创建一种带阴影的画刷&lt;/span&gt;&lt;br /&gt;第五种:&lt;strong&gt;&amp;nbsp;hbr= CreateBrushIndirect(LOGBRUSH);&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339966;"&gt;//通过LOGBRUSH结构体来取画刷&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;typedef struct tagLOGBRUSH {&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;UINT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbStyle;&lt;/strong&gt;&amp;nbsp;&lt;span style="color: #339966;"&gt;//画刷类型&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;COLORREF lbColor;&amp;nbsp;&lt;/strong&gt;&lt;span style="color: #339966;"&gt;&lt;strong&gt;//&lt;/strong&gt;颜色&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LONG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lbHatch;&lt;/strong&gt;&amp;nbsp;&lt;span style="color: #339966;"&gt;//阴影&lt;/span&gt;&lt;strong&gt;} LOGBRUSH, *PLOGBRUSH;&lt;/strong&gt;&lt;br /&gt;第六种:&amp;nbsp;&lt;strong&gt;hbr= HBRUSH CreateDIBPatternBrush(&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339966;"&gt;//通过与设备无关位图创建一个画刷&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HGLOBAL hglbDIBPacked,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // handle to DIB&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;UINT fuColorSpec&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339966;"&gt;// color table data&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/strong&gt;&lt;br /&gt;例如：&lt;br /&gt;&lt;strong&gt;&lt;span style="color: blue;"&gt;HBRUSH CAfdView&lt;/span&gt;::&lt;span style="color: #993300;"&gt;OnCtlColor&lt;/span&gt;(&lt;span style="color: blue;"&gt;CDC&lt;/span&gt;* pDC,&amp;nbsp;&lt;span style="color: blue;"&gt;CWnd&lt;/span&gt;* pWnd,&amp;nbsp;&lt;span style="color: blue;"&gt;UINT&lt;/span&gt;&amp;nbsp;nCtlColor)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: blue;"&gt;HBRUSH&lt;/span&gt;&amp;nbsp;hbr =&amp;nbsp;&lt;span style="color: blue;"&gt;CFormView&lt;/span&gt;::&lt;span style="color: #993300;"&gt;OnCtlColor&lt;/span&gt;(pDC, pWnd, nCtlColor);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339966;"&gt;// TODO: Change any attributes of the DC here&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(pWnd-&amp;gt;&lt;span style="color: #993300;"&gt;GetDlgCtrlID&lt;/span&gt;()==&lt;span style="color: magenta;"&gt;IDC_STATIC1&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDC-&amp;gt;&lt;span style="color: #993300;"&gt;SetTextColor&lt;/span&gt;(&lt;span style="color: magenta;"&gt;RGB&lt;/span&gt;(200,0,0));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pDC-&amp;gt;&lt;span style="color: #993300;"&gt;SetBkColor&lt;/span&gt;(&lt;span style="color: magenta;"&gt;RGB&lt;/span&gt;(0,0,255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;static HBRUSH&lt;/span&gt;&amp;nbsp;hBrush =&amp;nbsp;&lt;span style="color: #993300;"&gt;CreateSolidBrush&lt;/span&gt;(&lt;span style="color: magenta;"&gt;RGB&lt;/span&gt;(222,0,255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;hBrush;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339966;"&gt;&amp;nbsp;// TODO: Return a different brush if the default is not desired&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;hbr;&lt;br /&gt;}&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;改变对话框背景色&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: blue;"&gt;HBRUSH&lt;/span&gt;&amp;nbsp;CDqfDlg::&lt;span style="color: #993300;"&gt;OnCtlColor&lt;/span&gt;(&lt;span style="color: blue;"&gt;CDC&lt;/span&gt;* pDC,&amp;nbsp;&lt;span style="color: blue;"&gt;CWnd&lt;/span&gt;* pWnd,&amp;nbsp;&lt;span style="color: blue;"&gt;UINT&lt;/span&gt;&amp;nbsp;nCtlColor)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: blue;"&gt;HBRUSH&lt;/span&gt;&amp;nbsp;hbr =&amp;nbsp;&lt;span style="color: blue;"&gt;CDialog&lt;/span&gt;::&lt;span style="color: #993300;"&gt;OnCtlColor&lt;/span&gt;(pDC, pWnd, nCtlColor);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339966;"&gt;// TODO: Change any attributes of the DC here&lt;br /&gt;&lt;br /&gt;// TODO: Return a different brush if the default is not desired&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;(nCtlColor ==&amp;nbsp;&lt;span style="color: magenta;"&gt;CTLCOLOR_DLG&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;CBrush&lt;/span&gt;&amp;nbsp;*brush;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; brush =&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;CBrush&lt;/span&gt;(&lt;span style="color: magenta;"&gt;RGB&lt;/span&gt;(221,221,221));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;HBRUSH&lt;/span&gt;)(brush-&amp;gt;m_hObject);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;hbr;&lt;br /&gt;}&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7288308194430638596-5249972759066086368?l=slash-directx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://slash-directx.blogspot.com/feeds/5249972759066086368/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://slash-directx.blogspot.com/2011/12/6-ways-to-get-hbrush.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/5249972759066086368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7288308194430638596/posts/default/5249972759066086368'/><link rel='alternate' type='text/html' href='http://slash-directx.blogspot.com/2011/12/6-ways-to-get-hbrush.html' title='6 ways to get HBRUSH'/><author><name>Slash</name><uri>http://www.blogger.com/profile/07737276441198143037</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://4.bp.blogspot.com/-IjnX5tSgjnQ/TjpdrrmVDLI/AAAAAAAAIu0/4Ik3rA6eZHs/s220/%25E7%258E%258B%25E9%25A9%25B0%25E5%25AE%2587.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7288308194430638596.post-7918849921400797676</id><published>2011-12-05T06:24:00.001-08:00</published><updated>2011-12-05T06:30:04.242-08:00</updated><title type='text'>C++ Predefined Compiler Macros</title><content type='html'>&lt;br /&gt;&lt;h1 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; font-size: xx-large; line-height: 17px; margin-bottom: 0.5em; margin-left: 0em; margin-right: 0em; margin-top: 0.7em; text-align: center;"&gt;&lt;/h1&gt;&lt;div class="contents" style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 0em; margin-left: 1em; margin-right: 0em; margin-top: 0em; text-align: left;"&gt;&lt;dl&gt;&lt;/dl&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec2" name="sec2"&gt;&lt;/a&gt;Borland Turbo C&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__TURBOC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__TURBOC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;?&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Turbo C&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__TURBOC__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;397&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;661&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://www.borland.com/borlandcpp/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Turbo_C" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec3" name="sec3"&gt;&lt;/a&gt;Borland C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__BORLANDC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__BORLANDC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__CODEGEARC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__CODEGEARC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;?&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Borland C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;C++ Builder&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__BORLANDC__&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__CODEGEARC__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x200&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x400&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3.1&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x410&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;4.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x452&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;5.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x500&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;5.02&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;1.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x520&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x530&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;4.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x540&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;5.5&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;5.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x550&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;5.51&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x551&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2009&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x613&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x613&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2010&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x621&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x621&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://www.embarcadero.com/products/cbuilder" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://directory.google.com/Top/Computers/Programming/Languages/C%2B%2B/C%2B%2BBuilder/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Google Directory&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/C_plus_plus_builder" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec4" name="sec4"&gt;&lt;/a&gt;Clang&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__clang__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__clang_major__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__clang_minor__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Revision&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__clang_patchlevel__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Patch&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;Please note that clang also defines the GNU C version macros, but you should use the clang&amp;nbsp;&lt;a href="http://clang.llvm.org/docs/LanguageExtensions.html#feature_check" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;feature checking macros&lt;/a&gt;&amp;nbsp;to detect the availability of various features.&lt;/div&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://clang.llvm.org/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Clang" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec5" name="sec5"&gt;&lt;/a&gt;Comeau C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__COMO__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__COMO_VERSION__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRR&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;RR = Revision&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Comeau C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__COMO_VERSION__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2.3&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;230&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.comeaucomputing.com/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec6" name="sec6"&gt;&lt;/a&gt;Compaq C/C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DECC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;C compiler&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DECC_VER&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VVRRTPPPP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VV = Version&lt;br /&gt;RR = Revision&lt;br /&gt;T = Type (9 = official)&lt;br /&gt;PPPP = Patch&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DECCXX&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;C++ compiler&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DECCXX_VER&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;As __DECC_VER&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__VAXC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Obsolete&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VAXC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Obsolete&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Compaq C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__DECC_VER&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;6.0-001&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;60090001&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.openvms.compaq.com/openvms/brochures/deccplus/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec7" name="sec7"&gt;&lt;/a&gt;Cray C&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;_CRAYC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;_RELEASE&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;_RELEASE_MINOR&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Revision&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.cray.com/products/software/cplus.html" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec8" name="sec8"&gt;&lt;/a&gt;Cygwin&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__CYGWIN__&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://www.cygwin.com/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Cygwin" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec9" name="sec9"&gt;&lt;/a&gt;Diab C/C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DCC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;1&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__VERSION_NUMBER__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRPP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;br /&gt;PP = Patch&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Diab C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__VERSION_NUMBER__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;4.4g&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;4426&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.windriver.com/products/html/dcc_compiler.html" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec10" name="sec10"&gt;&lt;/a&gt;Digital Mars&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DMC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__SC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Obsolete&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__ZTC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Obsolete&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DMC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0xVRP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;br /&gt;PP = Patch&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Digital Mars&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__DMC__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;7.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x700&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;7.2&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x720&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;8.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x800&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.digitalmars.com/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec11" name="sec11"&gt;&lt;/a&gt;Dignus Systems/C and Systems/C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__SYSC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;C compiler&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__SYSC_VER__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRRPP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;RR = Revision&lt;br /&gt;PP = Patch&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Systems/C&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__SYSC_VER__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;1.80.32&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;18032&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.dignus.com/dcxx/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec12" name="sec12"&gt;&lt;/a&gt;DJGPP&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DJGPP__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DJGPP__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__DJGPP_MINOR__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Revision&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__GO32__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Defined by DJGPP 1.x&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;DJGPP&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__DJGPP__&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__DJGPP_MINOR__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2.01&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://www.delorie.com/djgpp/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://www.google.com/Top/Computers/Software/Operating_Systems/x86/DOS/Programming/Compilers/DJGPP/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Google Directory&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Djgpp" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec13" name="sec13"&gt;&lt;/a&gt;EKOPath&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__PATHCC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__PATHCC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__PATHCC_MINOR__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Revision&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__PATHCC_PATCHLEVEL__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Patch&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;EKOPath&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__PATHCC__&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__PATHCC_MINOR__&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__PATHCC_PATCHLEVEL__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.pathscale.com/ekopath.html" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec14" name="sec14"&gt;&lt;/a&gt;EDG C++ Front End&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__EDG__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__EDG_VERSION__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRR&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;RR = Revision&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;EDG C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__EDG_VERSION__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2.30&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;230&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.edg.com/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec15" name="sec15"&gt;&lt;/a&gt;GNU C/C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__GNUC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__GNUC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__GNUC_MINOR__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Revision&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__GNUC_PATCHLEVEL__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Patch (introduced in version 3.0)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;Please note that the meaning of the __GNUC__ macro has changed subtly over the years, from identifying the GNU C/C++ compiler to identifying any compiler that implements the GNU compiler extensions (see the&lt;a href="http://gcc.gnu.org/ml/gcc/2008-07/threads.html#00025" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Feature request - a macro defined for GCC&lt;/a&gt;&amp;nbsp;discussion for further information). For example, the Intel C++ on Linux also defines these macros from version 8.1 (see the&amp;nbsp;&lt;a href="ftp://download.intel.com/support/performancetools/c/linux/sb/clin81_relnotes.pdf" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Intel C++ Compiler 8.1 for Linux Release Notes&lt;/a&gt;and&amp;nbsp;&lt;a href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Intel Compilers for Linux: Compatibility with GNU Compilers&lt;/a&gt;.)&lt;/div&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;GNU C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__GNUC__&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__GNUC_MINOR__&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__GNUC_PATCHLEVEL__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2.7.x&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;7&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3.0.2&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Alternative Version&lt;/h4&gt;&lt;div class="first" style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;If you prefer a single version macro, you can define the following yourself.&lt;/div&gt;&lt;pre class="example" style="background-color: white; font-family: courier; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;#if defined(__GNUC__)&lt;br /&gt;# if defined(__GNUC_PATCHLEVEL__)&lt;br /&gt;#  define __GNUC_VERSION__ (__GNUC__ * 10000 \&lt;br /&gt;                            + __GNUC_MINOR__ * 100 \&lt;br /&gt;                            + __GNUC_PATCHLEVEL__)&lt;br /&gt;# else&lt;br /&gt;#  define __GNUC_VERSION__ (__GNUC__ * 10000 \&lt;br /&gt;                            + __GNUC_MINOR__ * 100)&lt;br /&gt;# endif&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;The format of this new macro is:&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__GNUC_VERSION__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VVRRPP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VV = Version&lt;br /&gt;RR = Revision&lt;br /&gt;PP = Patch&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example of Alternative Version&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;GNU C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__GNUC_VERSION__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;2.7.x&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;20700&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3.0.2&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;30002&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://gcc.gnu.org/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://directory.google.com/Top/Computers/Programming/Compilers/GNU_Compiler_Collection/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Google Directory&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/GNU_Compiler_Collection" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec16" name="sec16"&gt;&lt;/a&gt;Green Hill C/C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__ghs__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__GHS_VERSION_NUMBER__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;br /&gt;P = Patch&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__GHS_REVISION_DATE__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Epoch time&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Green Hill C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__GHS_VERSION_NUMBER__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;4.2.1&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;421&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://www.ghs.com/products/MULTI_IDE.html" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Green_Hills_Software" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec17" name="sec17"&gt;&lt;/a&gt;HP ANSI C&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__HP_cc&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://devresource.hp.com/devresource/Tools/lang.html" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec18" name="sec18"&gt;&lt;/a&gt;HP aCC&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__HP_aCC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__HP_aCC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;1&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;From version A.01.15 (and A.03.13)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__HP_aCC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VVRRPP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VV = Version&lt;br /&gt;RR = Revision&lt;br /&gt;PP = Patch&lt;br /&gt;&lt;br /&gt;From version A.01.21 (and A.03.25)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;HP aCC&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__HP_aCC&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;A.01.21&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;012100&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://devresource.hp.com/devresource/Tools/lang.html" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec19" name="sec19"&gt;&lt;/a&gt;IAR C/C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__IAR_SYSTEMS_ICC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__VER__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRR&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;RR = Revision&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;IAR C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__VER__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3.34&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;334&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.iar.com/p7371/p7371_eng.php" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec20" name="sec20"&gt;&lt;/a&gt;IBM XL C/C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__xlc__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Compiles C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__xlC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Compiles C++&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__xlc__&lt;br /&gt;__xlC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0xVVRR&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VV = Version&lt;br /&gt;RR = Revision&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__IBMC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;From ?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__IBMCPP__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;From ?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__IBMC__&lt;br /&gt;__IBMCPP__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;br /&gt;P = Patch&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;Please note that the z/OS C/C++ compiler also defines&amp;nbsp;&lt;code style="font-family: courier;"&gt;__IBMC__&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style="font-family: courier;"&gt;__IBMCPP__&lt;/code&gt;&amp;nbsp;macros, but with a different syntax. See the entry on the z/OS C/C++ compiler below for further information.&lt;/div&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;IBM XL C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__xlC__&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__IBMCPP__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;3.1&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x0301&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;4.5&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x0405&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;450&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;5.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x0500&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;500&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://www.ibm.com/software/ad/caix/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/VisualAge" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec21" name="sec21"&gt;&lt;/a&gt;IBM z/OS C/C++&lt;/h2&gt;&lt;div class="first" style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;This is the XL C/C++ compiler for mainframes (e.g. z/OS). The entry on XL C/C++ has been split into two for clarity.&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__IBMC__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__IBMCPP__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__IBMC__&lt;br /&gt;__IBMCPP__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;NVRRM&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;N = Product (0 = C/370, 1 = MVS, 2 = OS/390, 4 = z/OS)&lt;br /&gt;V = Version&lt;br /&gt;RR = Revision&lt;br /&gt;P = Patch&lt;br /&gt;&lt;br /&gt;Defined for z/OS XL C/C++&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__COMPILER_VER__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0xNVRRPPPP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;N = Product (see above)&lt;br /&gt;V = Version&lt;br /&gt;RR = Revision&lt;br /&gt;PPPP = Patch&lt;br /&gt;&lt;br /&gt;Defined for z/OS XL C/C++&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;Please note that XL C/C++ also defines&amp;nbsp;&lt;code style="font-family: courier;"&gt;__IBMC__&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style="font-family: courier;"&gt;__IBMCPP__&lt;/code&gt;&amp;nbsp;macros, but with a different syntax. You can use&amp;nbsp;&lt;code style="font-family: courier;"&gt;__xlC__&lt;/code&gt;&amp;nbsp;(only defined for XL C/C++) or&amp;nbsp;&lt;code style="font-family: courier;"&gt;__COMPILER_VER__&lt;/code&gt;&amp;nbsp;(only defined for z/OS C/C++) to distinguish between the two.&lt;/div&gt;&lt;pre class="example" style="background-color: white; font-family: courier; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;#if defined(__IBMC__) || defined(__IBMCPP__)&lt;br /&gt;# if defined(__COMPILER_VER__)&lt;br /&gt;/* z/OS C/C++ so __IBMC__ is defined as NVRRM */&lt;br /&gt;# else&lt;br /&gt;/* XL C/C++ so __IBMC__ is defined as VRP */&lt;br /&gt;# endif&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;IBM z/OS XL C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__IBMC__&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__COMPILER_VER__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;1.7&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;41070&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0x41070000&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://www.ibm.com/software/awdtools/czos/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;&lt;a href="http://en.wikipedia.org/wiki/VisualAge" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec22" name="sec22"&gt;&lt;/a&gt;ImageCraft C&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__IMAGECRAFT__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.imagecraft.com/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec23" name="sec23"&gt;&lt;/a&gt;Intel C/C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__INTEL_COMPILER&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__ICC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Obsolete&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__ECC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Obsolete&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__ICL&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__INTEL_COMPILER&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;br /&gt;P = Patch&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__INTEL_COMPILER_BUILD_DATE&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;YYYYMMDD&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;YYYY = Year&lt;br /&gt;MM = Month&lt;br /&gt;DD = Day&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Intel C/C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__INTEL_COMPILER&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__INTEL_COMPILER_BUILD_DATE&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;5.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;500&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;6.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;600&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;8.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;800&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;9.0&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;900&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;20060222&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.intel.com/software/products/index.htm" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec24" name="sec24"&gt;&lt;/a&gt;KAI C++&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__KCC&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__KCC_VERSION&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;0xVRPP&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;br /&gt;PP = Patch (a = 01, b = 02, ...)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;KAI C++&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__KCC_VERSION&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;4.0d&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;4004&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://developer.intel.com/software/products/kcc/" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec25" name="sec25"&gt;&lt;/a&gt;Keil CARM&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__CA__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__KEIL__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__CA__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRR&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Keil CARM&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__CA__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;1.01&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;101&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.keil.com/arm/carm.asp" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec26" name="sec26"&gt;&lt;/a&gt;Keil C166&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__C166__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__C166__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRR&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Keil C166&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;__C166__&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;5.01&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;501&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="menu"&gt;&lt;a href="http://www.keil.com/c166/c166.asp" style="color: #1d3565; font-weight: bold; text-decoration: none;"&gt;Official site&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="background-color: white; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 0.3em;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7288308194430638596" id="sec27" name="sec27"&gt;&lt;/a&gt;Keil C51&lt;/h2&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Type&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Macro&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Format&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style="background-color: #f6f9ff;"&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__C51__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Identification&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__CX51__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;Version&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;__C51__&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;VRR&lt;/td&gt;&lt;td style="border-bottom-color: rgb(221, 227, 239); border-bottom-style: solid; border-left-color: rgb(221, 227, 239); border-left-style: solid; border-right-color: rgb(221, 227, 239); border-right-style: solid; border-top-color: rgb(221, 227, 239); border-top-style: solid; vertical-align: top;"&gt;V = Version&lt;br /&gt;R = Revision&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style="background-color: white; color: #596d9d; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; text-align: left; text-indent: 1em;"&gt;Example&lt;/h4&gt;&lt;div style="background-color: white; font-family: verdana, helvetica, arial, san-serif; line-height: 17px; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; text-align: left;"&gt;&lt;span class="versionx"&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="2" cellpadding="5" class="muse-table" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; background-color: white; border-bottom-color: rgb(156, 172, 209); border-bottom-width: 0px; border-color: initial; border-left-color: rgb(156, 172, 209); border-left-width: 0px; border-right-color: rgb(156, 172, 209); border-right-width: 0px; border-style: initial; border-top-color: rgb(156, 172, 209); border-top-width: 0px; empty-cells: show; font-family: verdana, helvetica, arial, san-serif; margin-bottom: 1em; margin-left: 2em; margin-right: 2em; margin-top: 1em; width: 50%;"&gt;&lt;thead style="background-color: #9cacd1; color: #2c313d; line-height: 19px; text-align: left;"&gt;&lt;tr&gt;&lt;th style="border-bottom-color: rgb(156, 172, 209); border-bottom-style: solid; border-left-color: rgb(156, 172, 209); border-left-style: solid; border-right-color: rgb(156, 172, 209); border-right-style: solid; border-top-color: rgb(156, 172, 209); border-top-style: solid;"&gt;Keil C51&lt;/th&gt;&lt;th style="border-bottom-color: rgb(156, 172, 2
