5

It was used as a sentinel character in card images. It distinguished job control commands from data.

But why the strange name?

5
  • Do you know what the character coding was for that? I wouldn't be surprised if some card validation equipment treated blank columns in a reference card as "match anything", but then needed some other means of indicating columns that should match a blank but nothing else. The character might have originated with that purpose, and then later been repurposed to distinguish JCL cards.
    – supercat
    Commented Jun 19 at 21:36
  • good ides, but no: upload.wikimedia.org/wikipedia/commons/4/4c/… Commented Jun 19 at 21:41
  • @JessFuckett sorry, but no, that is an IBM punch card. It features a different glyph/punch assignment (4-8) than the code used by UNIVAC (7-8).
    – Raffzahn
    Commented Jun 19 at 22:23
  • @supercat No. blank columns are spaces. any other character needs at least one hole punched. In case of IBM (360ff) punch cards NULL is 12-0-1-8-9.
    – Raffzahn
    Commented Jun 19 at 22:24
  • @Raffzahn: I know blank columns are spaces, but if one wants to have a piece of equipment verify that all of the cards in a stack match a certain pattern, having blank columns on the template match anything while some other character is used to indicate columns that must be blank on valid cards would seem logical. An encoding of 8+7 would be rather interesting if having the bottom 10 rows blank would yield a bottom-nybble encoding of 1111, whereas having just the "0" row punched would yield a bottom-nybble encoding of 0000.
    – supercat
    Commented Jun 19 at 22:34

1 Answer 1

10

TL;DR: It's what FIELDATA called the code at position (1).000.000.

FIELDATA's Primary Code Table was the default code used for UNIVAC 1100 systems.


Why did the UNIVAC 1100-series Exec-8 O/S call the @ character "master space"?

Because it's not always an AT-sign? The glyph used depends on the character set the in/output device used features. As per EXEC II (*1) manual the character is described as octal 00 in memory or as 8-7 column on a punch card:

enter image description here

(Taken from the 1966 EXEC II Programmers Reference manual section 3 page 7 subsection B)

What key creates this combination depends on equipment used:

  • With an unmodified US UNIVAC card punch the key is labeled @
  • On a British UNIVAC punch it's £ (Pound)
  • On a TTY35 it's #
  • Using a (default) IBM 026, one needs to press "
  • Not to mention manual punching of row 8 and 7 on any device.

Likewise the glyph printed depends on what types the printer is fitted with.

With old systems it's always important to remember that symbols shown on keycaps and glyphs printed were not always the same, nor consistent across devices or installations. It was quite fluid.

The EXEC only looked for the first byte of an input record containing 00, which is produced by an 8-7 column (if using the default tables). Being a @ is only true on (some) UNIVAC devices and only in default US setting.

But why the strange name?

That's simple, it's taken from FIELDATA's Primary Code Table, which was (with modifications) the default code used for UNIVAC 1100 systems. In FIELDATA (1).000.000 was defined as Master Space.


Of course, for EXEC they could also have called it 'recognition character', as some manuals do when explaining the command structure. Except, it's not only important for command cards, but for character handling in general. Due the word nature of the 1100 series 00 was used for character handling as filler. That is, any character cell position containing 00 was simply ignored when doing string handling (*2). At least for standard output routines.

This is also consistent with TTY handling since ITA2 times, as an all zero character, also known as NUL(L)(*3) will not be printed but ignored by a receiving teleprinter. Some Unix device drivers still master the art of inserting NUL characters for slower devices - for example to allow delay for carriage return and other slow functions. In addition the commonality of @ and NULL is still present on some systems by having CTRL-@ producing a 00byte.


*1 - Which is where the EXEC 8 inherited it from.

*2 - This is due the 18/36 bit word size of the 1100 series. A word always contained 6 characters, so strings shorter than 6 needed a way to mark non valid positions.

*3 - The /360 world used, despite being byte-addressable, a similar mechanic, where (8-bit) 00 characters would be ignored in most many terminal I/O situations.

5
  • 1
    It came from Exec II, which is why it wasn't in the Exec-8 manual. Well, you certainly won the "answered" award! I thought it might be a fieldata zero-bit pattern, but I was too lazy to check. God, that's a complete answer, thanx! Commented Jun 19 at 23:41
  • ...except on theTTY mod 33 we did use @. We also used the @@ double masterspace, to distinguish it from the @ char. for demand-specific commands. That was probably remapped to something else. THANK YOU! Commented Jun 19 at 23:45
  • Ctrl-@ meaning NUL comes from the layout of ASCII: @ is 100 0000, and NUL is 000 0000, so if the Ctrl key forces the first bit to zero, Ctrl-@ types a NUL; similarly, H is 100 1000 and Backspace is 000 1000, so Ctrl-H types a Backspace. Whether that layout is in any way related to the systems in question, I've no idea.
    – IMSoP
    Commented Jun 20 at 13:32
  • @IMSoP True, except ASCII inherited it from FIELDATA. A was placed at 41 for compatibility reasons, so alpha starts continous at x1 and @ at 40 for the same reason. That way NUL, SPACE, @ and ` (backtick) all ended with the lower 5 bits zero. Also noteworthy that the (never finalized) 1965 draft switched @and backtick (40<>60).
    – Raffzahn
    Commented Jun 20 at 17:31
  • 1
    @Raffzahn Ah, I see; I guess that answers my "whether that's related" question :)
    – IMSoP
    Commented Jun 20 at 19:22

You must log in to answer this question.

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