Infinitely annoying that in char *foo[100] foo is 100 pointers to chars, but in char (*foo)[100] foo is a pointer to 100 chars. 🤬

#c #cdecl

REPOST (JAN 2024): My first thoughts on #Psion's dialect of Object Oriented C for the Series 3 and related portable computers.

Includes the JPI/Clarion #TopSpeed #compiler, a proprietary preprocessor, the Eiffel programming language, and a handful of calling conventions.

Also, did somebody say Objective-C?

This is an old blog post from the beginning of the year. If you've been following my journey in recreating #CTRAN, this was written a week before I decided to take the plunge.

https://hackaday.io/project/161291-the-last-psion/log/226441-beginning-olib-an-entirely-uneducated-look-at-psions-proprietary-object-oriented-c

(Yes, I did say in the article that I definitely wouldn't be writing a compiler. I did say that.)

#RetroComputing #EPOC16 #CDECL #Clarion #TopSpeed #TopSpeedC #RetroProgramming #RetroDev #Smalltalk #ObjectPascal #preprocessor #Eiffel #OOP #ObjectiveC #compilers #ObjectOriented

Beginning OLIB: An entirely uneducated look at Psion's proprietary Object Oriented C | Details | Hackaday.io

<blockquote><strong>Me: </strong>I could do with a quick win to get me going again.<br><br> <strong>Also me: </strong>I shall learn a proprietary object oriented dialect of C, where the only way to learn it is to plough through 1150 pages of documentation.</blockquote> <p>Psion doesn't have a formal name for the object oriented version of C that it created for EPOC16. I've been calling it "Psion OO C", but the main library that it uses is called <strong>OLIB</strong>, which contains the root class. The others are:</p> <ul><li><strong>HWIM: </strong>The OO graphics library</li><li><strong>FORM: </strong>On-screen formatting </li><li><strong>XADD: </strong>Additional graphics library for 3a onwards (but not the Series 3 "classic")</li></ul> <p>To Psion's credit, their OO ecosystem is well documented in the SIBO C SDK across 5 books (hence the 1150 pages mentioned above). Each of the libraries has its own, dedicated book. There's also an "Object Oriented Programming Guide" which acts as an introduction to the whole ecosystem. I don't have the latest versions of all of these books - they seem to be lost to time. But I have all the 3 and 3a features documented, plus (I think) all of the 3c/Siena extensions. (3mx-era EPOC16 remains sadly undocumented.)</p> <p>What's nice about Psion's approach to OO is that they assume no prior

I still have trouble with this part of #C 😥 – which is why I like the solution in #Go (https://go.dev/blog/declaration-syntax):

“Reading C Type Declarations” [2003], Steve Friedl (http://www.unixwiz.net/techtips/reading-cdecl.html).

Via HN: https://news.ycombinator.com/item?id=40387812

#Programming #CProgramming #CDecl

Go's Declaration Syntax - The Go Programming Language

Why Go's declaration syntax doesn't look like, and is much simpler than, C's.

ICYMI: My first thoughts on #Psion's dialect of Object Oriented C for the Series 3 and related portable computers.

Includes the JPI/Clarion TopSpeed compiler, a proprietary preprocessor, the Eiffel programming language, and a handful of calling conventions.

Also, did somebody say Objective-C?

https://hackaday.io/project/161291-the-last-psion/log/226441-beginning-olib-an-entirely-uneducated-look-at-psions-proprietary-object-oriented-c

#RetroComputing #EPOC16 #CDECL #Clarion #TopSpeed #TopSpeedC #RetroProgramming #RetroDev #Smalltalk #ObjectPascal #preprocessor #Eiffel #OOP #ObjectiveC

Beginning OLIB: An entirely uneducated look at Psion's proprietary Object Oriented C | Details | Hackaday.io

<blockquote><strong>Me: </strong>I could do with a quick win to get me going again.<br><br> <strong>Also me: </strong>I shall learn a proprietary object oriented dialect of C, where the only way to learn it is to plough through 1150 pages of documentation.</blockquote> <p>Psion doesn't have a formal name for the object oriented version of C that it created for EPOC16. I've been calling it "Psion OO C", but the main library that it uses is called <strong>OLIB</strong>, which contains the root class. The others are:</p> <ul><li><strong>HWIM: </strong>The OO graphics library</li><li><strong>FORM: </strong>On-screen formatting </li><li><strong>XADD: </strong>Additional graphics library for 3a onwards (but not the Series 3 "classic")</li></ul> <p>To Psion's credit, their OO ecosystem is well documented in the SIBO C SDK across 5 books (hence the 1150 pages mentioned above). Each of the libraries has its own, dedicated book. There's also an "Object Oriented Programming Guide" which acts as an introduction to the whole ecosystem. I don't have the latest versions of all of these books - they seem to be lost to time. But I have all the 3 and 3a features documented, plus (I think) all of the 3c/Siena extensions. (3mx-era EPOC16 remains sadly undocumented.)</p> <p>What's nice about Psion's approach to OO is that they assume no prior

Looking through some #Psion C code, I've seen `CDECL` a few times. Being a noob, I didn't know what they were or why they were there.

So, looking at Wikipedia...

#CDECL is a "caller clean-up" calling convention using the stack. This is pretty common in the x86 world, but is explicitly mentioned in Psion code. Why?

#TopSpeed C uses its own "callee clean-up" calling convention, using registers for the first 4 int parameters, which #EPOC16 really likes.

https://en.wikipedia.org/wiki/X86_calling_conventions

#RetroComputing

x86 calling conventions - Wikipedia