Skip to content
Oberon family of languages to C translator for ARM, x64 and x86 architectures
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
Arch + Arch/voc-master/Heap.Mod May 30, 2018
Bin * Bin/OfrontPlus*.lst Jun 23, 2019
Bin64 * Bin64/.gitignore Mar 13, 2019
Docu + Docu/crelier_r.op2_a_portable_oberon_2_compiler.en.pdf May 25, 2019
Examples * Lib/Graph: SDL.Init can fail. May 9, 2019
Lib * Lib/SYSTEM.*: / compatibility with Clang. Jul 11, 2019
Linux_x64 * Linux_*/Examples/ReadMe.txt Jun 23, 2019
Linux_x86 * Linux_*/Examples/ReadMe.txt Jun 23, 2019
Mod / issue #66: Implement the abbreviated dereferencing for Component Pa… Jul 19, 2019
Obj * ImportGraph: adapted for Linux. May 25, 2019
Obj64 * ImportGraph: adapted for Linux. May 25, 2019
Rsrc / issue #55: + warning 303 "GPCP extension used". Jun 16, 2019
Sym * .gitignore Mar 1, 2018
Sym64 * .gitignore Mar 1, 2018
+GraphViz.bat * ImportGraph: + option "r". May 25, 2019
+Text.bat * OfrontOPS.Mod synchronized with OPS.odc Mar 18, 2019
.gitignore * Linux_x64/x86: rebuild. Jun 2, 2019
License.txt * License.txt Aug 4, 2016
QuickStart.txt * QuickStart.txt Jan 17, 2018
Readme.txt * Readme.txt Jun 23, 2019



is a tool that translates Oberon-2 programs into semantically equivalent C programs. Full error analysis is performed on the Oberon input program and in case of no errors up to three files are generated as output.

Ofront+ does not invoke the C compiler or linkage editor. This may be done in separate shell scripts or make files and is inherently dependent on the C compiler and linkage editor being used.

Although normally not read by the user, the C code generated by Ofront+ is kept as readable as possible, nicely formatted, should not produce any C compiler error messages or warnings and is tuned for efficient execution. In fact, an Oberon program translated by Ofront+ can be expected to execute as fast and read as well as an equivalent hand-coded C program.

Ofront+ is based on Ofront by Josef Templ, but some of Component Pascal features was added (IN parameters, BITS(int) & ORD(set), arithmetic type BYTE, etc). It also contains the extra extensions, such as constant arrays (implemented by Oleg Komlev).


Directory structure

/Bin       - Ofront+ for Windows x86 (x32)
/Bin64     - Ofront+ for Windows x64
/Docu      - Some documentation
/Linux_arm - Ofront+ for Linux ARM
/Linux_x64 - Ofront+ for Linux x64
/Linux_x86 - Ofront+ for Linux x86
/Examples of programs written in Oberon
/Lib/Bin   - Scripts for build (lib)Ofront.a
/Lib/Mod   - Sources of the library
/Lib/Sym   - Library symbol files
/Lib/Obj   - The library object files
/Lib/Obj64 - The library object files (x64)
/Lib/Sym   - The library symbol files
/Lib/Sym64 - The library symbol files (x64)
/Mod       - Sources of the translator/tools
/Obj       - The working directory for object files
/Obj64     - The working directory for object files (x64)
/Sym       - Ofront+ symbol files
/Sym64     - Ofront+ symbol files (x64)

To (re)build the static library (lib)Ofront that is required for the translator and all examples, go to the proper directory /Lib/Bin and run build(.bat)

To (re)build the translator itself, go to the proper directory /Bin and run build(.bat)

To (re)build the examples, go to the proper directory /Examples and run build(.bat)
You'll need to install the additional packages (.dll for Windows)
For more details on examples, read the proper /Examples/ReadMe.txt

Ofront+ differences from Ofront/voc

  1. New experimental dialect Oberon-3 (based on Oberon-07, Component Pascal & other).

  2. Outputs a module name and position for any runtime error, HALT and ASSERT.

  3. New SYSTEM types: INT8, INT16, INT32, INT64, ADRINT.

  4. Allows arithmetic operations with the type BYTE (Oberon-3 & Component Pascal).

  5. Allows the unlimited length of constant strings (in Ofront/voc the maximum is 255 characters).

  6. Allows SYSTEM.VAL(INTEGER, {80000000H..0FFFFFFFFH}) as a constant of 32-bit type (otherwise 64-bit).

  7. ASH and SYSTEM.LSH return the INTEGER type result for INTEGER type argument, and LONGINT type result for LONGINT argument. It allows to use shifts without using 64-bit type.

  8. Support "_" in identifiers.

  9. Ofront+ for Windows works under Windows 9x. Ofront+ for Linux supports both 32 and 64 bits.

  10. Support UTF-8 encoded sources (with or without BOM) with EOL as 0DX (Oberon System), 0AX (UNIX/Linux) & 0DX+0AX (Windows).

  11. "Correct FOR" available in Oberon-3 (concept and implementation by Oleg Komlev).

  12. Constant arrays available in Oberon-3 (yet only in Ofront+ for BlackBox).

  13. BITS(), ORD(set), LEN(string$), str1 := str2$, IN procedure parameters (in Component Pascal).

  14. ORD(bool), ORD(set) supported in Oberon-3.

  15. Arithmetic operations DIV0 and REM0 for integers, as in GPCP.

  16. SYSTEM flags: VAR [nil], ARRAY/RECORD [untagged], POINTER [untagged] as in BlackBox.

  17. Advanced features for describing bindings to foreign libraries, system flag [stdcall].

  18. It's possible to use modules written in Oberon, Oberon-2, Component Pascal & Oberon-3 together in one project.

  19. Tested with GCC/MinGW, Intel C++, SDCC and even Borland Turbo C.

Get it!

Here are two versions:

  1. Ofront+ for Windows & Linux command line

  2. Ofront+ for BlackBox Component Builder (runs as a subsystem)

You can download it at

Ofront+ now is in active development and we provide free support of the project.

To discuss and ask questions, you can subscribe to the group:

or join the forum:

Your comments and suggestions are welcome.

Ofront+ team,
You can’t perform that action at this time.