| 
 | 
The following is an example template to create a simple Symbian OS
EXE project: 
<?xml version="1.0" encoding="ISO-8859-1"?>
<template type="ProjTempl" version="1.0" supplier="Symbian" revision="1.0" author="Bala Torati"
        id="EXE" label="Simple EXE" description="A skeletal Symbian OS EXE project. Creates a folder for sources and another for include."
         help="help.html">
    <property-group id="basics" label="Basic Settings" description="Basic properties of a project" type="PAGES-ONLY" help="help.html">
        
<property id="uid2"
            label="UID 2"
            description="UID 2"
            default="0x00000000"
            type="input"
            pattern="0x[0-9a-fA-F]{8}"
            hidden="false"
            mandatory="true"
            persist="true"/>
        
<property id="uid3"
            label="UID 3"
            description="UID 3"
            default="0x00000000"
            type="input"
            pattern="0x[0-9a-fA-F]{8}"
            hidden="false"
            mandatory="false"
            persist="true"/>
<property id="vid"
            label="Vendor ID"
            description="Vendor ID"
            default="0x00000000"
            type="input"
            pattern="0x[0-9a-fA-F]{8}"
            hidden="false"
            mandatory="true"
            persist="true"/>
<property id="author"
            label="Author"
            description="Name of the author"
            type="input"
            pattern=".*"
            default=""
            hidden="false"
            persist="true"/>
<property id="copyright"
            label="Copyright notice"
            description="Your copyright notice"
            type="input"
            pattern=".*"
            default="Your copyright notice"
            hidden="false"
            persist="true"/>
<property id="targetType"
            label="Target Type"
            description="Select the target type"
            type="select"
            default="app"
            hidden="false"
            mandatory="true"
            persist="true">
            <item label="APP" value="app"/>
            <item label="LIB" value="lib"/>
            <item label="DLL" value="dll"/>
            <item label="EXE" value="exe"/>
            <item label="EXEDLL" value="exedll"/>
        </property>
    </property-group>
    <property-group id="directories" label="Project Directories" description="Generated files will be copied to the specified directories under the project root directory" type="PAGES-ONLY" help="help.html">
    <property id="incDir"
                label="Include"
                description="Directory for C++ header files"
                type="input"
        default="inc"
                pattern="[a-zA-Z0-9]+"
                mandatory="true"
                persist="true"/>
    <property id="sourceDir"
                label="Source"
                description="Directory for C++ source files"
                type="input"
                default="src"
                pattern="[a-zA-Z0-9]+"
                mandatory="true"
                persist="true"/>
    </property-group>
    
    <process type="org.eclipse.cdt.managedbuilder.core.NewManagedProject">
        <simple name="name" value="$(projectName)"/>
        <simple name="targetType" value="$(targetType)"/>
        <simple name="uid2" value="$(uid2)"/>
        <simple name="uid3" value="$(uid3)"/>
        <simple name="vid" value="$(vid)"/>
    </process>
    <process type="org.eclipse.cdt.core.CreateSourceFolder">
        <simple name="projectName" value="$(projectName)"/>
        <simple name="path" value="$(sourceDir)"/>
    </process>
    <process type="org.eclipse.cdt.managedbuilder.core.CreateIncludeFolder">
        <simple name="projectName" value="$(projectName)"/>
        <simple name="path" value="$(incDir)"/>
    </process>
    <process type="org.eclipse.cdt.core.AddFiles">
        <simple name="projectName" value="$(projectName)"/>
        <complex-array name="files">
            <element>
                <simple name="source" value="inc/Basename.h"/>
                <simple name="target" value="$(incDir)/$(baseName).h"/>
                <simple name="replaceable" value="true"/>
            </element>
            <element>
                <simple name="source" value="src/Basename.cpp"/>
                <simple name="target" value="$(sourceDir)/$(baseName).cpp"/>
                <simple name="replaceable" value="true"/>
            </element>
        </complex-array>
    </process>
    <process type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringListOptionValues">
        <simple 
name="projectName" value= "$(projectName)"/>      
        <complex-array name="resourcePaths">
            <element>
                <simple name="id" value=".*linker\.libraries\.libraries.*" />
                <simple-array name="values">
                    <element value="euser.lib" />
                </simple-array>
                <simple name="path" value="" />
            </element>
        </complex-array>
    </process>
</template>
The above given template copies the following source (.cpp)
and header (.h) files in the src and inc
folders respectively. These files uses a set of macros to get the values
specified by the developer for file name, author name, copyright etc.
/*
============================================================================
 Name        : $(baseName).cpp
 Author      : $(author)
 Version     :
 Copyright   : $(copyright)
 Description : Exe source file
============================================================================
*/
//  Include Files  
#include "$(baseName).h"
#include <e32base.h>
#include <e32std.h>
#include <e32cons.h>            // Console
//  Constants
_LIT(KTextConsoleTitle, "Console");
_LIT(KTextFailed, " failed, leave code =      %d");
_LIT(KTextPressAnyKey, " [press any key]\n");
//  Global Variables
LOCAL_D CConsoleBase* console;  // write all messages to this
//  Local Functions
LOCAL_C void MainL(const TDesC& aArgs)
    {
    //
    // add your program code here, example code below
    //
    console->Write(_L("Hello, world!\n"));
    console->Printf(_L("Command line args: \"%S\"\n"), &aArgs);
    }
LOCAL_C void DoStartL()
    {
    // Create active scheduler (to run active objects)
    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
    CleanupStack::PushL(scheduler);
    CActiveScheduler::Install(scheduler);
    // Call main function with command line
    TBuf<256> cmdLine;
    RProcess().CommandLine(cmdLine);
    MainL(cmdLine);
    // Delete active scheduler
    CleanupStack::PopAndDestroy(scheduler);
    }
//  Global Functions
GLDEF_C TInt E32Main()
    {
    // Create cleanup stack
    __UHEAP_MARK;
    CTrapCleanup* cleanup =     CTrapCleanup::New();
    // Create output console
    TRAPD(createError, console =     Console::NewL(KTextConsoleTitle, TSize(KConsFullScreen,KConsFullScreen)));
    if (createError)
        return createError;
    // Run application code inside TRAP harness, wait keypress when terminated
    TRAPD(mainError, DoStartL());
    if (mainError)
        console->Printf(KTextFailed, mainError);
    console->Printf(KTextPressAnyKey);
    console->Getch();
    
    delete console;
    delete cleanup;
    __UHEAP_MARKEND;
    return KErrNone;
    }
/*
============================================================================
 Name        : $(baseName).h
 Author      : $(author)
 Version     :
 Copyright   : $(copyright)
 Description : Exe header file
============================================================================
*/
#ifndef __$(baseName)_H__
#define __$(baseName)_H__
//  Include Files
#include <e32base.h>
//  Function Prototypes
GLDEF_C TInt E32Main();
#endif  // __$(baseName)_H__
When the developer chooses the above template in the New Project wizard, the following wizard pages are generated:
The input fields listed in the above given pages are as per the
definitions given in the template. In the template, the
property-group element with the ID "basics" defines all the input
fields required for the Basic Settings page. While the
property-group element with the ID "directories" defines all
the input fields required for the Project Directories page. 
The template will create a Symbian OS EXE project in the
Eclipse workspace with all the required resources. 
The following C/C++ Projects view shows the resources
created by the New Project wizard for the above given template: