12

In his description of the QED editor, Dennis Ritchie writes

READ9 and READ6 return the next character from the ASCII or Hollerith file currently being read (if any).

I know about ASCII, of course, but what is a Hollerith file? Is it related to the 9-vs-6 in the routine names?
(Wikipedia only tells me that Hollerith invented technology related to punch cards and became the namesake of Fortran's Hollerith strings, neither of which seems applicable here.)

3
  • en.wikipedia.org/wiki/Punched_card goes in to some depth on how letters vs numbers were represented on IBM punch cards. It was not ASCII...
    – Jon Custer
    Apr 14, 2022 at 23:19
  • 7
    At one time the terms ASCII file or text file were interchangeable -- maybe "at one time", but certainly nor originally, when there were countless different character codes, many of which were 6 bits. ASCII was a comparative latecomer, in 1963. But it wasn't in "universal" use until some time later.
    – dave
    Apr 15, 2022 at 2:10
  • Some additional reading on binary encoding of small character sets: BCD (character encoding).
    – HABO
    Apr 16, 2022 at 2:18

1 Answer 1

12

I don't know that QED software at all, but considering the computer it seems to have been made for (36 bit GE), some information can be used for an educated guess:

but what is a Hollerith file?

Well, Hollerith can have, when it's about encoding, two meanings:

  • Punch card codes, as known from IBM punch cards. These are often associated with EBCDIC, but they are not, they are a 1..3 out of 12 encoding.

  • Especially in context of 36 bit machines, like the GE systems were, Hollerith code means a 6 bit per character encoding able to display all valid alphanumeric encodings used on cards (*1)

So my guess would be that a Hollerith file is one using 6 bit characters, independent of the source media.

GE lingo is a bit more specific, as it refers in manuals (like for the 225 reader, see p.12 *2) to 6 bit characters as BCD characters (*3), while Hollerith is reserved only for punch cards - a distinction not all users may have followed.

In addition, the term file, nowadays usually rather confined to mean some disk stored data, was back then a way more generic term more like today's "stream". A file could be/come from a paper tape, a card stack, a tape or any other means of data. Data that often never touched a disk storage at all. Like reading in a Hollerith data from card and outputting on a TTY. Both may have been called a file.

Is it related to the 9-vs-6 in the routine names?

Maybe.

Just a guess, but a 36 bit word can store 6 character using 6 bit Hollerith, or 4 ASCII characters by using 9 bits per character. It was general advisable to not let characters cross word boundaries, as that would complicate decoding. Files were of course usually character based. 6,7 or 8 per character, depending on system and encoding - or a punch character in case of cards :))

The names of these routines sound quite like it's about packing and unpacking such words, depending on what encoding is used. 4 characters per 36 bit when using (7bit) ASCII and 6 when using Hollerith.

This interpretation gets some support when looking at the GCOS Wiki-entry, where the section about storage mentioned the use of 4 ASCII or 6 BCD characters per word, while the QED page states that units of 4 words are used as basic building blocks for text storage.


*1 - What was valid was in part depending on each manufacturer, as each used variations of punch card codes for their own purpose - a bit like 8 bit home computers often botched ASCII to handle their additional graphics or diverging glyphs - think Commodore giving the pound sign a code position independent of hash (#).

*2 - To avoid confusion, don't look at p.13, as the GE-200 were 20 bit machines, so data a 20 bit word always held 3 right justified 6 bit characters :)) It was the only I could find showing the most likely encoding table.

This 20 bit word structure is, BTW, also the reason why all (classic) BASIC function have three letters names. Dartmouth BASIC was first implemented on a GE-235, with its 20 bit word able to pack three 6 bit characters. Thus all the now common names (almost canon, across many languages) like INT, EXP or TAN are due the wish to simplify the compiler by having to compare only a single machine word when looking up for a match. It also explains why Arcus TANgens isn't ATAN but ATN.

*3 - The term BCD character might be a bit confusing, as it does not describe a 4 bit value (or two thereof), but two octal numbers used to spell out 6 bit codes.

5
  • 4
    I think you're right about "Hollerith" meaning 6-bit character encoding; computer programmers are not known for linguistic accuracy :-) The usage probably comes from "all the characters you can represent on cards", which often had a fairly restricted character set.
    – dave
    Apr 15, 2022 at 2:17
  • 2
    Hey, I for one haven't given up on the proper meaning of the word "file". And you'd think that the kids of today would understand that, given that in Linux, all files are accessed the same way (see e.g. /dev/tty).
    – dave
    Apr 15, 2022 at 16:32
  • 1
    Yep. I'd guess that "Hollerith" came from Fortran's use of the word to refer to its character code.
    – John Doty
    Apr 15, 2022 at 21:07
  • @JohnDoty In case of Fortran (and COBOL) it was also way to avoid naming any particular code. While all companies involved used punch cards and could agree on basic symbols, they also had additional characters which they wanted/needed to use in programs.
    – Raffzahn
    Apr 15, 2022 at 22:16
  • 3
    @Raffzahn Indeed. Even the same company often had different character codes for different products. When I first learned Fortran programming in 1969, the school had acquired IBM 029 keypunches with the wrong character code, so we had to learn to type special characters like "=" as different characters. At least the line printer had the right wheels, so listings came out OK!
    – John Doty
    Apr 15, 2022 at 22:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .