A Blueprint for Creating FLOSS-Safe Replacements for BWCC.DLL Stock Icons

TL;DR: Here’s a detailed description that should be sufficient to design knock-offs of the most iconic of Borland OWL’s stock icons for use Windows 3.1 hobby projects intended to be compiled with non-Borland compilers.

In the name making my planned retro-hobbyist programming projects both as easy as possible for me to write and as authentic-feeling as legally possible, I’ve been trying to collect period resources and tooling. However, I still want them to be open-source things that can be built using only legally free tooling.

(For example, while I intend to offer an older version of InnoSetup as the primary means of installation, “InstallShield” is a trademark and “setup is preparing the InstallShield wizard” was an iconic part of the Windows 9x era, so I took advantage of an opportunity to cheaply acquire a still-sealed New Old Stock copy of InstallShield Express 2.01 so users can choose between freedom and authenticity.)

This presents a problem when it comes to the stock icons from Borland’s BWCC.DLL which everyone remembers from the 16-bit Windows era. They’re an essential part of my childhood nostalgia, but I want people to be able to legally build and distribute my retro-projects using only OpenWatcom C/C++ or Free Pascal.

As such, I’ve decided to put together a description of said icons, suitable for designing from-scratch replacements which capture the same aesthetic and, in some cases, improve on the originals.

Here are the icons that I consider to be worth re-creating, in order from most to least desirable:

  1. OK/Yes (It’s used in the most places and has a very nice aesthetic.)
  2. Cancel (Probably the most used after OK/Cancel, also has a very nice aesthetic.)
  3. Help (It fits with the aesthetic of the other three.)
  4. Abort (I remember encountering this and it’s aged reasonably well for what it is. That said, it’s certainly a more complex thing to describe and draw than the “No” icon.)
  5. No (The iconography feels less elegant and it’s only strictly necessary if you need to have Cancel and No in the same dialog, given that the checkmark already does double duty as OK/Yes and the X for “Cancel” would really do better as “No”.)

Given that BWCCMessageBox takes the same arguments as MessageBox from the 16-bit Windows API, the following other icons also exist, but I don’t consider them iconic enough to justify the effort to put together detailed descriptions without some sign that they’ll actually see use:

  • Retry (A yellow slot machine where the handle pulls and the wheels take on different positions when the mouse button is held down.)
  • Ignore (A black-on-white speed limit sign where the numbers change from 55 to when the mouse button is held.)
  • MB_ICONINFORMATION / MB_ICONASTERISK (Either a blue lowercase, serif “i” in a speech balloon or a large, yellow, 3D, rounded exclamation mark with dithered shading, depending on context.)
  • MB_ICONQUESTION (A blue question mark in a speech balloon or possibly something else depending on context.)
  • MB_ICONSTOP / MB_ICONERROR / MB_ICONHAND (A white X inside a red circle or, if my memory is correct, a white hand inside a red stop-sign octagon depending on context.)

(I’m unsure whether the “depending on context” is a matter of which GUI widgets they’re requested for or which version of Borland OWL they were build against.)

That said, if you’re in a creative mood, feel free to try to come up with your own replacements that one-up Borland’s originals in sticking to a consistent aesthetic.

Release Considerations

First, in order to make it clear that you were working from these descriptions, please reference this post when you share your icons. This is for your benefit, since it will reassure potential users as to the legality of your icons if you re-create the Borland aesthetic too well.

Second, as the original icons were embedded within  BWCC.DLL, users of these icons are likely to also want to embed them in their own code. For them to do this, you need to release them under a license that won’t conflict with whatever license they choose.

I advise either the MIT or Creative Commons Attribution 4.0 license or both (both would be best). Given the following concerns, that would be most in line with the spirit of creating a free replacement for proprietary resources:

  1. The proprietary versions aren’t sold anymore… so people who don’t want to GPL can’t just buy the paid originals instead.
  2. The only people who target Windows 3.1 anymore are hobbyists and you’re unlikely to see anyone who cares so much about authenticity that they’ll either pay you or change their mind about how they want to license their creation.
  3. Retro City Rampage for DOS and Windows 3.1 is a personal programming challenge that got offered as a bonus to buyers of the modern copy because the tools to legally offer such a thing were free for commercial projects. The same is likely to be true for anything your license choice affects.

That said, if you choose to use a copyleft license, bear in mind that choosing something like the GPL or CC-BY-SA rather than the MPL 2.0 will likely result in people bundling a period-inappropriate folder full of unpacked .ico files with their application (possibly with a bundle of token alternative icons) rather than a .dll and no other change.

Copyleft licenses only extend to derivative works and a program isn’t legally a derivative work of your icons if the program works perfectly well without them and they can be trivially swapped out. (That’s why game engine re-creations like ScummVM are legal and why it’s legal to put GPLed stuff and closed-source freeware on the same shovelware CD.)

Icon Specs

Common Characteristics

  • Icon Size: Either 23px or 26px
  • Color Palette: Default EGA 16-color palette
  • Shading: Flat, using a three-color scheme: An EGA low-intensity color for the body, its high-intensity counterpart for the lit portions of the edge, and black for the portions of the edge in shadow.
  • Border: 1px, with the diagonal portions using a stairstep pattern which makes them appear heavier.
  • Lighting: Lit from above and to the left.
  • Drop Shadow: 2px down and to the right of the icon, in the low-intensity counterpart to the standard Windows button background color… but not to be drawn as part of the icon itself. (It moves independently when the button is pressed down to give the illusion that the icon is floating over the button, so it may be OWL generating it at runtime using the icon’s transparency mask.)
  • Aesthetic: The icons which best embody the desired aesthetic evoke a sense of being pixel-art recreations of calligraphy done with an extra-broad italic nib. (Example)

OK/Yes Icon

The icon used for stock OK and Yes buttons is a green checkmark, with an outline almost identical to the Liberation Serif glyph for the U+2714 HEAVY CHECK MARK codepoint. The original icon is 23px wide by 23px tall.

For easy reference, the EGA greens are #00AA00 and #55FF55 according to Wikipedia.

The hook of the checkmark is perfectly vertical, but with a slight curve on the top-left corner and a larger, shallower curve on the bottom-left corner.

The tail of the checkmark runs at a perfect 45° angle toward the top-right, with the top edge being perfectly straight 45° line, while the bottom edge appears to have a nick in it about 2/3rds of the way up, as it transitions from the width at the bottom to the width at the top.

The hook appears to be one pixel thicker than the tail and the tail ends in a perfectly vertical line, giving the “calligraphy pen with an extra-wide italic nib” effect.

The line appears to range from 3 to 4 pixels thick.

Cancel Icon

The Cancel icon is a red X similar to the Liberation Serif glyph for the U+2718 HEAVY BALLOT X codepoint but with the ends of the strokes being straight, rather than mimicking the output of a marker with a crenellated tip. The original icon is 20px wide by 23px tall.

For easy reference, the EGA reds are #AA0000 and #FF5555 according to Wikipedia.

It takes the form of two perpendicular strokes, running diagonally at approximately 45°.

The stroke from the top-left to the bottom-right curves upward very slightly over its length, and the stroke from the bottom-left to the top-right curves downward very slightly over its length.

Both strokes have square ends on the right side and are slightly curved on their upper corners on their left ends. Both strokes are approximately 4 pixels thick and have the same “calligraphy pen with an extra-wide italic nib” feel to them as with the checkmark.

Help Icon

The help icon is a cyan question mark. The original icon is 15px wide by 26px tall.

For easy reference, the EGA cyans are #00AAAA and #55FFFF according to Wikipedia.

Unlike the other two icons, it appears to have been drawn with a fine-pointed calligraphy brush, rather than a calligraphy pen, being composed of a round dot and a line with a rounded top end and a tail at the bottom end of the curl, characteristic of moving such a calligraphy brush off to the side as it is being lifted.

It gives the impression that its vertical centre line leans somewhere between 5° and 10° right of centre, and the shape of the question mark’s hook gives the impression that this might have been accomplished by taking a more ordinary question mark’s outline and pulling the right-hand edge of the question mark one part rightward and two or three parts upward.

When viewed without magnification, the tail at the bottom of the primary stroke appears to exit at roughly 45° down and to the left, but closer inspection reveals that this impression is partly due to the shadow and the icon actually extends the mid-point of the stroke’s bottom end straight rightward, and then curves the opposing edge of the stroke outward to meet it.

No Icon

The icon for stock No buttons is the ISO 3864-1 prohibition sign (U+1F6AB NO ENTRY SIGN or U+1F6C7 PROHIBITED SIGN). The original icon is 26px wide by 26px tall.

It is rendered in the same EGA reds as the Cancel icon (#AA0000 and #FF5555) with a stroke width matching or perhaps slightly thinner than the thinnest part of the checkmark.

Take note, the stroke within the circle runs from the top-left to the bottom-right. Some fonts will get this reversed for at least one of the two codepoints.

Stylistically, I think the mechanical precision of this icon’s design feels bland and the thinner lines reinforce the impression that it was a lazy effort. I would welcome efforts to design an alternative which feels more in line with the calligraphic style used for OK/Yes and Cancel.

Abort Icon

The icon for stock Abort buttons is an undithered EGA-palette drawing of a cylindrical red pushbutton set into a silver collar. Its proportions resemble a DS-426, model 6054 though it may be a pixel or two more squat. It is rendered in what is probably an oblique perspective, which makes it appear to be rising directly toward the light source.

CC BY-SA 4.0 A Blueprint for Creating FLOSS-Safe Replacements for BWCC.DLL Stock Icons by Stephan Sokolow is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

This entry was posted in Retrocomputing. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

By submitting a comment here you grant this site a perpetual license to reproduce your words and name/web site in attribution under the same terms as the associated post.

All comments are moderated. If your comment is generic enough to apply to any post, it will be assumed to be spam. Borderline comments will have their URL field erased before being approved.