# Symbian

Welcome to the Symbian book at wikibooks. Originally started by the righteous folks from #symbian on freenode, this book hopes to contain some information about programming in Symbian C++. Mostly about features that aren't documented or are hard to find via digging forums.

## Getting Started

If you're just getting started, you're best off reading the Wikipedia article about Symbian. There are lots of very useful links at the bottom of the page containing a great collection of tutorials and examples.

## Useful links

Some links you'll need:
* The Symbian Foundation developer website
* Symbian OS error codes on NewLC.com.
* Forum Nokia The biggest Symbian-related discussion forum on the web.
* Symbian Example The collection of stand-alone code examples.
* Forum Nokia Wiki
* Forum Nokia Wiki
* Symbian C++ Google Group

## Platforms based on Symbian OS

There are several mobile platforms based on Symbian OS. The most popular ones are Nokia's S60 and UIQ Technology's UIQ. Nokia also has Series 40, which is not a Symbian platform, but is based on Nokia's proprietry closed OS. Series 40 supports J2ME. For more information about J2ME, read the J2ME wikibook.

### S60

Nokia's S60, formerly known as Series 60, includes a wide range of phones with varying capabilities. SDKs can be found at Forum Nokia. Especially if you plan to use the newer SDKs you'll need Carbide.vs or Carbide.C++.

### UIQ

SonyEricsson owned UIQ, used e.g. by Sony-Ericsson, Motorola and BenQ. SDKs can be found at UIQ.com.

### Series 80

Nokia's Series 80 is the communicator series which includes 9300, 9300i and 9500. SDKs can be found at Forum Nokia. The 9200 -series has a separate SDK.

### Series 90

Nokia had Series 90 a while back which consisted of only two products, 7700 and 7710. Only 7710 was actually commercially sold. The SDK for Series 90 couldn't be found on Forum Nokia any more, and Series 90's development has been ceased.

## Symbian C++ and OS fundamentals
### Conventions, types and classes

Symbian OS has a lot of coding and naming conventions. The OS also has its own equivalents for primitive types (mostly typedefs), like TInt (signed int) and TText16 (unsigned short int), and follows a convention for naming classes, for example CMyComplexClass, TMySimpleClass and MMyInterface.

### Memory management

Symbian OS has certain memory management peculiarities. These include the cleanup stack and the usage of two-phase construction.

### Exception handling

Symbian OS doesn't use standard C++ exceptions, but employs its own system known as the leave mechanism. Simply put, this consists of code that can possibly leave (roughly throw) and code that can trap leaves (roughly catch).

### Descriptors

Symbian OS' conception of strings are descriptors. These are data structures that can hold any binary data, but are used mostly for storing and manipulating text.

### Active Objects

Active Objects provide means for cooperative multitasking. Symbian OS itself supports preemptive multitasking, but Active Objects are usually the suggested method for executing various asynchronous tasks.

### Resources

Like some other operating systems, Symbian OS uses resources for given, mostly UI-related, definitions. This section tries to explain how to define resources and use them.

## Symbian SDKs

Although each platform provides (or should provide) its own SDK, there are few things in common between them.
Symbian SDK on Unix HOWTO - http://www.koeniglich.de/sdk2unix/symbian_sdk_on_unix.html