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

<channel>
	<title>Wesley&#039;s Techblog &#187; Linux</title>
	<atom:link href="http://wesley.vidiqatch.org/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://wesley.vidiqatch.org</link>
	<description>This blog does not need a smart-ass tagline</description>
	<lastBuildDate>Wed, 09 Sep 2009 21:36:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Back in the Dutch Ubuntu LoCoTeam</title>
		<link>http://wesley.vidiqatch.org/20-08-2009/back-in-the-dutch-ubuntu-locoteam/</link>
		<comments>http://wesley.vidiqatch.org/20-08-2009/back-in-the-dutch-ubuntu-locoteam/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 00:48:53 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://wesley.vidiqatch.org/?p=518</guid>
		<description><![CDATA[
Back In 2006 I was active for nearly two years in the Dutch Ubuntu LoCoTeam as site/forum administrator and release party organiser. Due to time constraints (among many other factors) my participation as LoCoTeam member steadily declined. But yesterday I became moderator of the official Dutch Ubuntu forums again. So far the community response (by [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="Ubuntu-NL" src="http://hardy.releaseparty.eu/images/ubuntu-nl_logo.jpg" alt="" width="300" height="69" /></p>
<p>Back In 2006 I was active for nearly two years in the Dutch Ubuntu LoCoTeam as site/forum administrator and release party organiser. Due to time constraints (among many other factors) my participation as LoCoTeam member steadily declined. But yesterday I became moderator of the official <a href="http://forum.ubuntu-nl.org/">Dutch Ubuntu forums</a> again. So far the community response (by e-mail) has been wonderful. It feels kind of good to know that a lot of people thought you did a great job back then and that they are happy with your return <img src='http://wesley.vidiqatch.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I hope I can make enough time to actively help out the LoCoTeam &#8211; because there&#8217;s a lot of other stuff to do as well &#8211; and I can only do my best. The reason for my renewed participation is that I want to make a difference instead of complaining about some of the problems I was seeing. Of course some problems are to be expected: Ubuntu-NL has <strong>grown considerably</strong>. When I think back of my first days as forum administrator (about 2 years ago) I could easily read all posts myself. There were about <strong>600</strong> registered forum users in total, but today there are over <strong>17.000</strong>!</p>
<p>Oh well. I hope I can make a difference.</p>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/20-08-2009/back-in-the-dutch-ubuntu-locoteam/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Overriding dynamic library calls (function interposition)</title>
		<link>http://wesley.vidiqatch.org/18-08-2009/overriding-dynamic-library-calls-function-interposition/</link>
		<comments>http://wesley.vidiqatch.org/18-08-2009/overriding-dynamic-library-calls-function-interposition/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 07:32:57 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wesley.vidiqatch.org/?p=497</guid>
		<description><![CDATA[About function interposition
I was wondering how I could override dynamic library calls in Linux, and I came across this technique known as function interposition. It is a powerful technique that allows you to override dynamic library calls. It might sound dull, but it can be very, very useful. There are some memory trace tools that [...]]]></description>
			<content:encoded><![CDATA[<h4>About function interposition</h4>
<p>I was wondering how I could <em>override dynamic library calls</em> in Linux, and I came across this technique known as <strong>function interposition</strong>. It is a powerful technique that allows you to override dynamic library calls. It might sound dull, but it can be very, very useful. There are some memory trace tools that make use of this technique to work, but perhaps a cooler example is the <a href="http://nullkey.ath.cx/projects/glc/">OpenGL capture system</a> which was created by <a href="nullkey.ath.cx">nullkey</a>: it can capture OpenGL frames by overriding certain OpenGL functions. Another example are cheat tools (wallhacks, aimbots) which also make use of this technique a lot.</p>
<h4>Some background</h4>
<p>While Googling <em>(did I spell that right?)</em> I came across <a href="http://www.jayconrod.com/cgi/view_post.py?23">this</a> recent blog article which explains the background very well. I will quote it here:</p>
<blockquote><p>First, some background. When a program that uses dynamic libraries is compiled, a list of undefined symbols is included in the binary, along with a list of libraries the program is linked with. There is no correspondence between the symbols and the libraries; the two lists just tell the loader which libraries to load and which symbols need to be resolved. At runtime, each symbol is resolved using the first library that provides it. This means that if we can get a library containing our wrapper functions to load before other libraries, the undefined symbols in the program will be resolved to our wrappers instead of the real functions.</p></blockquote>
<p>So if we create a custom shared library which overrides some of the functions of the original library, our functions will be called instead of those of the original library.</p>
<h4>How to do it</h4>
<ul>
<li>Write new functions which override existing functions</li>
<li>Compile the written code to a dynamic library that is linked to the dynamic linking interface library</li>
<li>Use the <em>LD_PRELOAD</em> environment variable when running an application to preload your custom library before all other dynamic libraries</li>
</ul>
<p><a href="http://www.jayconrod.com/cgi/view_post.py?23">The article by Jay Conrod</a> has an example which shows you the basic implementation of a simple memory allocation tracer.</p>
<p>I have also cooked up an example myself. Because I&#8217;ve been busy learning more about OpenGL, I thought that it shouldn&#8217;t be too hard to create a wallhack for one of my favourite games: <a href="http://en.wikipedia.org/wiki/Soldier_of_Fortune_II:_Double_Helix">Soldier of Fortune 2</a> running in Wine. Just for testing purposes of course! I am no cheater <img src='http://wesley.vidiqatch.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  It turned out to be relatively simple, although my first tries weren&#8217;t so very successful:</p>
<ul>
<li><a href="http://wesley.vidiqatch.org/images/hack_v1.png">Epic fail</a> &#8211; At least I know my library is used now.</li>
<li><a href="http://wesley.vidiqatch.org/images/hack_v2.png">Partial success</a> &#8211; Disabling depth testing completely was only a partial success.</li>
<li><a href="http://wesley.vidiqatch.org/images/hack_v3.png">Success</a> &#8211; A debugger can tell that players are drawn using glDrawElements(). By knowing the number of elements for each character, we can disable depth testing selectively.</li>
</ul>
<div class="wp-caption aligncenter" style="width: 568px"><a href="/images/hack_v3.png"><img title="SoF2 wallhack" src="/images/hack_v3.png" alt="Soldier of Fortune 2 wallhack example" width="558" height="430" /></a><p class="wp-caption-text">Soldier of Fortune 2 wallhack example</p></div>
<p>For those of you who are interested in the code:</p>
<div class="codecolorer-container cpp-qt default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br /></div></td><td><div class="cpp-qt codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #888888; font-style: italic;">/*<br />
&nbsp; &nbsp; Simple wallhack example for Soldier of Fortune 2 (Wine) in Linux using function interposition<br />
<br />
&nbsp; &nbsp; This code snippet was written by Wesley Stessens (wesley@ubuntu.com)<br />
&nbsp; &nbsp; It is released in the Public Domain.<br />
<br />
&nbsp; &nbsp; Compilation: gcc -Wall -ansi -pedantic -shared -ldl -fPIC glhack.c -o glhack.so<br />
&nbsp; &nbsp; Usage: LD_PRELOAD=glhack.so wine game.exe<br />
*/</span><br />
<br />
<span style="color: #006E28;">#define _GNU_SOURCE</span><br />
<span style="color: #006E28;">#include &lt;dlfcn.h&gt;</span><br />
<span style="color: #006E28;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #006E28;">#include &lt;stdint.h&gt;</span><br />
<span style="color: #006E28;">#include &lt;GL/gl.h&gt;</span><br />
<br />
<span style="color: #888888; font-style: italic;">/* Override the glDrawElements function */</span><br />
GLAPI <span style="color: #0057AE;">void</span> GLAPIENTRY glDrawElements<span style="color: #006E28;">&#40;</span>GLenum mode<span style="color: #006E28;">,</span> GLsizei count<span style="color: #006E28;">,</span> GLenum type<span style="color: #006E28;">,</span> <span style="color: #0057AE;">const</span> GLvoid <span style="color: #006E28;">*</span>indices<span style="color: #006E28;">&#41;</span> <span style="color: #006E28;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #888888; font-style: italic;">/* Store the actual function in a static function pointer */</span><br />
&nbsp; &nbsp; <span style="color: #0057AE;">static</span> <span style="color: #0057AE;">void</span> <span style="color: #006E28;">&#40;</span><span style="color: #006E28;">*</span>glDrawElements_<span style="color: #006E28;">&#41;</span><span style="color: #006E28;">&#40;</span>GLenum mode<span style="color: #006E28;">,</span> GLsizei count<span style="color: #006E28;">,</span> GLenum type<span style="color: #006E28;">,</span> <span style="color: #0057AE;">const</span> GLvoid <span style="color: #006E28;">*</span>indices<span style="color: #006E28;">&#41;</span> <span style="color: #006E28;">=</span> NULL<span style="color: #006E28;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight:bold;">if</span> <span style="color: #006E28;">&#40;</span><span style="color: #006E28;">!</span>glDrawElements_<span style="color: #006E28;">&#41;</span> <span style="color: #006E28;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; glDrawElements_ <span style="color: #006E28;">=</span> <span style="color: #006E28;">&#40;</span><span style="color: #0057AE;">void</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">*</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">&#40;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">&#40;</span>intptr_t<span style="color: #006E28;">&#41;</span>dlsym<span style="color: #006E28;">&#40;</span>RTLD_NEXT<span style="color: #006E28;">,</span> <span style="color: #BF0303;">&quot;glDrawElements&quot;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #2B74C7;">puts</span><span style="color: #006E28;">&#40;</span><span style="color: #BF0303;">&quot;GLHack: glDrawElements call has been overridden&quot;</span><span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
&nbsp; &nbsp; <span style="color: #006E28;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #888888; font-style: italic;">/* Disable depth testing if the number of elements to draw is one of the following, which means a player is being drawn */</span><br />
&nbsp; &nbsp; <span style="color: #888888; font-style: italic;">/* To avoid abuse of this code by cheaters, I have changed all count constants below to VALUEX */</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight:bold;">if</span> <span style="color: #006E28;">&#40;</span>count <span style="color: #006E28;">==</span> VALUE1 <span style="color: #006E28;">||</span> count <span style="color: #006E28;">==</span> VALUE2 <span style="color: #006E28;">||</span> count <span style="color: #006E28;">==</span> VALUE3 <span style="color: #006E28;">||</span> count <span style="color: #006E28;">==</span> VALUE4<span style="color: #006E28;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; glDisable<span style="color: #006E28;">&#40;</span>GL_DEPTH_TEST<span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight:bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; glEnable<span style="color: #006E28;">&#40;</span>GL_DEPTH_TEST<span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
&nbsp; &nbsp; glDrawElements_<span style="color: #006E28;">&#40;</span>mode<span style="color: #006E28;">,</span> count<span style="color: #006E28;">,</span> type<span style="color: #006E28;">,</span> indices<span style="color: #006E28;">&#41;</span><span style="color: #006E28;">;</span><br />
<span style="color: #006E28;">&#125;</span></div></td></tr></tbody></table></div>
<h4>Interesting thought about multiplayer cheats and Wine</h4>
<p>If anti-cheat tools would perform a sanity check of the OpenGL or DirectX DLL, they would only find the virtual DLL&#8217;s when a game is run in Wine, right? I&#8217;m wondering whether this sort of cheats can be made undetectable then. In a way I hope not, because cheaters are very annoying when you&#8217;re playing a game, but on the other hand, it would be an amazing technological achievement. Anyway, anti-cheat tools like <em>PunkBuster</em> don&#8217;t even work with Wine at the moment, so it might be a non-issue. What are your thoughts?</p>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/18-08-2009/overriding-dynamic-library-calls-function-interposition/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>My very own Linux from scratch</title>
		<link>http://wesley.vidiqatch.org/03-08-2009/my-very-own-linux-from-scratch/</link>
		<comments>http://wesley.vidiqatch.org/03-08-2009/my-very-own-linux-from-scratch/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 14:11:19 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[Archlinux]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Linux From Scratch]]></category>

		<guid isPermaLink="false">http://wesley.vidiqatch.org/?p=362</guid>
		<description><![CDATA[I started with a CLFS (Cross-compiled Linux From Scratch) installation yesterday. After major issues which I encountered when trying to boot the new kernel, I managed to create a very minimalistic kernel configuration which built a kernel that was able to boot up! I now have a very minimal Linux installation.

It&#8217;s not done yet, though. [...]]]></description>
			<content:encoded><![CDATA[<p>I started with a <a href="http://trac.cross-lfs.org/"><strong>CLFS</strong></a> (<em>Cross-compiled Linux From Scratch</em>) installation yesterday. After major issues which I encountered when trying to boot the new kernel, I managed to create a very minimalistic kernel configuration which built a kernel that was able to boot up! I now have a <strong>very minimal</strong> Linux installation.</p>
<p><img class="aligncenter" title="Linux From Scratch" src="http://trac.cross-lfs.org/chrome/site/lfs-logo.png" alt="" width="192" height="75" /></p>
<p>It&#8217;s not done yet, though. I will now have to install base system software, build a more advanced kernel, and then start building and integrating different software components of my <strong>personal choice</strong>. After this project I might either start my own Linux distribution (either from scratch, or based on <a href="http://www.archlinux.org/"><em>Arch Linux</em></a>) or just provide a repository for <em>Arch Linux</em> which contains some special software and help with <em>Arch Linux</em> development &#8211; because the goals of the <em>Arch Linux</em> distribution are very similar to mine. I also want to provide a repository with <strong>custom kernels and software</strong> which improve performance for all laptops that are sold by <a href="http://www.uhasselt.be/english/"><em>Hasselt University</em></a> since 2008. I would however like to improve some things <em>upstream</em> as well, for example add a <strong>graphical installer</strong> and create an <strong>auto-system-configure tool</strong> which sets up <em>Arch Linux</em> for specific usage, and I&#8217;m not entirely sure yet whether these would be welcome changes upstream. If not, I might have to resort to an <em>Arch Linux</em> fork or my own distribution from scratch.</p>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/03-08-2009/my-very-own-linux-from-scratch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>x86 Linux assembler</title>
		<link>http://wesley.vidiqatch.org/02-08-2009/x86-linux-assembler/</link>
		<comments>http://wesley.vidiqatch.org/02-08-2009/x86-linux-assembler/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 20:00:04 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[Assembler]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wesley.vidiqatch.org/?p=355</guid>
		<description><![CDATA[The last few days I&#8217;ve been looking at x86 Linux assembler programming. I think it&#8217;s important to know how the code which you write in higher-level languages gets translated to low-level instructions and in what way things like libc or the kernel are involved. With some knowledge of assembler you can not only directly optimize [...]]]></description>
			<content:encoded><![CDATA[<p>The last few days I&#8217;ve been looking at <strong>x86 Linux assembler </strong>programming. I think it&#8217;s important to know how the code which you write in <em>higher-level</em> languages gets translated to <em>low-level instructions</em> and in what way things like <em>libc</em> or the <em>kernel</em> are involved. With some knowledge of assembler you can not only directly optimize some slower operations by implementing them in low-level assembly and by utilizing specific processor features, but in general you will also learn in which ways you can optimize your software by just writing the high-level code a little bit different &#8211; by anticipating how your code will translate into low-level assembler instructions.</p>
<p>That was my motivation for trying to do a few things with the Netwide Assembler (NASM). The result is a simple demo which utilizes <em>libc</em>, <em>GLUT</em> and <em>OpenGL</em> to display a rotating pyramid and cube.</p>
<div class="wp-caption alignnone" style="width: 535px"><img title="ogl.asm" src="http://wesley.vidiqatch.org/images/ogl.png" alt="ogl.asm" width="525" height="359" /><p class="wp-caption-text">compiled ogl.asm application running in Ubuntu 8.04</p></div>
<p>The resulting code can be viewed here:</p>
<div class="codecolorer-container asm default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br />232<br />233<br />234<br />235<br />236<br />237<br />238<br />239<br />240<br />241<br />242<br />243<br />244<br />245<br />246<br />247<br />248<br />249<br />250<br />251<br />252<br />253<br />254<br />255<br />256<br />257<br />258<br />259<br />260<br />261<br />262<br />263<br />264<br />265<br />266<br />267<br />268<br />269<br />270<br />271<br />272<br />273<br />274<br />275<br />276<br />277<br />278<br />279<br />280<br />281<br />282<br />283<br />284<br />285<br />286<br />287<br />288<br />289<br />290<br />291<br />292<br />293<br />294<br />295<br />296<br />297<br />298<br />299<br />300<br />301<br />302<br />303<br />304<br />305<br />306<br />307<br />308<br />309<br />310<br />311<br />312<br />313<br />314<br />315<br />316<br />317<br />318<br />319<br />320<br />321<br />322<br />323<br />324<br />325<br />326<br />327<br />328<br />329<br />330<br />331<br />332<br />333<br />334<br /></div></td><td><div class="asm codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">; OpenGL example in x86 Linux assembler / NASM using Glut</span><br />
<span style="color: #666666; font-style: italic;">; Author: Wesley Stessens (wesley@ubuntu.com)</span><br />
<span style="color: #666666; font-style: italic;">;</span><br />
<span style="color: #666666; font-style: italic;">; OpenGL calls to create pyramid and cube are from Jeff Molofee's OpenGL tutorial</span><br />
<span style="color: #666666; font-style: italic;">; See: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=05</span><br />
<span style="color: #666666; font-style: italic;">;</span><br />
<span style="color: #666666; font-style: italic;">; Features:</span><br />
<span style="color: #666666; font-style: italic;">; &nbsp;- Calling C functions by cdecl conventions</span><br />
<span style="color: #666666; font-style: italic;">; &nbsp;- Using GLUT and OpenGL calls to perform 3D graphics</span><br />
<span style="color: #666666; font-style: italic;">; &nbsp;- Low-level framerate control</span><br />
<span style="color: #666666; font-style: italic;">;</span><br />
<span style="color: #666666; font-style: italic;">; Sample compile instructions:</span><br />
<span style="color: #666666; font-style: italic;">; nasm -felf ogl.asm &amp;&amp; ld -lglut -s -I/lib/ld-linux.so.2 -o ogl ogl.o</span><br />
<span style="color: #666666; font-style: italic;">;</span><br />
<span style="color: #666666; font-style: italic;">; This code is released as sample code in the public domain. Use it for whatever you want.</span><br />
<span style="color: #666666; font-style: italic;">; Feel free to let me know if you found this code useful in any way.</span><br />
<br />
<span style="color: #666666; font-style: italic;">; Glut</span><br />
<span style="color: #000000; font-weight: bold;">extern</span> glutInit<span style="color: #339933;">,</span> glutInitDisplayMode<span style="color: #339933;">,</span> glutInitWindowSize<span style="color: #339933;">,</span> glutInitWindowPosition<br />
<span style="color: #000000; font-weight: bold;">extern</span> glutCreateWindow<span style="color: #339933;">,</span> glutMainLoop<br />
<span style="color: #000000; font-weight: bold;">extern</span> glutDisplayFunc<span style="color: #339933;">,</span> glutIdleFunc<span style="color: #339933;">,</span> glutReshapeFunc<span style="color: #339933;">,</span> glutKeyboardFunc<br />
<span style="color: #000000; font-weight: bold;">extern</span> glutSwapBuffers<br />
<br />
<span style="color: #666666; font-style: italic;">; Glu</span><br />
<span style="color: #000000; font-weight: bold;">extern</span> gluPerspective<br />
<br />
<span style="color: #666666; font-style: italic;">; OpenGL</span><br />
<span style="color: #000000; font-weight: bold;">extern</span> glClearColor<span style="color: #339933;">,</span> glClearDepth<span style="color: #339933;">,</span> glDepthFunc<span style="color: #339933;">,</span> glEnable<span style="color: #339933;">,</span> glShadeModel<br />
<span style="color: #000000; font-weight: bold;">extern</span> glClear<span style="color: #339933;">,</span> glLoadIdentity<span style="color: #339933;">,</span> glMatrixMode<span style="color: #339933;">,</span> glViewport<br />
<span style="color: #000000; font-weight: bold;">extern</span> glTranslatef<span style="color: #339933;">,</span> glRotatef<span style="color: #339933;">,</span> glBegin<span style="color: #339933;">,</span> glEnd<span style="color: #339933;">,</span> glVertex3f<span style="color: #339933;">,</span> glColor3f<br />
<br />
<span style="color: #666666; font-style: italic;">; Needed for framerate control</span><br />
<span style="color: #000000; font-weight: bold;">extern</span> usleep<br />
<br />
<span style="color: #666666; font-style: italic;">; Macros</span><br />
<span style="color: #339933;">%</span><span style="color: #000000; font-weight: bold;">macro</span> _3call 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #339933;">%</span>4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #339933;">%</span>3<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #339933;">%</span>2<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> <span style="color: #339933;">%</span>1<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 12<br />
<span style="color: #339933;">%</span>endmacro<br />
<span style="color: #339933;">%</span><span style="color: #000000; font-weight: bold;">macro</span> _4call 5<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #339933;">%</span>5<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #339933;">%</span>4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #339933;">%</span>3<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #339933;">%</span>2<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> <span style="color: #339933;">%</span>1<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 16<br />
<span style="color: #339933;">%</span>endmacro<br />
<br />
section <span style="color: #000000; font-weight: bold;">.data</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">title</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">db</span> <span style="color: #7f007f;">'OpenGL in x86 Linux assembler / NASM using Glut'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Data for FP math with 4 bytes</span><br />
&nbsp; &nbsp; n7<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> <span style="color: #339933;">-</span>7<span style="color: #339933;">.</span>0<br />
&nbsp; &nbsp; n6<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> <span style="color: #339933;">-</span>6<span style="color: #339933;">.</span>0<br />
&nbsp; &nbsp; n1p5<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> <span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>5<br />
&nbsp; &nbsp; n1<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> <span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>0<br />
&nbsp; &nbsp; p0p4<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> 0<span style="color: #339933;">.</span>4<br />
&nbsp; &nbsp; p0p5<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> 0<span style="color: #339933;">.</span>5<br />
&nbsp; &nbsp; p1<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> 1<span style="color: #339933;">.</span>0<br />
&nbsp; &nbsp; p1p5<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> 1<span style="color: #339933;">.</span>5<br />
&nbsp; &nbsp; p3<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> 3<span style="color: #339933;">.</span>0<br />
&nbsp; &nbsp; rottrm<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> 4<span style="color: #339933;">.</span>5<br />
&nbsp; &nbsp; rotsqm<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> <span style="color: #339933;">-</span><span style="color: #0000ff;">3.0</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Data for FP math with 8 bytes</span><br />
&nbsp; &nbsp; q0p1<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dq</span> 0<span style="color: #339933;">.</span>1<br />
&nbsp; &nbsp; q1<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dq</span> 1<span style="color: #339933;">.</span>0<br />
&nbsp; &nbsp; q45<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dq</span> 45<span style="color: #339933;">.</span>0<br />
&nbsp; &nbsp; q100<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dq</span> <span style="color: #0000ff;">100.0</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Data for framerate control</span><br />
&nbsp; &nbsp; mspf<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">dd</span> <span style="color: #0000ff;">20000</span> <span style="color: #666666; font-style: italic;">; ms per frame</span><br />
<br />
section <span style="color: #339933;">.</span>bss<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Vars for rotation</span><br />
&nbsp; &nbsp; rottr<span style="color: #339933;">:</span> resd <span style="color: #0000ff;">1</span><br />
&nbsp; &nbsp; rotsq<span style="color: #339933;">:</span> resd <span style="color: #0000ff;">1</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Var for aspect ratio</span><br />
&nbsp; &nbsp; aspr<span style="color: #339933;">:</span> resq <span style="color: #0000ff;">1</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Vars for framerate control</span><br />
&nbsp; &nbsp; time<span style="color: #339933;">:</span> resd 2<br />
&nbsp; &nbsp; usecs<span style="color: #339933;">:</span> resd 1<br />
&nbsp; &nbsp; oldslp<span style="color: #339933;">:</span> resd 1<br />
<br />
section <span style="color: #339933;">.</span>text<br />
&nbsp; &nbsp; global _start<br />
<br />
fpsmanager<span style="color: #339933;">:</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">eax</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">ebx</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">ecx</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">edx</span><br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">78</span> <span style="color: #666666; font-style: italic;">; sys_gettimeofday</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span> time<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ecx</span><span style="color: #339933;">,</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">int</span> 80h<br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>time <span style="color: #339933;">+</span> 4<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">sub</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>usecs<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>mspf<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">sub</span> <span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span> <span style="color: #00007f;">eax</span><br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">test</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #00007f;">eax</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">js</span> keep_sleep<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">test</span> <span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ebx</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">js</span> keep_sleep<br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">ebx</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> usleep<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>oldslp<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ebx</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">jmp</span> done_sleep<br />
<br />
keep_sleep<span style="color: #339933;">:</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>oldslp<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> usleep<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
<br />
done_sleep<span style="color: #339933;">:</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>time <span style="color: #339933;">+</span> 4<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>usecs<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #00007f;">eax</span><br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">pop</span> <span style="color: #00007f;">edx</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">pop</span> <span style="color: #00007f;">ecx</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">pop</span> <span style="color: #00007f;">ebx</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">pop</span> <span style="color: #00007f;">eax</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">ret</span><br />
<br />
display<span style="color: #339933;">:</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Prepare for drawing</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">4100h</span> <span style="color: #666666; font-style: italic;">; GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glClear<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glLoadIdentity<br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Draw pyramid on the left of the screen</span><br />
&nbsp; &nbsp; _3call glTranslatef<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1p5<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n6<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _4call glRotatef<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>rottr<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">9h</span> <span style="color: #666666; font-style: italic;">; GL_POLYGON</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glBegin<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">4</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> <span style="color: #666666; font-style: italic;">; Start drawing front face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> <span style="color: #666666; font-style: italic;">; Start drawing right face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> <span style="color: #666666; font-style: italic;">; Start drawing back face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> <span style="color: #666666; font-style: italic;">; Start drawing right face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> 0<br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> 0<br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glEnd<br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Draw cube on the right of the screen</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glLoadIdentity<br />
&nbsp; &nbsp; _3call glTranslatef<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1p5<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n7<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _4call glRotatef<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>rotsq<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p0p4<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p0p5<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">7h</span> <span style="color: #666666; font-style: italic;">; GL_QUADS</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glBegin<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">4</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> <span style="color: #666666; font-style: italic;">; Start drawing top face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p0p5<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> <span style="color: #666666; font-style: italic;">; Start drawing bottom face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> <span style="color: #666666; font-style: italic;">; Start drawing front face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span> <span style="color: #666666; font-style: italic;">; Start drawing back face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">; Start drawing left face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glColor3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">; Start drawing right face</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; _3call glVertex3f<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>p1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span>n1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glEnd<br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Update rotation</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fld</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>rottr<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fadd</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>rottrm<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fstp</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>rottr<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fld</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>rotsq<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fadd</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>rotsqm<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fstp</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>rotsq<span style="color: #009900; font-weight: bold;">&#93;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutSwapBuffers <span style="color: #666666; font-style: italic;">; Swap buffers and display</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> fpsmanager <span style="color: #666666; font-style: italic;">; Cap framerate if necessary</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">ret</span><br />
<br />
reshape<span style="color: #339933;">:</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">ebp</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ebp</span><span style="color: #339933;">,</span> <span style="color: #00007f;">esp</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Prevent division by zero</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">cmp</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">ebp</span><span style="color: #339933;">+</span>8<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">jne</span> reshape_2<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">inc</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">ebp</span><span style="color: #339933;">+</span>8<span style="color: #009900; font-weight: bold;">&#93;</span><br />
<br />
reshape_2<span style="color: #339933;">:</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fild</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">ebp</span><span style="color: #339933;">+</span>8<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fidiv</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">ebp</span><span style="color: #339933;">+</span>12<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff; font-weight: bold;">fstp</span> <span style="color: #000000; font-weight: bold;">qword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>aspr<span style="color: #009900; font-weight: bold;">&#93;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">ebp</span><span style="color: #339933;">+</span>12<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">ebp</span><span style="color: #339933;">+</span>8<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glViewport<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 16<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">1701h</span><span style="color: #666666; font-style: italic;">; GL_PROJECTION</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glMatrixMode<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glLoadIdentity<br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>q100<span style="color: #339933;">+</span>4<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>q100<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>q0p1<span style="color: #339933;">+</span>4<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>q0p1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>aspr<span style="color: #339933;">+</span>4<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>aspr<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>q45<span style="color: #339933;">+</span>4<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>q45<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> gluPerspective<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 32<br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">1700h</span><span style="color: #666666; font-style: italic;">; GL_MODELVIEW</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glMatrixMode<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">pop</span> <span style="color: #00007f;">ebp</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">ret</span><br />
<br />
keyhandler<span style="color: #339933;">:</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">ret</span><br />
<br />
_start<span style="color: #339933;">:</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Initialize glut</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">esp</span><span style="color: #339933;">+</span>8<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">lea</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">esp</span><span style="color: #339933;">+</span>8<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #00007f;">eax</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutInit<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 8<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">1ah</span> <span style="color: #666666; font-style: italic;">; GLUT_RGBA|GLUT_DOUBLE|GLUT_ALPHA|GLUT_DEPTH</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutInitDisplayMode<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 480<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 640<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutInitWindowSize<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 8<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutInitWindowPosition<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">8</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Create window</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">title</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutCreateWindow<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">4</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Register functions</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> display<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutDisplayFunc<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutIdleFunc<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> reshape<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutReshapeFunc<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> keyhandler<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutKeyboardFunc<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">4</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Initialize OpenGL</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glClearColor<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 16<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>q1<span style="color: #339933;">+</span>4<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>q1<span style="color: #009900; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glClearDepth<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 8<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">203h</span><span style="color: #666666; font-style: italic;">; GL_LEQUAL</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glDepthFunc<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">0b71h</span><span style="color: #666666; font-style: italic;">; GL_DEPTH_TEST</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glEnable<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> 4<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">push</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #0000ff;">1d01h</span><span style="color: #666666; font-style: italic;">; GL_SMOOTH</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glShadeModel<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">add</span> <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">4</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Frame rate cap initialization</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #009900; font-weight: bold;">&#91;</span>oldslp<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Enter main loop</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">call</span> glutMainLoop<br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">; Exit (return with error code 0)</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">1</span> <span style="color: #666666; font-style: italic;">; sys_exit</span><br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span> 0<br />
&nbsp; &nbsp; <span style="color: #00007f; font-weight: bold;">int</span> <span style="color: #0000ff;">80h</span></div></td></tr></tbody></table></div>
<p>I have also written two other smaller examples:<br />
- <a href="/code-snippets/ideal-statistical-sample-formula/">marketing.asm</a> is a really simple statistics application which calculates the ideal sample size given a few parameters<br />
- <a href="/code-snippets/simple-audio-playback-using-alsa/">alsawav.asm</a> is a simple audio library which utilizes ALSA to play an unbuffered raw WAV/PCM sample</p>
<p>Please note that all these examples require an x86 Linux distribution. These examples will not work on any other operating system.</p>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/02-08-2009/x86-linux-assembler/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Akademy 2008: Great Experience</title>
		<link>http://wesley.vidiqatch.org/24-08-2008/akademy-2008-great-experience/</link>
		<comments>http://wesley.vidiqatch.org/24-08-2008/akademy-2008-great-experience/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 20:30:55 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://wesley.debianbox.be/2008/08/24/akademy-2008-great-experience/</guid>
		<description><![CDATA[Hello everyone! It&#8217;s been a very long time since my last blogpost, and I haven&#8217;t updated my blogsoftware in a long time. Apparently, some spammers noticed this as well and were able to add some hidden spam links in some of my pages. I should seriously update my WordPress one of these days&#8230;
Anyway. Let&#8217;s talk [...]]]></description>
			<content:encoded><![CDATA[<p><em>Hello everyone! It&#8217;s been a very long time since my last blogpost, and I haven&#8217;t updated my blogsoftware in a long time. Apparently, some spammers noticed this as well and were able to add some hidden spam links in some of my pages. I should seriously update my WordPress one of these days&#8230;</em></p>
<p><strong>Anyway. Let&#8217;s talk a bit about Akademy this year. It was my first Akademy and it was a great experience! </strong>I met a lot of interesting and fun people! Everyone seems to agree that this Akademy was the best one yet, so I&#8217;m very glad to have been a part of that, although honestly most work was done by <em>Bart Cerneels</em> and <em>Wendy Van Craen</em>.</p>
<h4><strong>The first day<br />
</strong></h4>
<p>The first day was the hardest day for the organization, or at least for me and <em>Pieter Vande Wyngaerde</em>. After helping out at the Akademy location (Campus <em>De Nayer</em>) we had to make sure everyone had a place to sleep at <em>Roo?[sz]enda[ae]l</em> (the name was spelled different on every sign!). The rooms list wasn&#8217;t all that clear, because the numbering was different from the room numbers, but after a while we were able to figure it out, and we were able to give everyone a place to sleep.</p>
<p align="center"><img src="http://www.bartcoppens.be/photos/Akademy2008/tag_exportable/img_3959_jpg.jpeg" border="0" alt="Resting out on the floor after all that hard work ;)" width="415" height="276" align="middle" /></p>
<p align="center"><em>Resting out on the floor after all that hard work <img src='http://wesley.vidiqatch.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </em></p>
<h4><strong>Party time!</strong></h4>
<p>On the second day I was just walking around the campus, helping the team with small things. I wasn&#8217;t able to see many talks, but I was able to at least see the Nokia keynote from <em>Sebastian Nyström</em>. A very interesting talk, although I&#8217;m still not sure exactly what direction Qt Software will be evolving towards with Nokia, but up until now it&#8217;s been going well, so that makes me happy enough for now.</p>
<p><img style="border: 0pt none; margin-right: 10px;" src="http://i226.photobucket.com/albums/dd186/WetCrimson/GoudenCarolusDOr.jpg" border="0" alt="Gouden Carolus Belgian Beer" width="218" height="292" align="left" />In the evening it was party time: there was this social event at <a href="http://www.hetanker.be/en"><em>Het Anker</em></a> in Mechelen, which meant <strong>free food and free Belgian beer</strong>! The &#8220;Gouden Carolus&#8221; beer is something even I &#8211; as a Belgian &#8211; had never drunk before. Personally, I think there are much better tasting Belgian beers, but maybe that&#8217;s just my personal taste. The beer was pretty strong though. But I&#8217;m sure that most of you noticed that <img src='http://wesley.vidiqatch.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>After the social event I went for a small evening stroll with some of the guys who were staying at <em>Zandpoortvest</em>. In the end, we walked all the way to the <em>Zandpoortvest</em> hostel, and after I had a look around the hostel, I had to walk all the way back to <em>Rozendaal</em> (I&#8217;ll just stick with this way of spelling it..) Unfortunately for me, I got lost. Too bad I didn&#8217;t have the N810 with its GPS (yet), otherwise I could&#8217;ve gotten back at <em>Rozendaal</em> a lot quicker. My cellphone batteries were dead as well &#8211; doesn&#8217;t this sound like some horror story? &#8211; so I just figured I&#8217;d walk and follow the signs pointing to <em>Sint-Katelijne-Waver</em>.</p>
<p>After a while I saw some arrows pointing to the train station, and from there, I was able to find my way back to <em>Rozendaal</em>. By then, it was around 5 am, and I had a big blister on my left foot from walking all night.</p>
<p>&#8230;I tried to stay up, but around 11 AM I felt really tired and I wanted to sleep a bit. And because of that I missed all the great presentations that I wanted to see! It was in the late afternoon somewhere that <em>Pieter Verledens</em> woke me up. Then I realized how late it already was and that I missed <em>Zack Rusin</em>&#8217;s <em>Gallium3D</em> talk, which I was looking forward to. Luckily, the talk was recorded and is <a href="http://stecchino.blip.tv/file/1181861/">available on blip.tv</a> now (thanks to <em>Bart Cerneels</em>).</p>
<h4><strong>Nokia converts KDE developers to GNOME</strong></h4>
<p>The Mobile and Embedded day was one of the best days of Akademy. Not only because Nokia gave away a lot of Nokia N810 devices to more than 100 KDE developers, but also because the talks were really interesting. The big problem however is that it was a pretty busy day and I wasn&#8217;t able to see most of the talks (I really wanted to see the maemo, QEdje and OpenMoko talks as well). I ended up seeing only the <em>OpenGL ES for Embedded Linux talk</em> by <em>Tom Cooksey</em>, which was very interesting though. At the end of the talk he told us about the <em>OpenPandora</em> handheld device that will be released soon. Apparently it is a great device for OpenGL ES development. I found their website here: <a href="http://www.openpandora.org/">www.openpandora.org</a></p>
<p>Now, the title above this paragraph is inspired by <a href="http://www.vuntz.net/journal/2008/08/12/486-newsflash-one-hundred-kde-developers-start-using-gnome"><em>Vincent Untz</em>&#8216; blogpost</a>. It refers to the free N810s that Nokia gave away. The devices run the Maemo OS, which is based on GNOME. And to be honest, I like Maemo a lot. It works very well. But I&#8217;m very interested in the progress that Marijn Kruisselbrink is making with porting KDE 4 to the Nokia internet tablets. Me myself, I haven&#8217;t done much with the device yet, aside from playing some games, listening to some music, and doing video calls with other KDE people <img src='http://wesley.vidiqatch.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I did however manage to get some Qt applications ported to the device, but that was ridiculously easy. Hildon integration Just Works™<span style="color: #000000;"> </span>out of the box and there&#8217;s very little that has to be changed to make your application look great on the N810. Except for graphics operations which are a bit slow at the moment, as explained by <em>Ariya Hidayat</em> in <a href="http://ariya.blogspot.com/2008/08/qt-44-and-maemo.html">his blog post</a>, so I also hope that the performance problem gets fixed in Qt 4.5.</p>
<p align="center"><img style="border: 0pt none;" src="http://www.mobilelinuxinfo.com/images/nokia-n810.jpg" border="0" alt="Nokia N810" align="middle" /><em><br />
The Nokia N810 Internet Tablet.</em></p>
<p>Oh. And my cat was chewing on my N810 adapter (even cats seem to like this gift from Nokia), so the pin doesn&#8217;t fit my N810 perfectly anymore. But it still works if I put it in carefully and don&#8217;t touch it, so I&#8217;m still good&#8230;</p>
<h4><strong>Boat and Barbecue</strong></h4>
<p>Thursday was a really nice day. A nice boat trip, and a very tasteful barbecue. I enjoyed it a lot. Jonathan Riddell was busy interviewing a lot of people, you can download the interviews from <a href="http://www.kubuntu.org/%7Ejriddell/akademy-2008-video-interviews/">this link</a>. I didn&#8217;t volunteer for an interview, but you can see me sitting in the back during interview number 44. That&#8217;s enough for me <img src='http://wesley.vidiqatch.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>At the end of Akademy, Aaron and Chani treated us (the Akademy organisation team) to a nice dinner. Thanks for the good meal and the great stories.</p>
<p>Everyone had to leave back home on Friday or Saturday. Sad times. I&#8217;m planning to come to Akademy next year as well. It was a lot of fun this year.</p>
<p>To wrap it up, here are some <strong>random notes</strong>:</p>
<ul>
<li>I&#8217;m not sure who&#8217;s the noisiest: 	the <em>Amarok Wolves</em> or <em>Team Humongous</em></li>
<li>If you are in dire need of some music, maybe you can hire the <a href="http://amarok.kde.org/">A-Team</a>!</li>
<li>Video&#8217;s of a lot of talks are 	available at <a href="http://stecchino.blip.tv/">http://stecchino.blip.tv/</a></li>
<li>The Emsys guys really like <a href="http://www.youtube.com/watch?v=5i251ai88Ig">Mega 	Mindy</a> &#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/24-08-2008/akademy-2008-great-experience/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Open source DJ mixxx&#8217;ing</title>
		<link>http://wesley.vidiqatch.org/06-01-2008/open-source-dj-mixxxing/</link>
		<comments>http://wesley.vidiqatch.org/06-01-2008/open-source-dj-mixxxing/#comments</comments>
		<pubDate>Sun, 06 Jan 2008 15:33:16 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mixxx]]></category>
		<category><![CDATA[Multimedia]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://wesley.debianbox.be/2008/01/06/open-source-dj-mixxxing/</guid>
		<description><![CDATA[Sinds vorige week ben ik begonnen met mee te helpen aan de ontwikkeling van het open source DJ programma mixxx. Mixxx is een stabiel programma waarmee men live muziek kan mixen. Het heeft een aantal zeer interessante features, zoals bijvoorbeeld automatische ritmedetectie en ondersteuning voor een heleboel hardware.

Waar staan we vandaag? 1.6.0
Ik werk mee aan [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;"><strong>Sinds vorige week ben ik begonnen met mee te helpen aan de ontwikkeling van het open source DJ programma mixxx. Mixxx is een stabiel programma waarmee men live muziek kan mixen. Het heeft een aantal zeer interessante features, zoals bijvoorbeeld automatische ritmedetectie en ondersteuning voor een heleboel hardware.</strong></span></p>
<p style="text-align: center;"><a href="http://wesley.vidiqatch.org/images/mixxx.png"><span style="color: #000080;"><img style="border: 0pt none;" src="http://wesley.vidiqatch.org/images/mixxx_thumb.png" border="1" alt="Mixxx 1.6.0 with Collusion/WS/Green skin" align="bottom" /></span></a></p>
<p style="margin-bottom: 0cm"><span style="color: #0066cc;"><span style="font-size: medium;"><strong>Waar staan we vandaag? 1.6.0</strong></span></span></p>
<p>Ik werk mee aan de nieuwe versie waarvan twee weken geleden een eerste bètaversie werd gelanceerd. Voor de nieuwe 1.6.0 versie zijn een heleboel nieuwe features gepland. Ik som even de belangrijkste veranderingen op:</p>
<ul>
<li>Scratchen via <strong>timecoded 	vinyl</strong>-platen <em>[ <a href="http://www.youtube.com/watch?v=U2ZPSSXlK60">link 	naar flash video 1</a>, <a href="http://www.youtube.com/watch?v=9dRLNT2yspg">video 2</a> ]</em></li>
<li><strong>Kleurenschema&#8217;s</strong> voor skins</li>
<li>Nieuwe <strong>muziekbibliotheek</strong> (muziekbrowser)</li>
<li>Verbeterde <strong>ritmedetectie</strong></li>
<li>Verbeterde ondersteuning voor <strong>MIDI-controllers</strong> (hardware)</li>
<li><strong>HQ-equalizer</strong> toegevoegd</li>
<li>Audio core herschreven/vernieuwd</li>
<li>Ondersteuning voor <strong>LADSPA geluidseffecten</strong></li>
<li><strong>Live broadcasten</strong> over internet (Icecast, Shoutcast)</li>
<li><strong>Rechtstreeks opnemen</strong> naar MP3, Ogg Vorbis, Wav, Flac</li>
</ul>
<p>Ik werk momenteel aan de laatste twee punten. Het is niet zeker of het helemaal af zal raken voor de <em>Hardy freeze</em> in februari (het moment waarop programma&#8217;s naar <em>Ubuntu 8.04 Hardy Heron</em> geupload worden en niet meer aangepast mogen worden) maar Ogg Vorbis Icecast/Shoutcast-ondersteuning is zo goed als af, dus dat zal er waarschijnlijk zeker inzitten.</p>
<p>Zelf kijk ik uit naar de ondersteuning voor LADSPA geluidseffecten, maar ik vermoed dat dat niet af zal raken voor de 1.6.0-versie. Dan maar wat langer wachten&#8230;</p>
<p style="margin-bottom: 0cm"><span style="font-size: medium;"><span style="color: #0066cc;"><strong>Evolutie van de broadcasting code</strong></span></span></p>
<p style="margin-bottom: 0cm; text-align: center;"><a href="http://wesley.vidiqatch.org/images/mixxx_broadcast_prefs.png"><img title="Mixxx Live Broadcasting Preferences" src="http://wesley.vidiqatch.org/images/mixxx_broadcast_prefs_thumb.png" alt="Mixxx Live Broadcasting Preferences" /></a></p>
<p>Zoals eerder gezegd ben ik momenteel bezig met het implementeren van Icecast/Shoutcast ondersteuning zodat we een mix rechtstreeks over internet kunnen broadcasten. Aanvankelijk dachten we dat het simpel zou zijn om dit systeem te implementeren (gewoon <em>libshout</em> gebruiken) maar al snel bleek dat we eerst nog een encoder moesten schrijven. Ik ben de laatste dagen dus vooral bezig geweest met het schrijven van een Ogg Vorbis-encoder met behulp van <em>libvorbis</em>, <em>libogg</em> en <em>libvorbisenc</em>.</p>
<p>Afgezien van het feit dat er voor libvorbis <strong>geen technische API-documentatie</strong> beschikbaar is, is het ons uiteindelijk toch gelukt om de encoder werkend te krijgen. Alles ging goed, maar de audio latency was nu wel verhoogd omdat de &#8216;audio callback thread&#8217; voor een korte periode geblokkeerd werd wanneer de encoder zijn werk deed. Toen we ook nog beseften dat we om metadata te updaten een nieuwe stream moesten initialiseren was het onvermijdelijk om een nieuw systeem te ontwerpen om de encoder parallel in een aparte thread te laten draaien <em>(</em><em><strong>multithreaded</strong></em><em>)</em> met een eigen buffer.</p>
<p>Albert ging hiermee aan de slag en na twee of drie dagen knoeien presenteerde hij een nieuwe &#8216;engine&#8217; <em>(de SideChain-engine)</em> aan ons die de audio buffert voor andere engines (zoals de broadcast engine) en deze engines in een aparte thread draait. <strong>Het resultaat is lage audio latency en geen enkel performanceprobleem meer.</strong> Ook werd het totale CPU-verbruik verlaagd omdat de encoder nu iets minder vaak aangeroepen wordt.</p>
<p>Om het schematisch voor te stellen:</p>
<p><strong>voor: </strong><em><strong>[</strong></em><em> afbeelding:</em><em><strong> <a href="http://wesley.vidiqatch.org/images/mixxx_broadcast_scheme.png">Oorspronkelijke Broadcast Implementatie</a> ]</strong></em><strong><br />
na: </strong><em><strong>[ </strong></em><em>afbeelding:</em><em><strong> <a href="http://wesley.vidiqatch.org/images/mixxx_broadcast_scheme_threaded.png">Threaded Broadcast Implementatie</a> ]</strong></em></p>
<p><strong>Wat moet er nog gedaan worden?</strong> De <em>SideChain-engine</em> moet nog een klein beetje aangepast worden, er moet nog een <em>MP3-encoder</em> worden geschreven, het instellingenvenster moet afgemaakt worden, en tenslotte moet de code wat opgeschoond worden, en moet alles grondig getest worden!</p>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/06-01-2008/open-source-dj-mixxxing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Neem je Linux (of Wine) games op!</title>
		<link>http://wesley.vidiqatch.org/27-12-2007/neem-je-linux-of-wine-games-op/</link>
		<comments>http://wesley.vidiqatch.org/27-12-2007/neem-je-linux-of-wine-games-op/#comments</comments>
		<pubDate>Thu, 27 Dec 2007 05:57:05 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Multimedia]]></category>

		<guid isPermaLink="false">http://wesley.debianbox.be/2007/12/27/neem-je-linux-of-wine-games-op/</guid>
		<description><![CDATA[Het laatste jaar zijn er twee projecten ontstaan die het mogelijk maken om OpenGL en Alsa op te nemen zonder al te veel verlies van performance. Voor de gamers die niet weten waarover ik het heb: dit is bij wijze van spreken &#8216;FRAPS for Linux&#8217;. Ik heb beide projecten uitgetest en ze werken allebei prachtig: [...]]]></description>
			<content:encoded><![CDATA[<p><em>Het laatste jaar zijn er twee projecten ontstaan die het mogelijk maken om <strong>OpenGL en Alsa op te nemen</strong> zonder al te veel verlies van performance. Voor de <strong>gamers</strong> die niet weten waarover ik het heb: dit is bij wijze van spreken <strong>&#8216;FRAPS for Linux&#8217;</strong>. Ik heb beide projecten uitgetest en ze werken allebei prachtig: <strong>yukon</strong> en <strong>glc</strong>.</em></p>
<p style="text-align: center;"><a href="http://www.youtube.com/watch?v=lJph0HceV0o"><span style="color: #000080;"><img style="border: 0pt none;" src="http://wesley.vidiqatch.org/images/glc_rec_thumb.png" border="1" alt="glc recording" align="bottom" /></span></a></p>
<p style="text-align: center;"><a href="http://www.youtube.com/watch?v=lJph0HceV0o"><strong>Klik hier voor de volledige video-opname op YouTube</strong></a></p>
<p style="text-align: center;"><span style="color: #808080;">Dit is <strong>Aquaria Demo</strong> in <strong>Wine</strong><br />
opgenomen met <strong>glc</strong> op <strong>1024&#215;768</strong><br />
met <strong>Compiz ingeschakeld</strong>.</span></p>
<p>Je bent vrij om te gebruiken wat voor jou het beste werkt:</p>
<ul>
<li><a href="https://devel.neopsis.com/projects/yukon/">yukon</a></li>
<li><a href="http://nullkey.ath.cx/projects/glc">glc</a></li>
</ul>
<p>Persoonlijk ben ik momenteel voorstander van<strong> glc</strong> omdat de ontwikkelaar zéér snel is met het reageren op bugreports en omdat glc is <strong>geoptimaliseerd voor multi-core systemen</strong>. Ook heeft glc enkele speciale mogelijkheden zoals <strong>on-the-fly color conversion</strong> van BGR naar YV12 (geeft grotere compressie) en je kan zowel <strong>QuickLZ</strong> als <strong>LZO</strong> gebruiken om de stream on-the-fly te comprimeren. Een andere speciale feature van glc is de mogelijkheid om <strong>meerdere OpenGL of Alsa streams</strong> tegelijkertijd op te nemen.</p>
<p>glc werkte perfect bij mij, maar ik had een klein probleem met het opnemen van sommige games in Wine (problemen met audio en af en toe een crash). Na een kort gesprek met de ontwikkelaar (<em>nullkey</em>) en na het opsturen van enkele <em>gdb traces</em> werd het probleem <strong>binnen 10 minuten</strong> volledig opgelost door de ontwikkelaar. Prachtig, toch? De nieuwste versie van glc is momenteel 0.4.4 en bevat de Wine patches.</p>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/27-12-2007/neem-je-linux-of-wine-games-op/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SMPlayer Overlay Patches</title>
		<link>http://wesley.vidiqatch.org/09-12-2007/smplayer-overlay-patches/</link>
		<comments>http://wesley.vidiqatch.org/09-12-2007/smplayer-overlay-patches/#comments</comments>
		<pubDate>Sun, 09 Dec 2007 21:04:13 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Multimedia]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://wesley.debianbox.be/2007/12/09/smplayer-overlay-patches/</guid>
		<description><![CDATA[
Ik ben bezig aan een patch voor SMPlayer voor mezelf:

ik wil de huidige tijd kunnen zien zonder full-screen te verlaten (en zonder een klok te kopen) &#8211; zoals je kan zien op de bovenstaande screenshot heb ik dat reeds voor elkaar gekregen.
ik wil de afspeeltijd van de film als een klein balkje op het scherm [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wesley.vidiqatch.org/images/smplayerTimeOverlayPatch.png"><img title="SMPlayer Time Overlay Patch" src="http://wesley.vidiqatch.org/images/smplayerTimeOverlayPatch.png" alt="SMPlayer Time Overlay Patch" /></a></p>
<p><strong>Ik ben bezig aan een patch voor SMPlayer voor mezelf:</strong></p>
<ol>
<li><strong>ik wil de huidige tijd kunnen zien zonder full-screen te verlaten</strong> (en zonder een klok te kopen) &#8211; zoals je kan zien op de bovenstaande screenshot heb ik dat reeds voor elkaar gekregen.</li>
<li><strong>ik wil de afspeeltijd van de film als een klein balkje op het scherm zien</strong>, niet via het tekstuele OSD, en ik wil eveneens de film kunnen <strong>doorspoelen</strong> door op een willekeurige plaats op mijn mooie alpha-transparante balk te klikken&#8230; want dat is veel mooier dan zo&#8217;n uitschuivend balkje dat je video naar boven duwt <img src='http://wesley.vidiqatch.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ol>
<p><strong>Technische details:</strong></p>
<ul>
<li>mplayer gepatched en gecompileerd met <em>vf_overlay</em> patch</li>
<li><em>QPainter</em> (van <em>Qt 4.3</em>) tekent de klok en tekst</li>
<li>getekende bitmap wordt vertaald naar het benodigde formaat en naar een gedeelde geheugenplek geschreven</li>
<li>mplayer (vf_overlay) leest de bitmap uit en legt hem over de video heen</li>
<li>mediaspeler waar de patch in wordt ontwikkeld is SMPlayer (mplayer frontend)</li>
</ul>
<p><em>Ik denk niet dat ik deze patch upstream zal opsturen, tenzij er veel vraag naar is. De reden daarvoor is simpelweg dat je een onofficiële mplayer patch nodig hebt (vf_overlay patch) om van deze patch gebruik te maken, en (ik maak een gok) 95% van de smplayer-gebruikers zijn dus sowieso niets met deze patch.</em></p>
<p>Ik ben wel van plan om de patch op het forum van SMPlayer te plaatsen voor degenen die het eens willen bekijken of zelf willen proberen, maar de patch is momenteel nog niet in een &#8220;releasebare&#8221; status.</p>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/09-12-2007/smplayer-overlay-patches/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Verslag: Gutsy Release Party Hasselt</title>
		<link>http://wesley.vidiqatch.org/21-10-2007/verslag-gutsy-release-party-hasselt/</link>
		<comments>http://wesley.vidiqatch.org/21-10-2007/verslag-gutsy-release-party-hasselt/#comments</comments>
		<pubDate>Sun, 21 Oct 2007 16:55:37 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://wesley.debianbox.be/2007/10/21/verslag-gutsy-release-party-hasselt/</guid>
		<description><![CDATA[update: een ander verslag over de release party, gemaakt door de organisator Bart, is hier te vinden.
De Gutsy Release Party in Hasselt op 20 oktober was een groot succes dankzij de goede organisatie van Bart Broeckx (van Ubuntu België) en Fabian Haest (ondervoorzitter van de BitMappers) en ook dankzij alle aanwezigen van zowel Ubuntu België [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-bottom: 0cm" align="left"><em><strong>update</strong></em><em>: een ander verslag over de release party, gemaakt door de organisator Bart, is <a href="http://bartek.blogsome.com/2007/10/21/verslagje-van-de-grp/">hier</a> te vinden.</em></p>
<p><img src="http://www.bitmappers.be/Images/BM_Transp_Logo.gif" border="0" alt="" width="61" height="41" align="left" /><img src="http://ploum.frimouvy.org/images/ubuntube.png" border="0" alt="" width="40" height="42" align="left" /><em>De <a href="https://wiki.ubuntu.com/BelgianTeam/ReleaseParty/Gutsy/Hasselt20-10-2007">Gutsy Release Party</a> in Hasselt op 20 oktober was een groot succes dankzij de goede organisatie van Bart Broeckx (van <a href="http://ubuntu-be.org/">Ubuntu België</a>) en Fabian Haest (ondervoorzitter van de <a href="http://www.bitmappers.be/">BitMappers</a>) en ook dankzij alle aanwezigen van zowel <a href="http://ubuntu-be.org/">Ubuntu België</a> als van de <a href="http://www.bitmappers.be/">BitMappers</a>.</em></p>
<p><strong><span style="color: #808080;"><span style="font-size: medium;">Meer volk dan verwacht!</span></span></strong></p>
<p><img style="border: 0pt none;" src="http://wesley.vidiqatch.org/images/grphasselt.jpg" border="0" alt="" align="bottom" /></p>
<p>Er werd een maximum van 75 personen verwacht, maar er waren <strong>meer dan 100 personen</strong> aanwezig op de Release Party. Hierbij wil ik meteen alle aanwezigen bedanken om mee te helpen aan het succes van de Release Party. Bedankt!</p>
<p><strong><span style="color: #808080;"><span style="font-size: medium;">Presentatie &#8220;</span></span></strong><strong><em><span style="color: #808080;"><span style="font-size: medium;">Introductie in Linux en Ubuntu</span></span></em></strong><strong><span style="color: #808080;"><span style="font-size: medium;">&#8221; door </span></span></strong><strong><em><span style="color: #808080;"><span style="font-size: medium;">Bart Broeckx</span></span></em></strong></p>
<p><a href="http://wesley.vidiqatch.org/images/grphasselt_bart.jpg"><span style="color: #000080;"><img style="border: 0pt none;" src="http://wesley.vidiqatch.org/images/grphasselt_bart_thumb.jpg" border="1" alt="Bart Broeckx" width="150" height="129" align="left" /></span></a>In de vroege namiddag gaf Bart een introductie in Linux en Ubuntu aan de hand van een <em>OpenOffice.org Impress</em>-presentatie. Zonder in te gaan op technische details slaagde Bart erin een boeiende introductie te geven in het doel en de werking van Linux en Ubuntu. De overvolle zaal luisterde aandachtig en stelde achteraf nog een boel vragen.</p>
<p><strong><span style="color: #808080;"><span style="font-size: medium;">Tijd voor een korte pauze, of voor een eigen installatie van Ubuntu</span></span></strong></p>
<p>Na de geslaagde presentatie van Bart werd het tijd om een korte pauze in te lassen. In de kelder werd een zaal voorzien waar computers konden neergezet worden om installaties uit te voeren. Een ander zaaltje (gelijkvloers) werd voorzien voor laptops.</p>
<p>Een aantal mensen keerden op het einde van de avond tevreden naar huis met een installatie van Ubuntu op hun vaste computer of laptop.</p>
<p>Een zeer enthousiaste gebruiker sprong bij wijze van spreken een gat in de lucht omdat de installatie zo snel ging en omdat alles direct zonder problemen werkte. Hij was zeer tevreden over de <strong>moderne &#8220;plug &amp; play&#8221;-mogelijkheden</strong> van Ubuntu. Beginnende Ubuntugebruikers verbazen zich blijkbaar over het feit dat randapparaten zoals een digitale fotocamera of een printer automatisch wordt gedetecteerd en geconfigureerd bij het inpluggen van het apparaat.</p>
<p>Andere mensen verbaasden zich dan weer over de <strong>visuele effecten</strong> van <em>Compiz-Fusion</em> die op een aantal laptops stonden te pronken.</p>
<p><strong><span style="color: #808080;"><span style="font-size: medium;">Demonstratie &#8220;Live cd en installatie van Ubuntu Gutsy Gibbon&#8221; door Bart Broekcx</span></span></strong></p>
<p>Na de lange pauze werd het tijd voor een korte demonstratie. Bart zette een mooie demonstratie neer van de live cd. Ook besprak hij de installatie van Ubuntu en een aantal belangrijke functies binnen Ubuntu (zoals bijvoorbeeld het <em>Synaptic pakketbeheer</em>)</p>
<p><strong><span style="color: #808080;"><span style="font-size: medium;">Presentatie &#8220;Nieuwigheden in Ubuntu Gutsy Gibbon&#8221; door mijzelf</span></span></strong></p>
<p><a href="http://wesley.vidiqatch.org/images/grphasselt_wesley.jpg"><span style="color: #000080;"><img style="border: 0pt none;" src="http://wesley.vidiqatch.org/images/grphasselt_wesley_thumb.jpg" border="1" alt="Wesley Stessens" align="left" /></span></a>En dan werd het tijd voor een presentatie van de nieuwigheden in Gutsy Gibbon. Jammer genoeg hadden we echter geen goede voorbereidingen kunnen treffen voor deze presentatie. We wisten pas één dag vooraf dat een dergelijke presentatie ook gewenst was voor de Release Party. Er liep dan ook vanalles mis.</p>
<p>De laptop die was voorzien voor de presentatie had problemen met de beamer dankzij het &#8220;closed source&#8221;-stuurprogramma van NVidia en wou geen hogere resolutie dan 640&#215;480 accepteren, wat veel te laag was om een fatsoenlijke presentatie te kunnen geven.</p>
<p>Maar geen nood, want Piet (pjotr123 van het <a href="http://forum.ubuntu-nl.org/">forum</a> en <a href="http://www.ubuntu-nl.org/documentatie/">documentatieteam</a>) kwam <em>to the rescue</em> met zijn laptop met een grafische kaart van Intel. Jammer genoeg liep dat echter ook niet van een leien dakje, maar al bij al was het nog een succesvolle presentatie.</p>
<p><strong><span style="color: #808080;"><span style="font-size: medium;">Belgische pintjes<br />
</span></span></strong></p>
<p>Het was een gezellige avond. Maar dat kan moeilijk anders wanneer Bart een paar frisse Belgische <a href="http://nl.wikipedia.org/wiki/Pintje">pintjes</a> trakteert. Het was leuk om een aantal mensen weer te zien, en een aantal nieuwe mensen te ontmoeten. En bedankt voor het vervoer, Guy!</p>
<p><strong><span style="color: #808080;"><span style="font-size: medium;">Media</span></span></strong></p>
<p><a href="http://www.hasseltlokaal.be/Item/tabid/55/seqAxNewsItem/3450/Default.aspx">Artikel in Hasselt Lokaal</a></p>
<p><a href="http://picasaweb.google.nl/danielschristine/LinuxWorkshop20_10_2007">Foto&#8217;s door Christine</a></p>
<p><strong><span style="color: #808080;"><span style="font-size: medium;">Bedankt, allemaal</span></span></strong></p>
<p>Zonder de aanwezigheid van al de Ubuntugebruikers en <a href="http://ubuntu-be.org/">Bitmappers</a> had de Release Party nooit zo&#8217;n groot succes kunnen worden. Bedankt, mensen!</p>
<p>En persoonlijk wil ik ook nog graag de <a href="http://www.bitmappers.be/">Bitmappers</a> bedanken voor de goede medewerking en organisatie. En <em>last but not least</em> natuurlijk Bart Broeckx van <a href="http://ubuntu-be.org/">Ubuntu België</a> om het voortouw van de organisatie op zich te nemen.</p>
<p style="margin-bottom: 0cm">
<p align="left">
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/21-10-2007/verslag-gutsy-release-party-hasselt/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>De toekomst van Ubuntu Nederland</title>
		<link>http://wesley.vidiqatch.org/06-10-2007/de-toekomst-van-ubuntu-nederland/</link>
		<comments>http://wesley.vidiqatch.org/06-10-2007/de-toekomst-van-ubuntu-nederland/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 20:41:44 +0000</pubDate>
		<dc:creator>Wesley</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://wesley.debianbox.be/2007/10/07/de-toekomst-van-ubuntu-nederland/</guid>
		<description><![CDATA[Ubuntu Nederland groeit uit zijn voegen. Dat heeft Bart jullie al duidelijk gemaakt. Op 22 september hadden een aantal kernleden van de Nederlandse Ubuntugemeenschap een besloten vergadering over de toekomst van Ubuntu Nederland. Deze vergadering stond in het teken van de interne communicatie en organisatie binnen Ubuntu Nederland.
Besloten vergadering
In tegenstelling tot de grote &#8220;Wintermeeting 2007&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Ubuntu Nederland groeit uit zijn voegen. Dat heeft <a href="http://bartek.blogsome.com/2007/10/01/in-den-beginne-was-er-niets/">Bart</a> jullie al duidelijk gemaakt. Op <em>22 september</em> hadden een aantal kernleden van de Nederlandse Ubuntugemeenschap een besloten vergadering over de toekomst van Ubuntu Nederland. Deze vergadering stond in het teken van de interne communicatie en organisatie binnen Ubuntu Nederland.</strong></p>
<p style="font-size: 18px; color: #777777"><strong>Besloten vergadering</strong></p>
<p>In tegenstelling tot de grote &#8220;<a href="https://wiki.ubuntu.com/NlWinterMeeting2007">Wintermeeting 2007</a>&#8221; was deze vergadering (de &#8220;<a href="https://wiki.ubuntu.com/NLSummermeeting2007">Summermeeting 2007</a>&#8220;) geen &#8220;open&#8221; vergadering. De Wintermeeting was namelijk vooral bedoeld als een gezellig onderonsje. De Summermeeting daarentegen werd op poten gezet als een echte vergadering.</p>
<p>Er zal elk half jaar ook nog een bijeenkomst/meeting voor iedereen zijn, in de vorm van een Release Party. De <a href="https://wiki.ubuntu.com/DutchTeam/ReleaseParty">Nederlandse Release Party</a> voor Gutsy vindt plaats in Hilversum op 27 oktober en voor België zijn er verschillende Release Parties. De grootste <a href="https://wiki.ubuntu.com/BelgianTeam/ReleaseParty/Gutsy/Hasselt20-10-2007">Vlaamse Release Party</a> vindt plaats in Hasselt op 20 oktober. <a href="https://wiki.ubuntu.com/BelgianTeam/ReleaseParty">Klik hier voor een lijst van andere Release Parties in België</a>.</p>
<p style="font-size: 18px; color: #777777"><strong>Aanwezigen</strong></p>
<p>Er waren 10 aanwezigen op de Summermeeting (alfabetisch gerangschikt):</p>
<ul>
<li>Forum moderator: <strong>Akke</strong> (laacque)</li>
<li>Forum moderator, Release Party organisatie: <strong>Bart</strong> (bartek)</li>
<li>Stichter, teamleider van Ubuntu Nederland: <strong>Dennis</strong> (Seveas)</li>
<li>IRC operator: <strong>Jan</strong> (JanC)</li>
<li>Mailinglijst: <strong>Martijn</strong> (Treenaks)</li>
<li>Documentatieteam: <strong>Piet</strong> (pjotr123)</li>
<li>Documentatieteam: <strong>Sander</strong> (sander50)</li>
<li>Teamleider van Ubuntu Nederland: <strong>Sebastian</strong> (SWAT)</li>
<li>Forum beheerder, site moderator, IRC operator: <strong>Wesley</strong> (profoX) <em>(ikzelf)</em></li>
<li>Perscontact, Release Party organisatie: <strong>Willem</strong> (w.hellinga)</li>
</ul>
<p style="font-size: 18px; color: #777777"><strong>Genomen beslissingen</strong></p>
<p>Wat volgt is een lijst van de belangrijkste besproken onderwerpen en genomen beslissingen op de vergadering.</p>
<p style="font-size: 16px; color: #777777"><em><strong>Website</strong></em></p>
<ul>
<li><strong>Backups:</strong> Er kwam duidelijkheid over de backups. Er worden dagelijks backups gemaakt van de website en het forum.</li>
<li><strong>Patches:</strong> Patches, bugs en updates voor de websoftware moeten steeds gemeld worden aan <em>Dennis (Seveas)</em>. Dit kan onder andere via <a href="https://launchpad.net/ubuntu-nl-website">Launchpad</a>.</li>
<li><strong>Steunpunten:</strong> <em>Dennis (Seveas)</em> zou het steunpunten-project van Ubuntu Nederland afwerken en online zetten. Ondertussen is dit al gebeurd. [<a href="http://www.ubuntu-nl.org/ubuntu-nl/steunpunten/">Link naar steunpunten</a>]</li>
<li><strong>Samenvatting:</strong> Een samenvattende wikipagina over Ubuntu Nederland zal worden aangemaakt.</li>
<li><strong>Inhoud:</strong> Mits een beetje onderhoud (nieuwe schermafbeeldingen, bepaalde pagina&#8217;s bijwerken) is de huidige inhoud in orde.</li>
<li><strong>Securityberichten:</strong> Een feed van de <a href="http://www.ubuntu-nl.org/usn/">vertaalde securityberichten</a> werd online gezet.</li>
</ul>
<p style="font-size: 16px; color: #777777"><em><strong>Forum</strong></em></p>
<ul>
<li><strong>Categorieën:</strong> De nood aan nieuwe categorieën werd besproken, maar er werd beslist dat het momenteel niet nodig is om extra categorieën in te richten.</li>
<li><strong>Zoekfunctie:</strong> Er waren veel klachten over de zoekfunctie van het forum. Een <em>Google Custom Search</em> zoekfunctie die tegelijkertijd in de website, het forum en de mailinglijst zoekt werd geïmplementeerd. Voor een korte periode verdween ook de oude zoekfunctie, maar omdat veel mensen liever de oude zoekfunctie gebruikten werd deze ook weer teruggezet, naast de nieuwe zoekfunctie.</li>
<li><strong>Regels:</strong> De moderators van het forum zullen binnenkort een lijst met &#8220;regels&#8221; opstellen. Voorheen waren er geen regels nodig omdat het forum nog relatief klein was en er bijna nooit problemen waren op het forum. Het forum is nu echter uit zijn voegen gegroeid en zonder een aantal forumregels wordt het een knoeiboel. (de algemene <a href="http://www.ubuntu-nl.org/ubuntu-nl/gedragscode/">Gedragscode</a> (Code of Conduct) van Ubuntu blijft natuurlijk ook van kracht)</li>
</ul>
<p style="font-size: 16px; color: #777777"><em><strong>Magazine</strong></em></p>
<p>Er werd beslist om het werk dat in het magazine werd gestoken over te dragen naar een nieuw project. Het nieuwe project zal een verzameling van artikels en columns zijn van Ubuntugebruikers, die op een subdomein van Ubuntu Nederland gepubliceerd zullen worden (je kan het een beetje vergelijken met <a href="http://fridge.ubuntu.com/">de Fridge</a>). De coördinatie hiervan ligt bij <em>Dennis (Seveas)</em>.</p>
<p style="font-size: 16px; color: #777777"><em><strong>Vertalingen</strong></em></p>
<p>Er zal worden nagedacht over de mogelijkheid om upstream vertalingen van KDE, GNOME en Debian letterlijk over te nemen, zodat het vertaalteam enkel nog kwaliteitscontrole moet uitoefenen en specifieke Ubuntuprogrammatuur moet vertalen.</p>
<p style="font-size: 16px; color: #777777"><em><strong>Documentatie</strong></em></p>
<p>Er werd een documentatieteam opgericht. <em>Piet (pjotr123)</em> zal dit team coördineren en <em>Sander (sander50)</em> en <em>Johanvd</em> zullen actief meehelpen met het inrichten van de documentatie.</p>
<p>Het documentatieteam staat in voor de kwaliteit en betrouwbaarheid van de Nederlandstalige documentatie. Alle documentatie zal van de wiki overgebracht worden naar de Nederlandstalige Ubuntu website en zal beheerd worden door het documentatieteam.</p>
]]></content:encoded>
			<wfw:commentRss>http://wesley.vidiqatch.org/06-10-2007/de-toekomst-van-ubuntu-nederland/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
