<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.webos-internals.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MetaView</id>
	<title>WebOS Internals - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.webos-internals.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MetaView"/>
	<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/wiki/Special:Contributions/MetaView"/>
	<updated>2026-05-22T02:03:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=16005</id>
		<title>Uber Calendar</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=16005"/>
		<updated>2011-05-17T08:55:24Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The UberCalendar patch enhances the build-in calendar application. It brings more detailed views (like subject lines in week view or shrinked day view) and a lot of other customizations. You will find the latest stable version of this patch in Preware.&lt;br /&gt;
&lt;br /&gt;
A documentation of all features and settings is available here: http://forums.precentral.net/webos-patches/273919-preference-guide-metaviews-ubercalendar-uc-patch.html&lt;br /&gt;
&lt;br /&gt;
A forums thread for questions, comments and more infos about the latest test version can be found here: http://forums.precentral.net/webos-patches/245177-ubercalendar-enhanced-calendar-patch.html&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=16003</id>
		<title>Uber Calendar</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=16003"/>
		<updated>2011-05-17T08:54:47Z</updated>

		<summary type="html">&lt;p&gt;MetaView: removed old stuff and point to precentral threads&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The UberCalendar patch enhances the build-in calendar application. It brings more detailed views (like subject lines in week view or shrinked day view) and a lot of other customizations. You will find the latest stable version of this patch in Preware.&lt;br /&gt;
A documentation of all features and settings is available here: http://forums.precentral.net/webos-patches/273919-preference-guide-metaviews-ubercalendar-uc-patch.html&lt;br /&gt;
A forums thread for questions, comments and more infos about the latest test version can be found here: http://forums.precentral.net/webos-patches/245177-ubercalendar-enhanced-calendar-patch.html&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=14051</id>
		<title>WebOS Internals PDK</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=14051"/>
		<updated>2011-03-15T20:59:08Z</updated>

		<summary type="html">&lt;p&gt;MetaView: /* Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: SDL]]&lt;br /&gt;
Palm's binary sdk  the &amp;quot;Plugin Developer Kit&amp;quot; became available to all developers in March 2010.&lt;br /&gt;
&lt;br /&gt;
When the widk was developed, the Palm PDK didn't exist, and until Dec 2010, it was not possible to run the PDK in Linux.  If you would like to run the official Palm PDK, see [[PDK on Linux]] for directions.&lt;br /&gt;
&lt;br /&gt;
In addition to the PDK, webOS Internals has released a full &amp;quot;WIDK&amp;quot; (webOS Internals Development Kit) for you using Scratchbox2.  &lt;br /&gt;
&lt;br /&gt;
Less than 10% of developers in the webOS developer community use Linux variants. Among those 10% there are dozens of different linux distributions that people use. Palm, therefore has chosen to support only Mac and Windows platforms for their PDK.  Palm reccomends that Linux based developers use the webOS-internals WIDK instead.  &lt;br /&gt;
&lt;br /&gt;
We ''strongly'' urge the open-source homebrew community to standardize on this WIDK.   It uses the same underlying technologies, and is entirely open.  &lt;br /&gt;
&lt;br /&gt;
Scratchbox 2 is a cross-compilation engine, it can be used to create a highly flexible SDK.&lt;br /&gt;
&lt;br /&gt;
As installed below, the install process uses a script which extracts the required Palm provided files from a copy of webOS doctor, and  downloads from other sources, and builds a complete compilation environment automatically which can compile SDL and openGLES apps for webOS.  &lt;br /&gt;
&lt;br /&gt;
SB2 ''itself'' is totally distribution neutral but the webOS cross-compile environment is designed and tested on Ubuntu 9.10 32 bit. (At least one user in #webos-internals reports complete success running the cross compile environment in Ubuntu 9.10 64 bit after installing curl via apt-get.) See [[WebOS_Internals_PDK_on_Mandriva]] if you want to run it on Mandriva.  If you want to run the WIDK on other distributions and are willing to support that yourself and not ask webOS Internals any questions about it then please enjoy and if you succeed come back here and make a new article on how you did it.  Otherwise, use the recommended OS.&lt;br /&gt;
&lt;br /&gt;
The webOS Internals team ''strongly suggest'' apt-get install into the Ubuntu environment only for this purpose. The same installation of Sun Virtualbox which hosts the Palm SDK emulator can host an Ubuntu 9.10 server with very little effort on any operating system. &lt;br /&gt;
&lt;br /&gt;
Developers wanting to work in an open environment 'without' SB2 can consider using the [[PuffTheMagic NDK]].&lt;br /&gt;
&lt;br /&gt;
==SB2 Homepage==&lt;br /&gt;
[http://www.freedesktop.org/wiki/Software/sbox2 http://www.freedesktop.org/wiki/Software/sbox2]pdk&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
Scratchbox 2 is distributed under LGPL version 2.1, portions are under GPL version 2. Some minor stuff is under MIT style license.&lt;br /&gt;
&lt;br /&gt;
== Installation on Ubuntu for webOS PDK cross compiling ==&lt;br /&gt;
&lt;br /&gt;
If setting up in a Virtual Box instance, it is recommended that you first complete the openSSH config as described in the VirtualBox tips for Windows users to the right.  This is helpful even with a Linux host, as SSH into the PDK Virtual Machine will allow copy and paste of the commands listed below and reduce errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
There is an automated installer avaliable [http://forums.precentral.net/webos-internals/266139-webos-internals-automated-installers.html#post2718551 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; clear:right; width:30%&amp;quot;&amp;gt;{{Ubuntu_VM_notes_for_Windows_users}}&amp;lt;/div&amp;gt;&lt;br /&gt;
===Toolchain===&lt;br /&gt;
&lt;br /&gt;
===Prerequisites===&lt;br /&gt;
Your Ubuntu installation will need the following installed.  If you do not have them, run the command after the package name. You can test if they are found by just typing the command name.  If it says command not found, you need to install it.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|'''git''' || sudo apt-get install git-core&lt;br /&gt;
|-&lt;br /&gt;
|'''gcc''' || sudo apt-get install build-essential&lt;br /&gt;
|-&lt;br /&gt;
|'''curl''' || sudo apt-get install curl&lt;br /&gt;
|-&lt;br /&gt;
|'''unzip'''|| sudo apt-get install unzip&lt;br /&gt;
|-&lt;br /&gt;
|'''autoconf'''|| sudo apt-get install autoconf&lt;br /&gt;
|-&lt;br /&gt;
|'''subversion'''|| sudo apt-get install subversion&lt;br /&gt;
|-&lt;br /&gt;
|'''libtool'''|| sudo apt-get install libtool&lt;br /&gt;
|-&lt;br /&gt;
|'''wget'''|| sudo apt-get install wget&lt;br /&gt;
|-&lt;br /&gt;
|'''pkg-config'''|| sudo apt-get install pkg-config&lt;br /&gt;
|-&lt;br /&gt;
|'''gettext'''|| sudo apt-get install gettext&lt;br /&gt;
|-&lt;br /&gt;
|'''fakeroot'''|| sudo apt-get install fakeroot&lt;br /&gt;
|-&lt;br /&gt;
|'''javac'''|| sudo apt-get install sun-java6-jdk&lt;br /&gt;
|-&lt;br /&gt;
|'''ant'''|| sudo apt-get install ant&lt;br /&gt;
|-&lt;br /&gt;
|'''xsltproc'''|| sudo apt-get install xsltproc&lt;br /&gt;
|-&lt;br /&gt;
|'''intltool'''|| sudo apt-get install intltool&lt;br /&gt;
|-&lt;br /&gt;
|'''mkimage'''|| sudo apt-get install uboot-mkimage&lt;br /&gt;
|-&lt;br /&gt;
|'''lsdiff'''|| sudo apt-get install patchutils&lt;br /&gt;
|-&lt;br /&gt;
|'''flex'''|| sudo apt-get install flex&lt;br /&gt;
|-&lt;br /&gt;
|'''bison'''|| sudo apt-get install bison&lt;br /&gt;
|-&lt;br /&gt;
|'''libssl-dev'''|| sudo apt-get install libssl-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libz-dev'''|| sudo apt-get install libz-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libbz2-dev'''|| sudo apt-get install libbz2-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''xar'''|| sudo apt-get install xar&lt;br /&gt;
|-&lt;br /&gt;
|'''help2man'''|| sudo apt-get install help2man&lt;br /&gt;
|-&lt;br /&gt;
|'''texinfo'''|| sudo apt-get install texinfo&lt;br /&gt;
|-&lt;br /&gt;
|'''automake 1.10'''|| sudo apt-get install automake1.10&lt;br /&gt;
|-&lt;br /&gt;
|'''autopoint'''|| sudo apt-get install autopoint&lt;br /&gt;
|-&lt;br /&gt;
|'''xorg-macros'''|| sudo apt-get install xorg-build-macros&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* it has been reported that sun-java6-jdk isn't necessary&lt;br /&gt;
&lt;br /&gt;
If you're uncertain at all, just cut and paste the following.  If they are already installed, they'll be skipped.  &lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install git-core build-essential curl unzip autoconf subversion libtool wget pkg-config gettext fakeroot ant xsltproc intltool uboot-mkimage patchutils flex bison libssl-dev libz-dev libbz2-dev xar help2man texinfo automake1.10 autopoint xorg-build-macros&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are a beginner with Ubuntu Linux Distribution, you should update all the packages on your system to avoid problems when you will compile.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' If you're using Ubuntu and &amp;lt;code&amp;gt;xar&amp;lt;/code&amp;gt; cannot be installed with &amp;lt;code&amp;gt;sudo apt-get install xar&amp;lt;/code&amp;gt;, then you have to download two &amp;lt;code&amp;gt;.deb&amp;lt;/code&amp;gt;-files manually and install them (in the order they are listed):&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/libxar1 libxar1]&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/xar xar]&lt;br /&gt;
After that execute the above command again.&lt;br /&gt;
&lt;br /&gt;
Use these 2 command line :&amp;lt;BR&amp;gt;&lt;br /&gt;
Update repositories   :&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
And next, update the packages :&lt;br /&gt;
 sudo aptitude safe-upgrade&lt;br /&gt;
&lt;br /&gt;
If you're on a 64-bit system, you will also need to install the ia32-libs package.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The ''make toolchain'' command and later steps will download approximately a half-gig of tools and sources from various locations.  Do not start this if you do not have time for a large download.  Additionally, if you already have downloaded a copy of the correct version of the WebOS doctor, you can reduce the download time by copying the doctor file into cross-compile/doctors/ with the correct name.  This will cause the appropriate command to skip that download.  Note that codesourcery rate limts downloads and at a minimum this process will take 10 to 15 minutes irrespective of your connection speed. &lt;br /&gt;
&lt;br /&gt;
====Start setup====&lt;br /&gt;
Create a preware folder, copy the cross-compile tools into it (if you have not installed git, apt-get install git-core), and use a make script to begin the set up of the compilation toolchain. &lt;br /&gt;
&lt;br /&gt;
 sudo mkdir -p /srv/preware&lt;br /&gt;
 cd /srv/preware&lt;br /&gt;
 sudo chmod 777 .&lt;br /&gt;
 git clone git://git.webos-internals.org/preware/cross-compile.git&lt;br /&gt;
 cd cross-compile&lt;br /&gt;
 make toolchain&lt;br /&gt;
&lt;br /&gt;
If errors occur, browse the [http://git.webos-internals.org/?p=preware/cross-compile.git;a=shortlog repository online] and checkout earlier commits until you get something that gets through &amp;quot;make toolchain&amp;quot; and the later &amp;quot;make stage&amp;quot; commands like so:&lt;br /&gt;
&lt;br /&gt;
 git checkout &amp;lt;commit-ish&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Fix mmap errors====&lt;br /&gt;
The following commands appear redundant.  They are not.  The install this fixes your mmap config to fix an mmap: permission denied error, but we don't need the package itself. (Do each command separately with cut and paste).&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install qemu-arm-static&lt;br /&gt;
 sudo apt-get remove qemu-arm-static&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;span style=&amp;quot;font-size:150%&amp;quot;&amp;gt;OR&amp;lt;/span&amp;gt; As a workaround, if this package is not available, &lt;br /&gt;
::: the following commands can be executed in a root shell (sudo -s) to fix the mmap configuration to enable qemu-arm to work.&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;vm.mmap_min_addr = 4096&amp;quot; &amp;gt; /etc/sysctl.d/mmap_min_addr.conf&lt;br /&gt;
 /etc/init.d/procps restart&lt;br /&gt;
&lt;br /&gt;
(note that the value should not be &amp;quot;0&amp;quot;. 4096 is chosen to avoid null pointer attacks.)&lt;br /&gt;
&lt;br /&gt;
====Verify sh shell====&lt;br /&gt;
On Ubuntu /bin/sh is a symbolic link to dash.  This will cause errors with the make stage command below, as some of the scripts assume bash.  Run the following command to see what shell sh is linked to.&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
If the result is a link to dash:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-06 23:55 /bin/sh -&amp;gt; dash&lt;br /&gt;
&lt;br /&gt;
You will want to correct it with the following:&lt;br /&gt;
&lt;br /&gt;
  sudo dpkg-reconfigure dash&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to &amp;quot;Install dash as /bin/sh?&amp;quot;.  Select &amp;quot;&amp;lt;No&amp;gt;&amp;quot; and bash will be used.  Rerun the command to verify:&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
You should now see:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-09 21:12 /bin/sh -&amp;gt; bash&lt;br /&gt;
&lt;br /&gt;
====Setup Scratchbox====&lt;br /&gt;
Now, use apt-get to setup scratchbox...&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install scratchbox2 qemu-kvm-extras (in Debian install qemu-user and qemu-system instead of qemu-kvm-extras)&lt;br /&gt;
&lt;br /&gt;
...and set it up for compiling for webOS. &lt;br /&gt;
&lt;br /&gt;
 cd /srv/preware/cross-compile/toolchain/arm-2007q3/arm-none-linux-gnueabi/libc&lt;br /&gt;
 PATH=/srv/preware/cross-compile/toolchain/arm-2007q3/bin:${PATH} sb2-init -c /usr/bin/qemu-arm armv7 arm-none-linux-gnueabi-gcc&lt;br /&gt;
 cd /srv/preware/cross-compile&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
 make stage&lt;br /&gt;
&lt;br /&gt;
Once this setup is complete, compiling sdl apps for webOS is very simple.&lt;br /&gt;
&lt;br /&gt;
==Verified installed clean list==&lt;br /&gt;
&lt;br /&gt;
If you have successfully built the WIDK from scratch, with NO problems, feel free to add your information to this list.  This will help us assess what distributions and versions it is fully compatible with.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''IRC name'''&lt;br /&gt;
|'''Linux Distribution'''&lt;br /&gt;
|'''Version'''&lt;br /&gt;
|'''Date'''&lt;br /&gt;
|'''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
|Scoutcamper&lt;br /&gt;
|Ubuntu&lt;br /&gt;
|9.04,9.10,10.04,10.10&lt;br /&gt;
|10-18-10&lt;br /&gt;
|Works Great!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It just doesn't work tried for over a week, with fresh Ubuntu 10.4 inside and outside of virtual box, fails on libtool for common/fuse/. Tried -j4 option with make stage, tried make staging-armv7. Also installed automake-1.9 after seeing complaints about that. -- please sign your comments&lt;br /&gt;
&lt;br /&gt;
==Errors during make stage ==&lt;br /&gt;
&lt;br /&gt;
===automake1.10===&lt;br /&gt;
&lt;br /&gt;
If you see the error below, you need the latest automake (1.10)&lt;br /&gt;
&lt;br /&gt;
 /usr/share/automake-1.9/am/depend2.am: am__fastdepOBJC does not appear in AM_CONDITIONAL&lt;br /&gt;
 configure.in:88: installing `./config.guess'&lt;br /&gt;
 configure.in:88: installing `./config.sub'&lt;br /&gt;
 Makefile.am: installing `./INSTALL'&lt;br /&gt;
 autoreconf2.50: automake failed with exit status: 1&lt;br /&gt;
&lt;br /&gt;
Install automake1.10 and it should work (according to [http://old.nabble.com/AC_PROG_OBJC-and-automake-1.9-td22434760.html this page])&lt;br /&gt;
&lt;br /&gt;
===Libtool===&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -Wall -g -O2 -MT libdotconf_la-dotconf.lo -MD -MP -MF .deps/libdotconf_la-dotconf.Tpo -c -o libdotconf_la-dotconf.lo `test -f 'dotconf.c' || echo './'`dotconf.c&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6b, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6b&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [libdotconf_la-dotconf.lo] Error 63&lt;br /&gt;
 make[5]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 make[4]: *** [install-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6'&lt;br /&gt;
 make[3]: *** [build/armv6.built] Error 2&lt;br /&gt;
 make[3]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf'&lt;br /&gt;
 make[2]: *** [build_common/libdotconf] Error 2&lt;br /&gt;
 make[2]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make[1]: *** [staging-armv6] Error 2&lt;br /&gt;
 make[1]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make: *** [stage] Error 2&lt;br /&gt;
&lt;br /&gt;
Confirmed by 3 people. Fix this by either (your choice)&lt;br /&gt;
*upgrading to Ubuntu 10.04 or newer (the WIDK now relies on a slightly newer version of libtool that's not in 9.10 or earlier)&lt;br /&gt;
*updating libtool to 2.2.6b-2 (backported to 9.10, see available downloads on http://linuxappfinder.com/package/libtool#ubuntu_karmicpartner)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you're getting an error where sb2-init gives you the following output:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Running /usr/bin/sb2-build-libtool failed&lt;br /&gt;
 You can run this manually later, otherwise your&lt;br /&gt;
 sb2 environment is correctly setup and ready to use&lt;br /&gt;
&lt;br /&gt;
You need to upgrade qemu. Alternatively, if your sb2-init output fails with a different output, like this:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sb2-init completed successfully, have fun!&lt;br /&gt;
&lt;br /&gt;
Then you need to upgrade scratchbox, too (install 2.0 instead of 1.99).&lt;br /&gt;
&lt;br /&gt;
=== ecore ===&lt;br /&gt;
*TRUE and FALSE are not defined:&lt;br /&gt;
Manually add the definition:&lt;br /&gt;
&lt;br /&gt;
 #ifndef TRUE&lt;br /&gt;
 # define TRUE 1&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
 #ifndef FALSE&lt;br /&gt;
 # define FALSE 0&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; could not be found:&lt;br /&gt;
**Open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/dev-e/ecore/build/src/configure.ac&amp;lt;/code&amp;gt; and search for the line with: &amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; (in my case line 1437) and replace it with &amp;lt;code&amp;gt;po/Makefile.in&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /bin/sh errors ===&lt;br /&gt;
If you are getting a &amp;quot;bad fd number&amp;quot; or other /bin/sh error, make sure your /bin/sh points to bash, not another shell (such as dash.)&lt;br /&gt;
&lt;br /&gt;
Go back through the Verify sh shell section above to correct.&lt;br /&gt;
&lt;br /&gt;
=== fuse ===&lt;br /&gt;
If you get an error like this (happened to me on Ubuntu 10.10):&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
 if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../include  -I../include -DFUSERMOUNT_DIR=\&amp;quot;/usr/local/bin\&amp;quot; -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=26   -Wall -W -Wno-sign-compare -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -g -O2 -fno-strict-aliasing -MT fuse.lo -MD -MP -MF &amp;quot;.deps/fuse.Tpo&amp;quot; -c -o fuse.lo fuse.c; \&lt;br /&gt;
 	then mv -f &amp;quot;.deps/fuse.Tpo&amp;quot; &amp;quot;.deps/fuse.Plo&amp;quot;; else rm -f &amp;quot;.deps/fuse.Tpo&amp;quot;; exit 1; fi&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.1a Debian 1.9+20051221-1, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6b.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.1a Debian 1.9+20051221-1&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [fuse.lo] Error 1&lt;br /&gt;
 make[5]: Leaving direcotry '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
&lt;br /&gt;
Then open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/common/fuse/build/src/ltmain.sh&amp;lt;/code&amp;gt; and search for &amp;lt;code&amp;gt;exit $EXIT_MISMATCH&amp;lt;/code&amp;gt; (in my case line 1028) and comment it out by placing a &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; before this line. I know that's a dirty fix, but it worked for me. Note that you will see the same error messages as before, but it won't stop there.&lt;br /&gt;
&lt;br /&gt;
=== download error files.opentts.org ===&lt;br /&gt;
&lt;br /&gt;
maybe we could replace it by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 curl -f -R -L -o downloads/libdotconf-1.3.tar.gz.tmp http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit&lt;br /&gt;
&lt;br /&gt;
/srv/preware/cross-compile/packages/common/libdotconf/Makefile&lt;br /&gt;
&lt;br /&gt;
and replace line&lt;br /&gt;
 SRC_TGZ = http://files.opentts.org/dotconf/dotconf-${VERSION}.tar.gz&lt;br /&gt;
with&lt;br /&gt;
 SRC_TGZ = http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&lt;br /&gt;
&lt;br /&gt;
=== further download errors ===&lt;br /&gt;
&lt;br /&gt;
rwhitby's suggestion:&lt;br /&gt;
&lt;br /&gt;
If you don't need that package which is failing for you, just move it to the nonworking directory and try again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sample build of [[Application:Doom]]==&lt;br /&gt;
&lt;br /&gt;
Now, go to [[Building DOOM with scratchbox2]] and follow the simple directions.&lt;br /&gt;
&lt;br /&gt;
==In Process Enhancements==&lt;br /&gt;
[[Extracting the PDK on Linux]]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=14049</id>
		<title>WebOS Internals PDK</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=14049"/>
		<updated>2011-03-15T20:51:35Z</updated>

		<summary type="html">&lt;p&gt;MetaView: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: SDL]]&lt;br /&gt;
Palm's binary sdk  the &amp;quot;Plugin Developer Kit&amp;quot; became available to all developers in March 2010.&lt;br /&gt;
&lt;br /&gt;
When the widk was developed, the Palm PDK didn't exist, and until Dec 2010, it was not possible to run the PDK in Linux.  If you would like to run the official Palm PDK, see [[PDK on Linux]] for directions.&lt;br /&gt;
&lt;br /&gt;
In addition to the PDK, webOS Internals has released a full &amp;quot;WIDK&amp;quot; (webOS Internals Development Kit) for you using Scratchbox2.  &lt;br /&gt;
&lt;br /&gt;
Less than 10% of developers in the webOS developer community use Linux variants. Among those 10% there are dozens of different linux distributions that people use. Palm, therefore has chosen to support only Mac and Windows platforms for their PDK.  Palm reccomends that Linux based developers use the webOS-internals WIDK instead.  &lt;br /&gt;
&lt;br /&gt;
We ''strongly'' urge the open-source homebrew community to standardize on this WIDK.   It uses the same underlying technologies, and is entirely open.  &lt;br /&gt;
&lt;br /&gt;
Scratchbox 2 is a cross-compilation engine, it can be used to create a highly flexible SDK.&lt;br /&gt;
&lt;br /&gt;
As installed below, the install process uses a script which extracts the required Palm provided files from a copy of webOS doctor, and  downloads from other sources, and builds a complete compilation environment automatically which can compile SDL and openGLES apps for webOS.  &lt;br /&gt;
&lt;br /&gt;
SB2 ''itself'' is totally distribution neutral but the webOS cross-compile environment is designed and tested on Ubuntu 9.10 32 bit. (At least one user in #webos-internals reports complete success running the cross compile environment in Ubuntu 9.10 64 bit after installing curl via apt-get.) See [[WebOS_Internals_PDK_on_Mandriva]] if you want to run it on Mandriva.  If you want to run the WIDK on other distributions and are willing to support that yourself and not ask webOS Internals any questions about it then please enjoy and if you succeed come back here and make a new article on how you did it.  Otherwise, use the recommended OS.&lt;br /&gt;
&lt;br /&gt;
The webOS Internals team ''strongly suggest'' apt-get install into the Ubuntu environment only for this purpose. The same installation of Sun Virtualbox which hosts the Palm SDK emulator can host an Ubuntu 9.10 server with very little effort on any operating system. &lt;br /&gt;
&lt;br /&gt;
Developers wanting to work in an open environment 'without' SB2 can consider using the [[PuffTheMagic NDK]].&lt;br /&gt;
&lt;br /&gt;
==SB2 Homepage==&lt;br /&gt;
[http://www.freedesktop.org/wiki/Software/sbox2 http://www.freedesktop.org/wiki/Software/sbox2]pdk&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
Scratchbox 2 is distributed under LGPL version 2.1, portions are under GPL version 2. Some minor stuff is under MIT style license.&lt;br /&gt;
&lt;br /&gt;
== Installation on Ubuntu for webOS PDK cross compiling ==&lt;br /&gt;
&lt;br /&gt;
If setting up in a Virtual Box instance, it is recommended that you first complete the openSSH config as described in the VirtualBox tips for Windows users to the right.  This is helpful even with a Linux host, as SSH into the PDK Virtual Machine will allow copy and paste of the commands listed below and reduce errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
There is an automated installer avaliable [http://forums.precentral.net/webos-internals/266139-webos-internals-automated-installers.html#post2718551 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; clear:right; width:30%&amp;quot;&amp;gt;{{Ubuntu_VM_notes_for_Windows_users}}&amp;lt;/div&amp;gt;&lt;br /&gt;
===Toolchain===&lt;br /&gt;
&lt;br /&gt;
===Prerequisites===&lt;br /&gt;
Your Ubuntu installation will need the following installed.  If you do not have them, run the command after the package name. You can test if they are found by just typing the command name.  If it says command not found, you need to install it.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|'''git''' || sudo apt-get install git-core&lt;br /&gt;
|-&lt;br /&gt;
|'''gcc''' || sudo apt-get install build-essential&lt;br /&gt;
|-&lt;br /&gt;
|'''curl''' || sudo apt-get install curl&lt;br /&gt;
|-&lt;br /&gt;
|'''unzip'''|| sudo apt-get install unzip&lt;br /&gt;
|-&lt;br /&gt;
|'''autoconf'''|| sudo apt-get install autoconf&lt;br /&gt;
|-&lt;br /&gt;
|'''subversion'''|| sudo apt-get install subversion&lt;br /&gt;
|-&lt;br /&gt;
|'''libtool'''|| sudo apt-get install libtool&lt;br /&gt;
|-&lt;br /&gt;
|'''wget'''|| sudo apt-get install wget&lt;br /&gt;
|-&lt;br /&gt;
|'''pkg-config'''|| sudo apt-get install pkg-config&lt;br /&gt;
|-&lt;br /&gt;
|'''gettext'''|| sudo apt-get install gettext&lt;br /&gt;
|-&lt;br /&gt;
|'''fakeroot'''|| sudo apt-get install fakeroot&lt;br /&gt;
|-&lt;br /&gt;
|'''javac'''|| sudo apt-get install sun-java6-jdk&lt;br /&gt;
|-&lt;br /&gt;
|'''ant'''|| sudo apt-get install ant&lt;br /&gt;
|-&lt;br /&gt;
|'''xsltproc'''|| sudo apt-get install xsltproc&lt;br /&gt;
|-&lt;br /&gt;
|'''intltool'''|| sudo apt-get install intltool&lt;br /&gt;
|-&lt;br /&gt;
|'''mkimage'''|| sudo apt-get install uboot-mkimage&lt;br /&gt;
|-&lt;br /&gt;
|'''lsdiff'''|| sudo apt-get install patchutils&lt;br /&gt;
|-&lt;br /&gt;
|'''flex'''|| sudo apt-get install flex&lt;br /&gt;
|-&lt;br /&gt;
|'''bison'''|| sudo apt-get install bison&lt;br /&gt;
|-&lt;br /&gt;
|'''libssl-dev'''|| sudo apt-get install libssl-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libz-dev'''|| sudo apt-get install libz-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libbz2-dev'''|| sudo apt-get install libbz2-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''xar'''|| sudo apt-get install xar&lt;br /&gt;
|-&lt;br /&gt;
|'''help2man'''|| sudo apt-get install help2man&lt;br /&gt;
|-&lt;br /&gt;
|'''texinfo'''|| sudo apt-get install texinfo&lt;br /&gt;
|-&lt;br /&gt;
|'''automake 1.10'''|| sudo apt-get install automake1.10&lt;br /&gt;
|-&lt;br /&gt;
|'''autopoint'''|| sudo apt-get install autopoint&lt;br /&gt;
|-&lt;br /&gt;
|'''xorg-macros'''|| sudo apt-get install xorg-build-macros&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* it has been reported that sun-java6-jdk isn't necessary&lt;br /&gt;
&lt;br /&gt;
If you're uncertain at all, just cut and paste the following.  If they are already installed, they'll be skipped.  &lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install git-core build-essential curl unzip autoconf subversion libtool wget pkg-config gettext fakeroot ant xsltproc intltool uboot-mkimage patchutils flex bison libssl-dev libz-dev libbz2-dev xar help2man texinfo automake1.10 autopoint&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are a beginner with Ubuntu Linux Distribution, you should update all the packages on your system to avoid problems when you will compile.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' If you're using Ubuntu and &amp;lt;code&amp;gt;xar&amp;lt;/code&amp;gt; cannot be installed with &amp;lt;code&amp;gt;sudo apt-get install xar&amp;lt;/code&amp;gt;, then you have to download two &amp;lt;code&amp;gt;.deb&amp;lt;/code&amp;gt;-files manually and install them (in the order they are listed):&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/libxar1 libxar1]&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/xar xar]&lt;br /&gt;
After that execute the above command again.&lt;br /&gt;
&lt;br /&gt;
Use these 2 command line :&amp;lt;BR&amp;gt;&lt;br /&gt;
Update repositories   :&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
And next, update the packages :&lt;br /&gt;
 sudo aptitude safe-upgrade&lt;br /&gt;
&lt;br /&gt;
If you're on a 64-bit system, you will also need to install the ia32-libs package.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The ''make toolchain'' command and later steps will download approximately a half-gig of tools and sources from various locations.  Do not start this if you do not have time for a large download.  Additionally, if you already have downloaded a copy of the correct version of the WebOS doctor, you can reduce the download time by copying the doctor file into cross-compile/doctors/ with the correct name.  This will cause the appropriate command to skip that download.  Note that codesourcery rate limts downloads and at a minimum this process will take 10 to 15 minutes irrespective of your connection speed. &lt;br /&gt;
&lt;br /&gt;
====Start setup====&lt;br /&gt;
Create a preware folder, copy the cross-compile tools into it (if you have not installed git, apt-get install git-core), and use a make script to begin the set up of the compilation toolchain. &lt;br /&gt;
&lt;br /&gt;
 sudo mkdir -p /srv/preware&lt;br /&gt;
 cd /srv/preware&lt;br /&gt;
 sudo chmod 777 .&lt;br /&gt;
 git clone git://git.webos-internals.org/preware/cross-compile.git&lt;br /&gt;
 cd cross-compile&lt;br /&gt;
 make toolchain&lt;br /&gt;
&lt;br /&gt;
If errors occur, browse the [http://git.webos-internals.org/?p=preware/cross-compile.git;a=shortlog repository online] and checkout earlier commits until you get something that gets through &amp;quot;make toolchain&amp;quot; and the later &amp;quot;make stage&amp;quot; commands like so:&lt;br /&gt;
&lt;br /&gt;
 git checkout &amp;lt;commit-ish&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Fix mmap errors====&lt;br /&gt;
The following commands appear redundant.  They are not.  The install this fixes your mmap config to fix an mmap: permission denied error, but we don't need the package itself. (Do each command separately with cut and paste).&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install qemu-arm-static&lt;br /&gt;
 sudo apt-get remove qemu-arm-static&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;span style=&amp;quot;font-size:150%&amp;quot;&amp;gt;OR&amp;lt;/span&amp;gt; As a workaround, if this package is not available, &lt;br /&gt;
::: the following commands can be executed in a root shell (sudo -s) to fix the mmap configuration to enable qemu-arm to work.&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;vm.mmap_min_addr = 4096&amp;quot; &amp;gt; /etc/sysctl.d/mmap_min_addr.conf&lt;br /&gt;
 /etc/init.d/procps restart&lt;br /&gt;
&lt;br /&gt;
(note that the value should not be &amp;quot;0&amp;quot;. 4096 is chosen to avoid null pointer attacks.)&lt;br /&gt;
&lt;br /&gt;
====Verify sh shell====&lt;br /&gt;
On Ubuntu /bin/sh is a symbolic link to dash.  This will cause errors with the make stage command below, as some of the scripts assume bash.  Run the following command to see what shell sh is linked to.&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
If the result is a link to dash:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-06 23:55 /bin/sh -&amp;gt; dash&lt;br /&gt;
&lt;br /&gt;
You will want to correct it with the following:&lt;br /&gt;
&lt;br /&gt;
  sudo dpkg-reconfigure dash&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to &amp;quot;Install dash as /bin/sh?&amp;quot;.  Select &amp;quot;&amp;lt;No&amp;gt;&amp;quot; and bash will be used.  Rerun the command to verify:&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
You should now see:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-09 21:12 /bin/sh -&amp;gt; bash&lt;br /&gt;
&lt;br /&gt;
====Setup Scratchbox====&lt;br /&gt;
Now, use apt-get to setup scratchbox...&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install scratchbox2 qemu-kvm-extras (in Debian install qemu-user and qemu-system instead of qemu-kvm-extras)&lt;br /&gt;
&lt;br /&gt;
...and set it up for compiling for webOS. &lt;br /&gt;
&lt;br /&gt;
 cd /srv/preware/cross-compile/toolchain/arm-2007q3/arm-none-linux-gnueabi/libc&lt;br /&gt;
 PATH=/srv/preware/cross-compile/toolchain/arm-2007q3/bin:${PATH} sb2-init -c /usr/bin/qemu-arm armv7 arm-none-linux-gnueabi-gcc&lt;br /&gt;
 cd /srv/preware/cross-compile&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
 make stage&lt;br /&gt;
&lt;br /&gt;
Once this setup is complete, compiling sdl apps for webOS is very simple.&lt;br /&gt;
&lt;br /&gt;
==Verified installed clean list==&lt;br /&gt;
&lt;br /&gt;
If you have successfully built the WIDK from scratch, with NO problems, feel free to add your information to this list.  This will help us assess what distributions and versions it is fully compatible with.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''IRC name'''&lt;br /&gt;
|'''Linux Distribution'''&lt;br /&gt;
|'''Version'''&lt;br /&gt;
|'''Date'''&lt;br /&gt;
|'''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
|Scoutcamper&lt;br /&gt;
|Ubuntu&lt;br /&gt;
|9.04,9.10,10.04,10.10&lt;br /&gt;
|10-18-10&lt;br /&gt;
|Works Great!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It just doesn't work tried for over a week, with fresh Ubuntu 10.4 inside and outside of virtual box, fails on libtool for common/fuse/. Tried -j4 option with make stage, tried make staging-armv7. Also installed automake-1.9 after seeing complaints about that. -- please sign your comments&lt;br /&gt;
&lt;br /&gt;
==Errors during make stage ==&lt;br /&gt;
&lt;br /&gt;
===automake1.10===&lt;br /&gt;
&lt;br /&gt;
If you see the error below, you need the latest automake (1.10)&lt;br /&gt;
&lt;br /&gt;
 /usr/share/automake-1.9/am/depend2.am: am__fastdepOBJC does not appear in AM_CONDITIONAL&lt;br /&gt;
 configure.in:88: installing `./config.guess'&lt;br /&gt;
 configure.in:88: installing `./config.sub'&lt;br /&gt;
 Makefile.am: installing `./INSTALL'&lt;br /&gt;
 autoreconf2.50: automake failed with exit status: 1&lt;br /&gt;
&lt;br /&gt;
Install automake1.10 and it should work (according to [http://old.nabble.com/AC_PROG_OBJC-and-automake-1.9-td22434760.html this page])&lt;br /&gt;
&lt;br /&gt;
===Libtool===&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -Wall -g -O2 -MT libdotconf_la-dotconf.lo -MD -MP -MF .deps/libdotconf_la-dotconf.Tpo -c -o libdotconf_la-dotconf.lo `test -f 'dotconf.c' || echo './'`dotconf.c&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6b, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6b&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [libdotconf_la-dotconf.lo] Error 63&lt;br /&gt;
 make[5]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 make[4]: *** [install-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6'&lt;br /&gt;
 make[3]: *** [build/armv6.built] Error 2&lt;br /&gt;
 make[3]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf'&lt;br /&gt;
 make[2]: *** [build_common/libdotconf] Error 2&lt;br /&gt;
 make[2]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make[1]: *** [staging-armv6] Error 2&lt;br /&gt;
 make[1]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make: *** [stage] Error 2&lt;br /&gt;
&lt;br /&gt;
Confirmed by 3 people. Fix this by either (your choice)&lt;br /&gt;
*upgrading to Ubuntu 10.04 or newer (the WIDK now relies on a slightly newer version of libtool that's not in 9.10 or earlier)&lt;br /&gt;
*updating libtool to 2.2.6b-2 (backported to 9.10, see available downloads on http://linuxappfinder.com/package/libtool#ubuntu_karmicpartner)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you're getting an error where sb2-init gives you the following output:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Running /usr/bin/sb2-build-libtool failed&lt;br /&gt;
 You can run this manually later, otherwise your&lt;br /&gt;
 sb2 environment is correctly setup and ready to use&lt;br /&gt;
&lt;br /&gt;
You need to upgrade qemu. Alternatively, if your sb2-init output fails with a different output, like this:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sb2-init completed successfully, have fun!&lt;br /&gt;
&lt;br /&gt;
Then you need to upgrade scratchbox, too (install 2.0 instead of 1.99).&lt;br /&gt;
&lt;br /&gt;
=== ecore ===&lt;br /&gt;
*TRUE and FALSE are not defined:&lt;br /&gt;
Manually add the definition:&lt;br /&gt;
&lt;br /&gt;
 #ifndef TRUE&lt;br /&gt;
 # define TRUE 1&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
 #ifndef FALSE&lt;br /&gt;
 # define FALSE 0&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; could not be found:&lt;br /&gt;
**Open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/dev-e/ecore/build/src/configure.ac&amp;lt;/code&amp;gt; and search for the line with: &amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; (in my case line 1437) and replace it with &amp;lt;code&amp;gt;po/Makefile.in&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /bin/sh errors ===&lt;br /&gt;
If you are getting a &amp;quot;bad fd number&amp;quot; or other /bin/sh error, make sure your /bin/sh points to bash, not another shell (such as dash.)&lt;br /&gt;
&lt;br /&gt;
Go back through the Verify sh shell section above to correct.&lt;br /&gt;
&lt;br /&gt;
=== fuse ===&lt;br /&gt;
If you get an error like this (happened to me on Ubuntu 10.10):&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
 if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../include  -I../include -DFUSERMOUNT_DIR=\&amp;quot;/usr/local/bin\&amp;quot; -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=26   -Wall -W -Wno-sign-compare -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -g -O2 -fno-strict-aliasing -MT fuse.lo -MD -MP -MF &amp;quot;.deps/fuse.Tpo&amp;quot; -c -o fuse.lo fuse.c; \&lt;br /&gt;
 	then mv -f &amp;quot;.deps/fuse.Tpo&amp;quot; &amp;quot;.deps/fuse.Plo&amp;quot;; else rm -f &amp;quot;.deps/fuse.Tpo&amp;quot;; exit 1; fi&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.1a Debian 1.9+20051221-1, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6b.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.1a Debian 1.9+20051221-1&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [fuse.lo] Error 1&lt;br /&gt;
 make[5]: Leaving direcotry '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
&lt;br /&gt;
Then open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/common/fuse/build/src/ltmain.sh&amp;lt;/code&amp;gt; and search for &amp;lt;code&amp;gt;exit $EXIT_MISMATCH&amp;lt;/code&amp;gt; (in my case line 1028) and comment it out by placing a &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; before this line. I know that's a dirty fix, but it worked for me. Note that you will see the same error messages as before, but it won't stop there.&lt;br /&gt;
&lt;br /&gt;
=== download error files.opentts.org ===&lt;br /&gt;
&lt;br /&gt;
maybe we could replace it by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 curl -f -R -L -o downloads/libdotconf-1.3.tar.gz.tmp http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit&lt;br /&gt;
&lt;br /&gt;
/srv/preware/cross-compile/packages/common/libdotconf/Makefile&lt;br /&gt;
&lt;br /&gt;
and replace line&lt;br /&gt;
 SRC_TGZ = http://files.opentts.org/dotconf/dotconf-${VERSION}.tar.gz&lt;br /&gt;
with&lt;br /&gt;
 SRC_TGZ = http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&lt;br /&gt;
&lt;br /&gt;
=== further download errors ===&lt;br /&gt;
&lt;br /&gt;
rwhitby's suggestion:&lt;br /&gt;
&lt;br /&gt;
If you don't need that package which is failing for you, just move it to the nonworking directory and try again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sample build of [[Application:Doom]]==&lt;br /&gt;
&lt;br /&gt;
Now, go to [[Building DOOM with scratchbox2]] and follow the simple directions.&lt;br /&gt;
&lt;br /&gt;
==In Process Enhancements==&lt;br /&gt;
[[Extracting the PDK on Linux]]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=14045</id>
		<title>WebOS Internals PDK</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=14045"/>
		<updated>2011-03-15T20:47:59Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: SDL]]&lt;br /&gt;
Palm's binary sdk  the &amp;quot;Plugin Developer Kit&amp;quot; became available to all developers in March 2010.&lt;br /&gt;
&lt;br /&gt;
When the widk was developed, the Palm PDK didn't exist, and until Dec 2010, it was not possible to run the PDK in Linux.  If you would like to run the official Palm PDK, see [[PDK on Linux]] for directions.&lt;br /&gt;
&lt;br /&gt;
In addition to the PDK, webOS Internals has released a full &amp;quot;WIDK&amp;quot; (webOS Internals Development Kit) for you using Scratchbox2.  &lt;br /&gt;
&lt;br /&gt;
Less than 10% of developers in the webOS developer community use Linux variants. Among those 10% there are dozens of different linux distributions that people use. Palm, therefore has chosen to support only Mac and Windows platforms for their PDK.  Palm reccomends that Linux based developers use the webOS-internals WIDK instead.  &lt;br /&gt;
&lt;br /&gt;
We ''strongly'' urge the open-source homebrew community to standardize on this WIDK.   It uses the same underlying technologies, and is entirely open.  &lt;br /&gt;
&lt;br /&gt;
Scratchbox 2 is a cross-compilation engine, it can be used to create a highly flexible SDK.&lt;br /&gt;
&lt;br /&gt;
As installed below, the install process uses a script which extracts the required Palm provided files from a copy of webOS doctor, and  downloads from other sources, and builds a complete compilation environment automatically which can compile SDL and openGLES apps for webOS.  &lt;br /&gt;
&lt;br /&gt;
SB2 ''itself'' is totally distribution neutral but the webOS cross-compile environment is designed and tested on Ubuntu 9.10 32 bit. (At least one user in #webos-internals reports complete success running the cross compile environment in Ubuntu 9.10 64 bit after installing curl via apt-get.) See [[WebOS_Internals_PDK_on_Mandriva]] if you want to run it on Mandriva.  If you want to run the WIDK on other distributions and are willing to support that yourself and not ask webOS Internals any questions about it then please enjoy and if you succeed come back here and make a new article on how you did it.  Otherwise, use the recommended OS.&lt;br /&gt;
&lt;br /&gt;
The webOS Internals team ''strongly suggest'' apt-get install into the Ubuntu environment only for this purpose. The same installation of Sun Virtualbox which hosts the Palm SDK emulator can host an Ubuntu 9.10 server with very little effort on any operating system. &lt;br /&gt;
&lt;br /&gt;
Developers wanting to work in an open environment 'without' SB2 can consider using the [[PuffTheMagic NDK]].&lt;br /&gt;
&lt;br /&gt;
==SB2 Homepage==&lt;br /&gt;
[http://www.freedesktop.org/wiki/Software/sbox2 http://www.freedesktop.org/wiki/Software/sbox2]pdk&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
Scratchbox 2 is distributed under LGPL version 2.1, portions are under GPL version 2. Some minor stuff is under MIT style license.&lt;br /&gt;
&lt;br /&gt;
== Installation on Ubuntu for webOS PDK cross compiling ==&lt;br /&gt;
&lt;br /&gt;
If setting up in a Virtual Box instance, it is recommended that you first complete the openSSH config as described in the VirtualBox tips for Windows users to the right.  This is helpful even with a Linux host, as SSH into the PDK Virtual Machine will allow copy and paste of the commands listed below and reduce errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
There is an automated installer avaliable [http://forums.precentral.net/webos-internals/266139-webos-internals-automated-installers.html#post2718551 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; clear:right; width:30%&amp;quot;&amp;gt;{{Ubuntu_VM_notes_for_Windows_users}}&amp;lt;/div&amp;gt;&lt;br /&gt;
===Toolchain===&lt;br /&gt;
&lt;br /&gt;
===Prerequisites===&lt;br /&gt;
Your Ubuntu installation will need the following installed.  If you do not have them, run the command after the package name. You can test if they are found by just typing the command name.  If it says command not found, you need to install it.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|'''git''' || sudo apt-get install git-core&lt;br /&gt;
|-&lt;br /&gt;
|'''gcc''' || sudo apt-get install build-essential&lt;br /&gt;
|-&lt;br /&gt;
|'''curl''' || sudo apt-get install curl&lt;br /&gt;
|-&lt;br /&gt;
|'''unzip'''|| sudo apt-get install unzip&lt;br /&gt;
|-&lt;br /&gt;
|'''autoconf'''|| sudo apt-get install autoconf&lt;br /&gt;
|-&lt;br /&gt;
|'''subversion'''|| sudo apt-get install subversion&lt;br /&gt;
|-&lt;br /&gt;
|'''libtool'''|| sudo apt-get install libtool&lt;br /&gt;
|-&lt;br /&gt;
|'''wget'''|| sudo apt-get install wget&lt;br /&gt;
|-&lt;br /&gt;
|'''pkg-config'''|| sudo apt-get install pkg-config&lt;br /&gt;
|-&lt;br /&gt;
|'''gettext'''|| sudo apt-get install gettext&lt;br /&gt;
|-&lt;br /&gt;
|'''fakeroot'''|| sudo apt-get install fakeroot&lt;br /&gt;
|-&lt;br /&gt;
|'''javac'''|| sudo apt-get install sun-java6-jdk&lt;br /&gt;
|-&lt;br /&gt;
|'''ant'''|| sudo apt-get install ant&lt;br /&gt;
|-&lt;br /&gt;
|'''xsltproc'''|| sudo apt-get install xsltproc&lt;br /&gt;
|-&lt;br /&gt;
|'''intltool'''|| sudo apt-get install intltool&lt;br /&gt;
|-&lt;br /&gt;
|'''mkimage'''|| sudo apt-get install uboot-mkimage&lt;br /&gt;
|-&lt;br /&gt;
|'''lsdiff'''|| sudo apt-get install patchutils&lt;br /&gt;
|-&lt;br /&gt;
|'''flex'''|| sudo apt-get install flex&lt;br /&gt;
|-&lt;br /&gt;
|'''bison'''|| sudo apt-get install bison&lt;br /&gt;
|-&lt;br /&gt;
|'''libssl-dev'''|| sudo apt-get install libssl-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libz-dev'''|| sudo apt-get install libz-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libbz2-dev'''|| sudo apt-get install libbz2-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''xar'''|| sudo apt-get install xar&lt;br /&gt;
|-&lt;br /&gt;
|'''help2man'''|| sudo apt-get install help2man&lt;br /&gt;
|-&lt;br /&gt;
|'''texinfo'''|| sudo apt-get install texinfo&lt;br /&gt;
|-&lt;br /&gt;
|'''automake 1.10'''|| sudo apt-get install automake1.10&lt;br /&gt;
|-&lt;br /&gt;
|'''autopoint'''|| sudo apt-get install autopoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* it has been reported that sun-java6-jdk isn't necessary&lt;br /&gt;
&lt;br /&gt;
If you're uncertain at all, just cut and paste the following.  If they are already installed, they'll be skipped.  &lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install git-core build-essential curl unzip autoconf subversion libtool wget pkg-config gettext fakeroot ant xsltproc intltool uboot-mkimage patchutils flex bison libssl-dev libz-dev libbz2-dev xar help2man texinfo automake1.10 autopoint&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are a beginner with Ubuntu Linux Distribution, you should update all the packages on your system to avoid problems when you will compile.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' If you're using Ubuntu and &amp;lt;code&amp;gt;xar&amp;lt;/code&amp;gt; cannot be installed with &amp;lt;code&amp;gt;sudo apt-get install xar&amp;lt;/code&amp;gt;, then you have to download two &amp;lt;code&amp;gt;.deb&amp;lt;/code&amp;gt;-files manually and install them (in the order they are listed):&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/libxar1 libxar1]&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/xar xar]&lt;br /&gt;
After that execute the above command again.&lt;br /&gt;
&lt;br /&gt;
Use these 2 command line :&amp;lt;BR&amp;gt;&lt;br /&gt;
Update repositories   :&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
And next, update the packages :&lt;br /&gt;
 sudo aptitude safe-upgrade&lt;br /&gt;
&lt;br /&gt;
If you're on a 64-bit system, you will also need to install the ia32-libs package.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The ''make toolchain'' command and later steps will download approximately a half-gig of tools and sources from various locations.  Do not start this if you do not have time for a large download.  Additionally, if you already have downloaded a copy of the correct version of the WebOS doctor, you can reduce the download time by copying the doctor file into cross-compile/doctors/ with the correct name.  This will cause the appropriate command to skip that download.  Note that codesourcery rate limts downloads and at a minimum this process will take 10 to 15 minutes irrespective of your connection speed. &lt;br /&gt;
&lt;br /&gt;
====Start setup====&lt;br /&gt;
Create a preware folder, copy the cross-compile tools into it (if you have not installed git, apt-get install git-core), and use a make script to begin the set up of the compilation toolchain. &lt;br /&gt;
&lt;br /&gt;
 sudo mkdir -p /srv/preware&lt;br /&gt;
 cd /srv/preware&lt;br /&gt;
 sudo chmod 777 .&lt;br /&gt;
 git clone git://git.webos-internals.org/preware/cross-compile.git&lt;br /&gt;
 cd cross-compile&lt;br /&gt;
 make toolchain&lt;br /&gt;
&lt;br /&gt;
If errors occur, browse the [http://git.webos-internals.org/?p=preware/cross-compile.git;a=shortlog repository online] and checkout earlier commits until you get something that gets through &amp;quot;make toolchain&amp;quot; and the later &amp;quot;make stage&amp;quot; commands like so:&lt;br /&gt;
&lt;br /&gt;
 git checkout &amp;lt;commit-ish&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Fix mmap errors====&lt;br /&gt;
The following commands appear redundant.  They are not.  The install this fixes your mmap config to fix an mmap: permission denied error, but we don't need the package itself. (Do each command separately with cut and paste).&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install qemu-arm-static&lt;br /&gt;
 sudo apt-get remove qemu-arm-static&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;span style=&amp;quot;font-size:150%&amp;quot;&amp;gt;OR&amp;lt;/span&amp;gt; As a workaround, if this package is not available, &lt;br /&gt;
::: the following commands can be executed in a root shell (sudo -s) to fix the mmap configuration to enable qemu-arm to work.&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;vm.mmap_min_addr = 4096&amp;quot; &amp;gt; /etc/sysctl.d/mmap_min_addr.conf&lt;br /&gt;
 /etc/init.d/procps restart&lt;br /&gt;
&lt;br /&gt;
(note that the value should not be &amp;quot;0&amp;quot;. 4096 is chosen to avoid null pointer attacks.)&lt;br /&gt;
&lt;br /&gt;
====Verify sh shell====&lt;br /&gt;
On Ubuntu /bin/sh is a symbolic link to dash.  This will cause errors with the make stage command below, as some of the scripts assume bash.  Run the following command to see what shell sh is linked to.&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
If the result is a link to dash:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-06 23:55 /bin/sh -&amp;gt; dash&lt;br /&gt;
&lt;br /&gt;
You will want to correct it with the following:&lt;br /&gt;
&lt;br /&gt;
  sudo dpkg-reconfigure dash&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to &amp;quot;Install dash as /bin/sh?&amp;quot;.  Select &amp;quot;&amp;lt;No&amp;gt;&amp;quot; and bash will be used.  Rerun the command to verify:&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
You should now see:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-09 21:12 /bin/sh -&amp;gt; bash&lt;br /&gt;
&lt;br /&gt;
====Setup Scratchbox====&lt;br /&gt;
Now, use apt-get to setup scratchbox...&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install scratchbox2 qemu-kvm-extras (in Debian install qemu-user and qemu-system instead of qemu-kvm-extras)&lt;br /&gt;
&lt;br /&gt;
...and set it up for compiling for webOS. &lt;br /&gt;
&lt;br /&gt;
 cd /srv/preware/cross-compile/toolchain/arm-2007q3/arm-none-linux-gnueabi/libc&lt;br /&gt;
 PATH=/srv/preware/cross-compile/toolchain/arm-2007q3/bin:${PATH} sb2-init -c /usr/bin/qemu-arm armv7 arm-none-linux-gnueabi-gcc&lt;br /&gt;
 cd /srv/preware/cross-compile&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
 make stage&lt;br /&gt;
&lt;br /&gt;
Once this setup is complete, compiling sdl apps for webOS is very simple.&lt;br /&gt;
&lt;br /&gt;
==Verified installed clean list==&lt;br /&gt;
&lt;br /&gt;
If you have successfully built the WIDK from scratch, with NO problems, feel free to add your information to this list.  This will help us assess what distributions and versions it is fully compatible with.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''IRC name'''&lt;br /&gt;
|'''Linux Distribution'''&lt;br /&gt;
|'''Version'''&lt;br /&gt;
|'''Date'''&lt;br /&gt;
|'''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
|Scoutcamper&lt;br /&gt;
|Ubuntu&lt;br /&gt;
|9.04,9.10,10.04,10.10&lt;br /&gt;
|10-18-10&lt;br /&gt;
|Works Great!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It just doesn't work tried for over a week, with fresh Ubuntu 10.4 inside and outside of virtual box, fails on libtool for common/fuse/. Tried -j4 option with make stage, tried make staging-armv7. Also installed automake-1.9 after seeing complaints about that. -- please sign your comments&lt;br /&gt;
&lt;br /&gt;
==Errors during make stage ==&lt;br /&gt;
&lt;br /&gt;
===automake1.10===&lt;br /&gt;
&lt;br /&gt;
If you see the error below, you need the latest automake (1.10)&lt;br /&gt;
&lt;br /&gt;
 /usr/share/automake-1.9/am/depend2.am: am__fastdepOBJC does not appear in AM_CONDITIONAL&lt;br /&gt;
 configure.in:88: installing `./config.guess'&lt;br /&gt;
 configure.in:88: installing `./config.sub'&lt;br /&gt;
 Makefile.am: installing `./INSTALL'&lt;br /&gt;
 autoreconf2.50: automake failed with exit status: 1&lt;br /&gt;
&lt;br /&gt;
Install automake1.10 and it should work (according to [http://old.nabble.com/AC_PROG_OBJC-and-automake-1.9-td22434760.html this page])&lt;br /&gt;
&lt;br /&gt;
===Libtool===&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -Wall -g -O2 -MT libdotconf_la-dotconf.lo -MD -MP -MF .deps/libdotconf_la-dotconf.Tpo -c -o libdotconf_la-dotconf.lo `test -f 'dotconf.c' || echo './'`dotconf.c&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6b, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6b&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [libdotconf_la-dotconf.lo] Error 63&lt;br /&gt;
 make[5]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 make[4]: *** [install-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6'&lt;br /&gt;
 make[3]: *** [build/armv6.built] Error 2&lt;br /&gt;
 make[3]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf'&lt;br /&gt;
 make[2]: *** [build_common/libdotconf] Error 2&lt;br /&gt;
 make[2]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make[1]: *** [staging-armv6] Error 2&lt;br /&gt;
 make[1]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make: *** [stage] Error 2&lt;br /&gt;
&lt;br /&gt;
Confirmed by 3 people. Fix this by either (your choice)&lt;br /&gt;
*upgrading to Ubuntu 10.04 or newer (the WIDK now relies on a slightly newer version of libtool that's not in 9.10 or earlier)&lt;br /&gt;
*updating libtool to 2.2.6b-2 (backported to 9.10, see available downloads on http://linuxappfinder.com/package/libtool#ubuntu_karmicpartner)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you're getting an error where sb2-init gives you the following output:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Running /usr/bin/sb2-build-libtool failed&lt;br /&gt;
 You can run this manually later, otherwise your&lt;br /&gt;
 sb2 environment is correctly setup and ready to use&lt;br /&gt;
&lt;br /&gt;
You need to upgrade qemu. Alternatively, if your sb2-init output fails with a different output, like this:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sb2-init completed successfully, have fun!&lt;br /&gt;
&lt;br /&gt;
Then you need to upgrade scratchbox, too (install 2.0 instead of 1.99).&lt;br /&gt;
&lt;br /&gt;
=== ecore ===&lt;br /&gt;
*TRUE and FALSE are not defined:&lt;br /&gt;
Manually add the definition:&lt;br /&gt;
&lt;br /&gt;
 #ifndef TRUE&lt;br /&gt;
 # define TRUE 1&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
 #ifndef FALSE&lt;br /&gt;
 # define FALSE 0&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; could not be found:&lt;br /&gt;
**Open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/dev-e/ecore/build/src/configure.ac&amp;lt;/code&amp;gt; and search for the line with: &amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; (in my case line 1437) and replace it with &amp;lt;code&amp;gt;po/Makefile.in&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /bin/sh errors ===&lt;br /&gt;
If you are getting a &amp;quot;bad fd number&amp;quot; or other /bin/sh error, make sure your /bin/sh points to bash, not another shell (such as dash.)&lt;br /&gt;
&lt;br /&gt;
Go back through the Verify sh shell section above to correct.&lt;br /&gt;
&lt;br /&gt;
=== fuse ===&lt;br /&gt;
If you get an error like this (happened to me on Ubuntu 10.10):&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
 if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../include  -I../include -DFUSERMOUNT_DIR=\&amp;quot;/usr/local/bin\&amp;quot; -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=26   -Wall -W -Wno-sign-compare -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -g -O2 -fno-strict-aliasing -MT fuse.lo -MD -MP -MF &amp;quot;.deps/fuse.Tpo&amp;quot; -c -o fuse.lo fuse.c; \&lt;br /&gt;
 	then mv -f &amp;quot;.deps/fuse.Tpo&amp;quot; &amp;quot;.deps/fuse.Plo&amp;quot;; else rm -f &amp;quot;.deps/fuse.Tpo&amp;quot;; exit 1; fi&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.1a Debian 1.9+20051221-1, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6b.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.1a Debian 1.9+20051221-1&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [fuse.lo] Error 1&lt;br /&gt;
 make[5]: Leaving direcotry '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
&lt;br /&gt;
Then open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/common/fuse/build/src/ltmain.sh&amp;lt;/code&amp;gt; and search for &amp;lt;code&amp;gt;exit $EXIT_MISMATCH&amp;lt;/code&amp;gt; (in my case line 1028) and comment it out by placing a &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; before this line. I know that's a dirty fix, but it worked for me. Note that you will see the same error messages as before, but it won't stop there.&lt;br /&gt;
&lt;br /&gt;
=== download error files.opentts.org ===&lt;br /&gt;
&lt;br /&gt;
maybe we could replace it by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 curl -f -R -L -o downloads/libdotconf-1.3.tar.gz.tmp http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit&lt;br /&gt;
&lt;br /&gt;
/srv/preware/cross-compile/packages/common/libdotconf/Makefile&lt;br /&gt;
&lt;br /&gt;
and replace line&lt;br /&gt;
 SRC_TGZ = http://files.opentts.org/dotconf/dotconf-${VERSION}.tar.gz&lt;br /&gt;
with&lt;br /&gt;
 SRC_TGZ = http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&lt;br /&gt;
&lt;br /&gt;
=== further download errors ===&lt;br /&gt;
&lt;br /&gt;
rwhitby's suggestion:&lt;br /&gt;
&lt;br /&gt;
If you don't need that package which is failing for you, just move it to the nonworking directory and try again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sample build of [[Application:Doom]]==&lt;br /&gt;
&lt;br /&gt;
Now, go to [[Building DOOM with scratchbox2]] and follow the simple directions.&lt;br /&gt;
&lt;br /&gt;
==In Process Enhancements==&lt;br /&gt;
[[Extracting the PDK on Linux]]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=13273</id>
		<title>WebOS Internals PDK</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=13273"/>
		<updated>2011-03-01T19:14:57Z</updated>

		<summary type="html">&lt;p&gt;MetaView: /* download error files.opentts.org */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: SDL]]&lt;br /&gt;
Palm's binary sdk  the &amp;quot;Plugin Developer Kit&amp;quot; became available to all developers in March 2010.&lt;br /&gt;
&lt;br /&gt;
When the widk was developed, the Palm PDK didn't exist, and until Dec 2010, it was not possible to run the PDK in Linux.  If you would like to run the official Palm PDK, see [[PDK on Linux]] for directions.&lt;br /&gt;
&lt;br /&gt;
In addition to the PDK, webOS Internals has released a full &amp;quot;WIDK&amp;quot; (webOS Internals Development Kit) for you using Scratchbox2.  &lt;br /&gt;
&lt;br /&gt;
Less than 10% of developers in the webOS developer community use Linux variants. Among those 10% there are dozens of different linux distributions that people use. Palm, therefore has chosen to support only Mac and Windows platforms for their PDK.  Palm reccomends that Linux based developers use the webOS-internals WIDK instead.  &lt;br /&gt;
&lt;br /&gt;
We ''strongly'' urge the open-source homebrew community to standardize on this WIDK.   It uses the same underlying technologies, and is entirely open.  &lt;br /&gt;
&lt;br /&gt;
Scratchbox 2 is a cross-compilation engine, it can be used to create a highly flexible SDK.&lt;br /&gt;
&lt;br /&gt;
As installed below, the install process uses a script which extracts the required Palm provided files from a copy of webOS doctor, and  downloads from other sources, and builds a complete compilation environment automatically which can compile SDL and openGLES apps for webOS.  &lt;br /&gt;
&lt;br /&gt;
SB2 ''itself'' is totally distribution neutral but the webOS cross-compile environment is designed and tested on Ubuntu 9.10 32 bit. (At least one user in #webos-internals reports complete success running the cross compile environment in Ubuntu 9.10 64 bit after installing curl via apt-get.) See [[WebOS_Internals_PDK_on_Mandriva]] if you want to run it on Mandriva.  If you want to run the WIDK on other distributions and are willing to support that yourself and not ask webOS Internals any questions about it then please enjoy and if you succeed come back here and make a new article on how you did it.  Otherwise, use the recommended OS.&lt;br /&gt;
&lt;br /&gt;
The webOS Internals team ''strongly suggest'' apt-get install into the Ubuntu environment only for this purpose. The same installation of Sun Virtualbox which hosts the Palm SDK emulator can host an Ubuntu 9.10 server with very little effort on any operating system. &lt;br /&gt;
&lt;br /&gt;
Developers wanting to work in an open environment 'without' SB2 can consider using the [[PuffTheMagic NDK]].&lt;br /&gt;
&lt;br /&gt;
==SB2 Homepage==&lt;br /&gt;
[http://www.freedesktop.org/wiki/Software/sbox2 http://www.freedesktop.org/wiki/Software/sbox2]pdk&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
Scratchbox 2 is distributed under LGPL version 2.1, portions are under GPL version 2. Some minor stuff is under MIT style license.&lt;br /&gt;
&lt;br /&gt;
== Installation on Ubuntu for webOS PDK cross compiling ==&lt;br /&gt;
&lt;br /&gt;
If setting up in a Virtual Box instance, it is recommended that you first complete the openSSH config as described in the VirtualBox tips for Windows users to the right.  This is helpful even with a Linux host, as SSH into the PDK Virtual Machine will allow copy and paste of the commands listed below and reduce errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
There is an automated installer avaliable [http://forums.precentral.net/webos-internals/266139-webos-internals-automated-installers.html#post2718551 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; clear:right; width:30%&amp;quot;&amp;gt;{{Ubuntu_VM_notes_for_Windows_users}}&amp;lt;/div&amp;gt;&lt;br /&gt;
===Toolchain===&lt;br /&gt;
&lt;br /&gt;
===Prerequisites===&lt;br /&gt;
Your Ubuntu installation will need the following installed.  If you do not have them, run the command after the package name. You can test if they are found by just typing the command name.  If it says command not found, you need to install it.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|'''git''' || sudo apt-get install git-core&lt;br /&gt;
|-&lt;br /&gt;
|'''gcc''' || sudo apt-get install build-essential&lt;br /&gt;
|-&lt;br /&gt;
|'''curl''' || sudo apt-get install curl&lt;br /&gt;
|-&lt;br /&gt;
|'''unzip'''|| sudo apt-get install unzip&lt;br /&gt;
|-&lt;br /&gt;
|'''autoconf'''|| sudo apt-get install autoconf&lt;br /&gt;
|-&lt;br /&gt;
|'''subversion'''|| sudo apt-get install subversion&lt;br /&gt;
|-&lt;br /&gt;
|'''libtool'''|| sudo apt-get install libtool&lt;br /&gt;
|-&lt;br /&gt;
|'''wget'''|| sudo apt-get install wget&lt;br /&gt;
|-&lt;br /&gt;
|'''pkg-config'''|| sudo apt-get install pkg-config&lt;br /&gt;
|-&lt;br /&gt;
|'''gettext'''|| sudo apt-get install gettext&lt;br /&gt;
|-&lt;br /&gt;
|'''fakeroot'''|| sudo apt-get install fakeroot&lt;br /&gt;
|-&lt;br /&gt;
|'''javac'''|| sudo apt-get install sun-java6-jdk&lt;br /&gt;
|-&lt;br /&gt;
|'''ant'''|| sudo apt-get install ant&lt;br /&gt;
|-&lt;br /&gt;
|'''xsltproc'''|| sudo apt-get install xsltproc&lt;br /&gt;
|-&lt;br /&gt;
|'''intltool'''|| sudo apt-get install intltool&lt;br /&gt;
|-&lt;br /&gt;
|'''mkimage'''|| sudo apt-get install uboot-mkimage&lt;br /&gt;
|-&lt;br /&gt;
|'''lsdiff'''|| sudo apt-get install patchutils&lt;br /&gt;
|-&lt;br /&gt;
|'''flex'''|| sudo apt-get install flex&lt;br /&gt;
|-&lt;br /&gt;
|'''bison'''|| sudo apt-get install bison&lt;br /&gt;
|-&lt;br /&gt;
|'''libssl-dev'''|| sudo apt-get install libssl-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libz-dev'''|| sudo apt-get install libz-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libbz2-dev'''|| sudo apt-get install libbz2-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''xar'''|| sudo apt-get install xar&lt;br /&gt;
|-&lt;br /&gt;
|'''help2man'''|| sudo apt-get install help2man&lt;br /&gt;
|-&lt;br /&gt;
|'''texinfo'''|| sudo apt-get install texinfo&lt;br /&gt;
|-&lt;br /&gt;
|'''automake 1.10'''|| sudo apt-get install automake1.10&lt;br /&gt;
|-&lt;br /&gt;
|'''autopoint'''|| sudo apt-get install autopoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* it has been reported that sun-java6-jdk isn't necessary&lt;br /&gt;
&lt;br /&gt;
If you're uncertain at all, just cut and paste the following.  If they are already installed, they'll be skipped.  &lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install git-core build-essential curl unzip autoconf subversion libtool wget pkg-config gettext fakeroot ant xsltproc intltool uboot-mkimage patchutils flex bison libssl-dev libz-dev libbz2-dev xar help2man texinfo automake1.10 autopoint&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are a beginner with Ubuntu Linux Distribution, you should update all the packages on your system to avoid problems when you will compile.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' If you're using Ubuntu and &amp;lt;code&amp;gt;xar&amp;lt;/code&amp;gt; cannot be installed with &amp;lt;code&amp;gt;sudo apt-get install xar&amp;lt;/code&amp;gt;, then you have to download two &amp;lt;code&amp;gt;.deb&amp;lt;/code&amp;gt;-files manually and install them (in the order they are listed):&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/libxar1 libxar1]&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/xar xar]&lt;br /&gt;
After that execute the above command again.&lt;br /&gt;
&lt;br /&gt;
Use these 2 command line :&amp;lt;BR&amp;gt;&lt;br /&gt;
Update repositories   :&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
And next, update the packages :&lt;br /&gt;
 sudo aptitude safe-upgrade&lt;br /&gt;
&lt;br /&gt;
If you're on a 64-bit system, you will also need to install the ia32-libs package.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The ''make toolchain'' command and later steps will download approximately a half-gig of tools and sources from various locations.  Do not start this if you do not have time for a large download.  Additionally, if you already have downloaded a copy of the correct version of the WebOS doctor, you can reduce the download time by copying the doctor file into cross-compile/doctors/ with the correct name.  This will cause the appropriate command to skip that download.  Note that codesourcery rate limts downloads and at a minimum this process will take 10 to 15 minutes irrespective of your connection speed. &lt;br /&gt;
&lt;br /&gt;
====Start setup====&lt;br /&gt;
Create a preware folder, copy the cross-compile tools into it (if you have not installed git, apt-get install git-core), and use a make script to begin the set up of the compilation toolchain. &lt;br /&gt;
&lt;br /&gt;
 sudo mkdir -p /srv/preware&lt;br /&gt;
 cd /srv/preware&lt;br /&gt;
 sudo chmod 777 .&lt;br /&gt;
 git clone git://git.webos-internals.org/preware/cross-compile.git&lt;br /&gt;
 cd cross-compile&lt;br /&gt;
 make toolchain&lt;br /&gt;
&lt;br /&gt;
If errors occur, browse the [http://git.webos-internals.org/?p=preware/cross-compile.git;a=shortlog repository online] and checkout earlier commits until you get something that gets through &amp;quot;make toolchain&amp;quot; and the later &amp;quot;make stage&amp;quot; commands like so:&lt;br /&gt;
&lt;br /&gt;
 git checkout &amp;lt;commit-ish&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Fix mmap errors====&lt;br /&gt;
The following commands appear redundant.  They are not.  The install this fixes your mmap config to fix an mmap: permission denied error, but we don't need the package itself. (Do each command separately with cut and paste).&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install qemu-arm-static&lt;br /&gt;
 sudo apt-get remove qemu-arm-static&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;span style=&amp;quot;font-size:150%&amp;quot;&amp;gt;OR&amp;lt;/span&amp;gt; As a workaround, if this package is not available, &lt;br /&gt;
::: the following commands can be executed in a root shell (sudo -s) to fix the mmap configuration to enable qemu-arm to work.&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;vm.mmap_min_addr = 4096&amp;quot; &amp;gt; /etc/sysctl.d/mmap_min_addr.conf&lt;br /&gt;
 /etc/init.d/procps restart&lt;br /&gt;
&lt;br /&gt;
(note that the value should not be &amp;quot;0&amp;quot;. 4096 is chosen to avoid null pointer attacks.)&lt;br /&gt;
&lt;br /&gt;
====Verify sh shell====&lt;br /&gt;
On Ubuntu /bin/sh is a symbolic link to dash.  This will cause errors with the make stage command below, as some of the scripts assume bash.  Run the following command to see what shell sh is linked to.&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
If the result is a link to dash:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-06 23:55 /bin/sh -&amp;gt; dash&lt;br /&gt;
&lt;br /&gt;
You will want to correct it with the following:&lt;br /&gt;
&lt;br /&gt;
  sudo dpkg-reconfigure dash&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to &amp;quot;Install dash as /bin/sh?&amp;quot;.  Select &amp;quot;&amp;lt;No&amp;gt;&amp;quot; and bash will be used.  Rerun the command to verify:&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
You should now see:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-09 21:12 /bin/sh -&amp;gt; bash&lt;br /&gt;
&lt;br /&gt;
====Setup Scratchbox====&lt;br /&gt;
Now, use apt-get to setup scratchbox...&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install scratchbox2 qemu-kvm-extras (in Debian install qemu-user and qemu-system instead of qemu-kvm-extras)&lt;br /&gt;
&lt;br /&gt;
...and set it up for compiling for webOS. &lt;br /&gt;
&lt;br /&gt;
 cd /srv/preware/cross-compile/toolchain/arm-2007q3/arm-none-linux-gnueabi/libc&lt;br /&gt;
 PATH=/srv/preware/cross-compile/toolchain/arm-2007q3/bin:${PATH} sb2-init -c /usr/bin/qemu-arm armv7 arm-none-linux-gnueabi-gcc&lt;br /&gt;
 cd /srv/preware/cross-compile&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
 make stage&lt;br /&gt;
&lt;br /&gt;
Once this setup is complete, compiling sdl apps for webOS is very simple.&lt;br /&gt;
&lt;br /&gt;
==Verified installed clean list==&lt;br /&gt;
&lt;br /&gt;
If you have successfully built the WIDK from scratch, with NO problems, feel free to add your information to this list.  This will help us assess what distributions and versions it is fully compatible with.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''IRC name'''&lt;br /&gt;
|'''Linux Distribution'''&lt;br /&gt;
|'''Version'''&lt;br /&gt;
|'''Date'''&lt;br /&gt;
|'''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
|Scoutcamper&lt;br /&gt;
|Ubuntu&lt;br /&gt;
|9.04,9.10,10.04,10.10&lt;br /&gt;
|10-18-10&lt;br /&gt;
|Works Great!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It just doesn't work tried for over a week, with fresh Ubuntu 10.4 inside and outside of virtual box, fails on libtool for common/fuse/. Tried -j4 option with make stage, tried make staging-armv7. Also installed automake-1.9 after seeing complaints about that. -- please sign your comments&lt;br /&gt;
&lt;br /&gt;
==Errors during make stage ==&lt;br /&gt;
&lt;br /&gt;
===automake1.10===&lt;br /&gt;
&lt;br /&gt;
If you see the error below, you need the latest automake (1.10)&lt;br /&gt;
&lt;br /&gt;
 /usr/share/automake-1.9/am/depend2.am: am__fastdepOBJC does not appear in AM_CONDITIONAL&lt;br /&gt;
 configure.in:88: installing `./config.guess'&lt;br /&gt;
 configure.in:88: installing `./config.sub'&lt;br /&gt;
 Makefile.am: installing `./INSTALL'&lt;br /&gt;
 autoreconf2.50: automake failed with exit status: 1&lt;br /&gt;
&lt;br /&gt;
Install automake1.10 and it should work (according to [http://old.nabble.com/AC_PROG_OBJC-and-automake-1.9-td22434760.html this page])&lt;br /&gt;
&lt;br /&gt;
===Libtool===&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -Wall -g -O2 -MT libdotconf_la-dotconf.lo -MD -MP -MF .deps/libdotconf_la-dotconf.Tpo -c -o libdotconf_la-dotconf.lo `test -f 'dotconf.c' || echo './'`dotconf.c&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6b, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6b&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [libdotconf_la-dotconf.lo] Error 63&lt;br /&gt;
 make[5]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 make[4]: *** [install-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6'&lt;br /&gt;
 make[3]: *** [build/armv6.built] Error 2&lt;br /&gt;
 make[3]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf'&lt;br /&gt;
 make[2]: *** [build_common/libdotconf] Error 2&lt;br /&gt;
 make[2]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make[1]: *** [staging-armv6] Error 2&lt;br /&gt;
 make[1]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make: *** [stage] Error 2&lt;br /&gt;
&lt;br /&gt;
Confirmed by 3 people. Fix this by either (your choice)&lt;br /&gt;
*upgrading to Ubuntu 10.04 or newer (the WIDK now relies on a slightly newer version of libtool that's not in 9.10 or earlier)&lt;br /&gt;
*updating libtool to 2.2.6b-2 (backported to 9.10, see available downloads on http://linuxappfinder.com/package/libtool#ubuntu_karmicpartner)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you're getting an error where sb2-init gives you the following output:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Running /usr/bin/sb2-build-libtool failed&lt;br /&gt;
 You can run this manually later, otherwise your&lt;br /&gt;
 sb2 environment is correctly setup and ready to use&lt;br /&gt;
&lt;br /&gt;
You need to upgrade qemu. Alternatively, if your sb2-init output fails with a different output, like this:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sb2-init completed successfully, have fun!&lt;br /&gt;
&lt;br /&gt;
Then you need to upgrade scratchbox, too (install 2.0 instead of 1.99).&lt;br /&gt;
&lt;br /&gt;
=== ecore ===&lt;br /&gt;
*TRUE and FALSE are not defined:&lt;br /&gt;
Manually add the definition:&lt;br /&gt;
&lt;br /&gt;
 #ifndef TRUE&lt;br /&gt;
 # define TRUE 1&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
 #ifndef FALSE&lt;br /&gt;
 # define FALSE 0&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; could not be found:&lt;br /&gt;
**Open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/dev-e/ecore/build/src/configure.ac&amp;lt;/code&amp;gt; and search for the line with: &amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; (in my case line 1437) and replace it with &amp;lt;code&amp;gt;po/Makefile.in&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /bin/sh errors ===&lt;br /&gt;
If you are getting a &amp;quot;bad fd number&amp;quot; or other /bin/sh error, make sure your /bin/sh points to bash, not another shell (such as dash.)&lt;br /&gt;
&lt;br /&gt;
Go back through the Verify sh shell section above to correct.&lt;br /&gt;
&lt;br /&gt;
=== fuse ===&lt;br /&gt;
If you get an error like this (happened to me on Ubuntu 10.10):&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
 if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../include  -I../include -DFUSERMOUNT_DIR=\&amp;quot;/usr/local/bin\&amp;quot; -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=26   -Wall -W -Wno-sign-compare -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -g -O2 -fno-strict-aliasing -MT fuse.lo -MD -MP -MF &amp;quot;.deps/fuse.Tpo&amp;quot; -c -o fuse.lo fuse.c; \&lt;br /&gt;
 	then mv -f &amp;quot;.deps/fuse.Tpo&amp;quot; &amp;quot;.deps/fuse.Plo&amp;quot;; else rm -f &amp;quot;.deps/fuse.Tpo&amp;quot;; exit 1; fi&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.1a Debian 1.9+20051221-1, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6b.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.1a Debian 1.9+20051221-1&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [fuse.lo] Error 1&lt;br /&gt;
 make[5]: Leaving direcotry '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
&lt;br /&gt;
Then open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/common/fuse/build/src/ltmain.sh&amp;lt;/code&amp;gt; and search for &amp;lt;code&amp;gt;exit $EXIT_MISMATCH&amp;lt;/code&amp;gt; (in my case line 1028) and comment it out by placing a &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; before this line. I know that's a dirty fix, but it worked for me. Note that you will see the same error messages as before, but it won't stop there.&lt;br /&gt;
&lt;br /&gt;
=== download error files.opentts.org ===&lt;br /&gt;
&lt;br /&gt;
maybe we could replace it by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 curl -f -R -L -o downloads/libdotconf-1.3.tar.gz.tmp http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
edit&lt;br /&gt;
&lt;br /&gt;
/srv/preware/cross-compile/packages/common/libdotconf/Makefile&lt;br /&gt;
&lt;br /&gt;
and replace line&lt;br /&gt;
 SRC_TGZ = http://files.opentts.org/dotconf/dotconf-${VERSION}.tar.gz&lt;br /&gt;
with&lt;br /&gt;
 SRC_TGZ = http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&lt;br /&gt;
&lt;br /&gt;
==Sample build of [[Application:Doom]]==&lt;br /&gt;
&lt;br /&gt;
Now, go to [[Building DOOM with scratchbox2]] and follow the simple directions.&lt;br /&gt;
&lt;br /&gt;
==In Process Enhancements==&lt;br /&gt;
[[Extracting the PDK on Linux]]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=13271</id>
		<title>WebOS Internals PDK</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=13271"/>
		<updated>2011-03-01T18:55:37Z</updated>

		<summary type="html">&lt;p&gt;MetaView: /* download error files.opentts.org */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: SDL]]&lt;br /&gt;
Palm's binary sdk  the &amp;quot;Plugin Developer Kit&amp;quot; became available to all developers in March 2010.&lt;br /&gt;
&lt;br /&gt;
When the widk was developed, the Palm PDK didn't exist, and until Dec 2010, it was not possible to run the PDK in Linux.  If you would like to run the official Palm PDK, see [[PDK on Linux]] for directions.&lt;br /&gt;
&lt;br /&gt;
In addition to the PDK, webOS Internals has released a full &amp;quot;WIDK&amp;quot; (webOS Internals Development Kit) for you using Scratchbox2.  &lt;br /&gt;
&lt;br /&gt;
Less than 10% of developers in the webOS developer community use Linux variants. Among those 10% there are dozens of different linux distributions that people use. Palm, therefore has chosen to support only Mac and Windows platforms for their PDK.  Palm reccomends that Linux based developers use the webOS-internals WIDK instead.  &lt;br /&gt;
&lt;br /&gt;
We ''strongly'' urge the open-source homebrew community to standardize on this WIDK.   It uses the same underlying technologies, and is entirely open.  &lt;br /&gt;
&lt;br /&gt;
Scratchbox 2 is a cross-compilation engine, it can be used to create a highly flexible SDK.&lt;br /&gt;
&lt;br /&gt;
As installed below, the install process uses a script which extracts the required Palm provided files from a copy of webOS doctor, and  downloads from other sources, and builds a complete compilation environment automatically which can compile SDL and openGLES apps for webOS.  &lt;br /&gt;
&lt;br /&gt;
SB2 ''itself'' is totally distribution neutral but the webOS cross-compile environment is designed and tested on Ubuntu 9.10 32 bit. (At least one user in #webos-internals reports complete success running the cross compile environment in Ubuntu 9.10 64 bit after installing curl via apt-get.) See [[WebOS_Internals_PDK_on_Mandriva]] if you want to run it on Mandriva.  If you want to run the WIDK on other distributions and are willing to support that yourself and not ask webOS Internals any questions about it then please enjoy and if you succeed come back here and make a new article on how you did it.  Otherwise, use the recommended OS.&lt;br /&gt;
&lt;br /&gt;
The webOS Internals team ''strongly suggest'' apt-get install into the Ubuntu environment only for this purpose. The same installation of Sun Virtualbox which hosts the Palm SDK emulator can host an Ubuntu 9.10 server with very little effort on any operating system. &lt;br /&gt;
&lt;br /&gt;
Developers wanting to work in an open environment 'without' SB2 can consider using the [[PuffTheMagic NDK]].&lt;br /&gt;
&lt;br /&gt;
==SB2 Homepage==&lt;br /&gt;
[http://www.freedesktop.org/wiki/Software/sbox2 http://www.freedesktop.org/wiki/Software/sbox2]pdk&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
Scratchbox 2 is distributed under LGPL version 2.1, portions are under GPL version 2. Some minor stuff is under MIT style license.&lt;br /&gt;
&lt;br /&gt;
== Installation on Ubuntu for webOS PDK cross compiling ==&lt;br /&gt;
&lt;br /&gt;
If setting up in a Virtual Box instance, it is recommended that you first complete the openSSH config as described in the VirtualBox tips for Windows users to the right.  This is helpful even with a Linux host, as SSH into the PDK Virtual Machine will allow copy and paste of the commands listed below and reduce errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
There is an automated installer avaliable [http://forums.precentral.net/webos-internals/266139-webos-internals-automated-installers.html#post2718551 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; clear:right; width:30%&amp;quot;&amp;gt;{{Ubuntu_VM_notes_for_Windows_users}}&amp;lt;/div&amp;gt;&lt;br /&gt;
===Toolchain===&lt;br /&gt;
&lt;br /&gt;
===Prerequisites===&lt;br /&gt;
Your Ubuntu installation will need the following installed.  If you do not have them, run the command after the package name. You can test if they are found by just typing the command name.  If it says command not found, you need to install it.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|'''git''' || sudo apt-get install git-core&lt;br /&gt;
|-&lt;br /&gt;
|'''gcc''' || sudo apt-get install build-essential&lt;br /&gt;
|-&lt;br /&gt;
|'''curl''' || sudo apt-get install curl&lt;br /&gt;
|-&lt;br /&gt;
|'''unzip'''|| sudo apt-get install unzip&lt;br /&gt;
|-&lt;br /&gt;
|'''autoconf'''|| sudo apt-get install autoconf&lt;br /&gt;
|-&lt;br /&gt;
|'''subversion'''|| sudo apt-get install subversion&lt;br /&gt;
|-&lt;br /&gt;
|'''libtool'''|| sudo apt-get install libtool&lt;br /&gt;
|-&lt;br /&gt;
|'''wget'''|| sudo apt-get install wget&lt;br /&gt;
|-&lt;br /&gt;
|'''pkg-config'''|| sudo apt-get install pkg-config&lt;br /&gt;
|-&lt;br /&gt;
|'''gettext'''|| sudo apt-get install gettext&lt;br /&gt;
|-&lt;br /&gt;
|'''fakeroot'''|| sudo apt-get install fakeroot&lt;br /&gt;
|-&lt;br /&gt;
|'''javac'''|| sudo apt-get install sun-java6-jdk&lt;br /&gt;
|-&lt;br /&gt;
|'''ant'''|| sudo apt-get install ant&lt;br /&gt;
|-&lt;br /&gt;
|'''xsltproc'''|| sudo apt-get install xsltproc&lt;br /&gt;
|-&lt;br /&gt;
|'''intltool'''|| sudo apt-get install intltool&lt;br /&gt;
|-&lt;br /&gt;
|'''mkimage'''|| sudo apt-get install uboot-mkimage&lt;br /&gt;
|-&lt;br /&gt;
|'''lsdiff'''|| sudo apt-get install patchutils&lt;br /&gt;
|-&lt;br /&gt;
|'''flex'''|| sudo apt-get install flex&lt;br /&gt;
|-&lt;br /&gt;
|'''bison'''|| sudo apt-get install bison&lt;br /&gt;
|-&lt;br /&gt;
|'''libssl-dev'''|| sudo apt-get install libssl-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libz-dev'''|| sudo apt-get install libz-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libbz2-dev'''|| sudo apt-get install libbz2-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''xar'''|| sudo apt-get install xar&lt;br /&gt;
|-&lt;br /&gt;
|'''help2man'''|| sudo apt-get install help2man&lt;br /&gt;
|-&lt;br /&gt;
|'''texinfo'''|| sudo apt-get install texinfo&lt;br /&gt;
|-&lt;br /&gt;
|'''automake 1.10'''|| sudo apt-get install automake1.10&lt;br /&gt;
|-&lt;br /&gt;
|'''autopoint'''|| sudo apt-get install autopoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* it has been reported that sun-java6-jdk isn't necessary&lt;br /&gt;
&lt;br /&gt;
If you're uncertain at all, just cut and paste the following.  If they are already installed, they'll be skipped.  &lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install git-core build-essential curl unzip autoconf subversion libtool wget pkg-config gettext fakeroot ant xsltproc intltool uboot-mkimage patchutils flex bison libssl-dev libz-dev libbz2-dev xar help2man texinfo automake1.10 autopoint&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are a beginner with Ubuntu Linux Distribution, you should update all the packages on your system to avoid problems when you will compile.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' If you're using Ubuntu and &amp;lt;code&amp;gt;xar&amp;lt;/code&amp;gt; cannot be installed with &amp;lt;code&amp;gt;sudo apt-get install xar&amp;lt;/code&amp;gt;, then you have to download two &amp;lt;code&amp;gt;.deb&amp;lt;/code&amp;gt;-files manually and install them (in the order they are listed):&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/libxar1 libxar1]&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/xar xar]&lt;br /&gt;
After that execute the above command again.&lt;br /&gt;
&lt;br /&gt;
Use these 2 command line :&amp;lt;BR&amp;gt;&lt;br /&gt;
Update repositories   :&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
And next, update the packages :&lt;br /&gt;
 sudo aptitude safe-upgrade&lt;br /&gt;
&lt;br /&gt;
If you're on a 64-bit system, you will also need to install the ia32-libs package.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The ''make toolchain'' command and later steps will download approximately a half-gig of tools and sources from various locations.  Do not start this if you do not have time for a large download.  Additionally, if you already have downloaded a copy of the correct version of the WebOS doctor, you can reduce the download time by copying the doctor file into cross-compile/doctors/ with the correct name.  This will cause the appropriate command to skip that download.  Note that codesourcery rate limts downloads and at a minimum this process will take 10 to 15 minutes irrespective of your connection speed. &lt;br /&gt;
&lt;br /&gt;
====Start setup====&lt;br /&gt;
Create a preware folder, copy the cross-compile tools into it (if you have not installed git, apt-get install git-core), and use a make script to begin the set up of the compilation toolchain. &lt;br /&gt;
&lt;br /&gt;
 sudo mkdir -p /srv/preware&lt;br /&gt;
 cd /srv/preware&lt;br /&gt;
 sudo chmod 777 .&lt;br /&gt;
 git clone git://git.webos-internals.org/preware/cross-compile.git&lt;br /&gt;
 cd cross-compile&lt;br /&gt;
 make toolchain&lt;br /&gt;
&lt;br /&gt;
If errors occur, browse the [http://git.webos-internals.org/?p=preware/cross-compile.git;a=shortlog repository online] and checkout earlier commits until you get something that gets through &amp;quot;make toolchain&amp;quot; and the later &amp;quot;make stage&amp;quot; commands like so:&lt;br /&gt;
&lt;br /&gt;
 git checkout &amp;lt;commit-ish&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Fix mmap errors====&lt;br /&gt;
The following commands appear redundant.  They are not.  The install this fixes your mmap config to fix an mmap: permission denied error, but we don't need the package itself. (Do each command separately with cut and paste).&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install qemu-arm-static&lt;br /&gt;
 sudo apt-get remove qemu-arm-static&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;span style=&amp;quot;font-size:150%&amp;quot;&amp;gt;OR&amp;lt;/span&amp;gt; As a workaround, if this package is not available, &lt;br /&gt;
::: the following commands can be executed in a root shell (sudo -s) to fix the mmap configuration to enable qemu-arm to work.&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;vm.mmap_min_addr = 4096&amp;quot; &amp;gt; /etc/sysctl.d/mmap_min_addr.conf&lt;br /&gt;
 /etc/init.d/procps restart&lt;br /&gt;
&lt;br /&gt;
(note that the value should not be &amp;quot;0&amp;quot;. 4096 is chosen to avoid null pointer attacks.)&lt;br /&gt;
&lt;br /&gt;
====Verify sh shell====&lt;br /&gt;
On Ubuntu /bin/sh is a symbolic link to dash.  This will cause errors with the make stage command below, as some of the scripts assume bash.  Run the following command to see what shell sh is linked to.&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
If the result is a link to dash:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-06 23:55 /bin/sh -&amp;gt; dash&lt;br /&gt;
&lt;br /&gt;
You will want to correct it with the following:&lt;br /&gt;
&lt;br /&gt;
  sudo dpkg-reconfigure dash&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to &amp;quot;Install dash as /bin/sh?&amp;quot;.  Select &amp;quot;&amp;lt;No&amp;gt;&amp;quot; and bash will be used.  Rerun the command to verify:&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
You should now see:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-09 21:12 /bin/sh -&amp;gt; bash&lt;br /&gt;
&lt;br /&gt;
====Setup Scratchbox====&lt;br /&gt;
Now, use apt-get to setup scratchbox...&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install scratchbox2 qemu-kvm-extras (in Debian install qemu-user and qemu-system instead of qemu-kvm-extras)&lt;br /&gt;
&lt;br /&gt;
...and set it up for compiling for webOS. &lt;br /&gt;
&lt;br /&gt;
 cd /srv/preware/cross-compile/toolchain/arm-2007q3/arm-none-linux-gnueabi/libc&lt;br /&gt;
 PATH=/srv/preware/cross-compile/toolchain/arm-2007q3/bin:${PATH} sb2-init -c /usr/bin/qemu-arm armv7 arm-none-linux-gnueabi-gcc&lt;br /&gt;
 cd /srv/preware/cross-compile&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
 make stage&lt;br /&gt;
&lt;br /&gt;
Once this setup is complete, compiling sdl apps for webOS is very simple.&lt;br /&gt;
&lt;br /&gt;
==Verified installed clean list==&lt;br /&gt;
&lt;br /&gt;
If you have successfully built the WIDK from scratch, with NO problems, feel free to add your information to this list.  This will help us assess what distributions and versions it is fully compatible with.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''IRC name'''&lt;br /&gt;
|'''Linux Distribution'''&lt;br /&gt;
|'''Version'''&lt;br /&gt;
|'''Date'''&lt;br /&gt;
|'''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
|Scoutcamper&lt;br /&gt;
|Ubuntu&lt;br /&gt;
|9.04,9.10,10.04,10.10&lt;br /&gt;
|10-18-10&lt;br /&gt;
|Works Great!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It just doesn't work tried for over a week, with fresh Ubuntu 10.4 inside and outside of virtual box, fails on libtool for common/fuse/. Tried -j4 option with make stage, tried make staging-armv7. Also installed automake-1.9 after seeing complaints about that. -- please sign your comments&lt;br /&gt;
&lt;br /&gt;
==Errors during make stage ==&lt;br /&gt;
&lt;br /&gt;
===automake1.10===&lt;br /&gt;
&lt;br /&gt;
If you see the error below, you need the latest automake (1.10)&lt;br /&gt;
&lt;br /&gt;
 /usr/share/automake-1.9/am/depend2.am: am__fastdepOBJC does not appear in AM_CONDITIONAL&lt;br /&gt;
 configure.in:88: installing `./config.guess'&lt;br /&gt;
 configure.in:88: installing `./config.sub'&lt;br /&gt;
 Makefile.am: installing `./INSTALL'&lt;br /&gt;
 autoreconf2.50: automake failed with exit status: 1&lt;br /&gt;
&lt;br /&gt;
Install automake1.10 and it should work (according to [http://old.nabble.com/AC_PROG_OBJC-and-automake-1.9-td22434760.html this page])&lt;br /&gt;
&lt;br /&gt;
===Libtool===&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -Wall -g -O2 -MT libdotconf_la-dotconf.lo -MD -MP -MF .deps/libdotconf_la-dotconf.Tpo -c -o libdotconf_la-dotconf.lo `test -f 'dotconf.c' || echo './'`dotconf.c&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6b, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6b&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [libdotconf_la-dotconf.lo] Error 63&lt;br /&gt;
 make[5]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 make[4]: *** [install-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6'&lt;br /&gt;
 make[3]: *** [build/armv6.built] Error 2&lt;br /&gt;
 make[3]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf'&lt;br /&gt;
 make[2]: *** [build_common/libdotconf] Error 2&lt;br /&gt;
 make[2]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make[1]: *** [staging-armv6] Error 2&lt;br /&gt;
 make[1]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make: *** [stage] Error 2&lt;br /&gt;
&lt;br /&gt;
Confirmed by 3 people. Fix this by either (your choice)&lt;br /&gt;
*upgrading to Ubuntu 10.04 or newer (the WIDK now relies on a slightly newer version of libtool that's not in 9.10 or earlier)&lt;br /&gt;
*updating libtool to 2.2.6b-2 (backported to 9.10, see available downloads on http://linuxappfinder.com/package/libtool#ubuntu_karmicpartner)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you're getting an error where sb2-init gives you the following output:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Running /usr/bin/sb2-build-libtool failed&lt;br /&gt;
 You can run this manually later, otherwise your&lt;br /&gt;
 sb2 environment is correctly setup and ready to use&lt;br /&gt;
&lt;br /&gt;
You need to upgrade qemu. Alternatively, if your sb2-init output fails with a different output, like this:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sb2-init completed successfully, have fun!&lt;br /&gt;
&lt;br /&gt;
Then you need to upgrade scratchbox, too (install 2.0 instead of 1.99).&lt;br /&gt;
&lt;br /&gt;
=== ecore ===&lt;br /&gt;
*TRUE and FALSE are not defined:&lt;br /&gt;
Manually add the definition:&lt;br /&gt;
&lt;br /&gt;
 #ifndef TRUE&lt;br /&gt;
 # define TRUE 1&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
 #ifndef FALSE&lt;br /&gt;
 # define FALSE 0&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; could not be found:&lt;br /&gt;
**Open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/dev-e/ecore/build/src/configure.ac&amp;lt;/code&amp;gt; and search for the line with: &amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; (in my case line 1437) and replace it with &amp;lt;code&amp;gt;po/Makefile.in&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /bin/sh errors ===&lt;br /&gt;
If you are getting a &amp;quot;bad fd number&amp;quot; or other /bin/sh error, make sure your /bin/sh points to bash, not another shell (such as dash.)&lt;br /&gt;
&lt;br /&gt;
Go back through the Verify sh shell section above to correct.&lt;br /&gt;
&lt;br /&gt;
=== fuse ===&lt;br /&gt;
If you get an error like this (happened to me on Ubuntu 10.10):&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
 if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../include  -I../include -DFUSERMOUNT_DIR=\&amp;quot;/usr/local/bin\&amp;quot; -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=26   -Wall -W -Wno-sign-compare -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -g -O2 -fno-strict-aliasing -MT fuse.lo -MD -MP -MF &amp;quot;.deps/fuse.Tpo&amp;quot; -c -o fuse.lo fuse.c; \&lt;br /&gt;
 	then mv -f &amp;quot;.deps/fuse.Tpo&amp;quot; &amp;quot;.deps/fuse.Plo&amp;quot;; else rm -f &amp;quot;.deps/fuse.Tpo&amp;quot;; exit 1; fi&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.1a Debian 1.9+20051221-1, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6b.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.1a Debian 1.9+20051221-1&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [fuse.lo] Error 1&lt;br /&gt;
 make[5]: Leaving direcotry '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
&lt;br /&gt;
Then open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/common/fuse/build/src/ltmain.sh&amp;lt;/code&amp;gt; and search for &amp;lt;code&amp;gt;exit $EXIT_MISMATCH&amp;lt;/code&amp;gt; (in my case line 1028) and comment it out by placing a &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; before this line. I know that's a dirty fix, but it worked for me. Note that you will see the same error messages as before, but it won't stop there.&lt;br /&gt;
&lt;br /&gt;
=== download error files.opentts.org ===&lt;br /&gt;
&lt;br /&gt;
maybe we could replace it by&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -f -R -L -o downloads/libdotconf-1.3.tar.gz.tmp http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
==Sample build of [[Application:Doom]]==&lt;br /&gt;
&lt;br /&gt;
Now, go to [[Building DOOM with scratchbox2]] and follow the simple directions.&lt;br /&gt;
&lt;br /&gt;
==In Process Enhancements==&lt;br /&gt;
[[Extracting the PDK on Linux]]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=13269</id>
		<title>WebOS Internals PDK</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=WebOS_Internals_PDK&amp;diff=13269"/>
		<updated>2011-03-01T18:53:02Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: SDL]]&lt;br /&gt;
Palm's binary sdk  the &amp;quot;Plugin Developer Kit&amp;quot; became available to all developers in March 2010.&lt;br /&gt;
&lt;br /&gt;
When the widk was developed, the Palm PDK didn't exist, and until Dec 2010, it was not possible to run the PDK in Linux.  If you would like to run the official Palm PDK, see [[PDK on Linux]] for directions.&lt;br /&gt;
&lt;br /&gt;
In addition to the PDK, webOS Internals has released a full &amp;quot;WIDK&amp;quot; (webOS Internals Development Kit) for you using Scratchbox2.  &lt;br /&gt;
&lt;br /&gt;
Less than 10% of developers in the webOS developer community use Linux variants. Among those 10% there are dozens of different linux distributions that people use. Palm, therefore has chosen to support only Mac and Windows platforms for their PDK.  Palm reccomends that Linux based developers use the webOS-internals WIDK instead.  &lt;br /&gt;
&lt;br /&gt;
We ''strongly'' urge the open-source homebrew community to standardize on this WIDK.   It uses the same underlying technologies, and is entirely open.  &lt;br /&gt;
&lt;br /&gt;
Scratchbox 2 is a cross-compilation engine, it can be used to create a highly flexible SDK.&lt;br /&gt;
&lt;br /&gt;
As installed below, the install process uses a script which extracts the required Palm provided files from a copy of webOS doctor, and  downloads from other sources, and builds a complete compilation environment automatically which can compile SDL and openGLES apps for webOS.  &lt;br /&gt;
&lt;br /&gt;
SB2 ''itself'' is totally distribution neutral but the webOS cross-compile environment is designed and tested on Ubuntu 9.10 32 bit. (At least one user in #webos-internals reports complete success running the cross compile environment in Ubuntu 9.10 64 bit after installing curl via apt-get.) See [[WebOS_Internals_PDK_on_Mandriva]] if you want to run it on Mandriva.  If you want to run the WIDK on other distributions and are willing to support that yourself and not ask webOS Internals any questions about it then please enjoy and if you succeed come back here and make a new article on how you did it.  Otherwise, use the recommended OS.&lt;br /&gt;
&lt;br /&gt;
The webOS Internals team ''strongly suggest'' apt-get install into the Ubuntu environment only for this purpose. The same installation of Sun Virtualbox which hosts the Palm SDK emulator can host an Ubuntu 9.10 server with very little effort on any operating system. &lt;br /&gt;
&lt;br /&gt;
Developers wanting to work in an open environment 'without' SB2 can consider using the [[PuffTheMagic NDK]].&lt;br /&gt;
&lt;br /&gt;
==SB2 Homepage==&lt;br /&gt;
[http://www.freedesktop.org/wiki/Software/sbox2 http://www.freedesktop.org/wiki/Software/sbox2]pdk&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
Scratchbox 2 is distributed under LGPL version 2.1, portions are under GPL version 2. Some minor stuff is under MIT style license.&lt;br /&gt;
&lt;br /&gt;
== Installation on Ubuntu for webOS PDK cross compiling ==&lt;br /&gt;
&lt;br /&gt;
If setting up in a Virtual Box instance, it is recommended that you first complete the openSSH config as described in the VirtualBox tips for Windows users to the right.  This is helpful even with a Linux host, as SSH into the PDK Virtual Machine will allow copy and paste of the commands listed below and reduce errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
There is an automated installer avaliable [http://forums.precentral.net/webos-internals/266139-webos-internals-automated-installers.html#post2718551 here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; clear:right; width:30%&amp;quot;&amp;gt;{{Ubuntu_VM_notes_for_Windows_users}}&amp;lt;/div&amp;gt;&lt;br /&gt;
===Toolchain===&lt;br /&gt;
&lt;br /&gt;
===Prerequisites===&lt;br /&gt;
Your Ubuntu installation will need the following installed.  If you do not have them, run the command after the package name. You can test if they are found by just typing the command name.  If it says command not found, you need to install it.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|'''git''' || sudo apt-get install git-core&lt;br /&gt;
|-&lt;br /&gt;
|'''gcc''' || sudo apt-get install build-essential&lt;br /&gt;
|-&lt;br /&gt;
|'''curl''' || sudo apt-get install curl&lt;br /&gt;
|-&lt;br /&gt;
|'''unzip'''|| sudo apt-get install unzip&lt;br /&gt;
|-&lt;br /&gt;
|'''autoconf'''|| sudo apt-get install autoconf&lt;br /&gt;
|-&lt;br /&gt;
|'''subversion'''|| sudo apt-get install subversion&lt;br /&gt;
|-&lt;br /&gt;
|'''libtool'''|| sudo apt-get install libtool&lt;br /&gt;
|-&lt;br /&gt;
|'''wget'''|| sudo apt-get install wget&lt;br /&gt;
|-&lt;br /&gt;
|'''pkg-config'''|| sudo apt-get install pkg-config&lt;br /&gt;
|-&lt;br /&gt;
|'''gettext'''|| sudo apt-get install gettext&lt;br /&gt;
|-&lt;br /&gt;
|'''fakeroot'''|| sudo apt-get install fakeroot&lt;br /&gt;
|-&lt;br /&gt;
|'''javac'''|| sudo apt-get install sun-java6-jdk&lt;br /&gt;
|-&lt;br /&gt;
|'''ant'''|| sudo apt-get install ant&lt;br /&gt;
|-&lt;br /&gt;
|'''xsltproc'''|| sudo apt-get install xsltproc&lt;br /&gt;
|-&lt;br /&gt;
|'''intltool'''|| sudo apt-get install intltool&lt;br /&gt;
|-&lt;br /&gt;
|'''mkimage'''|| sudo apt-get install uboot-mkimage&lt;br /&gt;
|-&lt;br /&gt;
|'''lsdiff'''|| sudo apt-get install patchutils&lt;br /&gt;
|-&lt;br /&gt;
|'''flex'''|| sudo apt-get install flex&lt;br /&gt;
|-&lt;br /&gt;
|'''bison'''|| sudo apt-get install bison&lt;br /&gt;
|-&lt;br /&gt;
|'''libssl-dev'''|| sudo apt-get install libssl-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libz-dev'''|| sudo apt-get install libz-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''libbz2-dev'''|| sudo apt-get install libbz2-dev&lt;br /&gt;
|-&lt;br /&gt;
|'''xar'''|| sudo apt-get install xar&lt;br /&gt;
|-&lt;br /&gt;
|'''help2man'''|| sudo apt-get install help2man&lt;br /&gt;
|-&lt;br /&gt;
|'''texinfo'''|| sudo apt-get install texinfo&lt;br /&gt;
|-&lt;br /&gt;
|'''automake 1.10'''|| sudo apt-get install automake1.10&lt;br /&gt;
|-&lt;br /&gt;
|'''autopoint'''|| sudo apt-get install autopoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* it has been reported that sun-java6-jdk isn't necessary&lt;br /&gt;
&lt;br /&gt;
If you're uncertain at all, just cut and paste the following.  If they are already installed, they'll be skipped.  &lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install git-core build-essential curl unzip autoconf subversion libtool wget pkg-config gettext fakeroot ant xsltproc intltool uboot-mkimage patchutils flex bison libssl-dev libz-dev libbz2-dev xar help2man texinfo automake1.10 autopoint&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are a beginner with Ubuntu Linux Distribution, you should update all the packages on your system to avoid problems when you will compile.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' If you're using Ubuntu and &amp;lt;code&amp;gt;xar&amp;lt;/code&amp;gt; cannot be installed with &amp;lt;code&amp;gt;sudo apt-get install xar&amp;lt;/code&amp;gt;, then you have to download two &amp;lt;code&amp;gt;.deb&amp;lt;/code&amp;gt;-files manually and install them (in the order they are listed):&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/libxar1 libxar1]&lt;br /&gt;
# [http://packages.ubuntu.com/hardy/xar xar]&lt;br /&gt;
After that execute the above command again.&lt;br /&gt;
&lt;br /&gt;
Use these 2 command line :&amp;lt;BR&amp;gt;&lt;br /&gt;
Update repositories   :&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
And next, update the packages :&lt;br /&gt;
 sudo aptitude safe-upgrade&lt;br /&gt;
&lt;br /&gt;
If you're on a 64-bit system, you will also need to install the ia32-libs package.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The ''make toolchain'' command and later steps will download approximately a half-gig of tools and sources from various locations.  Do not start this if you do not have time for a large download.  Additionally, if you already have downloaded a copy of the correct version of the WebOS doctor, you can reduce the download time by copying the doctor file into cross-compile/doctors/ with the correct name.  This will cause the appropriate command to skip that download.  Note that codesourcery rate limts downloads and at a minimum this process will take 10 to 15 minutes irrespective of your connection speed. &lt;br /&gt;
&lt;br /&gt;
====Start setup====&lt;br /&gt;
Create a preware folder, copy the cross-compile tools into it (if you have not installed git, apt-get install git-core), and use a make script to begin the set up of the compilation toolchain. &lt;br /&gt;
&lt;br /&gt;
 sudo mkdir -p /srv/preware&lt;br /&gt;
 cd /srv/preware&lt;br /&gt;
 sudo chmod 777 .&lt;br /&gt;
 git clone git://git.webos-internals.org/preware/cross-compile.git&lt;br /&gt;
 cd cross-compile&lt;br /&gt;
 make toolchain&lt;br /&gt;
&lt;br /&gt;
If errors occur, browse the [http://git.webos-internals.org/?p=preware/cross-compile.git;a=shortlog repository online] and checkout earlier commits until you get something that gets through &amp;quot;make toolchain&amp;quot; and the later &amp;quot;make stage&amp;quot; commands like so:&lt;br /&gt;
&lt;br /&gt;
 git checkout &amp;lt;commit-ish&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Fix mmap errors====&lt;br /&gt;
The following commands appear redundant.  They are not.  The install this fixes your mmap config to fix an mmap: permission denied error, but we don't need the package itself. (Do each command separately with cut and paste).&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install qemu-arm-static&lt;br /&gt;
 sudo apt-get remove qemu-arm-static&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;span style=&amp;quot;font-size:150%&amp;quot;&amp;gt;OR&amp;lt;/span&amp;gt; As a workaround, if this package is not available, &lt;br /&gt;
::: the following commands can be executed in a root shell (sudo -s) to fix the mmap configuration to enable qemu-arm to work.&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;vm.mmap_min_addr = 4096&amp;quot; &amp;gt; /etc/sysctl.d/mmap_min_addr.conf&lt;br /&gt;
 /etc/init.d/procps restart&lt;br /&gt;
&lt;br /&gt;
(note that the value should not be &amp;quot;0&amp;quot;. 4096 is chosen to avoid null pointer attacks.)&lt;br /&gt;
&lt;br /&gt;
====Verify sh shell====&lt;br /&gt;
On Ubuntu /bin/sh is a symbolic link to dash.  This will cause errors with the make stage command below, as some of the scripts assume bash.  Run the following command to see what shell sh is linked to.&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
If the result is a link to dash:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-06 23:55 /bin/sh -&amp;gt; dash&lt;br /&gt;
&lt;br /&gt;
You will want to correct it with the following:&lt;br /&gt;
&lt;br /&gt;
  sudo dpkg-reconfigure dash&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to &amp;quot;Install dash as /bin/sh?&amp;quot;.  Select &amp;quot;&amp;lt;No&amp;gt;&amp;quot; and bash will be used.  Rerun the command to verify:&lt;br /&gt;
&lt;br /&gt;
  ls -l /bin/sh&lt;br /&gt;
&lt;br /&gt;
You should now see:&lt;br /&gt;
&lt;br /&gt;
  lrwxrwxrwx 1 root root 4 2010-07-09 21:12 /bin/sh -&amp;gt; bash&lt;br /&gt;
&lt;br /&gt;
====Setup Scratchbox====&lt;br /&gt;
Now, use apt-get to setup scratchbox...&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install scratchbox2 qemu-kvm-extras (in Debian install qemu-user and qemu-system instead of qemu-kvm-extras)&lt;br /&gt;
&lt;br /&gt;
...and set it up for compiling for webOS. &lt;br /&gt;
&lt;br /&gt;
 cd /srv/preware/cross-compile/toolchain/arm-2007q3/arm-none-linux-gnueabi/libc&lt;br /&gt;
 PATH=/srv/preware/cross-compile/toolchain/arm-2007q3/bin:${PATH} sb2-init -c /usr/bin/qemu-arm armv7 arm-none-linux-gnueabi-gcc&lt;br /&gt;
 cd /srv/preware/cross-compile&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
 make stage&lt;br /&gt;
&lt;br /&gt;
Once this setup is complete, compiling sdl apps for webOS is very simple.&lt;br /&gt;
&lt;br /&gt;
==Verified installed clean list==&lt;br /&gt;
&lt;br /&gt;
If you have successfully built the WIDK from scratch, with NO problems, feel free to add your information to this list.  This will help us assess what distributions and versions it is fully compatible with.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''IRC name'''&lt;br /&gt;
|'''Linux Distribution'''&lt;br /&gt;
|'''Version'''&lt;br /&gt;
|'''Date'''&lt;br /&gt;
|'''Comments'''&lt;br /&gt;
|-&lt;br /&gt;
|Scoutcamper&lt;br /&gt;
|Ubuntu&lt;br /&gt;
|9.04,9.10,10.04,10.10&lt;br /&gt;
|10-18-10&lt;br /&gt;
|Works Great!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It just doesn't work tried for over a week, with fresh Ubuntu 10.4 inside and outside of virtual box, fails on libtool for common/fuse/. Tried -j4 option with make stage, tried make staging-armv7. Also installed automake-1.9 after seeing complaints about that. -- please sign your comments&lt;br /&gt;
&lt;br /&gt;
==Errors during make stage ==&lt;br /&gt;
&lt;br /&gt;
===automake1.10===&lt;br /&gt;
&lt;br /&gt;
If you see the error below, you need the latest automake (1.10)&lt;br /&gt;
&lt;br /&gt;
 /usr/share/automake-1.9/am/depend2.am: am__fastdepOBJC does not appear in AM_CONDITIONAL&lt;br /&gt;
 configure.in:88: installing `./config.guess'&lt;br /&gt;
 configure.in:88: installing `./config.sub'&lt;br /&gt;
 Makefile.am: installing `./INSTALL'&lt;br /&gt;
 autoreconf2.50: automake failed with exit status: 1&lt;br /&gt;
&lt;br /&gt;
Install automake1.10 and it should work (according to [http://old.nabble.com/AC_PROG_OBJC-and-automake-1.9-td22434760.html this page])&lt;br /&gt;
&lt;br /&gt;
===Libtool===&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -Wall -g -O2 -MT libdotconf_la-dotconf.lo -MD -MP -MF .deps/libdotconf_la-dotconf.Tpo -c -o libdotconf_la-dotconf.lo `test -f 'dotconf.c' || echo './'`dotconf.c&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6b, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6b&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [libdotconf_la-dotconf.lo] Error 63&lt;br /&gt;
 make[5]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'&lt;br /&gt;
 make[4]: *** [install-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6'&lt;br /&gt;
 make[3]: *** [build/armv6.built] Error 2&lt;br /&gt;
 make[3]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf'&lt;br /&gt;
 make[2]: *** [build_common/libdotconf] Error 2&lt;br /&gt;
 make[2]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make[1]: *** [staging-armv6] Error 2&lt;br /&gt;
 make[1]: Leaving directory `/srv/preware/cross-compile'&lt;br /&gt;
 make: *** [stage] Error 2&lt;br /&gt;
&lt;br /&gt;
Confirmed by 3 people. Fix this by either (your choice)&lt;br /&gt;
*upgrading to Ubuntu 10.04 or newer (the WIDK now relies on a slightly newer version of libtool that's not in 9.10 or earlier)&lt;br /&gt;
*updating libtool to 2.2.6b-2 (backported to 9.10, see available downloads on http://linuxappfinder.com/package/libtool#ubuntu_karmicpartner)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you're getting an error where sb2-init gives you the following output:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Running /usr/bin/sb2-build-libtool failed&lt;br /&gt;
 You can run this manually later, otherwise your&lt;br /&gt;
 sb2 environment is correctly setup and ready to use&lt;br /&gt;
&lt;br /&gt;
You need to upgrade qemu. Alternatively, if your sb2-init output fails with a different output, like this:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc&lt;br /&gt;
 checking for C compiler default output file name... a.out&lt;br /&gt;
 checking whether the C compiler works... configure: error: cannot run C compiled programs.&lt;br /&gt;
 If you meant to cross compile, use `--host'.&lt;br /&gt;
 See `config.log' for more details.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sb2-init completed successfully, have fun!&lt;br /&gt;
&lt;br /&gt;
Then you need to upgrade scratchbox, too (install 2.0 instead of 1.99).&lt;br /&gt;
&lt;br /&gt;
=== ecore ===&lt;br /&gt;
*TRUE and FALSE are not defined:&lt;br /&gt;
Manually add the definition:&lt;br /&gt;
&lt;br /&gt;
 #ifndef TRUE&lt;br /&gt;
 # define TRUE 1&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
 #ifndef FALSE&lt;br /&gt;
 # define FALSE 0&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; could not be found:&lt;br /&gt;
**Open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/dev-e/ecore/build/src/configure.ac&amp;lt;/code&amp;gt; and search for the line with: &amp;lt;code&amp;gt;$po_makefile_in&amp;lt;/code&amp;gt; (in my case line 1437) and replace it with &amp;lt;code&amp;gt;po/Makefile.in&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== /bin/sh errors ===&lt;br /&gt;
If you are getting a &amp;quot;bad fd number&amp;quot; or other /bin/sh error, make sure your /bin/sh points to bash, not another shell (such as dash.)&lt;br /&gt;
&lt;br /&gt;
Go back through the Verify sh shell section above to correct.&lt;br /&gt;
&lt;br /&gt;
=== fuse ===&lt;br /&gt;
If you get an error like this (happened to me on Ubuntu 10.10):&lt;br /&gt;
&lt;br /&gt;
 make[5]: Entering directory '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
 if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../include  -I../include -DFUSERMOUNT_DIR=\&amp;quot;/usr/local/bin\&amp;quot; -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=26   -Wall -W -Wno-sign-compare -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -g -O2 -fno-strict-aliasing -MT fuse.lo -MD -MP -MF &amp;quot;.deps/fuse.Tpo&amp;quot; -c -o fuse.lo fuse.c; \&lt;br /&gt;
 	then mv -f &amp;quot;.deps/fuse.Tpo&amp;quot; &amp;quot;.deps/fuse.Plo&amp;quot;; else rm -f &amp;quot;.deps/fuse.Tpo&amp;quot;; exit 1; fi&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.1a Debian 1.9+20051221-1, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from libtool 2.2.6b.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.1a Debian 1.9+20051221-1&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
 make[5]: *** [fuse.lo] Error 1&lt;br /&gt;
 make[5]: Leaving direcotry '/srv/preware/cross-compile/packages/common/fuse/build/armv7/lib'&lt;br /&gt;
&lt;br /&gt;
Then open the file &amp;lt;code&amp;gt;/srv/preware/cross-compile/packages/common/fuse/build/src/ltmain.sh&amp;lt;/code&amp;gt; and search for &amp;lt;code&amp;gt;exit $EXIT_MISMATCH&amp;lt;/code&amp;gt; (in my case line 1028) and comment it out by placing a &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; before this line. I know that's a dirty fix, but it worked for me. Note that you will see the same error messages as before, but it won't stop there.&lt;br /&gt;
&lt;br /&gt;
=== download error files.opentts.org ===&lt;br /&gt;
&lt;br /&gt;
just enter&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -f -R -L -o downloads/libdotconf-1.3.tar.gz.tmp http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/dotconf-1.3.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sample build of [[Application:Doom]]==&lt;br /&gt;
&lt;br /&gt;
Now, go to [[Building DOOM with scratchbox2]] and follow the simple directions.&lt;br /&gt;
&lt;br /&gt;
==In Process Enhancements==&lt;br /&gt;
[[Extracting the PDK on Linux]]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Application:MetaDoctor&amp;diff=12763</id>
		<title>Application:MetaDoctor</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Application:MetaDoctor&amp;diff=12763"/>
		<updated>2011-01-26T21:37:43Z</updated>

		<summary type="html">&lt;p&gt;MetaView: /* Using Cygwin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Application]]&lt;br /&gt;
This page is currently available in two languages:&lt;br /&gt;
:[[Image:Australia.png]] [[Image:USA.png]] [[Application:MetaDoctor]]&lt;br /&gt;
:[[Image:France.png]] [[Application:MetaDoctor-FR]]&lt;br /&gt;
&lt;br /&gt;
= What is the Meta Doctor? =&lt;br /&gt;
&lt;br /&gt;
The Webos Internals Meta Doctor is a Makefile which can modify a copy of the Palm webOS Doctor to bypass the &amp;quot;First Use&amp;quot; application and allow the phone to run without having been activated on a cell network. It accomplishes this by reaching into Palm's distributed Doctor JAR file and making changes to it. It can prevent the first use app from running, as well as applying other tweaks to the OS.&lt;br /&gt;
&lt;br /&gt;
'''Documentation for the features that the MetaDoctor offers is at the top of the Makefile (you find out where that is later).'''&lt;br /&gt;
&lt;br /&gt;
= Step 1: Setting up Meta-Doctor=&lt;br /&gt;
&lt;br /&gt;
== Linux == &lt;br /&gt;
&lt;br /&gt;
=== Installing required software ===&lt;br /&gt;
&lt;br /&gt;
# Open terminal from the ( Applications &amp;gt; Accessories ) menu. (If using Cygwin Method: Go to Start&amp;gt;Programs&amp;gt;Cygwin&amp;gt;Cygwin Bash Shell and skip to Number 3)&lt;br /&gt;
# If you have git installed, skip this step.  If you do not have git installed, type: &amp;lt;pre&amp;gt;sudo apt-get install git-core&amp;lt;/pre&amp;gt; and follow the directions to install git.&lt;br /&gt;
# Now type: &amp;lt;pre&amp;gt;git clone git://git.webos-internals.org/tools/meta-doctor.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
# If you do not have patch installed, you will need to install patch. (If using Cygwin method: Skip this step and jump to number 7)  On an Ubuntu system type: &amp;lt;pre&amp;gt;sudo apt-get install patch&amp;lt;/pre&amp;gt; &lt;br /&gt;
# If you do not have java installed, do so. To install java, choose ( Applications &amp;gt; Ubuntu Software Center ) and type '''java 6 runtime''' in search - it is easiest to search for java to find it - then follow the on screen instructions. It should be pretty simple.&lt;br /&gt;
# Download and install the Palm Novacom software from http://developer.palm.com. Download the version for Ubuntu [https://cdn.downloads.palm.com/sdkdownloads/1.3.1.314/sdkBinaries/palm-novacom_1.0.46_i386.deb here] and install it. (If you choose to install the full SDK instead, and are running the 64-bit version of Ubuntu 9.x you will have difficulty installing the SDK and the instructions on the download site are wrong. Read [https://developer.palm.com/distribution/viewtopic.php?f=31&amp;amp;t=2308 this thread] and [http://forums.precentral.net/showpost.php?p=2021966&amp;amp;postcount=108 this post] for help.)&lt;br /&gt;
# Open a terminal and navigate to the meta-doctor directory where the meta-doctor was copied to in step 3 above. (If using Cygwin method: You should already be in a terminal and just do the cd command) For example:  &amp;lt;pre&amp;gt;cd meta-doctor&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Ensure that there is a downloads directory.  If there is not one, create one using &amp;lt;pre&amp;gt;mkdir downloads&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Download the latest webosdoctor file using the download paths found at [http://www.webos-internals.org/wiki/Webos_Doctor_Versions Webos Doctor Versions] .The wr version is the French,German,Irish,Spanish and UK GSM version.  An example download command would be: &amp;lt;pre&amp;gt;cd downloads&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;wget http://palm.cdnetworks.net/rom/pre/p1351r0d01082010/sr1ntp1351rod/webosdoctorp100ewwsprint.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Rename the file that you download to include the version number for future reference (examples: webosdoctorp100ewwsprint-1.3.5.1.jar, webosdoctorp100eww-wr-1.1.3.jar, or webosdoctorp100ewwbellmo-1.2.1.jar).   An example command to do that would be:&amp;lt;pre&amp;gt;mv webosdoctorp100ewwbellmo.jar webosdoctorp100ewwbellmo-1.3.5.1.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Running Meta-Doctor ===&lt;br /&gt;
&lt;br /&gt;
# Navigate to the meta-doctor directory in the terminal&lt;br /&gt;
# If you would like Meta-Doctor to apply patches to webOS in order to add or change functionality from the factory install, open the Makefile with your favorite text editor and uncomment (remove the leading # characters from) the options you would like to use. &lt;br /&gt;
# Type one of the following: &lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=pre all-wr&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=preplus all-wr&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=pixiplus all-wr&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=pre all-sprint&amp;lt;/pre&amp;gt; &lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=pixi all-sprint&amp;lt;/pre&amp;gt; &lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=pre all-bellmo&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=pre all-telcel&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=preplus all-verizonwireless&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=pixiplus all-verizonwireless&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=preplus all-att&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: &amp;lt;pre&amp;gt;make DEVICE=pixiplus all-att&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: depending on the carrier in question.&lt;br /&gt;
'''Note ''': use make DEVICE=palm_smartphone_type all-wr for O2 Germany, UK and Ireland / Movistar Spain / SFR France&lt;br /&gt;
&lt;br /&gt;
This should begin a process within the terminal that should take 10 minutes max.&lt;br /&gt;
&lt;br /&gt;
=== Error conditions ===&lt;br /&gt;
&lt;br /&gt;
If an error message appears with unknown in a file name, check the file rename in step 8 above.&lt;br /&gt;
&lt;br /&gt;
=== If the build fails ===&lt;br /&gt;
&lt;br /&gt;
If the make command fails, you can use &amp;lt;pre&amp;gt;make clobber&amp;lt;/pre&amp;gt; to clean up the build directory. After this you can re-run the command.&lt;br /&gt;
&lt;br /&gt;
== Mac OS X 10.6 ==&lt;br /&gt;
&lt;br /&gt;
#Install MacPorts first, which will allow us to easily install the necessary packages for MetaDoctor. [http://www.macports.org/install.php]. Please note that MacPorts requires Apple's Xcode Developer Tools (version 3.2.1 or later for Snow Leopard, 3.1.4 or later for Leopard, or 2.5 for Tiger), found at the [http://connect.apple.com/ Apple Developer Connection site] or on your Mac OS X installation CDs/DVD.&lt;br /&gt;
#Install md5sum: &amp;lt;pre&amp;gt;sudo port install md5sha1sum&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Install gnutar: &amp;lt;pre&amp;gt;sudo port install gnutar&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Install git: &amp;lt;pre&amp;gt;sudo port install git-core&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Now type: &amp;lt;pre&amp;gt;git clone git://git.webos-internals.org/tools/meta-doctor.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Install patch: &amp;lt;pre&amp;gt;sudo port install gpatch&amp;lt;/pre&amp;gt;&lt;br /&gt;
#If you do not have Java installed, do so. To install Java, click on the &amp;quot;Apple&amp;quot; icon and select &amp;quot;Software Update.&amp;quot; This will automatically update you to the latest version of Java if necessary, as Apple supplies their own version of Java. Further instructions can be found [http://support.apple.com/kb/HT1338?viewlocale=en_US here].&lt;br /&gt;
#Download and install the Palm Novacom software from http://developer.palm.com. The Mac OS X SDK is located [http://cdn.downloads.palm.com/sdkdownloads/1.4.5.465/sdkBinaries/Palm_webOS_SDK.1.4.5.465.dmg here].&lt;br /&gt;
#Open a terminal and navigate to the meta-doctor directory where the meta-doctor was copied to in step 3 above.&amp;lt;pre&amp;gt;cd meta-doctor&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Ensure that there is a downloads directory.  If there is not one, create one using &amp;lt;pre&amp;gt;mkdir downloads&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Download the latest webosdoctor file using the download paths found at [http://www.webos-internals.org/wiki/Webos_Doctor_Versions Webos Doctor Versions] .The wr version is the French,German,Irish,Spanish and UK GSM version.  An example download command would be: &amp;lt;pre&amp;gt;cd downloads&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;wget http://palm.cdnetworks.net/rom/pre/p1351r0d01082010/sr1ntp1351rod/webosdoctorp100ewwsprint.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
#Rename the file that you download to include the version number for future reference (examples: webosdoctorp100ewwsprint-1.3.5.1.jar, webosdoctorp100eww-wr-1.1.3.jar, or webosdoctorp100ewwbellmo-1.2.1.jar).   An example command to do that would be:&amp;lt;pre&amp;gt;mv webosdoctorp100ewwbellmo.jar webosdoctorp100ewwbellmo-1.3.5.1.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
#See &amp;quot;Running MetaDoctor&amp;quot; above.&lt;br /&gt;
&lt;br /&gt;
==Using a Virtual Machine==&lt;br /&gt;
&lt;br /&gt;
If you do not have a Linux system, you will need to run the meta-doctor in a virtual machine.  For windows users there are two options.  For Mac users, follow option 1.  &lt;br /&gt;
&lt;br /&gt;
===Running in VMware or VirtualBox===&lt;br /&gt;
&lt;br /&gt;
# Download [http://www.ubuntu.com/getubuntu/download Ubuntu 9.10].  &lt;br /&gt;
# Download a virtual machine program, either vmware or virtualbox. A virtual machine is simply a program that allows you to piggyback a second operating system on top of your native OS without dual booting or actually having a Linux machine.&lt;br /&gt;
#: I ended up using VirtualBox instead, because I found the VMware to be very confusing on what to actually download.  The Virtual box website is very simple and straight forward.  Here is a link for the virtualbox download for Windows: [http://download.virtualbox.org/virtualbox/3.0.10/VirtualBox-3.0.10-54097-Win.exe VirtualBox-3.0.10-54097-Win]&lt;br /&gt;
# Now install virtualbox just like you would install any other application, nothing fancy here.&lt;br /&gt;
# Start up virtualbox and follow either of these instructions to install Ubuntu&lt;br /&gt;
## http://www.helpdeskgeek.com/linux-tips/how-to-install-ubuntu-in-virtualbox/&lt;br /&gt;
## http://www.psychocats.net/ubuntu/virtualbox&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Using WUBI===&lt;br /&gt;
&lt;br /&gt;
Windows users have another option to avoid using a virtual machine.  They can use the meta doctor  without harming your current installation of windows using simple Ubuntu installer called WUBI. Also no need for moding any partitions or installing any boot loaders. It will just appear as program in your installed software list and when you do not want it anymore simply uninstall it while in windows through Control Panel. It is easy and there is no virtual machine headaches of trying to configure USB, Network and File sharing with host computer... To access it you just reboot and choose Ubuntu from dual boot screen.&lt;br /&gt;
&lt;br /&gt;
# download [http://www.ubuntu.com/getubuntu/download Ubuntu 9.10]&lt;br /&gt;
# burn that file to a cd or mount to virtual drive&lt;br /&gt;
# Run cd in windows (the wubi.exe file inside the disk, it also comes up in auto run)&lt;br /&gt;
# Click on '''Install Inside windows'''.&lt;br /&gt;
#: This will install Ubuntu while running Windows without the need of making a partition I would recomand making the install image the full recommended 30 gigs if you have the hard drive space and think you are interested in actually using the Ubuntu OS, otherwise the minimum recommended by Wubi should be just fine. &lt;br /&gt;
# Restart your computer and you can dual boot to Windows or Ubuntu &lt;br /&gt;
&lt;br /&gt;
The nice thing about this is that it will allow you to uninstall Ubuntu right from Windows as if it was never there and remove the dual boot, not to mention the fact you do not need to partition your drive.&lt;br /&gt;
&lt;br /&gt;
If you are still wondering what Wubi is the fallowing link should explain it to you better.&lt;br /&gt;
[https://wiki.ubuntu.com/WubiGuide Wubi Guide]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' &lt;br /&gt;
this will only work with the cd image found at the Ubuntu Download link. The dvd image of 9.04/9.10 is a live cd/installer and does not have the option to install inside windows using Wubi&lt;br /&gt;
&lt;br /&gt;
==Using Cygwin==&lt;br /&gt;
&lt;br /&gt;
Windows users can alternatively use [http://www.cygwin.com/ Cygwin] to run Meta-Doctor. This can often be simpler and faster than installing a full-blown Virtual Machine.&lt;br /&gt;
&lt;br /&gt;
Simply install Cygwin, and include the following additional packages:&lt;br /&gt;
&lt;br /&gt;
# Python&lt;br /&gt;
# Make&lt;br /&gt;
# Patch&lt;br /&gt;
# Git&lt;br /&gt;
# Zip&lt;br /&gt;
# Unzip&lt;br /&gt;
# wget&lt;br /&gt;
&lt;br /&gt;
(use View &amp;quot;Full&amp;quot; to find these specific packages more easily)&lt;br /&gt;
&lt;br /&gt;
After you have installed these packages, you can follow the [[Application:MetaDoctor:#Linux | Linux instructions]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&lt;br /&gt;
I used a WinXP box with cygwin and everything worked fine, except I had to add the switch --no-same-owner in line 802 of the Makefile. That's because I'm as root in cygwin and without this switch the tar-command failed.&lt;br /&gt;
&lt;br /&gt;
Code:&lt;br /&gt;
   mkdir -p build/${PATIENT}/webOS&lt;br /&gt;
   ${TAR} --no-same-owner -C build/${PATIENT}/webOS \&lt;br /&gt;
      -f build/${PATIENT}/resources/webOS.tar \&lt;br /&gt;
      -x ./${CUSTIMAGEOLD}.rootfs.tar.gz ./${INSTIMAGEOLD}.uImage ./${BOOTLOADEROLD}.bin ./${CODENAMEOLD}.xml ./installer.xml&lt;br /&gt;
&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
NB: You can find the Makefile to edit in &amp;lt;cygwin install folder&amp;gt;\home\&amp;lt;username&amp;gt;\meta-doctor&lt;br /&gt;
&lt;br /&gt;
For example &amp;lt;pre&amp;gt;C:\cygwin\home\johndoe\meta-doctor&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Media:Example.ogg]]&lt;br /&gt;
&lt;br /&gt;
= Step 2: Running the patched webOS Doctor&lt;br /&gt;
The updated doctor version has the same name as the original, but is in a new folder: ''meta-doctor/build/pre-p100eww-sprint-1.3.5.1/webosdoctorp100ewwsprint-1.3.5.1.jar''.&lt;br /&gt;
&lt;br /&gt;
If you are running in Ubuntu or Cygwin, you can just run the new jar file now.  &lt;br /&gt;
&lt;br /&gt;
If you are running Ubuntu using VM, you will need to copy the new jar out of the VM into your live desktop to run the jar in your native OS. &lt;br /&gt;
&lt;br /&gt;
CD to the folder where your new jar file is, and type something like: &lt;br /&gt;
&lt;br /&gt;
java -jar webosdoctorp100ewwsprint-1.3.5.1.jar&lt;br /&gt;
&lt;br /&gt;
If you were using a VM or some other virtual method, you will need to copy the jar file out to your main operating system before running it.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Windows host:''&lt;br /&gt;
&lt;br /&gt;
[http://ubuntuexperiment.wordpress.com/2008/11/12/sharing-folders-between-host-and-guest-os-in-virtualbox/ VirtualBox folder Sharing]&lt;br /&gt;
&lt;br /&gt;
[http://www.howtogeek.com/howto/ubuntu/how-to-share-folders-with-your-ubuntu-virtual-machine-guest/ VMWare folder Sharing]&lt;br /&gt;
&lt;br /&gt;
''Mac OSX host:''&lt;br /&gt;
&lt;br /&gt;
[http://davidherron.com/blog/topics/628-virtualbox-running-ubuntu-accessing-host-file-system-mac-os-x VirtualBox folder Sharing]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: ''NOTE: this only applies to WUBI Users''  &lt;br /&gt;
You should be able to run the JAR as if you had Linux installed natively because in a sense you do (as long as Java is installed and you run the Jar using Java) but if you rather run it in windows  &lt;br /&gt;
&lt;br /&gt;
Using terminal the following command in a Wubi installation of Ubuntu will copy the JAR file to the host Windows OS :&amp;lt;pre&amp;gt;cp /meta-doctor/build/pre-p100eww-sprint-1.2.1/webosdoctorp100ewwsprint-1.2.1.jar /host/webosdoctorp100ewwsprint-1.2.1.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will place the Jar either in your Windows C:\ drive or whatever drive you installed Wubi to.&lt;br /&gt;
&lt;br /&gt;
== Once the Doctor is running ==&lt;br /&gt;
&lt;br /&gt;
# Select your language&lt;br /&gt;
# Accept the license agreement&lt;br /&gt;
# Connect your Pre to your PC via USB and select &amp;quot;Next&amp;quot; when it becomes available&lt;br /&gt;
&lt;br /&gt;
After completion the device will reboot and present you with the activation set-up.&lt;br /&gt;
&lt;br /&gt;
If your PC does not recognize your Pre and you cannot go past step 3 above, try the following steps:&lt;br /&gt;
&lt;br /&gt;
# With the USB cable connected, completely power off the Pre (hold down the power button until the option to power off appears)&lt;br /&gt;
# Hold down the Up button on the volume rocker&lt;br /&gt;
# While holding the Up button, power on the Pre&lt;br /&gt;
# &amp;quot;Next&amp;quot; should now be enabled - proceed with the recovery&lt;br /&gt;
{{tux|Tux_with_Pre.png|float:right;}}&lt;br /&gt;
The above steps will put the Pre into bootloader recovery mode and should allow the PC to recognize your device and proceed with the restore. In this mode the screen will display a giant USB logo instead of the usual Palm startup logo.&lt;br /&gt;
&lt;br /&gt;
When the process finishes, the Pre will reboot and your new modified image will have been installed.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
After the doctor completes, you will need to run the &amp;quot;First Run&amp;quot; application. To do this, you will need an active internet connection. Either WiFi or Cellular. If you do not have WiFi and cannot connect to the Palm Profile servers, you might have a problem with your programming. This Meta Doctor (or webOS Doctor in general) could possibly erase the modem's programming. To resolve you will need to perform the following steps:&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This has only been confirmed to resolve Sprint CDMA issues, YMMV.&lt;br /&gt;
&lt;br /&gt;
'''Note 2:''' You should try to update your profile first. Open the phone app, open the App Menu and select ''Preferences'' then select ''Update Network Settings''. If you get an error, then procede with these instructions.&lt;br /&gt;
*'''1.''' Open the Phone App.&lt;br /&gt;
*'''2.''' Enter ''##MSL#'' (MSL= 6 digit lock code. Get this from Sprint.)&lt;br /&gt;
*'''3.''' Verify your MDN and MSID are incorrect. If they are incorrect, continue. If they are correct, this is not your problem and you should not continue.&lt;br /&gt;
*'''4.''' Select ''Edit''.&lt;br /&gt;
*'''5.''' Select the first box (MDN) and enter your 10-digit cellular number.&lt;br /&gt;
*'''6.''' Select the second box (MSID) and enter your 10-digit MSID (Get this from Sprint).&lt;br /&gt;
*'''7.''' Select ''Save''.&lt;br /&gt;
*'''8.''' Backswipe out of the the view.&lt;br /&gt;
*'''9.''' You should now be able to open complete '''Note 2''' above without any errors.&lt;br /&gt;
&lt;br /&gt;
You should now be able to run the ''First Use'' application without any problems.&lt;br /&gt;
&lt;br /&gt;
=If the Doctor will not run=&lt;br /&gt;
Go [http://www.webos-internals.org/wiki/How_To_Recover here] if you have further problems connecting your Pre to the running Meta'ed Doctor.&lt;br /&gt;
&lt;br /&gt;
=Miscellaneous=&lt;br /&gt;
&lt;br /&gt;
==How to change a provider's DB-entry so 3G data can be used on the Pre==&lt;br /&gt;
&lt;br /&gt;
[http://forums.precentral.net/gsm-pre/211728-modifying-webos-carrier-network-settings.html#post2002079 This post] and [http://forums.precentral.net/palm-pre/209222-few-questions-about-german-palm-pre-6.html this thread] describe various ways to adjust the provider's data base in the Pre, so the 3G datacom works on non-supported networks. webOS 1.3.1 allows setting of the providers data directly from the activation screen for providers that are present in the DB. Some report that they are not able to do that and that they cannot get 3G datacom working on 1.3.1&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=9793</id>
		<title>Uber Calendar</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=9793"/>
		<updated>2010-05-05T19:29:21Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are 2 patch files for the JS source and for the CSS. There are also 2 small icons which need to be copied into the images folder. The icons are here: [http://www.metaviewsoft.de/Calendar/menu-icon-agenda.png Agenda icon] and [http://www.metaviewsoft.de/Calendar/alarm-icon.png Alarm bell]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name: UberCalendar&lt;br /&gt;
Version: 1.4.0-5&lt;br /&gt;
Author: metaview, frause&lt;br /&gt;
Description: Enhance the calendar views. (MIT license)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/app-assistant.js	2010-01-22 04:25:18.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/app-assistant.js	2010-05-02 11:48:42.000000000 +0200&lt;br /&gt;
@@ -489,7 +489,15 @@ var AppAssistant = Class.create({&lt;br /&gt;
 			this.firstUseManager = new FirstUseManager(stageController);&lt;br /&gt;
 		} else {&lt;br /&gt;
 			// Otherwise show the Day View&lt;br /&gt;
-			stageController.pushScene({name: &amp;quot;day&amp;quot;, transition: Mojo.Transition.crossFade, disableSceneScroller: true});&lt;br /&gt;
+			var view = &amp;quot;day&amp;quot;;&lt;br /&gt;
+			var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+			try {&lt;br /&gt;
+				view = cookie.get();&lt;br /&gt;
+			} catch (e) {}&lt;br /&gt;
+			if ((view != &amp;quot;month&amp;quot;) &amp;amp;&amp;amp; (view != &amp;quot;week&amp;quot;)) {&lt;br /&gt;
+				view = &amp;quot;day&amp;quot;;&lt;br /&gt;
+			}&lt;br /&gt;
+			stageController.pushScene({name: view, transition: Mojo.Transition.crossFade, disableSceneScroller: true});&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/day-assistant.js	2010-02-09 23:08:26.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/day-assistant.js	2010-05-03 21:10:34.000000000 +0200&lt;br /&gt;
@@ -42,6 +42,8 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		this.pendingCalendarSettingsUpdate = false;&lt;br /&gt;
 		//this.pendingOpenScratchEventInDetails = false;&lt;br /&gt;
 		this.snapEffectCount = 0;&lt;br /&gt;
+		this.imgAlarm = new Image();&lt;br /&gt;
+		this.imgAlarm.src = &amp;quot;images/alarm-icon.png&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 		&lt;br /&gt;
 		this.hourHeight = 48;&lt;br /&gt;
@@ -212,17 +214,23 @@ var DayAssistant = Class.create({&lt;br /&gt;
 	buildDayTitle: function(doScrim) {&lt;br /&gt;
 		var today = Date.today().clearTime();&lt;br /&gt;
 		var dayDateNoTime = new Date(this.dayDate).clearTime();&lt;br /&gt;
+		var weekNumber = new Date(this.dayDate).getISO8601Week();&lt;br /&gt;
 		&lt;br /&gt;
 		if (dayDateNoTime.compareTo(today) == 0) {&lt;br /&gt;
-			var template = new Template($L(&amp;quot;#{todayStr}, #{dateStr}&amp;quot;));&lt;br /&gt;
+			var template = new Template($L(&amp;quot;#{todayStr}, #{dateStr}&amp;quot;) + &amp;quot;, W#{weekStr}&amp;quot;);&lt;br /&gt;
 			var todayStr= Mojo.Format.formatRelativeDate(today, {date: &amp;quot;short&amp;quot;}).capitalize();&lt;br /&gt;
 			&lt;br /&gt;
 			var templateModel = {};&lt;br /&gt;
 			templateModel.todayStr = todayStr;&lt;br /&gt;
+			templateModel.weekStr = weekNumber;&lt;br /&gt;
 			templateModel.dateStr = Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d&amp;quot;));&lt;br /&gt;
 			this.controller.get('dv_title').update(template.evaluate(templateModel)); // Localize this date format string&lt;br /&gt;
 		} else {&lt;br /&gt;
-			this.controller.get('dv_title').update(Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d, yyyy&amp;quot;))); // Localize this date format string&lt;br /&gt;
+			var template = new Template($L(&amp;quot;#{dateStr}&amp;quot;) + &amp;quot;, W#{weekStr}&amp;quot;);&lt;br /&gt;
+			var templateModel = {};&lt;br /&gt;
+			templateModel.weekStr = weekNumber;&lt;br /&gt;
+			templateModel.dateStr = Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d, yyyy&amp;quot;));&lt;br /&gt;
+			this.controller.get('dv_title').update(template.evaluate(templateModel)); // Localize this date format string&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		if (doScrim) {&lt;br /&gt;
@@ -702,6 +710,8 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		//Mojo.Log.info(&amp;quot;day-assistant: renderEvent&amp;quot;);&lt;br /&gt;
 		if (this.animating &amp;amp;&amp;amp; !event.animatible)&lt;br /&gt;
 			return;&lt;br /&gt;
+&lt;br /&gt;
+//Mojo.Log.error(Object.toJSON(event));&lt;br /&gt;
 	&lt;br /&gt;
 		var ctx = this.divs[whichDay].ctxEvents;&lt;br /&gt;
 		var marginLeft = 28;&lt;br /&gt;
@@ -743,6 +753,17 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		ctx.fillRect(left+1, top+height-3, width-2, 1);&lt;br /&gt;
 		&lt;br /&gt;
 		var textTop = top + 30;&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+		// Alarm&lt;br /&gt;
+		if (event.gotFullDetails === undefined) {&lt;br /&gt;
+			// get more infos for this event&lt;br /&gt;
+			getCalendarService().getEvent(event.id,&lt;br /&gt;
+					this.getEventDetails.bind(this, whichDay, event, selected, ghost),&lt;br /&gt;
+					function(response) {Mojo.Log.error(response.errorText);},&lt;br /&gt;
+					this.controller);&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
 		&lt;br /&gt;
 		// Subject&lt;br /&gt;
 		ctx.fillStyle = this.colors[event.calendarColor].text;&lt;br /&gt;
@@ -753,8 +774,14 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		var subjectTop = top+15;&lt;br /&gt;
 		if (bottom &amp;gt;= (top + height))&lt;br /&gt;
 			subjectTop = top+17;	// no room for location or note, therefore vertically center subject text&lt;br /&gt;
-		this.fillText(event.subject, ctx, left+4, subjectTop, width, bottom, 15 /*line height*/);	&lt;br /&gt;
-		&lt;br /&gt;
+		this.fillText(event.subject, ctx, left+4, subjectTop, width-((event.alarm !== undefined) ? 18 : 0), bottom, 15 /*line height*/);	&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+		if (event.alarm !== undefined) {&lt;br /&gt;
+			try{ ctx.drawImage(this.imgAlarm, left+4+width-18, subjectTop+1, 12, 12); } catch(e){}&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
+&lt;br /&gt;
 		// Location&lt;br /&gt;
 		if (event.location &amp;amp;&amp;amp; (event.location.length &amp;gt; 0) &amp;amp;&amp;amp; (textTop &amp;lt; (top + height))) {&lt;br /&gt;
 			ctx.font = &amp;quot;italic bold 14px Prelude&amp;quot;;&lt;br /&gt;
@@ -769,7 +796,7 @@ var DayAssistant = Class.create({&lt;br /&gt;
 			bottom = top+height;&lt;br /&gt;
 			this.fillText(event.note, ctx, left+4, textTop-2, width, bottom-2, 12 /*line height*/);			&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
+&lt;br /&gt;
 		if (ghost) {&lt;br /&gt;
 			var selectedColor = &amp;quot;rgba(228, 228, 226, 0.85)&amp;quot;&lt;br /&gt;
 			ctx.fillStyle = selectedColor;&lt;br /&gt;
@@ -789,6 +816,14 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		  ctx.fillRect(left, top, width, height);&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+	getEventDetails: function(whichDay, event, selected, ghost, details) {&lt;br /&gt;
+		event.alarm = details.alarm;&lt;br /&gt;
+		event.gotFullDetails = true;&lt;br /&gt;
+		this.renderEvent(whichDay, event, selected, ghost);&lt;br /&gt;
+	},&lt;br /&gt;
+///&lt;br /&gt;
 	&lt;br /&gt;
 	getAllDayDimensions: function(index, event) {&lt;br /&gt;
 		var marginLeft = 4;&lt;br /&gt;
@@ -1828,6 +1863,7 @@ var DayAssistant = Class.create({&lt;br /&gt;
 						{label:$L('Views'), &lt;br /&gt;
 						toggleCmd:'day', &lt;br /&gt;
 						items:[&lt;br /&gt;
+							{label:$L('Agenda'), icon: 'menu-agenda', command:'agenda'},&lt;br /&gt;
 							{label:$L('Day'), icon: 'menu-day', command:'day'}, &lt;br /&gt;
 							{label:$L('Week'), icon: 'menu-week', command:'week'}, &lt;br /&gt;
 							{label:$L('Month'), icon: 'menu-month', command:'month'}&lt;br /&gt;
@@ -1854,6 +1890,9 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(this.divs[this.PREV_DAY].alldayevents_scroller, undefined, {mode: 'vertical'});&lt;br /&gt;
 		this.controller.setupWidget(this.divs[this.NEXT_DAY].alldayevents_scroller, undefined, {mode: 'vertical'});&lt;br /&gt;
 &lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;day&amp;quot;);&lt;br /&gt;
+&lt;br /&gt;
    		this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
 		&lt;br /&gt;
 		// IMPORTANT: Set up the height of the scrollers.  If this is not done&lt;br /&gt;
@@ -2095,6 +2134,17 @@ var DayAssistant = Class.create({&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.maybeCommitScratchEvent(true);&lt;br /&gt;
 				this.syncAllCalendars();&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.maybeCommitScratchEvent(true);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'day';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		} else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			// Enable prefs menuitem for this scene.&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/month-assistant.js	2010-01-06 03:09:08.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/month-assistant.js	2010-05-03 21:11:06.000000000 +0200&lt;br /&gt;
@@ -5,6 +5,7 @@ var MONTH_DAY_ID_FORMAT = 'MMMM dd yyyy'&lt;br /&gt;
 var MonthAssistant = Class.create({&lt;br /&gt;
 				&lt;br /&gt;
 	reminderMenuItemId: 3,&lt;br /&gt;
+	fullEvts: null,&lt;br /&gt;
 	&lt;br /&gt;
 	initialize: function() {&lt;br /&gt;
  		this.appMenuModel = { visible:true, &lt;br /&gt;
@@ -22,12 +23,28 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 				&lt;br /&gt;
 		this.scrollerModel = { scrollbars: false, mode: &amp;quot;vertical-snap&amp;quot;, snapIndex: 0, snapElements: { y: [] } };&lt;br /&gt;
 	},&lt;br /&gt;
+&lt;br /&gt;
+	colors: {&amp;quot;cal-color-blue&amp;quot;: &amp;quot;#91d3ea&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-green&amp;quot;: &amp;quot;#8cf08c&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-yellow&amp;quot;: &amp;quot;#e8e37c&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-gray&amp;quot;: &amp;quot;#c2c2c2&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-orange&amp;quot;: &amp;quot;#fbb474&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-pink&amp;quot;: &amp;quot;#f59cbc&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-red&amp;quot;: &amp;quot;#ff9797&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-purple&amp;quot;: &amp;quot;#d9b7ff&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-teal&amp;quot;: &amp;quot;#72dfd2&amp;quot;},&lt;br /&gt;
 														&lt;br /&gt;
  	setupMonth: function(startDate, endDate, callbackfn) &lt;br /&gt;
 	{&lt;br /&gt;
+		getCalendarService().getEvents('all', startDate.getTime(), endDate.getTime(), this.getEventsCallback.bind(this), this.controller, this.getEventsFailCallback, {useSlices: true});&lt;br /&gt;
 		getCalendarService().getBusyDays(getCurrentCal(), startDate.getTime(), endDate.getTime(), callbackfn, this.controller);&lt;br /&gt;
 	},&lt;br /&gt;
-	&lt;br /&gt;
+&lt;br /&gt;
+	getEventsCallback: function(resp)&lt;br /&gt;
+	{&lt;br /&gt;
+		this.fullEvts = resp.days;&lt;br /&gt;
+	},&lt;br /&gt;
+&lt;br /&gt;
 	buildViewHeader: function() &lt;br /&gt;
 	{&lt;br /&gt;
 		//Mojo.Log.info(&amp;quot;month-assistant: buildViewHeader&amp;quot;);&lt;br /&gt;
@@ -37,7 +54,13 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 	&lt;br /&gt;
 	buildMonthTitle: function() &lt;br /&gt;
 	{&lt;br /&gt;
-		this.mvTitle.innerText = Mojo.Format.formatDate(this.monthDate, $L(&amp;quot;MMM yyyy&amp;quot;)); // Localize this date format string&lt;br /&gt;
+		var wn = new Date(this.monthDate);&lt;br /&gt;
+		wn.setDate(1);&lt;br /&gt;
+		var firstWeek = wn.getISO8601Week();	&lt;br /&gt;
+		wn.setMonth(wn.getMonth()+1);&lt;br /&gt;
+		wn.setDate(wn.getDate()-1);&lt;br /&gt;
+		var lastWeek = wn.getISO8601Week();&lt;br /&gt;
+		this.mvTitle.innerText = Mojo.Format.formatDate(this.monthDate, $L(&amp;quot;MMM yyyy&amp;quot;)) + &amp;quot;, &amp;quot; + $L(&amp;quot;Week&amp;quot;) + &amp;quot; &amp;quot; + firstWeek + &amp;quot;-&amp;quot; + lastWeek; // Localize this date format string&lt;br /&gt;
   	},&lt;br /&gt;
 &lt;br /&gt;
  	buildDayHeader: function() {&lt;br /&gt;
@@ -359,26 +382,39 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 			calStyle = getCalendarsManager().getCalColorStyle('id'+getCurrentCal());&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
+&lt;br /&gt;
 		var weekCell = this._months.rows[0];&lt;br /&gt;
 		var dayCell = weekCell.cells[0];&lt;br /&gt;
 		&lt;br /&gt;
+		var cls;&lt;br /&gt;
 		var days = response.days;&lt;br /&gt;
 		var daylen = days.length - 1; // We get back more days of info that we want - 1 more in fact, because its inclusive, rather than exclusive&lt;br /&gt;
 		for (var d = 0; d &amp;lt; daylen; d++) &lt;br /&gt;
 		{&lt;br /&gt;
 			var day = this._token2state(days.charCodeAt(d));&lt;br /&gt;
-			&lt;br /&gt;
+&lt;br /&gt;
+			var bgcolor = &amp;quot;&amp;quot;;&lt;br /&gt;
+			if (this.fullEvts[d].allDayEvents.length &amp;gt; 1)&lt;br /&gt;
+			{&lt;br /&gt;
+				bgcolor = &amp;quot;gray&amp;quot;;&lt;br /&gt;
+			}&lt;br /&gt;
+			else if (this.fullEvts[d].allDayEvents.length == 1)&lt;br /&gt;
+			{&lt;br /&gt;
+				bgcolor = this.colors[this.fullEvts[d].allDayEvents[0].calendarColor];&lt;br /&gt;
+			}&lt;br /&gt;
+&lt;br /&gt;
+//Mojo.Log.error(bgcolor, this.fullEvts[d].allDayEvents.length);&lt;br /&gt;
 			var child = dayCell.firstChild;&lt;br /&gt;
-			var cls;&lt;br /&gt;
 			for (var i = 1; i &amp;lt; 8; i &amp;lt;&amp;lt;= 1)&lt;br /&gt;
 			{&lt;br /&gt;
-				if (day &amp;amp; (i &amp;lt;&amp;lt; 3)) &lt;br /&gt;
+				child.style.backgroundColor = bgcolor;&lt;br /&gt;
+				if (day &amp;amp; (i &amp;lt;&amp;lt; 3))&lt;br /&gt;
 				{&lt;br /&gt;
-					cls = &amp;quot;monthview-busy-time &amp;quot; + calStyle;&lt;br /&gt;
+					cls = &amp;quot;monthview-partly-busy-time &amp;quot; + calStyle;&lt;br /&gt;
 				}&lt;br /&gt;
 				else if (day &amp;amp; i) &lt;br /&gt;
 				{&lt;br /&gt;
-					cls = &amp;quot;monthview-busy-time&amp;quot;;&lt;br /&gt;
+					cls = &amp;quot;monthview-partly-busy-time&amp;quot;;&lt;br /&gt;
 				}&lt;br /&gt;
 				else &lt;br /&gt;
 				{&lt;br /&gt;
@@ -642,6 +678,11 @@ var MonthAssistant = Class.create({&lt;br /&gt;
                 label: $L('Views'),&lt;br /&gt;
                 toggleCmd: 'month',&lt;br /&gt;
                 items: [&lt;br /&gt;
+				{&lt;br /&gt;
+					label:$L('Agenda'),&lt;br /&gt;
+					icon: 'menu-agenda',&lt;br /&gt;
+					command:'agenda'&lt;br /&gt;
+				},&lt;br /&gt;
                 {&lt;br /&gt;
                     label: $L('Day'),&lt;br /&gt;
                     icon: 'menu-day',&lt;br /&gt;
@@ -664,6 +705,9 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.appMenu, {omitDefaultItems:true}, this.appMenuModel);&lt;br /&gt;
 		this.remindersUpdated(); 	// Update missed reminders menu item&lt;br /&gt;
 		&lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;month&amp;quot;);&lt;br /&gt;
+		&lt;br /&gt;
 		this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
   	},&lt;br /&gt;
   &lt;br /&gt;
@@ -729,6 +773,16 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 			} else if (event.command == 'reminders') {&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.controller.stageController.pushScene('reminder-list');&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'month';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/week-assistant.js	2010-01-06 03:09:08.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/week-assistant.js	2010-05-03 21:11:48.000000000 +0200&lt;br /&gt;
@@ -42,6 +42,8 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		this.COL_POS = [0, 45, 91, 137, 183, 229, 275];&lt;br /&gt;
 		this.pendingRender = false;&lt;br /&gt;
 		this.pendingCalendarSettingsUpdate = false;&lt;br /&gt;
+		this.imgAlarm = new Image();&lt;br /&gt;
+		this.imgAlarm.src = &amp;quot;images/alarm-icon.png&amp;quot;;&lt;br /&gt;
 	},&lt;br /&gt;
 					&lt;br /&gt;
 	getEventChangeCallback: function(response) {&lt;br /&gt;
@@ -103,10 +105,12 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 	buildWeekTitle: function() {&lt;br /&gt;
 		var today = Date.today().clearTime();&lt;br /&gt;
 		var dayOfWeek = this.getFirstDayOfWeek(this.weekDate);&lt;br /&gt;
+		var weekNumber = new Date(this.weekDate).getISO8601Week();&lt;br /&gt;
 		&lt;br /&gt;
-		var template = new Template($L(&amp;quot;Week of #{dateStr}&amp;quot;));&lt;br /&gt;
+		var template = new Template($L(&amp;quot;Week&amp;quot;) + &amp;quot; #{weekStr}, &amp;quot; + $L(&amp;quot;#{dateStr}&amp;quot;));&lt;br /&gt;
 		var templateModel = {};&lt;br /&gt;
 		templateModel.dateStr = Mojo.Format.formatDate(dayOfWeek, $L(&amp;quot;MMM d, yyyy&amp;quot;));&lt;br /&gt;
+		templateModel.weekStr = weekNumber;&lt;br /&gt;
 		this.title.innerHTML = template.evaluate(templateModel);&lt;br /&gt;
 		&lt;br /&gt;
 		if (this.changingWeeks)&lt;br /&gt;
@@ -373,6 +377,13 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		var startPos = this.startDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var midPos = this.midDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var endPos = this.endDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
+		&lt;br /&gt;
+		for (var i=1; i&amp;lt;24; i++) {&lt;br /&gt;
+			ctx.fillStyle = &amp;quot;rgb(185, 185, 185)&amp;quot;;&lt;br /&gt;
+			ctx.fillRect(0, i * this.HOUR_HEIGHT - 1, 320, 1);&lt;br /&gt;
+			ctx.fillStyle = &amp;quot;rgb(255, 255, 255)&amp;quot;;&lt;br /&gt;
+			ctx.fillRect(0, i * this.HOUR_HEIGHT, 320, 1);&lt;br /&gt;
+		}&lt;br /&gt;
 &lt;br /&gt;
 		// Draw marker lines&lt;br /&gt;
 		ctx.fillStyle = &amp;quot;rgb(135, 135, 134)&amp;quot;;&lt;br /&gt;
@@ -388,7 +399,16 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 	&lt;br /&gt;
 	renderStartEndDayLabels: function(whichWeek) {&lt;br /&gt;
 		var ctx = this.weeks[whichWeek].ctxEvents;&lt;br /&gt;
-		&lt;br /&gt;
+&lt;br /&gt;
+		// Draw marker labels&lt;br /&gt;
+		ctx.fillStyle = &amp;quot;rgb(0, 0, 0)&amp;quot;;&lt;br /&gt;
+		ctx.font = &amp;quot;bold 14px Prelude&amp;quot;;&lt;br /&gt;
+&lt;br /&gt;
+		for (var i=2; i&amp;lt;24; i+=2) {&lt;br /&gt;
+			var endPos = i * this.HOUR_HEIGHT - 1;&lt;br /&gt;
+			ctx.strokeText(i, 12, endPos + 24);&lt;br /&gt;
+		}&lt;br /&gt;
+		/*&lt;br /&gt;
 		var startPos = this.startDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var midPos = this.midDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var endPos = this.endDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
@@ -401,6 +421,7 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		if (this.midDayMarkerPos != this.startDayMarkerPos &amp;amp;&amp;amp; this.midDayMarkerPos != this.endDayMarkerPos)&lt;br /&gt;
 			ctx.strokeText(this.midDayMarkerTime, 12, midPos + 24);&lt;br /&gt;
 		ctx.strokeText(this.endDayMarkerTime, 17, endPos + 24);&lt;br /&gt;
+		*/&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	renderEmptyWeek: function(whichWeek) {&lt;br /&gt;
@@ -488,8 +509,65 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		&lt;br /&gt;
 		ctx.fillStyle = &amp;quot;rgba(255, 255, 255, 0.10)&amp;quot;;&lt;br /&gt;
 		ctx.fillRect(left+1, top+height-3, width-2, 1);&lt;br /&gt;
+		&lt;br /&gt;
+///&lt;br /&gt;
+//Mojo.Log.error(Object.toJSON(event));&lt;br /&gt;
+		if (event.subject === undefined) {&lt;br /&gt;
+			// get more infos for this event&lt;br /&gt;
+			getCalendarService().getEvent(event.id,&lt;br /&gt;
+					this.getEventDetails.bind(this, whichWeek, whichDay, event),&lt;br /&gt;
+					function(response) {Mojo.Log.error(response.errorText);},&lt;br /&gt;
+					this.controller);&lt;br /&gt;
+		} else {&lt;br /&gt;
+			// Subject&lt;br /&gt;
+			ctx.fillStyle = this.colors[event.calendarColor].text;&lt;br /&gt;
+			ctx.font = &amp;quot;10px Prelude&amp;quot;;&lt;br /&gt;
+			var oldAlign = ctx.textAlign;&lt;br /&gt;
+			var oldBaseline = ctx.textBaseline;&lt;br /&gt;
+			ctx.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
+			ctx.textBaseline = &amp;quot;top&amp;quot;;&lt;br /&gt;
+			&lt;br /&gt;
+			var text = event.subject;&lt;br /&gt;
+			var length = text.length;&lt;br /&gt;
+			var metrics = ctx.measureText(text);&lt;br /&gt;
+			while ((metrics.width &amp;gt; eventMaxWidth-3) &amp;amp;&amp;amp; (length &amp;gt; 0)) {&lt;br /&gt;
+				// too large, try one less&lt;br /&gt;
+				length--;&lt;br /&gt;
+				text = text.substring(0, length);&lt;br /&gt;
+				metrics = ctx.measureText(text);&lt;br /&gt;
+			}&lt;br /&gt;
+			ctx.fillText(text, left+2, top+1);&lt;br /&gt;
+			top += 12&lt;br /&gt;
+			if (text.length &amp;lt; event.subject.length) {&lt;br /&gt;
+				var text = event.subject.substring(text.length);&lt;br /&gt;
+				var length = text.length;&lt;br /&gt;
+				var metrics = ctx.measureText(text);&lt;br /&gt;
+				while ((metrics.width &amp;gt; eventMaxWidth-3) &amp;amp;&amp;amp; (length &amp;gt; 0)) {&lt;br /&gt;
+					// too large, try one less&lt;br /&gt;
+					length--;&lt;br /&gt;
+					text = text.substring(0, length);&lt;br /&gt;
+					metrics = ctx.measureText(text);&lt;br /&gt;
+				}&lt;br /&gt;
+				ctx.fillText(text, left+2, top+1);&lt;br /&gt;
+				top += 12&lt;br /&gt;
+			}&lt;br /&gt;
+			if (event.alarm !== undefined) {&lt;br /&gt;
+				ctx.drawImage(this.imgAlarm, left+1, top+2, 12, 12);&lt;br /&gt;
+			}&lt;br /&gt;
+			ctx.textAlign = oldAlign;&lt;br /&gt;
+			ctx.textBaseline = oldBaseline;&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
 	},&lt;br /&gt;
-	&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+	getEventDetails: function(whichWeek, whichDay, event, details) {&lt;br /&gt;
+		event.subject = details.subject;&lt;br /&gt;
+		event.alarm = details.alarm;&lt;br /&gt;
+		this.renderEvent(whichWeek, whichDay, event);&lt;br /&gt;
+	},&lt;br /&gt;
+///&lt;br /&gt;
+&lt;br /&gt;
 	renderBusyTime: function(whichWeek, whichDay, busy) {&lt;br /&gt;
 		var ctx = this.weeks[whichWeek].ctxEvents;&lt;br /&gt;
 		var marginLeft = 1;&lt;br /&gt;
@@ -712,6 +790,7 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 						{	label:$L('Views'), &lt;br /&gt;
 							toggleCmd:'week', &lt;br /&gt;
 							items:[&lt;br /&gt;
+								{label:$L('Agenda'), icon: 'menu-agenda', command:'agenda'},&lt;br /&gt;
 								{label:$L('Day'), icon: 'menu-day', command:'day'}, &lt;br /&gt;
 								{label:$L('Week'), icon: 'menu-week', command:'week'}, &lt;br /&gt;
 								{label:$L('Month'), icon: 'menu-month', command:'month'}&lt;br /&gt;
@@ -723,6 +802,9 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.commandMenu, undefined, this.menuModel);&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.appMenu, {omitDefaultItems:true}, this.appMenuModel);&lt;br /&gt;
 		this.remindersUpdated(); 	// Update missed reminders menu item&lt;br /&gt;
+&lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;week&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
     	this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
 		&lt;br /&gt;
@@ -791,6 +873,16 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 			} else if (event.command == 'reminders') {&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.controller.stageController.pushScene('reminder-list');&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'week';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/javascripts/datejs/week.js	1970-01-01 01:00:00.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/javascripts/datejs/week.js	2010-05-03 21:17:06.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,44 @@&lt;br /&gt;
+Date.prototype.getWeek = function() {&lt;br /&gt;
+	var date = new Date(this);&lt;br /&gt;
+	var year = date.getFullYear();&lt;br /&gt;
+	var month = date.getMonth();&lt;br /&gt;
+	var day = date.getDate();&lt;br /&gt;
+	&lt;br /&gt;
+	var when = new Date(year,month,day);&lt;br /&gt;
+	var newYear = new Date(year,0,1);&lt;br /&gt;
+	var modDay = newYear.getDay();&lt;br /&gt;
+&lt;br /&gt;
+	if(this.startDay != 1)&lt;br /&gt;
+		if (modDay == 0) modDay=6; else modDay--;&lt;br /&gt;
+&lt;br /&gt;
+	var daynum = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) -&lt;br /&gt;
+		Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;&lt;br /&gt;
+&lt;br /&gt;
+	if (modDay &amp;lt; 4 ) {&lt;br /&gt;
+		var weekno = Math.floor((daynum+modDay-1)/7)+1;&lt;br /&gt;
+	}&lt;br /&gt;
+	else {&lt;br /&gt;
+		var weekno = Math.floor((daynum+modDay-1)/7);&lt;br /&gt;
+	&lt;br /&gt;
+		if (weekno == 0) {&lt;br /&gt;
+			year--;&lt;br /&gt;
+		&lt;br /&gt;
+			var prevNewYear = new Date(year,0,1);&lt;br /&gt;
+			var prevmodDay = prevNewYear.getDay();&lt;br /&gt;
+			if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--;&lt;br /&gt;
+			if (prevmodDay &amp;lt; 4) weekno = 53; else weekno = 52;&lt;br /&gt;
+		}&lt;br /&gt;
+	}&lt;br /&gt;
+&lt;br /&gt;
+	return weekno;&lt;br /&gt;
+};&lt;br /&gt;
+&lt;br /&gt;
+Date.prototype.getISO8601Week = function() {&lt;br /&gt;
+	var d = new Date(this);&lt;br /&gt;
+	d.setUTCDate(d.getUTCDate() - (d.getUTCDay() + 6) % 7 + 3);&lt;br /&gt;
+	var ms = d.valueOf();&lt;br /&gt;
+	d.setUTCMonth(0, 4);&lt;br /&gt;
+	var w = Math.round((ms - d.valueOf()) / 604800000) + 1;&lt;br /&gt;
+	if (w &amp;lt;= 9) { w = &amp;quot;0&amp;quot; + w; }&lt;br /&gt;
+	return w;&lt;br /&gt;
+};&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/sources.json	2009-12-15 01:57:53.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/sources.json	2010-05-03 21:14:12.000000000 +0200&lt;br /&gt;
@@ -3,6 +3,9 @@&lt;br /&gt;
     &amp;quot;source&amp;quot;: &amp;quot;javascripts\/datejs\/date.js&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
+    &amp;quot;source&amp;quot;: &amp;quot;javascripts\/datejs\/week.js&amp;quot;&lt;br /&gt;
+  },&lt;br /&gt;
+  {&lt;br /&gt;
     &amp;quot;source&amp;quot;: &amp;quot;javascripts\/recurrence-rule.js&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name: UberCalendar_css&lt;br /&gt;
Version: 1.4.0-5&lt;br /&gt;
Author: metaview, frause&lt;br /&gt;
Description: Enhance the calendar views. (MIT license)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/calendar.css	2010-01-22 21:26:25.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/calendar.css	2010-05-01 21:16:44.000000000 +0200&lt;br /&gt;
@@ -59,6 +59,10 @@&lt;br /&gt;
 		background-image: url(../images/menu-icon-day.png);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+.palm-menu-icon.menu-agenda {&lt;br /&gt;
+		background-image: url(../images/menu-icon-agenda.png);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 .palm-menu-icon.edit {&lt;br /&gt;
 		background-image: url(../images/menu-icon-compose.png);&lt;br /&gt;
 }&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/event-colors.css	2009-06-13 01:46:10.000000000 +0200&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/event-colors.css	2010-05-02 15:33:56.000000000 +0200&lt;br /&gt;
@@ -15,15 +15,26 @@ Copyright 2009 Palm, Inc.  All rights re&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 /* Month View: busy time */&lt;br /&gt;
-.monthview-busy-time.cal-color-blue 				{ background: url(../images/month-busy-time-blue.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-green 				{ background: url(../images/month-busy-time-green.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-yellow 				{ background: url(../images/month-busy-time-yellow.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-gray 				{ background: url(../images/month-busy-time-gray.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-orange 				{ background: url(../images/month-busy-time-orange.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-pink 				{ background: url(../images/month-busy-time-pink.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-red 					{ background: url(../images/month-busy-time-red.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-purple 				{ background: url(../images/month-busy-time-purple.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-teal 				{ background: url(../images/month-busy-time-teal.png) 0 0 fixed repeat; }&lt;br /&gt;
+.monthview-busy-time.cal-color-blue 				{ background: url(../images/month-busy-time-blue.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-green 				{ background: url(../images/month-busy-time-green.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-yellow 				{ background: url(../images/month-busy-time-yellow.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-gray 				{ background: url(../images/month-busy-time-gray.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-orange 				{ background: url(../images/month-busy-time-orange.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-pink 				{ background: url(../images/month-busy-time-pink.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-red 					{ background: url(../images/month-busy-time-red.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-purple 				{ background: url(../images/month-busy-time-purple.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-teal 				{ background: url(../images/month-busy-time-teal.png) right 0 fixed repeat-y; }&lt;br /&gt;
+&lt;br /&gt;
+/* Month View: partly busy time */&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-blue 			{ background: url(../images/month-busy-time-blue.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-green 		{ background: url(../images/month-busy-time-green.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-yellow 		{ background: url(../images/month-busy-time-yellow.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-gray 			{ background: url(../images/month-busy-time-gray.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-orange 		{ background: url(../images/month-busy-time-orange.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-pink 			{ background: url(../images/month-busy-time-pink.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-red 			{ background: url(../images/month-busy-time-red.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-purple 		{ background: url(../images/month-busy-time-purple.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-teal 			{ background: url(../images/month-busy-time-teal.png) left center fixed no-repeat; }&lt;br /&gt;
 &lt;br /&gt;
 /* Week View: Events */&lt;br /&gt;
 .wv_event.cal-color-blue,&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/month.css	2009-06-13 01:46:10.000000000 +0200&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/month.css	2010-05-02 14:49:48.000000000 +0200&lt;br /&gt;
@@ -124,12 +124,24 @@&lt;br /&gt;
 		float: left;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+.monthview-partly-busy-time {&lt;br /&gt;
+		background: none;&lt;br /&gt;
+		background-image: url(../images/busy-time.png);&lt;br /&gt;
+		background-repeat: no-repeat;&lt;br /&gt;
+		background-attachment: fixed;&lt;br /&gt;
+		background-position: left center;&lt;br /&gt;
+		/*color: #FF0000;*/&lt;br /&gt;
+		width: 100%;&lt;br /&gt;
+		height: 16px;&lt;br /&gt;
+		float: left;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 .monthview-busy-time {&lt;br /&gt;
 		background: none;&lt;br /&gt;
 		background-image: url(../images/busy-time.png);&lt;br /&gt;
-		background-repeat: repeat;&lt;br /&gt;
+		background-repeat: repeat-y;&lt;br /&gt;
 		background-attachment: fixed;&lt;br /&gt;
-		background-position: 0 0;&lt;br /&gt;
+		background-position: right 0;&lt;br /&gt;
 		/*color: #FF0000;*/&lt;br /&gt;
 		width: 100%;&lt;br /&gt;
 		height: 16px;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=9792</id>
		<title>Portal:Patches to webOS</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Patches_to_webOS&amp;diff=9792"/>
		<updated>2010-05-05T06:04:12Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&lt;br /&gt;
{{portal-header&lt;br /&gt;
|If you need info on how to properly update webOS, see [[Portal:Updating webOS Versions|Updating webOS Versions]].&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;nowiki&amp;gt;***THIS PAGE IS OUT OF DATE, PLEASE HELP IN REORGANIZING IT***&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''A more updated list of patches, descriptions, and discussion links is here: [http://forums.precentral.net/webos-patches/206807-official-patch-discussion.html Official Patch Discussion]'''&lt;br /&gt;
&lt;br /&gt;
This page lists patches to webOS existing apps which modify the behavior as shipped.  '''Note''' that these patches may be version specific and may be broken by future webOS updates.  Proceed with caution. If you get one that works please move it under the correct column, alphabetically, and title the page:&lt;br /&gt;
'''&amp;quot;Patch [application] [description]&amp;quot;''' (for application specific patches) &amp;lt;br&amp;gt;&lt;br /&gt;
'''&amp;quot;Patch webOS [description]&amp;quot;''' (for patches not part of a specific application)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each page should contain at least the basic headings&lt;br /&gt;
*1. '''Introduction''': A brief description to introduce people to the patch.&lt;br /&gt;
**1.1 '''Usage''':An explanation if it is needed on how to use the modification see Add/Delete Pages in the Launcher as an example.&lt;br /&gt;
*2. '''Editing Process''': Step by step instructions to manually edit. &lt;br /&gt;
*3. '''Patching Process''': Details for making the edits with a patch file and pointing people to the [[Applying Patches]] page if the patch is also provided in the webos-internals gitorious repository.&lt;br /&gt;
&lt;br /&gt;
For patches that aren't listed here you'll also want to check out the gitorious repository at http://gitorious.org/webos-internals/modifications/trees/master&lt;br /&gt;
&lt;br /&gt;
Please refer to '''[[MIT_Open_Source_License_-_webOS-Patches| MIT Open Source License - webOS-Patches]]''' for important information regarding patches and licensing.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
===webOS Update Information===&lt;br /&gt;
* [[Update 1.3.5|Update 1.3.5]]&lt;br /&gt;
* [[Update 1.3.1|Update 1.3.1]]&lt;br /&gt;
* [[Update 1.2.1|Update 1.2.1]]&lt;br /&gt;
* [[Update 1.2.0|Update 1.2]]&lt;br /&gt;
* [[Update 1.1.0|Update 1.1]]&lt;br /&gt;
* [[Update 1.0.4|Update 1.0.4]] &lt;br /&gt;
* [[Update 1.0.3|Update 1.0.3]]&lt;br /&gt;
&lt;br /&gt;
===Patches that Need Work===&lt;br /&gt;
* [[Bugs]]&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
===Patch Ideas to be Created or in Progress===&lt;br /&gt;
&lt;br /&gt;
* [[More_Calculator_Functions|Accessing additional built-in calculator functions]]&lt;br /&gt;
* [[Add_Ability_To_Choose_Snooze_Length|Add Ability to Choose Snooze Length]]&lt;br /&gt;
* [[Add_Icon_To_Quick_Launcher|Add an icon to the quick launcher]]&lt;br /&gt;
* [[Changing Clipboard Data From The Shell|Changing Clipboard Data from the Shell]]&lt;br /&gt;
* [[Development_%26_Tweak_Ideas | Development &amp;amp; Tweaking Ideas]]&lt;br /&gt;
* [[Longer Vibrate|Longer Vibrate]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
===Notes===&lt;br /&gt;
These modifications lack a patch process, please add one to the details to the page and have it added to the webOS-internals gitorious repository. Info for the repository is on [[Applying Patches]].&lt;br /&gt;
&lt;br /&gt;
*Empty&lt;br /&gt;
}}&lt;br /&gt;
{{portal-three-columns&lt;br /&gt;
|column1= &lt;br /&gt;
==Current Patches==&lt;br /&gt;
===webOS 1.3.1 OK===&lt;br /&gt;
* [[Patch Calendar Notification Repeat|Calendar: Notification Repeat]]&lt;br /&gt;
* [[Patch Calendar Snooze Duration Selection|Calendar: Snooze Duration Selection]]&lt;br /&gt;
* [[Patch Clock Add space between Snooze and Dismiss buttons|Clock: Add space between Snooze and Dismiss buttons]]&lt;br /&gt;
* ++[[Patch Contacts Send All via Email|Contacts: Send All via Email]]&lt;br /&gt;
* ++[[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* ++[[Patch_Email_Change_Default_Font_for_Replies-Forwards_from_Navy_to_Black|Email: Change default font on replies/forwards from dark blue to black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All Read All]]&lt;br /&gt;
* [[Patch Email DeleteFromNotificationBar|Email: Delete from notification bar]]&lt;br /&gt;
* [[Patch Email Notification Repeat|Email: Notification Repeat]]&lt;br /&gt;
* [[Patch Change Carrier String|Change Carrier String]]&lt;br /&gt;
* [[Patch Launcher Wrap Pages|Launcher: Wrap Pages]]&lt;br /&gt;
* [[Patch Launcher Reset Scroll on Page Change|Launcher: Reset Scroll on Page Change]]&lt;br /&gt;
* [[Patch Launcher Reset to First Page|Launcher: Reset to First Page]]&lt;br /&gt;
* [[Patch Launcher Reset to Middle Page|Launcher: Reset to Middle Page]]&lt;br /&gt;
* [[Patch Messaging Notification Repeat|Messaging: Notification Repeat]]&lt;br /&gt;
* [[Patch Phone Notification Repeat|Phone: Notification Repeat]]&lt;br /&gt;
* [[Patch webOS Browser: Show All Bookmarks (Not just first 12)]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS BypassPINLock]]&lt;br /&gt;
===webOS 1.2.1 OK===&lt;br /&gt;
* ++[[Patch Browser Global Search Addons|Browser: Global Search Addons]]&lt;br /&gt;
* [[Patch Browser Delete Individual History Items|Browser: Delete Individual History Items]]&lt;br /&gt;
* [[Patch Calendar Notification Repeat|Calendar: Notification Repeat]]&lt;br /&gt;
* [[Patch Calendar Snooze Duration Selection|Calendar: Snooze Duration Selection]]&lt;br /&gt;
* [[Patch Clock Add space between Snooze and Dismiss buttons|Clock: Add space between Snooze and Dismiss buttons]]&lt;br /&gt;
* [[Patch Clock Enabling the Hidden Theme|Clock: Enabling the Hidden Theme]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Button Order|Clock: Change Alarm Button Order]]&lt;br /&gt;
* ++[[Patch Clock Change Alarm Snooze Length|Clock: Change Alarm Snooze Length]]&lt;br /&gt;
* [[Patch Camera Easy Shutter Sound Off|Camera: Easy Shutter Sound Off]] - Called: Sound Toggle - Green (and Grey)&lt;br /&gt;
** also [[Patch Camera Shutter Sound On-Off Button|Camera: Shutter Sound On-Off Button]]&lt;br /&gt;
** also [[Camera Mod Alternate Sound Disable]]&lt;br /&gt;
* [[Patch Camera Using Volume Buttons to Take a Picture|Camera: Using Volume Buttons to Take a Picture]]&lt;br /&gt;
* [[Patch Email Confirm Deletion|Email: Confirm Deletion]]&lt;br /&gt;
* [[Patch Email Change Default Font for Replies-Forwards from Navy to Black|Email: Change Default Font for Replies/Forwards from Navy to Black]]&lt;br /&gt;
* [[Patch Email DeleteAll|Email: Delete All Read All]]&lt;br /&gt;
* [[Patch Email DeleteFromNotificationBar|Email: Delete from notification bar]]&lt;br /&gt;
* [[Patch Email Enable Landscape Viewing|Email: Enable Landscape Viewing]] &lt;br /&gt;
* [[Patch Email Notification Repeat|Email: Notification Repeat]]&lt;br /&gt;
* [[Patch Launcher Add or Delete Pages|Launcher: Add/Delete Pages]]&lt;br /&gt;
* [[Patch Launcher Hide-Delete The NASCAR App|Launcher: Hide/Delete The NASCAR App]]&lt;br /&gt;
* ++[[Patch Launcher Hide Media Sync Option|Launcher: Hide Media Sync Option]]&lt;br /&gt;
* [[Patch Launcher Unhide the DeveloperMode App|Launcher: Unhide the DeveloperMode App]]&lt;br /&gt;
* [[Patch Launcher To Allow More Icons Per Row|Launcher: Allows More Icons Per Row]]&lt;br /&gt;
* [[Patch Launcher Wrap Pages|Launcher: Wrap Pages]]&lt;br /&gt;
* [[Myavatar In Messaging App|Messaging: Avatar In Messaging App]] &lt;br /&gt;
* [[Patch Messaging Character Counter|Messaging: Character Counter]]&lt;br /&gt;
* [[Patch Messaging Display Full Status Messages|Messaging: Display Full Status Messages]]&lt;br /&gt;
* [[Patch Messaging Change &amp;quot;Enter Key&amp;quot; To Create Newline|Messaging: Change &amp;quot;Enter Key&amp;quot; To Create Newline]]&lt;br /&gt;
* [[Patch Messaging Force Offline Send Without Dialog|Messaging: Force Offline Send Without Dialog]]&lt;br /&gt;
* [[Patch Messaging Forward Messages|Messaging: Forward Messages]]&lt;br /&gt;
* [[Patch Messaging Jump Forward, Backward One Word at a Time|Messaging: Jump Forward, Backward One Word at a Time]]&lt;br /&gt;
* [[Patch Messaging Landscape Orientation|Messaging: Landscape Orientation]]&lt;br /&gt;
* [[Patch Messaging New Cards For Each Conversation|Messaging: New Cards For Each Conversation]]&lt;br /&gt;
* [[Patch Messaging Adding Timestamps to All Received Messages|Messaging: Adding Timestamps to All Received Messages]] - Three Options: Builtin, Clean, and Fancy&lt;br /&gt;
* [[Patch Messaging Notification Repeat|Messaging: Notification Repeat]]&lt;br /&gt;
* [[Patch Messaging Sounds|Messaging: Message Sound]] - Called SMS Tone Per Contact&lt;br /&gt;
* ++[[Patch MediaPlayer Ignore 'A', 'An', and 'The' In Artist and Album names|Music Player: Ignore 'A', 'An', and 'The' in Artist and Album Names]]&lt;br /&gt;
* [[Patch PDF Viewer Change Orientation|PDF Viewer: Change Orientation]]&lt;br /&gt;
* [[Patch Phone Show Call Duration in the Call Log|Phone: Show Call Duration in the Call Log]]&lt;br /&gt;
* [[Patch Phone Disable Various Call Sounds|Phone: Disable Various Call Sounds]]&lt;br /&gt;
* [[Patch Phone Notification Repeat|Phone: Notification Repeat]]&lt;br /&gt;
* [[Patch Tasks Always Show Details of New Tasks|Tasks: Always Show Details of New Tasks]]&lt;br /&gt;
* ++[[Patch Youtube Landscape Orientation|Youtube: Landscape Orientation]]&lt;br /&gt;
&lt;br /&gt;
===webOS Patches===&lt;br /&gt;
* [[Patch Enable LED Notifications|Enable LED Notifications]]&lt;br /&gt;
* [[On Screen Keyboard]]&lt;br /&gt;
* [[Patch webOS Brightness|Brightness]]&lt;br /&gt;
* [[Change_the_default_notification.wav_Sound|Change the Default notification.wav Sound]] - use SMS Tone Per Contact&lt;br /&gt;
** Also [[Changes_Alert/Notification_Sounds|Changes Alert/Notification Sounds]]&lt;br /&gt;
* [[Patch webOS Changing the &amp;quot;Turn off after X&amp;quot; time|Changing the &amp;quot;Turn off after X&amp;quot; Time]]&lt;br /&gt;
* [[Patch webOS Disable Charging Event Sounds|Disable Charging Event Sounds]]&lt;br /&gt;
* [[Patch webOS Workaround for Touchstone Charging Event Problem|Workaround for Touchstone Charging Event Problem]]&lt;br /&gt;
* [[Patch webOS Add Words to AutoCorrect Dictionary|Modify AutoCorrect Dictionary]]&lt;br /&gt;
* [[Patch webOS Radio Power Switch|Radio Power Switch]]&lt;br /&gt;
* [[Patch webOS Roam Control|Roam Control]]&lt;br /&gt;
* [[Patch webOS Show Actual Battery Percentage | Show Actual Battery Percentage]]&lt;br /&gt;
* [[Patch webOS Turning Off Dialpad Noise|Turning Off Dialpad Noise]]&lt;br /&gt;
* [[Uber Calendar]] - Enhance calendar views and add week number&lt;br /&gt;
&lt;br /&gt;
|column2=&lt;br /&gt;
&lt;br /&gt;
==Previous Patches==&lt;br /&gt;
===webOS 1.2 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
* ++[[Patch Phone Edit Dialer Theme|Phone: Edit Dialer Theme]]&lt;br /&gt;
* [[Patch MediaPlayer Bookmarking|Music Player: Bookmarking]] only works in 1.2.1 podcast, speech, spoken word, netcast, or audiobook genres&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.2 - No longer needed===&lt;br /&gt;
* [[Patch Amazon Download Music over EVDO|Amazon: Download Music over EVDO]]&lt;br /&gt;
* [[Patch Browser Downloading Files|Browser: Downloading Files]] &lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
* [[Patch Calendar Show All-Day Events in Month View|Calendar: Show All-Day Events in Month View]] &lt;br /&gt;
* ++[[Patch Camera 10 Second Countdown Timer|Camera: 10 Second Countdown Timer]]&lt;br /&gt;
* ++[[Patch Email Change &amp;quot;Running Late&amp;quot; Message|Email: Change &amp;quot;Running Late&amp;quot; Message]]&lt;br /&gt;
* ++[[Patch MCraig Enabling Personals Category|mCraig: Enabling Personals Category]]&lt;br /&gt;
* ++[[Patch Phone Editing the Lock Screen|Phone: Editing the Lock Screen]]&lt;br /&gt;
* ++[[Patch WebOS Bypassing Lock Screen|Unlock: Bypass the Passcode Entry Screen]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* [[Patch Email Fix Broken Formatting|Email: Fix Broken Formatting for E-mails]]&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch Camera Remote View|Camera: Remote View]]&lt;br /&gt;
* [[Patch Email Fix Attachments|Email: Fix Attachments]]&lt;br /&gt;
* [[Patch Sudoku Disable Zooming|Sudoku: Disable Zooming]]&lt;br /&gt;
&lt;br /&gt;
===webOS 1.1 OK===&lt;br /&gt;
++ Indicates needs to be added to the git repository. Please help add them and remove the notation when added.&lt;br /&gt;
* ++[[Patch webOS Boot Themes|Boot Themes]]&lt;br /&gt;
* ++[[Patch webOS Bypassing Activation|Bypassing Activation]]&lt;br /&gt;
* ++[[Patch webOS CPU Frequency or Voltage Scaling|CPU Frequency or Voltage Scaling]]&lt;br /&gt;
* ++[[Patch webOS GPS Tracking|GPS Tracking]]&lt;br /&gt;
* ++[[Patch webOS Graphics|Graphics]]&lt;br /&gt;
* ++[[Patch webOS Hourly Chime|Hourly Chime]] &lt;br /&gt;
* ++[[Patch webOS Keep Phone Awake While in Remote Session|Keep Phone Awake While in Remote Session]]&lt;br /&gt;
* [[Patch webOS Logging Information from Within Scripts|Logging Information from Within Scripts]]&lt;br /&gt;
* [[Patch webOS Modifying a Stock App While Keeping the Original|Modifying a Stock App While Keeping the Original]] &lt;br /&gt;
* ++[[Patch webOS Random Wallpaper Switching|Random Wallpaper Switching]]&lt;br /&gt;
* [[Patch webOS Reverse Tunnel|Reverse Tunnel]] &lt;br /&gt;
* [[Screenlock On When Connected|Stay On While Connected]]&lt;br /&gt;
* [[Make USB Partition Writable via SFTP|Make USB Partition writable via SFTP]]&lt;br /&gt;
&lt;br /&gt;
===Fixed in 1.1 - No longer needed===&lt;br /&gt;
* Empty&lt;br /&gt;
&lt;br /&gt;
===Not 1.1 compatible===&lt;br /&gt;
* [[Patch webOS Email App Patch to Prompt for IPK Installation|Email App Patch to Prompt for IPK Installation]] &lt;br /&gt;
&lt;br /&gt;
|column3=&lt;br /&gt;
==== The following have not been checked for compatibility with webOS 1.1. ====&lt;br /&gt;
* [[Browser_Plugins|Browser Plugins]]&lt;br /&gt;
* [[Photos Slideshow|Photos Slideshow]] &lt;br /&gt;
&lt;br /&gt;
==== The following are deprecated.  They have been replaced with methods which are easier or are moot in 1.1 ====&lt;br /&gt;
&lt;br /&gt;
* [[Installing Homebrew Apps With A Rooted Pre|Installing Homebrew Apps With A Linux Accessed Pre]]  &lt;br /&gt;
* [[Packaging Homebrew Apps for Stock Pre without Rooting|Packaging Homebrew Apps for Stock Pre without Accessing Linux]] &lt;br /&gt;
* [[Modifying Stock Applications|Modifying Stock Applications]] &lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=9784</id>
		<title>Uber Calendar</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=9784"/>
		<updated>2010-05-04T18:36:36Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are 2 patch files for the JS source and for the CSS. There are also 2 small icons which need to be copied into the images folder. The icons are here: [http://www.metaviewsoft.de/Calendar/menu-icon-agenda.png Agenda icon] and [http://www.metaviewsoft.de/Calendar/alarm-icon.png Alarm bell]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name: UberCalendar&lt;br /&gt;
Version: 1.4.0-5&lt;br /&gt;
Author: metaview, frause&lt;br /&gt;
Description: Enhance the calendar views. (MIT license)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/app-assistant.js	2010-01-22 04:25:18.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/app-assistant.js	2010-05-02 11:48:42.000000000 +0200&lt;br /&gt;
@@ -489,7 +489,15 @@ var AppAssistant = Class.create({&lt;br /&gt;
 			this.firstUseManager = new FirstUseManager(stageController);&lt;br /&gt;
 		} else {&lt;br /&gt;
 			// Otherwise show the Day View&lt;br /&gt;
-			stageController.pushScene({name: &amp;quot;day&amp;quot;, transition: Mojo.Transition.crossFade, disableSceneScroller: true});&lt;br /&gt;
+			var view = &amp;quot;day&amp;quot;;&lt;br /&gt;
+			var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+			try {&lt;br /&gt;
+				view = cookie.get();&lt;br /&gt;
+			} catch (e) {}&lt;br /&gt;
+			if ((view != &amp;quot;month&amp;quot;) &amp;amp;&amp;amp; (view != &amp;quot;week&amp;quot;)) {&lt;br /&gt;
+				view = &amp;quot;day&amp;quot;;&lt;br /&gt;
+			}&lt;br /&gt;
+			stageController.pushScene({name: view, transition: Mojo.Transition.crossFade, disableSceneScroller: true});&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/day-assistant.js	2010-02-09 23:08:26.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/day-assistant.js	2010-05-03 21:10:34.000000000 +0200&lt;br /&gt;
@@ -42,6 +42,8 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		this.pendingCalendarSettingsUpdate = false;&lt;br /&gt;
 		//this.pendingOpenScratchEventInDetails = false;&lt;br /&gt;
 		this.snapEffectCount = 0;&lt;br /&gt;
+		this.imgAlarm = new Image();&lt;br /&gt;
+		this.imgAlarm.src = &amp;quot;images/alarm-icon.png&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 		&lt;br /&gt;
 		this.hourHeight = 48;&lt;br /&gt;
@@ -212,17 +214,23 @@ var DayAssistant = Class.create({&lt;br /&gt;
 	buildDayTitle: function(doScrim) {&lt;br /&gt;
 		var today = Date.today().clearTime();&lt;br /&gt;
 		var dayDateNoTime = new Date(this.dayDate).clearTime();&lt;br /&gt;
+		var weekNumber = new Date(this.dayDate).getISO8601Week();&lt;br /&gt;
 		&lt;br /&gt;
 		if (dayDateNoTime.compareTo(today) == 0) {&lt;br /&gt;
-			var template = new Template($L(&amp;quot;#{todayStr}, #{dateStr}&amp;quot;));&lt;br /&gt;
+			var template = new Template($L(&amp;quot;#{todayStr}, #{dateStr}&amp;quot;) + &amp;quot;, W#{weekStr}&amp;quot;);&lt;br /&gt;
 			var todayStr= Mojo.Format.formatRelativeDate(today, {date: &amp;quot;short&amp;quot;}).capitalize();&lt;br /&gt;
 			&lt;br /&gt;
 			var templateModel = {};&lt;br /&gt;
 			templateModel.todayStr = todayStr;&lt;br /&gt;
+			templateModel.weekStr = weekNumber;&lt;br /&gt;
 			templateModel.dateStr = Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d&amp;quot;));&lt;br /&gt;
 			this.controller.get('dv_title').update(template.evaluate(templateModel)); // Localize this date format string&lt;br /&gt;
 		} else {&lt;br /&gt;
-			this.controller.get('dv_title').update(Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d, yyyy&amp;quot;))); // Localize this date format string&lt;br /&gt;
+			var template = new Template($L(&amp;quot;#{dateStr}&amp;quot;) + &amp;quot;, W#{weekStr}&amp;quot;);&lt;br /&gt;
+			var templateModel = {};&lt;br /&gt;
+			templateModel.weekStr = weekNumber;&lt;br /&gt;
+			templateModel.dateStr = Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d, yyyy&amp;quot;));&lt;br /&gt;
+			this.controller.get('dv_title').update(template.evaluate(templateModel)); // Localize this date format string&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		if (doScrim) {&lt;br /&gt;
@@ -702,6 +710,8 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		//Mojo.Log.info(&amp;quot;day-assistant: renderEvent&amp;quot;);&lt;br /&gt;
 		if (this.animating &amp;amp;&amp;amp; !event.animatible)&lt;br /&gt;
 			return;&lt;br /&gt;
+&lt;br /&gt;
+//Mojo.Log.error(Object.toJSON(event));&lt;br /&gt;
 	&lt;br /&gt;
 		var ctx = this.divs[whichDay].ctxEvents;&lt;br /&gt;
 		var marginLeft = 28;&lt;br /&gt;
@@ -743,6 +753,17 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		ctx.fillRect(left+1, top+height-3, width-2, 1);&lt;br /&gt;
 		&lt;br /&gt;
 		var textTop = top + 30;&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+		// Alarm&lt;br /&gt;
+		if (event.gotFullDetails === undefined) {&lt;br /&gt;
+			// get more infos for this event&lt;br /&gt;
+			getCalendarService().getEvent(event.id,&lt;br /&gt;
+					this.getEventDetails.bind(this, whichDay, event, selected, ghost),&lt;br /&gt;
+					function(response) {Mojo.Log.error(response.errorText);},&lt;br /&gt;
+					this.controller);&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
 		&lt;br /&gt;
 		// Subject&lt;br /&gt;
 		ctx.fillStyle = this.colors[event.calendarColor].text;&lt;br /&gt;
@@ -753,8 +774,14 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		var subjectTop = top+15;&lt;br /&gt;
 		if (bottom &amp;gt;= (top + height))&lt;br /&gt;
 			subjectTop = top+17;	// no room for location or note, therefore vertically center subject text&lt;br /&gt;
-		this.fillText(event.subject, ctx, left+4, subjectTop, width, bottom, 15 /*line height*/);	&lt;br /&gt;
-		&lt;br /&gt;
+		this.fillText(event.subject, ctx, left+4, subjectTop, width-((event.alarm !== undefined) ? 18 : 0), bottom, 15 /*line height*/);	&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+		if (event.alarm !== undefined) {&lt;br /&gt;
+			ctx.drawImage(this.imgAlarm, left+4+width-18, subjectTop+1, 12, 12);&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
+&lt;br /&gt;
 		// Location&lt;br /&gt;
 		if (event.location &amp;amp;&amp;amp; (event.location.length &amp;gt; 0) &amp;amp;&amp;amp; (textTop &amp;lt; (top + height))) {&lt;br /&gt;
 			ctx.font = &amp;quot;italic bold 14px Prelude&amp;quot;;&lt;br /&gt;
@@ -769,7 +796,7 @@ var DayAssistant = Class.create({&lt;br /&gt;
 			bottom = top+height;&lt;br /&gt;
 			this.fillText(event.note, ctx, left+4, textTop-2, width, bottom-2, 12 /*line height*/);			&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
+&lt;br /&gt;
 		if (ghost) {&lt;br /&gt;
 			var selectedColor = &amp;quot;rgba(228, 228, 226, 0.85)&amp;quot;&lt;br /&gt;
 			ctx.fillStyle = selectedColor;&lt;br /&gt;
@@ -789,6 +816,14 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		  ctx.fillRect(left, top, width, height);&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+	getEventDetails: function(whichDay, event, selected, ghost, details) {&lt;br /&gt;
+		event.alarm = details.alarm;&lt;br /&gt;
+		event.gotFullDetails = true;&lt;br /&gt;
+		this.renderEvent(whichDay, event, selected, ghost);&lt;br /&gt;
+	},&lt;br /&gt;
+///&lt;br /&gt;
 	&lt;br /&gt;
 	getAllDayDimensions: function(index, event) {&lt;br /&gt;
 		var marginLeft = 4;&lt;br /&gt;
@@ -1828,6 +1863,7 @@ var DayAssistant = Class.create({&lt;br /&gt;
 						{label:$L('Views'), &lt;br /&gt;
 						toggleCmd:'day', &lt;br /&gt;
 						items:[&lt;br /&gt;
+							{label:$L('Agenda'), icon: 'menu-agenda', command:'agenda'},&lt;br /&gt;
 							{label:$L('Day'), icon: 'menu-day', command:'day'}, &lt;br /&gt;
 							{label:$L('Week'), icon: 'menu-week', command:'week'}, &lt;br /&gt;
 							{label:$L('Month'), icon: 'menu-month', command:'month'}&lt;br /&gt;
@@ -1854,6 +1890,9 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(this.divs[this.PREV_DAY].alldayevents_scroller, undefined, {mode: 'vertical'});&lt;br /&gt;
 		this.controller.setupWidget(this.divs[this.NEXT_DAY].alldayevents_scroller, undefined, {mode: 'vertical'});&lt;br /&gt;
 &lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;day&amp;quot;);&lt;br /&gt;
+&lt;br /&gt;
    		this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
 		&lt;br /&gt;
 		// IMPORTANT: Set up the height of the scrollers.  If this is not done&lt;br /&gt;
@@ -2095,6 +2134,17 @@ var DayAssistant = Class.create({&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.maybeCommitScratchEvent(true);&lt;br /&gt;
 				this.syncAllCalendars();&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.maybeCommitScratchEvent(true);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'day';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		} else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			// Enable prefs menuitem for this scene.&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/month-assistant.js	2010-01-06 03:09:08.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/month-assistant.js	2010-05-03 21:11:06.000000000 +0200&lt;br /&gt;
@@ -5,6 +5,7 @@ var MONTH_DAY_ID_FORMAT = 'MMMM dd yyyy'&lt;br /&gt;
 var MonthAssistant = Class.create({&lt;br /&gt;
 				&lt;br /&gt;
 	reminderMenuItemId: 3,&lt;br /&gt;
+	fullEvts: null,&lt;br /&gt;
 	&lt;br /&gt;
 	initialize: function() {&lt;br /&gt;
  		this.appMenuModel = { visible:true, &lt;br /&gt;
@@ -22,12 +23,28 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 				&lt;br /&gt;
 		this.scrollerModel = { scrollbars: false, mode: &amp;quot;vertical-snap&amp;quot;, snapIndex: 0, snapElements: { y: [] } };&lt;br /&gt;
 	},&lt;br /&gt;
+&lt;br /&gt;
+	colors: {&amp;quot;cal-color-blue&amp;quot;: &amp;quot;#91d3ea&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-green&amp;quot;: &amp;quot;#8cf08c&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-yellow&amp;quot;: &amp;quot;#e8e37c&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-gray&amp;quot;: &amp;quot;#c2c2c2&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-orange&amp;quot;: &amp;quot;#fbb474&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-pink&amp;quot;: &amp;quot;#f59cbc&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-red&amp;quot;: &amp;quot;#ff9797&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-purple&amp;quot;: &amp;quot;#d9b7ff&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-teal&amp;quot;: &amp;quot;#72dfd2&amp;quot;},&lt;br /&gt;
 														&lt;br /&gt;
  	setupMonth: function(startDate, endDate, callbackfn) &lt;br /&gt;
 	{&lt;br /&gt;
+		getCalendarService().getEvents('all', startDate.getTime(), endDate.getTime(), this.getEventsCallback.bind(this), this.controller, this.getEventsFailCallback, {useSlices: true});&lt;br /&gt;
 		getCalendarService().getBusyDays(getCurrentCal(), startDate.getTime(), endDate.getTime(), callbackfn, this.controller);&lt;br /&gt;
 	},&lt;br /&gt;
-	&lt;br /&gt;
+&lt;br /&gt;
+	getEventsCallback: function(resp)&lt;br /&gt;
+	{&lt;br /&gt;
+		this.fullEvts = resp.days;&lt;br /&gt;
+	},&lt;br /&gt;
+&lt;br /&gt;
 	buildViewHeader: function() &lt;br /&gt;
 	{&lt;br /&gt;
 		//Mojo.Log.info(&amp;quot;month-assistant: buildViewHeader&amp;quot;);&lt;br /&gt;
@@ -37,7 +54,13 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 	&lt;br /&gt;
 	buildMonthTitle: function() &lt;br /&gt;
 	{&lt;br /&gt;
-		this.mvTitle.innerText = Mojo.Format.formatDate(this.monthDate, $L(&amp;quot;MMM yyyy&amp;quot;)); // Localize this date format string&lt;br /&gt;
+		var wn = new Date(this.monthDate);&lt;br /&gt;
+		wn.setDate(1);&lt;br /&gt;
+		var firstWeek = wn.getISO8601Week();	&lt;br /&gt;
+		wn.setMonth(wn.getMonth()+1);&lt;br /&gt;
+		wn.setDate(wn.getDate()-1);&lt;br /&gt;
+		var lastWeek = wn.getISO8601Week();&lt;br /&gt;
+		this.mvTitle.innerText = Mojo.Format.formatDate(this.monthDate, $L(&amp;quot;MMM yyyy&amp;quot;)) + &amp;quot;, &amp;quot; + $L(&amp;quot;Week&amp;quot;) + &amp;quot; &amp;quot; + firstWeek + &amp;quot;-&amp;quot; + lastWeek; // Localize this date format string&lt;br /&gt;
   	},&lt;br /&gt;
 &lt;br /&gt;
  	buildDayHeader: function() {&lt;br /&gt;
@@ -359,26 +382,39 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 			calStyle = getCalendarsManager().getCalColorStyle('id'+getCurrentCal());&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
+&lt;br /&gt;
 		var weekCell = this._months.rows[0];&lt;br /&gt;
 		var dayCell = weekCell.cells[0];&lt;br /&gt;
 		&lt;br /&gt;
+		var cls;&lt;br /&gt;
 		var days = response.days;&lt;br /&gt;
 		var daylen = days.length - 1; // We get back more days of info that we want - 1 more in fact, because its inclusive, rather than exclusive&lt;br /&gt;
 		for (var d = 0; d &amp;lt; daylen; d++) &lt;br /&gt;
 		{&lt;br /&gt;
 			var day = this._token2state(days.charCodeAt(d));&lt;br /&gt;
-			&lt;br /&gt;
+&lt;br /&gt;
+			var bgcolor = &amp;quot;&amp;quot;;&lt;br /&gt;
+			if (this.fullEvts[d].allDayEvents.length &amp;gt; 1)&lt;br /&gt;
+			{&lt;br /&gt;
+				bgcolor = &amp;quot;gray&amp;quot;;&lt;br /&gt;
+			}&lt;br /&gt;
+			else if (this.fullEvts[d].allDayEvents.length == 1)&lt;br /&gt;
+			{&lt;br /&gt;
+				bgcolor = this.colors[this.fullEvts[d].allDayEvents[0].calendarColor];&lt;br /&gt;
+			}&lt;br /&gt;
+&lt;br /&gt;
+//Mojo.Log.error(bgcolor, this.fullEvts[d].allDayEvents.length);&lt;br /&gt;
 			var child = dayCell.firstChild;&lt;br /&gt;
-			var cls;&lt;br /&gt;
 			for (var i = 1; i &amp;lt; 8; i &amp;lt;&amp;lt;= 1)&lt;br /&gt;
 			{&lt;br /&gt;
-				if (day &amp;amp; (i &amp;lt;&amp;lt; 3)) &lt;br /&gt;
+				child.style.backgroundColor = bgcolor;&lt;br /&gt;
+				if (day &amp;amp; (i &amp;lt;&amp;lt; 3))&lt;br /&gt;
 				{&lt;br /&gt;
-					cls = &amp;quot;monthview-busy-time &amp;quot; + calStyle;&lt;br /&gt;
+					cls = &amp;quot;monthview-partly-busy-time &amp;quot; + calStyle;&lt;br /&gt;
 				}&lt;br /&gt;
 				else if (day &amp;amp; i) &lt;br /&gt;
 				{&lt;br /&gt;
-					cls = &amp;quot;monthview-busy-time&amp;quot;;&lt;br /&gt;
+					cls = &amp;quot;monthview-partly-busy-time&amp;quot;;&lt;br /&gt;
 				}&lt;br /&gt;
 				else &lt;br /&gt;
 				{&lt;br /&gt;
@@ -642,6 +678,11 @@ var MonthAssistant = Class.create({&lt;br /&gt;
                 label: $L('Views'),&lt;br /&gt;
                 toggleCmd: 'month',&lt;br /&gt;
                 items: [&lt;br /&gt;
+				{&lt;br /&gt;
+					label:$L('Agenda'),&lt;br /&gt;
+					icon: 'menu-agenda',&lt;br /&gt;
+					command:'agenda'&lt;br /&gt;
+				},&lt;br /&gt;
                 {&lt;br /&gt;
                     label: $L('Day'),&lt;br /&gt;
                     icon: 'menu-day',&lt;br /&gt;
@@ -664,6 +705,9 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.appMenu, {omitDefaultItems:true}, this.appMenuModel);&lt;br /&gt;
 		this.remindersUpdated(); 	// Update missed reminders menu item&lt;br /&gt;
 		&lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;month&amp;quot;);&lt;br /&gt;
+		&lt;br /&gt;
 		this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
   	},&lt;br /&gt;
   &lt;br /&gt;
@@ -729,6 +773,16 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 			} else if (event.command == 'reminders') {&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.controller.stageController.pushScene('reminder-list');&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'month';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/week-assistant.js	2010-01-06 03:09:08.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/week-assistant.js	2010-05-03 21:11:48.000000000 +0200&lt;br /&gt;
@@ -42,6 +42,8 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		this.COL_POS = [0, 45, 91, 137, 183, 229, 275];&lt;br /&gt;
 		this.pendingRender = false;&lt;br /&gt;
 		this.pendingCalendarSettingsUpdate = false;&lt;br /&gt;
+		this.imgAlarm = new Image();&lt;br /&gt;
+		this.imgAlarm.src = &amp;quot;images/alarm-icon.png&amp;quot;;&lt;br /&gt;
 	},&lt;br /&gt;
 					&lt;br /&gt;
 	getEventChangeCallback: function(response) {&lt;br /&gt;
@@ -103,10 +105,12 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 	buildWeekTitle: function() {&lt;br /&gt;
 		var today = Date.today().clearTime();&lt;br /&gt;
 		var dayOfWeek = this.getFirstDayOfWeek(this.weekDate);&lt;br /&gt;
+		var weekNumber = new Date(this.weekDate).getISO8601Week();&lt;br /&gt;
 		&lt;br /&gt;
-		var template = new Template($L(&amp;quot;Week of #{dateStr}&amp;quot;));&lt;br /&gt;
+		var template = new Template($L(&amp;quot;Week&amp;quot;) + &amp;quot; #{weekStr}, &amp;quot; + $L(&amp;quot;#{dateStr}&amp;quot;));&lt;br /&gt;
 		var templateModel = {};&lt;br /&gt;
 		templateModel.dateStr = Mojo.Format.formatDate(dayOfWeek, $L(&amp;quot;MMM d, yyyy&amp;quot;));&lt;br /&gt;
+		templateModel.weekStr = weekNumber;&lt;br /&gt;
 		this.title.innerHTML = template.evaluate(templateModel);&lt;br /&gt;
 		&lt;br /&gt;
 		if (this.changingWeeks)&lt;br /&gt;
@@ -373,6 +377,13 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		var startPos = this.startDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var midPos = this.midDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var endPos = this.endDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
+		&lt;br /&gt;
+		for (var i=1; i&amp;lt;24; i++) {&lt;br /&gt;
+			ctx.fillStyle = &amp;quot;rgb(185, 185, 185)&amp;quot;;&lt;br /&gt;
+			ctx.fillRect(0, i * this.HOUR_HEIGHT - 1, 320, 1);&lt;br /&gt;
+			ctx.fillStyle = &amp;quot;rgb(255, 255, 255)&amp;quot;;&lt;br /&gt;
+			ctx.fillRect(0, i * this.HOUR_HEIGHT, 320, 1);&lt;br /&gt;
+		}&lt;br /&gt;
 &lt;br /&gt;
 		// Draw marker lines&lt;br /&gt;
 		ctx.fillStyle = &amp;quot;rgb(135, 135, 134)&amp;quot;;&lt;br /&gt;
@@ -388,7 +399,16 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 	&lt;br /&gt;
 	renderStartEndDayLabels: function(whichWeek) {&lt;br /&gt;
 		var ctx = this.weeks[whichWeek].ctxEvents;&lt;br /&gt;
-		&lt;br /&gt;
+&lt;br /&gt;
+		// Draw marker labels&lt;br /&gt;
+		ctx.fillStyle = &amp;quot;rgb(0, 0, 0)&amp;quot;;&lt;br /&gt;
+		ctx.font = &amp;quot;bold 14px Prelude&amp;quot;;&lt;br /&gt;
+&lt;br /&gt;
+		for (var i=2; i&amp;lt;24; i+=2) {&lt;br /&gt;
+			var endPos = i * this.HOUR_HEIGHT - 1;&lt;br /&gt;
+			ctx.strokeText(i, 12, endPos + 24);&lt;br /&gt;
+		}&lt;br /&gt;
+		/*&lt;br /&gt;
 		var startPos = this.startDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var midPos = this.midDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var endPos = this.endDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
@@ -401,6 +421,7 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		if (this.midDayMarkerPos != this.startDayMarkerPos &amp;amp;&amp;amp; this.midDayMarkerPos != this.endDayMarkerPos)&lt;br /&gt;
 			ctx.strokeText(this.midDayMarkerTime, 12, midPos + 24);&lt;br /&gt;
 		ctx.strokeText(this.endDayMarkerTime, 17, endPos + 24);&lt;br /&gt;
+		*/&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	renderEmptyWeek: function(whichWeek) {&lt;br /&gt;
@@ -488,8 +509,65 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		&lt;br /&gt;
 		ctx.fillStyle = &amp;quot;rgba(255, 255, 255, 0.10)&amp;quot;;&lt;br /&gt;
 		ctx.fillRect(left+1, top+height-3, width-2, 1);&lt;br /&gt;
+		&lt;br /&gt;
+///&lt;br /&gt;
+//Mojo.Log.error(Object.toJSON(event));&lt;br /&gt;
+		if (event.subject === undefined) {&lt;br /&gt;
+			// get more infos for this event&lt;br /&gt;
+			getCalendarService().getEvent(event.id,&lt;br /&gt;
+					this.getEventDetails.bind(this, whichWeek, whichDay, event),&lt;br /&gt;
+					function(response) {Mojo.Log.error(response.errorText);},&lt;br /&gt;
+					this.controller);&lt;br /&gt;
+		} else {&lt;br /&gt;
+			// Subject&lt;br /&gt;
+			ctx.fillStyle = this.colors[event.calendarColor].text;&lt;br /&gt;
+			ctx.font = &amp;quot;10px Prelude&amp;quot;;&lt;br /&gt;
+			var oldAlign = ctx.textAlign;&lt;br /&gt;
+			var oldBaseline = ctx.textBaseline;&lt;br /&gt;
+			ctx.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
+			ctx.textBaseline = &amp;quot;top&amp;quot;;&lt;br /&gt;
+			&lt;br /&gt;
+			var text = event.subject;&lt;br /&gt;
+			var length = text.length;&lt;br /&gt;
+			var metrics = ctx.measureText(text);&lt;br /&gt;
+			while ((metrics.width &amp;gt; eventMaxWidth-3) &amp;amp;&amp;amp; (length &amp;gt; 0)) {&lt;br /&gt;
+				// too large, try one less&lt;br /&gt;
+				length--;&lt;br /&gt;
+				text = text.substring(0, length);&lt;br /&gt;
+				metrics = ctx.measureText(text);&lt;br /&gt;
+			}&lt;br /&gt;
+			ctx.fillText(text, left+2, top+1);&lt;br /&gt;
+			top += 12&lt;br /&gt;
+			if (text.length &amp;lt; event.subject.length) {&lt;br /&gt;
+				var text = event.subject.substring(text.length);&lt;br /&gt;
+				var length = text.length;&lt;br /&gt;
+				var metrics = ctx.measureText(text);&lt;br /&gt;
+				while ((metrics.width &amp;gt; eventMaxWidth-3) &amp;amp;&amp;amp; (length &amp;gt; 0)) {&lt;br /&gt;
+					// too large, try one less&lt;br /&gt;
+					length--;&lt;br /&gt;
+					text = text.substring(0, length);&lt;br /&gt;
+					metrics = ctx.measureText(text);&lt;br /&gt;
+				}&lt;br /&gt;
+				ctx.fillText(text, left+2, top+1);&lt;br /&gt;
+				top += 12&lt;br /&gt;
+			}&lt;br /&gt;
+			if (event.alarm !== undefined) {&lt;br /&gt;
+				ctx.drawImage(this.imgAlarm, left+1, top+2, 12, 12);&lt;br /&gt;
+			}&lt;br /&gt;
+			ctx.textAlign = oldAlign;&lt;br /&gt;
+			ctx.textBaseline = oldBaseline;&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
 	},&lt;br /&gt;
-	&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+	getEventDetails: function(whichWeek, whichDay, event, details) {&lt;br /&gt;
+		event.subject = details.subject;&lt;br /&gt;
+		event.alarm = details.alarm;&lt;br /&gt;
+		this.renderEvent(whichWeek, whichDay, event);&lt;br /&gt;
+	},&lt;br /&gt;
+///&lt;br /&gt;
+&lt;br /&gt;
 	renderBusyTime: function(whichWeek, whichDay, busy) {&lt;br /&gt;
 		var ctx = this.weeks[whichWeek].ctxEvents;&lt;br /&gt;
 		var marginLeft = 1;&lt;br /&gt;
@@ -712,6 +790,7 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 						{	label:$L('Views'), &lt;br /&gt;
 							toggleCmd:'week', &lt;br /&gt;
 							items:[&lt;br /&gt;
+								{label:$L('Agenda'), icon: 'menu-agenda', command:'agenda'},&lt;br /&gt;
 								{label:$L('Day'), icon: 'menu-day', command:'day'}, &lt;br /&gt;
 								{label:$L('Week'), icon: 'menu-week', command:'week'}, &lt;br /&gt;
 								{label:$L('Month'), icon: 'menu-month', command:'month'}&lt;br /&gt;
@@ -723,6 +802,9 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.commandMenu, undefined, this.menuModel);&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.appMenu, {omitDefaultItems:true}, this.appMenuModel);&lt;br /&gt;
 		this.remindersUpdated(); 	// Update missed reminders menu item&lt;br /&gt;
+&lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;week&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
     	this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
 		&lt;br /&gt;
@@ -791,6 +873,16 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 			} else if (event.command == 'reminders') {&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.controller.stageController.pushScene('reminder-list');&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'week';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/javascripts/datejs/week.js	1970-01-01 01:00:00.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/javascripts/datejs/week.js	2010-05-03 21:17:06.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,44 @@&lt;br /&gt;
+Date.prototype.getWeek = function() {&lt;br /&gt;
+	var date = new Date(this);&lt;br /&gt;
+	var year = date.getFullYear();&lt;br /&gt;
+	var month = date.getMonth();&lt;br /&gt;
+	var day = date.getDate();&lt;br /&gt;
+	&lt;br /&gt;
+	var when = new Date(year,month,day);&lt;br /&gt;
+	var newYear = new Date(year,0,1);&lt;br /&gt;
+	var modDay = newYear.getDay();&lt;br /&gt;
+&lt;br /&gt;
+	if(this.startDay != 1)&lt;br /&gt;
+		if (modDay == 0) modDay=6; else modDay--;&lt;br /&gt;
+&lt;br /&gt;
+	var daynum = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) -&lt;br /&gt;
+		Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;&lt;br /&gt;
+&lt;br /&gt;
+	if (modDay &amp;lt; 4 ) {&lt;br /&gt;
+		var weekno = Math.floor((daynum+modDay-1)/7)+1;&lt;br /&gt;
+	}&lt;br /&gt;
+	else {&lt;br /&gt;
+		var weekno = Math.floor((daynum+modDay-1)/7);&lt;br /&gt;
+	&lt;br /&gt;
+		if (weekno == 0) {&lt;br /&gt;
+			year--;&lt;br /&gt;
+		&lt;br /&gt;
+			var prevNewYear = new Date(year,0,1);&lt;br /&gt;
+			var prevmodDay = prevNewYear.getDay();&lt;br /&gt;
+			if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--;&lt;br /&gt;
+			if (prevmodDay &amp;lt; 4) weekno = 53; else weekno = 52;&lt;br /&gt;
+		}&lt;br /&gt;
+	}&lt;br /&gt;
+&lt;br /&gt;
+	return weekno;&lt;br /&gt;
+};&lt;br /&gt;
+&lt;br /&gt;
+Date.prototype.getISO8601Week = function() {&lt;br /&gt;
+	var d = new Date(this);&lt;br /&gt;
+	d.setUTCDate(d.getUTCDate() - (d.getUTCDay() + 6) % 7 + 3);&lt;br /&gt;
+	var ms = d.valueOf();&lt;br /&gt;
+	d.setUTCMonth(0, 4);&lt;br /&gt;
+	var w = Math.round((ms - d.valueOf()) / 604800000) + 1;&lt;br /&gt;
+	if (w &amp;lt;= 9) { w = &amp;quot;0&amp;quot; + w; }&lt;br /&gt;
+	return w;&lt;br /&gt;
+};&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/sources.json	2009-12-15 01:57:53.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/sources.json	2010-05-03 21:14:12.000000000 +0200&lt;br /&gt;
@@ -3,6 +3,9 @@&lt;br /&gt;
     &amp;quot;source&amp;quot;: &amp;quot;javascripts\/datejs\/date.js&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
+    &amp;quot;source&amp;quot;: &amp;quot;javascripts\/datejs\/week.js&amp;quot;&lt;br /&gt;
+  },&lt;br /&gt;
+  {&lt;br /&gt;
     &amp;quot;source&amp;quot;: &amp;quot;javascripts\/recurrence-rule.js&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name: UberCalendar_css&lt;br /&gt;
Version: 1.4.0-5&lt;br /&gt;
Author: metaview, frause&lt;br /&gt;
Description: Enhance the calendar views. (MIT license)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/calendar.css	2010-01-22 21:26:25.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/calendar.css	2010-05-01 21:16:44.000000000 +0200&lt;br /&gt;
@@ -59,6 +59,10 @@&lt;br /&gt;
 		background-image: url(../images/menu-icon-day.png);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+.palm-menu-icon.menu-agenda {&lt;br /&gt;
+		background-image: url(../images/menu-icon-agenda.png);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 .palm-menu-icon.edit {&lt;br /&gt;
 		background-image: url(../images/menu-icon-compose.png);&lt;br /&gt;
 }&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/event-colors.css	2009-06-13 01:46:10.000000000 +0200&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/event-colors.css	2010-05-02 15:33:56.000000000 +0200&lt;br /&gt;
@@ -15,15 +15,26 @@ Copyright 2009 Palm, Inc.  All rights re&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 /* Month View: busy time */&lt;br /&gt;
-.monthview-busy-time.cal-color-blue 				{ background: url(../images/month-busy-time-blue.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-green 				{ background: url(../images/month-busy-time-green.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-yellow 				{ background: url(../images/month-busy-time-yellow.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-gray 				{ background: url(../images/month-busy-time-gray.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-orange 				{ background: url(../images/month-busy-time-orange.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-pink 				{ background: url(../images/month-busy-time-pink.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-red 					{ background: url(../images/month-busy-time-red.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-purple 				{ background: url(../images/month-busy-time-purple.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-teal 				{ background: url(../images/month-busy-time-teal.png) 0 0 fixed repeat; }&lt;br /&gt;
+.monthview-busy-time.cal-color-blue 				{ background: url(../images/month-busy-time-blue.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-green 				{ background: url(../images/month-busy-time-green.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-yellow 				{ background: url(../images/month-busy-time-yellow.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-gray 				{ background: url(../images/month-busy-time-gray.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-orange 				{ background: url(../images/month-busy-time-orange.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-pink 				{ background: url(../images/month-busy-time-pink.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-red 					{ background: url(../images/month-busy-time-red.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-purple 				{ background: url(../images/month-busy-time-purple.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-teal 				{ background: url(../images/month-busy-time-teal.png) right 0 fixed repeat-y; }&lt;br /&gt;
+&lt;br /&gt;
+/* Month View: partly busy time */&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-blue 			{ background: url(../images/month-busy-time-blue.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-green 		{ background: url(../images/month-busy-time-green.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-yellow 		{ background: url(../images/month-busy-time-yellow.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-gray 			{ background: url(../images/month-busy-time-gray.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-orange 		{ background: url(../images/month-busy-time-orange.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-pink 			{ background: url(../images/month-busy-time-pink.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-red 			{ background: url(../images/month-busy-time-red.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-purple 		{ background: url(../images/month-busy-time-purple.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-teal 			{ background: url(../images/month-busy-time-teal.png) left center fixed no-repeat; }&lt;br /&gt;
 &lt;br /&gt;
 /* Week View: Events */&lt;br /&gt;
 .wv_event.cal-color-blue,&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/month.css	2009-06-13 01:46:10.000000000 +0200&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/month.css	2010-05-02 14:49:48.000000000 +0200&lt;br /&gt;
@@ -124,12 +124,24 @@&lt;br /&gt;
 		float: left;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+.monthview-partly-busy-time {&lt;br /&gt;
+		background: none;&lt;br /&gt;
+		background-image: url(../images/busy-time.png);&lt;br /&gt;
+		background-repeat: no-repeat;&lt;br /&gt;
+		background-attachment: fixed;&lt;br /&gt;
+		background-position: left center;&lt;br /&gt;
+		/*color: #FF0000;*/&lt;br /&gt;
+		width: 100%;&lt;br /&gt;
+		height: 16px;&lt;br /&gt;
+		float: left;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 .monthview-busy-time {&lt;br /&gt;
 		background: none;&lt;br /&gt;
 		background-image: url(../images/busy-time.png);&lt;br /&gt;
-		background-repeat: repeat;&lt;br /&gt;
+		background-repeat: repeat-y;&lt;br /&gt;
 		background-attachment: fixed;&lt;br /&gt;
-		background-position: 0 0;&lt;br /&gt;
+		background-position: right 0;&lt;br /&gt;
 		/*color: #FF0000;*/&lt;br /&gt;
 		width: 100%;&lt;br /&gt;
 		height: 16px;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=9783</id>
		<title>Uber Calendar</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Uber_Calendar&amp;diff=9783"/>
		<updated>2010-05-04T18:34:56Z</updated>

		<summary type="html">&lt;p&gt;MetaView: New page: There are 2 patch files for the JS source and for the CSS. There are also 2 small icons which need to be copied into the images folder. The icons are here: [http://www.metaviewsoft.de/Cale...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are 2 patch files for the JS source and for the CSS. There are also 2 small icons which need to be copied into the images folder. The icons are here: [http://www.metaviewsoft.de/Calendar/ icons]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name: UberCalendar&lt;br /&gt;
Version: 1.4.0-5&lt;br /&gt;
Author: metaview, frause&lt;br /&gt;
Description: Enhance the calendar views. (MIT license)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/app-assistant.js	2010-01-22 04:25:18.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/app-assistant.js	2010-05-02 11:48:42.000000000 +0200&lt;br /&gt;
@@ -489,7 +489,15 @@ var AppAssistant = Class.create({&lt;br /&gt;
 			this.firstUseManager = new FirstUseManager(stageController);&lt;br /&gt;
 		} else {&lt;br /&gt;
 			// Otherwise show the Day View&lt;br /&gt;
-			stageController.pushScene({name: &amp;quot;day&amp;quot;, transition: Mojo.Transition.crossFade, disableSceneScroller: true});&lt;br /&gt;
+			var view = &amp;quot;day&amp;quot;;&lt;br /&gt;
+			var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+			try {&lt;br /&gt;
+				view = cookie.get();&lt;br /&gt;
+			} catch (e) {}&lt;br /&gt;
+			if ((view != &amp;quot;month&amp;quot;) &amp;amp;&amp;amp; (view != &amp;quot;week&amp;quot;)) {&lt;br /&gt;
+				view = &amp;quot;day&amp;quot;;&lt;br /&gt;
+			}&lt;br /&gt;
+			stageController.pushScene({name: view, transition: Mojo.Transition.crossFade, disableSceneScroller: true});&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/day-assistant.js	2010-02-09 23:08:26.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/day-assistant.js	2010-05-03 21:10:34.000000000 +0200&lt;br /&gt;
@@ -42,6 +42,8 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		this.pendingCalendarSettingsUpdate = false;&lt;br /&gt;
 		//this.pendingOpenScratchEventInDetails = false;&lt;br /&gt;
 		this.snapEffectCount = 0;&lt;br /&gt;
+		this.imgAlarm = new Image();&lt;br /&gt;
+		this.imgAlarm.src = &amp;quot;images/alarm-icon.png&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 		&lt;br /&gt;
 		this.hourHeight = 48;&lt;br /&gt;
@@ -212,17 +214,23 @@ var DayAssistant = Class.create({&lt;br /&gt;
 	buildDayTitle: function(doScrim) {&lt;br /&gt;
 		var today = Date.today().clearTime();&lt;br /&gt;
 		var dayDateNoTime = new Date(this.dayDate).clearTime();&lt;br /&gt;
+		var weekNumber = new Date(this.dayDate).getISO8601Week();&lt;br /&gt;
 		&lt;br /&gt;
 		if (dayDateNoTime.compareTo(today) == 0) {&lt;br /&gt;
-			var template = new Template($L(&amp;quot;#{todayStr}, #{dateStr}&amp;quot;));&lt;br /&gt;
+			var template = new Template($L(&amp;quot;#{todayStr}, #{dateStr}&amp;quot;) + &amp;quot;, W#{weekStr}&amp;quot;);&lt;br /&gt;
 			var todayStr= Mojo.Format.formatRelativeDate(today, {date: &amp;quot;short&amp;quot;}).capitalize();&lt;br /&gt;
 			&lt;br /&gt;
 			var templateModel = {};&lt;br /&gt;
 			templateModel.todayStr = todayStr;&lt;br /&gt;
+			templateModel.weekStr = weekNumber;&lt;br /&gt;
 			templateModel.dateStr = Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d&amp;quot;));&lt;br /&gt;
 			this.controller.get('dv_title').update(template.evaluate(templateModel)); // Localize this date format string&lt;br /&gt;
 		} else {&lt;br /&gt;
-			this.controller.get('dv_title').update(Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d, yyyy&amp;quot;))); // Localize this date format string&lt;br /&gt;
+			var template = new Template($L(&amp;quot;#{dateStr}&amp;quot;) + &amp;quot;, W#{weekStr}&amp;quot;);&lt;br /&gt;
+			var templateModel = {};&lt;br /&gt;
+			templateModel.weekStr = weekNumber;&lt;br /&gt;
+			templateModel.dateStr = Mojo.Format.formatDate(this.dayDate, $L(&amp;quot;EEE MMM d, yyyy&amp;quot;));&lt;br /&gt;
+			this.controller.get('dv_title').update(template.evaluate(templateModel)); // Localize this date format string&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		if (doScrim) {&lt;br /&gt;
@@ -702,6 +710,8 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		//Mojo.Log.info(&amp;quot;day-assistant: renderEvent&amp;quot;);&lt;br /&gt;
 		if (this.animating &amp;amp;&amp;amp; !event.animatible)&lt;br /&gt;
 			return;&lt;br /&gt;
+&lt;br /&gt;
+//Mojo.Log.error(Object.toJSON(event));&lt;br /&gt;
 	&lt;br /&gt;
 		var ctx = this.divs[whichDay].ctxEvents;&lt;br /&gt;
 		var marginLeft = 28;&lt;br /&gt;
@@ -743,6 +753,17 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		ctx.fillRect(left+1, top+height-3, width-2, 1);&lt;br /&gt;
 		&lt;br /&gt;
 		var textTop = top + 30;&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+		// Alarm&lt;br /&gt;
+		if (event.gotFullDetails === undefined) {&lt;br /&gt;
+			// get more infos for this event&lt;br /&gt;
+			getCalendarService().getEvent(event.id,&lt;br /&gt;
+					this.getEventDetails.bind(this, whichDay, event, selected, ghost),&lt;br /&gt;
+					function(response) {Mojo.Log.error(response.errorText);},&lt;br /&gt;
+					this.controller);&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
 		&lt;br /&gt;
 		// Subject&lt;br /&gt;
 		ctx.fillStyle = this.colors[event.calendarColor].text;&lt;br /&gt;
@@ -753,8 +774,14 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		var subjectTop = top+15;&lt;br /&gt;
 		if (bottom &amp;gt;= (top + height))&lt;br /&gt;
 			subjectTop = top+17;	// no room for location or note, therefore vertically center subject text&lt;br /&gt;
-		this.fillText(event.subject, ctx, left+4, subjectTop, width, bottom, 15 /*line height*/);	&lt;br /&gt;
-		&lt;br /&gt;
+		this.fillText(event.subject, ctx, left+4, subjectTop, width-((event.alarm !== undefined) ? 18 : 0), bottom, 15 /*line height*/);	&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+		if (event.alarm !== undefined) {&lt;br /&gt;
+			ctx.drawImage(this.imgAlarm, left+4+width-18, subjectTop+1, 12, 12);&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
+&lt;br /&gt;
 		// Location&lt;br /&gt;
 		if (event.location &amp;amp;&amp;amp; (event.location.length &amp;gt; 0) &amp;amp;&amp;amp; (textTop &amp;lt; (top + height))) {&lt;br /&gt;
 			ctx.font = &amp;quot;italic bold 14px Prelude&amp;quot;;&lt;br /&gt;
@@ -769,7 +796,7 @@ var DayAssistant = Class.create({&lt;br /&gt;
 			bottom = top+height;&lt;br /&gt;
 			this.fillText(event.note, ctx, left+4, textTop-2, width, bottom-2, 12 /*line height*/);			&lt;br /&gt;
 		}&lt;br /&gt;
-		&lt;br /&gt;
+&lt;br /&gt;
 		if (ghost) {&lt;br /&gt;
 			var selectedColor = &amp;quot;rgba(228, 228, 226, 0.85)&amp;quot;&lt;br /&gt;
 			ctx.fillStyle = selectedColor;&lt;br /&gt;
@@ -789,6 +816,14 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		  ctx.fillRect(left, top, width, height);&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+	getEventDetails: function(whichDay, event, selected, ghost, details) {&lt;br /&gt;
+		event.alarm = details.alarm;&lt;br /&gt;
+		event.gotFullDetails = true;&lt;br /&gt;
+		this.renderEvent(whichDay, event, selected, ghost);&lt;br /&gt;
+	},&lt;br /&gt;
+///&lt;br /&gt;
 	&lt;br /&gt;
 	getAllDayDimensions: function(index, event) {&lt;br /&gt;
 		var marginLeft = 4;&lt;br /&gt;
@@ -1828,6 +1863,7 @@ var DayAssistant = Class.create({&lt;br /&gt;
 						{label:$L('Views'), &lt;br /&gt;
 						toggleCmd:'day', &lt;br /&gt;
 						items:[&lt;br /&gt;
+							{label:$L('Agenda'), icon: 'menu-agenda', command:'agenda'},&lt;br /&gt;
 							{label:$L('Day'), icon: 'menu-day', command:'day'}, &lt;br /&gt;
 							{label:$L('Week'), icon: 'menu-week', command:'week'}, &lt;br /&gt;
 							{label:$L('Month'), icon: 'menu-month', command:'month'}&lt;br /&gt;
@@ -1854,6 +1890,9 @@ var DayAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(this.divs[this.PREV_DAY].alldayevents_scroller, undefined, {mode: 'vertical'});&lt;br /&gt;
 		this.controller.setupWidget(this.divs[this.NEXT_DAY].alldayevents_scroller, undefined, {mode: 'vertical'});&lt;br /&gt;
 &lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;day&amp;quot;);&lt;br /&gt;
+&lt;br /&gt;
    		this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
 		&lt;br /&gt;
 		// IMPORTANT: Set up the height of the scrollers.  If this is not done&lt;br /&gt;
@@ -2095,6 +2134,17 @@ var DayAssistant = Class.create({&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.maybeCommitScratchEvent(true);&lt;br /&gt;
 				this.syncAllCalendars();&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.maybeCommitScratchEvent(true);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'day';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		} else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
 			// Enable prefs menuitem for this scene.&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/month-assistant.js	2010-01-06 03:09:08.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/month-assistant.js	2010-05-03 21:11:06.000000000 +0200&lt;br /&gt;
@@ -5,6 +5,7 @@ var MONTH_DAY_ID_FORMAT = 'MMMM dd yyyy'&lt;br /&gt;
 var MonthAssistant = Class.create({&lt;br /&gt;
 				&lt;br /&gt;
 	reminderMenuItemId: 3,&lt;br /&gt;
+	fullEvts: null,&lt;br /&gt;
 	&lt;br /&gt;
 	initialize: function() {&lt;br /&gt;
  		this.appMenuModel = { visible:true, &lt;br /&gt;
@@ -22,12 +23,28 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 				&lt;br /&gt;
 		this.scrollerModel = { scrollbars: false, mode: &amp;quot;vertical-snap&amp;quot;, snapIndex: 0, snapElements: { y: [] } };&lt;br /&gt;
 	},&lt;br /&gt;
+&lt;br /&gt;
+	colors: {&amp;quot;cal-color-blue&amp;quot;: &amp;quot;#91d3ea&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-green&amp;quot;: &amp;quot;#8cf08c&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-yellow&amp;quot;: &amp;quot;#e8e37c&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-gray&amp;quot;: &amp;quot;#c2c2c2&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-orange&amp;quot;: &amp;quot;#fbb474&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-pink&amp;quot;: &amp;quot;#f59cbc&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-red&amp;quot;: &amp;quot;#ff9797&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-purple&amp;quot;: &amp;quot;#d9b7ff&amp;quot;,&lt;br /&gt;
+		&amp;quot;cal-color-teal&amp;quot;: &amp;quot;#72dfd2&amp;quot;},&lt;br /&gt;
 														&lt;br /&gt;
  	setupMonth: function(startDate, endDate, callbackfn) &lt;br /&gt;
 	{&lt;br /&gt;
+		getCalendarService().getEvents('all', startDate.getTime(), endDate.getTime(), this.getEventsCallback.bind(this), this.controller, this.getEventsFailCallback, {useSlices: true});&lt;br /&gt;
 		getCalendarService().getBusyDays(getCurrentCal(), startDate.getTime(), endDate.getTime(), callbackfn, this.controller);&lt;br /&gt;
 	},&lt;br /&gt;
-	&lt;br /&gt;
+&lt;br /&gt;
+	getEventsCallback: function(resp)&lt;br /&gt;
+	{&lt;br /&gt;
+		this.fullEvts = resp.days;&lt;br /&gt;
+	},&lt;br /&gt;
+&lt;br /&gt;
 	buildViewHeader: function() &lt;br /&gt;
 	{&lt;br /&gt;
 		//Mojo.Log.info(&amp;quot;month-assistant: buildViewHeader&amp;quot;);&lt;br /&gt;
@@ -37,7 +54,13 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 	&lt;br /&gt;
 	buildMonthTitle: function() &lt;br /&gt;
 	{&lt;br /&gt;
-		this.mvTitle.innerText = Mojo.Format.formatDate(this.monthDate, $L(&amp;quot;MMM yyyy&amp;quot;)); // Localize this date format string&lt;br /&gt;
+		var wn = new Date(this.monthDate);&lt;br /&gt;
+		wn.setDate(1);&lt;br /&gt;
+		var firstWeek = wn.getISO8601Week();	&lt;br /&gt;
+		wn.setMonth(wn.getMonth()+1);&lt;br /&gt;
+		wn.setDate(wn.getDate()-1);&lt;br /&gt;
+		var lastWeek = wn.getISO8601Week();&lt;br /&gt;
+		this.mvTitle.innerText = Mojo.Format.formatDate(this.monthDate, $L(&amp;quot;MMM yyyy&amp;quot;)) + &amp;quot;, &amp;quot; + $L(&amp;quot;Week&amp;quot;) + &amp;quot; &amp;quot; + firstWeek + &amp;quot;-&amp;quot; + lastWeek; // Localize this date format string&lt;br /&gt;
   	},&lt;br /&gt;
 &lt;br /&gt;
  	buildDayHeader: function() {&lt;br /&gt;
@@ -359,26 +382,39 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 			calStyle = getCalendarsManager().getCalColorStyle('id'+getCurrentCal());&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
+&lt;br /&gt;
 		var weekCell = this._months.rows[0];&lt;br /&gt;
 		var dayCell = weekCell.cells[0];&lt;br /&gt;
 		&lt;br /&gt;
+		var cls;&lt;br /&gt;
 		var days = response.days;&lt;br /&gt;
 		var daylen = days.length - 1; // We get back more days of info that we want - 1 more in fact, because its inclusive, rather than exclusive&lt;br /&gt;
 		for (var d = 0; d &amp;lt; daylen; d++) &lt;br /&gt;
 		{&lt;br /&gt;
 			var day = this._token2state(days.charCodeAt(d));&lt;br /&gt;
-			&lt;br /&gt;
+&lt;br /&gt;
+			var bgcolor = &amp;quot;&amp;quot;;&lt;br /&gt;
+			if (this.fullEvts[d].allDayEvents.length &amp;gt; 1)&lt;br /&gt;
+			{&lt;br /&gt;
+				bgcolor = &amp;quot;gray&amp;quot;;&lt;br /&gt;
+			}&lt;br /&gt;
+			else if (this.fullEvts[d].allDayEvents.length == 1)&lt;br /&gt;
+			{&lt;br /&gt;
+				bgcolor = this.colors[this.fullEvts[d].allDayEvents[0].calendarColor];&lt;br /&gt;
+			}&lt;br /&gt;
+&lt;br /&gt;
+//Mojo.Log.error(bgcolor, this.fullEvts[d].allDayEvents.length);&lt;br /&gt;
 			var child = dayCell.firstChild;&lt;br /&gt;
-			var cls;&lt;br /&gt;
 			for (var i = 1; i &amp;lt; 8; i &amp;lt;&amp;lt;= 1)&lt;br /&gt;
 			{&lt;br /&gt;
-				if (day &amp;amp; (i &amp;lt;&amp;lt; 3)) &lt;br /&gt;
+				child.style.backgroundColor = bgcolor;&lt;br /&gt;
+				if (day &amp;amp; (i &amp;lt;&amp;lt; 3))&lt;br /&gt;
 				{&lt;br /&gt;
-					cls = &amp;quot;monthview-busy-time &amp;quot; + calStyle;&lt;br /&gt;
+					cls = &amp;quot;monthview-partly-busy-time &amp;quot; + calStyle;&lt;br /&gt;
 				}&lt;br /&gt;
 				else if (day &amp;amp; i) &lt;br /&gt;
 				{&lt;br /&gt;
-					cls = &amp;quot;monthview-busy-time&amp;quot;;&lt;br /&gt;
+					cls = &amp;quot;monthview-partly-busy-time&amp;quot;;&lt;br /&gt;
 				}&lt;br /&gt;
 				else &lt;br /&gt;
 				{&lt;br /&gt;
@@ -642,6 +678,11 @@ var MonthAssistant = Class.create({&lt;br /&gt;
                 label: $L('Views'),&lt;br /&gt;
                 toggleCmd: 'month',&lt;br /&gt;
                 items: [&lt;br /&gt;
+				{&lt;br /&gt;
+					label:$L('Agenda'),&lt;br /&gt;
+					icon: 'menu-agenda',&lt;br /&gt;
+					command:'agenda'&lt;br /&gt;
+				},&lt;br /&gt;
                 {&lt;br /&gt;
                     label: $L('Day'),&lt;br /&gt;
                     icon: 'menu-day',&lt;br /&gt;
@@ -664,6 +705,9 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.appMenu, {omitDefaultItems:true}, this.appMenuModel);&lt;br /&gt;
 		this.remindersUpdated(); 	// Update missed reminders menu item&lt;br /&gt;
 		&lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;month&amp;quot;);&lt;br /&gt;
+		&lt;br /&gt;
 		this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
   	},&lt;br /&gt;
   &lt;br /&gt;
@@ -729,6 +773,16 @@ var MonthAssistant = Class.create({&lt;br /&gt;
 			} else if (event.command == 'reminders') {&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.controller.stageController.pushScene('reminder-list');&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'month';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/app/controllers/week-assistant.js	2010-01-06 03:09:08.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/app/controllers/week-assistant.js	2010-05-03 21:11:48.000000000 +0200&lt;br /&gt;
@@ -42,6 +42,8 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		this.COL_POS = [0, 45, 91, 137, 183, 229, 275];&lt;br /&gt;
 		this.pendingRender = false;&lt;br /&gt;
 		this.pendingCalendarSettingsUpdate = false;&lt;br /&gt;
+		this.imgAlarm = new Image();&lt;br /&gt;
+		this.imgAlarm.src = &amp;quot;images/alarm-icon.png&amp;quot;;&lt;br /&gt;
 	},&lt;br /&gt;
 					&lt;br /&gt;
 	getEventChangeCallback: function(response) {&lt;br /&gt;
@@ -103,10 +105,12 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 	buildWeekTitle: function() {&lt;br /&gt;
 		var today = Date.today().clearTime();&lt;br /&gt;
 		var dayOfWeek = this.getFirstDayOfWeek(this.weekDate);&lt;br /&gt;
+		var weekNumber = new Date(this.weekDate).getISO8601Week();&lt;br /&gt;
 		&lt;br /&gt;
-		var template = new Template($L(&amp;quot;Week of #{dateStr}&amp;quot;));&lt;br /&gt;
+		var template = new Template($L(&amp;quot;Week&amp;quot;) + &amp;quot; #{weekStr}, &amp;quot; + $L(&amp;quot;#{dateStr}&amp;quot;));&lt;br /&gt;
 		var templateModel = {};&lt;br /&gt;
 		templateModel.dateStr = Mojo.Format.formatDate(dayOfWeek, $L(&amp;quot;MMM d, yyyy&amp;quot;));&lt;br /&gt;
+		templateModel.weekStr = weekNumber;&lt;br /&gt;
 		this.title.innerHTML = template.evaluate(templateModel);&lt;br /&gt;
 		&lt;br /&gt;
 		if (this.changingWeeks)&lt;br /&gt;
@@ -373,6 +377,13 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		var startPos = this.startDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var midPos = this.midDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var endPos = this.endDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
+		&lt;br /&gt;
+		for (var i=1; i&amp;lt;24; i++) {&lt;br /&gt;
+			ctx.fillStyle = &amp;quot;rgb(185, 185, 185)&amp;quot;;&lt;br /&gt;
+			ctx.fillRect(0, i * this.HOUR_HEIGHT - 1, 320, 1);&lt;br /&gt;
+			ctx.fillStyle = &amp;quot;rgb(255, 255, 255)&amp;quot;;&lt;br /&gt;
+			ctx.fillRect(0, i * this.HOUR_HEIGHT, 320, 1);&lt;br /&gt;
+		}&lt;br /&gt;
 &lt;br /&gt;
 		// Draw marker lines&lt;br /&gt;
 		ctx.fillStyle = &amp;quot;rgb(135, 135, 134)&amp;quot;;&lt;br /&gt;
@@ -388,7 +399,16 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 	&lt;br /&gt;
 	renderStartEndDayLabels: function(whichWeek) {&lt;br /&gt;
 		var ctx = this.weeks[whichWeek].ctxEvents;&lt;br /&gt;
-		&lt;br /&gt;
+&lt;br /&gt;
+		// Draw marker labels&lt;br /&gt;
+		ctx.fillStyle = &amp;quot;rgb(0, 0, 0)&amp;quot;;&lt;br /&gt;
+		ctx.font = &amp;quot;bold 14px Prelude&amp;quot;;&lt;br /&gt;
+&lt;br /&gt;
+		for (var i=2; i&amp;lt;24; i+=2) {&lt;br /&gt;
+			var endPos = i * this.HOUR_HEIGHT - 1;&lt;br /&gt;
+			ctx.strokeText(i, 12, endPos + 24);&lt;br /&gt;
+		}&lt;br /&gt;
+		/*&lt;br /&gt;
 		var startPos = this.startDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var midPos = this.midDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
 		var endPos = this.endDayMarkerPos * this.HOUR_HEIGHT - 1;&lt;br /&gt;
@@ -401,6 +421,7 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		if (this.midDayMarkerPos != this.startDayMarkerPos &amp;amp;&amp;amp; this.midDayMarkerPos != this.endDayMarkerPos)&lt;br /&gt;
 			ctx.strokeText(this.midDayMarkerTime, 12, midPos + 24);&lt;br /&gt;
 		ctx.strokeText(this.endDayMarkerTime, 17, endPos + 24);&lt;br /&gt;
+		*/&lt;br /&gt;
 	},&lt;br /&gt;
 	&lt;br /&gt;
 	renderEmptyWeek: function(whichWeek) {&lt;br /&gt;
@@ -488,8 +509,65 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		&lt;br /&gt;
 		ctx.fillStyle = &amp;quot;rgba(255, 255, 255, 0.10)&amp;quot;;&lt;br /&gt;
 		ctx.fillRect(left+1, top+height-3, width-2, 1);&lt;br /&gt;
+		&lt;br /&gt;
+///&lt;br /&gt;
+//Mojo.Log.error(Object.toJSON(event));&lt;br /&gt;
+		if (event.subject === undefined) {&lt;br /&gt;
+			// get more infos for this event&lt;br /&gt;
+			getCalendarService().getEvent(event.id,&lt;br /&gt;
+					this.getEventDetails.bind(this, whichWeek, whichDay, event),&lt;br /&gt;
+					function(response) {Mojo.Log.error(response.errorText);},&lt;br /&gt;
+					this.controller);&lt;br /&gt;
+		} else {&lt;br /&gt;
+			// Subject&lt;br /&gt;
+			ctx.fillStyle = this.colors[event.calendarColor].text;&lt;br /&gt;
+			ctx.font = &amp;quot;10px Prelude&amp;quot;;&lt;br /&gt;
+			var oldAlign = ctx.textAlign;&lt;br /&gt;
+			var oldBaseline = ctx.textBaseline;&lt;br /&gt;
+			ctx.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
+			ctx.textBaseline = &amp;quot;top&amp;quot;;&lt;br /&gt;
+			&lt;br /&gt;
+			var text = event.subject;&lt;br /&gt;
+			var length = text.length;&lt;br /&gt;
+			var metrics = ctx.measureText(text);&lt;br /&gt;
+			while ((metrics.width &amp;gt; eventMaxWidth-3) &amp;amp;&amp;amp; (length &amp;gt; 0)) {&lt;br /&gt;
+				// too large, try one less&lt;br /&gt;
+				length--;&lt;br /&gt;
+				text = text.substring(0, length);&lt;br /&gt;
+				metrics = ctx.measureText(text);&lt;br /&gt;
+			}&lt;br /&gt;
+			ctx.fillText(text, left+2, top+1);&lt;br /&gt;
+			top += 12&lt;br /&gt;
+			if (text.length &amp;lt; event.subject.length) {&lt;br /&gt;
+				var text = event.subject.substring(text.length);&lt;br /&gt;
+				var length = text.length;&lt;br /&gt;
+				var metrics = ctx.measureText(text);&lt;br /&gt;
+				while ((metrics.width &amp;gt; eventMaxWidth-3) &amp;amp;&amp;amp; (length &amp;gt; 0)) {&lt;br /&gt;
+					// too large, try one less&lt;br /&gt;
+					length--;&lt;br /&gt;
+					text = text.substring(0, length);&lt;br /&gt;
+					metrics = ctx.measureText(text);&lt;br /&gt;
+				}&lt;br /&gt;
+				ctx.fillText(text, left+2, top+1);&lt;br /&gt;
+				top += 12&lt;br /&gt;
+			}&lt;br /&gt;
+			if (event.alarm !== undefined) {&lt;br /&gt;
+				ctx.drawImage(this.imgAlarm, left+1, top+2, 12, 12);&lt;br /&gt;
+			}&lt;br /&gt;
+			ctx.textAlign = oldAlign;&lt;br /&gt;
+			ctx.textBaseline = oldBaseline;&lt;br /&gt;
+		}&lt;br /&gt;
+///&lt;br /&gt;
 	},&lt;br /&gt;
-	&lt;br /&gt;
+&lt;br /&gt;
+///&lt;br /&gt;
+	getEventDetails: function(whichWeek, whichDay, event, details) {&lt;br /&gt;
+		event.subject = details.subject;&lt;br /&gt;
+		event.alarm = details.alarm;&lt;br /&gt;
+		this.renderEvent(whichWeek, whichDay, event);&lt;br /&gt;
+	},&lt;br /&gt;
+///&lt;br /&gt;
+&lt;br /&gt;
 	renderBusyTime: function(whichWeek, whichDay, busy) {&lt;br /&gt;
 		var ctx = this.weeks[whichWeek].ctxEvents;&lt;br /&gt;
 		var marginLeft = 1;&lt;br /&gt;
@@ -712,6 +790,7 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 						{	label:$L('Views'), &lt;br /&gt;
 							toggleCmd:'week', &lt;br /&gt;
 							items:[&lt;br /&gt;
+								{label:$L('Agenda'), icon: 'menu-agenda', command:'agenda'},&lt;br /&gt;
 								{label:$L('Day'), icon: 'menu-day', command:'day'}, &lt;br /&gt;
 								{label:$L('Week'), icon: 'menu-week', command:'week'}, &lt;br /&gt;
 								{label:$L('Month'), icon: 'menu-month', command:'month'}&lt;br /&gt;
@@ -723,6 +802,9 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.commandMenu, undefined, this.menuModel);&lt;br /&gt;
 		this.controller.setupWidget(Mojo.Menu.appMenu, {omitDefaultItems:true}, this.appMenuModel);&lt;br /&gt;
 		this.remindersUpdated(); 	// Update missed reminders menu item&lt;br /&gt;
+&lt;br /&gt;
+		var cookie = new Mojo.Model.Cookie(&amp;quot;LastView&amp;quot;);&lt;br /&gt;
+		cookie.put(&amp;quot;week&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
     	this.CalSelectorHandler = this.calSelector.bindAsEventListener(this);&lt;br /&gt;
 		&lt;br /&gt;
@@ -791,6 +873,16 @@ var WeekAssistant = Class.create({&lt;br /&gt;
 			} else if (event.command == 'reminders') {&lt;br /&gt;
 				Event.stop(event);&lt;br /&gt;
 				this.controller.stageController.pushScene('reminder-list');&lt;br /&gt;
+			} else if (event.command == 'agenda') {&lt;br /&gt;
+				Event.stop(event);&lt;br /&gt;
+				this.controller.serviceRequest('palm://com.palm.applicationManager', {&lt;br /&gt;
+					method: 'launch',&lt;br /&gt;
+					parameters: {&lt;br /&gt;
+						id: 'com.palm.app.agenda'&lt;br /&gt;
+					}&lt;br /&gt;
+				});&lt;br /&gt;
+				this.menuModel.items[1].toggleCmd = 'week';&lt;br /&gt;
+				this.controller.modelChanged(this.menuModel, this);&lt;br /&gt;
 			}				&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(event.type == Mojo.Event.commandEnable &amp;amp;&amp;amp; event.command == Mojo.Menu.prefsCmd) {&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/javascripts/datejs/week.js	1970-01-01 01:00:00.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/javascripts/datejs/week.js	2010-05-03 21:17:06.000000000 +0200&lt;br /&gt;
@@ -0,0 +1,44 @@&lt;br /&gt;
+Date.prototype.getWeek = function() {&lt;br /&gt;
+	var date = new Date(this);&lt;br /&gt;
+	var year = date.getFullYear();&lt;br /&gt;
+	var month = date.getMonth();&lt;br /&gt;
+	var day = date.getDate();&lt;br /&gt;
+	&lt;br /&gt;
+	var when = new Date(year,month,day);&lt;br /&gt;
+	var newYear = new Date(year,0,1);&lt;br /&gt;
+	var modDay = newYear.getDay();&lt;br /&gt;
+&lt;br /&gt;
+	if(this.startDay != 1)&lt;br /&gt;
+		if (modDay == 0) modDay=6; else modDay--;&lt;br /&gt;
+&lt;br /&gt;
+	var daynum = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) -&lt;br /&gt;
+		Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;&lt;br /&gt;
+&lt;br /&gt;
+	if (modDay &amp;lt; 4 ) {&lt;br /&gt;
+		var weekno = Math.floor((daynum+modDay-1)/7)+1;&lt;br /&gt;
+	}&lt;br /&gt;
+	else {&lt;br /&gt;
+		var weekno = Math.floor((daynum+modDay-1)/7);&lt;br /&gt;
+	&lt;br /&gt;
+		if (weekno == 0) {&lt;br /&gt;
+			year--;&lt;br /&gt;
+		&lt;br /&gt;
+			var prevNewYear = new Date(year,0,1);&lt;br /&gt;
+			var prevmodDay = prevNewYear.getDay();&lt;br /&gt;
+			if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--;&lt;br /&gt;
+			if (prevmodDay &amp;lt; 4) weekno = 53; else weekno = 52;&lt;br /&gt;
+		}&lt;br /&gt;
+	}&lt;br /&gt;
+&lt;br /&gt;
+	return weekno;&lt;br /&gt;
+};&lt;br /&gt;
+&lt;br /&gt;
+Date.prototype.getISO8601Week = function() {&lt;br /&gt;
+	var d = new Date(this);&lt;br /&gt;
+	d.setUTCDate(d.getUTCDate() - (d.getUTCDay() + 6) % 7 + 3);&lt;br /&gt;
+	var ms = d.valueOf();&lt;br /&gt;
+	d.setUTCMonth(0, 4);&lt;br /&gt;
+	var w = Math.round((ms - d.valueOf()) / 604800000) + 1;&lt;br /&gt;
+	if (w &amp;lt;= 9) { w = &amp;quot;0&amp;quot; + w; }&lt;br /&gt;
+	return w;&lt;br /&gt;
+};&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/sources.json	2009-12-15 01:57:53.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/sources.json	2010-05-03 21:14:12.000000000 +0200&lt;br /&gt;
@@ -3,6 +3,9 @@&lt;br /&gt;
     &amp;quot;source&amp;quot;: &amp;quot;javascripts\/datejs\/date.js&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
+    &amp;quot;source&amp;quot;: &amp;quot;javascripts\/datejs\/week.js&amp;quot;&lt;br /&gt;
+  },&lt;br /&gt;
+  {&lt;br /&gt;
     &amp;quot;source&amp;quot;: &amp;quot;javascripts\/recurrence-rule.js&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Name: UberCalendar_css&lt;br /&gt;
Version: 1.4.0-5&lt;br /&gt;
Author: metaview, frause&lt;br /&gt;
Description: Enhance the calendar views. (MIT license)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/calendar.css	2010-01-22 21:26:25.000000000 +0100&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/calendar.css	2010-05-01 21:16:44.000000000 +0200&lt;br /&gt;
@@ -59,6 +59,10 @@&lt;br /&gt;
 		background-image: url(../images/menu-icon-day.png);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+.palm-menu-icon.menu-agenda {&lt;br /&gt;
+		background-image: url(../images/menu-icon-agenda.png);&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 .palm-menu-icon.edit {&lt;br /&gt;
 		background-image: url(../images/menu-icon-compose.png);&lt;br /&gt;
 }&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/event-colors.css	2009-06-13 01:46:10.000000000 +0200&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/event-colors.css	2010-05-02 15:33:56.000000000 +0200&lt;br /&gt;
@@ -15,15 +15,26 @@ Copyright 2009 Palm, Inc.  All rights re&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 /* Month View: busy time */&lt;br /&gt;
-.monthview-busy-time.cal-color-blue 				{ background: url(../images/month-busy-time-blue.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-green 				{ background: url(../images/month-busy-time-green.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-yellow 				{ background: url(../images/month-busy-time-yellow.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-gray 				{ background: url(../images/month-busy-time-gray.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-orange 				{ background: url(../images/month-busy-time-orange.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-pink 				{ background: url(../images/month-busy-time-pink.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-red 					{ background: url(../images/month-busy-time-red.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-purple 				{ background: url(../images/month-busy-time-purple.png) 0 0 fixed repeat; }&lt;br /&gt;
-.monthview-busy-time.cal-color-teal 				{ background: url(../images/month-busy-time-teal.png) 0 0 fixed repeat; }&lt;br /&gt;
+.monthview-busy-time.cal-color-blue 				{ background: url(../images/month-busy-time-blue.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-green 				{ background: url(../images/month-busy-time-green.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-yellow 				{ background: url(../images/month-busy-time-yellow.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-gray 				{ background: url(../images/month-busy-time-gray.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-orange 				{ background: url(../images/month-busy-time-orange.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-pink 				{ background: url(../images/month-busy-time-pink.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-red 					{ background: url(../images/month-busy-time-red.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-purple 				{ background: url(../images/month-busy-time-purple.png) right 0 fixed repeat-y; }&lt;br /&gt;
+.monthview-busy-time.cal-color-teal 				{ background: url(../images/month-busy-time-teal.png) right 0 fixed repeat-y; }&lt;br /&gt;
+&lt;br /&gt;
+/* Month View: partly busy time */&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-blue 			{ background: url(../images/month-busy-time-blue.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-green 		{ background: url(../images/month-busy-time-green.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-yellow 		{ background: url(../images/month-busy-time-yellow.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-gray 			{ background: url(../images/month-busy-time-gray.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-orange 		{ background: url(../images/month-busy-time-orange.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-pink 			{ background: url(../images/month-busy-time-pink.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-red 			{ background: url(../images/month-busy-time-red.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-purple 		{ background: url(../images/month-busy-time-purple.png) left center fixed no-repeat; }&lt;br /&gt;
+.monthview-partly-busy-time.cal-color-teal 			{ background: url(../images/month-busy-time-teal.png) left center fixed no-repeat; }&lt;br /&gt;
 &lt;br /&gt;
 /* Week View: Events */&lt;br /&gt;
 .wv_event.cal-color-blue,&lt;br /&gt;
--- /usr/palm/applications/com.palm.app.calendar/stylesheets/month.css	2009-06-13 01:46:10.000000000 +0200&lt;br /&gt;
+++ /cygdrive/z/Programme/Komodo/Calendar2/src/stylesheets/month.css	2010-05-02 14:49:48.000000000 +0200&lt;br /&gt;
@@ -124,12 +124,24 @@&lt;br /&gt;
 		float: left;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
+.monthview-partly-busy-time {&lt;br /&gt;
+		background: none;&lt;br /&gt;
+		background-image: url(../images/busy-time.png);&lt;br /&gt;
+		background-repeat: no-repeat;&lt;br /&gt;
+		background-attachment: fixed;&lt;br /&gt;
+		background-position: left center;&lt;br /&gt;
+		/*color: #FF0000;*/&lt;br /&gt;
+		width: 100%;&lt;br /&gt;
+		height: 16px;&lt;br /&gt;
+		float: left;&lt;br /&gt;
+}&lt;br /&gt;
+&lt;br /&gt;
 .monthview-busy-time {&lt;br /&gt;
 		background: none;&lt;br /&gt;
 		background-image: url(../images/busy-time.png);&lt;br /&gt;
-		background-repeat: repeat;&lt;br /&gt;
+		background-repeat: repeat-y;&lt;br /&gt;
 		background-attachment: fixed;&lt;br /&gt;
-		background-position: 0 0;&lt;br /&gt;
+		background-position: right 0;&lt;br /&gt;
 		/*color: #FF0000;*/&lt;br /&gt;
 		width: 100%;&lt;br /&gt;
 		height: 16px;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Linux_Applications_Games&amp;diff=9381</id>
		<title>Portal:Linux Applications Games</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Linux_Applications_Games&amp;diff=9381"/>
		<updated>2010-03-14T20:28:47Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&amp;lt;!-- NOTE NOTE NOTE NOT  leave this comment at the top of the page. &lt;br /&gt;
&lt;br /&gt;
     copy this template and fill it in for each applicaton:  &lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=&lt;br /&gt;
|site=&lt;br /&gt;
|user=&lt;br /&gt;
|article=&lt;br /&gt;
|category=&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{portal-application-type&lt;br /&gt;
|type=Linux&lt;br /&gt;
|tag=Games&lt;br /&gt;
|title=A list of games.&lt;br /&gt;
|list=&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Doom&lt;br /&gt;
|site=http://doom.wikia.com/wiki/SDL_Doom&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Doom&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Doom by ID Software.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Duke3D&lt;br /&gt;
|site=http://en.wikipedia.org/wiki/Duke_Nukem_3d&lt;br /&gt;
|user=MetaView&lt;br /&gt;
|article=Duke3D&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Duke Nukem 3D by 3DRealms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Gnuboy&lt;br /&gt;
|site=http://www.sourcefiles.org/Emulators/Videogames/gnuboy-1.0.3.tar.gz.shtml&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Gnuboy&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Gameboy Emulator&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Quake&lt;br /&gt;
|site=http://www.libsdl.org/projects/quake/&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Quake&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Quake by ID Software.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=ScummVM&lt;br /&gt;
|site=http://scummvm.org&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=ScummVM&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=SCUMM multiple game running platform. &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Linux_Applications_Games&amp;diff=9380</id>
		<title>Portal:Linux Applications Games</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Linux_Applications_Games&amp;diff=9380"/>
		<updated>2010-03-14T20:28:25Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&amp;lt;!-- NOTE NOTE NOTE NOT  leave this comment at the top of the page. &lt;br /&gt;
&lt;br /&gt;
     copy this template and fill it in for each applicaton:  &lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=&lt;br /&gt;
|site=&lt;br /&gt;
|user=&lt;br /&gt;
|article=&lt;br /&gt;
|category=&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{portal-application-type&lt;br /&gt;
|type=Linux&lt;br /&gt;
|tag=Games&lt;br /&gt;
|title=A list of games.&lt;br /&gt;
|list=&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Doom&lt;br /&gt;
|site=http://doom.wikia.com/wiki/SDL_Doom&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Doom&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Doom by ID Software.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Duke3D&lt;br /&gt;
|site=http://en.wikipedia.org/wiki/Duke_Nukem_3d&lt;br /&gt;
|user=MetaView&lt;br /&gt;
|article=Duke3D&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Duke Nukem 3D by 3DRealms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Gnuboy&lt;br /&gt;
|site=http://www.sourcefiles.org/Emulators/Videogames/gnuboy-1.0.3.tar.gz.shtml&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Gnuboy&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Gameboy Emulator&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Quake&lt;br /&gt;
|site=http://www.libsdl.org/projects/quake/&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Quake&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Quake by ID Software.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=ScummVM&lt;br /&gt;
|site=http://scummvm.org&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=ScummVM&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=SCUMM multiple game running platform. &lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Portal:Linux_Applications_Games&amp;diff=9379</id>
		<title>Portal:Linux Applications Games</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Portal:Linux_Applications_Games&amp;diff=9379"/>
		<updated>2010-03-14T20:27:33Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__notoc__&amp;lt;!-- NOTE NOTE NOTE NOT  leave this comment at the top of the page. &lt;br /&gt;
&lt;br /&gt;
     copy this template and fill it in for each applicaton:  &lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=&lt;br /&gt;
|site=&lt;br /&gt;
|user=&lt;br /&gt;
|article=&lt;br /&gt;
|category=&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{portal-application-type&lt;br /&gt;
|type=Linux&lt;br /&gt;
|tag=Games&lt;br /&gt;
|title=A list of games.&lt;br /&gt;
|list=&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Doom&lt;br /&gt;
|site=http://doom.wikia.com/wiki/SDL_Doom&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Doom&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Doom by ID Software.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Duke3D&lt;br /&gt;
|site=http://en.wikipedia.org/wiki/Duke_Nukem_3d&lt;br /&gt;
|user=MetaView&lt;br /&gt;
|article=Duke3D&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Duke Nukem 3D by 3DRealms&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Gnuboy&lt;br /&gt;
|site=http://www.sourcefiles.org/Emulators/Videogames/gnuboy-1.0.3.tar.gz.shtml&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Gnuboy&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Gameboy Emulator&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=Quake&lt;br /&gt;
|site=http://www.libsdl.org/projects/quake/&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=Quake&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=Port of Quake by ID Software.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{portal-application-item&lt;br /&gt;
|name=ScummVM&lt;br /&gt;
|site=http://scummvm.org&lt;br /&gt;
|user=webOS internals SDL team&lt;br /&gt;
|article=ScummVM&lt;br /&gt;
|category=Games&lt;br /&gt;
|description=SCUMM multiple game running platform. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Application:Duke3D&amp;diff=9378</id>
		<title>Application:Duke3D</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Application:Duke3D&amp;diff=9378"/>
		<updated>2010-03-14T20:24:47Z</updated>

		<summary type="html">&lt;p&gt;MetaView: category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SDL]]&lt;br /&gt;
&lt;br /&gt;
=Duke3D=&lt;br /&gt;
[[Image:duke3d_icon.png|left]]&lt;br /&gt;
Duke3D is the WebOS port of Duke Nukem 3D a first-person shooter video game that was released by 3DRealms and published by Apogee Software on January 29, 1996. It is a sequel to the platform games Duke Nukem and Duke Nukem II published by Apogee. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
Ported by Henk Jonas Mar 2010.&amp;lt;br&amp;gt;&lt;br /&gt;
Received a lot of help from Rod Whitby&amp;lt;br&amp;gt;&lt;br /&gt;
Keyboard/Control Scheme &amp;amp; Overlay art based on the work for [[Application:Quake]] by Will Dietz&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
The source code to the Duke Nukem 3D v1.5 executable, which uses the Build engine, was released as free and open source software under the GPL on April 1, 2003.&lt;br /&gt;
&lt;br /&gt;
== Donate ==&lt;br /&gt;
Lots of work has gone into making this a great game for you to enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
[[Image:duke3d_game1.png]]&lt;br /&gt;
[[Image:duke3d_title.png]]&lt;br /&gt;
[[Image:duke3d_menu.png]]&lt;br /&gt;
[[Image:duke3d_game2.png]]&lt;br /&gt;
== Controls ''v1.0.6 and up'' ==&lt;br /&gt;
Controls were designed with the idea of JHBN forming a diamond and when thumb is on J at 45 degrees holding phone comfortably you should be able to reach all action keys easily without the need to take thumb off the keyboard.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Screen Controls:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Joystick move: bottom left corner&amp;lt;br&amp;gt;&lt;br /&gt;
Tip: Find the &amp;quot;dead zone&amp;quot; for the virtual joystick this is where nothing happens while finger is on screen. Once dead zone is established roll your thumb around it. The further you go the faster you will move/turn. It acts like a real joystick so keep that in mind.&amp;lt;br&amp;gt;&lt;br /&gt;
Joystick fire: bottom right corner&amp;lt;br&amp;gt;&lt;br /&gt;
Jump: top part of screen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Red: Action'''&amp;lt;br&amp;gt;&lt;br /&gt;
J= Fire&amp;lt;br&amp;gt;&lt;br /&gt;
H= Strafe Left&amp;lt;br&amp;gt;&lt;br /&gt;
N= Strafe Right&amp;lt;br&amp;gt;&lt;br /&gt;
B= Jump&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Yellow: Weapons'''&amp;lt;br&amp;gt;&lt;br /&gt;
Select Weapon by pressing corresponding number 1-9&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Purple: Only work during Action Keyboard mode''' ''Note- &amp;quot;Orange+Key&amp;quot; means you '''hold down''' orange key and press corresponding button''&amp;lt;br&amp;gt;&lt;br /&gt;
0= Toggle Between Action &amp;amp; Normal Keyboard (For typing in console use etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
Q= Menu/Esc&amp;lt;br&amp;gt;&lt;br /&gt;
W= Left arrow&amp;lt;br&amp;gt;&lt;br /&gt;
S= Up Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
Z= Right Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
Y= Right Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
A= Down Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
M= Map&amp;lt;br&amp;gt;&lt;br /&gt;
Space= Open/Use&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Check the ReadMe.txt which is in the Duke3D folder on your internal USB drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
v1.0.8 Initial public version&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.webos-internals.org/?p=games/duke3d.git;a=shortlog git Shortlog]&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
==Story==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Duke_Nukem_3d Wikipedia entry]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Application:Quake&amp;diff=9377</id>
		<title>Application:Quake</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Application:Quake&amp;diff=9377"/>
		<updated>2010-03-14T20:23:31Z</updated>

		<summary type="html">&lt;p&gt;MetaView: category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SDL]]&lt;br /&gt;
&lt;br /&gt;
=Quake=&lt;br /&gt;
[[Image:Quake_icon3_copy.png|left]]&lt;br /&gt;
Quake is a first-person shooter video game that was released by id Software on June 22, 1996. It was the first game in the popular Quake series of video games. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
Ported by Will Dietz Jan 2010. &amp;lt;br&amp;gt;&lt;br /&gt;
Packaged by Rod Whitby&amp;lt;br&amp;gt;&lt;br /&gt;
Keyboard/Control Scheme &amp;amp; Overlay art by Jack87&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to Jack87 for lots of help testing and feedback.&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
The source code of the Quake and QuakeWorld engines was licensed under the GPL in 1999. The id Software maps, objects, textures, sounds and other creative works remain under their original license. The shareware distribution of Quake is still freely redistributable and usable with the GPLed engine code. One must purchase a copy of Quake in order to receive the registered version of the game which includes more single player episodes and the deathmatch maps.&lt;br /&gt;
&lt;br /&gt;
On October 11, 2006, John Romero released the original map files for all of the levels in Quake under the GPL&lt;br /&gt;
&lt;br /&gt;
== Donate ==&lt;br /&gt;
Lots of work has gone into making this a great game for you to enjoy!&lt;br /&gt;
If you like it please consider [https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=3S7ULCYRCDWS8&amp;amp;lc=US&amp;amp;item_name=Will%20Dietz&amp;amp;item_number=palm%20pre&amp;amp;currency_code=USD&amp;amp;bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted donating]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
[[Image:Quake_Menu.png]]&lt;br /&gt;
[[Image:Quake_Lava.png]]&lt;br /&gt;
[[Image:Quake_Ogre.png]]&lt;br /&gt;
== Controls ''v1.1.0 and up'' ==&lt;br /&gt;
Controls were designed with the idea of JHBN forming a diamond and when thumb is on J at 45 degrees holding phone comfortably you should be able to reach all action keys easily without the need to take thumb off the keyboard.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With Virtual Joy Stick and Strafe Gesture you can play with keyboard closed if you like.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Gesture controls:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Gesture down= Next Weapon&amp;lt;br&amp;gt;&lt;br /&gt;
Gesture up= Previous Weapon&amp;lt;br&amp;gt;  &lt;br /&gt;
Hold Gesture= Strafe mode where joystick left right is strafe&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Screen Controls:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Just as displayed in picture with virtual Joystick for Look &amp;amp; Move&amp;lt;br&amp;gt;&lt;br /&gt;
Tip 1: Find the &amp;quot;dead zone&amp;quot; for the virtual joystick this is where nothing happens while finger is on screen. Once dead zone is established roll your thumb around it. The further you go the faster you will move/turn. It acts like a real joystick so keep that in mind.&amp;lt;br&amp;gt;&lt;br /&gt;
Tip 2: Moving around with finger on gesture strafe seems to work really well and letting go to turn/aim.&amp;lt;br&amp;gt;&lt;br /&gt;
Tip 3: Lower mouse speed in options menu.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Red: Action'''&amp;lt;br&amp;gt;&lt;br /&gt;
J= Fire&amp;lt;br&amp;gt;&lt;br /&gt;
H= Strafe Left&amp;lt;br&amp;gt;&lt;br /&gt;
N= Strafe Right&amp;lt;br&amp;gt;&lt;br /&gt;
B= Jump&amp;lt;br&amp;gt;&lt;br /&gt;
Sym= Fire&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Blue: Turbo'''&amp;lt;br&amp;gt;&lt;br /&gt;
I= Turbo Forward&amp;lt;br&amp;gt;&lt;br /&gt;
U= Turbo Strafe Left&amp;lt;br&amp;gt;&lt;br /&gt;
K= Turbo Strafe Right&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Yellow: Weapons'''&amp;lt;br&amp;gt;&lt;br /&gt;
Select Weapon by pressing corresponding number 1-8&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Purple: Only work during Action Keyboard mode''' ''Note- &amp;quot;Orange+Key&amp;quot; means you '''hold down''' orange key and press corresponding button''&amp;lt;br&amp;gt;&lt;br /&gt;
@= Toggle Between Action &amp;amp; Normal Keyboard (For typing in console use etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
Q= Menu/Esc&amp;lt;br&amp;gt;&lt;br /&gt;
'= Quick Load (Orange+L) &amp;lt;br&amp;gt;&lt;br /&gt;
_=Quick Save (Orange+,)&amp;lt;br&amp;gt;&lt;br /&gt;
W= Left arrow&amp;lt;br&amp;gt;&lt;br /&gt;
S= Up Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
Z= Right Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
A= Down Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
%= Console (Orange+I)&amp;lt;br&amp;gt;&lt;br /&gt;
0=Toggle overlay(Orange+@)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Quake-pre-Config.png]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Discussion on the topic can be found [http://forums.precentral.net/webos-internals/222222-quake.html Here]&amp;lt;br&amp;gt;&lt;br /&gt;
Video can be found on WebOS-Internals youtube [http://www.youtube.com/webosinternals channel]&amp;lt;br&amp;gt;&lt;br /&gt;
-Keep in mind Quake does not have a &amp;quot;Use Key&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
-You can customize Keyboard controls in the options menu  ''Note: Remember to toggle to regular keyboard mode when doing this''.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Beta Builds====&lt;br /&gt;
Beta builds are available--there are no guarantees on betas, but we'll try to keep them stable, and they'll get you extra features early.  Run &amp;quot;wget http://wdtz.org/files/quake.sh -O- |/bin/sh&amp;quot; from terminal to get the beta.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
v1.2.0 Added visual control overlay, Settings/binds/cvars now are saved across execution, Misc bugfixes.&amp;lt;br&amp;gt;&lt;br /&gt;
v1.1.0 Increased performance, Drastic improvements to control scheme (including virtual joystick, continuous fire, added gesture controls), Modal Keyboard, fix for Segfault Error&amp;quot; (doom worked but not quake).&amp;lt;br&amp;gt;&lt;br /&gt;
v1.0.11 Playable Release: Fixed New Game crash, Better Performance, Adjusted resolution for Pre Screen, Added Keyboard Bindings w/Touch screen controls 	&amp;lt;br&amp;gt;&lt;br /&gt;
v1.0.9 Initial version (Demo)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.webos-internals.org/?p=games/sdlquake.git;a=shortlog git Shortlog]&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
--Improved in 1.1.0: Performance could be better&amp;lt;br&amp;gt;&lt;br /&gt;
--Fixed in 1.1.0: Unable to lower sliders on option screen&amp;lt;br&amp;gt;&lt;br /&gt;
--Fixed in 1.1.0 replaced with gesture weapon change: Quick Weapon Switch is not functioning&amp;lt;br&amp;gt;&lt;br /&gt;
--Fixed in 1.1.0: Need to implement holding down fire for continues fire&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Story==&lt;br /&gt;
The player takes the role of an un-named protagonist sent into a portal in order to stop an enemy code-named &amp;quot;Quake&amp;quot;. Previously, the government had been experimenting with teleportation technology, and upon development of a working prototype called a &amp;quot;Slipgate&amp;quot;, this enemy has compromised the human connection with their own teleportation system, using it to insert death squads into the &amp;quot;human&amp;quot; dimension, supposedly in order to test the martial capabilities of humanity.&lt;br /&gt;
The sole surviving protagonist in Operation Counterstrike is the player, who must advance, starting each of the four episodes from a human held but overrun military base, before fighting through into other dimensions, traversing these via slipgate or their otherworld equivalent. Once passing through each slipgate, the player's main objective is to survive and locate the exit which will take him to the next level, not unlike that of id Software's previous hit, Doom.&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Application:Duke3D&amp;diff=9370</id>
		<title>Application:Duke3D</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Application:Duke3D&amp;diff=9370"/>
		<updated>2010-03-14T11:53:47Z</updated>

		<summary type="html">&lt;p&gt;MetaView: /* Quake */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Duke3D=&lt;br /&gt;
[[Image:duke3d_icon.png|left]]&lt;br /&gt;
Duke3D is the WebOS port of Duke Nukem 3D a first-person shooter video game that was released by 3DRealms and published by Apogee Software on January 29, 1996. It is a sequel to the platform games Duke Nukem and Duke Nukem II published by Apogee. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
Ported by Henk Jonas Mar 2010.&amp;lt;br&amp;gt;&lt;br /&gt;
Received a lot of help from Rod Whitby&amp;lt;br&amp;gt;&lt;br /&gt;
Keyboard/Control Scheme &amp;amp; Overlay art based on the work for [[Application:Quake]] by Will Dietz&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
The source code to the Duke Nukem 3D v1.5 executable, which uses the Build engine, was released as free and open source software under the GPL on April 1, 2003.&lt;br /&gt;
&lt;br /&gt;
== Donate ==&lt;br /&gt;
Lots of work has gone into making this a great game for you to enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
[[Image:duke3d_game1.png]]&lt;br /&gt;
[[Image:duke3d_title.png]]&lt;br /&gt;
[[Image:duke3d_menu.png]]&lt;br /&gt;
[[Image:duke3d_game2.png]]&lt;br /&gt;
== Controls ''v1.0.6 and up'' ==&lt;br /&gt;
Controls were designed with the idea of JHBN forming a diamond and when thumb is on J at 45 degrees holding phone comfortably you should be able to reach all action keys easily without the need to take thumb off the keyboard.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Screen Controls:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Joystick move: bottom left corner&amp;lt;br&amp;gt;&lt;br /&gt;
Tip: Find the &amp;quot;dead zone&amp;quot; for the virtual joystick this is where nothing happens while finger is on screen. Once dead zone is established roll your thumb around it. The further you go the faster you will move/turn. It acts like a real joystick so keep that in mind.&amp;lt;br&amp;gt;&lt;br /&gt;
Joystick fire: bottom right corner&amp;lt;br&amp;gt;&lt;br /&gt;
Jump: top part of screen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Red: Action'''&amp;lt;br&amp;gt;&lt;br /&gt;
J= Fire&amp;lt;br&amp;gt;&lt;br /&gt;
H= Strafe Left&amp;lt;br&amp;gt;&lt;br /&gt;
N= Strafe Right&amp;lt;br&amp;gt;&lt;br /&gt;
B= Jump&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Yellow: Weapons'''&amp;lt;br&amp;gt;&lt;br /&gt;
Select Weapon by pressing corresponding number 1-9&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Purple: Only work during Action Keyboard mode''' ''Note- &amp;quot;Orange+Key&amp;quot; means you '''hold down''' orange key and press corresponding button''&amp;lt;br&amp;gt;&lt;br /&gt;
0= Toggle Between Action &amp;amp; Normal Keyboard (For typing in console use etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
Q= Menu/Esc&amp;lt;br&amp;gt;&lt;br /&gt;
W= Left arrow&amp;lt;br&amp;gt;&lt;br /&gt;
S= Up Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
Z= Right Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
Y= Right Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
A= Down Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
M= Map&amp;lt;br&amp;gt;&lt;br /&gt;
Space= Open/Use&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Check the ReadMe.txt which is in the Duke3D folder on your internal USB drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
v1.0.8 Initial public version&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.webos-internals.org/?p=games/duke3d.git;a=shortlog git Shortlog]&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
==Story==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Duke_Nukem_3d Wikipedia entry]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=File:Duke3d_game2.png&amp;diff=9369</id>
		<title>File:Duke3d game2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=File:Duke3d_game2.png&amp;diff=9369"/>
		<updated>2010-03-14T11:53:04Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=File:Duke3d_menu.png&amp;diff=9368</id>
		<title>File:Duke3d menu.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=File:Duke3d_menu.png&amp;diff=9368"/>
		<updated>2010-03-14T11:51:55Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=File:Duke3d_title.png&amp;diff=9367</id>
		<title>File:Duke3d title.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=File:Duke3d_title.png&amp;diff=9367"/>
		<updated>2010-03-14T11:51:30Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=File:Duke3d_game1.png&amp;diff=9366</id>
		<title>File:Duke3d game1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=File:Duke3d_game1.png&amp;diff=9366"/>
		<updated>2010-03-14T11:50:59Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=File:Duke3d_icon.png&amp;diff=9365</id>
		<title>File:Duke3d icon.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=File:Duke3d_icon.png&amp;diff=9365"/>
		<updated>2010-03-14T11:49:54Z</updated>

		<summary type="html">&lt;p&gt;MetaView: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
	<entry>
		<id>http://wiki.webos-internals.org/index.php?title=Application:Duke3D&amp;diff=9364</id>
		<title>Application:Duke3D</title>
		<link rel="alternate" type="text/html" href="http://wiki.webos-internals.org/index.php?title=Application:Duke3D&amp;diff=9364"/>
		<updated>2010-03-14T11:49:02Z</updated>

		<summary type="html">&lt;p&gt;MetaView: Initial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Quake=&lt;br /&gt;
[[Image:duke3d_icon.png|left]]&lt;br /&gt;
Duke3D is the WebOS port of Duke Nukem 3D a first-person shooter video game that was released by 3DRealms and published by Apogee Software on January 29, 1996. It is a sequel to the platform games Duke Nukem and Duke Nukem II published by Apogee. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
Ported by Henk Jonas Mar 2010.&amp;lt;br&amp;gt;&lt;br /&gt;
Received a lot of help from Rod Whitby&amp;lt;br&amp;gt;&lt;br /&gt;
Keyboard/Control Scheme &amp;amp; Overlay art based on the work for [[Application:Quake]] by Will Dietz&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==License==&lt;br /&gt;
The source code to the Duke Nukem 3D v1.5 executable, which uses the Build engine, was released as free and open source software under the GPL on April 1, 2003.&lt;br /&gt;
&lt;br /&gt;
== Donate ==&lt;br /&gt;
Lots of work has gone into making this a great game for you to enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
[[Image:duke3d_game1.png]]&lt;br /&gt;
[[Image:duke3d_title.png]]&lt;br /&gt;
[[Image:duke3d_menu.png]]&lt;br /&gt;
[[Image:duke3d_game2.png]]&lt;br /&gt;
== Controls ''v1.0.6 and up'' ==&lt;br /&gt;
Controls were designed with the idea of JHBN forming a diamond and when thumb is on J at 45 degrees holding phone comfortably you should be able to reach all action keys easily without the need to take thumb off the keyboard.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Screen Controls:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Joystick move: bottom left corner&amp;lt;br&amp;gt;&lt;br /&gt;
Tip: Find the &amp;quot;dead zone&amp;quot; for the virtual joystick this is where nothing happens while finger is on screen. Once dead zone is established roll your thumb around it. The further you go the faster you will move/turn. It acts like a real joystick so keep that in mind.&amp;lt;br&amp;gt;&lt;br /&gt;
Joystick fire: bottom right corner&amp;lt;br&amp;gt;&lt;br /&gt;
Jump: top part of screen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Red: Action'''&amp;lt;br&amp;gt;&lt;br /&gt;
J= Fire&amp;lt;br&amp;gt;&lt;br /&gt;
H= Strafe Left&amp;lt;br&amp;gt;&lt;br /&gt;
N= Strafe Right&amp;lt;br&amp;gt;&lt;br /&gt;
B= Jump&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Yellow: Weapons'''&amp;lt;br&amp;gt;&lt;br /&gt;
Select Weapon by pressing corresponding number 1-9&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Purple: Only work during Action Keyboard mode''' ''Note- &amp;quot;Orange+Key&amp;quot; means you '''hold down''' orange key and press corresponding button''&amp;lt;br&amp;gt;&lt;br /&gt;
0= Toggle Between Action &amp;amp; Normal Keyboard (For typing in console use etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
Q= Menu/Esc&amp;lt;br&amp;gt;&lt;br /&gt;
W= Left arrow&amp;lt;br&amp;gt;&lt;br /&gt;
S= Up Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
Z= Right Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
Y= Right Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
A= Down Arrow&amp;lt;br&amp;gt;&lt;br /&gt;
M= Map&amp;lt;br&amp;gt;&lt;br /&gt;
Space= Open/Use&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Check the ReadMe.txt which is in the Duke3D folder on your internal USB drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
v1.0.8 Initial public version&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://git.webos-internals.org/?p=games/duke3d.git;a=shortlog git Shortlog]&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
==Story==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Duke_Nukem_3d Wikipedia entry]&lt;/div&gt;</summary>
		<author><name>MetaView</name></author>
	</entry>
</feed>