Links to historical Clarion/Topspeed articles & code samples so the knowledge isnt lost

Tags: #<Tag:0x00007f2254e09048> #<Tag:0x00007f2254e08f80>

A post with links to information related to the old topspeed components to see what still works and can be accessed today.

Modula 2
References to Topspeed modula-2 compiler for porting out something called XDS

TopSpeed-to-XDS Porting Notes Wayback Machine (

Modula-2 compilers for OS/2 (

EDM/2 - Modula-2 Legacy Code: Problems and Solutions (

Jensen and Partners International - EDM2 (

TopSpeed C - EDM2 (

TopSpeed TechKit - EDM2 (

TopSpeed C++ - EDM2 (

TopSpeed Pascal - EDM2 (

TopSpeed Modula-2 - EDM2 (

Cruising With Topspeed | Dr Dobb’s (

DOS ain’t dead - JPI TopSpeed (Pascal, Modula-2) (

The Clarion Insider (

Debug Techniques and IPC (

How to find GPF’s in your application (

TCP/IP name and address resolution (

Synchronous serial communications (

Clarion Debugger Internals (

Win32 Structured Exception Handling (

Version resources, part 1: Adding version information to an application (

Version resources, part 2: Getting version information from an application (

Using BoundsChecker with Clarion Applications (

32-bit Debug symbols and how to remove them (

Compilers - Appendix A (

Review: Clarion4 sounds a clear call for database deployment (InfoWorld) (

TopSpeed Legend - Clarion Software for Windows RAD, Database - Links, Tips for Clarion Programmers and Resources for Database Developers (
Suggests the Clarion pragma’s are actually ADA pragma’s because they are the definition of the language.

When did compilers start generating optimized code that runs faster than an average programmer’s assembly code? - Retrocomputing Stack Exchange

Bitwise Magazine:: Whatever Became Of Modula-2?

Walkthrough: Compile a C program on the command line | Microsoft Docs

Clarion, TopSpeed v3.10 (

Clarion, help CW2003-mod2 calling winapi from mod2 (

Computer Programming Language Forum - Clarion (

Computer Programming Language Forum - modula2 (

asm, args passed from C (doing this without the ARG directive) (

The Unofficial Clarion for Windows OOP Page (

1st ever web scrape
Icetips main web page (

Last Danish web scrape
Icetips main web page (

Last v1 web scrape
Icetips main web page (

1st v2 web scrape
Icetips News Network (

1st v3 web scrape
Icetips Software (

1st v4 web scrape
Clarion Templates, Classes and Tools from Icetips Creative, Inc. (

1st v5 web scrape
Clarion Templates, Classes and Tools from Icetips Creative, Inc. (

theKompany – Review of Clarion 4 from TopSpeed

Not available. Wayback Machine (


Internet Archive Joins Opposition to the “SMART Copyright Act” - Internet Archive Blogs

Clarion stuff could be slowly removed from the internet, FYI.

Your Clarion Insider links to are Russian translations of the originals here ->

XDS was (is?) an M2 compiler, that was a TS competitor back in the day

Yeah but what I noticed in this link
Wayback Machine (

it describes some of the differences between the two, eg

When an array is passed as a value parameter in TS, it can be either copied onto the stack or passed by reference, depending on the call(o_a_copy) pragma setting.

In TopSpeed, any entity imported into a definition module is “automatically” imported into the corresponding implementation module

Its a bit of detective work piecing together information, but its got information on Topspeed Modula2 which is why I posted it as it might be useful.

I didnt know that, I can see from some of the links I posted, I was very much out of the loop, I didnt even know there was a forum on compuserve.

Hi Richard,

There some links in these files

Project presented here Multi-Language programming example

You’ve been busy! :grinning:

I’m experimenting with the templates at the moment to see how far I can push them and to see what they do.

I’m intrigued by the #Module(%blah,‘text’,‘External’,’.fileExt’), it gave me an idea that I might be able to call an external compiler, either with a #rundll or #Run. I’m wondering if I could get the templates to produce say some python code but also I want to see how much work is involved in doing some template framework to produce and compiler code for other platforms, like Android or iOS or Linux. Basically exploring just how versatile these templates can be.

Provided by Dave Nichols on his zd_fast.a memory allocator,
which also references:

He kept that quiet!

(* Only to call procedures using the clarion calling convention, do not use
with procedures using C / PASCAL calling convention (or adapt) *)

Is this comment for cleanup or the ways its passed on the stack?

I think Generation is one stage, and Compiling is another, it seems you are trying to mix them.
There is BuildAutomator from Icetips.

Regarding the second part, actually Dave Nichols presented his Memory Allocator on Clarion 9 & 10 newsgroups on December 2015, and donated it to the community, then Brahn reposted some parts here A wrapper class for "Faster memory allocator"

About calling by address and the technique used, it relies on some assumptions to work. It justs passes the control to the address on the first parameter, so the called funtion receives one extra parameter that has to ignore. On return is gets back directly to the original caller. They have five LONG parameters, which as with Clarion calling convention, four are passed on the registers and one on the stack

Yeah I’m deciphering the exp and map files at the moment, but I’m also trying to work out what the project system is supposed to do, because it doesnt produce an exp file from what I can tell.

OBJ files found in
C6: %Root%\obj32
C6: %Root%\obj32\release

I can only find these two .obj files in C11 so I’m wondering if the compiler is doing something different at this stage, maybe cleaning up after compilation or maybe a different format suitable for dotnet.


OBJ look like they are using this
Relocatable Object Module Format - Wikipedia
Object file - Wikipedia

OMF_v1.1.pdf (

1 byte Record type, for example relocation information
2 bytes Data length (N+1)
N bytes Data (varies depending on the record type)
1 byte Checksum or 0

There is a wide variety of record types because of consolidation of OMF variants from several vendors, and because of adding such features
as 32-bit code and dynamic linking. These are important record types:

COMENT - (88h) Comment, which may also contain control information.
EXTDEF - (8Ch) Defines external references
PUBDEF - (90h/91h) Identifies external symbols in this module
SEGDEF - (98h/99h) Identifies segments
GRPDEF - (9Ah) Identifies groups of segments, for example MS-DOS DGROUP
FIXUPP - (9Ch/9Dh) Fixup or relocation records
LEDATA - (A0h/A1h) Contains text of a code or data section
COMDEF - (B0h) Uninitialized common data
COMDAT - (C2h/C3h) Initialized common data
MODEND - (8Ah/8Bh) Indicates end of module

Oracle has something similar for Solaris, there will be differences, but the principles will also be similar.
File Format - Linker and Libraries Guide (

Windows Portable Executable File Format
PE Format - Win32 apps | Microsoft Docs

Inside Windows: Win32 Portable Executable File Format in Detail | Microsoft Docs

The C6 project file makes a reference to
#pragma optimize(cpu=>386)
which is probably going to match this
`IMAGE_FILE_MACHINE_I386 0x14c Intel 386 or later processors and compatible processors

I think it will be possible to debug an exe file and tie up the different parts of the exe to the MS windows PE format. I think it might be interesting to see if there is anything non windows left in from the Topspeed days like maybe something of OS/2 perhaps?, there again that might only be seen in CW1.5, but I’ll have to have a look.

This ties in to the C7+ Pragma What does CUI mean in the export file?
IMAGE_SUBSYSTEM_WINDOWS_CUI 3 The Windows character subsystem

EXP files are for DLLs only.

No … The EXPORTS section of EXP files are for DLLs only and is the most common use of the file (although I think I have read that an EXE can have an Exports table and could in theory be LoadLibrary like a DLL).

The EXP file is like a Linker configuration file for EXE and DLLs. E.g. an EXE must have a DYNAMIC_BASE line to turn On ASLR for the Process, and a DEP line to turn On Data Execution Prevention. An EXE made from an APP should see small EXP like: NAME 'SCHOOL' GUI, for a CwProj they are hand coded.

Apologies Carl, you are correct.