Browse Source

Plan 9 from Bell Labs 2004-03-12

David du Colombier 20 years ago
parent
commit
be072d16bb

+ 27 - 16
dist/replica/plan9.db

@@ -233,7 +233,7 @@
 386/bin/fossil/conf - 775 sys sys 1056364255 1497
 386/bin/fossil/flchk - 775 sys sys 1073888256 235503
 386/bin/fossil/flfmt - 775 sys sys 1073888257 249314
-386/bin/fossil/fossil - 775 sys sys 1077940925 349367
+386/bin/fossil/fossil - 775 sys sys 1079034455 350022
 386/bin/freq - 775 sys sys 1064598145 60197
 386/bin/fs - 20000000775 sys sys 954380769 0
 386/bin/fs/32vfs - 775 sys sys 1064598146 95907
@@ -336,7 +336,7 @@
 386/bin/nntpfs - 775 sys sys 1064598272 162969
 386/bin/ns - 775 sys sys 1064598273 63582
 386/bin/p - 775 sys sys 1064598274 63537
-386/bin/page - 775 sys sys 1071245340 216518
+386/bin/page - 775 sys sys 1079029959 230759
 386/bin/paqfs - 775 sys sys 1073851235 109518
 386/bin/passwd - 775 sys sys 1069592374 80215
 386/bin/pbd - 775 sys sys 1038443175 4663
@@ -829,6 +829,7 @@ arm/bin/ape - 20000000775 sys sys 985644327 0
 arm/bin/auth - 20000000775 sys sys 985644308 0
 arm/bin/aux - 20000000775 sys sys 985644327 0
 arm/bin/bitsy - 20000000775 sys sys 985559407 0
+arm/bin/bitsy/pencal - 775 sys sys 1079016939 119781
 arm/bin/dial - 20000000775 sys sys 1059180057 0
 arm/bin/disk - 20000000775 sys sys 985644211 0
 arm/bin/fossil - 20000000775 sys sys 1042090587 0
@@ -896,7 +897,7 @@ lib/dict/README.pgw - 664 sys sys 1063660179 147
 lib/face - 20000000775 sys sys 945049943 0
 lib/face/.machinelist - 644 sys sys 944945676 97
 lib/face/48x48x1 - 20000000755 sys sys 944941680 0
-lib/face/48x48x1/.dict - 664 sys sys 1078956098 9824
+lib/face/48x48x1/.dict - 664 sys sys 1079054327 9812
 lib/face/48x48x1/a - 20000000755 sys sys 945300156 0
 lib/face/48x48x1/a/acsnet.1 - 644 sys sys 1020313578 1056
 lib/face/48x48x1/a/adb.1 - 644 sys sys 1020313578 1200
@@ -982,13 +983,14 @@ lib/face/48x48x1/t/tom.1 - 644 sys sys 944941669 1056
 lib/face/48x48x1/t/transistor.1 - 644 sys sys 944941669 1152
 lib/face/48x48x1/t/traveller-request.1 - 644 sys sys 944941669 1152
 lib/face/48x48x1/u - 20000000775 sys sys 1078952812 0
+lib/face/48x48x1/u/u.aibn54.mpifr-bonn.mpg.de - 644 sys sys 944941670 1152
+lib/face/48x48x1/u/u.babsy.mpifr-bonn.mpg.de - 644 sys sys 944941670 1152
 lib/face/48x48x1/u/unicode-request.1 - 644 sys sys 944941669 1152
 lib/face/48x48x1/u/unknown.aaai.org - 644 sys sys 944941669 1152
 lib/face/48x48x1/u/unknown.acsnet - 644 sys sys 944941675 1056
 lib/face/48x48x1/u/unknown.adobe.com - 644 sys sys 944941674 1152
 lib/face/48x48x1/u/unknown.aero.org - 644 sys sys 944941677 1152
 lib/face/48x48x1/u/unknown.ai.mit.edu - 644 sys sys 944941674 1152
-lib/face/48x48x1/u/unknown.aibn54.mpifr-bonn.mpg.de - 644 sys sys 944941670 1152
 lib/face/48x48x1/u/unknown.alliant.com - 644 sys sys 944941678 1152
 lib/face/48x48x1/u/unknown.anl.gov - 644 sys sys 944941677 1152
 lib/face/48x48x1/u/unknown.aol.com - 664 sys sys 1078955399 1200
@@ -1001,7 +1003,6 @@ lib/face/48x48x1/u/unknown.athena.mit.edu - 644 sys sys 944941671 1152
 lib/face/48x48x1/u/unknown.au - 644 sys sys 944941675 1152
 lib/face/48x48x1/u/unknown.auspex.com - 644 sys sys 944941673 1152
 lib/face/48x48x1/u/unknown.austek.oz.au - 644 sys sys 944941680 1152
-lib/face/48x48x1/u/unknown.babsy.mpifr-bonn.mpg.de - 644 sys sys 944941670 1152
 lib/face/48x48x1/u/unknown.bbn.com - 644 sys sys 944941671 1152
 lib/face/48x48x1/u/unknown.be - 644 sys sys 944941677 1152
 lib/face/48x48x1/u/unknown.bellcore.com - 644 sys sys 944941679 1056
@@ -1259,7 +1260,7 @@ lib/face/48x48x2/x - 20000000755 sys sys 944941683 0
 lib/face/48x48x2/y - 20000000755 sys sys 944941683 0
 lib/face/48x48x2/z - 20000000755 sys sys 944941683 0
 lib/face/48x48x4 - 20000000775 sys sys 944941894 0
-lib/face/48x48x4/.dict - 664 sys sys 1069781039 2061
+lib/face/48x48x4/.dict - 664 sys sys 1079017691 2391
 lib/face/48x48x4/Z - 20000000775 sys sys 944945342 0
 lib/face/48x48x4/a - 20000000775 sys sys 944945701 0
 lib/face/48x48x4/a/adb.1 - 664 sys sys 944941890 962
@@ -1317,6 +1318,7 @@ lib/face/48x48x4/m - 20000000775 sys sys 947359995 0
 lib/face/48x48x4/m/mhw.1 - 664 sys sys 944941893 1167
 lib/face/48x48x4/m/mig.1 - 664 sys sys 944941893 966
 lib/face/48x48x4/m/mihalis.1 - 664 sys sys 944941893 1071
+lib/face/48x48x4/m/moneybag.1 - 644 sys sys 1079017457 1210
 lib/face/48x48x4/n - 20000000775 sys sys 944941893 0
 lib/face/48x48x4/n/nch.1 - 664 sys sys 944941893 1153
 lib/face/48x48x4/o - 20000000775 sys sys 944945559 0
@@ -1344,6 +1346,7 @@ lib/face/48x48x4/s/sbranigan.1 - 644 sys sys 944941894 1003
 lib/face/48x48x4/s/sean.1 - 664 sys sys 944941893 944
 lib/face/48x48x4/s/seanq.1 - 664 sys sys 944941894 1054
 lib/face/48x48x4/s/sjf.1 - 664 sys sys 944941894 1054
+lib/face/48x48x4/s/spam.1 - 644 sys sys 1079017520 1071
 lib/face/48x48x4/s/spm.1 - 664 sys sys 944941894 1012
 lib/face/48x48x4/t - 20000000775 sys sys 944941929 0
 lib/face/48x48x4/t/td.1 - 664 sys sys 944941894 976
@@ -1352,8 +1355,15 @@ lib/face/48x48x4/t/tkh.1 - 664 sys sys 944941894 1062
 lib/face/48x48x4/t/tor.1 - 664 sys sys 944941894 1080
 lib/face/48x48x4/t/tsalamon.1 - 664 sys sys 944941894 1055
 lib/face/48x48x4/u - 20000000775 sys sys 944941894 0
+lib/face/48x48x4/u/book.1 - 644 sys sys 1079016751 975
+lib/face/48x48x4/u/unknown.aes.org - 644 sys sys 1079016534 923
+lib/face/48x48x4/u/unknown.ebay.com - 664 sys sys 1079017045 588
+lib/face/48x48x4/u/unknown.ghs.com - 664 sys sys 1079016859 490
+lib/face/48x48x4/u/unknown.rs-components.com - 644 sys sys 1079017058 512
+lib/face/48x48x4/u/unknown.snellwilcox.com - 644 sys sys 1079017415 901
 lib/face/48x48x4/v - 20000000775 sys sys 944945622 0
 lib/face/48x48x4/v/va.1 - 664 sys sys 944941894 1116
+lib/face/48x48x4/v/virus.1 - 644 sys sys 1079017494 1110
 lib/face/48x48x4/w - 20000000775 sys sys 944945629 0
 lib/face/48x48x4/w/wkj.1 - 664 sys sys 1056984184 1129
 lib/face/48x48x4/w/wmc.1 - 664 sys sys 944941894 999
@@ -1361,7 +1371,7 @@ lib/face/48x48x4/x - 20000000775 sys sys 944941894 0
 lib/face/48x48x4/y - 20000000775 sys sys 944941894 0
 lib/face/48x48x4/z - 20000000775 sys sys 944941894 0
 lib/face/48x48x8 - 20000000775 sys sys 944941834 0
-lib/face/48x48x8/.dict - 664 sys sys 1078952031 2024
+lib/face/48x48x8/.dict - 664 sys sys 1079022126 2048
 lib/face/48x48x8/Z - 20000000775 sys sys 944941832 0
 lib/face/48x48x8/a - 20000000775 sys sys 944941832 0
 lib/face/48x48x8/a/axel.1 - 664 sys sys 1056983599 473
@@ -1410,6 +1420,7 @@ lib/face/48x48x8/u/unknown.ar - 664 sys sys 1078952024 349
 lib/face/48x48x8/u/unknown.at - 664 sys sys 1078952024 342
 lib/face/48x48x8/u/unknown.au - 664 sys sys 1078952024 428
 lib/face/48x48x8/u/unknown.be - 664 sys sys 1078952024 343
+lib/face/48x48x8/u/unknown.bg - 664 sys sys 1079022090 363
 lib/face/48x48x8/u/unknown.br - 664 sys sys 1078952024 437
 lib/face/48x48x8/u/unknown.ca - 664 sys sys 1078952024 384
 lib/face/48x48x8/u/unknown.ch - 664 sys sys 1078952024 353
@@ -4679,7 +4690,7 @@ sys/man/1/news - 664 sys sys 1015024739 1148
 sys/man/1/nm - 664 sys sys 944959673 1539
 sys/man/1/ns - 664 sys sys 944959677 893
 sys/man/1/p - 664 sys sys 944959673 504
-sys/man/1/page - 664 sys sys 1071247418 4870
+sys/man/1/page - 664 sys sys 1079029945 5717
 sys/man/1/passwd - 664 sys sys 1068823217 1377
 sys/man/1/patch - 664 sys sys 1067804449 2176
 sys/man/1/pcc - 664 sys sys 1015024740 3478
@@ -6788,11 +6799,11 @@ sys/src/cmd/acid/print.c - 664 sys sys 984756705 6840
 sys/src/cmd/acid/proc.c - 664 sys sys 1014924908 4513
 sys/src/cmd/acid/util.c - 664 sys sys 944960738 4297
 sys/src/cmd/acme - 20000000775 sys sys 969511023 0
-sys/src/cmd/acme/acme.c - 664 sys sys 1077376255 19258
+sys/src/cmd/acme/acme.c - 664 sys sys 1079044031 19192
 sys/src/cmd/acme/addr.c - 664 sys sys 1018553456 4787
 sys/src/cmd/acme/buff.c - 664 sys sys 1014926092 5573
 sys/src/cmd/acme/cols.c - 664 sys sys 1032462024 11122
-sys/src/cmd/acme/dat.h - 664 sys sys 1077376255 11019
+sys/src/cmd/acme/dat.h - 664 sys sys 1079044030 11080
 sys/src/cmd/acme/disk.c - 664 sys sys 1014926093 2151
 sys/src/cmd/acme/ecmd.c - 664 sys sys 1077376256 24294
 sys/src/cmd/acme/edit.c - 664 sys sys 1015701171 12055
@@ -6809,9 +6820,9 @@ sys/src/cmd/acme/rows.c - 664 sys sys 1068140772 14637
 sys/src/cmd/acme/scrl.c - 664 sys sys 1014926095 3072
 sys/src/cmd/acme/text.c - 664 sys sys 1077376258 27226
 sys/src/cmd/acme/time.c - 664 sys sys 1014926095 1783
-sys/src/cmd/acme/util.c - 664 sys sys 1078466661 7312
+sys/src/cmd/acme/util.c - 664 sys sys 1079044030 7332
 sys/src/cmd/acme/wind.c - 664 sys sys 1073566950 11094
-sys/src/cmd/acme/xfid.c - 664 sys sys 1077376259 19260
+sys/src/cmd/acme/xfid.c - 664 sys sys 1079044030 19175
 sys/src/cmd/ar.c - 664 sys sys 1046643027 23717
 sys/src/cmd/archfs.c - 664 sys sys 1014925694 3871
 sys/src/cmd/ascii.c - 664 sys sys 964457138 3989
@@ -7173,7 +7184,7 @@ sys/src/cmd/bitsy/keyboard.c - 664 sys sys 1014926253 9509
 sys/src/cmd/bitsy/light.rc - 775 sys sys 985466176 242
 sys/src/cmd/bitsy/mkfile - 664 sys sys 985559341 237
 sys/src/cmd/bitsy/params.c - 664 sys sys 1014926253 1124
-sys/src/cmd/bitsy/pencal.c - 664 sys sys 1018288156 4506
+sys/src/cmd/bitsy/pencal.c - 664 sys sys 1079016904 4589
 sys/src/cmd/bitsy/prompter.c - 664 sys sys 1014926253 5888
 sys/src/cmd/bzip2 - 20000000775 sys sys 969500958 0
 sys/src/cmd/bzip2/CHANGES - 664 sys sys 964847954 6251
@@ -7543,7 +7554,7 @@ sys/src/cmd/fossil/9fsys.c - 664 sys sys 1068591358 29979
 sys/src/cmd/fossil/9lstn.c - 664 sys sys 1042005503 2865
 sys/src/cmd/fossil/9p.c - 664 sys sys 1077896346 21766
 sys/src/cmd/fossil/9ping.c - 664 sys sys 1042005503 1563
-sys/src/cmd/fossil/9proc.c - 664 sys sys 1072705704 14523
+sys/src/cmd/fossil/9proc.c - 664 sys sys 1079034426 14680
 sys/src/cmd/fossil/9srv.c - 664 sys sys 1077896346 3879
 sys/src/cmd/fossil/9user.c - 664 sys sys 1071179088 17260
 sys/src/cmd/fossil/Ccli.c - 664 sys sys 1042005504 1624
@@ -9778,9 +9789,9 @@ sys/src/cmd/page/page.h - 664 sys sys 1078973385 2111
 sys/src/cmd/page/pdf.c - 664 sys sys 1038517814 2884
 sys/src/cmd/page/pdfprolog.ps - 664 sys sys 1035695487 699
 sys/src/cmd/page/ps.c - 664 sys sys 1045505467 9176
-sys/src/cmd/page/rotate.c - 664 sys sys 1078973384 9542
+sys/src/cmd/page/rotate.c - 664 sys sys 1079029957 9971
 sys/src/cmd/page/util.c - 664 sys sys 944961364 2090
-sys/src/cmd/page/view.c - 664 sys sys 1078973385 21779
+sys/src/cmd/page/view.c - 664 sys sys 1079029958 22326
 sys/src/cmd/paqfs - 20000000775 sys sys 1017696804 0
 sys/src/cmd/paqfs/mkfile - 664 sys sys 1032060366 228
 sys/src/cmd/paqfs/mkpaqfs.c - 664 sys sys 1072729575 8836

+ 30 - 0
dist/replica/plan9.log

@@ -14610,3 +14610,33 @@
 1078974110 0 c sys/src/cmd/page/page.h - 664 sys sys 1078973385 2111
 1078974110 1 c sys/src/cmd/page/rotate.c - 664 sys sys 1078973384 9542
 1078974110 2 c sys/src/cmd/page/view.c - 664 sys sys 1078973385 21779
+1079017313 0 a arm/bin/bitsy/pencal - 775 sys sys 1079016939 119781
+1079017313 1 c lib/face/48x48x4/.dict - 664 sys sys 1079016738 2152
+1079017313 2 a lib/face/48x48x4/u/book.1 - 644 sys sys 1079016751 975
+1079017313 3 a lib/face/48x48x4/u/unknown.aes.org - 644 sys sys 1079016534 923
+1079017313 4 a lib/face/48x48x4/u/unknown.ebay.com - 664 sys sys 1079017045 588
+1079017313 5 a lib/face/48x48x4/u/unknown.ghs.com - 664 sys sys 1079016859 490
+1079017313 6 a lib/face/48x48x4/u/unknown.rs-components.com - 644 sys sys 1079017058 512
+1079017313 7 c sys/src/cmd/bitsy/pencal.c - 664 sys sys 1079016904 4589
+1079019113 0 c lib/face/48x48x4/.dict - 664 sys sys 1079017691 2391
+1079019113 1 a lib/face/48x48x4/m/moneybag.1 - 644 sys sys 1079017457 1210
+1079019113 2 a lib/face/48x48x4/s/spam.1 - 644 sys sys 1079017520 1071
+1079019113 3 a lib/face/48x48x4/u/unknown.snellwilcox.com - 644 sys sys 1079017415 901
+1079019113 4 a lib/face/48x48x4/v/virus.1 - 644 sys sys 1079017494 1110
+1079022713 0 c lib/face/48x48x8/.dict - 664 sys sys 1079022126 2048
+1079022713 1 a lib/face/48x48x8/u/unknown.bg - 664 sys sys 1079022090 363
+1079029916 0 c sys/man/1/page - 664 sys sys 1079029945 5717
+1079029916 1 c sys/src/cmd/page/rotate.c - 664 sys sys 1079029957 9971
+1079029916 2 c sys/src/cmd/page/view.c - 664 sys sys 1079029958 22326
+1079031716 0 c 386/bin/page - 775 sys sys 1079029959 230759
+1079035316 0 c 386/bin/fossil/fossil - 775 sys sys 1079034455 350022
+1079035316 1 c sys/src/cmd/fossil/9proc.c - 664 sys sys 1079034426 14680
+1079044317 0 c sys/src/cmd/acme/acme.c - 664 sys sys 1079044031 19192
+1079044317 1 c sys/src/cmd/acme/dat.h - 664 sys sys 1079044030 11080
+1079044317 2 c sys/src/cmd/acme/util.c - 664 sys sys 1079044030 7332
+1079044317 3 c sys/src/cmd/acme/xfid.c - 664 sys sys 1079044030 19175
+1079055118 0 c lib/face/48x48x1/.dict - 664 sys sys 1079054327 9812
+1079055118 1 a lib/face/48x48x1/u/u.aibn54.mpifr-bonn.mpg.de - 644 sys sys 944941670 1152
+1079055118 2 a lib/face/48x48x1/u/u.babsy.mpifr-bonn.mpg.de - 644 sys sys 944941670 1152
+1079055118 3 d lib/face/48x48x1/u/unknown.babsy.mpifr-bonn.mpg.de - 644 sys sys 944941670 0
+1079055118 4 d lib/face/48x48x1/u/unknown.aibn54.mpifr-bonn.mpg.de - 644 sys sys 944941670 0

+ 2 - 2
lib/face/48x48x1/.dict

@@ -3,7 +3,7 @@ acsnet/unknown u/unknown.acsnet
 adobe.com/unknown u/unknown.adobe.com
 aero.org/unknown u/unknown.aero.org
 ai.mit.edu/unknown u/unknown.ai.mit.edu
-aibn54.mpifr-bonn.mpg.de/unknown u/unknown.aibn54.mpifr-bonn.mpg.de
+aibn54.mpifr-bonn.mpg.de/unknown u/u.aibn54.mpifr-bonn.mpg.de
 alliant.com/unknown u/unknown.alliant.com
 andrew.cmu.edu/info-andrew-request i/info-andrew-request.1
 anl.gov/unknown u/unknown.anl.gov
@@ -52,7 +52,7 @@ athena.mit.edu/unknown u/unknown.athena.mit.edu
 au/unknown u/unknown.au
 auspex.com/unknown u/unknown.auspex.com
 austek.oz.au/unknown u/unknown.austek.oz.au
-babsy.mpifr-bonn.mpg.de/unknown u/unknown.babsy.mpifr-bonn.mpg.de
+babsy.mpifr-bonn.mpg.de/unknown u/u.babsy.mpifr-bonn.mpg.de
 bbn.com/unknown u/unknown.bbn.com
 be/unknown u/unknown.be
 bellcore.com/unknown u/unknown.bellcore.com

+ 0 - 0
lib/face/48x48x1/u/unknown.aibn54.mpifr-bonn.mpg.de → lib/face/48x48x1/u/u.aibn54.mpifr-bonn.mpg.de


+ 0 - 0
lib/face/48x48x1/u/unknown.babsy.mpifr-bonn.mpg.de → lib/face/48x48x1/u/u.babsy.mpifr-bonn.mpg.de


+ 11 - 2
lib/face/48x48x4/.dict

@@ -1,6 +1,10 @@
+FACEDOM/glenda g/glenda.1
 acsnet/piers p/piers.1
-amug.org/deeg1225 d/deeg1225.1
+aes.org/unknown u/unknown.aes.org
 aladdin.com/unknown g/ghost.1
+amazon.com.uk/unkown u/book.1
+amazon.com/unkown u/book.1
+amug.org/deeg1225 d/deeg1225.1
 astro/adb a/adb.1
 astro/alur a/alur.1
 astro/bobf b/bobf.1
@@ -66,6 +70,9 @@ cpsc.ucalgary.ca/mirtchov a/andrey.1
 cs.utwente.nl/sape s/sape.1
 delbarton.org/rsc r/rsc.1
 delbarton.org/unknown d/delbarton.1
+ebay.com.uk/unknown u/unknown.ebay.com
+ebay.com/unknown u/unknown.ebay.com
+ghs.com/unknown u/unknown.ghs.com
 google.com/r r/rob.1
 google.com/sean s/seanq.1
 harvard.edu/rsc r/rsc.1
@@ -85,6 +92,8 @@ research.att.com/andrew a/andrew.1
 research.att.com/llc l/llc.1
 research.att.com/rsc r/rsc.1
 research.att.com/rvc r/rvc.1
+rs-components.com/unknown u/unknown.rs-components.com
+snellwilcox.com/unknown u/unknown.snellwilcox.com
+spam.com/unknowm s/spam.1
 swtch.com/rsc r/rsc.1
 ucalgary.ca/andrey a/andrey.1
-FACEDOM/glenda g/glenda.1

BIN
lib/face/48x48x4/m/moneybag.1


BIN
lib/face/48x48x4/s/spam.1


BIN
lib/face/48x48x4/u/book.1


BIN
lib/face/48x48x4/u/unknown.aes.org


BIN
lib/face/48x48x4/u/unknown.ebay.com


BIN
lib/face/48x48x4/u/unknown.ghs.com


BIN
lib/face/48x48x4/u/unknown.rs-components.com


BIN
lib/face/48x48x4/u/unknown.snellwilcox.com


BIN
lib/face/48x48x4/v/virus.1


+ 1 - 0
lib/face/48x48x8/.dict

@@ -8,6 +8,7 @@ at/unknown u/unknown.at
 au/unknown u/unknown.au
 be/unknown u/unknown.be
 bio.cse.psu.edu/schwartz s/scottschwartz.1
+bg/unknown u/unknown.bg
 br/unknown u/unknown.br
 ca/unknown u/unknown.ca
 caldo.demon.co.uk/forsyth f/forsyth.1

BIN
lib/face/48x48x8/u/unknown.bg


+ 42 - 4
sys/man/1/page

@@ -133,6 +133,47 @@ rather than exit cleanly on errors,
 to facilitate debugging.
 .PP
 Pressing and holding button 1 permits panning about the page.
+.PP
+Button 2 raises a menu of operations on the current image or the
+entire set.  The image transformations are non-destructive and are
+valid only for the currently displayed image.  They are lost as soon
+as another image is displayed.
+The button 2 menu operations are:
+.TF Resize
+.TP
+.B Orig size
+Restores the image to the original. All modifications are lost.
+.TP
+.B Zoom
+Prompts the user to sweep a rectangle on the image which is 
+expanded proportionally to the rectangle.
+.TP
+.B Fit window
+Resizes the image so that it fits in the current window.
+.TP
+.B Rotate 90
+Rotates the image 90 degrees clockwise
+.TP
+.B Upside down
+Toggles whether images are displayed upside-down.
+.TP
+.B Next
+Displays the next page.
+.TP
+.B Prev
+Displays the previous page.
+.TP
+.B Reverse
+Reverses the order in which pages are displayed.
+.TP
+.B Write
+Writes the image to file.
+.PD
+.PP
+Button 3 raises a menu of the
+pages
+to be selected for viewing in any order.
+.PP
 Typing a
 .B q
 or
@@ -157,12 +198,9 @@ removes an image from the working set.
 .PP
 To go to a specific page, one can type its number followed by enter.
 Typing left arrow, backspace, or minus displays the previous page.
-Clicking button 2 or typing right arrow, space, or enter displays the next page.
+Typing right arrow, space, or enter displays the next page.
 The up and down arrow pan up and down one half screen height,
 changing pages when panning off the top or bottom of the page.
-Button 3 raises a menu of the
-pages
-to be selected for viewing in any order.
 .PP
 .I Page
 calls

+ 12 - 18
sys/src/cmd/acme/acme.c

@@ -154,7 +154,8 @@ threadmain(int argc, char *argv[])
 	cerr = chancreate(sizeof(char*), 0);
 	cedit = chancreate(sizeof(int), 0);
 	cexit = chancreate(sizeof(int), 0);
-	if(cwait==nil || ccommand==nil || ckill==nil || cxfidalloc==nil || cxfidfree==nil || cerr==nil || cexit==nil){
+	cwarn = chancreate(sizeof(void*), 1);
+	if(cwait==nil || ccommand==nil || ckill==nil || cxfidalloc==nil || cxfidfree==nil || cerr==nil || cexit==nil || cwarn==nil){
 		fprint(2, "acme: can't create initial channels: %r\n");
 		exits("channels");
 	}
@@ -379,9 +380,6 @@ keyboardthread(void *)
 				winlock(t->w, 'K');
 				wincommit(t->w, t);
 				winunlock(t->w);
-				qlock(&row);
-				flushwarnings();
-				qunlock(&row);
 				flushimage(display, 1);
 			}
 			alts[KTimer].c = nil;
@@ -408,9 +406,6 @@ keyboardthread(void *)
 			}
 			if(nbrecv(keyboardctl->c, &r) > 0)
 				goto casekeyboard;
-			qlock(&row);
-			flushwarnings();
-			qunlock(&row);
 			flushimage(display, 1);
 			break;
 		}
@@ -427,7 +422,7 @@ mousethread(void *)
 	Plumbmsg *pm;
 	Mouse m;
 	char *act;
-	enum { MResize, MMouse, MPlumb, NMALT };
+	enum { MResize, MMouse, MPlumb, MWarnings, NMALT };
 	static Alt alts[NMALT+1];
 
 	threadsetname("mousethread");
@@ -440,21 +435,24 @@ mousethread(void *)
 	alts[MPlumb].c = cplumb;
 	alts[MPlumb].v = ±
 	alts[MPlumb].op = CHANRCV;
+	alts[MWarnings].c = cwarn;
+	alts[MWarnings].v = nil;
+	alts[MWarnings].op = CHANRCV;
 	if(cplumb == nil)
 		alts[MPlumb].op = CHANNOP;
 	alts[NMALT].op = CHANEND;
 	
 	for(;;){
+		qlock(&row);
+		flushwarnings();
+		qunlock(&row);
+		flushimage(display, 1);
 		switch(alt(alts)){
 		case MResize:
 			if(getwindow(display, Refnone) < 0)
 				error("attach to window");
 			scrlresize();
 			rowresize(&row, screen->clipr);
-			qlock(&row);
-			flushwarnings();
-			qunlock(&row);
-			flushimage(display, 1);
 			break;
 		case MPlumb:
 			if(strcmp(pm->type, "text") == 0){
@@ -464,12 +462,10 @@ mousethread(void *)
 				else if(strcmp(act, "showdata")==0)
 					plumbshow(pm);
 			}
-			qlock(&row);
-			flushwarnings();
-			qunlock(&row);
-			flushimage(display, 1);
 			plumbfree(pm);
 			break;
+		case MWarnings:
+			break;
 		case MMouse:
 			/*
 			 * Make a copy so decisions are consistent; mousectl changes
@@ -552,8 +548,6 @@ mousethread(void *)
 				goto Continue;
 			}
     Continue:
-			flushwarnings();
-			flushimage(display, 1);
 			qunlock(&row);
 			break;
 		}

+ 1 - 0
sys/src/cmd/acme/dat.h

@@ -545,5 +545,6 @@ Channel	*mouseexit1;	/* chan(int) */
 Channel	*cexit;		/* chan(int) */
 Channel	*cerr;		/* chan(char*) */
 Channel	*cedit;		/* chan(int) */
+Channel	*cwarn;		/* chan(void*)[1] (really chan(unit)[1]) */
 
 #define	STACK	8192

+ 1 - 0
sys/src/cmd/acme/util.c

@@ -135,6 +135,7 @@ addwarningtext(Mntdir *md, Rune *r, int nr)
 	warn->next = warnings;
 	warnings = warn;
 	bufinsert(&warn->buf, 0, r, nr);
+	nbsendp(cwarn, 0);
 }
 
 /* called while row is locked */

+ 0 - 5
sys/src/cmd/acme/xfid.c

@@ -542,9 +542,6 @@ xfidwrite(Xfid *x)
 	}
 	if(w)
 		winunlock(w);
-	qlock(&row);
-	flushwarnings();
-	qunlock(&row);
 }
 
 void
@@ -815,7 +812,6 @@ xfideventwrite(Xfid *x, Window *w)
 			qunlock(&row);
 			goto Rescue;
 		}
-		flushwarnings();
 		qunlock(&row);
 
 	}
@@ -1033,7 +1029,6 @@ xfidindexread(Xfid *x)
 			b[n++] = '\n';
 		}
 	}
-	flushwarnings();
 	qunlock(&row);
 	off = x->offset;
 	cnt = x->count;

+ 82 - 82
sys/src/cmd/bitsy/pencal.c

@@ -52,7 +52,7 @@ getmouse(int mouse) {
 
 	n = 0;
 	p.x = p.y = 0;
-	do {
+	do{
 		if (read(mouse, buf, 48) != 48)
 			sysfatal("read: %r");
 		if (debug > 1) fprint(2, "%s\n", buf);
@@ -68,13 +68,13 @@ getmouse(int mouse) {
 		p.x = (n * p.x + x)/(n+1);
 		p.y = (n * p.y + y)/(n+1);
 		n++;
-	} while (b & 0x7);
+	}while (b & 0x7);
 	return p;
 }
 
 void
 main(int argc, char **argv) {
-	int i, mouse, mousectl, wctl;
+	int i, mouse, mousectl, wctl, ntries;
 	Rectangle r, oldsize;
 
 	ARGBEGIN{
@@ -83,104 +83,104 @@ main(int argc, char **argv) {
 		break;
 	}ARGEND;
 	
-	if ((mouse = open("/dev/mouse", OREAD)) < 0
+	if((mouse = open("/dev/mouse", OREAD)) < 0
 	 && (mouse = open("#m/mouse", OREAD)) < 0)
 		sysfatal("#m/mouse: %r");
 
 	mousectl = open("#m/mousectl", ORDWR);
-	if (mousectl < 0)
+	if(mousectl < 0)
 		sysfatal("#m/mousectl: %r");
 
 	if(initdraw(nil, nil, "calibrate") < 0)
 		sysfatal("initdraw: %r\n");
 
-again:
-
-	r = insetrect(display->image->r, 2);
-
-	wctl = open("/dev/wctl", ORDWR);
-	if (wctl >= 0) {
-		char buf[4*12+1];
-
-		buf[48] = 0;
-		oldsize = screen->r;
-		if (fprint(wctl, "resize -r %R", r) <= 0)
-			sysfatal("write /dev/wctl, %r");
-		if (getwindow(display, Refbackup) < 0)
-			sysfatal("getwindow");
-		if (debug) fprint(2, "resize: %R\n", screen->r);
-
-		if (read(mousectl, buf, 48) != 48)
-			sysfatal("read mousectl: %r");
-		if (debug > 1) fprint(2, "mousectl %s\n", buf);
-		if (buf[0] != 'c')
-			sysfatal("mousectl message: %s", buf);
-		cal.scalex = strtol(buf+ 1, nil, 10);
-		cal.scaley = strtol(buf+13, nil, 10);
-		cal.transx = strtol(buf+25, nil, 10);
-		cal.transy = strtol(buf+37, nil, 10);
-	} else {
-		fprint(mousectl, "calibrate");
-		cal.scalex = 1<<16;
-		cal.scaley = 1<<16;
-		cal.transx = 0;
-		cal.transy = 0;
-	}
-
-	fprint(2, "calibrate %ld %ld %ld %ld (old)\n",
-		(long)cal.scalex, (long)cal.scaley, (long)cal.transx, (long)cal.transy);
-
-	if (debug) fprint(2, "screen coords %R\n", screen->r);
-	pts[0] = addpt(Pt( 16,  16), screen->r.min);
-	pts[1] = addpt(Pt( 16, -16), Pt(screen->r.min.x, screen->r.max.y));
-	pts[2] = addpt(Pt(-16,  16), Pt(screen->r.max.x, screen->r.min.y));
-	pts[3] = addpt(Pt(-16, -16), screen->r.max);
-	pts[4] = Pt((screen->r.max.x + screen->r.min.x)/2,
-				(screen->r.max.y + screen->r.min.y)/2);;
-
-	for (i = 0; i < 4; i++) {
-		cross(pts[i]);
-		pens[i] = scr2pen(getmouse(mouse));
-		if (debug) fprint(2, "%P\n", pens[i]);
-	}
-
-	cal.scalex = (pts[2].x + pts[3].x - pts[0].x - pts[1].x) * 65536.0 /
-			  (pens[2].x + pens[3].x - pens[0].x - pens[1].x);
-	cal.scaley = (pts[1].y + pts[3].y - pts[0].y - pts[2].y) * 65536.0 /
-			  (pens[1].y + pens[3].y - pens[0].y - pens[2].y);
-	cal.transx = pts[0].x - (pens[0].x*cal.scalex) / 65536.0;
-	cal.transy = pts[0].y - (pens[0].y*cal.scaley) / 65536.0;
-
-	if (debug) fprint(2, "scale [%f, %f], trans [%f, %f]\n",
-		cal.scalex, cal.scaley, cal.transx, cal.transy);
-
-	fprint(mousectl, "calibrate %ld %ld %ld %ld",
-		(long)cal.scalex, (long)cal.scaley, (long)cal.transx, (long)cal.transy);
-
-	cross(pts[4]);
-	pens[4] = getmouse(mouse);
-
-	draw(screen, screen->r, display->white, nil, ZP);
-	flushimage(display, 1);
-
-	if (abs(pts[4].x-pens[4].x) > 4 || abs(pts[4].y-pens[4].y) > 4) {
+	for(ntries = 0; ntries < 3; ntries++){
+		r = insetrect(display->image->r, 2);
+	
+		wctl = open("/dev/wctl", ORDWR);
+		if(wctl >= 0){
+			char buf[4*12+1];
+	
+			buf[48] = 0;
+			oldsize = screen->r;
+			if(fprint(wctl, "resize -r %R", r) <= 0)
+				sysfatal("write /dev/wctl, %r");
+			if(getwindow(display, Refbackup) < 0)
+				sysfatal("getwindow");
+			if(debug) fprint(2, "resize: %R\n", screen->r);
+	
+			if(read(mousectl, buf, 48) != 48)
+				sysfatal("read mousectl: %r");
+			if(debug > 1) fprint(2, "mousectl %s\n", buf);
+			if(buf[0] != 'c')
+				sysfatal("mousectl message: %s", buf);
+			cal.scalex = strtol(buf+ 1, nil, 10);
+			cal.scaley = strtol(buf+13, nil, 10);
+			cal.transx = strtol(buf+25, nil, 10);
+			cal.transy = strtol(buf+37, nil, 10);
+		}else{
+			fprint(mousectl, "calibrate");
+			cal.scalex = 1<<16;
+			cal.scaley = 1<<16;
+			cal.transx = 0;
+			cal.transy = 0;
+		}
+	
+		fprint(2, "calibrate %ld %ld %ld %ld (old)\n",
+			(long)cal.scalex, (long)cal.scaley, (long)cal.transx, (long)cal.transy);
+	
+		if(debug)
+			fprint(2, "screen coords %R\n", screen->r);
+		pts[0] = addpt(Pt( 16,  16), screen->r.min);
+		pts[1] = addpt(Pt( 16, -16), Pt(screen->r.min.x, screen->r.max.y));
+		pts[2] = addpt(Pt(-16,  16), Pt(screen->r.max.x, screen->r.min.y));
+		pts[3] = addpt(Pt(-16, -16), screen->r.max);
+		pts[4] = Pt((screen->r.max.x + screen->r.min.x)/2,
+					(screen->r.max.y + screen->r.min.y)/2);;
+	
+		for(i = 0; i < 4; i++){
+			cross(pts[i]);
+			pens[i] = scr2pen(getmouse(mouse));
+			if (debug) fprint(2, "%P\n", pens[i]);
+		}
+	
+		cal.scalex = (pts[2].x + pts[3].x - pts[0].x - pts[1].x) * 65536.0 /
+				  (pens[2].x + pens[3].x - pens[0].x - pens[1].x);
+		cal.scaley = (pts[1].y + pts[3].y - pts[0].y - pts[2].y) * 65536.0 /
+				  (pens[1].y + pens[3].y - pens[0].y - pens[2].y);
+		cal.transx = pts[0].x - (pens[0].x*cal.scalex) / 65536.0;
+		cal.transy = pts[0].y - (pens[0].y*cal.scaley) / 65536.0;
+	
+		if(debug)
+			fprint(2, "scale [%f, %f], trans [%f, %f]\n",
+				cal.scalex, cal.scaley, cal.transx, cal.transy);
+	
+		fprint(mousectl, "calibrate %ld %ld %ld %ld",
+			(long)cal.scalex, (long)cal.scaley, (long)cal.transx, (long)cal.transy);
+	
+		cross(pts[4]);
+		pens[4] = getmouse(mouse);
+	
+		draw(screen, screen->r, display->white, nil, ZP);
+		flushimage(display, 1);
+	
+		if(abs(pts[4].x-pens[4].x) <= 4 && abs(pts[4].y-pens[4].y) <= 4){
+			fprint(2, "Calibration ok: %P -> %P\n", pts[4], pens[4]);
+			break;
+		}
 		fprint(2, "Calibration inaccurate: %P -> %P\n", pts[4], pens[4]);
-		goto again;
-	} else {
-		fprint(2, "Calibration ok: %P -> %P\n", pts[4], pens[4]);
 	}
-
 	print("calibrate='%ld %ld %ld %ld'\n",
 		(long)cal.scalex, (long)cal.scaley, (long)cal.transx, (long)cal.transy);
 
-	if (debug)
-		for (i = 0; i < 4; i++) {
+	if(debug)
+		for(i = 0; i < 4; i++){
 			cross(pts[i]);
 			pens[i] = getmouse(mouse);
 			if (debug) fprint(2, "%P\n", pens[i]);
 		}
 
-	if (wctl >= 0)
+	if(wctl >= 0)
 		fprint(wctl, "resize -r %R", oldsize);
 
 }

+ 5 - 0
sys/src/cmd/fossil/9proc.c

@@ -62,6 +62,9 @@ conFree(Con* con)
 		con->fd = -1;
 	}
 	con->state = ConDead;
+	con->aok = 0;
+	con->noauth = con->noperm = con->wstatallow = 0;
+	con->isconsole = 0;
 
 	vtLock(cbox.alock);
 	if(con->cprev != nil)
@@ -556,6 +559,8 @@ conAlloc(int fd, char* name)
 	else
 		con->name = vtStrDup("unknown");
 	con->aok = 0;
+	con->noauth = con->noperm = con->wstatallow = 0;
+	con->isconsole = 0;
 	vtUnlock(cbox.alock);
 
 	if(vtThread(msgWrite, con) < 0){

+ 25 - 10
sys/src/cmd/page/rotate.c

@@ -189,6 +189,10 @@ rot180(Image *im)
 
 	mask = xallocimage(display, rmask, GREY1, 1, DTransparent);
 	mtmp = xallocimage(display, rmask, GREY1, 1, DTransparent);
+	if(mask == nil || mtmp == nil) {
+		fprint(2, "out of memory during rot180: %r\n");
+		wexits("memory");
+	}
 	rmask.max.x = gran;
 	drawop(mask, rmask, display->opaque, nil, ZP, S);
 //	writefile("mask", mask, gran);
@@ -202,6 +206,10 @@ rot180(Image *im)
 	rmask.max = (Point){100, 2*gran};
 	mask = xallocimage(display, rmask, GREY1, 1, DTransparent);
 	mtmp = xallocimage(display, rmask, GREY1, 1, DTransparent);
+	if(mask == nil || mtmp == nil) {
+		fprint(2, "out of memory during rot180: %r\n");
+		wexits("memory");
+	}
 	rmask.max.y = gran;
 	drawop(mask, rmask, display->opaque, nil, ZP, S);
 	shuffle(im, tmp, Yaxis, Dy(im->r), mask, gran, 0);
@@ -222,10 +230,14 @@ rot90(Image *im)
 	dx = Dx(im->r);
 	dy = Dy(im->r);
 	tmp = xallocimage(display, Rect(0, 0, dy, dx), im->chan, 0, DCyan);
+	if(tmp == nil) {
+		fprint(2, "out of memory during rot90: %r\n");
+		wexits("memory");
+	}
 
 	for(j = 0; j < dx; j++) {
 		for(i = 0; i < dy; i++) {
-			draw(tmp, Rect(i, j, i+1, j+1), im, nil, Pt(j, dy-(i+1)));
+			drawop(tmp, Rect(i, j, i+1, j+1), im, nil, Pt(j, dy-(i+1)), S);
 		}
 	}
 	freeimage(im);
@@ -358,7 +370,6 @@ resample(Image *from, Image *to)
 		K[i] /= v;
 
 	switch(from->chan){
-
 	case GREY8:
 	case RGB24:
 	case RGBA32:
@@ -378,15 +389,19 @@ resample(Image *from, Image *to)
 		tchan = GREY8;
 	Convert:
 		/* use library to convert to byte-per-chan form, then convert back */
-		t1 = allocimage(display, from->r, tchan, 0, DNofill);
-		if(t1 == nil)
-			sysfatal("can't allocate temporary image: %r");
-		draw(t1, t1->r, from, nil, ZP);
-		t2 = allocimage(display, to->r, tchan, 0, DNofill);
-		if(t2 == nil)
-			sysfatal("can't allocate temporary image: %r");
+		t1 = xallocimage(display, Rect(0, 0, Dx(from->r), Dy(from->r)), tchan, 0, DNofill);
+		if(t1 == nil) {
+			fprint(2, "out of memory for temp image 1 in resample: %r\n");
+			wexits("memory");
+		}
+		drawop(t1, t1->r, from, nil, ZP, S);
+		t2 = xallocimage(display, to->r, tchan, 0, DNofill);
+		if(t2 == nil) {
+			fprint(2, "out of memory temp image 2 in resample: %r\n");
+			wexits("memory");
+		}
 		resample(t1, t2);
-		draw(to, to->r, t2, nil, ZP);
+		drawop(to, to->r, t2, nil, ZP, S);
 		freeimage(t1);
 		freeimage(t2);
 		return to;

+ 41 - 21
sys/src/cmd/page/view.c

@@ -118,6 +118,8 @@ menugen(int n)
 void
 showpage(int page, Menu *m)
 {
+	Image *tmp;
+
 	if(doc->fwdonly)
 		m->lasthit = 0;	/* this page */
 	else
@@ -143,6 +145,17 @@ showpage(int page, Menu *m)
 	}else if(resizing){
 		resize(Dx(im->r), Dy(im->r));
 	}
+	if(im->r.min.x > 0 || im->r.min.y > 0) {
+		tmp = xallocimage(display, Rect(0, 0, Dx(im->r), Dy(im->r)), im->chan, 0, DNofill);
+		if(tmp == nil) {
+			fprint(2, "out of memory during showpage: %r\n");
+			wexits("memory");
+		}
+		drawop(tmp, tmp->r, im, nil, im->r.min, S);
+		freeimage(im);
+		im = tmp;
+	}
+
 	if(upside)
 		rot180(im);
 
@@ -256,24 +269,23 @@ viewer(Document *dd)
 	Rectangle r;
 	Image *tmp;
 	static char *fwditems[] = { "this page", "next page", "exit", 0 };
-	static char *miditems[] = {
-		"orig size",
-		"zoom in",
-		"fit window",
-		"rotate 90",
-		"upside down",
-		"",
-		"next",
-		"prev",
-		"", 
-		"reverse",
-		"discard",
-		"write",
-		"", 
-		"quit", 
-		0 
-	};
-
+ 	static char *miditems[] = {
+ 		"orig size",
+ 		"zoom in",
+ 		"fit window",
+ 		"rotate 90",
+ 		"upside down",
+ 		"",
+ 		"next",
+ 		"prev",
+ 		"", 
+ 		"reverse",
+ 		"discard",
+ 		"write",
+ 		"", 
+ 		"quit", 
+ 		0 
+ 	};
 	char *s;
 	enum { Eplumb = 4 };
 	Plumbmsg *pm;
@@ -516,7 +528,7 @@ viewer(Document *dd)
 					{
 						double delta;
 						Rectangle r;
-						
+
 						r = egetrect(Middle, &m);
 						if((rectclip(&r, rectaddpt(im->r, ul)) == 0) ||
 							Dx(r) == 0 || Dy(r) == 0)
@@ -528,9 +540,13 @@ viewer(Document *dd)
 							delta = (double)Dy(im->r)/(double)Dy(r);
 
 						esetcursor(&reading);
-						tmp = allocimage(display, 
+						tmp = xallocimage(display, 
 								Rect(0, 0, (int)((double)Dx(im->r)*delta), (int)((double)Dy(im->r)*delta)), 
 								im->chan, 0, DBlack);
+						if(tmp == nil) {
+							fprint(2, "out of memory during zoom: %r\n");
+							wexits("memory");
+						}
 						resample(im, tmp);
 						freeimage(im);
 						im = tmp;
@@ -551,7 +567,11 @@ viewer(Document *dd)
 
 						r = Rect(0, 0, (int)((double)Dx(im->r)*delta), (int)((double)Dy(im->r)*delta));
 						esetcursor(&reading);
-						tmp = allocimage(display, r, im->chan, 0, DBlack);
+						tmp = xallocimage(display, r, im->chan, 0, DBlack);
+						if(tmp == nil) {
+							fprint(2, "out of memory during fit: %r\n");
+							wexits("memory");
+						}
 						resample(im, tmp);
 						freeimage(im);
 						im = tmp;