GS/OS Applications

Don’t Fret
Don’t Fret (1996–1998)
Don’t Fret is a program to display chords and scales (25 of them) for stringed instruments. Features include support for custom tunings and string counts, so it can be used with banjos, ukeleles, dulcimers, violins, guitars, et cetera.
GShisen (1998-2000)
My take on Shisen Sho aka Four Rivers. A deceptively simple tile-matching game; remove all 32 tiles as quickly as possible. The limited colors, resolution, and tile size meant that doing the tile artwork was one of the hardest parts of this game. It was written in a combination of C and 65816 assembly for some speed-critical parts.
Printer Dumper (1998)
This was a quick and dirty little application to send a file straight to a printer. Presumably the file would be something the printer could handle (HP PCL, PostScript, et cetera).

Twilight II Modules

Bubbles (1997)
A Twilight II module which draws bubbles or squares. This was the second T2 screensaver I wrote, and probably my favorite. The effect is based on a small demo program I found in the AOL file libraries in the early/mid 90s.
InkBlot (2004)
A Twilight II module which draws inkblot-like designs.

GNO/ME Utilities

blist (1997)
List an AppleSoft BASIC file. Works with orca or gno/me. I didn’t have any documentation on how AppleSoft tokenized the files on disk, so I had to hexdump a lot of test files until I had all the tokens documented. Some of the code is recycled in the Babelfish translator below.
peek (June, August 1997)
Show the SHR screen from GNO or ORCA shell. Not terribly exciting.
rlist (1997)
List the resources in a IIgs or Macintosh resource fork. Works with orca or gno/me. The information on Macintosh resources came from the Macintosh Toolbox books (which my library amazingly had!).
scrappy (1997)
Copy or paste text to or from the IIgs clipboard. Requires gno/me.
shir (March 1997)
Shell Interface for IR, IR being Apple's Init Restarter utility to install system files on the fly. IR allowed you to install system files from gno or orca shells. It’s pretty straightforward — or would be if not for a bug with the _ShowBootInfo tool call which caused crashes. I had to patch the toolbox and replace the call.
Marignotti (2012)
GS/TCP was a BSD socket implementation, so it needed to be in the GNO/ME kernel. However, it couldn't be in the kernel for financial reasons — it was going to be a separate (commercial) product. The solution was a new kernel call (InstallNetDriver) which installed a function pointer. Anytime the kernel needed to do something with a socket (open, read, write, et cetera), it would ask the net driver to take care of it. Marignotti is a net driver that uses Marinetti to provide TCP functionality. Also included in the package are updated versions of ftp and whois, plus a simple IRC client.
gopher (2012)
A gopher client for GNO/ME. Actually, it was intended to be a lightweight version of CURL, so it also supports HTTP. I even started working on SMB support. Maybe someday.

Finder™ Extras

AddMessage (1997)
Adds the selected icons to the Message Center. The Macintosh Finder allowed you to drag and drop a file onto an application to open the file with that app (instead of using the default application). With AddMessage, you could get the same functionality — select a file, AddMessage, then launch whatever program you wanted. The most interesting part of this program is this comment in addmsg.rez: “Silly Rabbit, PIFs are for kids!” Well, it seemed funny to me.
GnoP8 (March 1997)
Prevents Finder™ from launching ProDOS 8 applications while GNO/ME is active, which would cause a crash. Now that GNO/ME is open source, I should probably add this functionality to the gno kernel proper.
Lilan (1998)
Finder™ Extra to quickly launch the 10 most recent applications. The Macintosh Finder had a folder with aliases to the most recently launched applications. This was a clone of that idea, and one of my favorite (and most useful) programs. The first version only kept track of 5, but I found that to be too limiting. “Lilan” nominally meant “List It Like A Nerd”, but it was actually named for something (someone) else.


ifconfig (2003?)
A commandline utility to connect/disconnect Marinetti. Requires a shell such as GNO/ME or ORCA.
Marlene (2000-2004?)
Marlene is a 4-color vt100 telnet client. Instead of using the (single color) text screen for displaying text, it uses a 640-mode super hires character generator, which allows it to use 4 distinct colors. The character set is copied from the text generator characters, but slightly narrower. This started out as an entirely different concept (darlene), but I refactored it for vt100 and telnet use. Requires a shell such as GNO/ME or Orca.
QServer NDA (2004)
A Quote of the Day server. Requires Marinetti. This was mostly written as a demonstration/proof of concept for a TCP server and to test the queueing capability for handling multiple requests/connections simultaneously.
TCP Snooper CDA (2004)
A Classic Desk Accessory, displays information about active TCP connections. Requires Marinetti. I originally tried using the GS/OS console driver for text output (one of the IIgs technotes recommends it), however that was a problematic, so I switched to using the TextTools.
Silver Platter
The first (and only) IIgs NDA HTTP server. Supports HTTP .9–1.1. Formerly a commercial product sold by Syndicomm. As of 10/1/2011 I have reclassified it as freeware (Syndicomm still sells a disk version which might include documentation). I also have a page with more details here.


Apple 8/16 Font (2005)
This is a windows bitmap font of the Apple II ROM character set, including mouse codes. Being a bitmap font, it only is useful for graphic applications.
Babelfish AppleSoft BASIC translator (1998)
Converts AppleSoft BASIC files into text. Requires Babelfish. I recycled the blist code (above) into this work of art. Babelfish (a universal text/graphic converter) was a good idea, but it didn’t really catch on.
Deterministic Finite Automata (DFA) library (fall 2004)
This is a tool for creating a simple DFA table and a function to do string matching. The DFA is case insensitive and doesn't support regular expressions. The dfa compiler tool can output the table as a binary file, a linkable OMF file, or c/asm code.
PNG Floyd CDA (winter 2004/2005)
PNG Floyd saves a super hi-res screenshot…as a PNG graphic. Although the PNG file format is well documented and standardized, the compression (deflate) is not nearly as nice — the RFC suggests looking at the source code for zlib, which is an amazing mess. I spent a fair amount of time looking at file dumps of small png graphics to get a handle on how the compression was working, and then used a perl script to verify my compression output could be decompressed. For compression, I only did a 1-byte run length encoding, and I only compress one line of the image at a time, so recompressing would be a good idea. Supporting multi-byte RLE could help the compression, as would using 4-bit graphics (if 16 colors or less).
Wait Control
WaitCtrl Control Definition (2004)
Draws a “rotating barbershop” pole to signify an operation with an indeterminate end time Includes a sample NDA which shows how to use it. This was originally written as an offshoot of a dict NDA I was writing. That work was abandoned after another dict client was released.
Dragon Words CDA (Summer 2015)
So you're playing Dragon Wars and it tells you to read paragraph 38. You can either dig through your book to find it (or, perhaps search through a PDF to find it) or you can drop into this desk accessory. Data is stored in the resource fork (as a binary blob) with an index for fast lookups. Additionally, text is fully justified (thanks to some pre-processing with the par utility).


Patches to ORCA compilers.


Java utilities of interest to Apple II users

In 2006 or so, I worked on some Java utilities for managing OMF files. This included an incomplete linker and an even more incomplete assembler.


© 2004–2013 Kelvin W Sherlock