Native Ports Wrappers JEDI FreePascal About
About

This page maintains the list of software projects ported into the Object Pascal language. You can find here a wide variety of projects from a very simple ones, consisting of a dozens of lines, to a really big ones consisting of megabytes of source code. The main criteria for each project listed in here, is the existence of it's counterpart in another programming language. However, not all projects have the link to it's source project (the "original" collumn). So if you have knowledge of such a working link or if you want to add a new project, or correct something, please contact me.

If you like the idea of this page, I suggest you place the "listed on PasPorts" banner on your webpage. It would certainly help to promote this list to a wider Pascal community.

The list is subdivided into the four main groups. Native Ports, Wrappers, JEDI & FreePascal. You can find group description on each page. All these lists share a common classification as follows:
 

"Port Type" collumn classification:
Native Port - The highest level. This kind of work requires most effort, skills and knowledge. It is up to the author to solve translation of internal algorithms, but in function, the port must provide the same services as the original work. The result should be a native code, which just compiles and doesn't requires any external bindings to other code. Native port tends to be a highly portable and translated code should be well tested.
 
Direct Class Wrapper - Sophisticated binding method, providing in effect 100% the same object oriented programming interface and possibilities as the original work in original programming language. The result is a mix of ported native code, special bindings mechanism and classical elementary bindings. This kind of work, when keeping recommended practice, can be done quite mechanically and error free. The emphasis while testing is mainly on the special bindings mechanism and correctness of parameters translation.

Wrapper - Creative binding method. Resulting port can provide classes and methods, which doesn't exists in the original source code. Mostly, in port language there is a new class and a way of processing created, which finally elementary binds to the external code of original work. As a result, there is often a different API than in original, but also the opposite can be true. Wrapper code should be well tested.

Bindings - Elementary binding method. The whole work is to define the transition function prototypes, which are directly linked to the external code of the original work. Testing consists of checking the correctness of parameters translation. Bindings can be further implicit or explicit, depending on the time of linkage (compile & execution or run time).

In all above mentioned types of ports, data structures, types and constants have to be defined natively.

Type of external binding:
(In porting methods, where binding to external code takes place -> Wrappers & Bindings).

(DLL)  -   Dynamic Link Library on Windows.
 
(SO)  -  Shared Object in Linux.
 
(dylib)  -  Dynamic Library on Mac OS.
 
(embedded OBJ)  -  Compiled objects (.obj,.o,...) are directly embedded by the linker of the port language into the ported binary executable. This is the only method for wrappers and bindings, by which there can be created an executable without the need of linking to additional external code. This should seem to be a perfect porting solution, but there is a problem with portability. Also the size of the final binary code can be an issue, because this way the port language linker cannot strip unused function calls from the whole object files.
 
(Interfaces)  -  Run-Time binding to Microsoft's COM (Component Object Model). Applicable only on Windows platforms.
 
($linklib)  -  FreePascal's method of binding to libraries installed on Linux systems.
 
(syscall)  -  Special calling convention used in connection with Palm OS.
 
(.library)  -  Dynamic Library on Amiga OS.
 
(...)  -  Individual method of linking to external code. Getting pointer to some execution point from shared memory variable is example of this.
 

"Target" collumn classification:
W ... Windows

D ... DOS

L ... Linux

M ... Mac OS

P ... Palm OS

A ... Amiga OS

B ... BSD family OS

O ... OS/2

N ... Netware


Links to the articles dealing with porting to Object Pascal:
1. Creating Direct Class Wrapper for ICU library (Object Pascal Port)

2. Using C++ objects in Delphi

3. Using C object files in Delphi

4. Pitfalls of converting

5. Using C DLLs with Delphi (and HeadConv v4.20)

6. Creating bindings for C libraries

7. Translating C++ Code into Delphi Pascal

8. Converting C++ code to ObjectPascal

9. How to do header conversions

10. Pascal Header Translations - at CodeGear

[Native Ports]   [Wrappers]   [JEDI]   [FreePascal]  
2007 © Milan Marusinec alias Milano