2 ms·
.goc and .goh files was PC GEOS, not C64 GEOS. Here's a fragment: @method MyProcessClass, MSG_META_EXPOSED { GStateHandle gstate = GrCreat
by david-given 11y ago
.goc and .goh files was PC GEOS, not C64 GEOS.
Here's a fragment:
@method MyProcessClass, MSG_META_EXPOSED
{
GStateHandle gstate = GrCreateState(win);
GrBeginUpdate(gstate);
@call GameView::MV_REDRAW(win, gstate);
GrEndUpdate(gstate);
GrDestroyState(gstate);
}
The GOC files were preprocessed to produce very very manky C which was then compiled with Borland and linked with a custom linker. It was true OO with dynamic dispatch and a deeply strange system for allowing classes to have unspecified superclasses (that were then filled in at runtime programmatically). @call does a method call of MV_REDRAW on the object whose handle in GameView. (There was also @send which did an asynchronous call; if the object belonged to another thread a message would be sent rather than calling the code directly.)
- SwellJoe 11y agoThat actually sounds very clever. It looks dense, and I'm not able to make much sense of the actual code, but it seems like some very bright folks were behind GEOS (obviously so, since they built so much interesting software for such limited machines). I was fascinated by PC GEOS when it was new, but I was using an Amiga during the era when it was a thing. I only had a brief stint on PCs when Windows 95 came out, and then soon after moved to Linux as my primary OS (usually with a dual booting Windows partition for gaming). The fact that it had multitasking long before Windows, and on XT/AT class machines was pretty damned cool. There were moments where I considered going that route after my C128D, instead of getting an Amiga. Interestingly, there is still a company selling PC GEOS under the name Breadbox Ensemble, and their forum has posts from this year (not a lot of posts...but, still). I had no idea. It still looks about like it did in 1995. I am kinda baffled at who would still be buying and using this stuff...in a world with amazingly high quality Open Source tools to do everything GEOS ever did only better, and able to do it well on a very low powered machine (just like GEOS), it seems really strange to keep flogging that old horse.
- david-given 11y agoIt was clever --- far too clever, unfortunately. C and GOC was a bit of an afterthought; GEOS was originally programmed in object-oriented 8086 machine code, via a special assembler called ESP. GOC was a hack to make Borland produce all the same OO magic that ESP did. It was a reasonable object system, not actually that dissimilar from Objective C, but so, so proprietary. The implementation didn't just rely on the 8086 architecture, it was inextricably intertwined with it. It worked like PalmOS where memory was referred to by object handle. To access memory, you'd lock it, then you'd get back a pointer. Once you'd finished, you'd unlock it again. This let the GEOS kernel page in your memory from swap. What it actually did was assign one of your segment descriptors to point at the locked block, which you'd dereference with ds:[offset] or es:[offset]. Very elegant, and totally using the 8086 segment infrastructure the way it was intended to be used... good porting to anything else, however! Hey, I still have my old Geoworks SDK CD. (Which I scrounged free from someone. Useful tip: if you want your platform to be popular, don't make the SDK cost $1000.) I may have accidentally left the PDF of one of the manuals here. http://www.docdroid.net/vclb0s2/concepts.pdf.html http://www.docdroid.net/vclb0s2/concepts.pdf.html Totally ahead of its time. Totally doomed.