%!PS %%Version: 3.3.1 %%DocumentFonts: (atend) %%Pages: (atend) %%EndComments % % Version 3.3.1 prologue for troff files. % /#copies 1 store /aspectratio 1 def /formsperpage 1 def /landscape false def /linewidth .3 def /magnification 1 def /margin 0 def /orientation 0 def /resolution 720 def /rotation 1 def /xoffset 0 def /yoffset 0 def /roundpage true def /useclippath true def /pagebbox [0 0 612 792] def /R /Times-Roman def /I /Times-Italic def /B /Times-Bold def /BI /Times-BoldItalic def /H /Helvetica def /HI /Helvetica-Oblique def /HB /Helvetica-Bold def /HX /Helvetica-BoldOblique def /CW /Courier def /CO /Courier def /CI /Courier-Oblique def /CB /Courier-Bold def /CX /Courier-BoldOblique def /PA /Palatino-Roman def /PI /Palatino-Italic def /PB /Palatino-Bold def /PX /Palatino-BoldItalic def /Hr /Helvetica-Narrow def /Hi /Helvetica-Narrow-Oblique def /Hb /Helvetica-Narrow-Bold def /Hx /Helvetica-Narrow-BoldOblique def /KR /Bookman-Light def /KI /Bookman-LightItalic def /KB /Bookman-Demi def /KX /Bookman-DemiItalic def /AR /AvantGarde-Book def /AI /AvantGarde-BookOblique def /AB /AvantGarde-Demi def /AX /AvantGarde-DemiOblique def /NR /NewCenturySchlbk-Roman def /NI /NewCenturySchlbk-Italic def /NB /NewCenturySchlbk-Bold def /NX /NewCenturySchlbk-BoldItalic def /ZD /ZapfDingbats def /ZI /ZapfChancery-MediumItalic def /S /S def /S1 /S1 def /GR /Symbol def /inch {72 mul} bind def /min {2 copy gt {exch} if pop} bind def /setup { counttomark 2 idiv {def} repeat pop landscape {/orientation 90 orientation add def} if /scaling 72 resolution div def linewidth setlinewidth 1 setlinecap pagedimensions xcenter ycenter translate orientation rotation mul rotate width 2 div neg height 2 div translate xoffset inch yoffset inch neg translate margin 2 div dup neg translate magnification dup aspectratio mul scale scaling scaling scale addmetrics 0 0 moveto } def /pagedimensions { useclippath userdict /gotpagebbox known not and { /pagebbox [clippath pathbbox newpath] def roundpage currentdict /roundpagebbox known and {roundpagebbox} if } if pagebbox aload pop 4 -1 roll exch 4 1 roll 4 copy landscape {4 2 roll} if sub /width exch def sub /height exch def add 2 div /xcenter exch def add 2 div /ycenter exch def userdict /gotpagebbox true put } def /addmetrics { /Symbol /S null Sdefs cf /Times-Roman /S1 StandardEncoding dup length array copy S1defs cf } def /pagesetup { /page exch def currentdict /pagedict known currentdict page known and { page load pagedict exch get cvx exec } if } def /decodingdefs [ {counttomark 2 idiv {y moveto show} repeat} {neg /y exch def counttomark 2 idiv {y moveto show} repeat} {neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat} {neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat} {counttomark 2 idiv {y moveto show} repeat} {neg setfunnytext} ] def /setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def /w {neg moveto show} bind def /m {neg dup /y exch def moveto} bind def /done {/lastpage where {pop lastpage} if} def /f { dup /font exch def findfont exch dup /ptsize exch def scaling div dup /size exch def scalefont setfont linewidth ptsize mul scaling 10 mul div setlinewidth /spacewidth ( ) stringwidth pop def } bind def /changefont { /fontheight exch def /fontslant exch def currentfont [ 1 0 fontheight ptsize div fontslant sin mul fontslant cos div fontheight ptsize div 0 0 ] makefont setfont } bind def /sf {f} bind def /cf { dup length 2 idiv /entries exch def /chtab exch def /newencoding exch def /newfont exch def findfont dup length 1 add dict /newdict exch def {1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall newencoding type /arraytype eq {newdict /Encoding newencoding put} if newdict /Metrics entries dict put newdict /Metrics get begin chtab aload pop 1 1 entries {pop def} for newfont newdict definefont pop end } bind def % % A few arrays used to adjust reference points and character widths in some % of the printer resident fonts. If square roots are too high try changing % the lines describing /radical and /radicalex to, % % /radical [0 -75 550 0] % /radicalex [-50 -75 500 0] % % Move braceleftbt a bit - default PostScript character is off a bit. % /Sdefs [ /bracketlefttp [201 500] /bracketleftbt [201 500] /bracketrighttp [-81 380] /bracketrightbt [-83 380] /braceleftbt [203 490] /bracketrightex [220 -125 500 0] /radical [0 0 550 0] /radicalex [-50 0 500 0] /parenleftex [-20 -170 0 0] /integral [100 -50 500 0] /infinity [10 -75 730 0] ] def /S1defs [ /underscore [0 80 500 0] /endash [7 90 650 0] ] def % % Tries to round clipping path dimensions, as stored in array pagebbox, so they % match one of the known sizes in the papersizes array. Lower left coordinates % are always set to 0. % /roundpagebbox { 7 dict begin /papersizes [8.5 inch 11 inch 14 inch 17 inch] def /mappapersize { /val exch def /slop .5 inch def /diff slop def /j 0 def 0 1 papersizes length 1 sub { /i exch def papersizes i get val sub abs dup diff le {/diff exch def /j i def} {pop} ifelse } for diff slop lt {papersizes j get} {val} ifelse } def pagebbox 0 0 put pagebbox 1 0 put pagebbox dup 2 get mappapersize 2 exch put pagebbox dup 3 get mappapersize 3 exch put end } bind def %%EndProlog %%BeginSetup mark /resolution 720 def setup 2 setdecoding %%EndSetup %%Page: 0 1 /saveobj save def mark 1 pagesetup 10 PA f (AT&T Bell Laboratories)2 1053 1 2353 1740 t (Murray Hill, New Jersey 07974)4 1367 1 2196 1860 t (Computing Science Technical Report No. 97)5 1946 1 1907 3180 t 12 PB f (A Typesetter-independent TROFF)2 1872 1 1944 3450 t 10 PI f (Brian W. Kernighan)2 826 1 2467 3690 t 10 PA f (Revised, March, 1982)2 938 1 720 6240 t cleartomark showpage saveobj restore %%EndPage: 0 1 %%Page: 0 2 /saveobj save def mark 2 pagesetup 12 PB f (A Typesetter-independent TROFF)2 1872 1 1944 1230 t 10 PI f (Brian W. Kernighan)2 826 1 2467 1470 t 10 PA f (AT&T Bell Laboratories)2 1053 1 2353 1650 t (Murray Hill, New Jersey 07974)4 1367 1 2196 1770 t 10 PI f (ABSTRACT)2621 2270 w 10 PA f (Although)1330 2566 w 8 PA f (TROFF)1802 2566 w 10 PA f ( of document preparation at Bell)5 1538(has been the mainstay)3 1039 2 2103 2566 t ( very dependent on one particular)5 1559(Labs for several years, it has heretofore been)7 2041 2 1080 2686 t (typesetter, the Graphic Systems CAT.)4 1659 1 1080 2806 t ( describes conversion of)3 1072(This paper)1 477 2 1330 2962 t 8 PA f (TROFF)2909 2962 w 10 PA f (to deal with a wide class of type-)7 1485 1 3195 2962 t (setters.)1080 3082 w ( these typesetters provide many more facilities than the CAT does.)10 2989(Some of)1 361 2 1330 3238 t ( more sizes and fonts, larger alphabets, and the)8 2230(Typical extra features include)3 1370 2 1080 3358 t ( paper)1 317( The)1 251( create new characters and to draw graphical objects.)8 2605(ability to)1 427 4 1080 3478 t (describes the enhancements that permit)4 1761 1 1080 3598 t 8 PA f (TROFF)2867 3598 w 10 PA f (to take advantage of some of these)6 1531 1 3149 3598 t (capabilities as well.)2 854 1 1080 3718 t (Revised, March, 1982)2 938 1 720 4198 t cleartomark showpage saveobj restore %%EndPage: 0 2 %%Page: 1 3 /saveobj save def mark 3 pagesetup 12 PB f (A Typesetter-independent TROFF)2 1872 1 1944 1230 t 10 PI f (Brian W. Kernighan)2 826 1 2467 1470 t 10 PA f (AT&T Bell Laboratories)2 1053 1 2353 1650 t (Murray Hill, New Jersey 07974)4 1367 1 2196 1770 t 10 PB f ( Bit of History)3 647(1. A)1 203 2 720 2130 t 10 PA f ( be speaking today about work in progress, instead of completed research; this)12 3531(``I will)1 289 2 970 2322 t ( fact is I)3 352(was not my original intention when I chose the subject of this lecture, but the)14 3468 2 970 2442 t (couldn't get my computer programs working in time.'')7 2426 1 970 2562 t (Donald E. Knuth)2 748 1 3850 2742 t 8 PA f (1)4598 2710 w 10 PA f (The)970 2934 w 8 PA f (TROFF)1171 2934 w 10 PA f (text formatter)1 620 1 1461 2934 t 8 PA f (2)2081 2902 w 10 PA f ( in about 1973, in)4 792(was originally written by the late Joe Ossanna)7 2093 2 2155 2934 t ( \()1 102(assembly language for the PDP-11.)4 1615 2 720 3054 t 8 PA f (NROFF)2437 3054 w 10 PA f (, which drives terminals instead of a typesetter, is)8 2330 1 2710 3054 t (essentially identical to)2 985 1 720 3174 t 8 PA f (TROFF)1731 3174 w 10 PA f ( will use ``)3 457(; we)1 182 2 1987 3174 t 8 PA f (TROFF)2626 3174 w 10 PA f ( was rewritten)2 641( It)1 119('' as a generic term henceforth.\))5 1398 3 2882 3174 t (in C around 1975, and underwent slow but steady evolution until Ossanna's death late in 1977.)15 4190 1 720 3294 t ( of some obvious deficiencies \320 a rebarbative input syntax, mysterious and undocu-)12 3741(In spite)1 329 2 970 3450 t ( for computer resources \(especially)4 1607(mented properties in some areas, and a voracious appetite)8 2713 2 720 3570 t ( macro packages and preprocessors like)5 1765(when used with)2 713 2 720 3690 t 8 PA f (EQN)3225 3690 w 10 PA f (and)3430 3690 w 8 PA f (TBL)3626 3690 w 10 PA f (\) \320)1 160 1 3773 3690 t 8 PA f (TROFF)3960 3690 w 10 PA f (has been the basis)3 797 1 4243 3690 t (of document preparation at Bell Labs for some years, and is likely to remain so for years to come.)18 4285 1 720 3810 t ( to acquire a new typesetter,)5 1270(Early in 1979, the Computing Science Research Center decided)8 2800 2 970 3966 t ( Hill)1 210( the same time, the Murray)5 1275( At)1 177(primarily because of our interests in typesetting graphics.)7 2658 4 720 4086 t (Computer Center began to investigate the possibility of replacing their family of aging CAT's)13 4320 1 720 4206 t (with a new, high-performance typesetter, simply to keep up with their rapidly expanding load.)13 4208 1 720 4326 t ( would be a glorious)4 987(My first thought \(a thought shared by many others\) was that this)11 3083 2 970 4482 t (opportunity to replace)2 1024 1 720 4602 t 8 PA f (TROFF)1783 4602 w 10 PA f ( to work)2 398(with a new formatting language: better designed, easier)7 2564 2 2078 4602 t ( remains a desirable goal, but, after quite a bit of thought)11 2607( This)1 249( of course much faster.)4 1034(with, and)1 430 4 720 4722 t ( really much closer to a better design, let alone an imple-)11 2549(spread over several years, I am still not)7 1771 2 720 4842 t ( a great deal of software depends on)7 1708(mentation. Furthermore,)1 1133 2 720 4962 t 8 PA f (TROFF)3601 4962 w 10 PA f (\320 the preprocessors, the)3 1142 1 3898 4962 t ( Toss-)1 290(macro packages, and of course all of their documentation and our accumulated expertise.)12 4030 2 720 5082 t (ing this aside is not something to be done lightly.)9 2172 1 720 5202 t (Accordingly, in the spring of 1979, I set about to modify)10 2529 1 970 5358 t 8 PA f (TROFF)3530 5358 w 10 PA f (so that it would run hence-)5 1223 1 3817 5358 t ( ground rule was that)4 988( The)1 225( a variety of typesetters.)4 1090(forth without change on)3 1099 4 720 5478 t 8 PA f (TROFF)4155 5478 w 10 PA f (should retain)1 596 1 4444 5478 t (its current specifications, so that existing software like)7 2450 1 720 5598 t 8 PA f (EQN)3204 5598 w 10 PA f (,)3382 5598 w 8 PA f (TBL)3441 5598 w 10 PA f ( macro packages would)3 1076(and the)1 342 2 3622 5598 t (continue to work with it.)4 1097 1 720 5718 t ( main-)1 284(Since much of the rest of this paper is encrusted with details that could appeal only to)16 3786 2 970 5874 t ( Non-specialists)1 737( a brief summary of what has been done.)8 1877(tainers or masochists, I will give here)6 1706 3 720 5994 t (can stop reading at the end of the section.)8 1834 1 720 6114 t 8 PA f (TROFF)970 6270 w 10 PA f ( just in details of)4 789(is highly dependent on the Graphic Systems CAT typesetter, not)9 2985 2 1266 6270 t ( largely)1 356( language design issues have been)5 1630( The)1 241(code but also in many aspects of its design.)8 2093 4 720 6390 t ( that dependencies are)3 1010(ignored \(few are truly fundamental\), while the code has been modified so)11 3310 2 720 6510 t (either eliminated or at least parameterized.)5 1904 1 720 6630 t 8 PA f (TROFF)970 6786 w 10 PA f ( the typesetter compiled into the code, often in non-)9 2455(originally had parameters of)3 1316 2 1269 6786 t ( invoked, to set values for)5 1177( new version reads a parameter file each time it is)10 2275( The)1 226(obvious ways.)1 642 4 720 6906 t (machine resolution, legal sizes, fonts and characters, character widths and the like.)11 3644 1 720 7026 t 8 PA f (TROFF)970 7182 w 10 PA f ( beyond)1 386(output used to be binary device codes specific to the CAT and arcane)12 3376 2 1278 7182 t ( output of the new version is)6 1302(description. The)1 747 2 720 7302 t 8 PA f (ASCII)2800 7302 w 10 PA f (characters in a simple and \(I hope\) universal)7 1994 1 3046 7302 t cleartomark showpage saveobj restore %%EndPage: 1 3 %%Page: 2 4 /saveobj save def mark 4 pagesetup 10 PA f (- 2 -)2 166 1 2797 480 t ( post-)1 255( A)1 135(language that describes where each character is to be placed and in what size and font.)15 3930 3 720 840 t ( this typesetter-independent language)3 1725(processor must be written for each typesetter to convert)8 2595 2 720 960 t ( currently exist for the CAT, the Mergen-)7 1876( Post-processors)1 751( typesetter.)1 501(into specific codes for that)4 1192 4 720 1080 t ( Tektronix 4014 terminal, The Imagen Canon laser)7 2272(thaler Linotron 202, the Autologic APS-5, the)6 2048 2 720 1200 t ( ones can generally be written in less than)8 1851( New)1 265( bit-map terminal.)2 800(printer, Versatec printers, and a)4 1404 4 720 1320 t (a day; they share much of their code with previous ones.)10 2500 1 720 1440 t ( the older)2 442(The new output language contains information that is not readily identifiable in)11 3628 2 970 1596 t ( the beginning of each page and line is marked, so post-processors can do)13 3319( notably,)1 393(output. Most)1 608 3 720 1716 t ( it boustrophedo-)2 815(device-specific optimizations such as sorting the data vertically or printing)9 3505 2 720 1836 t (nically, independently of)2 1105 1 720 1956 t 8 PA f (TROFF)1850 1956 w 10 PA f (.)2106 1956 w (Since actual output is done by a post-processor, not)8 2393 1 970 2112 t 8 PA f (TROFF)3403 2112 w 10 PA f ( for graphics)2 589(, new capabilities)2 792 2 3659 2112 t ( easy to add.)3 610(have been)1 465 2 720 2232 t 8 PA f (TROFF)1863 2232 w 10 PA f (now recognizes commands for drawing diagonal lines, circles,)7 2878 1 2162 2232 t (ellipses, circular arcs, and quadratic B-splines; these are used in the PIC)11 3152 1 720 2352 t 8 PA f (3)3872 2320 w 10 PA f (and IDEAL)1 505 1 3937 2352 t 8 PA f (4)4442 2320 w 10 PA f (languages.)4507 2352 w ( document may have an arbitrary)5 1484( A)1 129( been eased or eliminated.)4 1155(A number of limitations have)4 1302 4 970 2508 t ( accessed)1 410( may be)2 361( Fonts)1 301(number of fonts on any page \(if the output device permits it, of course\).)13 3248 4 720 2628 t ( Character)1 489( them; ``mounting'' is no longer necessary.)6 1904(merely by naming)2 817 3 720 2748 t 10 PA f 0 8 changefont (height)3960 2748 w 10 PA f (and)4272 2748 w 10 PA f -10 10 changefont (sl)4471 2748 w 10 PA f (a)4542 2748 w 10 PA f 10 10 changefont (nt)4592 2748 w 10 PA f (may be)1 327 1 4713 2748 t (set independently of width.)3 1222 1 720 2868 t (The new)1 382 1 970 3024 t 8 PA f (TROFF)1378 3024 w 10 PA f ( 1000 bytes larger in instruction space and 13000 bytes larger in data)12 3030(is about)1 350 2 1660 3024 t ( runs about as fast)4 819( It)1 121( PDP-11/40 style machines\).)3 1261(space \(thus guaranteeing that it will not run on)8 2119 4 720 3144 t ( I made could be retrofitted into the)7 1659(as the original version, though a simple improvement that)8 2661 2 720 3264 t ( in these time)3 625( post-processors are not included)4 1517( The)1 230(earlier version to keep it about 20% faster.)7 1948 4 720 3384 t (comparisons; they typically take 10-20% of the)6 2050 1 720 3504 t 8 PA f (TROFF)2795 3504 w 10 PA f (time.)3076 3504 w 10 PB f ( Dependencies)1 673(2. Typesetter)1 608 2 720 3744 t 8 PA f (TROFF)970 3900 w 10 PA f ( dependent on the Graphic Systems CAT, not just in the)10 2541(turns out to be surprisingly)4 1241 2 1258 3900 t (code but in its design.)4 966 1 720 4020 t ( example, the CAT provides four)5 1488( For)1 208( pretty obvious.)2 711(Some of the design dependencies are)5 1663 4 970 4176 t ( specific sizes are wired into the syntax of the lan-)10 2221( The)1 220( and 15 sizes.)3 589(fonts \(of 102 characters each\))4 1290 4 720 4296 t ( than 36 points,)3 706(guage: since the CAT has no sizes larger)7 1840 2 720 4416 t 10 CW f (\\s46)3301 4416 w 10 PA f (can be uniquely decoded as a 4-)6 1464 1 3576 4416 t (point)720 4536 w 10 CW f (6)980 4536 w 10 PA f (, while)1 297 1 1040 4536 t 10 CW f (\\s36)1362 4536 w 10 PA f (is simply a switch into size 36.)6 1333 1 1627 4536 t 8 PA f (TROFF)970 4692 w 10 PA f ( are physically isomor-)3 1017(makes the assumption that there are four fonts, three of which)10 2770 2 1253 4692 t ( each\) and one ``special'' font that)6 1492(phic \(that is, the same characters appear in the same position in)11 2828 2 720 4812 t ( font name)2 481( reserved)1 411( The)1 220(is logically a part of each of the others.)8 1721 4 720 4932 t 10 CW f (S)3582 4932 w 10 PA f (finds its way into several com-)5 1369 1 3671 4932 t (mands and receives special treatment in a variety of contexts.)9 2708 1 720 5052 t ( their definition; for exam-)4 1177(Some commands have the basic resolution of the CAT wired into)10 2893 2 970 5208 t (ple, the units of the)4 862 1 720 5328 t 10 CW f (.ss)1610 5328 w 10 PA f ( the size of the inter-word spacing\) are 36th's of an)10 2252(command \(which sets)2 970 2 1818 5328 t (em, because the CAT typesetter itself works in those units.)9 2583 1 720 5448 t ( example, the option)3 922( For)1 207( idiosyncrasies of the CAT.)4 1211(Some command line options reflect)4 1579 4 970 5604 t 10 CW f (-p)4920 5604 w 10 PA f ( output all be printed in one size; since the CAT is excruciatingly slow at chang-)15 3578(requests that the)2 742 2 720 5724 t ( The)1 240( this prints an approximation to final output comparatively quickly.)9 3204(ing point sizes,)2 708 3 720 5844 t 10 CW f (-g)4920 5844 w 10 PA f ( file for the benefit of the operations staff at)9 1906(option causes font information to appear in the output)8 2414 2 720 5964 t (the Murray Hill Computer Center.)4 1528 1 720 6084 t ( inte-)1 232(At the same time, there are myriad places where the characteristics of the CAT are an)15 3838 2 970 6240 t (gral part of the code for)5 1046 1 720 6360 t 8 PA f (TROFF)1791 6360 w 10 PA f ( of these are quite evident; others are subtle indeed.)9 2275(. Some)1 319 2 2047 6360 t ( Within)1 360( encoding of a character.)4 1091(The most obvious instance is the internal)6 1816 3 970 6516 t 8 PA f (TROFF)4265 6516 w 10 PA f (, objects are)2 519 1 4521 6516 t ( are two fundamental objects \320 printable characters)7 2401( There)1 320(passed around as 16 bit quantities.)5 1599 3 720 6636 t ( object looks like this:)4 944( An)1 186(and motions.)1 579 3 720 6756 t ( 8)1 450( 1)1 150( 2)1 300(1 4)1 300 4 2130 6936 t 10 S f (_________________________________)2055 6956 w 10 CW f ( c)1 450( z)1 150( f)1 300(m s)1 310 4 2125 7076 t 10 S f (_________________________________ \347)1 0 1 2055 7096 t (\347)2055 7056 w (\347)2205 7096 w (\347)2205 7056 w (\347)2605 7096 w (\347)2605 7056 w (\347)2805 7096 w (\347)2805 7056 w (\347)2905 7096 w (\347)2905 7056 w (\347)3705 7096 w (\347)3705 7056 w 10 PA f (If the)1 233 1 720 7276 t 10 CW f (m)980 7276 w 10 PA f ( is something to be printed.)5 1223(bit is a 1, the object represents a motion; if it is zero, the object)14 2750 2 1067 7276 t cleartomark showpage saveobj restore %%EndPage: 2 4 %%Page: 3 5 /saveobj save def mark 5 pagesetup 10 PA f (- 3 -)2 166 1 2797 480 t (In that case,)2 535 1 720 840 t 10 CW f (s)1285 840 w 10 PA f (is the size \(actually an index into a table of legal sizes\),)11 2458 1 1375 840 t 10 CW f (f)3863 840 w 10 PA f (is the font,)2 474 1 3953 840 t 10 CW f (z)4457 840 w 10 PA f (is the zero-)2 494 1 4546 840 t (motion bit \(i.e., no space after printing\), and)7 1953 1 720 960 t 10 CW f (c)2699 960 w 10 PA f ( the high order bit of)5 919( If)1 118(is the character.)2 694 3 2785 960 t 10 CW f (c)4542 960 w 10 PA f (is set, the)2 412 1 4628 960 t ( example,)1 430(character is to be looked up in a table of special names \(for)12 2654 2 720 1080 t 10 CW f (0200)3834 1080 w 10 PA f (is the hyphen)2 608 1 4104 1080 t 10 CW f (\\\(hy)4742 1080 w 10 PA f (\);)4982 1080 w (otherwise it is)2 623 1 720 1200 t 8 PA f (ASCII)1370 1200 w 10 PA f ( if)1 89(. Furthermore,)1 668 2 1585 1200 t 10 CW f (c)2369 1200 w 10 PA f ( octal 370, the character)4 1044(is less than octal 40 or greater than)7 1540 2 2456 1200 t (is actually some encoded control function or very special character such as)11 3289 1 720 1320 t 10 CW f (\\e)4034 1320 w 10 PA f (or)4179 1320 w 10 CW f (\\{)4299 1320 w 10 PA f (.)4419 1320 w ( packing makes it utterly impossible to add another size or font \320 there are)14 3349(Clearly the tight)2 721 2 970 1476 t ( limits on the number of characters in a font and on the number of)14 2926( also implies)2 555( It)1 119(no bits left over.)3 720 4 720 1596 t (special names \(names of the form)5 1475 1 720 1716 t 10 CW f (\\\(xx)2220 1716 w 10 PA f (\).)2460 1716 w (Motions are encoded as)3 1047 1 970 1872 t ( 13)1 725(1 1 1)2 250 2 2130 2052 t 10 S f (_________________________________)2055 2072 w 10 CW f ( mag)1 760(m v n)2 260 2 2125 2192 t 10 S f (_________________________________ \347)1 0 1 2055 2212 t (\347)2055 2172 w (\347)2205 2212 w (\347)2205 2172 w (\347)2305 2212 w (\347)2305 2172 w (\347)2405 2212 w (\347)2405 2172 w (\347)3705 2212 w (\347)3705 2172 w 10 CW f (m)720 2392 w 10 PA f (is the ``motion bit'', which is 1 for a motion,)9 1930 1 806 2392 t 10 CW f (v)2762 2392 w 10 PA f (is 1 for a vertical motion, and)6 1296 1 2848 2392 t 10 CW f (n)4170 2392 w 10 PA f ( for a negative)3 637(is 1)1 147 2 4256 2392 t ( 13 bits, the maximum)4 1018( there are only)3 671( Since)1 293( remaining 13 bits give the magnitude.)6 1767(motion. The)1 571 5 720 2512 t ( resolution of 432 units per inch, this is a)9 1788( the CAT's)2 469( With)1 270(amount of motion is 8191 machine units.)6 1793 4 720 2632 t ( for the Linotron 202 \(resolution 972/inch\), it is only 8.5 inches.)11 2781( But)1 204(generous 19 inches.)2 861 3 720 2752 t ( in tests and assignments without identifi-)6 1866(Within the code, certain character values are used)7 2204 2 970 2908 t ( instance the octal value)4 1115(cation. For)1 510 2 720 3028 t 10 CW f (0200)2385 3028 w 10 PA f ( of)1 127( But)1 218( as a hyphen.)3 622(is used \(without identification\))3 1408 4 2665 3028 t (course the mask)2 740 1 720 3148 t 10 CW f (0200)1498 3148 w 10 PA f ( might be imagined, it takes some study to)8 1987( As)1 184( times.)1 304(also occurs many)2 789 4 1776 3148 t (determine whether any particular)3 1495 1 720 3268 t 10 CW f (0200)2240 3268 w 10 PA f (is a hyphen or a mask.)5 990 1 2505 3268 t ( Char-)1 307( horizontally and 144 vertically.)4 1420(The basic resolution of the CAT is 432 units per inch)10 2343 3 970 3424 t ( are 72 points in an inch.)6 1146( There)1 318(acter widths are given as the number of units at size 6 points.)12 2856 3 720 3544 t (Thus the program contains as magic numbers every factor of 432, and)11 3078 1 720 3664 t 10 S f (\261)3823 3664 w 10 PA f (1 from each factor as well.)5 1152 1 3878 3664 t (Finally,)970 3820 w 8 PA f (TROFF)1330 3820 w 10 PA f ( 7000 lines of vir-)4 768(is simply a big program \(at least by my standards\) \320 about)11 2658 2 1614 3820 t ( am indebted to Lorinda Cherry for a new version of the C beautifier)13 3133( \(I)1 125(tually uncommented C.)2 1062 3 720 3940 t ( was implemented before the recent addi-)6 1898( It)1 127( not comprehensible.\))2 976(that made the code legible, if)5 1319 4 720 4060 t ( so there are no)4 719(tions to C,)2 475 2 720 4180 t 10 CW f (typedef)1950 4180 w 10 PA f ('s to distinguish among the various kinds of integers, rela-)9 2670 1 2370 4180 t (tively few macros with arguments, no internal)6 2081 1 720 4300 t 10 CW f (static)2833 4300 w 10 PA f (variables, and a startling number of glo-)6 1815 1 3225 4300 t (bal variables with two-character names.)4 1758 1 720 4420 t ( remarks should be taken as denigrating Ossanna's accomplishment with)9 3419(None of these)2 651 2 970 4576 t 8 PA f (TROFF)720 4696 w 10 PA f ( taking unbelievable abuse from a variety of pre-)8 2205( has proven a remarkably robust tool,)6 1709(. It)1 150 3 976 4696 t ( into uses that were never conceived of in the original design, all with)13 3081(processors and being forced)3 1239 2 720 4816 t (considerable grace under fire.)3 1314 1 720 4936 t 10 PB f ( TROFF)1 359(3. Modifying)1 620 2 720 5176 t 10 PA f ( widen the 16-bit internal representation of a character to 32 bits, to)12 3128(The first step was to)4 942 2 970 5332 t ( current representation is)3 1111( The)1 217(accommodate more sizes and fonts.)4 1573 3 720 5452 t ( 15)1 825( 1)1 450( 8)1 750(1 7)1 450 4 1330 5632 t 10 S f (_________________________________________________________________)1255 5652 w 10 CW f ( c)1 800( m)1 450( f)1 750(z s)1 460 4 1325 5772 t 10 S f (_________________________________________________________________ \347)1 0 1 1255 5792 t (\347)1255 5752 w (\347)1405 5792 w (\347)1405 5752 w (\347)2105 5792 w (\347)2105 5752 w (\347)2905 5792 w (\347)2905 5752 w (\347)3005 5792 w (\347)3005 5752 w (\347)4505 5792 w (\347)4505 5752 w 10 PA f (If)720 5972 w 10 CW f (m)817 5972 w 10 PA f (is 1, bits 16 and 17 are)6 992 1 907 5972 t 10 CW f (v)1929 5972 w 10 PA f (and)2019 5972 w 10 CW f (n)2218 5972 w 10 PA f ( to this representation is entirely through macros; for)8 2384(. Access)1 378 2 2278 5972 t ( called)1 288(example, a macro)2 783 2 720 6092 t 10 CW f (cbits)1818 6092 w 10 PA f (fetches the character bits, another called)5 1774 1 2145 6092 t 10 CW f (setsfbits)3946 6092 w 10 PA f (sets the size)2 527 1 4513 6092 t (and font bits, and so on.)5 1061 1 720 6212 t ( examine)1 414(This stage took several weeks of meticulous checking, since it was necessary to)12 3656 2 970 6368 t ( in the program to decide whether it was being used)10 2326(every integer constant, variable and function)5 1994 2 720 6488 t ( are now all identified and)5 1165( These)1 307(to store an internal character.)4 1291 3 720 6608 t 10 CW f (typedef)3508 6608 w 10 PA f ('d for future reference.)3 998 1 3928 6608 t ( since the program must)4 1104(Widening 16 bits to 32 turns out to be quite costly on the PDP-11,)13 2966 2 970 6764 t (process)720 6884 w 10 CW f (long)1085 6884 w 10 PA f ( result is approximately a 25% increase in pro-)8 2105( The)1 225(integers instead of short ones.)4 1351 3 1359 6884 t ( temporary file in which)4 1084( the)1 167( Furthermore)1 619(gram size and perhaps 25% increase in run time.)8 2165 4 720 7004 t 8 PA f (TROFF)4784 7004 w 10 PA f (keeps its macro and string definitions doubles in size \(to 256k bytes\).)11 3037 1 720 7124 t ( way \320 it still)4 625(Note that at this stage the program has not been changed in any fundamental)13 3445 2 970 7280 t cleartomark showpage saveobj restore %%EndPage: 3 5 %%Page: 4 6 /saveobj save def mark 6 pagesetup 10 PA f (- 4 -)2 166 1 2797 480 t ( a bit-for-bit regression test against the original version can be per-)11 3132(generates CAT output, so)3 1188 2 720 840 t ( maintaining sanity in both pro-)5 1442( proved to be very important for)6 1471( This)1 246(formed after each change.)3 1161 4 720 960 t (gram and programmer.)2 1043 1 720 1080 t 10 PB f ( Machine Parameters)2 954(4. Dynamic)1 541 2 720 1320 t 10 PA f ( the the numbers in the program that depend on the CAT and)12 2797(The next step was to find all)6 1273 2 970 1476 t ( contributed marginally to slower execution, since many val-)8 2703( also)1 205( This)1 244(replace them by variables.)3 1168 4 720 1596 t (ues and expressions that were constants now became variables.)8 2796 1 720 1716 t ( make it possible to load a descrip-)7 1564(With parameters identified as such, the next step was to)9 2506 2 970 1872 t (tion of the typesetter each time)5 1436 1 720 1992 t 8 PA f (TROFF)2195 1992 w 10 PA f ( each)1 238(is run, rather than creating a compiled version for)8 2312 2 2490 1992 t ( and created for each typesetter)5 1447( a set of description files was designed)7 1771(typesetter. Accordingly,)1 1102 3 720 2112 t ( parameters of the)3 807( description really comes in two pieces \320 a table describing)10 2664( The)1 220(and each font.)2 629 4 720 2232 t ( illustrate, here is the parameter file for the CAT:)9 2145( To)1 166(machine, and a table of widths for each font.)8 1960 3 720 2352 t 9 CW f (# Graphic Systems CAT-4)3 1242 1 864 2522 t (res 432)1 378 1 864 2632 t (hor 1)1 270 1 864 2742 t (vert 3)1 324 1 864 2852 t (unitwidth 6)1 594 1 864 2962 t (sizes 6 7 8 9 10 11 12 14 16 18 20 22 24 28 36 0)16 2592 1 864 3072 t (fonts 4 R I B S)5 810 1 864 3182 t (charset)864 3292 w (\\| \\\303 \\- \\_)3 756 1 864 3402 t (hy bu sq em ru 14 12 34 mi fi fl ff Fi Fl de dg sc fm aa ga)19 4212 1 864 3512 t (ul sl *a *b *g *d *e *z *y *h *i *k *l *m *n *c *o *p *r *s)19 4212 1 864 3622 t (*t *u *f *x *q *w *A *B *G *D *E *Z *Y *H *I *K *L *M *N *C)19 4212 1 864 3732 t (*O *P *R *S *T *U *F *X *Q *W sr ts rn >= <= == \304= ap != ->)19 4212 1 864 3842 t (<- ua da eq mu di +- cu ca sb sp ib ip if pd gr no is pt es)19 4212 1 864 3952 t (mo pl rg co br ct dd rh lh ** bs or ci lt lb rt rb lk rk bv)19 4212 1 864 4062 t (lf rf lc rc)3 756 1 864 4172 t 10 PA f (A)720 4352 w 10 CW f (#)828 4352 w 10 PA f (introduces a comment.)2 1019 1 918 4352 t 10 CW f (res)1992 4352 w 10 PA f (is the machine resolution in units per inch.)7 1915 1 2202 4352 t 10 CW f (hor)4172 4352 w 10 PA f (and)4382 4352 w 10 CW f (vert)4581 4352 w 10 PA f (give)4851 4352 w ( it is possible to move in the corresponding direction.)9 2365(the minimum number of machine units that)6 1955 2 720 4472 t 10 CW f (unitwidth)720 4592 w 10 PA f ( which the character widths map directly into machine)8 2564(specifies the point size at)4 1173 2 1303 4592 t (units.)720 4712 w 10 CW f (sizes)1021 4712 w 10 PA f ( legal point sizes, terminated by a zero.)7 1746(lists the set of)3 612 2 1350 4712 t 10 CW f (fonts)3761 4712 w 10 PA f (lists the default set of)4 951 1 4089 4712 t ( can be overridden by subsequent)5 1534(fonts \(which)1 559 2 720 4832 t 10 CW f (.fp)2847 4832 w 10 PA f (commands\).)3061 4832 w 10 CW f (charset)3664 4832 w 10 PA f (introduces the set of)3 922 1 4118 4832 t (legitimate special names \(names of the form)6 1943 1 720 4952 t 10 CW f (\\\(xx)2688 4952 w 10 PA f (, including some special cases like)5 1497 1 2928 4952 t 10 CW f (\\|)4450 4952 w 10 PA f (\).)4570 4952 w ( 202 has)2 358( The)1 221( here is the description file for the Mergenthaler Linotron 202.)10 2766(For comparison,)1 725 4 970 5108 t ( 202 actu-)2 422( \(The)1 251( the CAT, and quite a few more characters as well.)10 2229(many more sizes and fonts than)5 1418 4 720 5228 t (ally permits nearly 250 sizes; no use has yet been found for most of them.\))14 3266 1 720 5348 t cleartomark showpage saveobj restore %%EndPage: 4 6 %%Page: 5 7 /saveobj save def mark 7 pagesetup 10 PA f (- 5 -)2 166 1 2797 480 t 9 CW f (# Mergenthaler Linotron 202)3 1458 1 1008 830 t (fonts 10 R I B BI H HB HK PO CH S)11 1782 1 1008 940 t (sizes 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)16 2592 1 1008 1050 t (21 22 23 24 25 26 27 28 29 30 32 34 36 38 40)14 2376 1 1170 1160 t (45 50 55 60 66 72 78 84 90 96 102 108 0)12 2106 1 1170 1270 t (res 972)1 378 1 1008 1380 t (hor 1)1 270 1 1008 1490 t (vert 2)1 324 1 1008 1600 t (unitwidth 4)1 594 1 1008 1710 t (paperwidth 7500)1 810 1 1008 1820 t (charset)1008 1930 w (\\| \\\303 \\- \\_)3 756 1 1008 2040 t (** *C *D *F *G *H *L *P *Q *S *W *a *b *c *d *e *f *g *h)18 3996 1 1008 2150 t (*i *k *l *m *n *p *q *r *s *t *w *x *y *z +- -> <- <=)17 3780 1 1008 2260 t (== >= L. Sl al aa ap b0 br bs bu bv ca)12 2700 1 1008 2370 t (cd ci co ct cu dd de dg di em eq es fe fm ga gr hy)16 3564 1 1008 2480 t (ib if ip is l. lh ma mi mo mu no or pd pl pp pt rg rh ru)18 3996 1 1008 2590 t (sb sc sl sp sq sr tm tp ts \304= \304\304 ul rn en)13 2916 1 1008 2700 t (lf rf lc rc lt rt lb rb lk rk != ua da 12 fa te ma fe)17 3780 1 1008 2810 t (hc .. ob bx *o *u b9 14 34 ss vr)10 2268 1 1008 2920 t 10 CW f (paperwidth)720 3100 w 10 PA f (specifies the maximum width of paper in units, overriding the default 7)11 3163 1 1345 3100 t 10 S1 f ()4508 3100 w cleartomark saveobj restore %%BeginGlobal /build_34 { pop /optsize ptsize def /osize size def /ofont font def optsize 2 div dup R exch R f 0 size 2 mul 3 div dup neg exch 0 exch rmoveto (3) show rmoveto optsize R f (\244) show f (4) show optsize ofont f } def %%EndGlobal /saveobj save def mark 10 S1 f 4508 3100 m 75 build_34 4583 3100 m 10 PA f (".)4583 3100 w ( is one file per font that lists)7 1313(In addition to this description file \(one per typesetter\), there)9 2757 2 970 3256 t ( is part of the description of Times Roman for the CAT:)11 2431( Here)1 269(properties of that font.)3 996 3 720 3376 t 9 CW f (# Times Roman for CAT-4)4 1242 1 1008 3546 t (name R)1 324 1 1008 3656 t (internalname 1)1 756 1 1008 3766 t (ligatures ff fi fl ffi ffl 0)6 1512 1 1008 3876 t (charset)1008 3986 w ( 0 0)2 864(\\| 6)1 486 2 1008 4096 t ( 0 0)2 864(\\\303 3)1 486 2 1008 4206 t ( 025)1 540( 0)1 378(a 17)1 540 3 1008 4316 t ( 012)1 540( 2)1 378(b 20)1 540 3 1008 4426 t ( 027)1 540( 0)1 378(c 16)1 540 3 1008 4536 t ( 011)1 540( 2)1 378(d 20)1 540 3 1008 4646 t ( 031)1 540( 0)1 378(e 18)1 540 3 1008 4756 t ( 014)1 540( 2)1 378(f 13)1 540 3 1008 4866 t (...)1008 4976 w ( 0145)1 594( 2)1 378(! 12)1 540 3 1008 5086 t ( 050)1 540( 2)1 378(& 28)1 540 3 1008 5196 t ( 0132)1 594( 2)1 378(\( 16)1 540 3 1008 5306 t ( 0133)1 594( 2)1 378(\) 16)1 540 3 1008 5416 t ( 0122)1 594( 0)1 378(* 16)1 540 3 1008 5526 t ( 0143)1 594( 0)1 378(+ 36)1 540 3 1008 5636 t ( 047)1 540( 0)1 378(, 12)1 540 3 1008 5746 t ( hyphen)1 594( 040)1 540(hy 13 0)2 918 3 1008 5856 t (- " =hy)2 1026 1 1008 5966 t ( 0123)1 594(\\- 36 0)2 918 2 1008 6076 t ( 044)1 540( 0)1 378(. 10)1 540 3 1008 6186 t ( degree)1 540( 0136)1 594(de 15 0)2 918 3 1008 6296 t ( dagger)1 540( 0137)1 594(dg 20 0)2 918 3 1008 6406 t ( 0 0150)2 1026(fm 8)1 486 2 1008 6516 t ( 0141)1 594(rg 20 0)2 918 2 1008 6626 t ( 0153)1 594(co 20 0)2 918 2 1008 6736 t ( 0127)1 594(ct 19 0)2 918 2 1008 6846 t (...)1008 6956 w 10 PA f (The)970 7172 w 10 CW f (name)1171 7172 w 10 PA f (is the external)2 636 1 1445 7172 t 8 PA f (TROFF)2115 7172 w 10 PA f (name, one or two characters, as used in)7 1805 1 2406 7172 t 10 CW f (.ft)4246 7172 w 10 PA f (and)4461 7172 w 10 CW f (\\f)4665 7172 w 10 PA f (com-)4820 7172 w ( internal name is not used by)6 1314(mands. The)1 547 2 720 7292 t 8 PA f (TROFF)2612 7292 w 10 PA f ( If)1 122( for the postprocessors.)3 1040(itself, but is necessary)3 979 3 2899 7292 t cleartomark showpage saveobj restore %%EndPage: 5 7 %%Page: 6 8 /saveobj save def mark 8 pagesetup 10 PA f (- 6 -)2 166 1 2797 480 t ( font sep-)2 418( is possible to set the width of the space for each)11 2141( It)1 119(the font has ligatures, they are listed.)6 1642 4 720 840 t (arately with the)2 708 1 720 960 t 10 CW f (spacewidth)1458 960 w 10 PA f ( keyword)1 428( is also a)3 387( There)1 310(command, not illustrated here.)3 1378 4 2088 960 t 10 CW f (special)4620 960 w 10 PA f ( if the regular font does not)6 1211(to indicate that the font is a ``special'' font \320 one that is to be searched)15 3109 2 720 1080 t ( but they should)3 726( is no limit on the number of special fonts,)9 1872( There)1 307(contain the character requested.)3 1415 4 720 1200 t (be listed last in the)4 825 1 720 1320 t 10 CW f (fonts)1570 1320 w 10 PA f (part of the description file.)4 1173 1 1895 1320 t ( ascender/descender infor-)2 1222(The four columns of data are the character name, its width, its)11 2848 2 970 1476 t (mation \(1)1 424 1 720 1596 t 10 S f (\256)1172 1596 w 10 PA f (descender, 2)1 553 1 1299 1596 t 10 S f (\256)1880 1596 w 10 PA f (ascender, 3)1 493 1 2006 1596 t 10 S f (\256)2526 1596 w 10 PA f (both\), and the actual typesetter code required to print)8 2388 1 2652 1596 t ( size is)2 304( the point)2 436(it. When)1 407 3 720 1716 t 10 CW f (unitwidth)1899 1716 w 10 PA f ( the)1 171( If)1 124(, the width is the character width in machine units.)9 2306 3 2439 1716 t (name is a single character, it is taken simply as a normal)11 2511 1 720 1836 t 8 PA f (ASCII)3259 1836 w 10 PA f ( or more characters)3 856(character. Two)1 683 2 3501 1836 t (indicate a name of the form)5 1219 1 720 1956 t 10 CW f (\\\(xx)1965 1956 w 10 PA f ( exceptions like)2 685(; there are a handful of historical)6 1442 2 2205 1956 t 10 CW f (\\-)4359 1956 w 10 PA f ( width of)2 406(. A)1 155 2 4479 1956 t (""")720 2076 w 10 CW f (" " ")2 302 1 857 2076 t 10 PA f ( the character is a synonym for the immediately preceding character, as in)12 3261(indicates that)1 594 2 1185 2076 t 10 CW f (-)720 2196 w 10 PA f (and)805 2196 w 10 CW f (hy)999 2196 w 10 PA f ( may follow the four data fields.)6 1416(above. Comments)1 822 2 1144 2196 t ( text)1 198(There are significant advantages to having the font and typesetter descriptions merely)11 3872 2 970 2352 t (files that can be edited easily, but it is too time-consuming to load all this)14 3287 1 720 2472 t 8 PA f (ASCII)4037 2472 w 10 PA f (information each)1 758 1 4282 2472 t (time)720 2592 w 8 PA f (TROFF)959 2592 w 10 PA f ( a separate program called)4 1235( Thus)1 287(is invoked.)1 500 3 1256 2592 t 10 CW f (makedev)3319 2592 w 10 PA f ( compile it into a)4 808(is used to)2 452 2 3780 2592 t (binary file that can be read by)6 1328 1 720 2712 t 8 PA f (TROFF)2075 2712 w 10 PA f ( When)1 315( single read.)2 538(in a)1 164 3 2358 2712 t 8 PA f (TROFF)3401 2712 w 10 PA f (is invoked, an argument of the)5 1357 1 3683 2712 t (form)720 2832 w 10 CW f (-Txxx)961 2832 w 10 PA f (tells it to load the description file for typesetter)8 2072 1 1286 2832 t 10 CW f (xxx)3383 2832 w 10 PA f (from a standard directory.)3 1167 1 3588 2832 t ( is)1 114(Descriptions for the default fonts are compiled into the description file; if a new font)14 3956 2 970 2988 t (requested by a)2 673 1 720 3108 t 10 CW f (.fp)1431 3108 w 10 PA f ( The)1 229(command, its description data replaces the original values.)7 2688 2 1649 3108 t 10 CW f (.ft)4603 3108 w 10 PA f (com-)4820 3108 w ( if the requested font is not currently ``mounted'', its description)10 2884(mand has been modified so that)5 1436 2 720 3228 t ( there is only one such position, each new)8 1860( Since)1 285( 0.)1 103(data will be placed in the hidden font position)8 2072 4 720 3348 t ( make occasional use)3 926( mechanism is intended to)4 1160( This)1 240(non-standard font overlays the previous one.)5 1994 4 720 3468 t (of non-standard fonts easy; the)4 1368 1 720 3588 t 10 CW f (.fp)2113 3588 w 10 PA f (mechanism remains necessary for other purposes.)5 2207 1 2318 3588 t ( of special fonts has been generalized somewhat \320 rather than a single special)13 3581(The notion)1 489 2 970 3744 t ( algorithm currently used is to search for each character on the cur-)12 2974( The)1 218(font, there can be several.)4 1128 3 720 3864 t (rent font; if it is not found there, then the special fonts are searched in order \(as given in the)19 4320 1 720 3984 t ( than that, the treatment of special fonts is essentially unchanged.)10 2882( Other)1 308(description file\).)1 721 3 720 4104 t ( stage in the modifications to)5 1279(At this)1 298 2 970 4260 t 8 PA f (TROFF)2573 4260 w 10 PA f (, all internal arithmetic is done in terms of the res-)10 2211 1 2829 4260 t ( defined by the val-)4 864( character set and character widths are)6 1718( The)1 220(olution of the specified typesetter.)4 1518 4 720 4380 t ( name to what gets)4 895( the mapping from character)4 1319( Indeed,)1 399(ues loaded from the font description.)5 1707 4 720 4500 t (printed is determined by this table \320 fonts are no longer all isomorphic.)12 3193 1 720 4620 t ( clear)1 244(Although it is certainly convenient for testing during program development, it is not)12 3826 2 970 4776 t ( for the typesetter each time)5 1241(that loading the font information)4 1470 2 720 4896 t 8 PA f (TROFF)3458 4896 w 10 PA f (is invoked is the right way to)6 1299 1 3741 4896 t ( a production mode it)4 963( In)1 143( a single kind of typesetter.)5 1200(operate in an environment that supports only)6 2014 4 720 5016 t (might be desirable to compile in the default information for the standard typesetter.)12 3706 1 720 5136 t 10 PB f ( Language)1 470(5. Output)1 457 2 720 5376 t 10 PA f ( output of)2 441(The final step is to modify the)6 1319 2 970 5532 t 8 PA f (TROFF)2756 5532 w 10 PA f ( new)1 215( The)1 218(so that it is typesetter-independent.)4 1569 3 3038 5532 t (version of)1 448 1 720 5652 t 8 PA f (TROFF)1199 5652 w 10 PA f ( it is)2 195( Rather,)1 377(produces output that is not intended to go directly to a typesetter.)11 2982 3 1486 5652 t (more or less independent of any typesetter, except that the numbers in it have been computed on)16 4320 1 720 5772 t (the basis of the resolution specified in the description file for the intended typesetter.)13 3745 1 720 5892 t (The output language is simple:)4 1367 1 970 6048 t cleartomark showpage saveobj restore %%EndPage: 6 8 %%Page: 7 9 /saveobj save def mark 9 pagesetup 10 PA f (- 7 -)2 166 1 2797 480 t 9 CW f (s)1008 830 w 9 PI f (n)1062 830 w 9 CW f (size in points)2 756 1 1512 830 t (f)1008 940 w 9 PI f (n)1062 940 w 9 CW f (font as number from 1 to)5 1296 1 1512 940 t 9 PI f (n)2862 940 w 9 CW f (c)1008 1050 w 9 PI f (x)1062 1050 w 9 CW f (ASCII character)1 810 1 1512 1050 t 9 PI f (x)2376 1050 w 9 CW f (C)1008 1160 w 9 PI f (xy)1062 1160 w 9 CW f (character \\\()1 648 1 1512 1160 t 9 PI f (xy)2160 1160 w 9 CW f (; terminate)1 594 1 2250 1160 t 9 PI f (xy)2898 1160 w 9 CW f (by white space)2 756 1 3042 1160 t (H)1008 1270 w 9 PI f (n)1062 1270 w 9 CW f (go to absolute horizontal position)4 1836 1 1512 1270 t 9 PI f (n)3402 1270 w 9 CW f (. \()1 162 1 3452 1270 t 9 PI f (n)3614 1270 w 9 CW f (> 0\))1 216 1 3718 1270 t (V)1008 1380 w 9 PI f (n)1062 1380 w 9 CW f (go to absolute vertical position)4 1728 1 1512 1380 t 9 PI f (n)3294 1380 w 9 CW f (\(down is positive\))2 972 1 3398 1380 t (h)1008 1490 w 9 PI f (n)1062 1490 w 9 CW f (go)1512 1490 w 9 PI f (n)1674 1490 w 9 CW f (units horizontally \(to the right;)4 1782 1 1778 1490 t 9 PI f (n)3614 1490 w 9 CW f (> 0\))1 216 1 3718 1490 t (v)1008 1600 w 9 PI f (n)1062 1600 w 9 CW f (go)1512 1600 w 9 PI f (n)1674 1600 w 9 CW f (units vertically \(down;)2 1242 1 1778 1600 t 9 PI f (n)3074 1600 w 9 CW f (> 0\))1 216 1 3178 1600 t 9 PI f (nnc)1008 1710 w 9 CW f (move right)1 540 1 1512 1710 t 9 PI f (nn)2106 1710 w 9 CW f (, then print)2 648 1 2206 1710 t 9 PI f (c)2908 1710 w 9 CW f (\()2999 1710 w 9 PI f (nn)3053 1710 w 9 CW f (is exactly 2 digits!\))3 1134 1 3207 1710 t (n)1008 1820 w 9 PI f (b a)1 104 1 1062 1820 t 9 CW f (end of line \(information only -- no action needed\))8 2700 1 1512 1820 t 9 PI f (b)1512 1930 w 9 CW f (= space before line,)3 1080 1 1607 1930 t 9 PI f (a)2741 1930 w 9 CW f (= after)1 378 1 2835 1930 t ( word space \(information only -- no action needed\))8 2700(w paddable)1 936 2 1008 2040 t (p)1008 2150 w 9 PI f (n)1062 2150 w 9 CW f (new page)1 432 1 1512 2150 t 9 PI f (n)1998 2150 w 9 CW f (begins -- set V to 0)5 1080 1 2102 2150 t ( control functions)2 972( device)1 450(x ...\\n)1 378 3 1008 2260 t ( functions \(graphics\))2 1134( drawing)1 504(D ...\\n)1 378 3 1008 2370 t 10 PA f (Encoding small horizontal motions followed by a character as)8 2770 1 720 2550 t 10 PI f (nnc)3520 2550 w 10 PA f ( file size by)3 512(shrinks the output)2 825 2 3703 2550 t (about 35% and run-time by about 15%.)6 1718 1 720 2670 t ( graphics commands are intended as open-ended families, to be)9 2999(The device control and)3 1071 2 970 2826 t (expanded as needed.)2 929 1 720 2946 t 9 CW f ( init)1 558(x i)1 162 2 1008 3116 t (x T)1 162 1 1008 3226 t 9 PI f (s)1224 3226 w 9 CW f (name of typesetter is)3 1134 1 1512 3226 t 9 PI f (s)2700 3226 w 9 CW f (x r)1 162 1 1008 3336 t 9 PI f (n h v)2 186 1 1224 3336 t 9 CW f (resolution is)1 702 1 1512 3336 t 9 PI f (n)2268 3336 w 9 CW f (/inch,)2318 3336 w 9 PI f (h)2696 3336 w 9 CW f (= minimum horizontal motion,)3 1512 1 2795 3336 t 9 PI f (v)4361 3336 w 9 CW f (= min vert)2 540 1 4460 3336 t ( \(can restart\))2 756( pause)1 612(x p)1 162 3 1008 3446 t ( -- done forever)3 864( stop)1 558(x s)1 162 3 1008 3556 t ( trailer)1 432( generate)1 774(x t)1 162 3 1008 3666 t (x f)1 162 1 1008 3776 t 9 PI f (n s)1 108 1 1224 3776 t 9 CW f (font position)1 702 1 1512 3776 t 9 PI f (n)2268 3776 w 9 CW f (contains font)1 702 1 2372 3776 t 9 PI f (s)3128 3776 w 9 CW f (x H)1 162 1 1008 3886 t 9 PI f (n)1224 3886 w 9 CW f (set character height to)3 1242 1 1512 3886 t 9 PI f (n)2808 3886 w 9 CW f (x S)1 162 1 1008 3996 t 9 PI f (n)1224 3996 w 9 CW f (set slant to)2 648 1 1512 3996 t 9 PI f (n)2214 3996 w 10 PA f (Subcommands like ``)2 922 1 720 4176 t 10 CW f (i)1642 4176 w 10 PA f ('' are often spelled out like ``)6 1254 1 1702 4176 t 10 CW f (init)2956 4176 w 10 PA f (''.)3196 4176 w (The drawing functions are)3 1169 1 970 4332 t 9 CW f (Dl)1008 4502 w 9 PI f (dh dv)1 203 1 1170 4502 t 9 CW f (draw line from current position by)5 1836 1 1728 4502 t 9 PI f (dh dv)1 203 1 3618 4502 t 9 CW f (Dc)1008 4612 w 9 PI f (d)1170 4612 w 9 CW f (draw circle of diameter)3 1242 1 1728 4612 t 9 PI f (d)3024 4612 w 9 CW f (with left side here)3 1026 1 3123 4612 t (De)1008 4722 w 9 PI f (d1 d2)1 203 1 1170 4722 t 9 CW f (draw ellipse of diameters)3 1350 1 1728 4722 t 9 PI f (d1 d2)1 203 1 3132 4722 t 9 CW f (Da)1008 4832 w 9 PI f (dh1 dv1 dh2 dv2)3 609 1 1170 4832 t 9 CW f (draw arc from current position to)5 1782 1 1728 4942 t 9 PI f (dh1+dh2 dv1+dv2)1 673 1 3564 4942 t 9 CW f (,)4237 4942 w (center at)1 486 1 1728 5052 t 9 PI f (dh1 dv1)1 293 1 2268 5052 t 9 CW f (from current position)2 1134 1 2615 5052 t (D\304)1008 5162 w 9 PI f (dh1 dv1 dh2 dv2 ...)4 701 1 1170 5162 t 9 CW f (draw B-spline from current position to)5 2052 1 1728 5272 t 9 PI f (dh1 dv1)1 293 1 3834 5272 t 9 CW f (,)4127 5272 w (then to)1 378 1 1728 5382 t 9 PI f (dh2 dv2)1 293 1 2160 5382 t 9 CW f (, then to ...)3 702 1 2453 5382 t 10 PA f ( of these,)2 410(In all)1 233 2 720 5562 t 10 PI f (dh dv)1 234 1 1397 5562 t 10 PA f (is an increment on the current horizontal and vertical position, with down)11 3375 1 1665 5562 t (and right positive.)2 812 1 720 5682 t ( sepa-)1 261(Blanks, tabs and newlines may occur as separators in the input, and are mandatory to)14 3809 2 970 5838 t (rate constructions that would otherwise be confused.)6 2341 1 720 5958 t (To illustrate, the following is the output from the input)9 2431 1 970 6114 t 9 CW f (hello)1008 6284 w (.br)1008 6394 w (.ps 20)1 324 1 1008 6504 t (.ft H)1 270 1 1008 6614 t (goodbye)1008 6724 w 10 PA f (using)720 6904 w 10 CW f (-Tcat)990 6904 w 10 PA f (:)1290 6904 w cleartomark showpage saveobj restore %%EndPage: 7 9 %%Page: 8 10 /saveobj save def mark 10 pagesetup 10 PA f (- 8 -)2 166 1 2797 480 t 9 CW f (x T cat)2 378 1 1008 830 t (x res 432 1 3)4 702 1 1008 940 t (x init)1 324 1 1008 1050 t (x font 1 R)3 540 1 1008 1160 t (x font 2 I)3 540 1 1008 1270 t (x font 3 B)3 540 1 1008 1380 t (x font 4 S)3 540 1 1008 1490 t (V0)1008 1600 w (p1)1008 1710 w (s10)1008 1820 w (f1)1008 1930 w (H416)1008 2040 w (V72)1008 2150 w (ch)1008 2260 w (35e30l17l17on72 0)1 918 1 1008 2370 t (x font 0 H)3 540 1 1008 2480 t (f1)1008 2590 w (H416)1008 2700 w (f0)1008 2810 w (s20)1008 2920 w (V144)1008 3030 w (cg)1008 3140 w (70o70o70d73b73y67en72 0)1 1242 1 1008 3250 t (x trailer)1 486 1 1008 3360 t (V4752)1008 3470 w (x stop)1 324 1 1008 3580 t 10 PA f ( how the numbers are more than twice as big,)9 2175( Notice)1 360( from the 202.)3 659(Here is the same output)4 1126 4 720 3760 t ( notice that the font)4 859( Also)1 254( of the 202.)3 477(reflecting the higher resolution)3 1373 4 720 3880 t 10 CW f (H)3708 3880 w 10 PA f (is a standard font on the 202)6 1247 1 3793 3880 t (so no special loading is needed to switch to it.)9 2022 1 720 4000 t cleartomark showpage saveobj restore %%EndPage: 8 10 %%Page: 9 11 /saveobj save def mark 11 pagesetup 10 PA f (- 9 -)2 166 1 2797 480 t 9 CW f (x T 202)2 378 1 1008 830 t (x res 972 1 2)4 702 1 1008 940 t (x init)1 324 1 1008 1050 t (x font 1 R)3 540 1 1008 1160 t (x font 2 I)3 540 1 1008 1270 t (x font 3 B)3 540 1 1008 1380 t (x font 4 BI)3 594 1 1008 1490 t (x font 5 H)3 540 1 1008 1600 t (x font 6 HB)3 594 1 1008 1710 t (x font 7 HK)3 594 1 1008 1820 t (x font 8 PO)3 594 1 1008 1930 t (x font 9 CH)3 594 1 1008 2040 t (x font 10 S)3 594 1 1008 2150 t (V0)1008 2260 w (p1)1008 2370 w (s10)1008 2480 w (f1)1008 2590 w (H936)1008 2700 w (V156)1008 2810 w (ch)1008 2920 w (73e63l35l35on156 0)1 972 1 1008 3030 t (H936)1008 3140 w (f5)1008 3250 w (s20)1008 3360 w (V312)1008 3470 w (cg)1008 3580 w (h150co)1008 3690 w (h150co)1008 3800 w (h150cd)1008 3910 w (h150cb)1008 4020 w (h150cy)1008 4130 w (h135ce)1008 4240 w (n156 0)1 324 1 1008 4350 t (x trailer)1 486 1 1008 4460 t (V10692)1008 4570 w (x stop)1 324 1 1008 4680 t 10 PA f ( guaranteed to be)3 809(The output is)2 613 2 970 4896 t 8 PA f (ASCII)2430 4896 w 10 PA f (, and thus amenable to processing by all the normal)9 2395 1 2645 4896 t ( it is straightforward to write a prototype driver for a par-)11 2612( language is simple \320)4 998( The)1 223(Unix tools.)1 487 4 720 5016 t ( may take)2 441(ticular typesetter, especially when one can steal an existing one as a model, although it)14 3879 2 720 5136 t ( form also demystifies)3 1027( This)1 257( one of production quality.)4 1250(some effort to make)3 934 4 720 5256 t 8 PA f (TROFF)4230 5256 w 10 PA f (output and)1 512 1 4528 5256 t (makes it possible for anyone to write other programs to process or generate it.)13 3452 1 720 5376 t ( as the output intended for the CAT.)7 1710(On the other hand, it is about twice as voluminous)9 2360 2 970 5532 t (Cleverness \(or sacrificing)2 1140 1 720 5652 t 8 PA f (ASCII)1898 5652 w 10 PA f ( much more than one byte per)6 1403(-ness\) could bring it down to not)6 1524 2 2113 5652 t (character printed, but so far I have not felt this to be very important.)13 3013 1 720 5772 t ( not really much to say about the post-processors.)8 2232(There is)1 355 2 970 5928 t 8 PA f (D202)3612 5928 w 10 PA f (drives the 202,)2 650 1 3824 5928 t 8 PA f (DCAT)4504 5928 w 10 PA f (drives)4764 5928 w ( the vital boustrophedon and size-sorting features are)7 2437(the CAT \(although not very efficiently \320)6 1883 2 720 6048 t (not there\),)1 458 1 720 6168 t 8 PA f (DAPS)1205 6168 w 10 PA f (drives the APS-5,)2 768 1 1446 6168 t 8 PA f (DCAN)2241 6168 w 10 PA f (drives the Canon, and)3 982 1 2515 6168 t 8 PA f (TC)3524 6168 w 10 PA f (\(notice the parallel name struc-)4 1382 1 3658 6168 t ( also rough and ready drivers for other display termi-)9 2424( are)1 170( There)1 312(ture\) drives the Tektronix 4014.)4 1414 4 720 6288 t (nals.)720 6408 w ( drivers are able to offer useful)6 1421(Since it is easy to identify page and line boundaries, some)10 2649 2 970 6564 t (features that were not feasible with the older)7 2019 1 720 6684 t 8 PA f (TROFF)2770 6684 w 10 PA f ( example,)1 431(. For)1 232 2 3026 6684 t 8 PA f (TC)3720 6684 w 10 PA f (permits the user to ask for)5 1183 1 3857 6684 t (specific pages by number, and to skip back and forth in the document.)12 3177 1 720 6804 t 8 PA f (D202)3953 6804 w 10 PA f (displays the output)2 873 1 4167 6804 t ( stop at specified pages if requested.)6 1656(page number on the operator's control panel and will also)9 2664 2 720 6924 t (An experimental postprocessor called)3 1677 1 720 7044 t 8 PA f (DSORT)2425 7044 w 10 PA f (sorts the intermediate language by vertical position,)6 2317 1 2723 7044 t ( complicated)1 573(to minimize vertical motion; it is intended for printing)8 2463 2 720 7164 t 8 PA f (PIC)3788 7164 w 10 PA f (diagrams and for circuit)3 1088 1 3952 7164 t (diagrams produced by)2 1028 1 720 7284 t 8 PA f (PLTROFF)1784 7284 w 10 PA f (. \()1 119 1 2137 7284 t 8 PA f (PLTROFF)2256 7284 w 10 PA f (converts the standard Unix plot language into)6 2102 1 2645 7284 t 8 PA f (TROFF)4784 7284 w cleartomark showpage saveobj restore %%EndPage: 9 11 %%Page: 10 12 /saveobj save def mark 12 pagesetup 10 PA f (- 10 -)2 216 1 2772 480 t ( only)1 247( of the post-processors can scan their input relatively quickly to print)11 3318(commands.\) All)1 755 3 720 840 t (selected pages.)1 659 1 720 960 t 10 PB f ( Things)1 347(6. New)1 341 2 720 1200 t 10 PA f (During the process of making these changes to)7 2063 1 970 1356 t 8 PA f (TROFF)3058 1356 w 10 PA f ( changes to the pro-)4 875(, I have made some)4 851 2 3314 1356 t (gram that are visible to users \(thus violating the avowed goal of keeping it compatible\).)14 3861 1 720 1476 t ( no longer any)3 686( example, there is)3 818( For)1 216(Some changes are simply the easing of restrictions.)7 2350 4 970 1632 t ( fonts that can occur on a page \(if one's typesetter is up to it\), nor does the)17 3307(limit on the number of)4 1013 2 720 1752 t 10 CW f (.fp)720 1872 w 10 PA f ( Fur-)1 250( ``mounting'' a new font have to occur only at the beginning.)11 2798(command that requests)2 1057 3 935 1872 t (thermore, a font may be accessed merely by naming it \320 the command)12 3144 1 720 1992 t 9 CW f (\\f\(ARBell Laboratories\\fP)1 1350 1 1008 2162 t 10 PA f (will produce)1 563 1 720 2342 t 9 AR f (Bell Laboratories)1 710 1 1008 2512 t 10 PA f (\(The font)1 404 1 720 2692 t 10 CW f (AR)1149 2692 w 10 PA f (is Avant-Garde Book. Obviously two-letter font names will have to go.\))10 3156 1 1294 2692 t ( Thus,)1 298( longer have to all be isomorphic.)6 1484(Character sets can be sensibly defined since they no)8 2288 3 970 2848 t (for example, on the 202 the ``printout'' font)7 1903 1 720 2968 t 9 CW f (This one)1 432 1 1008 3138 t 10 PA f (includes a complete)2 902 1 720 3318 t 8 PA f (ASCII)1660 3318 w 10 PA f ( characters have the same width, even the word)8 2217( of the)2 303(alphabet. All)1 607 3 1913 3318 t (space \(defined by the)3 970 1 720 3438 t 10 CW f (spacewidth)1725 3438 w 10 PA f ( this font is suit-)4 745( Thus)1 280( description file\).)2 764(attribute in the font)3 891 4 2360 3438 t ( the other hand, some)4 1030( On)1 205(able for printing program listings without any special precautions.)8 3085 3 720 3558 t (fonts are rather small, containing only a handful of characters.)9 2745 1 720 3678 t ( For)1 210( point sizes are available, although there are still some limitations.)10 3004(Larger and smaller)2 856 3 970 3834 t (example,)720 3954 w 10 CW f (\\s72)1158 3954 w 10 PA f (is still parsed as a 7 point)6 1189 1 1436 3954 t 10 CW f (2)2663 3954 w 10 PA f ( least)1 239(, since changing this would affect at)6 1657 2 2723 3954 t 8 PA f (EQN)4656 3954 w 10 PA f (and)4871 3954 w ( \(Sadly,)1 368(probably other programs as well.)4 1515 2 720 4074 t 8 PA f (EQN)2639 4074 w 10 PA f ( be changed anyway \320 it also accepts an)8 1894(had to)1 293 2 2853 4074 t (option of the form)3 841 1 720 4194 t 10 CW f (-Txxx)1597 4194 w 10 PA f (.\) But)1 273 1 1897 4194 t 10 CW f (.ps 72)1 360 1 2206 4194 t 10 PA f (works fine: each input size is mapped into the closest)9 2438 1 2602 4194 t ( point sizes are not allowed and may never be.)9 2051( Fractional)1 494(legal size for the current typesetter.)5 1562 3 720 4314 t ( those typeset-)2 653(Character height and slant may be set independently of character width, for)11 3417 2 970 4470 t ( allow these operations.)3 1051(ters that)1 365 2 720 4590 t 10 CW f (\\H'n')2188 4590 w 10 PA f (sets the character height to)4 1189 1 2515 4590 t 10 CW f (n)3731 4590 w 10 PA f (points,)3818 4590 w 10 CW f (\\H')4147 4590 w 10 S f (\261)4327 4590 w 10 CW f (n')4382 4590 w 10 PA f (sets it to)2 369 1 4529 4590 t 10 S f (\261)4925 4590 w 10 CW f (n)4980 4590 w 10 PA f (from the current point size, and)5 1461 1 720 4710 t 10 CW f (\\H'0')2218 4710 w 10 PA f (restores it to normal height.)4 1273 1 2555 4710 t 10 CW f (\\S'n')3890 4710 w 10 PA f (sets the slant to)3 715 1 4227 4710 t 10 CW f (n)4980 4710 w 10 PA f (degrees positive or negative; if)4 1355 1 720 4830 t 10 CW f (n)2100 4830 w 10 PA f (is zero, slanting is turned off.)5 1286 1 2185 4830 t ( eliminated \(e.g.,)2 749(Some obsolete commands have been)4 1640 2 970 4986 t 10 CW f (.fz)3391 4986 w 10 PA f (,)3571 4986 w 10 CW f (.li)3628 4986 w 10 PA f (; the command line options)4 1232 1 3808 4986 t (for constant-size printing and suppressing boustrophedon; all code related to)9 3415 1 720 5106 t 8 PA f (GCOS)4160 5106 w 10 PA f (\).)4383 5106 w (A new command)2 805 1 970 5262 t 10 CW f (.sy)1822 5262 w 10 PA f (has been added to permit calling another program from within)9 2990 1 2050 5262 t 8 PA f (TROFF)720 5382 w 10 PA f (:)976 5382 w 9 CW f (.sy)1008 5552 w 9 PI f (command line)1 510 1 1224 5552 t 10 PA f (causes)720 5732 w 10 PI f (command line)1 573 1 1037 5732 t 10 PA f ( output is)2 434( The)1 223(to be executed.)2 672 3 1641 5732 t 10 PI f (not)3001 5732 w 10 PA f ( the)1 171(automatically collected anywhere, but)3 1704 2 3165 5732 t (new number register)2 926 1 720 5852 t 10 CW f (\\n\($$)1672 5852 w 10 PA f (\(the process id of the)4 924 1 1998 5852 t 8 PA f (TROFF)2948 5852 w 10 PA f ( create unique file)3 788(process\) can be used to)4 1022 2 3230 5852 t ( up with subsequent)3 921(names to be picked)3 868 2 720 5972 t 10 CW f (.so)2541 5972 w 10 PA f ( built-in string)2 648(commands. The)1 735 2 2753 5972 t 10 CW f (\\*\(.T)4168 5972 w 10 PA f (contains the)1 540 1 4500 5972 t (name of the current typesetter obtained from the)7 2154 1 720 6092 t 10 CW f (-T)2899 6092 w 10 PA f (argument or its default.)3 1046 1 3044 6092 t 10 PB f ( Commands)1 547(7. Graphics)1 540 2 720 6332 t 10 PA f ( significant new facility is the ability to draw simple graphical objects \320 diagonal)13 3656(The most)1 414 2 970 6488 t (lines, circles, ellipses, arcs, and splines \320 in)7 1924 1 720 6608 t 8 PA f (TROFF)2669 6608 w 10 PA f (.)2925 6608 w (The new graphical commands are)4 1496 1 970 6764 t cleartomark showpage saveobj restore %%EndPage: 10 12 %%Page: 11 13 /saveobj save def mark 13 pagesetup 10 PA f (- 11 -)2 216 1 2772 480 t 9 CW f (\\D'l)1008 830 w 9 PI f (dh dv)1 203 1 1247 830 t 9 CW f ( line from current position by)5 1620(' draw)1 494 2 1450 830 t 9 PI f (dh, dv)1 226 1 3618 830 t 9 CW f (\\D'c)1008 940 w 9 PI f (d)1247 940 w 9 CW f ( circle of diameter)3 1026(' draw)1 652 2 1292 940 t 9 PI f (d)3024 940 w 9 CW f (with left side at current position)5 1836 1 3123 940 t (\\D'e)1008 1050 w 9 PI f (d1 d2)1 203 1 1247 1050 t 9 CW f ( ellipse of diameters)3 1134(' draw)1 494 2 1450 1050 t 9 PI f (d1 d2)1 203 1 3132 1050 t 9 CW f (\\D'a)1008 1160 w 9 PI f (dh1 dv1 dh2 dv2)3 609 1 1247 1160 t 9 CW f (')1856 1160 w (draw arc from current position to)5 1782 1 1728 1270 t 9 PI f (dh1+dh2 dv1+dv2)1 673 1 3564 1270 t 9 CW f (,)4237 1270 w (with center at)2 756 1 1728 1380 t 9 PI f (dh1 dv1)1 293 1 2538 1380 t 9 CW f (from current position)2 1134 1 2885 1380 t (\\D'\304)1008 1490 w 9 PI f (dh1 dv1 dh2 dv2 ...)4 701 1 1247 1490 t 9 CW f (')1948 1490 w (draw B-spline from current position by)5 2052 1 1728 1600 t 9 PI f (dh1 dv1)1 293 1 3834 1600 t 9 CW f (then by)1 378 1 1728 1710 t 9 PI f (dh2 dv2)1 293 1 2160 1710 t 9 CW f (, then by)2 486 1 2453 1710 t 9 PI f (dh2, dv2)1 316 1 2993 1710 t 9 CW f (, then ...)2 540 1 3309 1710 t 10 PA f (For example, the input)3 1095 1 720 1890 t 10 CW f (\\D'e0.2i 0.1i')1 870 1 1870 1890 t 10 PA f (draws the ellipse)2 812 1 2795 1890 t cleartomark saveobj restore %%BeginGlobal % % Version 3.3.1 drawing procedures for dpost. Automatically pulled in when % needed. % /inpath false def /savematrix matrix def /Dl { inpath {pop pop neg lineto} {newpath neg moveto neg lineto stroke} ifelse } bind def /De { /y1 exch 2 div def /x1 exch 2 div def /savematrix savematrix currentmatrix def neg exch x1 add exch translate x1 y1 scale 0 0 1 0 360 inpath {1 0 moveto arc savematrix setmatrix} {newpath arc savematrix setmatrix stroke} ifelse } bind def /Da { /dy2 exch def /dx2 exch def /dy1 exch def /dx1 exch def dy1 add neg exch dx1 add exch dx1 dx1 mul dy1 dy1 mul add sqrt dy1 dx1 neg atan dy2 neg dx2 atan inpath {arc} {newpath arc stroke} ifelse } bind def /DA { /dy2 exch def /dx2 exch def /dy1 exch def /dx1 exch def dy1 add neg exch dx1 add exch dx1 dx1 mul dy1 dy1 mul add sqrt dy1 dx1 neg atan dy2 neg dx2 atan inpath {arcn} {newpath arcn stroke} ifelse } bind def /Ds { /y2 exch def /x2 exch def /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 5 x1 mul add 6 div y0 5 y1 mul add -6 div x2 5 x1 mul add 6 div y2 5 y1 mul add -6 div x1 x2 add 2 div y1 y2 add -2 div inpath {curveto} {newpath x0 x1 add 2 div y0 y1 add -2 div moveto curveto stroke} ifelse } bind def %%EndGlobal /saveobj save def mark 10 PA f 3663 1890 144 72 De (, and the input)3 741 1 3823 1890 t 10 CW f (\\D'l.2i)4620 1890 w (-.1i'\\D'l.1i .1i')1 1033 1 720 2010 t 10 PA f ( the line)2 377(will draw)1 442 2 1791 2010 t 2791 1938 2647 2010 Dl 2863 2010 2791 1938 Dl ( position after a graphical object has been)7 1907(. The)1 254 2 2879 2010 t ( with other)2 507( As)1 180( ``end'', where for circles and ellipses, the end is at the right side.)13 2981(drawn is at its)3 652 4 720 2130 t (commands, default units are ems horizontally and line spaces vertically.)9 3188 1 720 2250 t ( direct use, but for preprocessors like)6 1658(Realistically, these commands are not intended for)6 2251 2 970 2406 t 8 PA f (PIC)4908 2406 w 10 PA f (and)720 2526 w 8 PA f (IDEAL)914 2526 w 10 PA f (.)1163 2526 w ( discussion of the)3 797(The output generated by these commands is shown in the)9 2644 2 970 2682 t 8 PA f (TROFF)4447 2682 w 10 PA f (output)4739 2682 w ( than drawing the shape in)5 1260( Rather)1 361( earlier section.)2 698(language in an)2 684 4 720 2802 t 8 PA f (TROFF)3763 2802 w 10 PA f (, a command with the)4 1021 1 4019 2802 t ( the device post-processor, which does whatever it can)8 2511(proper parameters is passed through to)5 1809 2 720 2922 t (with the request.)2 744 1 720 3042 t 10 PB f ( Ends)1 252(8. Loose)1 392 2 720 3282 t 10 PA f (This version of)2 660 1 970 3438 t 8 PA f (TROFF)1657 3438 w 10 PA f ( experience with)2 734( of our)2 297( Most)1 277(has been in use since September of 1979.)7 1792 4 1940 3438 t ( been exercised)2 677(it has been on the 202 and Tektronix scopes, but the CAT and APS-5 drivers have)15 3643 2 720 3558 t (to some degree.)2 697 1 720 3678 t ( or that remain to be)5 938(As mentioned, there are some obvious things that could be improved)10 3132 2 970 3834 t ( instance,)1 428(added. For)1 524 2 720 3954 t 8 PA f (TROFF)1713 3954 w 10 PA f ('s bracket-building function)2 1258 1 1969 3954 t 10 CW f (\\b)3268 3954 w 10 PA f (really ought to be implemented by)5 1611 1 3429 3954 t (postprocessor, so that typesetters like the 202 can draw a character like)11 3192 1 720 4074 t 10 PA f 0 48 changefont ({)3943 4194 w 10 PA f ( of syn-)2 341(directly instead)1 692 2 4007 4074 t ( necessary to add ``modes'' to permit graphical)7 2190( also appears to be)4 889( It)1 135(thesizing it from pieces.)3 1106 4 720 4194 t (objects to be dotted, dashed, etc.)5 1427 1 720 4314 t ( is likely to be so forever, especially with the prolifera-)10 2475(Efficiency is always a problem, and)5 1595 2 970 4470 t ( improvements \(perhaps 10)3 1223( Small)1 303(tion of preprocessors generating ever more complicated input.)7 2794 3 720 4590 t ( the temporary file upon)4 1141( Placing)1 391( searching.)1 490(percent\) can be had from artifices like better table)8 2298 4 720 4710 t (which)720 4830 w 8 PA f (TROFF)1025 4830 w 10 PA f ( for another 10-20 percent on machines)6 1756(stores macro definitions in memory is good)6 1970 2 1314 4830 t (like the)1 333 1 720 4950 t 8 PA f (VAX)1085 4950 w 10 PA f ( speedup is likely without a)5 1263( no order-of-magnitude)2 1058( But)1 211(that have enough memory.)3 1217 4 1291 4950 t (gross revision of the basic design.)5 1483 1 720 5070 t (It is clear that)3 613 1 970 5226 t 8 PA f (TROFF)1613 5226 w 10 PA f ( is far)2 256(ought to be replaced by something better, but, as I said above, it)12 2885 2 1899 5226 t ( for better or worse,)4 881( So)1 160(from clear how to do the job a lot better.)9 1791 3 720 5346 t 8 PA f (TROFF)3579 5346 w 10 PA f ( us for a)3 358(is likely to be with)4 820 2 3862 5346 t (long time.)1 446 1 720 5466 t 10 PB f (Acknowledgements)720 5706 w 10 PA f ( taming)1 347(I am deeply indebted to Ken Thompson and Joe Condon, without whose efforts in)13 3723 2 970 5862 t (the Mergenthaler Linotron 202 the)4 1628 1 720 5982 t 8 PA f (TROFF)2400 5982 w 10 PA f ( here would be irrelevant.)4 1245(modifications discussed)1 1087 2 2708 5982 t ( am also grateful to Chris)5 1161( I)1 93( character-generating software.)2 1393(Thompson also provided most of the)5 1673 4 720 6102 t ( algorithm)1 464(Van Wyk for the line and circle drawing algorithms and to Theo Pavlidis for the spline)15 3856 2 720 6222 t (used by all the postprocessors.)4 1352 1 720 6342 t ( typography,'')1 639( E. Knuth, ``Mathematical)3 1155(1. Donald)1 580 3 720 6534 t 10 PI f (Bulletin \(New Series\) of the American Mathe-)6 1912 1 3128 6534 t (matical Society)1 612 1 970 6654 t 10 PB f (1)1607 6654 w 10 PA f (\(2\) \(1979\).)1 432 1 1657 6654 t ( Laborato-)1 467( Bell)1 227( Sci. Tech. Rep. 54,)4 852( F. Ossanna, ``NROFF/TROFF User's Manual,'' Comp.)6 2466(2. J.)1 308 5 720 6810 t ( Hill, NJ \(October 1976\).)4 1056(ries, Murray)1 575 2 970 6930 t ( A Crude Graphics Language for Typesetting,'' Comp. Sci.)8 2723( W. Kernighan, ``PIC \320)4 1109(3. Brian)1 488 3 720 7086 t ( in SIGPLAN Symposium on Text)5 1535( Also)1 262( Hill, NJ.)2 402( Murray)1 399( Laboratories,)1 617( Bell)1 226(Tech. Rep. 85,)2 629 7 970 7206 t cleartomark showpage saveobj restore %%EndPage: 11 13 %%Page: 12 14 /saveobj save def mark 14 pagesetup 10 PA f (- 12 -)2 216 1 2772 480 t (Manipulation, Portland, June 1981.)3 1541 1 970 840 t ( Typesetting Language,'' SIGPLAN Symposium on)5 2333( J. Van Wyk, ``A Graphics)5 1203(4. Christopher)1 784 3 720 996 t (Text Manipulation, Portland \(June, 1981\).)4 1826 1 970 1116 t cleartomark showpage saveobj restore %%EndPage: 12 14 %%Page: 13 15 /saveobj save def mark 15 pagesetup 10 PA f (- 13 -)2 216 1 2772 480 t 10 PB f ( of Language Changes)3 1009(Appendix: Summary)1 975 2 720 840 t 10 PA f ( to the)2 293(This appendix enumerates the changes)4 1746 2 970 996 t 8 PA f (TROFF)3042 996 w 10 PA f (language since the last printing of the)6 1709 1 3331 996 t (manual.)720 1116 w 10 PB f (Command line arguments)2 1188 1 720 1356 t 10 PA f (The argument)1 630 1 970 1512 t 10 CW f (-Txxx)1630 1512 w 10 PA f ( and character definitions for typesetter)5 1775(loads parameters)1 766 2 1960 1512 t 10 CW f (xxx)4532 1512 w 10 PA f (, which)1 328 1 4712 1512 t (at the moment is typically one of)6 1448 1 720 1632 t 10 CW f (202)2193 1632 w 10 PA f (,)2373 1632 w 10 CW f (aps)2423 1632 w 10 PA f (or)2628 1632 w 10 CW f (cat)2748 1632 w 10 PA f (.)2928 1632 w 10 CW f (-Fxxx)970 1788 w 10 PA f ( from directory)2 718(causes font information to be loaded)5 1723 2 1317 1788 t 10 CW f (xxx)3806 1788 w 10 PA f (instead of the default)3 1006 1 4034 1788 t 10 CW f (/usr/lib/font/dev202)720 1908 w 10 PA f (.)1920 1908 w 10 PB f (Graphics commands)1 934 1 720 2148 t 10 PA f (As described in section 7.)4 1119 1 970 2304 t 10 PB f (Other new commands)2 1004 1 720 2544 t 10 CW f (.sy)970 2700 w 10 PI f (commandline)1175 2700 w 10 PA f ( is not captured anyplace.)4 1133( Output)1 375(executes the command, then returns.)4 1626 3 1742 2700 t 10 CW f (.cf)970 2856 w 10 PI f (file)1192 2856 w 10 PA f (copies)1357 2856 w 10 PI f (file)1677 2856 w 10 PA f (into the)1 357 1 1843 2856 t 8 PA f (TROFF)2243 2856 w 10 PA f ( ensues)1 341( Havoc)1 356(output file at this point, uninterpreted.)5 1801 3 2542 2856 t ( command)1 486( This)1 257( in the file restore current horizontal and vertical position.)9 2713(unless the motions)2 864 4 720 2976 t (hasn't been used much, and is probably a bad idea anyway.)10 2636 1 720 3096 t 10 CW f (.pi)970 3252 w 10 PI f (program)1184 3252 w 10 PA f (\(pipe the output into)3 947 1 1562 3252 t 10 PI f (program)2544 3252 w 10 PA f (\) now works in)3 697 1 2888 3252 t 8 PA f (TROFF)3620 3252 w 10 PA f (as well as)2 443 1 3911 3252 t 8 PA f (NROFF)4389 3252 w 10 PA f (, since it)2 378 1 4662 3252 t (makes somewhat more sense to allow it.)6 1781 1 720 3372 t 10 CW f (\\H'n')970 3528 w 10 PA f (sets the character height to)4 1193 1 1298 3528 t 10 CW f (n)2519 3528 w 10 PA f ( form)1 245( height of the)3 593(points. A)1 433 3 2607 3528 t 10 S f (\261)3907 3528 w 10 PI f (n)3962 3528 w 10 PA f (is an increment on the)4 993 1 4047 3528 t (current point size; a height of zero restores the height to the point size.)13 3115 1 720 3648 t 10 CW f (\\S'n')970 3804 w 10 PA f (sets the slant to)3 679 1 1295 3804 t 10 CW f (n)1999 3804 w 10 PA f (degrees.)2084 3804 w 10 PI f (n)2502 3804 w 10 PA f (may be negative.)2 750 1 2583 3804 t (The number register)2 902 1 970 3960 t 10 CW f ($$)1897 3960 w 10 PA f (contains the process id of the)5 1281 1 2042 3960 t 8 PA f (TROFF)3348 3960 w 10 PA f (process.)3629 3960 w (The string)1 450 1 970 4116 t 10 CW f (.T)1445 4116 w 10 PA f (contains the name of the current typesetter \(e.g.,)7 2130 1 1590 4116 t 10 CW f (202)3745 4116 w 10 PA f (,)3925 4116 w 10 CW f (aps)3975 4116 w 10 PA f (,)4155 4116 w 10 CW f (cat)4205 4116 w 10 PA f (\).)4385 4116 w (The)970 4272 w 10 CW f (.fp)1169 4272 w 10 PA f ( the data for the font to be loaded)8 1538(command accepts a third argument that causes)6 2121 2 1381 4272 t ( allowing dynamic character defini-)4 1625( has been added as a first step to)8 1542( This)1 254(from that directory.)2 899 4 720 4392 t (tions.)720 4512 w (The)970 4668 w 10 CW f (.ft)1172 4668 w 10 PA f ( position 0 \(which is in all)6 1198(command causes the named font to be loaded on font)9 2455 2 1387 4668 t ( not currently mounted by default or by a)8 1926(other ways inaccessible\) if the font exists and is)8 2178 2 720 4788 t 10 CW f (.fp)4860 4788 w 10 PA f ( font must be still or again in position 0 when the line is printed.)14 2828(command. The)1 686 2 720 4908 t (Transparent mode \()2 897 1 970 5064 t 10 CW f (\\!)1867 5064 w 10 PA f ( transparent output actually appears in the)6 1962( been fixed so that)4 847(\) has)1 244 3 1987 5064 t (output; thus special commands can be passed through to postprocessors by witchcraft like)12 3991 1 720 5184 t 9 CW f (.if "\\*\(.T"202" \\!x ...)3 1242 1 1008 5354 t 10 PA f (\(If this makes no sense to you, you shouldn't be using it anyway.\))12 2897 1 720 5534 t 10 PB f (Deletions)720 5774 w 10 PA f (The)970 5930 w 10 CW f (.fz)1173 5930 w 10 PA f (and)1389 5930 w 10 CW f (.li)1594 5930 w 10 PA f ( The)1 229(commands are no more.)3 1104 2 1811 5930 t 10 CW f (-p)3181 5930 w 10 PA f (,)3301 5930 w 10 CW f (-g)3363 5930 w 10 PA f (and)3520 5930 w 10 CW f (+n)3726 5930 w 10 PA f (command line arguments)2 1157 1 3883 5930 t (have also been eliminated, as has the)6 1626 1 720 6050 t 10 CW f (hp)2371 6050 w 10 PA f (number register.)1 735 1 2516 6050 t cleartomark showpage saveobj restore %%EndPage: 13 15 %%Trailer done %%Pages: 15 %%DocumentFonts: AvantGarde-Book Courier Palatino-Roman Palatino-Bold Palatino-Italic Times-Roman Symbol