On Wed, Jan 12, 2022 at 3:55 AM <arnold@skeeve.com> wrote:
[snip]
Perhaps Doug can set the history straight on troff. Here is my understanding,
corrections (from Doug) welcome:

- Ossanna wrote the original nroff in assembly language
- He rewrote it in C when the C/A/T was acquired
  At that time nroff/troff were built from mostly the same sources (as
  can be seen in the archives).

I have some questions about the earlier history.

As I understand it, in the beginning there was RUNOFF, which I believe originated on CTSS? The CTSS sources contain a RUNOFF program that's made up of ~1100 lines of MAD and ~1300 lines of assembler. There is certainly a RUNOFF in Multics, written in BCPL (there's a small "outer module transfer vector" program in ALM). This is where it gets muddy for me; I understand this was roughly ported to unix as `roff` by Ken and that at this point, formatting was fairly primitive: suitable for hardcopy terminals and line printers, and could do things like center lines and so forth, but nothing fancy (https://www.cs.dartmouth.edu/~doug/reader.pdf). Ossanna then took over and greatly expanded the capabilities of `roff`, adding macros and traps and making it Turing-complete; this was `nroff`, which grew to become `troff` once the C/A/T typesetter was acquired.

Section 4.1 ("Text Processing") of Doug's "Research Unix Reader" above includes some tantalizing tidbits, particularly this, regarding `troff`: "It blew the manufacturer’s
mind, and touched off a flurry of homemade documents in flamboyant layouts—good enough, however, to fool referees into suspecting that the manuscripts had been published before." Ooo, that last bit sounds like a good story! Doug, can you tell us more?

        - Dan C.

PS: Something came up on the Multics mailing list recently that may be of local interest. Someone was looking for a set of troff macros used internally by Honeywell for the preparation of technical documentation and memoranda and it was asked whether this had been done on Multics? Apparently, `troff` never made it back to its ancestor's home, even though at some point circa the SVR2 era a C compiler was ported and it would have been, perhaps, possible. The answer to the original question was that that documentation had been prepared on a Unix machine of some kind; the macros seem lost to time.