Keypunch029 — for all your punched card font needs …

A fairly accurate rendition of the 5×7 dot matrix font printed at the
top of punched cards by the IBM Type 29 Card Punch (1965).

Local copy: Keypunch029.zip.
Fontlibrary link: Keypunch029

The 029 (as it is sometimes known) generated a bitmap font from an engraved metal plate pressing on a matrix of pins. A picture of this plate from a field engineering manual was used to re-create the pin matrices, and thus an outline font.

029 Code Plate
029 Code Key

Historical Accuracy

The 029 could have many different code plates, but the one used here contained the characters:

<=>¬|_-,;:!?/.'"()@¢$*&#%+0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ

The character glyphs have been sized such that if printed at 12 points, the 029’s character pitch of 0.087″ is accurately reproduced. No attempt to research the pin matrix pitch or pin diameter has been made: the spacing was eyeballed from a couple of punched cards in my collection.

The earlier IBM Type 26 Card Punch (“026”) included a glyph for a square lozenge (Unicode U+2311, ⌑). The 029 code plate did not include this character, but I added it here for completeness.

The character set was extended to include:

  • all of ASCII, with lower case characters repeating the upper case glyphs;
  • sterling currency symbol; and
  • euro currency symbol.

While there may have been official IBM renditions of some of these additional glyphs (with the exception of euro) no attempt has been made to research the original shapes. This font set is intended to help with the visually accurate reproduction of 1960s-era punched cards, mostly coinciding with my interest in the FORTRAN programming language. No attempt has been made to use historical BCD/EBCDIC encodings in these fonts. We have Unicode now.

The 029 card punch could not produce any bold or italic font variants, but FontForge can, so I did.

Things I learned in making these fonts

  1. The 029 card punch printer could be damaged if you tried to print binary cards, as there was no way to disengage the code plate from the punch mechanism.
  2. FontForge really hates to have paths in a glyph just touching. Either keep them more than one unit apart, or overlap them and merge the overlapping paths.
  3. EBCDIC is weird.

Sources

Fortran Coding Form

The original seems to have fallen off the web (though the Wayback machine might have it), but:

fortran(PDF is linked under image)

Wikimedia has some metadata from the source, drawn by Anthony Atkielski:

FortranCodingForm.png
By Agateller at English Wikipedia – Transferred from en.wikipedia to Commons by Sreejithk2000 using CommonsHelper., Public Domain, Link

Fortran has no STDERR

I suspect it’s comp.lang.fortran‘s second most frequently-asked question, but the language has no concept of stderr, the POSIX error output stream. Or at least, there’s no standard IO unit attached to stderr, if it’s defined at all.

Since writing to stderr is my usual debug message method, this is going to be a slog …

Was there something in the water?

mandlsmb.jpg
Just found one of my old Fortran-77 fractal programs, output of which is shown above. Reminds me of the days I used to consume (and ocasionally write for) Fractal Report avidly.

so it might not look much to you …

mapedit10x10.png
Being able to see this represents quite a bit of work on my part. It’s the output from WAsP‘s map editor, reprsenting some terrain roughness data exported from Surfer.

The original data set looks a bit like this:

gridvalues.png

It’s a grid of values. Unfortunately, WAsP wants the boundaries, and it took me a while to work out a (rather inefficient) algorithm to find them.

Now I have to go off and recode this in Fortran 90. I’m glad that the Intel Fortran Compiler for Linux is available free.

Getting my fortran head together

It’s very strange to be getting back into a language as different to Perl as it is possible to be. I’m fairly conversant with the weird bits of Perl — map, grep, hash usage, objects — but Fortran has a completely different toolkit

That’s not to say it’s a bad toolkit, just very different, F’rinstance, trying to find all the distinct values in an array. In Perl, you just walk through a hash, parallel to the array, incrementing each key for every value found. In Fortran — well, it’s a different story.