At 2025-02-10T14:56:28+0100, Tadziu Hoffmann wrote: > > > AT&T troff stores font size in points. This means it > > converts the argument to .ps from whatever unit it's in > > (default is points) to basic units and then divides that > > by the size of 1 point. > > Did AT&T troff actually allow the argument to .ps to be > in anything other than points?
Well, I fired up good old SIMH and Seventh Edition Unix to see.
Here's the transcript, in all its fat-fingering,
forgetting-that-line-editing-was-different-in-those-days glory:
---snip---
New Boot, known devices are hp ht rk rl rp tm vt
: rl(0,0)rl2unix
mem = 177856
# Restricted rights: Use, duplication, or disclosure
is subject to restrictions stated in your contract with
Western Electric Company, Inc.
Thu Sep 22 23:17:27 EDT 1988
login: dmr
$ nroff
.ps 1000
.tm \n(.s
10
$ troff -t
.ps 1000
.tm \n(.s
@o`36
.ps 36
.tn \n($
$ p
p: not found
$ troff -t
.ps 4$
$ p
$
$ troff -t
.ps 36
.tm \n(.s
@o`36
`````````````````````````````````````````````````````````````````~@IAAAAAAAA$
$
Simulation stopped, PC: 002306 (MOV (SP)+,177776)
sim> cont
$ troff -t
.ps 1i
.tm \n(.s
@o`6
`````````````````````````````````````````````````````````````````~@IAAAAAAAA$
$ troff -t >/dev/null
/dev/null: cannot create
$
Simulation stopped, PC: 002306 (MOV (SP)+,177776)
---end snip---
What we see here are several known facts, and a couple ones new to me:
1. Don't mess with the type size in nroff (mode). It can't change.
2. The C/A/T output device was limited to type sizes in the range 6-36,
so getting out of range is easy.
3. Ossanna troff clamps requested type sizes to the valid range.
4. That racket you see in troff output is the C/A/T command stream.
This is what you had to work with before Kernighan's device-
independence efforts.
New facts (to me):
1. Ossanna troff ignores scaling units in the `ps` request. `.ps 1i`
should be equivalent to `.ps 72`, and be clamped to 36, but instead
it's intepreted as `.ps 1` and clamped to 6. Just as Tadziu's
citation of CSTR #54 suggests.
2. Ossanna troff flushes stdout before writing to stderr; that's why
the arcane @o` noise appears at the start of the terminal messages:
it's actually (I surmise) configuring the type size on the C/A/T.
3. Seventh Edition had no /dev/null. Are we sure this is even Unix?
;-)
> The Manual says:
>
> The default scaling is m for the horizontally-oriented
> requests and functions ll, in, ti, ta, lt, po, mc,
> \h, \l, and horizontal coordinates of \D; v for the
> vertically-oriented requests and functions pl, wh, ch, dt,
> sp, sv, ne, rt, \v, \x, \L, and vertical coordinates of
> \D; p for the vs request; and u for the requests nr, if,
> and ie. *All* other requests ignore any scale indicators.
Regards,
Branden
signature.asc
Description: PGP signature
