https://pandorawiki.org/api.php?action=feedcontributions&user=Cosam&feedformat=atomPandora Wiki - User contributions [en]2024-03-29T14:31:46ZUser contributionsMediaWiki 1.32.0-alphahttps://pandorawiki.org/index.php?title=PXML_specification&diff=7360PXML specification2011-04-06T15:21:06Z<p>Cosam: Further clarification of how the package ID attribute should be used.</p>
<hr />
<div>This article covers the specification for PXML files. To see the specification for PND repository files, please see the [[PND repository specification]].<br />
<br />
'''Attention:''' at the present time, the PXML file format isn't set in stone, and is therefore subject to change. There is no guarantee that the format or the schema are bug-free or will be changed at any time. In general it is likely that a working PXML file will stay valid, if the schema definition mentioned here is followed.<br />
<br />
This is the human-readable specification for the PXML file format. The PXML file format is used in your applications for the OpenPandora® that you package in ".pnd"-files or distribute otherwise, to make it possible for menus and launchers to use your applications and their properties.<br />
<br />
A PXML file should be appended to your ".pnd"-file, using the tools provided for that purpose, or put in a directory that you want to serve as a redistributable package, to make it possible for launchers and menus to find it. It should have the name "PXML.xml" not case sensitive, and there should only be one such file. The contents of the PXML file should also comply to this specification without exception, to guarantee that everyone will be able to read it.<br />
<br />
The following specification is based on what the latest version of the PXML_schema.xsd definition accepts as valid data. Files that do not pass the validation might still work as expected, but if the validation is passed you can be (almost) 100% sure that it is supposed to be correct.<br />
<br />
== XML compatibility ==<br />
The PXML format is XML-based and fully XML-compliant, which means that it can be read and written by any XML reader or writer. Included with this specification should also be a ".xsd"-file, which is used by XML tools to validate PXML files. A ".xsd"-file is also known as a XML schema, and can be called the "computer-readable" version of this document. It is very good practice to validate your PXML-files with that schema before publishing them.<br />
<br />
To write a PXML file, you also need to know the basics of writing a XML file. It boils down to the following:<br />
<br />
# If an element contains text or other elements, it needs a start-tag and an end-tag. This looks like (1)<br />
# If an element does not contain other elements or text, but only attributes, it looks like (2)<br />
<source lang="xml"><br />
<exampleelement someattribute="something">something inside it</exampleelement> <!-- (1) --><br />
<exampleelement2 someattribute="something"/> <!-- (2) --><br />
</source><br />
<br />
== General format ==<br />
<br />
The PXML-file is split up into multiple so-called elements, each of which specify one property of the ".pnd"-package. All of these elements are surrounded with a "<PXML>"-tag, which tells the readers of the file that the data within that tag belongs to a PXML file. The tag and elements should be defined as follows:<br />
=== The <PXML> tag ===<br />
==== Description ====<br />
The PXML-tag serves as the container for all PXML elements. It is the first thing that should occur in your PXML file. An example "<PXML>"-tag would look like this:<br />
<br />
<source lang="xml"><br />
<PXML xmlns="http://openpandora.org/namespaces/PXML"><br />
<!--All of the PXML elements should be put here--><br />
</PXML><br />
</source><br />
<br />
As you can see, the PXML tag only requires the "xmlns" attribute.<br />
<br />
* The "xmlns" attribute is required by the XML standard, and guarantees that this file will be identified as a PXML file. You must include the xmlns attribute, exactly as shown, in your PXML file, with the URL as specified. Only then can it be guaranteed that the file will be read at all by launchers and menu apps.<br />
<br />
=== The <package> element ===<br />
Since "pnd"-files can contain various applications the new <package> element was introduced. It is meant to allow you to describe what the package is about. This will, at least at the moment (firmware 1 pre hotfix6), not be used by the pandora itself for detection, but is meant as tool for package repositories as well as package managers that might eventually be created. Each pnd should have one of those at the top (and only one). The information required in the <package> block will be explained below in the respective section below.<br />
<br />
=== The <application> element ===<br />
The Application-tag permits the PXML.xml container to have multiple applications within it; you should have at least one application tag-pair (for one app), though you may have many. The information required in the <application> blocks will be explained below in the respective section below.<br />
<br />
== The <package> area ==<br />
As described above, each pnd should start with a package description. For single application packages this can basically be a copy of the respective areas from the <application> element.<br />
<br />
<source lang="xml"><br />
<package id="uniqueID"><br />
<!--All other elements described in this section (author, version...) should be put here--><br />
</package><br />
</source><br />
<br />
* ''(required)'' The "id" attribute specifies an identifier common to all versions of a particular PND package. This can be achieved by appending some random number to your package name or by simply generating a completely random, very long identifier. A good ID may consist of the application name, developer name and some key, for example ''battlejewels.skeezix.001'' or ''quake-1.pickle.001''. '''The package ID must not include characters which would be invalid in directory or file names, such as ?, >, /, etc. Use of such characters will prevent the PND from functioning.''' The package ID allows repositories to identify different versions of the same package and therefore determine whether that package should be updated. The package ID should therefore '''not''' be changed if a package is merely updated.<br />
<br />
=== The <author> element ===<br />
==== Description ====<br />
The author element is an element that is used by the author to introduce him/herself.<br />
An author element is mandatory. It accepts the following attributes:<br />
<br />
* ''(required)'' The name attribute specifies the name of the author.<br />
* ''(optional)'' The website attribute specifies the website of the author.<br />
* ''(optional)'' The email attribute specifies the e-mail of the author.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<author name="Bjornhild Andersson" website="http://some.website.with.author.info"/><br />
</source><br />
<br />
=== The <version> element ===<br />
==== Description ====<br />
The version element specifies the application version.<br />
A version element is required. It is recommended to keep the entries as simple as possible, where possible just numbers. It accepts the following attributes:<br />
<br />
* ''(required)'' The major attribute specifies the major version number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The minor attribute specifies the minor version number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The release attribute specifies the release number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The build attribute specifies what build the application is at. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(optional'' You can specify a type attribute that is either set to "release", "beta" or "alpha". This will (at the moment) not be read by libpnd but package repositories might use it in some way (to eg mark "beta" versions explicitly or something like this). If this is not specified, "release" will be assumed.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<version major="1" minor="1" release="1" build="2" type="release"/><br />
</source><br />
<br />
=== The <titles> element ===<br />
==== Description ====<br />
The titles element is an element that contains multiple other elements.<br />
<br />
The titles element specifies the text that is shown to the users of your PND file as the package title. Inside the <titles> block should be one entry for each language you want to support. The first language listed should always be ''en_US''. The language is indicated by the lang attribute. The <titles> element with at least one "title"-element is required, in the "en_US" American English language. Additional tags are optional.<br />
<br />
At least one "title"-element is required, in the "en_US" American English language. Additional tags are optional.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<titles><br />
<title lang="en_US">Your application name</title><br />
<title lang="de_DE">Dein Programmname</title><br />
</titles><br />
</source><br />
<br />
=== The <descriptions> element ===<br />
==== Description ====<br />
The descriptions element is an element that contains multiple other elements.<br />
<br />
The descriptions element specifies the text that is shown to the users of your PND file as the package description. Inside the <titles> block should be one entry for each language you want to support. The first language listed should always be ''en_US''. The language is indicated by the lang attribute. The <titles> element with at least one "title"-element is required, in the "en_US" American English language. Additional tags are optional. The "descriptions"-element is optional, though it is highly recommended to specify it. If specified, at least one entry for "en_US" ( American English language) is required. Several of those elements are allowed, one for each lang that you want to display.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<descriptions><br />
<description lang="en_US">Your long description of this application, describing its purpose and highlighting its features.</description><br />
<description lang="de_DE">Deine etwas längere Programmbeschreibung, die den Sinn des Programmes und seine wichtigsten Features beschreiben sollte.</description><br />
</descriptions><br />
</source><br />
<br />
=== The <icon> element ===<br />
==== Description ====<br />
The icon element should specify a nice icon for your application. An icon element is optional, but if one is specified you have to include the src attribute. Only up to one icon element is allowed. It accepts the following attributes:<br />
<br />
* ''(required)'' The src attribute specifies the path to the image file used as the icon.<br />
<br />
NOTE: Current implementation will use the pnd-file's appended icon; for a PXML-app-directory, it will try to use the icon mentioned in the PXML. So for a pnd-file, all subapps will show the appended-icon, regardless of the <icon> tag within the PXML.xml<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<icon src="images/icon.png"/><br />
</source><br />
<br />
== The <application> area ==<br />
The Application-tag permits the PXML.xml container to have multiple applications within it; you should have at least one application tag-pair (for one app), though you may have many.<br />
<br />
<source lang="xml"><br />
<application id="uniqueID" appdata="dirname"><br />
<!--All other elements described in this section (exec, author...) should be put here--><br />
</application><br />
</source><br />
<br />
* ''(required)'' The "id" attribute specifies an identifier for your current application, and should be something globally unique so that no two PND packages have the same id. This can be achieved by appending some random number to your application name, and to use that as your id; or to simply generate a completely random, very long id. If this id already is used in another PND file, those two PND files will conflict with each other, and unforseeable errors will occur. Please put effort into generating an unique id for your PXML-file.<br />
<br />
* ''(optional)'' The "appdata" permits a directory name (NOT PATH) to be specified as preferred; if not present, the unique-id will be used. For example, we may want a unique-id of "Battlejewels.skeezix.3216836217382163.v001", but a appdata path of "battlejewels" to make it easier on the user, or to have multiple different battlejewels sharing one appdata.<br />
<br />
A good unique-id is the application name, developer name, and some key you may wish to update on occasion (should state-data become incompatible between updates, say.)<br />
<br />
Consider:<br />
battlejewels.skeezix.001<br />
quake-1.pickle.001<br />
<br />
unique-id formatting: '''Should not include directory or filename invalid characters, such as ?, >, /, etc. Any of those will cause the pnd-file to not function.'''<br />
<br />
Note on Uniqueness: The unique-id should be unique against other pnd-files, but may be re-used by other 'application' tags within the pnd; for example, you may have multiple subapps that want to share the same appdata path (which is formed based on unique-id!), so use the same unique-id. You might then have a utility application in that same pnd, which needs its own appdata, and so gets its own unique-id.<br />
<br />
Below are the allowed elements inside the <application> blocks. You can have as many applications listed in a single PXML file as you want to (though there is/was a limit in libpnd that was set to about 50 once upon the time, which might eventually be completely be removed).<br />
<br />
=== The <exec> element ===<br />
==== Description ====<br />
The exec element should specify all the information needed to execute your application. An exec element must be included in every PXML file. Only exactly one exec element is allowed. It accepts the following attributes:<br />
<br />
* ''(required)'' The command attribute specifies the path to the executable file. This should be a relative path to a file within the PND package. Must contain no arguments! One strategy you may need is to point to a sh-script in your pnd-file, which in turn sets up LD_LIBRARY_PATH, determines arguments to pass, uses zenity to pop up a pre-run menu, or other trickery.<br />
* ''(optional)'' The arguments attribute may be not present, or present with 1 or more arguments to the executable.<br />
* ''(optional)'' The startdir attribute specifies the starting directory (Also known as the working directory) that the application should start in. This should be a relative path to a directory within the PND package, or to a well-known directory in the Pandora file system.<br />
* ''(optional)'' The standalone attribute specifies whether or not this application can run on its own, or if it needs parameters to run. A value of "true" or "1" means that the application can be run without parameters. A value of "false" or "0" means that the application must be run with parameters (Meaning that no icon will appear for it in a launcher; it will only be run via file associations or via the terminal).<br />
* ''(optional)'' The background attribute specifies whether or not this application should run in the background, and it should be possible to switch to other apps while it is running, or if it is the only application that should be running. A value of "true" or "1" means that the application can run in the background. A value of "false" or "0" means that the application must be run as the only application.<br />
* ''(optional)'' The x11 attribute may be missing; values are one of "req", "stop", and "ignore". If "req" is set, it means the application requires X11 (and possibly could be filtered out of users display in a menu if X is not running, or perhaps such a menu would have to start X.) If "stop" is set, it means X must be not running, or temporarily shut down, for the app. If "ignore" is set, the app doesn't care if X is running or not (such as an SDL app, or a sh-script, etc.)<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<exec background="true" startdir="/usr/share/icons/" standalone="true" command="myprogram" arguments="arg1 arg2" x11="option"/><br />
</source><br />
<br />
=== The <author> element ===<br />
==== Description ====<br />
The author element is an element that is used by the author to introduce him/herself.<br />
An author element is mandatory. It accepts the following attributes:<br />
<br />
* ''(required)'' The name attribute specifies the name of the author.<br />
* ''(optional)'' The website attribute specifies the website of the author.<br />
* ''(optional)'' The email attribute specifies the e-mail of the author.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<author name="Bjornhild Andersson" website="http://some.website.with.author.info"/><br />
</source><br />
<br />
=== The <version> element ===<br />
==== Description ====<br />
The version element specifies the application version.<br />
A version element is required. It is recommended to keep the entries as simple as possible, where possible just numbers. It accepts the following attributes:<br />
<br />
* ''(required)'' The major attribute specifies the major version number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The minor attribute specifies the minor version number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The release attribute specifies the release number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The build attribute specifies what build the application is at. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(optional'' You can specify a type attribute that is either set to "release", "beta" or "alpha". This will (at the moment) not be read by libpnd but package repositories might use it in some way (to eg mark "beta" versions explicitly or something like this). If this is not specified, "release" will be assumed.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<version major="1" minor="1" release="1" build="2" type="release"/><br />
</source><br />
<br />
=== The <osversion> element ===<br />
==== Description ====<br />
The osversion element specifies the minimal OS version that supports the PND file. The PND file will not be loaded by an OS that has an older version than the one specified here. If unsure, just use a '0' in the respective field.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<osversion major="1" minor="1" release="1" build="2"/><br />
</source><br />
<br />
* ''(required)'' The major attribute specifies the major version number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The minor attribute specifies the minor version number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The release attribute specifies the release number. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
* ''(required)'' The build attribute specifies what build the application is at. Valid entries: strings consisting of letters (a-z and A-Z) as well as the chars '+' and '-'.<br />
<br />
=== The <titles> element ===<br />
==== Description ====<br />
The titles element is an element that contains multiple other elements.<br />
<br />
The titles element specifies the text that is shown to the users of your PND file as the application title. Inside the <titles> block should be one entry for each language you want to support. The first language listed should always be ''en_US''. The language is indicated by the lang attribute. The <titles> element with at least one "title"-element is required, in the "en_US" American English language. Additional tags are optional.<br />
<br />
'''Note:''' This is new in HF6. For backwards compatibilty please include the <title lang="en_US"> once outside the <titles> block, too!<br />
<br />
At least one "title"-element is required, in the "en_US" American English language. Additional tags are optional.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<titles><br />
<title lang="en_US">Your application name</title><br />
<title lang="de_DE">Dein Programmname</title><br />
</titles><br />
<title lang="en_US">Your application name</title><!--pre HF6 compatibility--><br />
</source><br />
<br />
=== The <descriptions> element ===<br />
==== Description ====<br />
The descriptions element is an element that contains multiple other elements.<br />
<br />
The descriptions element specifies the text that is shown to the users of your PND file as the package description. Inside the <titles> block should be one entry for each language you want to support. The first language listed should always be ''en_US''. The language is indicated by the lang attribute. The <titles> element with at least one "title"-element is required, in the "en_US" American English language. Additional tags are optional. The "descriptions"-element is optional, though it is highly recommended to specify it. If specified, at least one entry for "en_US" ( American English language) is required. Several of those elements are allowed, one for each lang that you want to display.<br />
<br />
'''Note:''' This is new in HF6. For backwards compatibilty please include the <description lang="en_US"> once outside the <titles> block, too!<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<descriptions><br />
<description lang="en_US">Your long description of this application, describing its purpose and highlighting its features.</description><br />
<description lang="de_DE">Deine etwas längere Programmbeschreibung, die den Sinn des Programmes und seine wichtigsten Features beschreiben sollte.</description><br />
</descriptions><br />
<description lang="en_US">Your long description of this application, describing its purpose and highlighting its features.</description><!--pre HF6 compatibility--><br />
</source><br />
<br />
=== The <icon> element ===<br />
==== Description ====<br />
The icon element should specify a nice icon for your application. An icon element is optional, but if one is specified you have to include the src attribute. Only up to one icon element is allowed. It accepts the following attributes:<br />
<br />
* ''(required)'' The src attribute specifies the path to the image file used as the icon.<br />
<br />
NOTE: Current implementation will use the pnd-file's appended icon; for a PXML-app-directory, it will try to use the icon mentioned in the PXML. So for a pnd-file, all subapps will show the appended-icon, regardless of the <icon> tag within the PXML.xml<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<icon src="images/icon.png"/><br />
</source><br />
<br />
=== The <licenses> element ===<br />
==== Description ====<br />
The licenses element is an element that contains multiple other elements.<br />
<br />
It contains multiple license elements. Every element represents one license (so you *can* also multilicense something). You have to provide at least one license for your application. You can basically enter anything you want, though if you are using an existing license, it is best to just enter the name and provide a link to the full version. This tag also allows you to provide links to websites with the sourcecode. <br />
<br />
* ''(required)'' The name attribute specifies what the license is called. If you don't have a real license you can also enter some short text here (please keep it short!) or just enter "other" and doN't care no more.<br />
* ''(optional)'' The url attribute can be used to specify a url to the full license text.<br />
* ''(optional)'' The sourcecodeurl attribute can be used to specify a url to the sources.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<licenses><br />
<license name="GPLv2+" url="http://www.gnu.org/licenses/gpl-2.0.html" sourcecodeurl="http://pandora.org/sources/package.tar.bz2"/><br />
<license name="other"/><br />
</licenses><br />
</source><br />
<br />
=== The <previewpics> element ===<br />
==== Description ====<br />
The previewpics element is an element that contains multiple other elements.<br />
A previewpics element is optional.<br />
<br />
It contains multiple pic-elements. Every pic-element represents one preview picture. If the previewpics element is specified, it must contain at least one pic element. Use the native 800x480 LCD screen resolution, minimenu and others will scale it down as needed.<br />
<br />
* ''(required)'' The src attribute on a pic element specifies the path to the image file used as the preview picture.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<previewpics><br />
<pic src="preview/pic1.jpg"/><br />
<pic src="preview/pic2.jpg"/><br />
</previewpics><br />
</source><br />
<br />
=== The <info> element ===<br />
====Description====<br />
The "info" element allows the PXML.xml to suggest to the desktop environment or menu a file that may be shown to the user when they want to know more - be it an About, a Install Guide, a User Guide, or all of the above. Per application only up to one of those entries is allowed. If you need more, the best approach is to create an html file and link the other files.<br />
<br />
The file can be a txt-file or an html-file, and as the PXML-app-dir or .pnd-application will be mounted, the file may in turn branch to other files should it wish to.<br />
<br />
Developers do not need to have this element, if their app is nice and simple and just runs. If the application requires additional set up (such as Quake requiring separate pak files that cannot be included in the pnd), or if you wish to include sample config files or config guidelines for something complex like DosBox, or include Pandora-specific notes.. those are all good things. But the developer is encouraged to be tasteful and not go hog-wild!<br />
<br />
* ''(required)'' name → the name to be shown in the menu; should be obvious that it belongs to the pnd .. Quake's game pnd could have "Quake 1 Setup".<br />
* ''(required)'' type → the mime type for the file; in the event the consuming application can map mimetypes to an appropriate executable, this would be a good way of letting the user's preferred reader come up. Should be one of "text/html" (for an html file) or "text/plain" (for a .txt file). Those two are the only types allowed if the validation against the scheme is meant to be successful.<br />
* ''(required)'' src → A file (including path relative to the pnd; ie: ./index.html would be the root of the pnd) in the pnd to open up; by default, the web browser will likely be used to open it.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<info name="AwesomeGame Setup" type="text/html" src="index.html"/><br />
</source><br />
<br />
=== The <categories> element ===<br />
==== Description ====<br />
The categories element is an element that contains multiple other elements.<br />
A categories element is required, and must contain at least one category.<br />
<br />
Menus that use your PXML in any shape or form will use the category information to sort your application entry into the tree or sub menus. Depending on the menu system, this will be done differently every time. It is therefore advisable to specify as many categories and subcategories as possible (and as suitable; don't specify that your application belongs in a category if it doesn't).<br />
<br />
The "categories" element contains multiple category-elements. Every category-element represents one category that this app can be sorted into. Valid top-level categories are (among others):<br />
<br />
# AudioVideo<br />
# Audio<br />
# Video<br />
# Development<br />
# Education<br />
# Game<br />
# Graphics<br />
# Network<br />
# Office<br />
# Settings<br />
# System<br />
# Utility<br />
<br />
Please see [http://standards.freedesktop.org/menu-spec/latest/apa.html the FreeDesktop specification] for more information. In it, you will also find valid subcategories for your top-level categories.<br />
<br />
The category-element takes one attribute: The name-attribute. This attribute represents the category name, which preferrably should be one of the above.<br />
<br />
A category-element can contain further child-elements: subcategory-elements. These represent the subcategories of a category that the app will be sorted into.<br />
<br />
The subcategory-element also takes a name-attribute; this attibute can contain a name for your subcategory.<br />
<br />
For passing validation any category/subcategory entries have to confirm to the FDO specs linked above.<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<categories><br />
<!-- This app belongs in the "Game/StrategyGame" category --><br />
<category name="Game"><br />
<subcategory name="StrategyGame"/><br />
</category><br />
<!-- This app also belongs in the "Graphics/ImageProcessing" category --><br />
<category name="Graphics"><br />
<subcategory name="ImageProcessing"/><br />
</category><br />
</categories><br />
</source><br />
<br />
=== The <associations> element ===<br />
==== Description ====<br />
The associations element is an element that contains multiple other elements.<br />
An associations element is optional, except if exec.standalone is false (this is not checked via the schema!).<br />
<br />
It contains multiple association-elements. Every association-element represents one file action association.<br />
<br />
* ''(required)'' The name attribute on an association element specifies the user-friendly action name for the association.<br />
* ''(required)'' The filetype attribute on an association element specifies what file types (in MIME format) that this association should apply to.<br />
* ''(required)'' The exec attribute on an association element specifies the command-line arguments that should be given to the program, when this action is performed. The exec can contain a "%s", which indicates where the file name of the file, that the action is performed on, should be inserted. For example, if the exec-line is "--file %s --type lol", and you have a file "lol.bmp" that the action is performed on, the exec-line is transformed into "--file "lol.bmp" --type lol"<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<associations><br />
<association name="Deinterlaced Bitmap Image" filetype="image/bmp" exec="-f %s --no-deinterlacing"/><br />
<association name="Style sheet system crasher" filetype="text/css" exec="-f %s --crash-on-success"/><br />
</associations><br />
</source><br />
<br />
=== The <clockspeed> element ===<br />
==== Description ====<br />
The clockspeed element specifies what clockspeed this app should run at. Please do only specify this element if your application *needs* to run at the specified clock speed.<br />
A clockspeed element is optional. It accepts the following attributes:<br />
<br />
* ''(required)'' The frequency attribute specifies the wanted frequency, in megahertz (MHz).<br />
<br />
==== Example ====<br />
<source lang="xml"><br />
<clockspeed frequency="600"/><br />
</source><br />
<br />
== Example files ==<br />
There are several example files available in the [http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=tree;f=docs/examples git repository]. They do match the current specification and (unless mentioned differently) validate. Below the direct links and a short description what they are meant to show:<br />
<br />
* [http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=blob;f=docs/examples/PXML.xml PXML.xml]: This is a sample PXML.xml file making use of many different things.<br />
* [http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=blob;f=docs/examples/average-case_PXML.xml average-case_PXML.xml]: This is an example how a "common" pnd with just one application could look. Most of the information for the <package> block can in this case directly be copied over from the respective parts in the <application> block.<br />
* [http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=blob;f=docs/examples/full-sample_PXML.xml full-sample_PXML.xml]: This is a complex example defining a "real" package collection. It offers several applications, all using different features of PXML.<br />
* [http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=blob;f=docs/examples/minimum-schema_PXML.xml minimum-schema_PXML.xml]: This is a minimum example that will validate with the schema but basically offer nothing beside what really is required. This application should work nicely with any pnd repositories based upon the PXML specs. '''NOTE:''' This application will not work with pre HF6, for support for OS versions up to HF6 an additional <title> block outside of <titles> is required!<br />
* [http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=blob;f=docs/examples/minimum-libpnd_PXML.xml minimum-libpnd_PXML.xml]: This is a minimum example that will work on the pandora, but is '''not''' following the schema and lots of information that will be required for repositories based on the PXML specs is not available.<br />
<br />
== Validation ==<br />
To validate a PXML file, you need a XSD (XML schema) validator, and you have to know how to use it. The schema is also available in a plaintext file described in words that are by far more compact than this page but still understandable for coders: [http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=blob;f=docs/PXML_schema_plaintext.txt plaintext description of the schema]<br />
<br />
The current-most XSD is in 'libpnd' (in the git repository). Here is the file history: [http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=history;f=docs/PXML_schema.xsd PXML_schema.xsd file history]<br />
Once on the history page, just click on the filename (right click -> save as) to download the latest version.<br />
<br />
The easiest way to run validation is using this command:<br />
xmllint --noout --schema PATH/TO/PXML_schema.xsd PATH/TO/PXML.xml<br />
To run it you have to have xmllint installed and the (latest) PXML_schema.xsd definition downloaded. Using this command you can now simply evaluate if the PXML.xml file is valid.<br />
<br />
'''Attention''': It is possible to validate PXML files that won't work with pre HotFix6. If you want to have the pnd work with basically all versions of the OS (you most likely want this!) please have a look above searching for ''<!--pre HF6 compatibility-->'' and include those blocks in your pxml file.<br />
<br />
[[Category:Development]]<br />
[[Category:Official OpenPandora Development]]<br />
[[Category:PND]]</div>Cosamhttps://pandorawiki.org/index.php?title=USB_compatibility_list&diff=3578USB compatibility list2010-09-06T21:23:53Z<p>Cosam: /* Compact USB Hubs */</p>
<hr />
<div>==Devices==<br />
<br />
===Networking===<br />
----<br />
<br />
<br />
====HSDPA (3G) Modems====<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Device<br />
! Driver<br />
! Connector<br />
! Supported standard<br />
! Current draw<br />
! Suggested connection to Pandora<br />
! Tested in Linux<br />
! Tested on Pandora<br />
! Additional comments<br />
|-<br />
| Huawei E160<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| 250mA<br />
| standard-A port<br />
| Yes<br />
| Yes<br />
| <br />
|-<br />
| Huawei E160E<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| 250mA<br />
| standard-A port<br />
| Yes<br />
| Yes<br />
| <br />
|-<br />
| Huawei E220<br />
| Not required<br />
| standard-A<br />
| USB 1.1<br />
| 250mA<br />
| standard-A port via High Speed hub<br />
| Yes<br />
| Yes<br />
|<br />
|-<br />
| iPhone 3GS (Probably also 1G/3G)<br />
| ipheth<br />
| standard-A<br />
| USB 2.0<br />
| 500mA<br />
| USB A<br />
| Yes, works.<br />
| Yes, works.<br />
| Requires a good bit of dependencies to get working. Tested with Debian from SD, but should work in Angstrom with some work. The ipheth wwan0 device only provides a connection over the 3G modem, even if you're connected to a wifi network. I used the iproxy and SSH tunneling method with proxychains to get to the wifi network.<br />
|<br />
|-<br />
| HTC Desire<br />
| not required<br />
| standard-A<br />
| USB 2.0<br />
| 500mA<br />
| USB A<br />
| Yes, works.<br />
| Yes, works.<br />
| Requires internet connection sharing to be enabled from the phone.<br />
|}<br />
<br />
====USB to Ethernet adapters====<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Device<br />
! Driver<br />
! Connector<br />
! Supported standard<br />
! Current draw<br />
! Suggested connection to Pandora<br />
! Tested in Linux<br />
! Tested on Pandora<br />
! Additional comments<br />
|-<br />
| Apple USB Ethernet Adapter MB442Z/A<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| <br />
| standard-A port<br />
| Yes<br />
| Yes<br />
| Works perfectly on the Pandora. You may need to left-click the networking icon on the panel in Xfce, and click "Ifupdown (bnep0)" in order to connect to the internet.<br />
|-<br />
| EU.MARK USB 10/100M RJ45 Ethernet Network Adapter Dongle (MosChip MCS7830)<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| <br />
| standard-A port<br />
| Yes<br />
| No<br />
| Tested on Opensuse 11.2 - USB ID: 9710:7830 - bought from [http://www.dealextreme.com/details.dx/sku.22684 DealExtreme]<br />
|-<br />
| Wii USB 2.0 adapter (use [http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=86;71;101 ASIX AX 88772 USB 2.0 chip])<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| <br />
| standard-A port<br />
| Yes<br />
| Yes<br />
| Works perfectly on the Pandora. I have not the official one from Nintendo but a clone from [http://www.dealextreme.com/details.dx/sku.5926 dealextrem]<br />
|}<br />
<br />
<br />
====USB WiFi adapters====<br />
The Pandora stock kernel doesn't seem to come with any wireless driver support outside of the internal wifi chip. The only way you'll get wireless working is to build your own kernel with it included or try [http://wireless.kernel.org/en/users/Download compat-wireless].<br />
<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Device<br />
! Driver<br />
! Connector<br />
! Supported standard<br />
! Current draw<br />
! Suggested connection to Pandora<br />
! Tested in Linux<br />
! Tested on Pandora<br />
! Additional comments<br />
|-<br />
| Belkin N1 Wireless USB Adapter (F5D8051) ("Ver. 2053") (MARVELL v1021)<br />
| N/A<br />
| Standard-A<br />
| USB 2.0<br />
| <br />
| Not connecting it at all.<br />
| Reported to work with ndiswrapper.<br />
| No native driver support and ndiswrapper obviously won't work.<br />
| There's a previous revision of this dongle which is supposed to have a Ralink chip, but they revised it and put a different chip inside.<br />
|-<br />
| Cisco/Linksys AE1000 High Performance Wireless-N USB Adapter<br />
| rt3572sta (RT3572USB)<br />
| Standard-A<br />
| USB 2.0<br />
| <br />
| USB A<br />
| Reportedly works.<br />
| Works with a modified driver.<br />
| Download the driver from [http://www.ralinktech.com/support.php?s=2 ralink's driver site], edit ./common/rtusb_dev_id.c, before "#endif // RT2870" add "{USB_DEVICE(0x13B1,0x002F)},", compile. '''NOTE: Broke after three days!'''<br />
|}<br />
<br />
See also this thread [[http://www.gp32x.com/board/index.php?/topic/55570-new-pandora thread]] on the forums for the latest.<br />
<br />
<br />
===Storage===<br />
----<br />
<br />
<br />
====External Hard Disk Drives====<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Device<br />
! Driver<br />
! Connector<br />
! Supported standard<br />
! Current draw<br />
! Suggested connection to Pandora<br />
! style="min-width: 120px" | Works<br />
! Additional comments<br />
|-<br />
| LaCie Rikiki 250GB USB 2.0 2.5" Hard Drive<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Unknown<br />
| standard-A port via powered High Speed Hub<br />
| Not working on Pandora<br />Works in Linux.<br />
| This drive does not work on a Pandora. Not only does it fail to spin up, but it causes the Pandora's screen to pulsate wildly, much like an old CRT would if you placed a speaker or a magnet near to it. I have not yet tested this with a powered hub.<br />
|-<br />
| SAMSUNG S1 Mini 250GB HXSU025BA, 1.8 Inch USB Hard Drive<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Unknown<br />
| standard-A port via powered High Speed Hub<br />
| Untested on Pandora<br />Works in Linux (*)<br />
| * Logical Block Size being 4096 partitioning and formating can be an issue on Linux. [http://ubuntuforums.org/showthread.php?t=1252729 Ubuntu forum] Try using Palimpsest on Ubuntu 9.10 or later. [http://anandtech.com/storage/showdoc.aspx?i=3691 Article on moving to 4096 LBS]<br />
|-<br />
| Toshiba HDDR320E03E 320GB 2.5-Inch Ext USB Hard Drive<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Unknown<br />
| standard-A port via powered High Speed Hub<br />
| Untested on Pandora<br />Works in Linux<br />
|<br />
|-<br />
| Verbatim 250GB Model #47580 Hard Drive<br />
| Not required<br />
| direct<br />
| USB 2.0<br />
| Unknown<br />
| direct<br />
| Works on Pandora<br />Works in Linux<br />
| Tested by [http://www.gp32x.com/board/index.php?/topic/54509-dont-use-lacie-25-usb-hard-disk-drives-with-a-pandora/page__view__findpost__p__877512 almatuk]. "worked an absolute treat when plugged into the Pandora. Watched videos directly from it at full speed, no need for powered USB hub. Had issues playing roms directly off it however as it was formatted NTFS. I'm sure if I formatted to FAT32 these would disappear."<br />
|-<br />
| Western Digital 160GB Elements External USB 2.0 2.5" Hard Drive<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Unknown<br />
| standard-A port via powered High Speed Hub<br />
| Works on Pandora<br />Works in Linux<br />
| This drive works just fine with the Pandora.<br />
|-<br />
| Western Digital 250GB Elements Portable USB 2.0 2.5" Hard Drive<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Unknown<br />
| Direct or standard-A port via High Speed Hub<br />
| Works on Pandora<br /><br />
| Works perfectly fine with Pandora.<br />
|-<br />
| Western Digital 250GB My Passport Essential USB 2.0 2.5" Hard Drive<br />
| Not required<br />
| direct?<br />
| USB 2.0<br />
| Unknown<br />
| direct?<br />
| Works on Pandora<br />Works in Linux<br />
| Tested by [http://www.gp32x.com/board/index.php?/topic/54509-dont-use-lacie-25-usb-hard-disk-drives-with-a-pandora/page__view__findpost__p__877386 TheDarkSpectrum48K]. "Works perfectly!"<br />
|-<br />
| Western Digital 400GB My Passport Essential USB 2.0 2.5" HDD model WDME4000TE<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Unknown<br />
| Direct<br />
| Works on Pandora<br />
| Tested by [http://www.gp32x.com/board/index.php?/user/14534-peca/ Peca]. "Works perfectly!"<br />
|-<br />
| Seagate Seagate® Expansion™ External Drives<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Unknown<br />
| Direct<br />
| Doesn't work on Pandora<br />Works in Linux<br />
| Tested by [http://www.gp32x.com/board/index.php?/user/14781-hitnrun/]. "Isn't even detected in lsusb (drive powered by external power source)"<br />
|}<br />
<br />
====DVD/CD Drives====<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Device<br />
! Driver<br />
! Connector<br />
! Supported standard<br />
! Current draw<br />
! Suggested connection to Pandora<br />
! Tested in Linux<br />
! Tested on Pandora<br />
! Additional comments<br />
|-<br />
| Lite-On EZ-DUB DVD/CD Multi-Recorder (Model eZAU120)<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Powered by included mains adapter - DC 12V 1.8A<br />
| standard-A port<br />
| Yes<br />
| No<br />
| <br />
|}<br />
<br />
<br />
===Video capture device===<br />
----<br />
<br />
<br />
====Webcams====<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
<br />
|- style="background: #ececec"<br />
! Device<br />
! Driver<br />
! Connector<br />
! Supported standard<br />
! Current draw<br />
! Suggested connection to Pandora<br />
! Tested in Linux<br />
! Tested on Pandora<br />
! Additional comments<br />
|-<br />
| Exoo No Driver/USB 2.0 Webcam (Model No.: M053)<br />
| Not required<br />
| standard-A<br />
| USB 2.0<br />
| Unknown<br />
| standard-A port<br />
| Yes<br />
| No<br />
| Bought from [http://www.dealextreme.com/details.dx/sku.14991 DealExtreme]<br />
|-<br />
| Logitech Quickcam Communicate Deluxe<br />
| Not required<br />
| standard-A<br />
| high speed<br />
| Unknown<br />
| standard-A port<br />
| Yes<br />
| No<br />
| USB ID: 046d:0992, works though [http://linux-uvc.berlios.de/ uvcvideo] <br />
|}<br />
<br />
<br />
===Input device===<br />
----<br />
Any HID ([http://en.wikipedia.org/wiki/Human_interface_device Human Interface Device]) compliant keyboard, mouse or game controller should work on the Pandora. Most of those device are low speed or full speed USB device and will need to be connected though either a USB OTG adapter/cable or a USB2 hub in order to work on the Pandora.<br />
<br />
====External Game Controllers====<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Device<br />
! Driver<br />
! Connector<br />
! Supported standard<br />
! Suggested connection to Pandora<br />
! Tested in Linux<br />
! Tested on Pandora<br />
! Additional comments<br />
|-<br />
| USB Super RetroPort (SNES-to-USB adapter)<br />
| Not required<br />
| standard-A<br />
| Unknown, probably USB 1.1<br />
| standard-A port via High Speed Hub<br />
| Yes<br />
| No<br />
| Bought from [http://www.retrousb.com/product_info.php?cPath=21&products_id=29 RetroZone]<br />
|<br />
|-<br />
| USB RetroPort (NES-to-USB adapter)<br />
| Not required<br />
| standard-A<br />
| Unknown, probably USB 1.1<br />
| standard-A port via High Speed Hub<br />
| Yes<br />
| No<br />
| Bought from [http://www.retrousb.com/product_info.php?cPath=21&products_id=28 RetroZone]<br />
|<br />
|-<br />
| Trio Linker Plus II (PlayStation,-GameCube,-and-Dreamcast-to-USB adapter)<br />
| Not required<br />
| standard-A<br />
| Unknown, probably USB 1.1<br />
| standard-A port via High Speed Hub<br />
| Yes<br />
| No<br />
| Bought from [http://www.play-asia.com/paOS-13-71-6m-49-en-70-1zfv.html Play-Asia]<br />
|<br />
|-<br />
| NAZAR V47 USB Force Feedback Vibrating Gamepad Controller for PC<br />
| Not required<br />
| standard-A<br />
| Unknown, probably USB 1.1<br />
| standard-A port via High Speed Hub<br />
| Yes<br />
| No<br />
| Whether it really contains the claimed force feedback feature is unknown as this feature does not work under Linux - bought from [http://www.dealextreme.com/details.dx/sku.24551 DealExtreme]<br />
|<br />
|-<br />
| 10-Fire-Button Double Vibration Feedback USB PC Arcade Joystick<br />
| Not required<br />
| standard-A<br />
| Unknown, probably USB 1.1<br />
| standard-A port via High Speed Hub<br />
| Yes<br />
| No<br />
| Whether it really contains the claimed force feedback feature is unknown as this feature does not work under Linux - bought from [http://www.dealextreme.com/details.dx/sku.27821 DealExtreme]<br />
|<br />
|-<br />
| Official PlayStation 3 controller<br />
| Not required<br />
| standard-A<br />
| Full speed<br />
| USB A To Mini B Cable via High Speed Hub<br />
| Yes<br />
| No<br />
| This is for USB not bluetooth compatibility. Sixaxis and DualShock not tested.<br />
|-<br />
| Wired Xbox 360 Controller<br />
| xpad module<br />
| standard-A<br />
| Unknown, probably USB 1.1<br />
| standard-A port via High Speed Hub<br />
| Yes<br />
| No<br />
| This also includes gamepads for PC that needs the Windows Xinput driver. Such gamepads include the Logitech Chillstream.<br />
|}<br />
<br />
<br />
====Graphics tablets====<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
<br />
|- style="background: #ececec"<br />
! Device<br />
! Driver<br />
! Connector<br />
! Supported standard<br />
! Current draw<br />
! Tested in Linux<br />
! Tested on Pandora<br />
! Additional comments<br />
|-<br />
| Wacom Volito2 Tablet (Model: CTF-420)<br />
| Not required<br />
| standard-A<br />
| Low speed<br />
| 40 mA ([http://www.my-volito.com/volito/specs.asp?lang=en Source])<br />
| Yes<br />
| No<br />
| USB ID: 056a:0062<br />
|}<br />
<br />
<br />
==Connectors, adapters, and hubs==<br />
This section is intended as a general guide. Items in this section are standard USB accessories, so drivers are not required. Compatibility with Pandora is assumed. Please note that any external product links are provided for reference only, and are not an endorsement.<br />
<br />
<br />
===OTG Adapters===<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Device<br />
! Tested<br />
! Additional comments<br />
|-<br />
| Generic adapter<br />
| No<br />
| [[http://shop.ebay.com/?_from=R40&_trksid=p3907.m38.l1313&_nkw=usb+otg+host+cable&_sacat=See-All-Categories Find on eBay]] [[http://www.amazon.co.uk/s/ref=nb_ss_ce?url=search-alias%3Delectronics&field-keywords=OTG+Cable+Adapter&x=3&y=23 Find on Amazon]] These links are not 100% accurate. Check for `mini-a`, and on ebay, the price is higher (like $8)<br />
|-<br />
| Nokia USB OTG adapter<br />
| Yes<br />
| Link Required<br />
|}<br />
<br />
<br />
===Compact USB Hubs===<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Device<br />
! Tested<br />
! Additional comments<br />
|-<br />
| Griffin SmartShare USB<br />
| No<br />
| [[http://www.griffintechnology.com/products/smartshare-usb Griffin website]]<br />
|-<br />
| Belkin F5U415 4 Port USB 2.0 Swivel Hub<br />
| No<br />
| Comes with an optional power adapter. [[http://catalog.belkin.com/IWCatProductPage.process?Product_Id=377085 Belkin website]]<br />
|-<br />
| ID 0e8f:0016 GreenAsia Inc. <br />
| Not Working - tsh<br />
| Labeled as high speed, from ebay<br />
|-<br />
|Trust 4 port netbook hub ID 05e3:0608<br />
|Works - tsh<br />
|http://www.amazon.co.uk/gp/product/B0025X16AS<br />
|-<br />
| HIGH SPEED 4 PORT MINI USB 2.0 HUB FOR LAPTOP PC (non powered)<br />
| YES<br />
| octopus style small cheap nonpowered USB hub from ebay [[http://cgi.benl.ebay.be/ws/eBayISAPI.dll?ViewItem&item=270538502843 ebay seller]]<br />
|-<br />
| Logitech Premium 4-Port USB Hub<br />
| Works<br />
| http://www.logitech.com/en-in/notebook-products/usb-hubs/devices/3048<br />
|}<br />
<br />
==More Information==<br />
For more information on the Pandora's two USB ports and the possible connections that can be made with them, see [[USB_reference|the USB reference page]].<br />
<br />
[[Category:Hardware]]</div>Cosamhttps://pandorawiki.org/index.php?title=PND_Cookbook&diff=3428PND Cookbook2010-08-27T08:27:10Z<p>Cosam: /* Getting a file/directory */</p>
<hr />
<div>=== Using a start-up script ===<br />
In an ideal world, your application will be completely self-contained and can be run directly without any kind of set-up. It is however often necessary to tweak settings or request input from the user before starting your application. This is easily achieved by having the PND specify a shell script as its executable, which then in turn runs the application. The general structure of such a script is:<br />
<pre><br />
#!/bin/sh<br />
<br />
# Do stuff here...<br />
<br />
./my_app<br />
<br />
# Clean-up<br />
</pre><br />
The first line identifies the file as a shell script, run using "/bin/sh" as the shell. The other lines beginning with a "#" are comments. Before the application is started, parameters can be gathered and/or set. The application itself then gets run by the "./my_app" line, which means "execute the file ''my_app'' in the current directory". When the application exits, it may be necessary to restore previous settings, delete temporary files, or perform some other kinds of cleaning up.<br />
<br />
=== Avoiding NAND writes by setting $HOME ===<br />
Many applications write configuration data to the user's home directory by default. This is not desirable on the Pandora as this directory resides on the NAND filesystem. It is however often possible to fool an application into writing to a different directory by setting the $HOME environment variable.<br />
<pre><br />
export HOME=`pwd`<br />
export HOME=$(pwd)<br />
</pre><br />
<br />
=== Providing a default configuration ===<br />
If your application uses a configuration file, you'll usually want to include this in the PND. However, if you simply leave this file int he root of the PND, it will effectively be read-only, preventing the application or user from writing to it. A simple solution is to provide a default configuration file with a different name, and copy this the first time the application is run. The file will then be created under ''appdata'', and can therefore easily be edited.<br />
<pre><br />
# Method 1: check if file exists, otherwise copy default.<br />
if [ ! -f app.conf ] ; then<br />
cp default.conf app.conf<br />
fi<br />
<br />
# Method 2: Same as above, less typing.<br />
[ -f app.conf ] || cp default.conf app.conf<br />
<br />
# Method 3: using a non-destructive copy.<br />
cp --no-clobber default.conf app.conf<br />
</pre><br />
<br />
=== Making writable directories ===<br />
If your application requires that directories be writable for the application, don't put them in the PND, but create them at run-time:<br />
<pre><br />
# Bad! This will cause an error after the first run, as the directory will already exist.<br />
mkdir saved_data<br />
<br />
# Better to use "-p" which won't complain about existing directories.<br />
mkdir -p saved_data<br />
<br />
# Added bonus: this allows you to create whole trees in one go.<br />
mkdir -p saved_data/foo saved_data/bar/with/deep/sub/dirs<br />
</pre><br />
<br />
=== Loading shared libraries ===<br />
If your application requires shared libraries which aren't part of the standard firmware, they can be included in the PND along with the executable. In order for the system to be able to find the libraries, it must be told which directories to search. This can be done by setting the LD_LIBRARY_PATH environment variable. For example:<br />
<pre><br />
export LD_LIBRARY_PATH=`pwd` # Load libraries in the root directory of the PND.<br />
export LD_LIBRARY_PATH=`pwd`/libs # Load libraries in the "libs" subdirectory of the PND.<br />
</pre><br />
<br />
=== Getting a file/directory from the user ===<br />
Its often necessary to ask the user for the location of a file or directory. This may be because your application requires files which aren't included in the PND itself, or simply because you application doesn't have a built in file picker. The commands below will prompt the user for a file, then run "my_app" with that file as an argument. Note the use of different sorts of quotes which is important for proper operation and handling spaces in file names.<br />
<pre><br />
FILE="`zenity --file-selection --title='Select a File'`"<br />
./my_app "$FILE"<br />
</pre><br />
<br />
=== Saving a file/directory name ===<br />
If your application always asks for a file at start-up, it's handy to remember the location for next time. This can be done by writing the name of the directory to a file in appdata, and reading it back next time the application is run.<br />
<pre><br />
SAVEDIR=./dir.saved # Name of the file we'll save the directory name to<br />
<br />
# Did we save a directory last time? If so, read it into a variable.<br />
DIR=`cat $SAVEDIR 2> /dev/null`<br />
<br />
# Remember where we are right now, as we'll need to come back later.<br />
PNDDIR=`pwd`<br />
<br />
# Does the directory still exist?<br />
if [ -d "$DIR" ] ; then<br />
# Yes, go to that directory before Zenity is started.<br />
cd "$DIR"<br />
else<br />
# No, try to go to /media (where the SD cards are mounted)<br />
# or if that fails, go to "/" as a last resort.<br />
cd /media 2> /dev/null || cd /<br />
fi<br />
<br />
# Get a file name form the user. Our current directory is now that which<br />
# was saved, so that's where Zenity will start.<br />
FILE=`zenity --file-selection --title="Select a file"`<br />
<br />
# If the file selector failed, or the user hit cancel, exit now.<br />
[ $? -eq 0 ] || exit 1;<br />
<br />
# Go back to the PND's mount point.<br />
cd $PNDDIR<br />
<br />
# Save the file's directory for next time.<br />
dirname "$FILE" > $SAVEDIR<br />
<br />
# Run our app with the file as an argument.<br />
./my_app "$FILE"<br />
</pre><br />
<br />
=== Checking a file's contents ===<br />
Maybe your application requires some file which cannot be distributed with the PND, either for legal reasons or due to size limitations. A prime example of this is BIOS files used for emulators. Simply copying the file to the current directory will be enough to save it to your program's appdata, but it can also be useful to check the contents of the file are indeed what your application expects.<br />
<br />
One way of doing this is to check the file's contents using a hash. A hash is a mathematical formula which can be used to create a "fingerprint" of a file. Two identical files will always generate the same hash value, so knowing this one value is enough to check if two files match. The MD5 hash is a popular choice, and can be easily generated for a given file like so:<br />
<pre><br />
$ md5sum bios.img<br />
cfcfd01f1b0dfa97f07cb286b2942dc2 bios.img<br />
</pre><br />
<br />
Save this output to a text file named ''bios.md5'' and put it in your PND root directory. The following commands can then be used in your start-up script to copy a file specified by the user, and check it's hash.<br />
<br />
<pre><br />
BIOS=bios.img # The name of our BIOS file<br />
<br />
# Check if the BIOS file already exists.<br />
if [ ! -f ./$BIOS ] ; then<br />
# Not found, so get a file name from the user.<br />
cp "`zenity --file-selection --title="Select your $BIOS file"`" $BIOS<br />
if [ $? != 0 ] ; then<br />
# User hit cancel, bail out.<br />
zenity --error --text="Sorry, emulator cannot run without a BIOS file."<br />
exit 1<br />
fi<br />
<br />
# Check the MD5 hash of the given file against our known-good value.<br />
# If the match fails, ask the user if they'd like to try it anyway.<br />
md5sum -c bios.md5 || zenity --question \<br />
--text="BIOS does not appear to be the correct version. Use it anyway?"<br />
<br />
if [ $? != 0 ] ; then<br />
# File did not match hash, and the user opted not to try it anyway,<br />
# so remove the copied file and bail out.<br />
rm -f $BIOS<br />
exit 1<br />
fi<br />
fi<br />
<br />
# Run our emulator with the BIOS file as an argument.<br />
./my_emu "$BIOS"<br />
</pre></div>Cosamhttps://pandorawiki.org/index.php?title=PND_Cookbook&diff=3427PND Cookbook2010-08-27T08:26:33Z<p>Cosam: /* Providing a default configuration file */</p>
<hr />
<div>=== Using a start-up script ===<br />
In an ideal world, your application will be completely self-contained and can be run directly without any kind of set-up. It is however often necessary to tweak settings or request input from the user before starting your application. This is easily achieved by having the PND specify a shell script as its executable, which then in turn runs the application. The general structure of such a script is:<br />
<pre><br />
#!/bin/sh<br />
<br />
# Do stuff here...<br />
<br />
./my_app<br />
<br />
# Clean-up<br />
</pre><br />
The first line identifies the file as a shell script, run using "/bin/sh" as the shell. The other lines beginning with a "#" are comments. Before the application is started, parameters can be gathered and/or set. The application itself then gets run by the "./my_app" line, which means "execute the file ''my_app'' in the current directory". When the application exits, it may be necessary to restore previous settings, delete temporary files, or perform some other kinds of cleaning up.<br />
<br />
=== Avoiding NAND writes by setting $HOME ===<br />
Many applications write configuration data to the user's home directory by default. This is not desirable on the Pandora as this directory resides on the NAND filesystem. It is however often possible to fool an application into writing to a different directory by setting the $HOME environment variable.<br />
<pre><br />
export HOME=`pwd`<br />
export HOME=$(pwd)<br />
</pre><br />
<br />
=== Providing a default configuration ===<br />
If your application uses a configuration file, you'll usually want to include this in the PND. However, if you simply leave this file int he root of the PND, it will effectively be read-only, preventing the application or user from writing to it. A simple solution is to provide a default configuration file with a different name, and copy this the first time the application is run. The file will then be created under ''appdata'', and can therefore easily be edited.<br />
<pre><br />
# Method 1: check if file exists, otherwise copy default.<br />
if [ ! -f app.conf ] ; then<br />
cp default.conf app.conf<br />
fi<br />
<br />
# Method 2: Same as above, less typing.<br />
[ -f app.conf ] || cp default.conf app.conf<br />
<br />
# Method 3: using a non-destructive copy.<br />
cp --no-clobber default.conf app.conf<br />
</pre><br />
<br />
=== Making writable directories ===<br />
If your application requires that directories be writable for the application, don't put them in the PND, but create them at run-time:<br />
<pre><br />
# Bad! This will cause an error after the first run, as the directory will already exist.<br />
mkdir saved_data<br />
<br />
# Better to use "-p" which won't complain about existing directories.<br />
mkdir -p saved_data<br />
<br />
# Added bonus: this allows you to create whole trees in one go.<br />
mkdir -p saved_data/foo saved_data/bar/with/deep/sub/dirs<br />
</pre><br />
<br />
=== Loading shared libraries ===<br />
If your application requires shared libraries which aren't part of the standard firmware, they can be included in the PND along with the executable. In order for the system to be able to find the libraries, it must be told which directories to search. This can be done by setting the LD_LIBRARY_PATH environment variable. For example:<br />
<pre><br />
export LD_LIBRARY_PATH=`pwd` # Load libraries in the root directory of the PND.<br />
export LD_LIBRARY_PATH=`pwd`/libs # Load libraries in the "libs" subdirectory of the PND.<br />
</pre><br />
<br />
=== Getting a file/directory ===<br />
Its often necessary to ask the user for the location of a file or directory. This may be because your application requires files which aren't included in the PND itself, or simply because you application doesn't have a built in file picker. The commands below will prompt the user for a file, then run "my_app" with that file as an argument. Note the use of different sorts of quotes which is important for proper operation and handling spaces in file names.<br />
<pre><br />
FILE="`zenity --file-selection --title='Select a File'`"<br />
./my_app $FILE<br />
</pre><br />
<br />
=== Saving a file/directory name ===<br />
If your application always asks for a file at start-up, it's handy to remember the location for next time. This can be done by writing the name of the directory to a file in appdata, and reading it back next time the application is run.<br />
<pre><br />
SAVEDIR=./dir.saved # Name of the file we'll save the directory name to<br />
<br />
# Did we save a directory last time? If so, read it into a variable.<br />
DIR=`cat $SAVEDIR 2> /dev/null`<br />
<br />
# Remember where we are right now, as we'll need to come back later.<br />
PNDDIR=`pwd`<br />
<br />
# Does the directory still exist?<br />
if [ -d "$DIR" ] ; then<br />
# Yes, go to that directory before Zenity is started.<br />
cd "$DIR"<br />
else<br />
# No, try to go to /media (where the SD cards are mounted)<br />
# or if that fails, go to "/" as a last resort.<br />
cd /media 2> /dev/null || cd /<br />
fi<br />
<br />
# Get a file name form the user. Our current directory is now that which<br />
# was saved, so that's where Zenity will start.<br />
FILE=`zenity --file-selection --title="Select a file"`<br />
<br />
# If the file selector failed, or the user hit cancel, exit now.<br />
[ $? -eq 0 ] || exit 1;<br />
<br />
# Go back to the PND's mount point.<br />
cd $PNDDIR<br />
<br />
# Save the file's directory for next time.<br />
dirname "$FILE" > $SAVEDIR<br />
<br />
# Run our app with the file as an argument.<br />
./my_app "$FILE"<br />
</pre><br />
<br />
=== Checking a file's contents ===<br />
Maybe your application requires some file which cannot be distributed with the PND, either for legal reasons or due to size limitations. A prime example of this is BIOS files used for emulators. Simply copying the file to the current directory will be enough to save it to your program's appdata, but it can also be useful to check the contents of the file are indeed what your application expects.<br />
<br />
One way of doing this is to check the file's contents using a hash. A hash is a mathematical formula which can be used to create a "fingerprint" of a file. Two identical files will always generate the same hash value, so knowing this one value is enough to check if two files match. The MD5 hash is a popular choice, and can be easily generated for a given file like so:<br />
<pre><br />
$ md5sum bios.img<br />
cfcfd01f1b0dfa97f07cb286b2942dc2 bios.img<br />
</pre><br />
<br />
Save this output to a text file named ''bios.md5'' and put it in your PND root directory. The following commands can then be used in your start-up script to copy a file specified by the user, and check it's hash.<br />
<br />
<pre><br />
BIOS=bios.img # The name of our BIOS file<br />
<br />
# Check if the BIOS file already exists.<br />
if [ ! -f ./$BIOS ] ; then<br />
# Not found, so get a file name from the user.<br />
cp "`zenity --file-selection --title="Select your $BIOS file"`" $BIOS<br />
if [ $? != 0 ] ; then<br />
# User hit cancel, bail out.<br />
zenity --error --text="Sorry, emulator cannot run without a BIOS file."<br />
exit 1<br />
fi<br />
<br />
# Check the MD5 hash of the given file against our known-good value.<br />
# If the match fails, ask the user if they'd like to try it anyway.<br />
md5sum -c bios.md5 || zenity --question \<br />
--text="BIOS does not appear to be the correct version. Use it anyway?"<br />
<br />
if [ $? != 0 ] ; then<br />
# File did not match hash, and the user opted not to try it anyway,<br />
# so remove the copied file and bail out.<br />
rm -f $BIOS<br />
exit 1<br />
fi<br />
fi<br />
<br />
# Run our emulator with the BIOS file as an argument.<br />
./my_emu "$BIOS"<br />
</pre></div>Cosamhttps://pandorawiki.org/index.php?title=PND_Cookbook&diff=3426PND Cookbook2010-08-27T08:26:13Z<p>Cosam: /* Setting $HOME */</p>
<hr />
<div>=== Using a start-up script ===<br />
In an ideal world, your application will be completely self-contained and can be run directly without any kind of set-up. It is however often necessary to tweak settings or request input from the user before starting your application. This is easily achieved by having the PND specify a shell script as its executable, which then in turn runs the application. The general structure of such a script is:<br />
<pre><br />
#!/bin/sh<br />
<br />
# Do stuff here...<br />
<br />
./my_app<br />
<br />
# Clean-up<br />
</pre><br />
The first line identifies the file as a shell script, run using "/bin/sh" as the shell. The other lines beginning with a "#" are comments. Before the application is started, parameters can be gathered and/or set. The application itself then gets run by the "./my_app" line, which means "execute the file ''my_app'' in the current directory". When the application exits, it may be necessary to restore previous settings, delete temporary files, or perform some other kinds of cleaning up.<br />
<br />
=== Avoiding NAND writes by setting $HOME ===<br />
Many applications write configuration data to the user's home directory by default. This is not desirable on the Pandora as this directory resides on the NAND filesystem. It is however often possible to fool an application into writing to a different directory by setting the $HOME environment variable.<br />
<pre><br />
export HOME=`pwd`<br />
export HOME=$(pwd)<br />
</pre><br />
<br />
=== Providing a default configuration file ===<br />
If your application uses a configuration file, you'll usually want to include this in the PND. However, if you simply leave this file int he root of the PND, it will effectively be read-only, preventing the application or user from writing to it. A simple solution is to provide a default configuration file with a different name, and copy this the first time the application is run. The file will then be created under ''appdata'', and can therefore easily be edited.<br />
<pre><br />
# Method 1: check if file exists, otherwise copy default.<br />
if [ ! -f app.conf ] ; then<br />
cp default.conf app.conf<br />
fi<br />
<br />
# Method 2: Same as above, less typing.<br />
[ -f app.conf ] || cp default.conf app.conf<br />
<br />
# Method 3: using a non-destructive copy.<br />
cp --no-clobber default.conf app.conf<br />
</pre><br />
<br />
=== Making writable directories ===<br />
If your application requires that directories be writable for the application, don't put them in the PND, but create them at run-time:<br />
<pre><br />
# Bad! This will cause an error after the first run, as the directory will already exist.<br />
mkdir saved_data<br />
<br />
# Better to use "-p" which won't complain about existing directories.<br />
mkdir -p saved_data<br />
<br />
# Added bonus: this allows you to create whole trees in one go.<br />
mkdir -p saved_data/foo saved_data/bar/with/deep/sub/dirs<br />
</pre><br />
<br />
=== Loading shared libraries ===<br />
If your application requires shared libraries which aren't part of the standard firmware, they can be included in the PND along with the executable. In order for the system to be able to find the libraries, it must be told which directories to search. This can be done by setting the LD_LIBRARY_PATH environment variable. For example:<br />
<pre><br />
export LD_LIBRARY_PATH=`pwd` # Load libraries in the root directory of the PND.<br />
export LD_LIBRARY_PATH=`pwd`/libs # Load libraries in the "libs" subdirectory of the PND.<br />
</pre><br />
<br />
=== Getting a file/directory ===<br />
Its often necessary to ask the user for the location of a file or directory. This may be because your application requires files which aren't included in the PND itself, or simply because you application doesn't have a built in file picker. The commands below will prompt the user for a file, then run "my_app" with that file as an argument. Note the use of different sorts of quotes which is important for proper operation and handling spaces in file names.<br />
<pre><br />
FILE="`zenity --file-selection --title='Select a File'`"<br />
./my_app $FILE<br />
</pre><br />
<br />
=== Saving a file/directory name ===<br />
If your application always asks for a file at start-up, it's handy to remember the location for next time. This can be done by writing the name of the directory to a file in appdata, and reading it back next time the application is run.<br />
<pre><br />
SAVEDIR=./dir.saved # Name of the file we'll save the directory name to<br />
<br />
# Did we save a directory last time? If so, read it into a variable.<br />
DIR=`cat $SAVEDIR 2> /dev/null`<br />
<br />
# Remember where we are right now, as we'll need to come back later.<br />
PNDDIR=`pwd`<br />
<br />
# Does the directory still exist?<br />
if [ -d "$DIR" ] ; then<br />
# Yes, go to that directory before Zenity is started.<br />
cd "$DIR"<br />
else<br />
# No, try to go to /media (where the SD cards are mounted)<br />
# or if that fails, go to "/" as a last resort.<br />
cd /media 2> /dev/null || cd /<br />
fi<br />
<br />
# Get a file name form the user. Our current directory is now that which<br />
# was saved, so that's where Zenity will start.<br />
FILE=`zenity --file-selection --title="Select a file"`<br />
<br />
# If the file selector failed, or the user hit cancel, exit now.<br />
[ $? -eq 0 ] || exit 1;<br />
<br />
# Go back to the PND's mount point.<br />
cd $PNDDIR<br />
<br />
# Save the file's directory for next time.<br />
dirname "$FILE" > $SAVEDIR<br />
<br />
# Run our app with the file as an argument.<br />
./my_app "$FILE"<br />
</pre><br />
<br />
=== Checking a file's contents ===<br />
Maybe your application requires some file which cannot be distributed with the PND, either for legal reasons or due to size limitations. A prime example of this is BIOS files used for emulators. Simply copying the file to the current directory will be enough to save it to your program's appdata, but it can also be useful to check the contents of the file are indeed what your application expects.<br />
<br />
One way of doing this is to check the file's contents using a hash. A hash is a mathematical formula which can be used to create a "fingerprint" of a file. Two identical files will always generate the same hash value, so knowing this one value is enough to check if two files match. The MD5 hash is a popular choice, and can be easily generated for a given file like so:<br />
<pre><br />
$ md5sum bios.img<br />
cfcfd01f1b0dfa97f07cb286b2942dc2 bios.img<br />
</pre><br />
<br />
Save this output to a text file named ''bios.md5'' and put it in your PND root directory. The following commands can then be used in your start-up script to copy a file specified by the user, and check it's hash.<br />
<br />
<pre><br />
BIOS=bios.img # The name of our BIOS file<br />
<br />
# Check if the BIOS file already exists.<br />
if [ ! -f ./$BIOS ] ; then<br />
# Not found, so get a file name from the user.<br />
cp "`zenity --file-selection --title="Select your $BIOS file"`" $BIOS<br />
if [ $? != 0 ] ; then<br />
# User hit cancel, bail out.<br />
zenity --error --text="Sorry, emulator cannot run without a BIOS file."<br />
exit 1<br />
fi<br />
<br />
# Check the MD5 hash of the given file against our known-good value.<br />
# If the match fails, ask the user if they'd like to try it anyway.<br />
md5sum -c bios.md5 || zenity --question \<br />
--text="BIOS does not appear to be the correct version. Use it anyway?"<br />
<br />
if [ $? != 0 ] ; then<br />
# File did not match hash, and the user opted not to try it anyway,<br />
# so remove the copied file and bail out.<br />
rm -f $BIOS<br />
exit 1<br />
fi<br />
fi<br />
<br />
# Run our emulator with the BIOS file as an argument.<br />
./my_emu "$BIOS"<br />
</pre></div>Cosamhttps://pandorawiki.org/index.php?title=PND_Cookbook&diff=3425PND Cookbook2010-08-27T08:20:00Z<p>Cosam: Added default config files, creating writable directories.</p>
<hr />
<div>=== Using a start-up script ===<br />
In an ideal world, your application will be completely self-contained and can be run directly without any kind of set-up. It is however often necessary to tweak settings or request input from the user before starting your application. This is easily achieved by having the PND specify a shell script as its executable, which then in turn runs the application. The general structure of such a script is:<br />
<pre><br />
#!/bin/sh<br />
<br />
# Do stuff here...<br />
<br />
./my_app<br />
<br />
# Clean-up<br />
</pre><br />
The first line identifies the file as a shell script, run using "/bin/sh" as the shell. The other lines beginning with a "#" are comments. Before the application is started, parameters can be gathered and/or set. The application itself then gets run by the "./my_app" line, which means "execute the file ''my_app'' in the current directory". When the application exits, it may be necessary to restore previous settings, delete temporary files, or perform some other kinds of cleaning up.<br />
<br />
=== Setting $HOME ===<br />
Many applications write configuration data to the user's home directory by default. This is not desirable on the Pandora as this directory resides on the NAND filesystem. It is however often possible to fool an application into writing to a different directory by setting the $HOME environment variable.<br />
<pre><br />
export HOME=`pwd`<br />
export HOME=$(pwd)<br />
</pre><br />
<br />
=== Providing a default configuration file ===<br />
If your application uses a configuration file, you'll usually want to include this in the PND. However, if you simply leave this file int he root of the PND, it will effectively be read-only, preventing the application or user from writing to it. A simple solution is to provide a default configuration file with a different name, and copy this the first time the application is run. The file will then be created under ''appdata'', and can therefore easily be edited.<br />
<pre><br />
# Method 1: check if file exists, otherwise copy default.<br />
if [ ! -f app.conf ] ; then<br />
cp default.conf app.conf<br />
fi<br />
<br />
# Method 2: Same as above, less typing.<br />
[ -f app.conf ] || cp default.conf app.conf<br />
<br />
# Method 3: using a non-destructive copy.<br />
cp --no-clobber default.conf app.conf<br />
</pre><br />
<br />
=== Making writable directories ===<br />
If your application requires that directories be writable for the application, don't put them in the PND, but create them at run-time:<br />
<pre><br />
# Bad! This will cause an error after the first run, as the directory will already exist.<br />
mkdir saved_data<br />
<br />
# Better to use "-p" which won't complain about existing directories.<br />
mkdir -p saved_data<br />
<br />
# Added bonus: this allows you to create whole trees in one go.<br />
mkdir -p saved_data/foo saved_data/bar/with/deep/sub/dirs<br />
</pre><br />
<br />
=== Loading shared libraries ===<br />
If your application requires shared libraries which aren't part of the standard firmware, they can be included in the PND along with the executable. In order for the system to be able to find the libraries, it must be told which directories to search. This can be done by setting the LD_LIBRARY_PATH environment variable. For example:<br />
<pre><br />
export LD_LIBRARY_PATH=`pwd` # Load libraries in the root directory of the PND.<br />
export LD_LIBRARY_PATH=`pwd`/libs # Load libraries in the "libs" subdirectory of the PND.<br />
</pre><br />
<br />
=== Getting a file/directory ===<br />
Its often necessary to ask the user for the location of a file or directory. This may be because your application requires files which aren't included in the PND itself, or simply because you application doesn't have a built in file picker. The commands below will prompt the user for a file, then run "my_app" with that file as an argument. Note the use of different sorts of quotes which is important for proper operation and handling spaces in file names.<br />
<pre><br />
FILE="`zenity --file-selection --title='Select a File'`"<br />
./my_app $FILE<br />
</pre><br />
<br />
=== Saving a file/directory name ===<br />
If your application always asks for a file at start-up, it's handy to remember the location for next time. This can be done by writing the name of the directory to a file in appdata, and reading it back next time the application is run.<br />
<pre><br />
SAVEDIR=./dir.saved # Name of the file we'll save the directory name to<br />
<br />
# Did we save a directory last time? If so, read it into a variable.<br />
DIR=`cat $SAVEDIR 2> /dev/null`<br />
<br />
# Remember where we are right now, as we'll need to come back later.<br />
PNDDIR=`pwd`<br />
<br />
# Does the directory still exist?<br />
if [ -d "$DIR" ] ; then<br />
# Yes, go to that directory before Zenity is started.<br />
cd "$DIR"<br />
else<br />
# No, try to go to /media (where the SD cards are mounted)<br />
# or if that fails, go to "/" as a last resort.<br />
cd /media 2> /dev/null || cd /<br />
fi<br />
<br />
# Get a file name form the user. Our current directory is now that which<br />
# was saved, so that's where Zenity will start.<br />
FILE=`zenity --file-selection --title="Select a file"`<br />
<br />
# If the file selector failed, or the user hit cancel, exit now.<br />
[ $? -eq 0 ] || exit 1;<br />
<br />
# Go back to the PND's mount point.<br />
cd $PNDDIR<br />
<br />
# Save the file's directory for next time.<br />
dirname "$FILE" > $SAVEDIR<br />
<br />
# Run our app with the file as an argument.<br />
./my_app "$FILE"<br />
</pre><br />
<br />
=== Checking a file's contents ===<br />
Maybe your application requires some file which cannot be distributed with the PND, either for legal reasons or due to size limitations. A prime example of this is BIOS files used for emulators. Simply copying the file to the current directory will be enough to save it to your program's appdata, but it can also be useful to check the contents of the file are indeed what your application expects.<br />
<br />
One way of doing this is to check the file's contents using a hash. A hash is a mathematical formula which can be used to create a "fingerprint" of a file. Two identical files will always generate the same hash value, so knowing this one value is enough to check if two files match. The MD5 hash is a popular choice, and can be easily generated for a given file like so:<br />
<pre><br />
$ md5sum bios.img<br />
cfcfd01f1b0dfa97f07cb286b2942dc2 bios.img<br />
</pre><br />
<br />
Save this output to a text file named ''bios.md5'' and put it in your PND root directory. The following commands can then be used in your start-up script to copy a file specified by the user, and check it's hash.<br />
<br />
<pre><br />
BIOS=bios.img # The name of our BIOS file<br />
<br />
# Check if the BIOS file already exists.<br />
if [ ! -f ./$BIOS ] ; then<br />
# Not found, so get a file name from the user.<br />
cp "`zenity --file-selection --title="Select your $BIOS file"`" $BIOS<br />
if [ $? != 0 ] ; then<br />
# User hit cancel, bail out.<br />
zenity --error --text="Sorry, emulator cannot run without a BIOS file."<br />
exit 1<br />
fi<br />
<br />
# Check the MD5 hash of the given file against our known-good value.<br />
# If the match fails, ask the user if they'd like to try it anyway.<br />
md5sum -c bios.md5 || zenity --question \<br />
--text="BIOS does not appear to be the correct version. Use it anyway?"<br />
<br />
if [ $? != 0 ] ; then<br />
# File did not match hash, and the user opted not to try it anyway,<br />
# so remove the copied file and bail out.<br />
rm -f $BIOS<br />
exit 1<br />
fi<br />
fi<br />
<br />
# Run our emulator with the BIOS file as an argument.<br />
./my_emu "$BIOS"<br />
</pre></div>Cosamhttps://pandorawiki.org/index.php?title=PND_Cookbook&diff=3421PND Cookbook2010-08-26T15:30:26Z<p>Cosam: Added directory saving.</p>
<hr />
<div>=== Using a start-up script ===<br />
In an ideal world, your application will be completely self-contained and can be run directly without any kind of set-up. It is however often necessary to tweak settings or request input from the user before starting your application. This is easily achieved by having the PND specify a shell script as its executable, which then in turn runs the application. The general structure of such a script is:<br />
<pre><br />
#!/bin/sh<br />
<br />
# Do stuff here...<br />
<br />
./my_app<br />
<br />
# Clean-up<br />
</pre><br />
The first line identifies the file as a shell script, run using "/bin/sh" as the shell. The other lines beginning with a "#" are comments. Before the application is started, parameters can be gathered and/or set. The application itself then gets run by the "./my_app" line, which means "execute the file ''my_app'' in the current directory". When the application exits, it may be necessary to restore previous settings, delete temporary files, or perform some other kinds of cleaning up.<br />
<br />
=== Setting $HOME ===<br />
Many applications write configuration data to the user's home directory by default. This is not desirable on the Pandora as this directory resides on the NAND filesystem. It is however often possible to fool an application into writing to a different directory by setting the $HOME environment variable.<br />
<pre><br />
export HOME=`pwd`<br />
export HOME=$(pwd)<br />
</pre><br />
<br />
=== Loading shared libraries ===<br />
If your application requires shared libraries which aren't part of the standard firmware, they can be included in the PND along with the executable. In order for the system to be able to find the libraries, it must be told which directories to search. This can be done by setting the LD_LIBRARY_PATH environment variable. For example:<br />
<pre><br />
export LD_LIBRARY_PATH=`pwd` # Load libraries in the root directory of the PND.<br />
export LD_LIBRARY_PATH=`pwd`/libs # Load libraries in the "libs" subdirectory of the PND.<br />
</pre><br />
<br />
=== Getting a file/directory ===<br />
Its often necessary to ask the user for the location of a file or directory. This may be because your application requires files which aren't included in the PND itself, or simply because you application doesn't have a built in file picker. The commands below will prompt the user for a file, then run "my_app" with that file as an argument. Note the use of different sorts of quotes which is important for proper operation and handling spaces in file names.<br />
<pre><br />
FILE="`zenity --file-selection --title='Select a File'`"<br />
./my_app $FILE<br />
</pre><br />
<br />
=== Saving a file/directory name ===<br />
If your application always asks for a file at start-up, it's handy to remember the location for next time. This can be done by writing the name of the directory to a file in appdata, and reading it back next time the application is run.<br />
<pre><br />
SAVEDIR=./dir.saved # Name of the file we'll save the directory name to<br />
<br />
# Did we save a directory last time? If so, read it into a variable.<br />
DIR=`cat $SAVEDIR 2> /dev/null`<br />
<br />
# Remember where we are right now, as we'll need to come back later.<br />
PNDDIR=`pwd`<br />
<br />
# Does the directory still exist?<br />
if [ -d "$DIR" ] ; then<br />
# Yes, go to that directory before Zenity is started.<br />
cd "$DIR"<br />
else<br />
# No, try to go to /media (where the SD cards are mounted)<br />
# or if that fails, go to "/" as a last resort.<br />
cd /media 2> /dev/null || cd /<br />
fi<br />
<br />
# Get a file name form the user. Our current directory is now that which<br />
# was saved, so that's where Zenity will start.<br />
FILE=`zenity --file-selection --title="Select a file"`<br />
<br />
# If the file selector failed, or the user hit cancel, exit now.<br />
[ $? -eq 0 ] || exit 1;<br />
<br />
# Go back to the PND's mount point.<br />
cd $PNDDIR<br />
<br />
# Save the file's directory for next time.<br />
dirname "$FILE" > $SAVEDIR<br />
<br />
# Run our app with the file as an argument.<br />
./my_app "$FILE"<br />
</pre><br />
<br />
=== Checking a file's contents ===<br />
Maybe your application requires some file which cannot be distributed with the PND, either for legal reasons or due to size limitations. A prime example of this is BIOS files used for emulators. Simply copying the file to the current directory will be enough to save it to your program's appdata, but it can also be useful to check the contents of the file are indeed what your application expects.<br />
<br />
One way of doing this is to check the file's contents using a hash. A hash is a mathematical formula which can be used to create a "fingerprint" of a file. Two identical files will always generate the same hash value, so knowing this one value is enough to check if two files match. The MD5 hash is a popular choice, and can be easily generated for a given file like so:<br />
<pre><br />
$ md5sum bios.img<br />
cfcfd01f1b0dfa97f07cb286b2942dc2 bios.img<br />
</pre><br />
<br />
Save this output to a text file named ''bios.md5'' and put it in your PND root directory. The following commands can then be used in your start-up script to copy a file specified by the user, and check it's hash.<br />
<br />
<pre><br />
BIOS=bios.img # The name of our BIOS file<br />
<br />
# Check if the BIOS file already exists.<br />
if [ ! -f ./$BIOS ] ; then<br />
# Not found, so get a file name from the user.<br />
cp "`zenity --file-selection --title="Select your $BIOS file"`" $BIOS<br />
if [ $? != 0 ] ; then<br />
# User hit cancel, bail out.<br />
zenity --error --text="Sorry, emulator cannot run without a BIOS file."<br />
exit 1<br />
fi<br />
<br />
# Check the MD5 hash of the given file against our known-good value.<br />
# If the match fails, ask the user if they'd like to try it anyway.<br />
md5sum -c bios.md5 || zenity --question \<br />
--text="BIOS does not appear to be the correct version. Use it anyway?"<br />
<br />
if [ $? != 0 ] ; then<br />
# File did not match hash, and the user opted not to try it anyway,<br />
# so remove the copied file and bail out.<br />
rm -f $BIOS<br />
exit 1<br />
fi<br />
fi<br />
<br />
# Run our emulator with the BIOS file as an argument.<br />
./my_emu "$BIOS"<br />
</pre></div>Cosamhttps://pandorawiki.org/index.php?title=PND_Cookbook&diff=3420PND Cookbook2010-08-26T15:15:21Z<p>Cosam: Added file content checking using MD5</p>
<hr />
<div>=== Using a start-up script ===<br />
In an ideal world, your application will be completely self-contained and can be run directly without any kind of set-up. It is however often necessary to tweak settings or request input from the user before starting your application. This is easily achieved by having the PND specify a shell script as its executable, which then in turn runs the application. The general structure of such a script is:<br />
<pre><br />
#!/bin/sh<br />
<br />
# Do stuff here...<br />
<br />
./my_app<br />
<br />
# Clean-up<br />
</pre><br />
The first line identifies the file as a shell script, run using "/bin/sh" as the shell. The other lines beginning with a "#" are comments. Before the application is started, parameters can be gathered and/or set. The application itself then gets run by the "./my_app" line, which means "execute the file ''my_app'' in the current directory". When the application exits, it may be necessary to restore previous settings, delete temporary files, or perform some other kinds of cleaning up.<br />
<br />
=== Setting $HOME ===<br />
Many applications write configuration data to the user's home directory by default. This is not desirable on the Pandora as this directory resides on the NAND filesystem. It is however often possible to fool an application into writing to a different directory by setting the $HOME environment variable.<br />
<pre><br />
export HOME=`pwd`<br />
export HOME=$(pwd)<br />
</pre><br />
<br />
=== Loading shared libraries ===<br />
If your application requires shared libraries which aren't part of the standard firmware, they can be included in the PND along with the executable. In order for the system to be able to find the libraries, it must be told which directories to search. This can be done by setting the LD_LIBRARY_PATH environment variable. For example:<br />
<pre><br />
export LD_LIBRARY_PATH=`pwd` # Load libraries in the root directory of the PND.<br />
export LD_LIBRARY_PATH=`pwd`/libs # Load libraries in the "libs" subdirectory of the PND.<br />
</pre><br />
<br />
=== Getting a file/directory ===<br />
Its often necessary to ask the user for the location of a file or directory. This may be because your application requires files which aren't included in the PND itself, or simply because you application doesn't have a built in file picker. The commands below will prompt the user for a file, then run "my_app" with that file as an argument. Note the use of different sorts of quotes which is important for proper operation and handling spaces in file names.<br />
<pre><br />
FILE="`zenity --file-selection --title='Select a File'`"<br />
./my_app $FILE<br />
</pre><br />
<br />
=== Checking a file's contents ===<br />
Maybe your application requires some file which cannot be distributed with the PND, either for legal reasons or due to size limitations. A prime example of this is BIOS files used for emulators. Simply copying the file to the current directory will be enough to save it to your program's appdata, but it can also be useful to check the contents of the file are indeed what your application expects.<br />
<br />
One way of doing this is to check the file's contents using a hash. A hash is a mathematical formula which can be used to create a "fingerprint" of a file. Two identical files will always generate the same hash value, so knowing this one value is enough to check if two files match. The MD5 hash is a popular choice, and can be easily generated for a given file like so:<br />
<pre><br />
$ md5sum bios.img<br />
cfcfd01f1b0dfa97f07cb286b2942dc2 bios.img<br />
</pre><br />
<br />
Save this output to a text file named ''bios.md5'' and put it in your PND root directory. The following commands can then be used in your start-up script to copy a file specified by the user, and check it's hash.<br />
<br />
<pre><br />
BIOS=bios.img # The name of our BIOS file<br />
<br />
# Check if the BIOS file already exists.<br />
if [ ! -f ./$BIOS ] ; then<br />
# Not found, so get a file name from the user.<br />
cp "`zenity --file-selection --title="Select your $BIOS file"`" $BIOS<br />
if [ $? != 0 ] ; then<br />
# User hit cancel, bail out.<br />
zenity --error --text="Sorry, emulator cannot run without a BIOS file."<br />
exit 1<br />
fi<br />
<br />
# Check the MD5 hash of the given file against our known-good value.<br />
# If the match fails, ask the user if they'd like to try it anyway.<br />
md5sum -c bios.md5 || zenity --question \<br />
--text="BIOS does not appear to be the correct version. Use it anyway?"<br />
<br />
if [ $? != 0 ] ; then<br />
# File did not match hash, and the user opted not to try it anyway,<br />
# so remove the copied file and bail out.<br />
rm -f $BIOS<br />
exit 1<br />
fi<br />
fi<br />
<br />
# Run our emulator with the BIOS file as an argument.<br />
./myemu $BIOS<br />
</pre></div>Cosamhttps://pandorawiki.org/index.php?title=PND_Cookbook&diff=3339PND Cookbook2010-08-12T15:57:50Z<p>Cosam: Initial version</p>
<hr />
<div>=== Using a start-up script ===<br />
In an ideal world, your application will be completely self-contained and can be run directly without any kind of set-up. It is however often necessary to tweak settings or request input from the user before starting your application. This is easily achieved by having the PND specify a shell script as its executable, which then in turn runs the application. The general structure of such a script is:<br />
<pre><br />
#!/bin/sh<br />
<br />
# Do stuff here...<br />
<br />
./my_app<br />
<br />
# Clean-up<br />
</pre><br />
The first line identifies the file as a shell script, run using "/bin/sh" as the shell. The other lines beginning with a "#" are comments. Before the application is started, parameters can be gathered and/or set. The application itself then gets run by the "./my_app" line, which means "execute the file ''my_app'' in the current directory". When the application exits, it may be necessary to restore previous settings, delete temporary files, or perform some other kinds of cleaning up.<br />
<br />
=== Setting $HOME ===<br />
Many applications write configuration data to the user's home directory by default. This is not desirable on the Pandora as this directory resides on the NAND filesystem. It is however often possible to fool an application into writing to a different directory by setting the $HOME environment variable.<br />
<pre><br />
export HOME=`pwd`<br />
export HOME=$(pwd)<br />
</pre><br />
<br />
=== Loading shared libraries ===<br />
If your application requires shared libraries which aren't part of the standard firmware, they can be included in the PND along with the executable. In order for the system to be able to find the libraries, it must be told which directories to search. This can be done by setting the LD_LIBRARY_PATH environment variable. For example:<br />
<pre><br />
export LD_LIBRARY_PATH=`pwd` # Load libraries in the root directory of the PND.<br />
export LD_LIBRARY_PATH=`pwd`/libs # Load libraries in the "libs" subdirectory of the PND.<br />
</pre><br />
<br />
=== Getting a file/directory ===<br />
Its often necessary to ask the user for the location of a file or directory. This may be because your application requires files which aren't included in the PND itself, or simply because you application doesn't have a built in file picker. The commands below will prompt the user for a file, then run "my_app" with that file as an argument. Note the use of different sorts of quotes which is important for proper operation and handling spaces in file names.<br />
<pre><br />
FILE="`zenity --file-selection --title='Select a File'`"<br />
./my_app $FILE<br />
</pre></div>Cosamhttps://pandorawiki.org/index.php?title=Porting_guide&diff=2367Porting guide2010-06-01T10:54:17Z<p>Cosam: Set category</p>
<hr />
<div>This is a placeholder for information about porting existing software to the Pandora.<br />
<br />
== Build Environment ==<br />
Ensure you have [[Setting up a cross-compiler|Set up your cross-compiler]].<br />
<br />
== Configure Scripts ==<br />
Much open source software comes with a ''configure'' script which can be used to customise the build. Running ''./configure --help'' will usually display all the available options. Most ''configure'' scripts have a ''--host'' option which can be used for cross compiling. The majority of the remaining options can be used to enable or disable features, or to specify where libraries and their headers are located.<br />
<br />
== Makefiles ==<br />
If the Makefile for your software aren't generated by a ''configure'' script, it may be necessary to alter parameters manually. Again, the main thing is making sure your cross-compiler is used instead of that on your PC. This is often achieved by setting variables such as CC, LD and similar.<br />
<br />
== Helper Programs ==<br />
Some software uses custom tools to aid in the build process. Usually these are built along with the main application itself and compiled as required. Of course, when cross-compiling, these helper programs cannot be run on the PC if they're being compiled for the Pandora. Some ''configure'' scripts are smart enough to allow a native compiler to be used for such programs. In other cases they may need to be built manually. This is easily achieved by compiling the package natively and copying the executables over to the cross-compile build directory.<br />
<br />
[[Category:Development]]</div>Cosamhttps://pandorawiki.org/index.php?title=Porting_guide&diff=2366Porting guide2010-06-01T10:53:53Z<p>Cosam: Initial version</p>
<hr />
<div>This is a placeholder for information about porting existing software to the Pandora.<br />
<br />
== Build Environment ==<br />
Ensure you have [[Setting up a cross-compiler|Set up your cross-compiler]].<br />
<br />
== Configure Scripts ==<br />
Much open source software comes with a ''configure'' script which can be used to customise the build. Running ''./configure --help'' will usually display all the available options. Most ''configure'' scripts have a ''--host'' option which can be used for cross compiling. The majority of the remaining options can be used to enable or disable features, or to specify where libraries and their headers are located.<br />
<br />
== Makefiles ==<br />
If the Makefile for your software aren't generated by a ''configure'' script, it may be necessary to alter parameters manually. Again, the main thing is making sure your cross-compiler is used instead of that on your PC. This is often achieved by setting variables such as CC, LD and similar.<br />
<br />
== Helper Programs ==<br />
Some software uses custom tools to aid in the build process. Usually these are built along with the main application itself and compiled as required. Of course, when cross-compiling, these helper programs cannot be run on the PC if they're being compiled for the Pandora. Some ''configure'' scripts are smart enough to allow a native compiler to be used for such programs. In other cases they may need to be built manually. This is easily achieved by compiling the package natively and copying the executables over to the cross-compile build directory.</div>Cosamhttps://pandorawiki.org/index.php?title=Development_tutorials&diff=2365Development tutorials2010-06-01T10:36:18Z<p>Cosam: </p>
<hr />
<div>== ARM Cortex A8 Tutorials ==<br />
* [[Floating Point Optimization]]<br />
* [[Assembly Code Optimization]]<br />
<br />
== SDL Tutorials ==<br />
<br />
These tutorials assume you know the basics of C++ programming, and know your way around a C++ compiler.<br />
<br />
* [http://www.lazyfoo.net/SDL_tutorials/index.php Lazy Foo's Tutorials]. Not Pandora specific, but a good guide to getting your programming environment set up, along with many SDL tutorials.<br />
* [http://iki.fi/sol/gp/ Sol's Graphics for beginners]. Not Pandora specific, but a good place to get started with SDL graphics coding.<br />
* [http://jnrdev.72dpiarmy.com/ 2D Jump'n'Run Tutorial]<br />
<br />
SDL is NOT a game engine, but it will provide you with the foundations for putting stuff on the screen, getting keyboard and controller input and making sounds. All of these are basics in programming games.<br />
<br />
I think I've got the basics down now and I'm moving on to getting a basic 2D sprite-based engine together. Once done, I can use it to make some simple games (beyond Tic-Tac-Toe and Tetris :P ). The main thing I am struggling with is The Object-Oriented stuff, whereby you separate out the graphics/rendering, system functions, game functions, sounds, players and objects all into separate classes and handle them all through a central "Engine". It's a struggle to wrap my head around, but I'm making some progress.<br />
<br />
Just start basic. Follow the Jump'n'Run tutorial. Copy their code. Change bits. Break it.. fix it. Write it over and over until you know what is happening where and why. Get a pandora or GP2X and cross-compile it for those platforms. Run your little creations on other devices (Android phones and iPhones are great). Little milestones like this will keep you motivated to continue learning.<br />
<br />
Making a game, or programming a whole project is a massive undertaking. Be prepared to fail the first few attempts... quit at least 5 times only to come back and give it another go... and even then you might have only programmed Mahjong. If, at the end of all this, you are still keen, you can step it up to 3D graphics and start working on "bigger projects".<br />
<br />
Remember.. no one can learn to program in a day... and I wouldn't expect anyone who started programming tomorrow to be able to produce a Mario clone, let alone quake 4 in a month (or 6, in my case :P ).<br />
<br />
==OpenGL on the Pandora==<br />
<br />
*[[OpenGL ES 1.1 Tutorial]]<br />
<br />
*[[OpenGL ES 2.0 Tutorial]]<br />
<br />
*[[Combining OpenGL ES 1.1 and SDL to create a window on the Pandora]]<br />
<br />
== The Kernel ==<br />
* [[Kernel build instructions|Compiling the Kernel from Git]]<br />
* [[Kernel interface|Kernel Interface]]<br />
<br />
== Matchbox Window Manager ==<br />
<br />
* [[Matchbox|Matchbox version]]<br />
* [[xoo on ubuntu|Setting up xoo on Ubuntu 8.04/8.10]] (Theme Testing and Development)<br />
<br />
== See Also ==<br />
<br />
* [[Development Tools]]<br />
<br />
<br />
[[Category:Development]]</div>Cosamhttps://pandorawiki.org/index.php?title=Development&diff=2364Development2010-06-01T10:32:35Z<p>Cosam: </p>
<hr />
<div>* [[Setting up a cross-compiler|Set up a cross-compiler]] to compile code for the Pandora on your PC.<br />
* Porting & programming:<br />
** If porting existing software, try the [[porting guide]].<br />
** If creating new code, the [[development tutorials]] may be useful.<br />
* [[Libpnd hub|Package]] your software in PND fromat for distribution.<br />
<br />
[[Category:Development]]</div>Cosamhttps://pandorawiki.org/index.php?title=Development_tutorials&diff=2363Development tutorials2010-06-01T10:20:32Z<p>Cosam: SDL stuff moved from Getting Started page</p>
<hr />
<div>== ARM Cortex A8 Tutorials ==<br />
* [[Floating Point Optimization]]<br />
* [[Assembly Code Optimization]]<br />
<br />
== SDL Tutorials ==<br />
<br />
These tutorials assume you know the basics of C++ programming, and know your way around a C++ compiler.<br />
<br />
* [http://www.lazyfoo.net/SDL_tutorials/index.php Lazy Foo's Tutorials]. Not Pandora specific, but a good guide to getting your programming environment set up, along with many SDL tutorials.<br />
* [http://iki.fi/sol/gp/ Sol's Graphics for beginners]. Not Pandora specific, but a good place to get started with SDL graphics coding.<br />
* [http://jnrdev.72dpiarmy.com/ 2D Jump'n'Run Tutorial]<br />
<br />
If you have some basic programming knowledge, then grab yourself a linux machines (or Virtual Machine)... or even Windows with Bloodshed DevC++ and SDL Packages and learn C++ and SDL programming:<br />
<br />
www.libsdl.org<br />
www.sdltutorials.com<br />
<br />
The following really helped me a lot:<br />
<br />
http://sol.gfxile.net/gp/<br />
http://lazyfoo.net/S...rials/index.php<br />
http://jnrdev.72dpiarmy.com/<br />
<br />
SDL is NOT a game engine, but it will provide you with the foundations for putting stuff on the screen, getting keyboard and controller input and making sounds. All of these are basics in programming games.<br />
<br />
I think I've got the basics down now and I'm moving on to getting a basic 2D sprite-based engine together. Once done, I can use it to make some simple games (beyond Tic-Tac-Toe and Tetris :P ). The main thing I am struggling with is The Object-Oriented stuff, whereby you separate out the graphics/rendering, system functions, game functions, sounds, players and objects all into separate classes and handle them all through a central "Engine". It's a struggle to wrap my head around, but I'm making some progress.<br />
<br />
Just start basic. Follow the Jump'n'Run tutorial. Copy their code. Change bits. Break it.. fix it. Write it over and over until you know what is happening where and why. Get a pandora or GP2X and cross-compile it for those platforms. Run your little creations on other devices (Android phones and iPhones are great). Little milestones like this will keep you motivated to continue learning.<br />
<br />
Making a game, or programming a whole project is a massive undertaking. Be prepared to fail the first few attempts... quit at least 5 times only to come back and give it another go... and even then you might have only programmed Mahjong. If, at the end of all this, you are still keen, you can step it up to 3D graphics and start working on "bigger projects".<br />
<br />
Remember.. no one can learn to program in a day... and I wouldn't expect anyone who started programming tomorrow to be able to produce a Mario clone, let alone quake 4 in a month (or 6, in my case :P ).<br />
<br />
==OpenGL on the Pandora==<br />
<br />
*[[OpenGL ES 1.1 Tutorial]]<br />
<br />
*[[OpenGL ES 2.0 Tutorial]]<br />
<br />
*[[Combining OpenGL ES 1.1 and SDL to create a window on the Pandora]]<br />
<br />
== The Kernel ==<br />
* [[Kernel build instructions|Compiling the Kernel from Git]]<br />
* [[Kernel interface|Kernel Interface]]<br />
<br />
== Matchbox Window Manager ==<br />
<br />
* [[Matchbox|Matchbox version]]<br />
* [[xoo on ubuntu|Setting up xoo on Ubuntu 8.04/8.10]] (Theme Testing and Development)<br />
<br />
== See Also ==<br />
<br />
* [[Development Tools]]<br />
<br />
<br />
[[Category:Development]]</div>Cosamhttps://pandorawiki.org/index.php?title=Development&diff=2362Development2010-06-01T10:19:49Z<p>Cosam: Moved SDL stuff to Development Tutorials</p>
<hr />
<div>==Getting your code onto the Pandora==<br />
<br />
*[[Setting up a cross-compiler]]<br />
<br />
==Other==<br />
<br />
*[[PXML|PXML file structure guide]]<br />
<br />
<br />
[[Category:Development]]</div>Cosamhttps://pandorawiki.org/index.php?title=Development_tutorials&diff=2361Development tutorials2010-06-01T10:18:29Z<p>Cosam: </p>
<hr />
<div>== ARM Cortex A8 Tutorials ==<br />
* [[Floating Point Optimization]]<br />
* [[Assembly Code Optimization]]<br />
<br />
== SDL Tutorials ==<br />
<br />
These tutorials assume you know the basics of C++ programming, and know your way around a C++ compiler.<br />
<br />
* [http://www.lazyfoo.net/SDL_tutorials/index.php Lazy Foo's Tutorials]. Not Pandora specific, but a good guide to getting your programming environment set up, along with many SDL tutorials.<br />
* [http://iki.fi/sol/gp/ Sol's Graphics for beginners]. Not Pandora specific, but a good place to get started with SDL graphics coding.<br />
* [http://jnrdev.72dpiarmy.com/ 2D Jump'n'Run Tutorial]<br />
<br />
==OpenGL on the Pandora==<br />
<br />
*[[OpenGL ES 1.1 Tutorial]]<br />
<br />
*[[OpenGL ES 2.0 Tutorial]]<br />
<br />
*[[Combining OpenGL ES 1.1 and SDL to create a window on the Pandora]]<br />
<br />
== The Kernel ==<br />
* [[Kernel build instructions|Compiling the Kernel from Git]]<br />
* [[Kernel interface|Kernel Interface]]<br />
<br />
== Matchbox Window Manager ==<br />
<br />
* [[Matchbox|Matchbox version]]<br />
* [[xoo on ubuntu|Setting up xoo on Ubuntu 8.04/8.10]] (Theme Testing and Development)<br />
<br />
== See Also ==<br />
<br />
* [[Development Tools]]<br />
<br />
<br />
[[Category:Development]]</div>Cosamhttps://pandorawiki.org/index.php?title=Cross-compiler&diff=2360Cross-compiler2010-06-01T09:51:30Z<p>Cosam: Updated links, various minor edits.</p>
<hr />
<div>To compile your applications to the ARM architecture you're going to need a cross-compiler.<br />
<br />
== Using the SDK-Installer ==<br />
Cpasjuste on the GP32X forums has made a nice script to get a build environment and libraries installed on Ubuntu/Debian systems. Download links and a brief explanation can be found in [http://www.gp32x.com/board/index.php?/topic/52343-pandora-sdk-installer/ this thread].<br />
<br />
== Manual Installation ==<br />
If you want a bit more control, Code-Sourcery hosts a bunch of cross-compiling suites for various platforms on their site, some editions have to be paid for, but they do have "lite" editions without support that are completely free.<br />
<br />
Head up onto [http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3057 here]. The recommended release at time of writing is [http://www.codesourcery.com/sgpp/lite/arm/portal/release1039 2009q3].<br />
<br />
Installers are available for Linux and Windows. Alternatively, download and unpack the tarball, then add the bin directory to your path.<br />
<br />
[[Category:Development]]</div>Cosamhttps://pandorawiki.org/index.php?title=Software_projects&diff=2355Software projects2010-05-30T20:19:19Z<p>Cosam: /* Emulators */</p>
<hr />
<div>See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.<br />
<br />
== Operating Systems ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|Android Omap<br />
|[http://elinux.org/Android_on_OMAP Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|Angstrom Linux<br />
|[http://www.angstrom-distribution.org/ Link]<br />
|Working build, not completed<br />
|<br />
|<br />
|-<br />
|AROS Arm<br />
|[http://projects.powerdeveloper.org/project/imx515/735 Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|FreeBSD<br />
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|Fedora ARM<br />
|[http://fedoraproject.org/wiki/Architectures/ARM Link]<br />
|wip<br />
|<br />
|<br />
|<br />
|-<br />
|Gentoo Linux<br />
|[http://gentoo.openpandora.org Link]<br />
|Working build, not completed<br />
|javaJake, Viridior<br />
|IRC: (FreeNode) #gentoo-pandora<br />
|-<br />
|HaikuOS<br />
|[http://www.haiku-os.org Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|RISC OS<br />
|[http://www.riscosopen.org Link]<br />
|wip<br />
|Uwe Kall, Jeffrey Lee<br />
|BeagleBoard port available for download and testing<br />
|-<br />
|Ubuntu ARM<br />
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]<br />
|wip<br />
|<br />
|<br />
|}<br />
<br />
== Games ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|Abuse<br />
|[http://abuse.zoy.org/ Link]<br />
|working build<br />
|Cpasjuste<br />
|2D Platform<br />
|-<br />
| Albion<br />
| [http://en.wikipedia.org/wiki/Albion_%28game%29 Wikipedia Link] [http://wiki.gp2x.org/wiki/Albion GP2X Version Link]<br />
| Wip, intention to port.<br />
| MH-T <br />
| RPG. Already a port to GP2X&nbsp;. Personally asked author if he plans to port this statically recompiled version.<br />
|-<br />
|Aleph One<br />
|[http://www.youtube.com/watch?v=1zQ7Fbwhb5I/ Link]<br />
|WIP<br />
|Pickle<br />
|FPS<br />
|-<br />
|Battle for Wesnoth v1.6.2<br />
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]<br />
|working build<br />
|Cpasjuste<br />
|Strategy<br />
|-<br />
|BattleJewels<br />
|<br />
|Completed build for GP2X, WIP for Pandora<br />
|Skeezix<br />
|Logical<br />
|-<br />
|BlobWars<br />
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]<br />
|working build<br />
|Cpasjuste<br />
|2D Platform<br />
|-<br />
|Caster<br />
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]<br />
|Working build (tested on PC)<br />
|Svartalf<br />
|RPG<br />
|- <br />
|CDogs<br />
|<br />
|WIP<br />
|Pickle<br />
|Top down Shooter<br />
|-<br />
|Chaotic Vortex<br />
|[http://www.gp32x.com/board/index.php?/topic/49754-chaotic-vortex-dual-stick-arena-shooter Link]<br />
|WIP<br />
|Ruben<br />
|Dual stick 2D shooter<br />
|-<br />
|Descent 1 (d1x-rebirth engine)<br />
|[http://forum.openhandhelds.org/viewtopic.php?f=6&t=1032 Link]<br />
|Working build<br />
|Pickle<br />
|FPS<br />
|-<br />
|Descent 2 (d2x-rebirth engine)<br />
|[http://forum.openhandhelds.org/viewtopic.php?f=6&t=1032 Link]<br />
|Working build<br />
|Pickle<br />
|FPS<br />
|-<br />
|Eternity 6: The Waterphoenix<br />
|[http://www.gp32x.com/board/index.php?/topic/50772-eternity-6-the-waterphoenix/ Link]<br />
|WIP<br />
|Darien<br />
|Side Scroller / Beat 'Em Up<br />
|-<br />
|FHeroes Port (Heroes Of Might And Magic 2)<br />
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]<br />
|Working build<br />
|Pickle<br />
|Strategy<br />
|-<br />
|FreeCiv 2.1.9<br />
|[http://freeciv.wikia.com/wiki/Main_Page Link]<br />
|Working build<br />
|Cpasjuste<br />
|Strategy<br />
|-<br />
|Galactic Artifact<br />
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]<br />
|Working build<br />
|Trevor Bradley<br />
|Strategy<br />
|-<br />
|GemRB (Infinity Engine)<br />
|<br />
|wip<br />
|Adventus<br />
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.<br />
|-<br />
|Giannas Return<br />
|[http://www.gianas-return.de/ Link]<br />
|Working<br />
|Giannas Team<br />
|Arcade<br />
|-<br />
|Gravity Blocks<br />
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]<br />
|wip (early in developement)<br />
|Awekening<br />
|Arcade<br />
|-<br />
|GuitarsOnFire<br />
|[http://www.gp32x.com/board/index.php?/topic/51417-guitarsonfire/ Link]<br />
|working build<br />
|Daid/JayFoxRox<br />
|Rhythm game, no native controls supported, possibly too slow - needs testing<br />
|-<br />
|Homeworld Port<br />
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]<br />
|wip<br />
|LinuxHacker<br />
|Simulation<br />
|-<br />
|Human Condition (was TINCS)<br />
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]<br />
|wip<br />
|Butterman<br />
|FPP<br />
|-<br />
|Ioquake3<br />
|[http://www.gp32x.com/board/index.php?/topic/51531-ioquake3-working/ Link]<br />
|WIP<br />
|Pickle<br />
|FPS<br />
|-<br />
|Lerp<br />
|[http://grapefruitopia.com/lerp/ Link]<br />
|working build<br />
|benjymous<br />
|2D physics puzzle platformer<br />
|-<br />
|Lemmings SDL<br />
|[http://www.gp32x.com/board/index.php?/topic/51581-lemmingssdl-networked/ Link]<br />
|WIP<br />
|Miner49er<br />
|2D Puzzler / Side Scroller<br />
|-<br />
|Lord of the Rings Port<br />
|[http://www.gp32x.com/board/index.php?showtopic=46792&hl= Link]<br />
|Unknown<br />
|Daeglin<br />
|RPG<br />
|-<br />
|Mental<br />
|<br />
|Working build, tested on PC<br />
|Colin Jones (xentalion)<br />
|2D Horror Survival Adventure<br />
|-<br />
|Monster!<br />
|[http://christophsdevblog.blogspot.com/ Link]<br />
|wip<br />
|Chris R<br />
|Arcade<br />
|- <br />
|MogsVsDogs<br />
|[http://pandorawiki.org/index.php?title=MogsVsDogs Link]<br />
|wip<br />
|JayFoxRox, Gadgetoid, Pandora Community<br />
|2.5D Puzzle/Action Game<br />
|- <br />
|Ms Driller<br />
|<br />
|WIP<br />
|Wally<br />
|Arcade<br />
|-<br />
|NAEV<br />
|[http://code.google.com/p/naev/ Link]<br />
|wip (waiting for pandora to finish and test)<br />
|bobbens<br />
|Action/RPG/Sim<br />
|-<br />
|Nails Adventure<br />
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]<br />
|wip<br />
|jsmtux/Mr. Gonzo<br />
|<br />
|-<br />
|OpenLiero (Liero)<br />
|<br />
|working build, need to be polished<br />
|Pickle<br />
|Shoot'Em Up<br />
|-<br />
|OpenTyrian<br />
|[http://code.google.com/p/opentyrian/ Link]<br />
|working build<br />
|Cpasjuste<br />
|Shoot'Em Up<br />
|-<br />
|Pandora Panic!<br />
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]<br />
|Working build<br />
|PokeParadox / GP32X Community<br />
|Arcade<br />
|-<br />
|Pandora Pong<br />
|[http://www.gp32x.com/board/index.php?/topic/50411-pandora-pong/ Link]<br />
|WIP<br />
|crysnamtodshire<br />
|Arcade<br />
|-<br />
|Pandora Pool Panic<br />
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]<br />
|Almost Finished<br />
|Unfathomable Depths<br />
|Arcade<br />
|-<br />
|PanMMO - Pandora MMO Game via Internet<br />
|[http://www.youtube.com/user/enirya Link]<br />
|wip<br />
|Enirya<br />
|RPG<br />
|-<br />
|PanDjoust<br />
|[http://www.gp32x.com/board/index.php?/topic/51192-pandjoust-a-new-simple-platformer/ Link]<br />
|Early Stages<br />
|MarkoeZ<br />
|Platformer<br />
|-<br />
|Powermanga<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|Quake 1<br />
|<br />
|working build<br />
|Pickle<br />
|FPP<br />
|-<br />
|Quake 2<br />
|<br />
|working build<br />
|Pickle<br />
|FPP<br />
|-<br />
|Quake 3<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|FPP<br />
|-<br />
|Quake 3<br />
|<br />
|working build<br />
|Pickle<br />
|FPP<br />
|-<br />
|Reminiscence (flashback)<br />
|[http://cyxdown.free.fr/reminiscence/ Link]<br />
|working build<br />
|Cpasjuste<br />
|Action/Adventure<br />
|-<br />
|Rise of The Triad<br />
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]<br />
|wip<br />
|arrrgh<br />
|FPS<br />
|-<br />
|Slitherlink<br />
|[http://www.gp32x.com/board/index.php?/topic/50756-slitherlink/ Link]<br />
|WIP<br />
|Mia<br />
|Puzzle<br />
|-<br />
|Super Lumenal<br />
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&feature=channel_page Link]<br />
|wip<br />
|Adventus<br />
|Arcade<br />
|-<br />
|SuperTux 1<br />
|[http://forum.openhandhelds.org/viewtopic.php?f=6&t=1040 Link]<br />
|working build<br />
|Pickle<br />
|Platform<br />
|-<br />
|SuperTux 2<br />
|[http://forum.openhandhelds.org/viewtopic.php?f=6&t=1040 Link]<br />
|working build<br />
|Pickle<br />
|Platform<br />
|-<br />
|Tecnoballz<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|Working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|Teeworlds<br />
|[http://www.teeworlds.com/ Link]<br />
|wip<br />
|<br />
|Arcade<br />
|-<br />
|The Lonely Tower<br />
|[http://www.gp32x.com/board/index.php?/topic/51441-the-lonely-tower/ Link]<br />
|Working Build<br />
|Tempel<br />
|Strategy<br />
|-<br />
|The Mana World<br />
|[http://www.themanaworld.org/ Link]<br />
|Working build<br />
|Cpasjuste<br />
|MMORPG<br />
|-<br />
|uHexen2: Hammer of Thyrion <br />
|<br />
|Completed build for GP2X, WIP for Pandora<br />
|Adventus<br />
|FPP<br />
|-<br />
|Ur-Quan Masters<br />
|[http://www.gp32x.com/board/index.php?showtopic=43625&st=165&p=673047&#entry673047 Link]<br />
|Working build<br />
|<br />
|Space Exploration<br />
|-<br />
|Warioland-inspired game<br />
|[http://www.gp32x.com/board/index.php?/topic/48680-warioland-inspired-game/ Link]<br />
|wip<br />
|foxblock<br />
|Platformer<br />
|-<br />
|We Come In Peace<br />
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]<br />
|working build<br />
|Otaco<br />
|Strategy<br />
|-<br />
|Where in world is...<br />
|[http://www.openpandora.pl Link]<br />
|Wip<br />
|StreaK<br />
|Casual<br />
|-<br />
|Wizzley Presto and the Mysterious Time Machine<br />
|[http://www.30daygame.com/ Link]<br />
|wip<br />
|Craigix, Zodttd, Ruckage<br />
|Arcade, 30 Day Game Competition<br />
|-<br />
|Wolf4SDL (Wolfenstein 3D)<br />
|<br />
|working build<br />
|Pickle<br />
|FPS<br />
|-<br />
|Wandor<br />
|[http://www.gp32x.com/board/index.php?/topic/48680-wandor-working-title/ Link]<br />
|WIP<br />
|foxblock<br />
|Side Scroller<br />
|-<br />
|XSwing Plus<br />
|[http://www.gp32x.com/board/index.php?s=&showtopic=43655&view=findpost&p=733021 Link]<br />
|wip<br />
|Tobse<br />
|Arcade<br />
|-<br />
|ZEQ2Lite<br />
|[http://www.gp32x.com/board/index.php?showtopic=47623&hl= Link]<br />
|Work in progress<br />
|MDave<br />
|Dragonball Z Third Person Fighter/Shooter<br />
|-<br />
|Zdoom <br />
|<br />
|Completed build for GP2X, WIP for Pandora<br />
|Adventus<br />
|FPP<br />
|-<br />
|Zombd<br />
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]<br />
|Wip<br />
|iprice/Mr Gonzo<br />
|Shoot'Em Up<br />
|}<br />
<br />
== Emulators ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Emulated System<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|Caprice32<br />
|Amstrad CPC<br />
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]<br />
|wip<br />
|hdonk<br />
|<br />
|-<br />
|DosBox<br />
|x86 DOS<br />
|<br />
|working build<br />
|Pickle<br />
|<br />
|-<br />
|FinalBurnAdvance<br />
|CPS1/2/3/taito...<br />
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]<br />
|<br />
|Squidge<br />
|<br />
|-<br />
|Frotz<br />
|Z-Machine interpreter<br />
|[http://www.cosam.org/computers/pandora/frotz-2.43.pnd Link]<br />
|working build<br />
|SteveM<br />
|<br />
|-<br />
|Fuse<br />
|ZX Spectrum<br />
|[http://apps.open-pandora.org/cgi-bin/viewapp.pl?/Emulator/fuse-0.9.0.inf Link]<br />
|working build<br />
|SteveM<br />
|<br />
|-<br />
|GnGeo<br />
|SNK NeoGeo<br />
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]<br />
|<br />
|Cpasjuste<br />
|<br />
|-<br />
|gpSP<br />
|Nintendo GBA<br />
|<br />
|wip<br />
|ZodTTD<br />
|<br />
|-<br />
|Hatari<br />
|Atari ST<br />
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]<br />
|<br />
|Cpasjuste<br />
|<br />
|-<br />
|[http://www.zeograd.com/parse.php?src=hugof Hu-Go!]<br />
|PC Engine/TurboGrafx<br />
|[http://www.cosam.org/computers/pandora/hugo-2.12.pnd Link]<br />
|working, sound issues<br />
|SteveM<br />
|<br />
|-<br />
|Jzintv<br />
|Mattel Intellivision<br />
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]<br />
|<br />
|WizardStan<br />
|<br />
|-<br />
|[[MAME4ALL]]<br />
|Arcade<br />
|[http://www.youtube.com/user/franxism Link]<br />
|<br />
|Franxis<br />
|<br />
|-<br />
|Mupen64plus<br />
|Nintendo 64<br />
|[http://www.gp32x.com/board/index.php?/topic/49358-mupen64plus/ Link]<br />
|working build<br />
|Ari64<br />
|Adventus ported graphics plugin<br />
|-<br />
|NeoPop<br />
|SNK NeoGeo Pocket<br />
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]<br />
|<br />
|Cpasjuste<br />
|<br />
|-<br />
|NullDC<br />
|Sega Dreamcast<br />
|[http://www.gp32x.com/board/index.php?s=&showtopic=47065&view=findpost&p=709910 Link]<br />
|Wip<br />
|Zezu / drkIIraziel<br />
|<br />
|-<br />
|PandaSNES<br />
|Nintendo SNES<br />
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]<br />
|wip<br />
|Squidge<br />
|<br />
|-<br />
|Pandora-PSP<br />
|Sony Playstation Portable<br />
|[http://www.gp32x.com/board/index.php?/blog/37-pandora-psp/ Link]<br />
|wip<br />
|[[User:JayFoxRox|JayFoxRox]]<br />
|<br />
|-<br />
|PAtari<br />
|Atari 800<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|PicoDrive<br />
|Sega Genesis/CD/32x<br />
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]<br />
|working build<br />
|Notaz<br />
|Fullspeed emulator<br />
|-<br />
|PSMS<br />
|Sega Master System<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|PSnes<br />
|Nintendo SNES<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|[[PSX4Pandora]]<br />
|Sony PlayStation<br />
|[http://www.zodttd.com Link]<br />
|Not Status, working build<br />
|ZodTTD<br />
|<br />
|-<br />
|ScummVM<br />
|x86 Scumm engine games<br />
|<br />
|Working build<br />
|DJ Willis<br />
|Fullspeed emulator<br />
|-<br />
|SIMH<br />
|old hardware<br />
|[http://apps.open-pandora.org/cgi-bin/viewapp.pl?/Emulator/simh-3.8.inf Link]<br />
|working build<br />
|SteveM<br />
|<br />
|-<br />
|Temper<br />
|NEC PC Engine<br />
|[http://exophase.devzero.co.uk/ Link]<br />
|wip<br />
|Exophase<br />
|Fullspeed emulator<br />
|-<br />
|Tempest<br />
|Atari Jaguar<br />
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]<br />
|<br />
|Firefox<br />
|<br />
|-<br />
|[[UAE4ALL]]<br />
|Amiga<br />
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|XMAME<br />
|Arcade<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|<br />
|Cpasjuste<br />
|<br />
|}<br />
<br />
== Graphic Engines ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|GLES2D<br />
|<br />
|Wip<br />
|Cpasjuste<br />
|OpenGL ES 2D library<br />
|-<br />
|GL-WES-v2.0<br />
|[http://code.google.com/p/gl-wes-v2/ link] <br />
|Working Build<br />
|Adventus<br />
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.<br />
|-<br />
|Irrlicht<br />
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&start=45]<br />
|working build<br />
|Hybrid<br />
|3D game engine<br />
|-<br />
|NSS Engine<br />
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]<br />
|<br />
|No Siesta Studios<br />
|<br />
|-<br />
|OGRE Engine<br />
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]<br />
|<br />
|<br />
|3D real-time renderer<br />
|-<br />
|Otaco Glost Engine<br />
|[http://www.youtube.com/user/otacogloost Link1], [http://www.gp32x.com/board/index.php?/topic/48393-i-did-stuff/page__p__736650&#entry736650 Link2]<br />
|working<br />
|Otaco<br />
|<br />
|-<br />
|Quad-Ren 2D<br />
|[http://quad-ren.sourceforge.net/index.php Link]<br />
|Working<br />
|Hessiess<br />
|Version 0.5 <br />
|-<br />
|SDL GLES<br />
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]<br />
|working<br />
|Cpasjuste<br />
|<br />
|-<br />
|XreaL<br />
|[http://xreal.sourceforge.net/xrealwiki/ Link]<br />
|<br />
|Pickle [?]<br />
|<br />
|-<br />
|Stratagus<br />
|[http://stratagus.sourceforge.net/ Link]<br />
|working build<br />
|Cpasjuste<br />
|RTS Engine<br />
|}<br />
<br />
== Other programs ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|AbiWord - Word Processor<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|Claws Mail<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|Epiphany Web Bowser<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|FireFox - Internet Browser<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|GIMP - Image Editor<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|GMenu<br />
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]<br />
|Working build<br />
|Pandora Team<br />
|<br />
|-<br />
|Gnumeric Spreadsheet - Spreadsheet<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|GoView<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|Image Gallery<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|Inside The Box<br />
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]<br />
|wip<br />
|StreaK<br />
|Pandora e-zine<br />
|-<br />
|IRC Client<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|LeafPad<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|Matchbox Shell / GUI<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|MPlayer<br />
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]<br />
|Working build<br />
|Squidge<br />
|<br />
|-<br />
|Math-NEON<br />
|[http://code.google.com/p/math-neon/ Link1]<br />
|Wip<br />
|Adventus<br />
|cmath like library optimised for ARM NEON coprocessor.<br />
|-<br />
|Pandaphone<br />
|[http://www.gp32x.com/board/index.php?/topic/48327-pandaphone/ Link]<br />
|<br />
|jb0yx<br />
|A project to incorporate the Open Pandora handheld device with cell phone technology<br />
|-<br />
|Pandora Sync Suite<br />
|[http://www.openpandora.pl Link]<br />
|Working build<br />
|StreaK<br />
|for Windows 9x/NT<br />
|-<br />
|Pangea GUI<br />
|[http://www.gp32x.com/board/index.php?showtopic=45631&hl=pangea Link]<br />
|WIP<br />
|efegea<br />
|Gmenu alternative<br />
|-<br />
|Panorama<br />
|[http://www.gp32x.com/board/index.php?/topic/51076-panorama/ Link]<br />
|WIP<br />
|dflemstr<br />
|Gmenu alternative<br />
|-<br />
|PDM<br />
|[http://github.com/Cpasjuste/pdm/tree Link]<br />
|<br />
|Cpasjuste<br />
|Light desktop manager for Pandora<br />
|-<br />
|PGui<br />
|[http://github.com/Cpasjuste/pgui/tree Link]<br />
|<br />
|Cpasjuste<br />
|Standard emulator fronted for Pandora<br />
|-<br />
|Pidgin - IM (for Angstrom OpenPandora)<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|<br />
|-<br />
|PMenu<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|<br />
|Cpasjuste<br />
|Minimal Menu for Pandora<br />
|-<br />
|PND Maker (for Windows 9x/NT)<br />
|[http://www.openpandora.pl Link]<br />
|Working build<br />
|StreaK<br />
|<br />
|-<br />
|Qemu<br />
|[http://www.nongnu.org/qemu/status.html Link]<br />
|testing build<br />
|Fabrice Bellard<br />
|open source machine emulator and virtualizer<br />
|-<br />
|Scale<br />
|[http://www.youtube.com/user/Zoxc64 Link]<br />
|wip<br />
|Zoxc64<br />
|Minimal Menu for Pandora<br />
|-<br />
|Simple Dev Studio for Pandora<br />
|[http://www.openpandora.pl Link]<br />
|Wip<br />
|StreaK<br />
|for Windows 9x/NT<br />
|-<br />
|[[TINXL]]<br />
|[[TINXL]]<br />
|<br />
|<br />
|Application stack for multiplayer internet games<br />
|-<br />
|[[TS2A]]<br />
|[[TS2A]]<br />
|Documentation only<br />
||[[User:JayFoxRox|JayFoxRox]]<br />
|Teamspeak 2 Alternative Client / Server, Needs developer<br />
|-<br />
|XMMS<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|ZiB Emulator Frontend<br />
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]<br />
|<br />
|Aimless_E<br />
|<br />
|}<br />
<br />
== Demos / Technical Demos for OpenPandora ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|OpenGL Cell Shading<br />
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]<br />
|working build<br />
|<br />
|<br />
|-<br />
|OpenGL Demo with MP3 Playback<br />
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]<br />
|working build<br />
|<br />
|<br />
|-<br />
|OpenGL Skull Demo<br />
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]<br />
|working build<br />
|<br />
|<br />
|-<br />
|WaveDemo<br />
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]<br />
|Working<br />
|Otaco<br />
|<br />
|}<br />
<br />
[[Category:Development]]<br />
[[Category:Software]]</div>Cosamhttps://pandorawiki.org/index.php?title=Software_projects&diff=1394Software projects2009-07-07T15:07:03Z<p>Cosam: </p>
<hr />
<div>See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.<br />
<br />
== Operating Systems ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|Android Omap<br />
|[http://elinux.org/Android_on_OMAP Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|Angstrom Linux<br />
|[http://www.angstrom-distribution.org/ Link]<br />
|Working build, not completed<br />
|<br />
|<br />
|-<br />
|AROS Arm<br />
|[http://projects.powerdeveloper.org/project/imx515/735 Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|FreeBSD<br />
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|Gentoo Linux<br />
|[http://gentoo.openpandora.org Link]<br />
|Working build, not completed<br />
|javaJake, Viridior<br />
|IRC: (FreeNode) #gentoo-pandora<br />
|-<br />
|HaikuOS<br />
|[http://www.haiku-os.org Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|Ubuntu ARM<br />
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]<br />
|wip<br />
|<br />
|<br />
|-<br />
|Fedora ARM<br />
|<br />
|Unknown<br />
|<br />
|<br />
|}<br />
<br />
== Games ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|Abuse<br />
|[http://abuse.zoy.org/ Link]<br />
|working build<br />
|Cpasjuste<br />
|2D Platform<br />
|-<br />
|Battle for Wesnoth v1.6.2<br />
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]<br />
|working build<br />
|Cpasjuste<br />
|Strategy<br />
|-<br />
|BattleJewels<br />
|<br />
|Completed build for GP2X, WIP for Pandora<br />
|Skeezix<br />
|Logical<br />
|-<br />
|BlobWars<br />
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]<br />
|working build<br />
|Cpasjuste<br />
|2D Platform<br />
|-<br />
|Caster<br />
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]<br />
|Working build (tested on PC)<br />
|Svartalf<br />
|RPG<br />
|-<br />
|Descent 1 (d1x-rebirth engine)<br />
|[http://forum.openhandhelds.org/viewtopic.php?f=6&t=1032 Link]<br />
|Working build<br />
|Pickle<br />
|FPS<br />
|-<br />
|Descent 2 (d2x-rebirth engine)<br />
|[http://forum.openhandhelds.org/viewtopic.php?f=6&t=1032 Link]<br />
|Working build<br />
|Pickle<br />
|FPS<br />
|-<br />
|FHeroes Port (Heroes Of Might And Magic 2)<br />
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]<br />
|Working build<br />
|Pickle<br />
|Strategy<br />
|-<br />
|FreeCiv 2.1.9<br />
|[http://freeciv.wikia.com/wiki/Main_Page Link]<br />
|Working build<br />
|Cpasjuste<br />
|Strategy<br />
|-<br />
|Galactic Artifact<br />
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]<br />
|Working build<br />
|Trevor Bradley<br />
|Strategy<br />
|-<br />
|Giannas Return<br />
|[http://www.gianas-return.de/ Link]<br />
|Working<br />
|Giannas Team<br />
|Arcade<br />
|-<br />
|Gravity Blocks<br />
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]<br />
|wip (early in developement)<br />
|Awekening<br />
|Arcade<br />
|-<br />
|Homeworld Port<br />
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]<br />
|wip<br />
|LinuxHacker<br />
|Simulation<br />
|-<br />
|Human Condition (was TINCS)<br />
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]<br />
|wip<br />
|Butterman<br />
|FPP<br />
|-<br />
|Lerp<br />
|[http://grapefruitopia.com/lerp/ Link]<br />
|working build<br />
|benjymous<br />
|2D physics puzzle platformer<br />
|-<br />
|Lord of the Rings Port<br />
|[http://www.gp32x.com/board/index.php?showtopic=46792&hl= Link]<br />
|Unknown<br />
|Daeglin<br />
|RPG<br />
|-<br />
|Monster!<br />
|[http://christophsdevblog.blogspot.com/ Link]<br />
|wip<br />
|Chris R<br />
|Arcade<br />
|-<br />
|NAEV<br />
|[http://code.google.com/p/naev/ Link]<br />
|wip (waiting for pandora to finish and test)<br />
|bobbens<br />
|Action/RPG/Sim<br />
|-<br />
|Nails Adventure<br />
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]<br />
|wip<br />
|jsmtux/Mr. Gonzo<br />
|<br />
|-<br />
|OpenLiero (Liero)<br />
|<br />
|working build, need to be polished<br />
|Pickle<br />
|Shoot'Em Up<br />
|-<br />
|OpenTyrian<br />
|[http://code.google.com/p/opentyrian/ Link]<br />
|working build<br />
|Cpasjuste<br />
|Shoot'Em Up<br />
|-<br />
|Pandora Panic!<br />
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]<br />
|Working build<br />
|PokeParadox / GP32X Community<br />
|Arcade<br />
|-<br />
|Pandora Pool Panic<br />
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]<br />
|Almost Finished<br />
|Unfathomable Depths<br />
|Arcade<br />
|-<br />
|PanMMO - Pandora MMO Game via Internet<br />
|[http://www.youtube.com/user/enirya Link]<br />
|wip<br />
|Enirya<br />
|RPG<br />
|-<br />
|Powermanga<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|Quake 1<br />
|<br />
|working build<br />
|Pickle<br />
|FPP<br />
|-<br />
|Quake 2<br />
|<br />
|working build<br />
|Pickle<br />
|FPP<br />
|-<br />
|Quake 3<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|FPP<br />
|-<br />
|Quake 3<br />
|<br />
|working build<br />
|Pickle<br />
|FPP<br />
|-<br />
|Reminiscence (flashback)<br />
|[http://cyxdown.free.fr/reminiscence/ Link]<br />
|working build<br />
|Cpasjuste<br />
|Action/Adventure<br />
|-<br />
|Rise of The Triad<br />
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]<br />
|wip<br />
|arrrgh<br />
|FPP<br />
|-<br />
|Super Lumenal<br />
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&feature=channel_page Link]<br />
|wip<br />
|Adventus<br />
|Arcade<br />
|-<br />
|SuperTux 1<br />
|[http://forum.openhandhelds.org/viewtopic.php?f=6&t=1040 Link]<br />
|working build<br />
|Pickle<br />
|Platform<br />
|-<br />
|SuperTux 2<br />
|[http://forum.openhandhelds.org/viewtopic.php?f=6&t=1040 Link]<br />
|working build<br />
|Pickle<br />
|Platform<br />
|-<br />
|Tecnoballz<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|Working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|Teeworlds<br />
|[http://www.teeworlds.com/ Link]<br />
|wip<br />
|<br />
|Arcade<br />
|-<br />
|The Mana World<br />
|[http://www.themanaworld.org/ Link]<br />
|Working build<br />
|Cpasjuste<br />
|MMORPG<br />
|-<br />
|uHexen2: Hammer of Thyrion <br />
|<br />
|Completed build for GP2X, WIP for Pandora<br />
|Adventus<br />
|FPP<br />
|-<br />
|Ur-Quan Masters<br />
|[http://www.gp32x.com/board/index.php?showtopic=43625&st=165&p=673047&#entry673047 Link]<br />
|Working build<br />
|<br />
|Space Exploration<br />
|-<br />
|We Come In Peace<br />
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]<br />
|working build<br />
|Otaco<br />
|Strategy<br />
|-<br />
|Stratagus<br />
|[http://stratagus.sourceforge.net/ Link]<br />
|working build<br />
|Cpasjuste<br />
|RTS Engine<br />
|-<br />
|Where in world is...<br />
|[http://www.openpandora.pl Link]<br />
|Wip<br />
|StreaK<br />
|Casual<br />
|-<br />
|Wizzley Presto and the Mysterious Time Machine<br />
|[http://www.30daygame.com/ Link]<br />
|wip<br />
|Craigix, Zodttd, Ruckage<br />
|Arcade, 30 Day Game Competition<br />
|-<br />
|Wolf4SDL (Wolfenstein 3D)<br />
|<br />
|working build<br />
|Pickle<br />
|FPP<br />
|-<br />
|XSwing Plus<br />
|[http://www.gp32x.com/board/index.php?s=&showtopic=43655&view=findpost&p=733021 Link]<br />
|wip<br />
|Tobse<br />
|Arcade<br />
|-<br />
|ZEQ2Lite<br />
|[http://www.gp32x.com/board/index.php?showtopic=47623&hl= Link]<br />
|Work in progress<br />
|MDave<br />
|Dragonball Z Third Person Fighter/Shooter<br />
|-<br />
|Zdoom <br />
|<br />
|Completed build for GP2X, WIP for Pandora<br />
|Adventus<br />
|FPP<br />
|-<br />
|Zombd<br />
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]<br />
|Wip<br />
|iprice/Mr Gonzo<br />
|Shoot'Em Up<br />
|}<br />
<br />
== Emulators ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Emulated System<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|Caprice32<br />
|Amstrad CPC<br />
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]<br />
|wip<br />
|hdonk<br />
|<br />
|-<br />
|DosBox<br />
|x86 DOS<br />
|<br />
|working build<br />
|Pickle<br />
|<br />
|-<br />
|FinalBurnAdvance<br />
|CPS1/2/3/taito...<br />
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]<br />
|<br />
|Squidge<br />
|<br />
|-<br />
|Frotz<br />
|Z-Machine interpreter<br />
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]<br />
|working build<br />
|SteveM<br />
|<br />
|-<br />
|Fuse<br />
|ZX Spectrum<br />
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]<br />
|working build<br />
|SteveM<br />
|<br />
|-<br />
|GnGeo<br />
|SNK NeoGeo<br />
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]<br />
|<br />
|Cpasjuste<br />
|<br />
|-<br />
|gpSP<br />
|Nintendo GBA<br />
|<br />
|wip<br />
|ZodTTD<br />
|<br />
|-<br />
|Hatari<br />
|Atari ST<br />
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]<br />
|<br />
|Cpasjuste<br />
|<br />
|-<br />
|Jzintv<br />
|Mattel Intellivision<br />
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]<br />
|<br />
|WizardStan<br />
|<br />
|-<br />
|MAME4All<br />
|Arcade<br />
|[http://www.youtube.com/user/franxism Link]<br />
|<br />
|Franxis<br />
|<br />
|-<br />
|NeoPop<br />
|SNK NeoGeo Pocket<br />
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]<br />
|<br />
|Cpasjuste<br />
|<br />
|-<br />
|NullDC<br />
|Sega Dreamcast<br />
|[http://www.gp32x.com/board/index.php?s=&showtopic=47065&view=findpost&p=709910 Link]<br />
|Wip<br />
|Zezu / drkIIraziel<br />
|<br />
|-<br />
|PandaSNES<br />
|Nintendo SNES<br />
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]<br />
|wip<br />
|Squidge<br />
|<br />
|-<br />
|Pandora-PSP<br />
|Sony Playstation Portable<br />
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]<br />
|wip<br />
|[[User:JayFoxRox|JayFoxRox]]<br />
|<br />
|-<br />
|PAtari<br />
|Atari 800<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|PicoDrive<br />
|Sega Genesis/CD/32x<br />
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]<br />
|working build<br />
|Notaz<br />
|Fullspeed emulator<br />
|-<br />
|PSMS<br />
|Sega Master System<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|PSnes<br />
|Nintendo SNES<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|working build<br />
|Cpasjuste<br />
|<br />
|-<br />
|Psx4All<br />
|Sony PlayStation<br />
|[http://www.zodttd.com Link]<br />
|Not Status, working build<br />
|ZodTTD<br />
|<br />
|-<br />
|ScummVM<br />
|x86 Scumm engine games<br />
|<br />
|Working build<br />
|DJ Willis<br />
|Fullspeed emulator<br />
|-<br />
|SIMH<br />
|old hardware<br />
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]<br />
|working build<br />
|SteveM<br />
|<br />
|-<br />
|Temper<br />
|NEC PC Engine<br />
|[http://exophase.devzero.co.uk/ Link]<br />
|wip<br />
|Exophase<br />
|Fullspeed emulator<br />
|-<br />
|Tempest<br />
|Atari Jaguar<br />
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]<br />
|<br />
|Firefox<br />
|<br />
|-<br />
|Uae4All<br />
|Amiga<br />
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|XMAME<br />
|Arcade<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|<br />
|Cpasjuste<br />
|<br />
|}<br />
<br />
== Graphic Engines ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|GemRB (Infinity Engine)<br />
|<br />
|wip<br />
|Adventus<br />
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.<br />
|-<br />
|GLES2D<br />
|<br />
|Wip<br />
|Cpasjuste<br />
|OpenGL ES 2D library<br />
|-<br />
|GL-WES-v2.0<br />
|[http://code.google.com/p/gl-wes-v2/ link] <br />
|Working Build<br />
|Adventus<br />
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.<br />
|-<br />
|Irrlicht<br />
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&start=45]<br />
|working build<br />
|Hybrid<br />
|<br />
|-<br />
|NSS Engine<br />
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]<br />
|<br />
|No Siesta Studios<br />
|<br />
|-<br />
|OGRE Engine<br />
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]<br />
|<br />
|<br />
|<br />
|-<br />
|Otaco Glost Engine<br />
|[http://www.youtube.com/user/otacogloost Link]<br />
|working<br />
|Otaco<br />
|<br />
|-<br />
|Quad-Ren 2D<br />
|[http://quad-ren.sourceforge.net/index.php Link]<br />
|<br />
|Hessiess<br />
|<br />
|-<br />
|SDL GLES<br />
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]<br />
|working<br />
|Cpasjuste<br />
|<br />
|-<br />
|XreaL<br />
|[http://xreal.sourceforge.net/xrealwiki/ Link]<br />
|<br />
|Pickle [?]<br />
|<br />
|}<br />
<br />
== Other programs ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|AbiWord - Word Processor<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|Claws Mail<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|Epiphany Web Bowser<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|FireFox - Internet Browser<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|GIMP - Image Editor<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|GMenu<br />
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]<br />
|Working build<br />
|Pandora Team<br />
|<br />
|-<br />
|Gnumeric Spreadsheet - Spreadsheet<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|for Angstrom OpenPandora<br />
|-<br />
|GoView<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|Image Gallery<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|Inside The Box<br />
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]<br />
|wip<br />
|StreaK<br />
|Pandora e-zine<br />
|-<br />
|IRC Client<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|LeafPad<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|Matchbox Shell / GUI<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|MPlayer<br />
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]<br />
|Working build<br />
|Squidge<br />
|<br />
|-<br />
|Math-NEON<br />
|<br />
|Wip<br />
|Adventus<br />
|cmath like library optimised for ARM NEON coprocessor.<br />
|-<br />
|Pandora Sync Suite<br />
|[http://www.openpandora.pl Link]<br />
|Working build<br />
|StreaK<br />
|for Windows 9x/NT<br />
|-<br />
|Pangea GUI<br />
|[http://www.gp32x.com/board/index.php?showtopic=45631&hl=pangea Link]<br />
|WIP<br />
|efegea<br />
|Gmenu alternative<br />
|-<br />
|PDM<br />
|[http://github.com/Cpasjuste/pdm/tree Link]<br />
|<br />
|Cpasjuste<br />
|Light desktop manager for Pandora<br />
|-<br />
|PGui<br />
|[http://github.com/Cpasjuste/pgui/tree Link]<br />
|<br />
|Cpasjuste<br />
|Standard emulator fronted for Pandora<br />
|-<br />
|Pidgin - IM (for Angstrom OpenPandora)<br />
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]<br />
|working build<br />
|<br />
|<br />
|-<br />
|PMenu<br />
|[http://mydedibox.fr/_stuff/pandora/ Link]<br />
|<br />
|Cpasjuste<br />
|Minimal Menu for Pandora<br />
|-<br />
|PND Maker (for Windows 9x/NT)<br />
|[http://www.openpandora.pl Link]<br />
|Working build<br />
|StreaK<br />
|<br />
|-<br />
|Qemu<br />
|[http://www.nongnu.org/qemu/status.html Link]<br />
|testing build<br />
|Fabrice Bellard<br />
|open source machine emulator and virtualizer<br />
|-<br />
|Scale<br />
|[http://www.youtube.com/user/Zoxc64 Link]<br />
|wip<br />
|Zoxc64<br />
|Minimal Menu for Pandora<br />
|-<br />
|Simple Dev Studio for Pandora<br />
|[http://www.openpandora.pl Link]<br />
|Wip<br />
|StreaK<br />
|for Windows 9x/NT<br />
|-<br />
|[[TINXL]]<br />
|[[TINXL]]<br />
|<br />
|<br />
|Application stack for multiplayer internet games<br />
|-<br />
|[[TS2A]]<br />
|[[TS2A]]<br />
|Documentation only<br />
||[[User:JayFoxRox|JayFoxRox]]<br />
|Teamspeak 2 Alternative Client / Server, Needs developer<br />
|-<br />
|XMMS<br />
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]<br />
|Working build<br />
|<br />
|<br />
|-<br />
|ZiB Emulator Frontend<br />
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]<br />
|<br />
|Aimless_E<br />
|<br />
|}<br />
<br />
== Demos / Technical Demos for OpenPandora ==<br />
{|class="wikitable sortable" border="1" cellpadding="1" cellspacing="0" style="font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;"<br />
|- style="background: #ececec"<br />
! Project Name<br />
! Link<br />
! Status<br />
! Author/Port Author<br />
! Notes<br />
|-<br />
|OpenGL Cell Shading<br />
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]<br />
|working build<br />
|<br />
|<br />
|-<br />
|OpenGL Demo with MP3 Playback<br />
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]<br />
|working build<br />
|<br />
|<br />
|-<br />
|OpenGL Skull Demo<br />
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]<br />
|working build<br />
|<br />
|<br />
|-<br />
|WaveDemo<br />
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]<br />
|Working<br />
|Otaco<br />
|<br />
|}</div>Cosam