4l77.com
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.