opl-dev icon

Current status summary

92xx Communicator Series

9300/9500 Communicator Series


Series 60

Series 90

OPL dev package

Release notes

Source zip


Back to homepage

OPL developers packages

If you want to write OPL programs, you will need the OPL developers pack (as well as an OPL user package) for your Symbian OS phone. Generally, you can develop on the phone itself, as well as on the Windows emulator supplied as part of a C++ SDK.

The OPL developers package available from this page will allow you to write OPL programs for the following types of device:

  • Nokia 92xx/9300/9500 Communicator series
  • UIQ
  • Series 60
How to use a developer pack To use a developer pack, install the relevant C++ SDK as detailed below, then unzip the developer pack on top.

Finally, it is possible to install more than one developer pack. (Just ensure you unzip the correct one onto the appropriate SDK!)

Current status summary

Here are the OPL developer packs, with the most complete at the top:

Full release

OPL for the Nokia 92xx Communicator series

The version for the 92xx is v1.56 and functionally complete. It supplies the Texted OPL editor application, all OPXs, and the DemoOPL example app.

Full release

OPL for the Nokia 9300/9500 Communicator series

The version for the 9300/9500 is v1.56 and functionally complete. It supplies the Texted OPL editor application, all OPXs, and the DemoOPL example app.



Ported from the Symbian OS 6.0 version, this is for UIQ phones based on Symbian OS 7.0. While it is a beta release, as it has some open issues that need to be resolved before the full release, it delivers the OPL editor app, most OPXs and the DemoOPL app.


OPL for Series 60

This version for Symbian OS 6.1 is still alpha. The OPL editor app requires more development, but several OPXs are supplied.

Developer pack details

92xx Communicator Series functionality

OPL for the Nokia 92xx Communicator Series is a long established, mature, full release.

C++ SDK required (only for full developers package): Nokia 9200 Communicator SDK (available from www.forum.nokia.com)

Full developers pack (for development on PC and on the device): 9200-OPL-DevPack-2006-06-17.zip file (1437 Kb)
Mini developers pack (for development on the device itself only): 9200-OPL-DevMini-2006-06-17.zip file (413 Kb)

9300/9500 Communicator Series functionality

OPL for the Nokia 9300/9500 Communicator Series is a mature, full release.

C++ SDK required (only for full developers package): Nokia S80 DP2.0 SDK (available from www.forum.nokia.com)

Full developers pack (for development on PC and on the device): 9500-OPL-DevPack-2006-06-17.zip file (1040 Kb)
Mini developers pack (for development on the device itself only): 9500-OPL-DevMini-2006-06-17.zip file (413 Kb)

UIQ functionality

The port of OPL for UIQ is available as a beta release, as most items of functionality are available. The translator and runtime work as expected, the Texted OPL editor is able to translate programs and OPL applications, and most OPXs are available.

In this regard, the UIQ version is much closer to the Communicator version than the Series 60 port.

The known limitations are:

  • OPL event loop handling
  • OPL font constants
  • Texted file handling, ini file
  • Texted fonts
More information on this is available in the UIQ developer pack zip file.

C++ SDK required: Symbian OS v7.0 UIQ 2.1 SDK (available from Sony Ericsson Developer World Home page.)

Developers pack: UIQ-OPL-DevPack-2005-01-10.zip file

Series 60 functionality

The OPL for Series 60 user package is currently at alpha status, v0.50. In particular, there's no support for string DIALOGs, nor sound. Most OPXs have not been tested.

Also, a C++ wrapper application is required to launch .OPO files from the Series 60 Menu application. This will be the standard way of supporting OPL applications on Series 60. For more details on rolling your own wrapper, take a look at the \opl\oplr\oplwrapper0 source code. A readme.txt file explains how to customize the oplwrapper0 code for your own application. (Or you might be lucky if you ask a friendly Series 60 programmer very nicely.)

The editor application (texted.app) for Series 60 phones is also yet to be released. If you wish to write OPL programs for Series 60 phones, there are two main options:

  1. Use the PC-based OPLTRAN tool with a Series 60 SDK to produce your .OPO files. Or
  2. Develop your .OPO files on a Nokia Communicator (or emulator) and transfer to the Series 60 phone.

Similarly for Series 60, if you have a Series 60 SDK, you'll be able to develop OPX extensions. (Though we've not tested this yet.) You'll also be able to develop using the PC-based OPLTRAN tool and test using the Series 60 emulator.

C++ SDK required: Series 60 SDK (available from www.forum.nokia.com)

Developers pack: OPL-OS61-WINS-030.zip file

Series 90 functionality

OPL for the Nokia 7700 phone using Series 90 is at a pre-release stage. It's not yet available, we're waiting for the release of a more complete version of the Series 90 SDK.

C++ SDK required: Series 90 SDK (available from www.forum.nokia.com)

Developers pack: Not yet available.

Release notes

The latest release notes for developers are:
v1.56 17 June 06 ricka@users.sourceforge.net and arjenb@users.sourceforge.net

Legend: C92 = for Nokia 92xx Communicator
        C95 = for Nokia 9300/9500 Communicator
        C9X = for all Nokia Communicators
        ALL = for all devices (Communicator, UIQ, S60)
* (ALL) arjenb: Added new graphics command gXBORDER32 - see OPLR

* (C9X) arjenb: Fixed bug [1507068] Runtime with active menu freezes when focus switches 
* (ALL) arjenb: New functionality to fix bug [1172574] gXBORDER only draws one border type
        gXBORDER32 command was added that draws the new Symbian ER6 style borders,
        addding OpCode::gXBorder32() and modifying CONST.TPH. See Developer note #1 below 
        for details.

1. New graphics command: gXBORDER32
gXBORDER32 draws the new Symbian ER6 style borders. Since the new flag constants for these type
of borders exceed the size of an integer and the old gXBORDER command only accepts a integer flag,
the new command was introduced. The syntax of gXBORDER32 is almost identical to the old gXBORDER 
command, but the first parameter is no longer present and the second parameter has been changed to 
a longint.

Usage: gXBORDER32 flags&[,w%,h%]

Constants for the different border types are included in CONST.OPH.

The following example draws a Window-type border around the current drawable:
   gXBORDER32 KgXBorder32Window&
v1.55 10 June 06 ricka at users dot sourceforge dot net and arjenb at users dot sourceforge dot net

* (C9X) arjenb: Added self signed certificate to all 92xx/9300/9500 .pkg files
* (C95) arjenb: Fixed bug [1160930] SIS files are missing Series80ProductID
* (C9X) arjenb: AppFrame.opx, SendAs.opx and System.opx are now included as files in the OPL runtime 
        installation and are no longer available as separate sis-files. This to prevent the user from
        seeing 4 installation warnings when installing the runtime and to prevent reinstallation 
        problems on Nokia 9300/9500 Communicators.
* (ALL) ricka:  Fixed bug [1101203] HRH2OPH missing from Dev Pack

* (ALL) arjenb: Fixed bug [911620] Stale .AIF files left in \System\Temp
* (ALL) arjenb: Added new graphics command gPIXEL - see OPLR
* (ALL) arjenb: Added optional third argument for LOC - see OPLR

* (ALL) arjenb: New functionality for feature [734702] Graphics commands
        gPIXEL command was added which returns the RGB color value of the specified pixel,
        addding FuncOpCode::gPixel(). See Developer note #1 below for details.
* (ALL) arjenb: Fixed bug and new functionality for feature [1499213] LOC partially broken
        The LOC function was changed to use language independent case insensitive searching.
        Additionally, an optional 3rd argument for LOC was added, to allow specification of the 
        search mode (normal, folded and collapsed), adding FuncOpCode::LocWithCase() and modifying 
        const.tph. See Developer note #2 below for details.
* (C95) arjenb: Fixed bug [0934352] MPOPUP crashes.
* (C9X) arjenb: Fixed bug [1493931] Runtime crashes.
* (C95) arjenb: Fixed bug [1404558] CBA update problems in OPL dialogs
* (C95) arjenb: Fixed bug [1245819] No scrollbar in OPL dialogs
* (ALL) arjenb: Fixed bug [1500819] PEEK$ sometimes doesn't work
* (C95) arjenb: Fixed bug [1299716] Status field not updated correctly

* (ALL) arjenb: Added Array.OPX for handling C++ style dynamic length arrays in OPL.
        See \opl\opx\array\ArrayOPX.rtf for more info.
* (C9X) arjenb: Fixed bug [0897032] Agenda.opx problem on 9200
* (C95) arjenb: Fixed bug [1086304] SyGetPhoneInfo$: panics in System.OPX.
* (ALL) arjenb: Fixed bug [1404558] Declaration errors in System.oxh
* (C9X) arjenb: Fixed bug [1158074] Application title bar casts shadow in AppFrame.OPX
* (C95) ricka:  Fixed bug [1167022] AppFrame OPX doesn't support AddToDesk on 9500
* (C95) arjenb: Restored irListen functionality in Appframe.opx (AFToggleIrDA function)

* (C9X) arjenb: Fixed bug [1103100] Find/Replace skips first find
* (C95) arjenb: Fixed bug [1103109] Replace missing from Texted editor
* (C95) ricka:  Fixed bug [1103547] Texted doesn't use AddToDesk on 9500
* (C95) arjenb: Find/replace now also always starts at the current cursor position on a 9300/9500
* (C9X) arjenb: Goto dialog CBA-buttons restructured (instead a single "Close" button, the dialog 
        now has a "Go to" and "Cancel" button)

* (C95) ricka:  Fixed bug [1043920] OPLTRAN.EXE panics on 9500 SDK

* (ALL) ricka:  Fixed bug [1079304] Further changes to demoopl.mk makefile to cleanly build demoopl.app

1. New graphics command: gPIXEL
gPIXEL returns the RGB color value of a pixel in the current drawable.

Usage: rgb&=gPIXEL(xpos%,ypos%)

RGB values are returned as longints and can be converted to red, green and blue values using the KRgbRedPosition&, 
KRgbGreenPosition&, KRgbBluePosition& and KRgbColorMask& constants (specified in CONST.OPH). 

The following example retrieves the RGB values of a horizontal line of 15 pixels starting at position 4,6 
in the specified window and prints the retrieved RGB values in the default window:

PROC GetPixelDemo:(DrawableID%)
LOCAL I%,P&,R&,G&,B&
  I% = 0
  WHILE I% < 15
    gUSE DrawableID%
    P& = gPIXEL(4+I%,6)
    R& = P& / KRgbRedPosition& AND KRgbColorMask&
    G& = P& / KRgbGreenPosition& AND KRgbColorMask&
    B& = P& / KRgbBluePosition& AND KRgbColorMask&
    gUSE 1
    PRINT "Pixel at (" + NUM$(4+I%,2) + ",6)= R:" + NUM$(R&,3) + ",G:" + NUM$(G&,3) + ",B:" + NUM$(B&,3)

2. Changes to the LOC function
LOC is now implemented using a locale *independent* case insensitive search. The previous version of LOC
used a locale *dependent* case insensitive search. The problem with the locale dependent version was that
it did not find non-printable characters (like CHR$(0)), and incorrectly reported them as found at the first 
position of the string. It also mapped most extended characters to their collated counterparts before starting
the search (e.g.  becomes S), which could lead to incorrect results.

The LOC function has also been extended with an optional third argument, allowing you to specify the search mode. 
LOC is now able to do a case sensitive search, a language dependent case insensitive search and a language 
independent case insensitive search. For this purpose three new constants have been added to CONST.OPH:
KLocFindExact%       does a case sensitive search
KLocFindCollated%    does a case insensitive search (locale dependent)
KLocFindFolded%      does a case insensitive search (locale independent), same effect as LOC with two arguments

In the event that your application relies on the fact that LOC uses the language dependent search (for example 
if your code expects that a -character is considered equal to an S or the degree symbol () is equal to 
the O-character), you need to use LOC's new optional third argument with the value KLocFindCollated%.

v1.54 11 January 05 ricka at users dot sourceforge dot net and phil.spencer at symbian dot com

* Minor corrections to libraries included in the mmp file.
* Corrected the HorizontalScrollBar state test for the Program menu.
* Minor change to UIQ Program menu separator bar for Edit pane.
* Removed Find from UIQ menu - bug [910920] Find doesn't work on UIQ editor.
* Started a solution for bug [1095527] Search and Replace doesn't work in TextEd
  on 92xx and 9300/9500 phones.

v1.53 24 December 04 ricka at users dot sourceforge dot net and phil.spencer at symbian dot com

* Added an extra build flag __UIQ_MMP_WINS_TOO__ in opl-target.mmpi include file
  to re-instate some WINS support under UIQ.
* Fixed bug [91100] Files missing from UIQ dev pack.
  Const.oph and various .oxh files now present in the UIQ developer pack.
* Added new makeopl.bat file to rebuild all opl components from a single script.

* Fixed bug [922555] UIQ: dINIT Problems with Buttons
  Changed UIQ dialog RSS file to just contain an OK button by default, no need for
  full ALERT dialog keys on dialogs where no dBUTTONS is used.

* Fixed bug [908415] dButton Command - Four buttons as default on UIQ (p800)
  Changed dBUTTONS construction so that on UIQ (like on ER5) only used buttons are
  added, removing the problem of unsightly blank buttons which was a hangover from
  the Crystal CBA way of doing things.

* Fixed bug [851520] Unguarded RDebug::Print
  All calls to RDebug::Print() are now guarded for _DEBUG builds only.
  Note: this required changes to OPX mediaserveropx too.

* Added some S80_DP2_0 (Nokia 9300/9500)-specific changes for dDate's AddDateEditorL().

* Added HRH2OPH to help convert UIQ help compiler files to OPL include files.

* Removed some of the unsupported configurable features of Appframe.OPX from the
  S80_SP2_0 (Nokia 9300/9500) version. e.g. Add To Desk, IR Listen.
  Ditto for System.OPX's access to system timers, ETEL and PLP remote link.

* Changed some UIQ menus and dialogs to make it look and behave more like a UIQ

* Fixed bug [910311] No horizontal scrollbar in TextEd
  While the scroll bar should appear automatically, like the vertical scroll bar, 
  there seems to be some underlying problem which stops this happening. So the Editor
  menu now allows the choice of whether you want the horizontal scroll bar visible or
  not. It's off by default.
  Also, there's a (related?) problem with the width of the document - the scroll bar
  action gives the impression that the document is approx. 2000 chars wide! This is
  most obvious when dragging the scroll bar thumb, which means this action isn't very
  useful. However, tapping on the scroll bar arrow heads (or the bar between the
  thumb and the arrow head) works quite well. 
  (Incidently, this is not a UIQ problem, a test version of the Editor app built for
  the 9210 exhibits the same weird horizontal scroll bar too.)
  See the sourceforge bug report for more details.

* Fixed bug [980744] Missing print setup on phone stops editor
  Cleaned up the print setup problem first seen in the v0.50 release.
  The fix is to trap a leaving function (iEikonEnv->NewDefaultPrintSetupL()) and use
  null, as the editor is designed to handle this optional feature.

* Partial fix for bug [1079304] "DemoOPL.mk modifies src folder" where the custom
  makefile was building the DemoIcon.mbm file incorrectly.

v1.52 19 June 04 ricka at users dot sourceforge dot net

* Partial solution for bug [910981] gFONT doesn't work on UIQ, picking up the 
  SwissA font in graphics windows for the beta release of OPL for UIQ.
  Added CONST KFontUiqSwissABeta&=&017B4B0D
* Corrected a build problem from the v1.51 for Series 60 OPL.APP, regarding
  included .mmpi files.
* Added details to the oplwrapper0 readme.txt file.
* Corrected some problems with opltest, the OPL test harness.
* Added tOpxVersionNumber.tpl which shows how to confirm your OPL app is using the 
  right OPX version.

* Changed the baseline of the source code to the CVS version - some minor differences
  in the cases of filenames - to improve CVS submissions.


OPL source zip

If you're new to CVS and just want to take a look at the OPL translator, runtime and OPX source code in C++, a zip file containing all the OPL source code for v1.55 is available. The readme.txt file in the root of the zip explains how to build the binaries.


Here are some screenshots of OPL development. Click on the thumbnail to see a larger image.

On a Nokia 92xx Communicator:

OPL development on 92xx thumbnail

Texted running on the P800:

OPL development on P800 thumbnail

More screenshots here.

Back to top

Back to opl-dev project homepage

SourceForge.net Logo Symbian logo