This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (May 2018) (Learn how and when to remove this template message) This article's lead section may be too short to adequately summarize the key points. Please consider expanding the lead to provide an accessible overview of all important aspects of the article. (January 2021) (Learn how and when to remove this template message)

Open Programming Language (OPL)
Paradigmsimperative, structured, embedded
Designed byColly Myers, Richard Harrison, Martin Stamp
DevelopersPsion Ltd
opl-dev project
First appeared1984; 39 years ago (1984)
Stable release
1.56 / 17 June 2006; 17 years ago (2006-06-17)
Typing disciplineStatic, strong
OSEPOC, Symbian OS, Psion Organiser
LicenseGNU Lesser Public License[1]

Open Programming Language (OPL) is a programming language for embedded systems and mobile devices that run the operating systems EPOC and Symbian. It was released by the British company Psion in 1984.


Originally designed for use on their classic Psion PDAs such as the Series 3, 5/5mx, Series 7, and netBook–netPad, and the Psion produced MC218, OPL was provided as part of the standard application suite. It can also be installed on the Nokia 9200, 9300 and 9500 Communicator series mobile telephone and personal digital assistant (PDA) and the Sony Ericsson P800, P900, P910 series. OPL is also included in Psion Teklogix industrial handhelds such as the Workabout mx, and it also appeared in the lesser known Oregon 'Osaris' organiser, a broadly compatible EPOC32 device that uniquely used version 4 of the OS. OPL is an interpreted language similar to BASIC. A fully Visual Basic-compatible language OVAL has also been developed.


The language was originally named Organiser Programming Language, developed by Psion Ltd for the Psion Organiser. Designed by Colly Myers with the first iteration implemented by Richard Harrison and Martin Stamp. The first implementation (without graphics) was for the original Psion Organiser (now referred to as the Psion Organiser I, 1984), and it came bundled with the Science, Finance and Math data packs. It became truly accessible as built-in software in the Psion Organiser II (1986), and the language went on to be used in the Psion Series 3 and later. After Psion retired from the personal digital assistant market, a project aiming to bring OPL to Symbian came to fruition, when the fledgling Symbian Developer Program released it as open-source software. The language is now available on SourceForge in a project named opl-dev.

The language is currently unavailable for Symbian OS v8 and later. With the subsequent retirement of the Symbian OS, it seems unlikely OPL will be made available for later generations of Symbian devices. As of 2010, Nokia device developers were encouraged to use Python for S60 instead (See Python for S60).[citation needed]


Here is the console version of a "Hello, World!" program:

PROC main:
  PRINT "Hello World!"
  PAUSE 40

(Source code taken from the PCDevPrimer in the OPL Wiki.)

And here is a GUI version for Nokia's Series 80 user interface:

CONST KKeyEnter%=13

PROC hello:
  dINIT "Hello"
  dTEXT "","Hello World!"
  dBUTTONS "OK",KKeyEnter%

OPL is a structured programming language. OPL programs contain PROCedures, which are much like functions (subroutines) in other programming languages.

Testing dialog responses

An example:

 PROC test:
   dINIT "Your Challenge"
   dTEXT "","Will your answer to this question be no?"
   dBUTTONS "Yes",%y,"No",%n
      PRINT "No it wasn't!"
      PRINT "Yes it was!"

In this cruel interrogative program, the Yes button is assigned the shortcut of Ctrl+y, while No has Ctrl+n, represented by %y and %n respectively. The user's input from the DIALOG is tested in the IF statement, PRINTing appropriate responses to the screen. Note that the 'GET' keyword, which gets user input without using a dialog box, is here used simply to wait for a keypress before terminating the program (otherwise it would end immediately without giving time for the user to read the text). The output from DIALOG can also be stored in a variable.

Variables specific to a procedure must be declared with the LOCAL keyword; global variables are defined with the GLOBAL keyword.

Variable types

The table below uses an example variable named var.

Data type Syntax
Floating point var
Integer var%
Long integer var&
String var$(length)


OPL interfaced with advanced Psion Series 3 features by means of operating system CALLs, but in the later Psion Series 5mx this was changed to a so-called OPX library, stored in the system read-only memory (ROM), termed the Z drive. 'OPX' libraries were also made available for the Nokia 9210, Nokia 9300 and Nokia 9500 Communicators, adding OPXs routines for handling Short Message Service (SMS) and managing Bluetooth communication.

Other OPL features include those starting with a letter: g for graphical functions, m for menus, and d for dialogs.

See also