4l77.com

log tags | changeset raw browse | bz2 | zip | gz

changeset 8:84a0aba46d8b tip

pdf (old stuff)
author yiyus
date Wed May 18 10:18:56 2011 +0200 (12 months ago ago)
parents 2fa97a8c1f3f
children
files .hgignore _werc/lib/default_master.tpl _werc/lib/top_bar.inc _werc/pub/style.css blg/2009/11/28/0/index.md blg/2010/03/17/0/index.md pdf/9.intro.pdf pdf/_werc/config pdf/index.tpl pdf/sam.pdf pdf/sam_tut.pdf pdf/unix_prog_design.ps pdf/utf.pdf src/index.md
line diff
1.1 --- a/.hgignore Sat Sep 12 20:56:19 2009 +0200 1.2 +++ b/.hgignore Wed May 18 10:18:56 2011 +0200 1.3 @@ -1,3 +1,5 @@ 1.4 syntax: glob 1.5 + 1.6 +*/_werc/pages/* 1.7 *~ 1.8
2.1 --- a/_werc/lib/default_master.tpl Sat Sep 12 20:56:19 2009 +0200 2.2 +++ b/_werc/lib/default_master.tpl Wed May 18 10:18:56 2011 +0200 2.3 @@ -1,8 +1,3 @@ 2.4 -<div class="pathlink"> 2.5 -% echo -n '<a href="http://4l77.com">4l77.com</a>' 2.6 -% pathlinks 2.7 -</div> 2.8 - 2.9 <div id="header"> 2.10 2.11 <div class="superHeader"> 2.12 @@ -10,6 +5,13 @@ 2.13 </div> 2.14 </div> 2.15 2.16 +<div class="pathlink"> 2.17 +% echo -n '<a href="http://4l77.com">4l77.com</a>' 2.18 +% pathlinks 2.19 +</div> 2.20 + 2.21 +<div style="clear:both"><br class="doNotDisplay doNotPrint" /></div> 2.22 + 2.23 % if(! ~ $#handlers_bar_left 0) { 2.24 <div class="side-menu"> 2.25 % for(h in $handlers_bar_left) { 2.26 @@ -20,7 +22,6 @@ 2.27 </div> 2.28 % } 2.29 2.30 -<br class="doNotDisplay doNotPrint" /> 2.31 <div id="main-copy"> 2.32 2.33 % run_handlers $handlers_body_head
3.1 --- a/_werc/lib/top_bar.inc Sat Sep 12 20:56:19 2009 +0200 3.2 +++ b/_werc/lib/top_bar.inc Wed May 18 10:18:56 2011 +0200 3.3 @@ -3,9 +3,6 @@ 3.4 <a href="http://4l77.com" class="anarchy">A</a> 3.5 <a href="/blg/">blg</a> 3.6 <a href="/cmd/">cmd</a> 3.7 + <a href="/hg/">hg</a> 3.8 <a href="/src/">src</a> 3.9 </div> 3.10 - 3.11 - <div class="right"> 3.12 - <a href="/hg/">hg repo</a> 3.13 - </div>
4.1 --- a/_werc/pub/style.css Sat Sep 12 20:56:19 2009 +0200 4.2 +++ b/_werc/pub/style.css Wed May 18 10:18:56 2011 +0200 4.3 @@ -2,6 +2,7 @@ 4.4 4.5 /* # Header # */ 4.6 .superHeader { 4.7 + float: left; 4.8 color: black; 4.9 background-color: white; 4.10 } 4.11 @@ -19,7 +20,6 @@ 4.12 color: black; 4.13 background-color: pink; 4.14 text-decoration: none; 4.15 - padding: 0 1em 0 1em; 4.16 } 4.17 4.18 .superHeader div { 4.19 @@ -27,15 +27,18 @@ 4.20 } 4.21 4.22 .superHeader .left { 4.23 + float:left; 4.24 left: 0px; 4.25 padding: 0 0 0 0em; 4.26 background-color: #333; 4.27 text-align: left; 4.28 - word-spacing: -0.7ex; 4.29 + word-spacing: -0.6ex; 4.30 + max-width: 50%; 4.31 } 4.32 4.33 a.anarchy { 4.34 background-color: white; 4.35 + padding: 0 1.5em 0 1.5em; 4.36 } 4.37 4.38 .superHeader .right { 4.39 @@ -49,6 +52,7 @@ 4.40 max-width: 800px; 4.41 margin-left: auto; 4.42 margin-right: auto; 4.43 + padding-top: 2em; 4.44 border: none; 4.45 } 4.46 4.47 @@ -100,8 +104,8 @@ 4.48 .side-menu { 4.49 background-color: white; 4.50 font-size: 80%; 4.51 - clear: left; 4.52 float: left; 4.53 + padding-top: 2em; 4.54 padding-left: 0.5em; 4.55 margin-right: 1.5em; 4.56 } 4.57 @@ -213,7 +217,8 @@ 4.58 } 4.59 4.60 .pathlink { 4.61 - clear: both; 4.62 + float: right; 4.63 + width: 50%; 4.64 font-size: 65%; 4.65 text-align: center; 4.66 }
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/blg/2009/11/28/0/index.md Wed May 18 10:18:56 2011 +0200 5.3 @@ -0,0 +1,12 @@ 5.4 +Going Forth 5.5 +----------------------------------------- 5.6 + 5.7 +I have spent the last months discovering Forth: learning about it, [reading](http://thinking-forth.sourceforge.net/) about it, trying 4th, porting pForth to Plan9,... It is a language that I love, since I spent many hours programming my HP49G calculator and I always was a fan of the RPN syntax and simplicity in general. 5.8 + 5.9 +My last discovery has been [retroForth](http://retroforth.org/), a minimalistic Forth which runs on a portable virtual machine, Ngaro. When some days ago <s>Google</s> the [Go](http://www.golang.org)-team presented their new language I was watching Rob's talk and could not stop thinking about launching Ngaro virtual machines in goroutines communicated through channels. So... that's what I did: 5.10 + 5.11 +- [Gonga: Ngaro virtual machine in Go](http://hg.4l77.com/go/ngaro/) 5.12 + 5.13 +With the help of crcx (the original Ngaro author, many thanks!) and after experimenting with a [brainfuck virtual machine](http://hg.4l77.com/go/brainfuck/) the porting process was pretty straightforward. The retroForth image is booting without problems and you can already do some fancy things like launching children VMs and communicate their I/O ports through channels. It is a WIP yet. More to come... 5.14 + 5.15 +Have fun!
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/blg/2010/03/17/0/index.md Wed May 18 10:18:56 2011 +0200 6.3 @@ -0,0 +1,76 @@ 6.4 +Hello Xgb 6.5 +----------------------------------------- 6.6 + 6.7 +A new "Hello World!" program. This time, it is an X application, which uses the xgb Go package. 6.8 + 6.9 +[xh.go](/pub/xh.go): 6.10 + 6.11 + // xh.go JGL (yiyus). 2010 6.12 + // xgb Hello World 6.13 + // 8g xh.go && 8l -o xh xh.8 && ./xh 6.14 + 6.15 + package main 6.16 + 6.17 + import ( 6.18 + "fmt" 6.19 + "os" 6.20 + "xgb" 6.21 + ) 6.22 + 6.23 + func hello(c *xgb.Conn, win, gc xgb.Id) { 6.24 + c.ImageText8(win, gc, 50, 50, []byte("Hello World!")) 6.25 + } 6.26 + 6.27 + func main() { 6.28 + c, err := xgb.Dial("") 6.29 + if err != nil { 6.30 + fmt.Fprintf(os.Stderr, "cannot connect: %v\n", err) 6.31 + os.Exit(1) 6.32 + } 6.33 + 6.34 + screen := c.DefaultScreen() 6.35 + win := c.NewId() 6.36 + 6.37 + c.CreateWindow( 6.38 + screen.RootDepth, win, screen.Root, 6.39 + 0, 0, 300, 200, 2, 6.40 + xgb.WindowClassCopyFromParent, 6.41 + xgb.WindowClassCopyFromParent, 6.42 + xgb.CWBackPixel|xgb.CWEventMask, 6.43 + []uint32{screen.BlackPixel, xgb.EventMaskExposure | xgb.EventMaskButtonPress}, 6.44 + ) 6.45 + 6.46 + gc := c.NewId() 6.47 + font := c.NewId() 6.48 + 6.49 + c.OpenFont(font, "7x13") 6.50 + c.CreateGC(gc, win, 6.51 + xgb.GCBackground|xgb.GCForeground|xgb.GCFont, 6.52 + []uint32{screen.WhitePixel, screen.BlackPixel, uint32(font)}, 6.53 + ) 6.54 + c.CloseFont(font) 6.55 + r := xgb.Rectangle{0, 0, 300, 200} 6.56 + c.PolyFillRectangle(win, gc, []xgb.Rectangle{r}) 6.57 + hello(c, win, gc) 6.58 + 6.59 + c.MapWindow(win) 6.60 + 6.61 + Loop: for { 6.62 + reply, err := c.WaitForEvent() 6.63 + switch { 6.64 + case err != nil: 6.65 + fmt.Printf("error: %v\n", err) 6.66 + os.Exit(1) 6.67 + } 6.68 + switch event := reply.(type) { 6.69 + case xgb.ExposeEvent: 6.70 + hello(c, win, gc) 6.71 + case xgb.ButtonPressEvent: 6.72 + fmt.Println("Button", event.Detail, "pressed. Bye!") 6.73 + break Loop 6.74 + } 6.75 + } 6.76 + 6.77 + c.Close() 6.78 + } 6.79 +
7.1 Binary file pdf/9.intro.pdf has changed
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/pdf/_werc/config Wed May 18 10:18:56 2011 +0200 8.3 @@ -0,0 +1,1 @@ 8.4 +conf_enable_flip
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 9.2 +++ b/pdf/index.tpl Wed May 18 10:18:56 2011 +0200 9.3 @@ -0,0 +1,4 @@ 9.4 +<h2><a href="http://hg.4l77.com/flip/">Flip</a> Demo</h2> 9.5 +<ul> 9.6 +% ls -p $werc_root^'/'^$sitedir^$conf_wd^*.pdf | sed 's,\.pdf$,,; s,.*,<li><a href="&">&</a></li>,' 9.7 +</ul>
10.1 Binary file pdf/sam.pdf has changed
11.1 Binary file pdf/sam_tut.pdf has changed
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 12.2 +++ b/pdf/unix_prog_design.ps Wed May 18 10:18:56 2011 +0200 12.3 @@ -0,0 +1,1055 @@ 12.4 +%!PS-Adobe-2.0 12.5 +%%Copyright: Copyright (c) 1993 AT&T, All Rights Reserved 12.6 +%%Version: 3.4 12.7 +%%DocumentFonts: (atend) 12.8 +%%Pages: (atend) 12.9 +%%BoundingBox: (atend) 12.10 +%%EndComments 12.11 +/DpostDict 200 dict def 12.12 +DpostDict begin 12.13 +% 12.14 +% Copyright (c) 1993 AT&T, All Rights Reserved 12.15 +% 12.16 +% Version 3.4 prologue for troff files. 12.17 +% 12.18 + 12.19 +/#copies 1 store 12.20 +/Prologue (dpost.ps) def 12.21 +/aspectratio 1 def 12.22 +/formsperpage 1 def 12.23 +/landscape false def 12.24 +/linewidth .3 def 12.25 +/magnification 1 def 12.26 +/margin 0 def 12.27 +/orientation 0 def 12.28 +/resolution 720 def 12.29 +/rotation 1 def 12.30 +/xoffset 0 def 12.31 +/yoffset 0 def 12.32 + 12.33 +/roundpage true def 12.34 +/useclippath true def 12.35 +/pagebbox [0 0 612 792] def 12.36 + 12.37 +/R /Times-Roman def 12.38 +/I /Times-Italic def 12.39 +/B /Times-Bold def 12.40 +/BI /Times-BoldItalic def 12.41 +/H /Helvetica def 12.42 +/HI /Helvetica-Oblique def 12.43 +/HB /Helvetica-Bold def 12.44 +/HX /Helvetica-BoldOblique def 12.45 +/CW /Courier def 12.46 +/CO /Courier def 12.47 +/CI /Courier-Oblique def 12.48 +/CB /Courier-Bold def 12.49 +/CX /Courier-BoldOblique def 12.50 +/PA /Palatino-Roman def 12.51 +/PI /Palatino-Italic def 12.52 +/PB /Palatino-Bold def 12.53 +/PX /Palatino-BoldItalic def 12.54 +/Hr /Helvetica-Narrow def 12.55 +/Hi /Helvetica-Narrow-Oblique def 12.56 +/Hb /Helvetica-Narrow-Bold def 12.57 +/Hx /Helvetica-Narrow-BoldOblique def 12.58 +/KR /Bookman-Light def 12.59 +/KI /Bookman-LightItalic def 12.60 +/KB /Bookman-Demi def 12.61 +/KX /Bookman-DemiItalic def 12.62 +/AR /AvantGarde-Book def 12.63 +/AI /AvantGarde-BookOblique def 12.64 +/AB /AvantGarde-Demi def 12.65 +/AX /AvantGarde-DemiOblique def 12.66 +/NR /NewCenturySchlbk-Roman def 12.67 +/NI /NewCenturySchlbk-Italic def 12.68 +/NB /NewCenturySchlbk-Bold def 12.69 +/NX /NewCenturySchlbk-BoldItalic def 12.70 +/ZD /ZapfDingbats def 12.71 +/ZI /ZapfChancery-MediumItalic def 12.72 +/S /S def 12.73 +/S1 /S1 def 12.74 +/GR /Symbol def 12.75 + 12.76 +/inch {72 mul} bind def 12.77 +/min {2 copy gt {exch} if pop} bind def 12.78 + 12.79 +/setup { 12.80 + counttomark 2 idiv {def} repeat pop 12.81 + 12.82 + landscape {/orientation 90 orientation add def} if 12.83 + /scaling 72 resolution div def 12.84 + linewidth setlinewidth 12.85 + 1 setlinecap 12.86 + 12.87 + pagedimensions 12.88 + xcenter ycenter translate 12.89 + orientation rotation mul rotate 12.90 + width 2 div neg height 2 div translate 12.91 + xoffset inch yoffset inch neg translate 12.92 + margin 2 div dup neg translate 12.93 + magnification dup aspectratio mul scale 12.94 + scaling scaling scale 12.95 + 12.96 + addmetrics 12.97 + 0 0 moveto 12.98 +} def 12.99 + 12.100 +/pagedimensions { 12.101 + useclippath userdict /gotpagebbox known not and { 12.102 + /pagebbox [clippath pathbbox newpath] def 12.103 + roundpage currentdict /roundpagebbox known and {roundpagebbox} if 12.104 + } if 12.105 + pagebbox aload pop 12.106 + 4 -1 roll exch 4 1 roll 4 copy 12.107 + landscape {4 2 roll} if 12.108 + sub /width exch def 12.109 + sub /height exch def 12.110 + add 2 div /xcenter exch def 12.111 + add 2 div /ycenter exch def 12.112 + userdict /gotpagebbox true put 12.113 +} def 12.114 + 12.115 +/landscapepage { 12.116 + landscape not { 12.117 + 0 height scaling div neg translate % not quite 12.118 + 90 rotate 12.119 + } if 12.120 +} bind def 12.121 + 12.122 +/portraitpage { 12.123 + landscape { 12.124 + width scaling div 0 translate % not quite 12.125 + -90 rotate 12.126 + } if 12.127 +} bind def 12.128 + 12.129 +/addmetrics { 12.130 + /Symbol /S null Sdefs cf 12.131 + /Times-Roman /S1 StandardEncoding dup length array copy S1defs cf 12.132 +} def 12.133 + 12.134 +/pagesetup { 12.135 + /page exch def 12.136 + currentdict /pagedict known currentdict page known and { 12.137 + page load pagedict exch get cvx exec 12.138 + } if 12.139 +} def 12.140 + 12.141 +/decodingdefs [ 12.142 + {counttomark 2 idiv {y moveto show} repeat} 12.143 + {neg /y exch def counttomark 2 idiv {y moveto show} repeat} 12.144 + {neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat} 12.145 + {neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat} 12.146 + {counttomark 2 idiv {y moveto show} repeat} 12.147 + {neg setfunnytext} 12.148 +] def 12.149 + 12.150 +/setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def 12.151 + 12.152 +/w {neg moveto show} bind def 12.153 +/m {neg dup /y exch def moveto} bind def 12.154 +/done {/lastpage where {pop lastpage} if} def 12.155 + 12.156 +/f { 12.157 + dup /font exch def findfont exch 12.158 + dup /ptsize exch def scaling div dup /size exch def scalefont setfont 12.159 + linewidth ptsize mul scaling 10 mul div setlinewidth 12.160 + /spacewidth ( ) stringwidth pop def 12.161 +} bind def 12.162 + 12.163 +/changefont { 12.164 + /fontheight exch def 12.165 + /fontslant exch def 12.166 + currentfont [ 12.167 + 1 0 12.168 + fontheight ptsize div fontslant sin mul fontslant cos div 12.169 + fontheight ptsize div 12.170 + 0 0 12.171 + ] makefont setfont 12.172 +} bind def 12.173 + 12.174 +/sf {f} bind def 12.175 + 12.176 +/cf { 12.177 + dup length 2 idiv 12.178 + /entries exch def 12.179 + /chtab exch def 12.180 + /newencoding exch def 12.181 + /newfont exch def 12.182 + 12.183 + findfont dup length 1 add dict 12.184 + /newdict exch def 12.185 + {1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall 12.186 + 12.187 + newencoding type /arraytype eq {newdict /Encoding newencoding put} if 12.188 + 12.189 + newdict /Metrics entries dict put 12.190 + newdict /Metrics get 12.191 + begin 12.192 + chtab aload pop 12.193 + 1 1 entries {pop def} for 12.194 + newfont newdict definefont pop 12.195 + end 12.196 +} bind def 12.197 + 12.198 +% 12.199 +% A few arrays used to adjust reference points and character widths in some 12.200 +% of the printer resident fonts. If square roots are too high try changing 12.201 +% the lines describing /radical and /radicalex to, 12.202 +% 12.203 +% /radical [0 -75 550 0] 12.204 +% /radicalex [-50 -75 500 0] 12.205 +% 12.206 +% Move braceleftbt a bit - default PostScript character is off a bit. 12.207 +% 12.208 + 12.209 +/Sdefs [ 12.210 + /bracketlefttp [201 500] 12.211 + /bracketleftbt [201 500] 12.212 + /bracketrighttp [-81 380] 12.213 + /bracketrightbt [-83 380] 12.214 + /braceleftbt [203 490] 12.215 + /bracketrightex [220 -125 500 0] 12.216 + /radical [0 0 550 0] 12.217 + /radicalex [-50 0 500 0] 12.218 + /parenleftex [-20 -170 0 0] 12.219 + /integral [100 -50 500 0] 12.220 + /infinity [10 -75 730 0] 12.221 +] def 12.222 + 12.223 +/S1defs [ 12.224 + /underscore [0 80 500 0] 12.225 + /endash [7 90 650 0] 12.226 +] def 12.227 +end 12.228 +%%EndProlog 12.229 +%%BeginSetup 12.230 +DpostDict begin 12.231 +mark 12.232 +/rotation 1 def 12.233 +/gotpagebbox true def 12.234 +/linewidth 0.5 def 12.235 +/xoffset 0 def 12.236 +/yoffset 0 def 12.237 +/#copies 1 store 12.238 +/magnification 1 def 12.239 +%%FormsPerPage: 1 12.240 +/formsperpage 1 def 12.241 +%%Patch from lp 12.242 +%%EndPatch from lp 12.243 +/landscape false def 12.244 +/resolution 720 def 12.245 +setup 12.246 +2 setdecoding 12.247 +end 12.248 +%%EndSetup 12.249 +%%Page: 1 1 12.250 +%%PageBoundingBox: (atend) 12.251 +DpostDict begin 12.252 +/saveobj save def 12.253 +mark 12.254 +1 pagesetup 12.255 +12 B f 12.256 +(Program design in the UNIX\262 environment)5 2217 1 1771 1230 t 12.257 +10 I f 12.258 +(Rob Pike)1 363 1 2698 1470 t 12.259 +(Brian W. Kernighan)2 814 1 2473 1650 t 12.260 +(ABSTRACT)2643 2090 w 12.261 +10 R f 12.262 +( style of program)3 709(Much of the power of the UNIX operating system comes from a)11 2641 2 1330 2386 t 12.263 +( more important, easy to combine with other)7 1797(design that makes programs easy to use and,)7 1803 2 1080 2506 t 12.264 +( style has been called the use of)7 1268(programs. This)1 631 2 1080 2626 t 12.265 +10 I f 12.266 +(software tools)1 567 1 3005 2626 t 12.267 +10 R f 12.268 +(, and depends more on how)5 1108 1 3572 2626 t 12.269 +( can be used with other)5 953(the programs fit into the programming environment \320 how they)9 2647 2 1080 2746 t 12.270 +( as the system has become)5 1116( But)1 208( are designed internally.)3 998(programs \320 than on how they)5 1278 4 1080 2866 t 12.271 +(commercially successful and has spread widely, this style has often been compromised, to)12 3600 1 1080 2986 t 12.272 +( programs have become encrusted with dubious features.)7 2337( Old)1 209(the detriment of all users.)4 1054 3 1080 3106 t 12.273 +( are not always written with attention to proper separation of function)11 2919(Newer programs)1 681 2 1080 3226 t 12.274 +( program design,)2 708( paper discusses the elements of)5 1358( This)1 244(and design for interconnection.)3 1290 4 1080 3346 t 12.275 +( possible trends for the)4 970(showing by example good and bad design, and indicates some)9 2630 2 1080 3466 t 12.276 +(future.)1080 3586 w 12.277 +( a great commercial success, and is likely to be the standard)11 2428(The UNIX operating system has become)5 1642 2 970 3862 t 12.278 +(operating system for microcomputers and some mainframes in the coming years.)10 3231 1 720 3982 t 12.279 +( the)1 158( is portability: the operating system kernel and)7 1927( One)1 226(There are good reasons for this popularity.)6 1759 4 970 4138 t 12.280 +( can be moved from one type of)7 1279(applications programs are written in the programming language C, and thus)10 3041 2 720 4258 t 12.281 +( another with much less effort than would be involved in recreating them in the assembly lan-)16 3835(computer to)1 485 2 720 4378 t 12.282 +( of comput-)2 470( the same operating system therefore runs on a wide variety)10 2408( Essentially)1 492(guage of each machine.)3 950 4 720 4498 t 12.283 +( more important, ven-)3 883( Perhaps)1 370( along.)1 276(ers, and users needn't learn a new system when new hardware comes)11 2791 4 720 4618 t 12.284 +( sell the UNIX system needn't provide new software for each new machine; instead, their software)15 3970(dors that)1 350 2 720 4738 t 12.285 +(can be compiled and run without change on any hardware, which makes the system commercially attrac-)15 4320 1 720 4858 t 12.286 +( element of zealotry: users of the system tend to be enthusiastic and to expect it wher-)16 3454( is also an)3 406(tive. There)1 460 3 720 4978 t 12.287 +( the UNIX system in university a few years ago are now in the job mar-)15 2888(ever they go; the students who used)6 1432 2 720 5098 t 12.288 +(ket and often demand it as a condition of employment.)9 2181 1 720 5218 t 12.289 +( system was popular long before it was even portable, let alone a commercial success.)14 3496(But the UNIX)2 574 2 970 5374 t 12.290 +(The reasons for that are more interesting.)6 1643 1 720 5494 t 12.291 +( the UNIX system was written for the a machine that was \(deservedly\))12 2882(Except for the initial version,)4 1188 2 970 5650 t 12.292 +( powerful enough to do real computing, but small enough to be affordable by small)14 3517( were)1 257(very popular.)1 546 3 720 5770 t 12.293 +(organizations such as academic departments in universities.)6 2382 1 720 5890 t 12.294 +( compet-)1 353(The early UNIX system was smaller but more effective and technically more interesting than)13 3717 2 970 6046 t 12.295 +( provided a number of innovative applications of computer science,)9 2767( It)1 119( the same hardware.)3 821(ing systems on)2 613 4 720 6166 t 12.296 +( include the)2 496( Examples)1 459( be obtained by a judicious blend of theory and practice.)10 2393(showing the benefits to)3 972 4 720 6286 t 12.297 +10 CW f 12.298 +(yacc)720 6406 w 12.299 +10 R f 12.300 +(parser-generator, the)1 827 1 988 6406 t 12.301 +10 CW f 12.302 +(diff)1843 6406 w 12.303 +10 R f 12.304 +( regular expressions to)3 907(file comparison program, and the pervasive use of)7 2022 2 2111 6406 t 12.305 +( turn to new programming languages and interesting software for)9 2751( led in)2 282( These)1 304(describe string patterns.)2 983 4 720 6526 t 12.306 +(applications like program development, document preparation and circuit design.)8 3245 1 720 6646 t 12.307 +( size, and since essentially everything was written in C, the software)11 2781(Since the system was modest in)5 1289 2 970 6802 t 12.308 +( customize for particular applications or merely to support a view of the world)13 3346(was easy to modify, to)4 974 2 720 6922 t 12.309 +8 S1 f 12.310 +(__________________)720 7022 w 12.311 +8 R f 12.312 +(\262 UNIX is a trademark of Bell Laboratories.)7 1409 1 720 7122 t 12.313 +cleartomark 12.314 +showpage 12.315 +saveobj restore 12.316 +end 12.317 +%%%PageBoundingBox: 61 65 514 691 12.318 +%%EndPage: 1 1 12.319 +%%Page: 2 2 12.320 +%%PageBoundingBox: (atend) 12.321 +DpostDict begin 12.322 +/saveobj save def 12.323 +mark 12.324 +2 pagesetup 12.325 +10 R f 12.326 +(- 2 -)2 166 1 2797 480 t 12.327 +( the plethora)2 503( ease of change is also a weakness, of course, as evidenced by)12 2482( \(This)1 262(different from the original.)3 1073 4 720 840 t 12.328 +(of different versions of the system.\))5 1425 1 720 960 t 12.329 +( new way of thinking of how to attack)8 1528(Finally, the UNIX system provided a new style of computing, a)10 2542 2 970 1116 t 12.330 +( programs separately or in combina-)5 1474( style was based on the use of using)8 1482( This)1 235(a problem with a computer.)4 1129 4 720 1236 t 12.331 +(tion to get a job done, rather than doing it by hand, by monolithic self-sufficient subsystems, or by special-)18 4320 1 720 1356 t 12.332 +( has been much discussed in the literature, so we don't need to repeat it)14 2926( This)1 234(purpose, one-time programs.)2 1160 3 720 1476 t 12.333 +(here; see [1], for example.)4 1046 1 720 1596 t 12.334 +( style is still evolving,)4 898( The)1 209( on the system are closely related.)6 1374(The style of use and design of the tools)8 1589 4 970 1752 t 12.335 +( program fit together, how the)5 1248(and is the subject of this essay: in particular, how the design and use of a)15 3072 2 720 1872 t 12.336 +( focus of the)3 526( The)1 215( influences solutions to new problems.)5 1588(tools fit into the environment, and how the style)8 1991 4 720 1992 t 12.337 +(discussion is a single example, the program)6 1758 1 720 2112 t 12.338 +10 CW f 12.339 +(cat)2506 2112 w 12.340 +10 R f 12.341 +( of files onto its standard output.)6 1309(, which concatenates a set)4 1045 2 2686 2112 t 12.342 +10 CW f 12.343 +(cat)720 2232 w 12.344 +10 R f 12.345 +( it is essential to the UNIX system; and it is a)11 1852(is a simple program, both in implementation and in use;)9 2260 2 928 2232 t 12.346 +( a)1 77( \(Often)1 318( of the kinds of decisions that delight both supporters and critics of the system.)14 3257(good illustration)1 668 4 720 2352 t 12.347 +( an asset or as a fault by different audiences; our audience is)12 2471(single property of the system will be taken as)8 1849 2 720 2472 t 12.348 +( the)1 167( Even)1 275( programming.\))1 647(programmers, because the UNIX environment is designed fundamentally for)8 3231 4 720 2592 t 12.349 +(name)720 2712 w 12.350 +10 CW f 12.351 +(cat)965 2712 w 12.352 +10 R f 12.353 +(is typical of UNIX program names: it is short, pronounceable, but not conventional English for)14 3866 1 1174 2712 t 12.354 +( though,)1 329( important,)1 441( Most)1 258( an opposing viewpoint, see [2].\))5 1322( \(For)1 224(the job it does.)3 595 6 720 2832 t 12.355 +10 CW f 12.356 +(cat)3915 2832 w 12.357 +10 R f 12.358 +(in its usages and varia-)4 919 1 4121 2832 t 12.359 +(tions exemplifies UNIX program design style and how it has been interpreted by different communities.)14 4158 1 720 2952 t 12.360 +9 CW f 12.361 +( \(I\))1 216(11/3/71 CAT)1 3888 2 900 3218 t 12.362 +( -- concatenate and print)4 1350( _a _t _)3 108(NAME c)1 774 3 900 3438 t 12.363 +( ...)1 216( _i _l _e _1 _)5 216( f)1 108( _a _t _)3 108(SYNOPSIS c)1 774 5 900 3658 t 12.364 +( reads each file in sequence and writes it on)9 2430( _a _t _)3 108(DESCRIPTION c)1 774 3 900 3878 t 12.365 +( Thus:)1 378(the standard output stream.)3 1458 2 1620 3988 t 12.366 +( _i _l _e _)4 162( f)1 108(c _a _t _)3 162 3 1782 4208 t 12.367 +( Also:)1 378(is about the easiest way to print a file.)8 2214 2 1620 4428 t 12.368 +( _i _l _e _3 _)5 216( >f)1 162( _i _l _e _2 _)5 216( f)1 108( _i _l _e _1 _)5 216( f)1 108(c _a _t _)3 162 7 1782 4648 t 12.369 +(is about the easiest way to concatenate files.)7 2484 1 1620 4868 t 12.370 +( reads from the)3 810( _a _t _)3 108(If no input file is given c)6 1458 3 1620 5088 t 12.371 +(standard input file.)2 1080 1 1620 5198 t 12.372 +(FILES --)1 828 1 900 5418 t 12.373 +( cp)1 162( pr,)1 450(SEE ALSO)1 432 3 900 5638 t 12.374 +( if a file cannot be found it is ignored.)9 2214(DIAGNOSTICS none;)1 990 2 900 5858 t 12.375 +(BUGS --)1 828 1 900 6078 t 12.376 +( dmr)1 216(OWNER ken,)1 936 2 900 6298 t 12.377 +10 R f 12.378 +( page for)2 354( Manual)1 355(Figure 1:)1 364 3 1517 6538 t 12.379 +10 HB f 12.380 +(cat)2615 6538 w 12.381 +10 R f 12.382 +(, UNIX 1st Edition, November, 1971)5 1482 1 2760 6538 t 12.383 +( is the manual page for)5 917(Figure 1)1 336 2 720 6898 t 12.384 +10 CW f 12.385 +(cat)1999 6898 w 12.386 +10 R f 12.387 +( Evidently,)1 465(from the UNIX 1st Edition manual.)5 1426 2 2205 6898 t 12.388 +10 CW f 12.389 +(cat)4122 6898 w 12.390 +10 R f 12.391 +(copies its input to)3 712 1 4328 6898 t 12.392 +( taken from a sequence of one or more files, but it can come from the stan-)16 2995( input is normally)3 715( The)1 207(its output.)1 403 4 720 7018 t 12.393 +( manual suggests two uses, the general file copy:)8 1950( The)1 205( output is the standard output.)5 1189( The)1 205(dard input.)1 433 5 720 7138 t 12.394 +cleartomark 12.395 +showpage 12.396 +saveobj restore 12.397 +end 12.398 +%%PageBoundingBox: 61 62 514 764 12.399 +%%EndPage: 2 2 12.400 +%%Page: 3 3 12.401 +%%PageBoundingBox: (atend) 12.402 +DpostDict begin 12.403 +/saveobj save def 12.404 +mark 12.405 +3 pagesetup 12.406 +10 R f 12.407 +(- 3 -)2 166 1 2797 480 t 12.408 +9 CW f 12.409 +(cat file1 file2 >file3)3 1188 1 1008 830 t 12.410 +10 R f 12.411 +(and printing a file on the terminal:)6 1371 1 720 1010 t 12.412 +9 CW f 12.413 +(cat file)1 432 1 1008 1180 t 12.414 +10 R f 12.415 +( redirection \(provided)2 876( Output)1 331( the design of the program.)5 1091(The general case is certainly what was intended in)8 2022 4 720 1360 t 12.416 +(by the)1 248 1 720 1480 t 12.417 +10 CW f 12.418 +(>)994 1480 w 12.419 +10 R f 12.420 +( by the UNIX shell\) makes)5 1073(operator, implemented)1 905 2 1080 1480 t 12.421 +10 CW f 12.422 +(cat)3083 1480 w 12.423 +10 R f 12.424 +(a fine general-purpose file concatenator and)5 1752 1 3288 1480 t 12.425 +(a valuable adjunct for other programs, which can use)8 2114 1 720 1600 t 12.426 +10 CW f 12.427 +(cat)2859 1600 w 12.428 +10 R f 12.429 +(to process filenames, as in:)4 1079 1 3064 1600 t 12.430 +9 CW f 12.431 +(cat file file2 ... | other-program)5 1836 1 1008 1770 t 12.432 +10 R f 12.433 +(The fact that)2 510 1 720 1950 t 12.434 +10 CW f 12.435 +(cat)1258 1950 w 12.436 +10 R f 12.437 +( surprisingly, in practice it turns)5 1297( Perhaps)1 370(will also print on the terminal is a special case.)9 1906 3 1467 1950 t 12.438 +(out that the special case is the main use of the program.\262)11 2263 1 720 2070 t 12.439 +(The design of)2 553 1 970 2226 t 12.440 +10 CW f 12.441 +(cat)1550 2226 w 12.442 +10 R f 12.443 +(is typical of most UNIX programs: it implements one simple but general function)12 3283 1 1757 2226 t 12.444 +( many different applications \(including many not envisioned by the original author\).)11 3517(that can be used in)4 803 2 720 2346 t 12.445 +( example, there are separate commands for file system)8 2241( For)1 198( functions.)1 431(Other commands are used for other)5 1450 4 720 2466 t 12.446 +( systems instead lump these into a)6 1361( Other)1 277( them or telling how big they are.)7 1332(tasks like renaming files, deleting)4 1350 4 720 2586 t 12.447 +( file copy)2 379( \(The)1 239( its own.)2 344(single ``file system'' command with an internal structure and command language of)11 3358 4 720 2706 t 12.448 +( approach is not necessarily worse or bet-)7 1675( That)1 236( operating systems like or is an example.\))7 1680(program found on)2 729 4 720 2826 t 12.449 +( are not completely alien)4 999( such programs)2 614( Unfortunately,)1 637(ter, but it is certainly against the UNIX philosophy.)8 2070 4 720 2946 t 12.450 +( mail-reading programs and text editors, for example, are large self-contained)10 3132(to the UNIX system \320 some)5 1188 2 720 3066 t 12.451 +( and mesh poorly with the rest of the system.)9 1838(``subsystems'' that provide their own complete environments)6 2482 2 720 3186 t 12.452 +( however, are usually imported from or inspired by programs on other operating sys-)13 3396(Most such subsystems,)2 924 2 720 3306 t 12.453 +(tems with markedly different programming environments.)5 2325 1 720 3426 t 12.454 +( most important)2 638( The)1 207( significant advantages to the traditional UNIX system approach.)8 2609(There are some)2 616 4 970 3582 t 12.455 +(is that the surrounding environment \320 the shell and the programs it can invoke \320 provides a uniform)17 4320 1 720 3702 t 12.456 +( expanded by the shell for all programs, without)8 1941( argument patterns are)3 895( Filename)1 424(access to system facilities.)3 1060 4 720 3822 t 12.457 +( are a natural)3 550( Pipes)1 278( same is true of input and output redirection.)8 1861( The)1 216(prearrangement in each command.)3 1415 5 720 3942 t 12.458 +( than decorate each command with options for all relevant pre- and post-)12 2983( Rather)1 323( redirection.)1 489(outgrowth of)1 525 4 720 4062 t 12.459 +( concise and header-free textual data that)6 1633(processing, each program expects as input, and produces as output,)9 2687 2 720 4182 t 12.460 +( takes some programming discipline)4 1461( It)1 114( with other programs to do the rest of the task at hand.)12 2197(connects well)1 548 4 720 4302 t 12.461 +( environment \320 primarily, to avoid the temptation to add features)10 2649(to build a program that works well in this)8 1671 2 720 4422 t 12.462 +(that conflict with or duplicate services provided by other commands \320 but it's well worthwhile.)14 3854 1 720 4542 t 12.463 +( example, the 7th Edition shell was aug-)7 1660( For)1 197( functions are well separated.)4 1198(Growth is easy when the)4 1015 4 970 4698 t 12.464 +( program into the arguments to another, as)7 1699(mented with a backquote operator that converts the output of one)10 2621 2 720 4818 t 12.465 +(in)720 4938 w 12.466 +9 CW f 12.467 +(cat `cat filelist`)2 972 1 1008 5108 t 12.468 +10 R f 12.469 +( when this operator was invented; because the backquote is)9 2458(No changes were made in any other program)7 1862 2 720 5288 t 12.470 +( If)1 119( by the shell acquire the feature transparently and uniformly.)9 2444(interpreted by the shell, all programs called)6 1757 3 720 5408 t 12.471 +( subroutine, by each)3 825(special characters like backquotes were instead interpreted, even by calling a standard)11 3495 2 720 5528 t 12.472 +( appropriate, every program would require \(at least\) recompilation whenever)9 3085(program that found the feature)4 1235 2 720 5648 t 12.473 +( but experimentation would be)4 1273( only would uniformity be hard to enforce,)7 1787( Not)1 212(someone had a new idea.)4 1048 4 720 5768 t 12.474 +(harder because of the effort of installing any changes.)8 2141 1 720 5888 t 12.475 +( introduced two changes in)4 1124(The UNIX 7th Edition system)4 1249 2 970 6044 t 12.476 +10 CW f 12.477 +(cat)3380 6044 w 12.478 +10 R f 12.479 +( files that could not be read,)6 1184(. First,)1 296 2 3560 6044 t 12.480 +( Second,)1 376( permissions or simple non-existence, were reported rather than ignored.)9 2954(either because of denied)3 990 3 720 6164 t 12.481 +( the addition of a single optional argument)7 1703(and less desirable, was)3 909 2 720 6284 t 12.482 +10 CW f 12.483 +(-u)3358 6284 w 12.484 +10 R f 12.485 +(, which forced)2 575 1 3478 6284 t 12.486 +10 CW f 12.487 +(cat)4079 6284 w 12.488 +10 R f 12.489 +(to unbuffer its out-)3 755 1 4285 6284 t 12.490 +( 8th Edition of the system, are technical)7 1608(put \(the reasons for this option, which has disappeared again in the)11 2712 2 720 6404 t 12.491 +(and irrelevant here.\))2 805 1 720 6524 t 12.492 +( of one argument was enough to suggest more, and other versions of the system)14 3358(But the existence)2 712 2 970 6680 t 12.493 +8 S1 f 12.494 +(__________________)720 6780 w 12.495 +8 R f 12.496 +(\262 The use of)3 402 1 720 6880 t 12.497 +8 CW f 12.498 +(cat)1144 6880 w 12.499 +8 R f 12.500 +(to feed a single input file to a program has to some degree superseded the shell's)15 2592 1 1310 6880 t 12.501 +8 CW f 12.502 +(<)3924 6880 w 12.503 +8 R f 12.504 +(operator, which illus-)2 686 1 3994 6880 t 12.505 +(trates that general-purpose constructs \320 like)5 1482 1 720 6980 t 12.506 +8 CW f 12.507 +(cat)2234 6980 w 12.508 +8 R f 12.509 +( are often more natural than convenient special-purpose)7 1843(and pipes \320)2 427 2 2410 6980 t 12.510 +(ones.)720 7080 w 12.511 +cleartomark 12.512 +showpage 12.513 +saveobj restore 12.514 +end 12.515 +%%PageBoundingBox: 61 69 514 764 12.516 +%%EndPage: 3 3 12.517 +%%Page: 4 4 12.518 +%%PageBoundingBox: (atend) 12.519 +DpostDict begin 12.520 +/saveobj save def 12.521 +mark 12.522 +4 pagesetup 12.523 +10 R f 12.524 +(- 4 -)2 166 1 2797 480 t 12.525 +(soon embellished)1 703 1 720 840 t 12.526 +10 CW f 12.527 +(cat)1454 840 w 12.528 +10 R f 12.529 +( list comes from)3 665( This)1 234(with features.)1 549 3 1665 840 t 12.530 +10 CW f 12.531 +(cat)3144 840 w 12.532 +10 R f 12.533 +( UNIX)1 281(on the Berkeley distribution of the)5 1404 2 3355 840 t 12.534 +(system:)720 960 w 12.535 +9 CW f 12.536 +(-s)1008 1130 w 12.537 +9 R f 12.538 +(strip multiple blank lines to a single instance)7 1611 1 1391 1130 t 12.539 +9 CW f 12.540 +(-n)1008 1240 w 12.541 +9 R f 12.542 +(number the output lines)3 854 1 1391 1240 t 12.543 +9 CW f 12.544 +(-b)1008 1350 w 12.545 +9 R f 12.546 +(number only the non-blank lines)4 1172 1 1391 1350 t 12.547 +9 CW f 12.548 +(-v)1008 1460 w 12.549 +9 R f 12.550 +(make non-printing characters visible)3 1319 1 1391 1460 t 12.551 +9 CW f 12.552 +(-ve)1368 1570 w 12.553 +9 R f 12.554 +(mark ends of lines)3 664 1 1751 1570 t 12.555 +9 CW f 12.556 +(-vt)1368 1680 w 12.557 +9 R f 12.558 +(change representation of tab)3 1019 1 1751 1680 t 12.559 +10 R f 12.560 +( there are similar options and even a clash of naming:)10 2265(In System V,)2 549 2 970 1896 t 12.561 +10 CW f 12.562 +(-s)3822 1896 w 12.563 +10 R f 12.564 +(instructs)3980 1896 w 12.565 +10 CW f 12.566 +(cat)4357 1896 w 12.567 +10 R f 12.568 +(to be silent)2 465 1 4575 1896 t 12.569 +( none of these options are appropriate additions to)8 2029( But)1 199(about non-existent files.)2 971 3 720 2016 t 12.570 +10 CW f 12.571 +(cat)3948 2016 w 12.572 +10 R f 12.573 +( reasons get to the)4 733(; the)1 179 2 4128 2016 t 12.574 +(heart of how UNIX programs are designed and why they work well together.)12 3073 1 720 2136 t 12.575 +(It's easy to dispose of \(Berkeley\))5 1322 1 970 2292 t 12.576 +10 CW f 12.577 +(-s)2317 2292 w 12.578 +10 R f 12.579 +(,)2437 2292 w 12.580 +10 CW f 12.581 +(-n)2487 2292 w 12.582 +10 R f 12.583 +(and)2632 2292 w 12.584 +10 CW f 12.585 +(-b)2801 2292 w 12.586 +10 R f 12.587 +( done with existing tools)4 988(: all of these jobs are readily)6 1131 2 2921 2292 t 12.588 +(like)720 2412 w 12.589 +10 CW f 12.590 +(sed)895 2412 w 12.591 +10 R f 12.592 +(and)1100 2412 w 12.593 +10 CW f 12.594 +(awk)1269 2412 w 12.595 +10 R f 12.596 +( example, to number lines, this)5 1230(. For)1 214 2 1449 2412 t 12.597 +10 CW f 12.598 +(awk)2918 2412 w 12.599 +10 R f 12.600 +(invocation suffices:)1 785 1 3123 2412 t 12.601 +9 CW f 12.602 +(awk '{ print NR "\\t" $0 }')6 1404 1 1008 2582 t 12.603 +9 I f 12.604 +(filenames)2466 2582 w 12.605 +10 R f 12.606 +(If line-numbering is needed often, this command can be packaged under a name like)13 3370 1 720 2762 t 12.607 +10 CW f 12.608 +(linenumber)4116 2762 w 12.609 +10 R f 12.610 +(and put)1 298 1 4742 2762 t 12.611 +( possibility is to modify the)5 1104( Another)1 378(in a convenient public place.)4 1149 3 720 2882 t 12.612 +10 CW f 12.613 +(pr)3377 2882 w 12.614 +10 R f 12.615 +( format text)2 466(command, whose job is to)4 1051 2 3523 2882 t 12.616 +( lines is an appropriate feature in)6 1314( Numbering)1 506( printer.)1 317(such as program source for output on a line)8 1730 4 720 3002 t 12.617 +10 CW f 12.618 +(pr)4613 3002 w 12.619 +10 R f 12.620 +(; in fact)2 307 1 4733 3002 t 12.621 +(UNIX System V)2 682 1 720 3122 t 12.622 +10 CW f 12.623 +(pr)1435 3122 w 12.624 +10 R f 12.625 +(has a)1 210 1 1588 3122 t 12.626 +10 CW f 12.627 +(-n)1831 3122 w 12.628 +10 R f 12.629 +( never was a need to modify)6 1167( There)1 289(option to do so.)3 644 3 1983 3122 t 12.630 +10 CW f 12.631 +(cat)4115 3122 w 12.632 +10 R f 12.633 +(; these options are)3 745 1 4295 3122 t 12.634 +(gratuitous tinkering.)1 811 1 720 3242 t 12.635 +(But what about)2 623 1 970 3398 t 12.636 +10 CW f 12.637 +(-v)1624 3398 w 12.638 +10 R f 12.639 +( strange)1 319( Making)1 367( prints non-printing characters in a visible representation.)7 2327(? That)1 283 4 1744 3398 t 12.640 +( \(``)1 157(characters visible is a genuinely new function, for which no existing program is suitable.)13 3646 2 720 3518 t 12.641 +10 CW f 12.642 +(sed -n l)2 426 1 4523 3518 t 12.643 +10 R f 12.644 +('',)4949 3518 w 12.645 +( to occur in)3 470(the closest standard possibility, aborts when given very long input lines, which are more likely)14 3850 2 720 3638 t 12.646 +( isn't it appropriate to add the)6 1284( So)1 173( characters.\))1 503(files containing non-printing)2 1180 4 720 3758 t 12.647 +10 CW f 12.648 +(-v)3902 3758 w 12.649 +10 R f 12.650 +(option to)1 376 1 4064 3758 t 12.651 +10 CW f 12.652 +(cat)4482 3758 w 12.653 +10 R f 12.654 +(to make)1 336 1 4704 3758 t 12.655 +(strange characters visible when a file is printed?)7 1920 1 720 3878 t 12.656 +( a modification confuses what)4 1202( Such)1 251(The answer is ``No.'')3 858 3 970 4034 t 12.657 +10 CW f 12.658 +(cat)3307 4034 w 12.659 +10 R f 12.660 +('s job is \320 concatenating files \320 with)7 1553 1 3487 4034 t 12.661 +( UNIX program)2 667( A)1 137( a common special case \320 showing a file on the terminal.)11 2478(what it happens to do in)5 1038 4 720 4154 t 12.662 +( one thing well, and leave unrelated tasks to other programs.)10 2517(should do)1 402 2 720 4274 t 12.663 +10 CW f 12.664 +(cat)3700 4274 w 12.665 +10 R f 12.666 +('s job is to the data in files.)7 1160 1 3880 4274 t 12.667 +(Programs that collect data shouldn't the data;)6 1809 1 720 4394 t 12.668 +10 CW f 12.669 +(cat)2554 4394 w 12.670 +10 R f 12.671 +(therefore shouldn't transform its input.)4 1551 1 2759 4394 t 12.672 +(The preferred approach in this case is a separate program that deals with non-printable characters.)14 4070 1 970 4550 t 12.673 +(We called ours)2 602 1 720 4670 t 12.674 +10 CW f 12.675 +(vis)1349 4670 w 12.676 +10 R f 12.677 +( because its job is to make things vis-)8 1502(\(a suggestive, pronounceable, non-English name\))4 1982 2 1556 4670 t 12.678 +( visible \320 and as)4 714( usual, the default is to do what most users will want \320 make strange characters)15 3266(ible. As)1 340 3 720 4790 t 12.679 +( making)1 330( By)1 172(necessary include options for variations on that theme.)7 2215 3 720 4910 t 12.680 +10 CW f 12.681 +(vis)3467 4910 w 12.682 +10 R f 12.683 +(a separate program, related useful)4 1364 1 3676 4910 t 12.684 +( example, the option)3 864( For)1 205(functions are easy to provide.)4 1242 3 720 5030 t 12.685 +10 CW f 12.686 +(-s)3072 5030 w 12.687 +10 R f 12.688 +( characters,)1 470(strips out \(i.e., discards\) strange)4 1337 2 3233 5030 t 12.689 +( treatment and)2 571( options control the)3 778( Other)1 278(which is handy for dealing with files from other operating systems.)10 2693 4 720 5150 t 12.690 +( may or may not be considered strange in different situa-)10 2312(format of characters like tabs and backspaces that)7 2008 2 720 5270 t 12.691 +( options make sense in)4 917(tions. Such)1 473 2 720 5390 t 12.692 +10 CW f 12.693 +(vis)2137 5390 w 12.694 +10 R f 12.695 +( In)1 135(because its focus is entirely on the treatment of such characters.)10 2561 2 2344 5390 t 12.696 +10 CW f 12.697 +(cat)720 5510 w 12.698 +10 R f 12.699 +( require an entire sub-language within the)6 1729(, they)1 232 2 900 5510 t 12.700 +10 CW f 12.701 +(-v)2897 5510 w 12.702 +10 R f 12.703 +(option, and thus get even further away from the)8 1987 1 3053 5510 t 12.704 +( separate program makes conve-)4 1334( providing the function in a)5 1151( Also,)1 276(fundamental purpose of that program.)4 1559 4 720 5630 t 12.705 +(nient options such as)3 836 1 720 5750 t 12.706 +10 CW f 12.707 +(-s)1581 5750 w 12.708 +10 R f 12.709 +(easier to invent, because it isolates the problem as well as the solution.)12 2819 1 1726 5750 t 12.710 +( example, if we want)4 890( For)1 203( efficiency.)1 462(One possible objection to separate programs for each task is)9 2515 4 970 5906 t 12.711 +(numbered lines and visible characters it is probably more efficient to run the one command)14 3638 1 720 6026 t 12.712 +9 CW f 12.713 +(cat -n -v file)3 756 1 1008 6196 t 12.714 +10 R f 12.715 +(than the two-element pipeline)3 1190 1 720 6376 t 12.716 +9 CW f 12.717 +(linenumber file | vis)3 1134 1 1008 6546 t 12.718 +10 R f 12.719 +(In practice, however,)2 849 1 720 6726 t 12.720 +10 CW f 12.721 +(cat)1598 6726 w 12.722 +10 R f 12.723 +( common cases be)3 744(is usually used with no options, so it makes sense to have the)12 2489 2 1807 6726 t 12.724 +( current research version of the)5 1297( The)1 217(the efficient ones.)2 738 3 720 6846 t 12.725 +10 CW f 12.726 +(cat)3009 6846 w 12.727 +10 R f 12.728 +(command is actually about five times faster)6 1814 1 3226 6846 t 12.729 +( data in large blocks instead of the byte-at-)8 1734(than the Berkeley and System V versions because it can process)10 2586 2 720 6966 t 12.730 +( and this is perhaps more important, it)7 1537( Also,)1 267( is enabled.)2 458(time processing that might be required if an option)8 2058 4 720 7086 t 12.731 +( of the real)3 456( Most)1 265( program.)1 397(is hard to imagine any of these examples being the bottleneck of a production)13 3202 4 720 7206 t 12.732 +cleartomark 12.733 +showpage 12.734 +saveobj restore 12.735 +end 12.736 +%%PageBoundingBox: 61 55 514 764 12.737 +%%EndPage: 4 4 12.738 +%%Page: 5 5 12.739 +%%PageBoundingBox: (atend) 12.740 +DpostDict begin 12.741 +/saveobj save def 12.742 +mark 12.743 +5 pagesetup 12.744 +10 R f 12.745 +(- 5 -)2 166 1 2797 480 t 12.746 +( waiting for the user's terminal to display the characters, or even for the user to read)16 3414(time is probably taken)3 906 2 720 840 t 12.747 +(them.)720 960 w 12.748 +( than wider options; which is better depends on the problem.)10 2457(Separate programs are not always better)5 1613 2 970 1116 t 12.749 +( needs a way to perform a new function, one faces the choice of whether to add a new option)19 3739(Whenever one)1 581 2 720 1236 t 12.750 +( The)1 209( none of the programmable tools will do the job conveniently\).)10 2546(or write a new program \(assuming that)6 1565 3 720 1356 t 12.751 +( are appropri-)2 546( Options)1 369( be that each program does one thing.)7 1511(guiding principle for making the choice should)6 1894 4 720 1476 t 12.752 +( there is no such program, then a new)8 1558( If)1 124( the right functionality.)3 946(ately added to a program that already has)7 1692 4 720 1596 t 12.753 +( that case, the usual criteria for program design should be used: the program should)14 3325( In)1 133(program is called for.)3 862 3 720 1716 t 12.754 +( general as possible, its default behavior should match the most common usage, and it should cooper-)16 4115(be as)1 205 2 720 1836 t 12.755 +(ate with other programs.)3 976 1 720 1956 t 12.756 +( first)1 187( The)1 206( problem, dealing with fast terminal lines.)6 1677(Let's look at these issues in the context of another)9 2000 4 970 2112 t 12.757 +( written in the days when 150 baud was ``fast,'' and all terminals used)13 2897(versions of the UNIX system were)5 1423 2 720 2232 t 12.758 +( should we deal with the fact)6 1202( How)1 253( typical, and hard-copy terminals are rare.)6 1721( 9600 baud is)3 560(paper. Today,)1 584 5 720 2352 t 12.759 +(that output from programs like)4 1227 1 720 2472 t 12.760 +10 CW f 12.761 +(cat)1972 2472 w 12.762 +10 R f 12.763 +(scrolls off the top of the screen faster than one can read it?)12 2332 1 2177 2472 t 12.764 +( is to tell each program about the properties of terminals, so it)12 2461( One)1 216(There are two obvious approaches.)4 1393 3 970 2628 t 12.765 +( other is to write a command that handles ter-)9 1811( The)1 206(does the right thing \(whether by option or automatically\).)8 2303 3 720 2748 t 12.766 +(minals, and leave most programs untouched.)5 1784 1 720 2868 t 12.767 +( Berkeley's version of the)4 1039(An example of the first approach is)6 1414 2 970 3024 t 12.768 +10 CW f 12.769 +(ls)3450 3024 w 12.770 +10 R f 12.771 +(command, which lists the filenames)4 1443 1 3597 3024 t 12.772 +( us call it)3 370( Let)1 185(in a directory.)2 561 3 720 3144 t 12.773 +10 CW f 12.774 +(lsc)1863 3144 w 12.775 +10 R f 12.776 +( 7th Edition)2 475( The)1 206(to avoid confusion.)2 771 3 2070 3144 t 12.777 +10 CW f 12.778 +(ls)3548 3144 w 12.779 +10 R f 12.780 +(command lists filenames in a sin-)5 1346 1 3694 3144 t 12.781 +( directory, the list of filenames disappears off the top of the screen at great speed.)15 3290(gle column, so for a large)5 1030 2 720 3264 t 12.782 +10 CW f 12.783 +(lsc)720 3384 w 12.784 +10 R f 12.785 +( columns across the screen \(which is assumed to be 80 columns wide\), so there are typically)16 3770(prints in)1 338 2 932 3384 t 12.786 +( option)1 285( The)1 209( as many names on each line, and thus the output usually fits on one screen.)15 3081(four to eight times)3 745 4 720 3504 t 12.787 +10 CW f 12.788 +(-1)720 3624 w 12.789 +10 R f 12.790 +(can be used to get the old single-column behavior.)8 2011 1 865 3624 t 12.791 +(Surprisingly,)970 3780 w 12.792 +10 CW f 12.793 +(lsc)1515 3780 w 12.794 +10 R f 12.795 +(operates differently if its output is a file or pipe:)9 1917 1 1720 3780 t 12.796 +9 CW f 12.797 +(lsc)1008 3950 w 12.798 +10 R f 12.799 +(produces output different from)3 1228 1 720 4130 t 12.800 +9 CW f 12.801 +(lsc | cat)2 486 1 1008 4300 t 12.802 +10 R f 12.803 +(The reason is that)3 722 1 720 4480 t 12.804 +10 CW f 12.805 +(lsc)1472 4480 w 12.806 +10 R f 12.807 +(begins by examining whether or not its output is a terminal, and prints in columns)14 3358 1 1682 4480 t 12.808 +( to files or pipes,)4 685( retaining single-column output)3 1273( By)1 172(only if it is.)3 477 4 720 4600 t 12.809 +10 CW f 12.810 +(lsc)3356 4600 w 12.811 +10 R f 12.812 +(ensures compatibility with programs)3 1475 1 3565 4600 t 12.813 +(like)720 4720 w 12.814 +10 CW f 12.815 +(grep)895 4720 w 12.816 +10 R f 12.817 +(or)1160 4720 w 12.818 +10 CW f 12.819 +(wc)1268 4720 w 12.820 +10 R f 12.821 +( adjustment of the output format depend-)6 1643( This)1 228(that expect things to be printed one per line.)8 1756 3 1413 4720 t 12.822 +(ing on the destination is not only distasteful, it is unique \320 no standard UNIX command has this property.)18 4265 1 720 4840 t 12.823 +(A more insidious problem with)4 1266 1 970 4996 t 12.824 +10 CW f 12.825 +(lsc)2266 4996 w 12.826 +10 R f 12.827 +(is that the columnation facility, which is actually a useful, gen-)10 2564 1 2476 4996 t 12.828 +( Pro-)1 225( is built in and thus inaccessible to other programs that could use a similar compression.)15 3559(eral function,)1 536 3 720 5116 t 12.829 +( automatic columnation in)3 1050( The)1 206( special solutions to general problems.)5 1537(grams should not attempt)3 1014 4 720 5236 t 12.830 +10 CW f 12.831 +(lsc)4553 5236 w 12.832 +10 R f 12.833 +(is rem-)1 281 1 4759 5236 t 12.834 +( the ``wild cards'' found in some systems that provide filename pattern matching only for a par-)16 3896(iniscent of)1 424 2 720 5356 t 12.835 +( experience with centralized processing of wild cards in the UNIX shell shows over-)13 3458( The)1 212(ticular program.)1 650 3 720 5476 t 12.836 +(whelmingly how important it is to centralize the function where it can be used by all programs.)16 3798 1 720 5596 t 12.837 +(One solution for the)3 808 1 970 5752 t 12.838 +10 CW f 12.839 +(ls)1805 5752 w 12.840 +10 R f 12.841 +( \320 a separate program for columnation, so that columna-)9 2317(problem is obvious)2 771 2 1952 5752 t 12.842 +(tion into say 5 columns is just)6 1196 1 720 5872 t 12.843 +9 CW f 12.844 +(ls | 5)2 324 1 1008 6042 t 12.845 +10 R f 12.846 +( the multi-column option of)4 1110(It is easy to build a first-draft version with)8 1687 2 720 6222 t 12.847 +10 CW f 12.848 +(pr)3543 6222 w 12.849 +10 R f 12.850 +( commands)1 459(. The)1 231 2 3663 6222 t 12.851 +10 CW f 12.852 +(2)4379 6222 w 12.853 +10 R f 12.854 +(,)4439 6222 w 12.855 +10 CW f 12.856 +(3)4490 6222 w 12.857 +10 R f 12.858 +(, etc., are all)3 490 1 4550 6222 t 12.859 +(links to a single file:)4 817 1 720 6342 t 12.860 +9 CW f 12.861 +(pr -$0 -t -l1 $*)4 864 1 1008 6512 t 12.862 +10 CW f 12.863 +($0)720 6692 w 12.864 +10 R f 12.865 +(is the program name \()4 880 1 866 6692 t 12.866 +10 CW f 12.867 +(2)1746 6692 w 12.868 +10 R f 12.869 +(,)1806 6692 w 12.870 +10 CW f 12.871 +(3)1857 6692 w 12.872 +10 R f 12.873 +( so)1 116(, etc.\),)1 250 2 1917 6692 t 12.874 +10 CW f 12.875 +(-$0)2310 6692 w 12.876 +10 R f 12.877 +(becomes)2517 6692 w 12.878 +10 CW f 12.879 +(-)2893 6692 w 12.880 +10 I f 12.881 +(n)2953 6692 w 12.882 +10 R f 12.883 +(where is the number of columns that)6 1471 1 3030 6692 t 12.884 +10 CW f 12.885 +(pr)4528 6692 w 12.886 +10 R f 12.887 +(is to pro-)2 365 1 4675 6692 t 12.888 +( normal heading, set the page length to 1 line, and pass the arguments)13 2816( other options suppress the)4 1082(duce. The)1 422 3 720 6812 t 12.889 +(on to)1 215 1 720 6932 t 12.890 +10 CW f 12.891 +(pr)972 6932 w 12.892 +10 R f 12.893 +( of the use of tools \320 it takes only a moment to write, and it)15 2605( implementation is typical)3 1078(. This)1 265 3 1092 6932 t 12.894 +( a more general service is desired, such as automatically)9 2383( If)1 133(serves perfectly well for most applications.)5 1804 3 720 7052 t 12.895 +( required, but the one-)4 924(selecting the number of columns for optimal compaction, a C program is probably)12 3396 2 720 7172 t 12.896 +(line implementation above satisfies the immediate need and provides a base for experimentation with the)14 4320 1 720 7292 t 12.897 +cleartomark 12.898 +showpage 12.899 +saveobj restore 12.900 +end 12.901 +%%PageBoundingBox: 61 47 514 764 12.902 +%%EndPage: 5 5 12.903 +%%Page: 6 6 12.904 +%%PageBoundingBox: (atend) 12.905 +DpostDict begin 12.906 +/saveobj save def 12.907 +mark 12.908 +6 pagesetup 12.909 +10 R f 12.910 +(- 6 -)2 166 1 2797 480 t 12.911 +(design of a fancier program, should one become necessary.)8 2360 1 720 840 t 12.912 +(Similar reasoning suggests a solution for the general problem of data flowing off screens \(colum-)14 4070 1 970 996 t 12.913 +( programs are by)3 697( Such)1 258( input and print it a screen at a time.)9 1509(nated or not\): a separate program to take any)8 1856 4 720 1116 t 12.914 +( like)1 178(now widely available, under names)4 1419 2 720 1236 t 12.915 +10 CW f 12.916 +(pg)2345 1236 w 12.917 +10 R f 12.918 +(and)2493 1236 w 12.919 +10 CW f 12.920 +(more)2665 1236 w 12.921 +10 R f 12.922 +( solution affects no other programs, but can be)8 1879(. This)1 256 2 2905 1236 t 12.923 +( be enhanced with options)4 1059( usual, once the basic feature is right, the program can)10 2206( As)1 166(used with all of them.)4 889 4 720 1356 t 12.924 +( screen size, backing up, searching for patterns, and anything else that proves useful within)14 3755(for specifying)1 565 2 720 1476 t 12.925 +(that basic job.)2 558 1 720 1596 t 12.926 +( the user forgets to pipe output into)7 1423( If)1 119(There is still a problem, of course.)6 1388 3 970 1752 t 12.927 +10 CW f 12.928 +(pg)3928 1752 w 12.929 +10 R f 12.930 +(, the output that goes off)5 992 1 4048 1752 t 12.931 +( would be desirable if the facilities of)7 1510( It)1 114( is gone.)2 342(the top of the screen)4 825 4 720 1872 t 12.932 +10 CW f 12.933 +(pg)3539 1872 w 12.934 +10 R f 12.935 +(were always present without hav-)4 1353 1 3687 1872 t 12.936 +(ing to be requested explicitly.)4 1185 1 720 1992 t 12.937 +( not)1 156(There are related useful functions that are typically only available as part of a particular program,)15 3914 2 970 2148 t 12.938 +( the history mechanism provided by some versions of the UNIX shell:)11 2844( example is)2 465( One)1 221(in a central service.)3 790 4 720 2268 t 12.939 +( why)1 213( But)1 211( with editing.)2 563(commands are remembered, so it's possible to review and repeat them, perhaps)11 3333 4 720 2388 t 12.940 +( programs called)2 667( not even general enough to pass input to)8 1653( \(It's)1 218(should this facility be restricted to the shell?)7 1782 4 720 2508 t 12.941 +( well; any interactive)3 849( other programs could profit as)5 1244( Certainly)1 424(the shell; it applies to shell commands only.\))7 1803 4 720 2628 t 12.942 +( subtly, why should the facility be)6 1412( More)1 275( from the ability to re-execute commands.)6 1726(program could benefit)2 907 4 720 2748 t 12.943 +( often useful as input to another.)6 1296(restricted to program Pipes have shown that the output from one program is)12 3024 2 720 2868 t 12.944 +( of commands such as)4 890(With a little editing, the output)5 1249 2 720 2988 t 12.945 +10 CW f 12.946 +(ls)2886 2988 w 12.947 +10 R f 12.948 +(or)3033 2988 w 12.949 +10 CW f 12.950 +(make)3143 2988 w 12.951 +10 R f 12.952 +(can be turned into commands or data for)7 1630 1 3410 2988 t 12.953 +(other programs.)1 632 1 720 3108 t 12.954 +( com-)1 235(Another facility that could be usefully centralized is typified by the editor escape in some mail)15 3835 2 970 3264 t 12.955 +( this is all)3 393( But)1 197( is possible to pick up part of a mail message, edit it, and then include it in a reply.)19 3330(mands. It)1 400 4 720 3384 t 12.956 +(done by special facilities within the)5 1418 1 720 3504 t 12.957 +10 CW f 12.958 +(mail)2163 3504 w 12.959 +10 R f 12.960 +(command and so its use is restricted.)6 1468 1 2428 3504 t 12.961 +( by a different program, which usually has its own syntax and seman-)12 2860(Each such service is provided)4 1210 2 970 3660 t 12.962 +( is in contrast to features such as pagination, which is always the same because it is only done by)19 3924(tics. This)1 396 2 720 3780 t 12.963 +( output text is more environmental than functional; it is more like the)12 2772( editing of input and)4 811( The)1 205(one program.)1 532 4 720 3900 t 12.964 +( since the shell)3 597( But)1 197( automatic numbering of lines of text.)6 1519(shell's expansion of filename metacharacters than)5 2007 4 720 4020 t 12.965 +( The)1 211( see the characters sent as input to the programs, it cannot provide such editing.)14 3251(does not)1 341 3 720 4140 t 12.966 +10 CW f 12.967 +(emacs)4554 4140 w 12.968 +10 R f 12.969 +(edi-)4885 4140 w 12.970 +(tor)720 4260 w 12.971 +8 R f 12.972 +(3)831 4228 w 12.973 +10 R f 12.974 +( capability, by processing all UNIX command input and output, but this)11 2901(provides a limited form of this)5 1239 2 900 4260 t 12.975 +( the complexities and vagaries of yet another massive subsys-)9 2469(is expensive, clumsy, and subjects the users to)7 1851 2 720 4380 t 12.976 +(tem \(which isn't to criticize the inventiveness of the idea\).)9 2324 1 720 4500 t 12.977 +(A potentially simpler solution is to let the terminal or terminal interface do the work, with controlled)16 4070 1 970 4656 t 12.978 +( have used the)3 574( We)1 190( retransmission of visible text, and review of what has gone before.)11 2703(scrolling, editing and)2 853 4 720 4776 t 12.979 +(programmability of the Blit terminal)4 1489 1 720 4896 t 12.980 +8 R f 12.981 +(4)2209 4864 w 12.982 +10 R f 12.983 +( capitalize on this)3 726(\320 a programmable bitmap graphics display \320 to)7 2033 2 2281 4896 t 12.984 +(possibility, to good effect.)3 1047 1 720 5016 t 12.985 +( on the display, which can be edited, rearranged and)9 2210(The Blit uses a mouse to point to characters)8 1860 2 970 5172 t 12.986 +( the terminal)2 505( Because)1 382( keyboard.)1 421(transmitted back to the UNIX system as though they had been typed on the)13 3012 4 720 5292 t 12.987 +( how the text was created; all the features)8 1659(is essentially simulating typed input, the programs are oblivious to)9 2661 2 720 5412 t 12.988 +( general editing capabilities of the terminal, with no changes to the)11 2806(discussed above are provided by the)5 1514 2 720 5532 t 12.989 +(UNIX programs.)1 676 1 720 5652 t 12.990 +( user's control.)2 600(There are some obvious direct advantages to the Blit's ability to process text under the)14 3470 2 970 5808 t 12.991 +( is trivial: commands can be selected with the mouse, edited if desired, and retransmitted.)14 3794(Shell history)1 526 2 720 5928 t 12.992 +( equivalent, history is limited neither to the)7 1799(Since from the terminal's viewpoint all text on the display is)10 2521 2 720 6048 t 12.993 +( Blit provides editing, most of the interactive features of programs)10 2654( the)1 149( Because)1 384(shell nor to command input.)4 1133 4 720 6168 t 12.994 +(like)720 6288 w 12.995 +10 CW f 12.996 +(mail)895 6288 w 12.997 +10 R f 12.998 +(are unnecessary; they are done easily, transparently and uniformly by the terminal.)11 3301 1 1160 6288 t 12.999 +( interactive fea-)2 639(The most interesting facet of this work, however, is the way it removes the need for)15 3431 2 970 6444 t 12.1000 +( is the place where interaction is provided, much as the shell is the pro-)14 2907(tures in programs; instead, the Blit)5 1413 2 720 6564 t 12.1001 +( course, programming the termi-)4 1327( of)1 115( Unfortunately,)1 642(gram that interprets filename-matching metacharacters.)4 2236 4 720 6684 t 12.1002 +( meshes)1 326(nal demands access to a part of the environment off-limits to most programmers, but the solution)15 3994 2 720 6804 t 12.1003 +( to provide)2 443( the terminal cannot be modified)5 1321( If)1 120(well with the environment and is appealing in its simplicity.)9 2436 4 720 6924 t 12.1004 +( a user-level program or perhaps the UNIX kernel itself could be modified fairly easily to do)16 3692(the capabilities,)1 628 2 720 7044 t 12.1005 +(roughly what the Blit does, with similar results.)7 1903 1 720 7164 t 12.1006 +cleartomark 12.1007 +showpage 12.1008 +saveobj restore 12.1009 +end 12.1010 +%%PageBoundingBox: 61 60 514 764 12.1011 +%%EndPage: 6 6 12.1012 +%%Page: 7 7 12.1013 +%%PageBoundingBox: (atend) 12.1014 +DpostDict begin 12.1015 +/saveobj save def 12.1016 +mark 12.1017 +7 pagesetup 12.1018 +10 R f 12.1019 +(- 7 -)2 166 1 2797 480 t 12.1020 +( to problem-solving on the UNIX system is to identify the right primitive operations and to)15 3740(The key)1 330 2 970 840 t 12.1021 +( a)1 73( In)1 137( tend to solve general problems rather than special cases.)9 2303( programs)1 407( UNIX)1 304(put them at the right place.)5 1096 6 720 960 t 12.1022 +( space of jobs to be done \(although with a fair)10 1890(very loose sense, the programs are orthogonal, spanning the)8 2430 2 720 1080 t 12.1023 +( are placed where they will)5 1092( Functions)1 448( efficiency\).)1 484(amount of overlap for reasons of history, convenience or)8 2296 4 720 1200 t 12.1024 +( any more than there)4 860(do the most good: there shouldn't be a pager in every program that produces output)14 3460 2 720 1320 t 12.1025 +(should be filename pattern matching in every program that uses filenames.)10 2981 1 720 1440 t 12.1026 +( is successful in part because it has a small)9 1772( It)1 119(One thing that UNIX does not need is more features.)9 2179 3 970 1596 t 12.1027 +( make it easier for users to)6 1077( adding features does not)4 1018( Merely)1 343(number of good ideas that work well together.)7 1882 4 720 1716 t 12.1028 +( right solution in the right place is always more effective)10 2278( The)1 207(do things \320 it just makes the manual thicker.)8 1835 3 720 1836 t 12.1029 +(than haphazard hacking.)2 972 1 720 1956 t 12.1030 +( W. Kernighan and Rob Pike,)5 1179(1. B.)1 342 2 720 2148 t 12.1031 +10 I f 12.1032 +(The UNIX Programming Environment,)3 1560 1 2266 2148 t 12.1033 +10 R f 12.1034 +(Prentice-Hall \(1984\).)1 848 1 3851 2148 t 12.1035 +( Norman, ``The Truth about UNIX,'')5 1482(2. D.)1 347 2 720 2304 t 12.1036 +10 I f 12.1037 +(Datamation)2574 2304 w 12.1038 +10 R f 12.1039 +(\(November, 1981\).)1 762 1 3077 2304 t 12.1040 +( Gosling, ``UNIX Emacs,'' CMU internal memorandum \(August, 1982\).)8 2907(3. James)1 494 2 720 2460 t 12.1041 +( Multiplexed Graphics Terminal,'')3 1411( Pike, ``The Blit: A)4 811(4. R.)1 342 3 720 2616 t 12.1042 +10 I f 12.1043 +(Bell System Technical Journal)3 1248 1 3319 2616 t 12.1044 +10 R f 12.1045 +(\(this issue,)1 438 1 4602 2616 t 12.1046 +(1984\).)970 2736 w 12.1047 +cleartomark 12.1048 +showpage 12.1049 +saveobj restore 12.1050 +end 12.1051 +%%PageBoundingBox: 61 502 514 764 12.1052 +%%EndPage: 7 7 12.1053 +%%Trailer 12.1054 +DpostDict begin 12.1055 +done 12.1056 +end 12.1057 +%%Pages: 7 12.1058 +%%DocumentFonts: Courier Times-Bold Times-Italic Times-Roman Times-Roman Helvetica-Bold
13.1 Binary file pdf/utf.pdf has changed
14.1 --- a/src/index.md Sat Sep 12 20:56:19 2009 +0200 14.2 +++ b/src/index.md Wed May 18 10:18:56 2011 +0200 14.3 @@ -68,9 +68,9 @@ 14.4 (see <http://9fans.net/archive/2009/03/229>) 14.5 - Column mouse actions 14.6 (see [video](http://4l77.com/pub/acme-growcol.mpeg)): 14.7 - - B1: increase size. 14.8 - - B2: swap with left column. 14.9 - - B3: maximize size. 14.10 + - B1: increase size 14.11 + - B2: maximize size 14.12 + - B3: move to left-most position and hide the other clients 14.13 14.14 - **[Rio](http://plan9.bell-labs.com/sources/contrib/yiyus/cmd/rio/)** ([hg](/hg/patch9/rio/)) 14.15 - Alternative chording with the mouse wheel instead of B2 and B3.