[TUHS] troff, Gremlin terminals, and the grn preprocessor

Jonathan Gray jsg at jsg.id.au
Sun Jul 13 12:45:30 AEST 2025


On Sat, Jul 12, 2025 at 01:37:28PM -0500, G. Branden Robinson wrote:
> Hi folks,
> 
> I'm trying to clear up a historical matter.
> 
> In reviewing groff's "LICENSES" file, I find myself stuck on the
> following paragraph.
> 
> >grn, written by Barry Roitblat <barry at rentonww.com> and David
> >Slattengren <slatteng at Xinet.COM>, was part of the Berkeley
> >troff distribution.  The files contain no AT&T code
> >and are in the public domain.  Historically, the original package could
> >be found at <http://ftp.cs.wisc.edu/pub/misc/grn.tar.Z>.
> 
> I'm not sure about that reference to "Berkeley troff".  I already
> deleted the modifier "device-independent" from that sentence because
> I've never seen even a whisper of evidence that the CSRG ever
> distributed Kernighan's device-independent troff; that was locked up
> behind AT&T's revenue-seeking aims.

from the Berkeley manual:
grn - ditroff preprocessor for gremlin files

more on the Berkeley ditroff distribution below

> 
> But also, I can't find evidence that "grn" was distributed by Berkeley
> at all.  At Warren's "Unix Tree",[1] I see what looks superficially like
> evidence of support for Gremlin terminals in "libplot", but that's not
> the same thing.
> 
> However there is evidence of support for grn, the troff preprocessor, in
> other unquestionable BSD artifacts, like Eric Allman's "me" package.
> 
> Can someone clear up my misconceptions or suggest non-misleading
> alternative wording?

grn(1) can be found in CD 4 of the CSRG archives.
Along with various .grn files.

from tuhs Documentation/CSRG_CDs/csrg_ls.gz:

-r--r--r-- 1 root root   5757 May  9  1984 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/docs/grn.1
-r--r--r-- 1 root root    356 Jul  5  1995 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/.MAP
-r--r--r-- 1 root root    468 Dec 27  1986 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/Makefile
-r--r--r-- 1 root root    235 Jul  5  1995 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/SCCS/.MAP
-r--r--r-- 1 root root   2037 Oct  8  1984 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/SCCS/s.gprint.h
-r--r--r-- 1 root root   9899 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/SCCS/s.hdb.c
-r--r--r-- 1 root root  19497 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/SCCS/s.hgraph.c
-r--r--r-- 1 root root   1028 Oct  8  1984 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/SCCS/s.hpoint.c
-r--r--r-- 1 root root  40419 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/SCCS/s.main.c
-r--r--r-- 1 root root   1228 Nov 11  1985 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/dev.h
-r--r--r-- 1 root root   1904 Dec  7  1984 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/gprint.h
-r--r--r-- 1 root root   5677 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/hdb.c
-r--r--r-- 1 root root  10982 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/hgraph.c
-r--r--r-- 1 root root    895 Dec  7  1984 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/hpoint.c
-r--r--r-- 1 root root  22630 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.okeeffe/grn/main.c
-r--r--r-- 1 root root   5757 May  9  1984 CSRG/disk4/local/ditroff/ditroff.old.van/docs/grn.1
-r--r--r-- 1 root root    314 Jul  5  1995 CSRG/disk4/local/ditroff/ditroff.old.van/grn/.MAP
-r--r--r-- 1 root root    468 Dec 27  1986 CSRG/disk4/local/ditroff/ditroff.old.van/grn/Makefile
-r--r--r-- 1 root root   1228 Nov 11  1985 CSRG/disk4/local/ditroff/ditroff.old.van/grn/dev.h
-r--r--r-- 1 root root   1904 Dec  7  1984 CSRG/disk4/local/ditroff/ditroff.old.van/grn/gprint.h
-r--r--r-- 1 root root   5677 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.van/grn/hdb.c
-r--r--r-- 1 root root  10982 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.van/grn/hgraph.c
-r--r--r-- 1 root root    895 Dec  7  1984 CSRG/disk4/local/ditroff/ditroff.old.van/grn/hpoint.c
-r--r--r-- 1 root root  22630 Apr 14  1986 CSRG/disk4/local/ditroff/ditroff.old.van/grn/main.c
-r--r--r-- 1 root root    5757 Oct 10  1986 CSRG/disk4/local/man/man1/grn.1

The SCCS logs start in 1983, authored by slatteng.

The troff preprocessor is also mentioned in

Mark Opperman, Jim Thompson, Yih-Farn Chen
A Gremlin Tutorial for the SUN Workstation
UCB/CSD 322
https://www2.eecs.berkeley.edu/Pubs/TechRpts/1987/CSD-87-322.pdf

"1.1 GREMLIN History
GREMLIN's legacy encompasses more than five years and a half-dozen
Berkeley graduate students.  It all started in 1981 when Barry Roitblat
built the first version of GREMLIN for his Master's project.  That
version ran only on AED color displays, and its output could be printed
only on Versatec printers.  In order to include figures in typeset
documents, they had to be cut-and-pasted.  In 1983, Dave Slattengren
(another graduate student at UCB) acquired from AT&T the sources to
Brian Kernighan's new DITROFF program.  In addition to making the
program work under 4.2 BSD and building drivers for several printers,
he wrote GRN, which reads files in GREMLIN format and generates
DITROFF commands to print the pictures in-inline in documents.
...
1.2 Distribution of GREMLIN
GREMLIN is distributed free of charge by the University of California,
Berkeley, along with a modified version of the DITROFF typesetting
system which allows GREMLIN pictures to be printed in-line in documents.
To find out more about the GREMLIN/DITROFF distribution, including the
AT&T licenses required to receive it, write to:"


More information about the TUHS mailing list