Browse Source

Plan 9 from Bell Labs 2004-10-17

David du Colombier 19 years ago
parent
commit
7d0d9f4c8b

+ 28 - 23
dist/replica/_plan9.db

@@ -238,6 +238,7 @@
 386/bin/fs/tpfs - 775 sys sys 1085077058 90951
 386/bin/fs/v10fs - 775 sys sys 1085077058 92404
 386/bin/fs/v6fs - 775 sys sys 1085077059 92322
+386/bin/fs/zipfs - 775 sys sys 1097900279 106783
 386/bin/ftpfs - 775 sys sys 1093489558 146386
 386/bin/games - 20000000775 sys sys 1096298711 0
 386/bin/games/juggle - 775 sys sys 1096341940 123161
@@ -1255,7 +1256,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 1081200610 2417
+lib/face/48x48x4/.dict - 664 sys sys 1097900894 2501
 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
@@ -1366,7 +1367,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 1081200562 2146
+lib/face/48x48x8/.dict - 664 sys sys 1097900803 2174
 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
@@ -1383,6 +1384,7 @@ lib/face/48x48x8/f - 20000000775 sys sys 944941833 0
 lib/face/48x48x8/f/forsyth.1 - 644 sys sys 1056982111 1864
 lib/face/48x48x8/g - 20000000775 sys sys 944941833 0
 lib/face/48x48x8/g/geoff.2 - 664 sys sys 1057029459 1082
+lib/face/48x48x8/g/gmail.1 - 664 sys sys 1097900774 1779
 lib/face/48x48x8/g/google.1 - 664 sys sys 1038967265 712
 lib/face/48x48x8/h - 20000000775 sys sys 945319632 0
 lib/face/48x48x8/h/harvard.1 - 664 sys sys 944941833 1195
@@ -3115,7 +3117,7 @@ rc/bin/ups - 775 sys sys 1091021981 806
 rc/bin/uptime - 775 sys sys 1074730712 234
 rc/bin/usbstart - 775 sys sys 1044894155 81
 rc/bin/usps - 775 sys sys 1016826030 450
-rc/bin/vwhois - 775 sys sys 1059484222 297
+rc/bin/vwhois - 775 sys sys 1097960228 298
 rc/bin/wdoc2txt - 755 sys sys 1017431153 277
 rc/bin/weather - 775 sys sys 1016825765 795
 rc/bin/who - 775 sys sys 945617210 61
@@ -3434,7 +3436,7 @@ sys/include/control.h - 664 sys sys 1084467622 4844
 sys/include/ctype.h - 664 sys sys 1014929062 951
 sys/include/cursor.h - 664 sys sys 1014929062 102
 sys/include/disk.h - 664 sys sys 1014929063 1096
-sys/include/draw.h - 664 sys sys 1091904420 15923
+sys/include/draw.h - 664 sys sys 1097972690 15982
 sys/include/event.h - 664 sys sys 1014929063 1426
 sys/include/fcall.h - 664 sys sys 1032058178 3062
 sys/include/flate.h - 664 sys sys 1014929063 1245
@@ -4009,7 +4011,7 @@ sys/lib/man/secindex - 775 sys sys 956337727 322
 sys/lib/man/title - 664 sys sys 1019915894 746
 sys/lib/man/trademarks - 664 sys sys 958527089 1838
 sys/lib/mimetype - 664 sys sys 1089299188 5778
-sys/lib/newuser - 775 sys sys 1087407313 1242
+sys/lib/newuser - 775 sys sys 1097900388 1259
 sys/lib/plumb - 20000000775 sys sys 944957365 0
 sys/lib/plumb/basic - 664 sys sys 1070330856 2930
 sys/lib/plumb/fileaddr - 664 sys sys 944957365 88
@@ -4763,7 +4765,7 @@ sys/man/1/strip - 664 sys sys 958580250 448
 sys/man/1/sum - 664 sys sys 984772442 1390
 sys/man/1/syscall - 664 sys sys 1016466457 1439
 sys/man/1/tail - 664 sys sys 1017679307 1413
-sys/man/1/tapefs - 664 sys sys 944959675 1731
+sys/man/1/tapefs - 664 sys sys 1097900346 1811
 sys/man/1/tar - 664 sys sys 1070371922 2538
 sys/man/1/tbl - 664 sys sys 944959674 4308
 sys/man/1/tcs - 664 sys sys 952627441 2575
@@ -6778,11 +6780,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 1082924469 19212
+sys/src/cmd/acme/acme.c - 664 sys sys 1097972699 19493
 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 1079102914 11126
-sys/src/cmd/acme/dat.h - 664 sys sys 1079044030 11080
+sys/src/cmd/acme/dat.h - 664 sys sys 1097972700 11144
 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
@@ -6797,7 +6799,7 @@ sys/src/cmd/acme/mkfile - 664 sys sys 1058463682 543
 sys/src/cmd/acme/regx.c - 664 sys sys 1014926094 16057
 sys/src/cmd/acme/rows.c - 664 sys sys 1084542482 14664
 sys/src/cmd/acme/scrl.c - 664 sys sys 1014926095 3072
-sys/src/cmd/acme/text.c - 664 sys sys 1084542489 27383
+sys/src/cmd/acme/text.c - 664 sys sys 1097972739 27552
 sys/src/cmd/acme/time.c - 664 sys sys 1014926095 1783
 sys/src/cmd/acme/util.c - 664 sys sys 1079102916 7412
 sys/src/cmd/acme/wind.c - 664 sys sys 1096388102 11187
@@ -7100,7 +7102,7 @@ sys/src/cmd/aux/vga/ics534x.c - 664 sys sys 1014925009 5319
 sys/src/cmd/aux/vga/io.c - 664 sys sys 1014925009 6222
 sys/src/cmd/aux/vga/mach32.c - 664 sys sys 1014925009 6004
 sys/src/cmd/aux/vga/mach64.c - 664 sys sys 1014925009 8279
-sys/src/cmd/aux/vga/mach64xx.c - 664 sys sys 1014925009 30254
+sys/src/cmd/aux/vga/mach64xx.c - 664 sys sys 1097900455 30266
 sys/src/cmd/aux/vga/main.c - 664 sys sys 1014925010 8154
 sys/src/cmd/aux/vga/mga2164w.c - 664 sys sys 1014925010 13196
 sys/src/cmd/aux/vga/mga4xx.c - 664 sys sys 1014925010 35895
@@ -7276,12 +7278,12 @@ sys/src/cmd/con/xmr.c - 664 sys sys 984789977 2884
 sys/src/cmd/con/xms.c - 664 sys sys 1022049386 3530
 sys/src/cmd/cp.c - 664 sys sys 1021580000 2928
 sys/src/cmd/cpp - 20000000775 sys sys 954036076 0
-sys/src/cmd/cpp/cpp.c - 664 sys sys 1014925274 6065
-sys/src/cmd/cpp/cpp.h - 664 sys sys 1014925275 4594
+sys/src/cmd/cpp/cpp.c - 664 sys sys 1097900425 6211
+sys/src/cmd/cpp/cpp.h - 664 sys sys 1097900426 4660
 sys/src/cmd/cpp/eval.c - 664 sys sys 1014925275 9892
 sys/src/cmd/cpp/hideset.c - 664 sys sys 944960879 1936
 sys/src/cmd/cpp/include.c - 664 sys sys 959299274 2845
-sys/src/cmd/cpp/lex.c - 664 sys sys 1014925275 13283
+sys/src/cmd/cpp/lex.c - 664 sys sys 1097900427 13595
 sys/src/cmd/cpp/macro.c - 664 sys sys 1014925275 10893
 sys/src/cmd/cpp/mkfile - 664 sys sys 944960879 178
 sys/src/cmd/cpp/nlist.c - 664 sys sys 944960879 4631
@@ -9842,12 +9844,12 @@ sys/src/cmd/plot/libplot/rvec.c - 664 sys sys 944961623 118
 sys/src/cmd/plot/libplot/save.c - 664 sys sys 944961623 68
 sys/src/cmd/plot/libplot/sbox.c - 664 sys sys 944961623 398
 sys/src/cmd/plot/libplot/spline.c - 664 sys sys 944961623 1364
-sys/src/cmd/plot/libplot/subr.c - 664 sys sys 944961623 2157
+sys/src/cmd/plot/libplot/subr.c - 664 sys sys 1097901034 2143
 sys/src/cmd/plot/libplot/text.c - 664 sys sys 944961623 1032
 sys/src/cmd/plot/libplot/vec.c - 664 sys sys 944961623 916
 sys/src/cmd/plot/libplot/whoami.c - 664 sys sys 944961623 60
 sys/src/cmd/plot/mkfile - 664 sys sys 944961624 277
-sys/src/cmd/plot/plot.c - 664 sys sys 944961624 12212
+sys/src/cmd/plot/plot.c - 664 sys sys 1097900218 12237
 sys/src/cmd/plot/plot.h - 664 sys sys 944961624 1002
 sys/src/cmd/plumb - 20000000775 sys sys 952201377 0
 sys/src/cmd/plumb/fsys.c - 664 sys sys 1014926837 18491
@@ -10223,7 +10225,7 @@ sys/src/cmd/replica/updatedb.c - 664 sys sys 1068497831 3045
 sys/src/cmd/replica/util.c - 664 sys sys 1022274716 1997
 sys/src/cmd/resample.c - 664 sys sys 1039753039 6268
 sys/src/cmd/rio - 20000000775 sys sys 1015343453 0
-sys/src/cmd/rio/dat.h - 664 sys sys 1023206836 6875
+sys/src/cmd/rio/dat.h - 664 sys sys 1097973839 6938
 sys/src/cmd/rio/data.c - 664 sys sys 1014926356 6169
 sys/src/cmd/rio/fns.h - 664 sys sys 1039133251 1065
 sys/src/cmd/rio/fsys.c - 664 sys sys 1019678647 13259
@@ -10233,7 +10235,7 @@ sys/src/cmd/rio/scrl.c - 664 sys sys 1014926357 3245
 sys/src/cmd/rio/time.c - 664 sys sys 1014926357 1829
 sys/src/cmd/rio/util.c - 664 sys sys 1014926357 2061
 sys/src/cmd/rio/wctl.c - 664 sys sys 1023206837 8808
-sys/src/cmd/rio/wind.c - 664 sys sys 1084470068 32802
+sys/src/cmd/rio/wind.c - 664 sys sys 1097973839 32996
 sys/src/cmd/rio/xfid.c - 664 sys sys 1032061723 17424
 sys/src/cmd/rm.c - 664 sys sys 1014926615 1563
 sys/src/cmd/rx.c - 664 sys sys 1071155928 4188
@@ -10403,7 +10405,7 @@ sys/src/cmd/ssh/ssh.h - 664 sys sys 1091904420 6086
 sys/src/cmd/ssh/sshnet.c - 664 sys sys 1078840016 17641
 sys/src/cmd/ssh/sshserve.c - 664 sys sys 1062091020 5786
 sys/src/cmd/ssh/util.c - 664 sys sys 1063858753 4478
-sys/src/cmd/stats.c - 664 sys sys 1096061397 27827
+sys/src/cmd/stats.c - 664 sys sys 1097899820 27862
 sys/src/cmd/strings.c - 664 sys sys 944961364 1216
 sys/src/cmd/strip.c - 664 sys sys 1014926661 3306
 sys/src/cmd/sum.c - 664 sys sys 1014926615 5548
@@ -10416,7 +10418,7 @@ sys/src/cmd/tapefs - 20000000775 sys sys 944962012 0
 sys/src/cmd/tapefs/32vfs.c - 664 sys sys 1014926384 3688
 sys/src/cmd/tapefs/cpiofs.c - 664 sys sys 1014926384 2493
 sys/src/cmd/tapefs/fs.c - 664 sys sys 1032060630 9777
-sys/src/cmd/tapefs/mkfile - 664 sys sys 1032060649 258
+sys/src/cmd/tapefs/mkfile - 664 sys sys 1097914131 254
 sys/src/cmd/tapefs/tapefs.h - 664 sys sys 1014926384 1609
 sys/src/cmd/tapefs/tapfs.c - 664 sys sys 1063854819 1938
 sys/src/cmd/tapefs/tarfs.c - 664 sys sys 1071458376 2672
@@ -10424,6 +10426,8 @@ sys/src/cmd/tapefs/tpfs.c - 664 sys sys 1071322722 2012
 sys/src/cmd/tapefs/util.c - 664 sys sys 1014926385 2653
 sys/src/cmd/tapefs/v10fs.c - 664 sys sys 1014926385 3754
 sys/src/cmd/tapefs/v6fs.c - 664 sys sys 1014926385 3971
+sys/src/cmd/tapefs/zip.h - 664 sys sys 1097914153 1428
+sys/src/cmd/tapefs/zipfs.c - 664 sys sys 1097900277 6803
 sys/src/cmd/tar.c - 664 sys sys 1094598836 15585
 sys/src/cmd/tbl - 20000000775 sys sys 954038038 0
 sys/src/cmd/tbl/mkfile - 664 sys sys 944961243 268
@@ -10906,7 +10910,7 @@ sys/src/cmd/upas/smtp/mkfile - 664 sys sys 1067722781 746
 sys/src/cmd/upas/smtp/mxdial.c - 664 sys sys 1055703150 4887
 sys/src/cmd/upas/smtp/rfc822.y - 664 sys sys 1064589606 13417
 sys/src/cmd/upas/smtp/rmtdns.c - 664 sys sys 1015013150 1069
-sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1072561144 18914
+sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1097901337 19565
 sys/src/cmd/upas/smtp/smtp.h - 664 sys sys 1064589597 1084
 sys/src/cmd/upas/smtp/smtpd.c - 664 sys sys 1087421671 27665
 sys/src/cmd/upas/smtp/smtpd.h - 664 sys sys 1067722781 1111
@@ -11287,7 +11291,7 @@ sys/src/games/sokoban/graphics.c - 664 sys sys 1095792097 1846
 sys/src/games/sokoban/level.c - 664 sys sys 1095792097 1654
 sys/src/games/sokoban/mkfile - 664 sys sys 1095792097 236
 sys/src/games/sokoban/move.c - 664 sys sys 1095792097 2671
-sys/src/games/sokoban/sokoban.c - 664 sys sys 1095792097 4760
+sys/src/games/sokoban/sokoban.c - 664 sys sys 1097901017 4783
 sys/src/games/sokoban/sokoban.h - 664 sys sys 1095792097 1197
 sys/src/lib9p - 20000000775 sys sys 1015023311 0
 sys/src/lib9p/_post.c - 664 sys sys 1044836326 1641
@@ -11835,7 +11839,7 @@ sys/src/libdraw/drawrepl.c - 664 sys sys 944961725 314
 sys/src/libdraw/egetrect.c - 664 sys sys 1014927874 2612
 sys/src/libdraw/ellipse.c - 664 sys sys 1040442971 1936
 sys/src/libdraw/emenuhit.c - 664 sys sys 1014927874 7136
-sys/src/libdraw/event.c - 664 sys sys 1014927875 8985
+sys/src/libdraw/event.c - 664 sys sys 1097973929 8983
 sys/src/libdraw/fmt.c - 664 sys sys 1070344369 270
 sys/src/libdraw/font.c - 664 sys sys 1082924457 7594
 sys/src/libdraw/freesubfont.c - 664 sys sys 984709664 259
@@ -11850,7 +11854,7 @@ sys/src/libdraw/line.c - 664 sys sys 1040442973 731
 sys/src/libdraw/loadimage.c - 664 sys sys 1014927876 983
 sys/src/libdraw/makefile - 664 sys sys 944961725 648
 sys/src/libdraw/menuhit.c - 664 sys sys 1014927876 7263
-sys/src/libdraw/mkfile - 664 sys sys 1070394450 1022
+sys/src/libdraw/mkfile - 664 sys sys 1097972686 1034
 sys/src/libdraw/mkfont.c - 664 sys sys 944961725 1283
 sys/src/libdraw/mouse.c - 664 sys sys 1030970092 2559
 sys/src/libdraw/newwindow.c - 664 sys sys 1035232036 424
@@ -11862,6 +11866,7 @@ sys/src/libdraw/readsubfont.c - 664 sys sys 1082924458 1053
 sys/src/libdraw/rectclip.c - 664 sys sys 944961725 571
 sys/src/libdraw/replclipr.c - 664 sys sys 944961725 363
 sys/src/libdraw/rgb.c - 664 sys sys 984709666 1679
+sys/src/libdraw/scroll.c - 664 sys sys 1097972686 444
 sys/src/libdraw/string.c - 664 sys sys 1040442975 2978
 sys/src/libdraw/stringbg.c - 664 sys sys 1040442975 1611
 sys/src/libdraw/stringsubfont.c - 664 sys sys 944961725 960

+ 28 - 23
dist/replica/plan9.db

@@ -238,6 +238,7 @@
 386/bin/fs/tpfs - 775 sys sys 1085077058 90951
 386/bin/fs/v10fs - 775 sys sys 1085077058 92404
 386/bin/fs/v6fs - 775 sys sys 1085077059 92322
+386/bin/fs/zipfs - 775 sys sys 1097900279 106783
 386/bin/ftpfs - 775 sys sys 1093489558 146386
 386/bin/games - 20000000775 sys sys 1096298711 0
 386/bin/games/juggle - 775 sys sys 1096341940 123161
@@ -1255,7 +1256,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 1081200610 2417
+lib/face/48x48x4/.dict - 664 sys sys 1097900894 2501
 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
@@ -1366,7 +1367,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 1081200562 2146
+lib/face/48x48x8/.dict - 664 sys sys 1097900803 2174
 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
@@ -1383,6 +1384,7 @@ lib/face/48x48x8/f - 20000000775 sys sys 944941833 0
 lib/face/48x48x8/f/forsyth.1 - 644 sys sys 1056982111 1864
 lib/face/48x48x8/g - 20000000775 sys sys 944941833 0
 lib/face/48x48x8/g/geoff.2 - 664 sys sys 1057029459 1082
+lib/face/48x48x8/g/gmail.1 - 664 sys sys 1097900774 1779
 lib/face/48x48x8/g/google.1 - 664 sys sys 1038967265 712
 lib/face/48x48x8/h - 20000000775 sys sys 945319632 0
 lib/face/48x48x8/h/harvard.1 - 664 sys sys 944941833 1195
@@ -3115,7 +3117,7 @@ rc/bin/ups - 775 sys sys 1091021981 806
 rc/bin/uptime - 775 sys sys 1074730712 234
 rc/bin/usbstart - 775 sys sys 1044894155 81
 rc/bin/usps - 775 sys sys 1016826030 450
-rc/bin/vwhois - 775 sys sys 1059484222 297
+rc/bin/vwhois - 775 sys sys 1097960228 298
 rc/bin/wdoc2txt - 755 sys sys 1017431153 277
 rc/bin/weather - 775 sys sys 1016825765 795
 rc/bin/who - 775 sys sys 945617210 61
@@ -3434,7 +3436,7 @@ sys/include/control.h - 664 sys sys 1084467622 4844
 sys/include/ctype.h - 664 sys sys 1014929062 951
 sys/include/cursor.h - 664 sys sys 1014929062 102
 sys/include/disk.h - 664 sys sys 1014929063 1096
-sys/include/draw.h - 664 sys sys 1091904420 15923
+sys/include/draw.h - 664 sys sys 1097972690 15982
 sys/include/event.h - 664 sys sys 1014929063 1426
 sys/include/fcall.h - 664 sys sys 1032058178 3062
 sys/include/flate.h - 664 sys sys 1014929063 1245
@@ -4009,7 +4011,7 @@ sys/lib/man/secindex - 775 sys sys 956337727 322
 sys/lib/man/title - 664 sys sys 1019915894 746
 sys/lib/man/trademarks - 664 sys sys 958527089 1838
 sys/lib/mimetype - 664 sys sys 1089299188 5778
-sys/lib/newuser - 775 sys sys 1087407313 1242
+sys/lib/newuser - 775 sys sys 1097900388 1259
 sys/lib/plumb - 20000000775 sys sys 944957365 0
 sys/lib/plumb/basic - 664 sys sys 1070330856 2930
 sys/lib/plumb/fileaddr - 664 sys sys 944957365 88
@@ -4763,7 +4765,7 @@ sys/man/1/strip - 664 sys sys 958580250 448
 sys/man/1/sum - 664 sys sys 984772442 1390
 sys/man/1/syscall - 664 sys sys 1016466457 1439
 sys/man/1/tail - 664 sys sys 1017679307 1413
-sys/man/1/tapefs - 664 sys sys 944959675 1731
+sys/man/1/tapefs - 664 sys sys 1097900346 1811
 sys/man/1/tar - 664 sys sys 1070371922 2538
 sys/man/1/tbl - 664 sys sys 944959674 4308
 sys/man/1/tcs - 664 sys sys 952627441 2575
@@ -6778,11 +6780,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 1082924469 19212
+sys/src/cmd/acme/acme.c - 664 sys sys 1097972699 19493
 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 1079102914 11126
-sys/src/cmd/acme/dat.h - 664 sys sys 1079044030 11080
+sys/src/cmd/acme/dat.h - 664 sys sys 1097972700 11144
 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
@@ -6797,7 +6799,7 @@ sys/src/cmd/acme/mkfile - 664 sys sys 1058463682 543
 sys/src/cmd/acme/regx.c - 664 sys sys 1014926094 16057
 sys/src/cmd/acme/rows.c - 664 sys sys 1084542482 14664
 sys/src/cmd/acme/scrl.c - 664 sys sys 1014926095 3072
-sys/src/cmd/acme/text.c - 664 sys sys 1084542489 27383
+sys/src/cmd/acme/text.c - 664 sys sys 1097972739 27552
 sys/src/cmd/acme/time.c - 664 sys sys 1014926095 1783
 sys/src/cmd/acme/util.c - 664 sys sys 1079102916 7412
 sys/src/cmd/acme/wind.c - 664 sys sys 1096388102 11187
@@ -7100,7 +7102,7 @@ sys/src/cmd/aux/vga/ics534x.c - 664 sys sys 1014925009 5319
 sys/src/cmd/aux/vga/io.c - 664 sys sys 1014925009 6222
 sys/src/cmd/aux/vga/mach32.c - 664 sys sys 1014925009 6004
 sys/src/cmd/aux/vga/mach64.c - 664 sys sys 1014925009 8279
-sys/src/cmd/aux/vga/mach64xx.c - 664 sys sys 1014925009 30254
+sys/src/cmd/aux/vga/mach64xx.c - 664 sys sys 1097900455 30266
 sys/src/cmd/aux/vga/main.c - 664 sys sys 1014925010 8154
 sys/src/cmd/aux/vga/mga2164w.c - 664 sys sys 1014925010 13196
 sys/src/cmd/aux/vga/mga4xx.c - 664 sys sys 1014925010 35895
@@ -7276,12 +7278,12 @@ sys/src/cmd/con/xmr.c - 664 sys sys 984789977 2884
 sys/src/cmd/con/xms.c - 664 sys sys 1022049386 3530
 sys/src/cmd/cp.c - 664 sys sys 1021580000 2928
 sys/src/cmd/cpp - 20000000775 sys sys 954036076 0
-sys/src/cmd/cpp/cpp.c - 664 sys sys 1014925274 6065
-sys/src/cmd/cpp/cpp.h - 664 sys sys 1014925275 4594
+sys/src/cmd/cpp/cpp.c - 664 sys sys 1097900425 6211
+sys/src/cmd/cpp/cpp.h - 664 sys sys 1097900426 4660
 sys/src/cmd/cpp/eval.c - 664 sys sys 1014925275 9892
 sys/src/cmd/cpp/hideset.c - 664 sys sys 944960879 1936
 sys/src/cmd/cpp/include.c - 664 sys sys 959299274 2845
-sys/src/cmd/cpp/lex.c - 664 sys sys 1014925275 13283
+sys/src/cmd/cpp/lex.c - 664 sys sys 1097900427 13595
 sys/src/cmd/cpp/macro.c - 664 sys sys 1014925275 10893
 sys/src/cmd/cpp/mkfile - 664 sys sys 944960879 178
 sys/src/cmd/cpp/nlist.c - 664 sys sys 944960879 4631
@@ -9842,12 +9844,12 @@ sys/src/cmd/plot/libplot/rvec.c - 664 sys sys 944961623 118
 sys/src/cmd/plot/libplot/save.c - 664 sys sys 944961623 68
 sys/src/cmd/plot/libplot/sbox.c - 664 sys sys 944961623 398
 sys/src/cmd/plot/libplot/spline.c - 664 sys sys 944961623 1364
-sys/src/cmd/plot/libplot/subr.c - 664 sys sys 944961623 2157
+sys/src/cmd/plot/libplot/subr.c - 664 sys sys 1097901034 2143
 sys/src/cmd/plot/libplot/text.c - 664 sys sys 944961623 1032
 sys/src/cmd/plot/libplot/vec.c - 664 sys sys 944961623 916
 sys/src/cmd/plot/libplot/whoami.c - 664 sys sys 944961623 60
 sys/src/cmd/plot/mkfile - 664 sys sys 944961624 277
-sys/src/cmd/plot/plot.c - 664 sys sys 944961624 12212
+sys/src/cmd/plot/plot.c - 664 sys sys 1097900218 12237
 sys/src/cmd/plot/plot.h - 664 sys sys 944961624 1002
 sys/src/cmd/plumb - 20000000775 sys sys 952201377 0
 sys/src/cmd/plumb/fsys.c - 664 sys sys 1014926837 18491
@@ -10223,7 +10225,7 @@ sys/src/cmd/replica/updatedb.c - 664 sys sys 1068497831 3045
 sys/src/cmd/replica/util.c - 664 sys sys 1022274716 1997
 sys/src/cmd/resample.c - 664 sys sys 1039753039 6268
 sys/src/cmd/rio - 20000000775 sys sys 1015343453 0
-sys/src/cmd/rio/dat.h - 664 sys sys 1023206836 6875
+sys/src/cmd/rio/dat.h - 664 sys sys 1097973839 6938
 sys/src/cmd/rio/data.c - 664 sys sys 1014926356 6169
 sys/src/cmd/rio/fns.h - 664 sys sys 1039133251 1065
 sys/src/cmd/rio/fsys.c - 664 sys sys 1019678647 13259
@@ -10233,7 +10235,7 @@ sys/src/cmd/rio/scrl.c - 664 sys sys 1014926357 3245
 sys/src/cmd/rio/time.c - 664 sys sys 1014926357 1829
 sys/src/cmd/rio/util.c - 664 sys sys 1014926357 2061
 sys/src/cmd/rio/wctl.c - 664 sys sys 1023206837 8808
-sys/src/cmd/rio/wind.c - 664 sys sys 1084470068 32802
+sys/src/cmd/rio/wind.c - 664 sys sys 1097973839 32996
 sys/src/cmd/rio/xfid.c - 664 sys sys 1032061723 17424
 sys/src/cmd/rm.c - 664 sys sys 1014926615 1563
 sys/src/cmd/rx.c - 664 sys sys 1071155928 4188
@@ -10403,7 +10405,7 @@ sys/src/cmd/ssh/ssh.h - 664 sys sys 1091904420 6086
 sys/src/cmd/ssh/sshnet.c - 664 sys sys 1078840016 17641
 sys/src/cmd/ssh/sshserve.c - 664 sys sys 1062091020 5786
 sys/src/cmd/ssh/util.c - 664 sys sys 1063858753 4478
-sys/src/cmd/stats.c - 664 sys sys 1096061397 27827
+sys/src/cmd/stats.c - 664 sys sys 1097899820 27862
 sys/src/cmd/strings.c - 664 sys sys 944961364 1216
 sys/src/cmd/strip.c - 664 sys sys 1014926661 3306
 sys/src/cmd/sum.c - 664 sys sys 1014926615 5548
@@ -10416,7 +10418,7 @@ sys/src/cmd/tapefs - 20000000775 sys sys 944962012 0
 sys/src/cmd/tapefs/32vfs.c - 664 sys sys 1014926384 3688
 sys/src/cmd/tapefs/cpiofs.c - 664 sys sys 1014926384 2493
 sys/src/cmd/tapefs/fs.c - 664 sys sys 1032060630 9777
-sys/src/cmd/tapefs/mkfile - 664 sys sys 1032060649 258
+sys/src/cmd/tapefs/mkfile - 664 sys sys 1097914131 254
 sys/src/cmd/tapefs/tapefs.h - 664 sys sys 1014926384 1609
 sys/src/cmd/tapefs/tapfs.c - 664 sys sys 1063854819 1938
 sys/src/cmd/tapefs/tarfs.c - 664 sys sys 1071458376 2672
@@ -10424,6 +10426,8 @@ sys/src/cmd/tapefs/tpfs.c - 664 sys sys 1071322722 2012
 sys/src/cmd/tapefs/util.c - 664 sys sys 1014926385 2653
 sys/src/cmd/tapefs/v10fs.c - 664 sys sys 1014926385 3754
 sys/src/cmd/tapefs/v6fs.c - 664 sys sys 1014926385 3971
+sys/src/cmd/tapefs/zip.h - 664 sys sys 1097914153 1428
+sys/src/cmd/tapefs/zipfs.c - 664 sys sys 1097900277 6803
 sys/src/cmd/tar.c - 664 sys sys 1094598836 15585
 sys/src/cmd/tbl - 20000000775 sys sys 954038038 0
 sys/src/cmd/tbl/mkfile - 664 sys sys 944961243 268
@@ -10906,7 +10910,7 @@ sys/src/cmd/upas/smtp/mkfile - 664 sys sys 1067722781 746
 sys/src/cmd/upas/smtp/mxdial.c - 664 sys sys 1055703150 4887
 sys/src/cmd/upas/smtp/rfc822.y - 664 sys sys 1064589606 13417
 sys/src/cmd/upas/smtp/rmtdns.c - 664 sys sys 1015013150 1069
-sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1072561144 18914
+sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1097901337 19565
 sys/src/cmd/upas/smtp/smtp.h - 664 sys sys 1064589597 1084
 sys/src/cmd/upas/smtp/smtpd.c - 664 sys sys 1087421671 27665
 sys/src/cmd/upas/smtp/smtpd.h - 664 sys sys 1067722781 1111
@@ -11287,7 +11291,7 @@ sys/src/games/sokoban/graphics.c - 664 sys sys 1095792097 1846
 sys/src/games/sokoban/level.c - 664 sys sys 1095792097 1654
 sys/src/games/sokoban/mkfile - 664 sys sys 1095792097 236
 sys/src/games/sokoban/move.c - 664 sys sys 1095792097 2671
-sys/src/games/sokoban/sokoban.c - 664 sys sys 1095792097 4760
+sys/src/games/sokoban/sokoban.c - 664 sys sys 1097901017 4783
 sys/src/games/sokoban/sokoban.h - 664 sys sys 1095792097 1197
 sys/src/lib9p - 20000000775 sys sys 1015023311 0
 sys/src/lib9p/_post.c - 664 sys sys 1044836326 1641
@@ -11835,7 +11839,7 @@ sys/src/libdraw/drawrepl.c - 664 sys sys 944961725 314
 sys/src/libdraw/egetrect.c - 664 sys sys 1014927874 2612
 sys/src/libdraw/ellipse.c - 664 sys sys 1040442971 1936
 sys/src/libdraw/emenuhit.c - 664 sys sys 1014927874 7136
-sys/src/libdraw/event.c - 664 sys sys 1014927875 8985
+sys/src/libdraw/event.c - 664 sys sys 1097973929 8983
 sys/src/libdraw/fmt.c - 664 sys sys 1070344369 270
 sys/src/libdraw/font.c - 664 sys sys 1082924457 7594
 sys/src/libdraw/freesubfont.c - 664 sys sys 984709664 259
@@ -11850,7 +11854,7 @@ sys/src/libdraw/line.c - 664 sys sys 1040442973 731
 sys/src/libdraw/loadimage.c - 664 sys sys 1014927876 983
 sys/src/libdraw/makefile - 664 sys sys 944961725 648
 sys/src/libdraw/menuhit.c - 664 sys sys 1014927876 7263
-sys/src/libdraw/mkfile - 664 sys sys 1070394450 1022
+sys/src/libdraw/mkfile - 664 sys sys 1097972686 1034
 sys/src/libdraw/mkfont.c - 664 sys sys 944961725 1283
 sys/src/libdraw/mouse.c - 664 sys sys 1030970092 2559
 sys/src/libdraw/newwindow.c - 664 sys sys 1035232036 424
@@ -11862,6 +11866,7 @@ sys/src/libdraw/readsubfont.c - 664 sys sys 1082924458 1053
 sys/src/libdraw/rectclip.c - 664 sys sys 944961725 571
 sys/src/libdraw/replclipr.c - 664 sys sys 944961725 363
 sys/src/libdraw/rgb.c - 664 sys sys 984709666 1679
+sys/src/libdraw/scroll.c - 664 sys sys 1097972686 444
 sys/src/libdraw/string.c - 664 sys sys 1040442975 2978
 sys/src/libdraw/stringbg.c - 664 sys sys 1040442975 1611
 sys/src/libdraw/stringsubfont.c - 664 sys sys 944961725 960

+ 29 - 0
dist/replica/plan9.log

@@ -16811,3 +16811,32 @@
 1097717463 7 c sys/src/boot/pc/sdata.c - 664 sys sys 1097716793 38020
 1097744468 0 c 386/9loaddebug - 775 sys sys 1097744360 299522
 1097744468 1 c 386/9loadlitedebug - 775 sys sys 1097744361 194456
+1097901098 0 a 386/bin/fs/zipfs - 775 sys sys 1097900279 106783
+1097901098 1 c lib/face/48x48x4/.dict - 664 sys sys 1097900894 2501
+1097901098 2 c lib/face/48x48x8/.dict - 664 sys sys 1097900803 2174
+1097901098 3 a lib/face/48x48x8/g/gmail.1 - 664 sys sys 1097900774 1779
+1097901098 4 c sys/lib/newuser - 775 sys sys 1097900388 1259
+1097901098 5 c sys/man/1/tapefs - 664 sys sys 1097900346 1811
+1097901098 6 c sys/src/cmd/aux/vga/mach64xx.c - 664 sys sys 1097900455 30266
+1097901098 7 c sys/src/cmd/cpp/cpp.c - 664 sys sys 1097900425 6211
+1097901098 8 c sys/src/cmd/cpp/cpp.h - 664 sys sys 1097900426 4660
+1097901098 9 c sys/src/cmd/cpp/lex.c - 664 sys sys 1097900427 13595
+1097901098 10 c sys/src/cmd/tapefs/mkfile - 664 sys sys 1097900276 264
+1097901098 11 a sys/src/cmd/tapefs/zipfs.c - 664 sys sys 1097900277 6803
+1097901098 12 c sys/src/cmd/plot/libplot/subr.c - 664 sys sys 1097901034 2143
+1097901098 13 c sys/src/cmd/plot/plot.c - 664 sys sys 1097900218 12237
+1097901098 14 c sys/src/cmd/stats.c - 664 sys sys 1097899820 27862
+1097901098 15 c sys/src/games/sokoban/sokoban.c - 664 sys sys 1097901017 4783
+1097902916 0 c sys/src/cmd/upas/smtp/smtp.c - 664 sys sys 1097901337 19565
+1097915502 0 c sys/src/cmd/tapefs/mkfile - 664 sys sys 1097914131 254
+1097915502 1 a sys/src/cmd/tapefs/zip.h - 664 sys sys 1097914153 1428
+1097960511 0 c rc/bin/vwhois - 775 sys sys 1097960228 298
+1097973112 0 c sys/include/draw.h - 664 sys sys 1097972690 15982
+1097973112 1 c sys/src/cmd/acme/acme.c - 664 sys sys 1097972699 19493
+1097973112 2 c sys/src/cmd/acme/dat.h - 664 sys sys 1097972700 11144
+1097973112 3 c sys/src/cmd/acme/text.c - 664 sys sys 1097972739 27552
+1097973112 4 c sys/src/libdraw/mkfile - 664 sys sys 1097972686 1034
+1097973112 5 a sys/src/libdraw/scroll.c - 664 sys sys 1097972686 444
+1097974912 0 c sys/src/cmd/rio/dat.h - 664 sys sys 1097973839 6938
+1097974912 1 c sys/src/cmd/rio/wind.c - 664 sys sys 1097973839 32996
+1097974912 2 c sys/src/libdraw/event.c - 664 sys sys 1097973929 8983

+ 3 - 0
lib/face/48x48x4/.dict

@@ -73,7 +73,10 @@ 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
+gmail.com/presotto p/presotto.1
 gmail.com/robpike r/rob.1
+gmail.com/russcox r/rsc.1
+google.com/p p/presotto.1
 google.com/r r/rob.1
 google.com/sean s/seanq.1
 harvard.edu/rsc r/rsc.1

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

@@ -28,6 +28,7 @@ ee/unknown u/unknown.ee
 es/unknown u/unknown.es
 fi/unknown u/unknown.fi
 fr/unknown u/unknown.fr
+gmail.com/unknown g/gmail.1
 google.com/unknown g/google.1
 gr/unknown u/unknown.gr
 gsyc.escet.urjc.es/nemo n/nemo.1

BIN
lib/face/48x48x8/g/gmail.1


+ 1 - 1
rc/bin/vwhois

@@ -2,7 +2,7 @@
 
 if(test -f /mnt/plumb/seemail || test -f /mnt/term/mnt/plumb/seemail){
 	for(i)
-		plumb -dseemail -a 'filetype=vwhois digest=$i.$pid mailtype=new sender='^$i /mail/fs/mbox/XXX
+		plumb -dseemail -a 'filetype=vwhois digest='$i.$pid' mailtype=new sender='$i /mail/fs/mbox/XXX
 }
 if not for (i){
 	echo vwhois: vwhois: vwhois: delivered `{cat /dev/user} From $i '(vwho)' >> /sys/log/mail

+ 9 - 4
sys/include/draw.h

@@ -171,7 +171,7 @@ struct Screen
 
 struct Display
 {
-	QLock	qlock;
+	QLock		qlock;
 	int		locking;	/*program is using lockdisplay */
 	int		dirno;
 	int		fd;
@@ -190,13 +190,13 @@ struct Display
 	Image		*transparent;
 	Image		*image;
 	uchar		*buf;
-	int			bufsize;
+	int		bufsize;
 	uchar		*bufp;
 	Font		*defaultfont;
 	Subfont		*defaultsubfont;
 	Image		*windows;
 	Image		*screenimage;
-	int			_isnewdisplay;
+	int		_isnewdisplay;
 };
 
 struct Image
@@ -206,7 +206,7 @@ struct Image
 	Rectangle	r;		/* rectangle in data area, local coords */
 	Rectangle 	clipr;		/* clipping region */
 	int		depth;		/* number of bits per pixel */
-	ulong	chan;
+	ulong		chan;
 	int		repl;		/* flag: data replicates to tile clipr */
 	Screen		*screen;	/* 0 if not a window */
 	Image		*next;	/* next in list of windows */
@@ -314,6 +314,11 @@ struct Font
 #define	Dx(r)	((r).max.x-(r).min.x)
 #define	Dy(r)	((r).max.y-(r).min.y)
 
+/*
+ * One of a kind
+ */
+extern int		mousescrollsize(int);
+
 /*
  * Image management
  */

+ 3 - 0
sys/lib/newuser

@@ -16,6 +16,9 @@ chmod 775 /cron/$user
 chgrp $user /cron/$user
 bind -c $home/tmp /tmp
 
+mail -c
+cron -c
+
 cat > lib/profile <<!
 bind -a $x^home/bin/rc /bin
 bind -a $x^home/bin/$x^cputype /bin

+ 7 - 1
sys/man/1/tapefs

@@ -1,6 +1,6 @@
 .TH TAPEFS 1
 .SH NAME
-32vfs, cpiofs, tapfs, tarfs, tpfs, v6fs, v10fs \- mount archival file systems
+32vfs, cpiofs, tapfs, tarfs, tpfs, v6fs, v10fs, zipfs \- mount archival file systems
 .SH SYNOPSIS
 .B fs/32vfs
 [
@@ -29,6 +29,8 @@
 .br
 .B fs/v10fs
 .br
+.B fs/zipfs
+.br
 .SH DESCRIPTION
 These commands interpret data from traditional tape or file system formats
 stored in
@@ -82,6 +84,10 @@ Fifth and Sixth edition research Unix systems (512B block size).
 .I V10fs
 interprets disk images from the
 Tenth Edition research Unix systems (4KB block size).
+.PP
+.I Zipfs
+interprets zip archives (see
+.IR gzip (1)).
 .SH SOURCE
 .PP
 These commands are constructed in a highly stereotyped

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

@@ -505,6 +505,18 @@ mousethread(void *)
 				}
 				goto Continue;
 			}
+			/* scroll buttons, wheels, etc. */
+			if(t->what==Body && w != nil && (m.buttons & (8|16))){
+				if(m.buttons & 8)
+					but = Kscrolloneup;
+				else
+					but = Kscrollonedown;
+				winlock(w, 'M');
+				t->eq0 = ~0;
+				texttype(t, but);
+				winunlock(w);
+				goto Continue;
+			}
 			if(ptinrect(m.xy, t->scrollr)){
 				if(but){
 					if(t->what == Columntag)

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

@@ -532,6 +532,12 @@ int			editing;
 int			messagesize;		/* negotiated in 9P version setup */
 int			globalautoindent;
 
+enum
+{
+	Kscrolloneup		= KF|0x20,
+	Kscrollonedown	= KF|0x21,
+};
+
 Channel	*ckeyboard;	/* chan(Rune)[10] */
 Channel	*cplumb;		/* chan(Plumbmsg*) */
 Channel	*cwait;		/* chan(Waitmsg) */

+ 10 - 2
sys/src/cmd/acme/text.c

@@ -646,19 +646,24 @@ texttype(Text *t, Rune r)
 	switch(r){
 	case Kleft:
 		if(t->q0 > 0){
-			textcommit(t, TRUE);
+			wincommit(t->w, t);
 			textshow(t, t->q0-1, t->q0-1, TRUE);
 		}
 		return;
 	case Kright:
 		if(t->q1 < t->file->nc){
-			textcommit(t, TRUE);
+			wincommit(t->w, t);
 			textshow(t, t->q1+1, t->q1+1, TRUE);
 		}
 		return;
 	case Kdown:
 		n = t->maxlines/3;
 		goto case_Down;
+	case Kscrollonedown:
+		n = mousescrollsize(t->maxlines);
+		if(n <= 0)
+			n = 1;
+		goto case_Down;
 	case Kpgdown:
 		n = 2*t->maxlines/3;
 	case_Down:
@@ -668,6 +673,9 @@ texttype(Text *t, Rune r)
 	case Kup:
 		n = t->maxlines/3;
 		goto case_Up;
+	case Kscrolloneup:
+		n = mousescrollsize(t->maxlines);
+		goto case_Up;
 	case Kpgup:
 		n = 2*t->maxlines/3;
 	case_Up:

+ 2 - 2
sys/src/cmd/aux/vga/mach64xx.c

@@ -1281,7 +1281,7 @@ static void
 dumpmach64bios(Mach64xx *mp)
 {
 	int i, romtable, clocktable, freqtable, lcdtable, lcdpanel;
-	uchar bios[0x1000];
+	uchar bios[0x10000];
 
 	memmove(bios, readbios(sizeof bios, 0xC0000), sizeof bios);
 
@@ -1308,7 +1308,7 @@ dumpmach64bios(Mach64xx *mp)
 		return;
 	}
 
-	freqtable = *(ushort*)(bios-2);
+	freqtable = *(ushort*)(bios+clocktable-2);
 	if(freqtable+0x20 > sizeof(bios)) {
 		Bprint(&stdout, "couldn't find ATI frequency table\n");
 		return;

+ 10 - 0
sys/src/cmd/cpp/cpp.c

@@ -250,6 +250,16 @@ control(Tokenrow *trp)
 	return;
 }
 
+void *
+dorealloc(void *ptr, int size)
+{
+	void *p = realloc(ptr, size);
+
+	if (p==NULL)
+		error(FATAL, "Out of memory from realloc");
+	return p;
+}
+
 void *
 domalloc(int size)
 {

+ 2 - 0
sys/src/cmd/cpp/cpp.h

@@ -55,6 +55,7 @@ typedef struct source {
 	uchar	*inb;		/* input buffer */
 	uchar	*inp;		/* input pointer */
 	uchar	*inl;		/* end of input */
+	int 	ins;		/* input buffer size */
 	int	fd;		/* input source */
 	int	ifdepth;	/* conditional nesting in include */
 	struct	source *next;	/* stack for #include */
@@ -93,6 +94,7 @@ Source	*setsource(char *, int, char *);
 void	unsetsource(void);
 void	puttokens(Tokenrow *);
 void	process(Tokenrow *);
+void	*dorealloc(void *, int);
 void	*domalloc(int);
 void	dofree(void *);
 void	error(enum errtype, char *, ...);

+ 18 - 5
sys/src/cmd/cpp/lex.c

@@ -319,7 +319,7 @@ gettokens(Tokenrow *trp, int reset)
 			s->inl = s->inb;
 			fillbuf(s);
 			ip = s->inp = s->inb;
-		} else if (ip >= s->inb+(3*INS/4)) {
+		} else if (ip >= s->inb+(3*s->ins/4)) {
 			memmove(s->inb, ip, 4+s->inl-ip);
 			s->inl = s->inb+(s->inl-ip);
 			ip = s->inp = s->inb;
@@ -445,7 +445,7 @@ gettokens(Tokenrow *trp, int reset)
 				state = COM2;
 				ip += runelen;
 				runelen = 1;
- 				if (ip >= s->inb+(7*INS/8)) { /* very long comment */
+ 				if (ip >= s->inb+(7*s->ins/8)) { /* very long comment */
 					memmove(tp->t, ip, 4+s->inl-ip);
 					s->inl -= ip-tp->t;
 					ip = tp->t+1;
@@ -537,9 +537,20 @@ fillbuf(Source *s)
 {
 	int n;
 
-	if ((char *)s->inl+INS/8 > (char *)s->inb+INS)
-		error(FATAL, "Input buffer overflow");
-	if (s->fd<0 || (n=read(s->fd, (char *)s->inl, INS/8)) <= 0)
+	while((char *)s->inl+s->ins/8 > (char *)s->inb+s->ins) {
+		uint l = s->inl - s->inb;
+		uint p = s->inp - s->inb;
+		if(l < 0) 
+			error(FATAL, "negative end of input!?");
+		if(p < 0)
+			error(FATAL, "negative input pointer!?");
+		/* double the buffer size and try again */
+		s->ins *= 2;
+		s->inb = dorealloc(s->inb, s->ins);
+		s->inl = s->inb + l;
+		s->inp = s->inb + p;
+	}
+	if (s->fd<0 || (n=read(s->fd, (char *)s->inl, s->ins/8)) <= 0)
 		n = 0;
 	if ((*s->inp&0xff) == EOB) /* sentinel character appears in input */
 		*s->inp = EOFC;
@@ -592,6 +603,8 @@ setsource(char *name, int fd, char *str)
 		s->inp = s->inb;
 		len = 0;
 	}
+
+	s->ins = INS;	
 	s->inl = s->inp+len;
 	s->inl[0] = s->inl[1] = EOB;
 	return s;

+ 0 - 1
sys/src/cmd/plot/libplot/subr.c

@@ -26,7 +26,6 @@ bcolor(char *s){
 		case 'k':  case 'z':	/* zero was old name for kblack */
 			return(DBlack);
 		case 'r':
-print("RED");
 			return(DRed);
 		case 'g': 
 			return(DGreen);

+ 1 - 0
sys/src/cmd/plot/plot.c

@@ -191,6 +191,7 @@ main(int arc, char *arv[]){
 		process(bp);
 	}
 	closepl();
+	flushimage(display, 1);
 	for(;;){
 		m=emouse();
 		if(m.buttons&4 && emenuhit(3, &m, &menu)==0) exits(0);

+ 6 - 0
sys/src/cmd/rio/dat.h

@@ -22,6 +22,12 @@ enum
 	QMAX,
 };
 
+enum
+{
+	Kscrolloneup = KF|0x20,
+	Kscrollonedown = KF|0x21,
+};
+
 #define	STACK	8192
 
 typedef	struct	Consreadmesg Consreadmesg;

+ 36 - 12
sys/src/cmd/rio/wind.c

@@ -556,7 +556,7 @@ void
 wkeyctl(Window *w, Rune r)
 {
 	uint q0 ,q1;
-	int nb, nr;
+	int n, nb, nr;
 	Rune *rp;
 	int *notefd;
 
@@ -567,34 +567,52 @@ wkeyctl(Window *w, Rune r)
 	/* navigation keys work only when mouse is not open */
 	if(!w->mouseopen)
 		switch(r){
-		case Kdown: /* down arrow ↓ scrolls down */
-		case Kpgdown: /* page down scrolls down */
-			q0 = w->org+frcharofpt(w, Pt(w->Frame.r.min.x, w->Frame.r.min.y+(w->maxlines/2)*w->font->height));
+		case Kdown:
+			n = w->maxlines/3;
+			goto case_Down;
+		case Kscrollonedown:
+			n = mousescrollsize(w->maxlines);
+			if(n <= 0)
+				n = 1;
+			goto case_Down;
+		case Kpgdown:
+			n = 2*w->maxlines/3;
+		case_Down:
+			q0 = w->org+frcharofpt(w, Pt(w->Frame.r.min.x, w->Frame.r.min.y+n*w->font->height));
 			wsetorigin(w, q0, TRUE);
 			return;
-		case Kup:	/* up arrow ↑ scrolls up */
-		case Kpgup: /* page up scrolls up */
-			q0 = wbacknl(w, w->org, w->maxlines/2);
+		case Kup:
+			n = w->maxlines/3;
+			goto case_Up;
+		case Kscrolloneup:
+			n = mousescrollsize(w->maxlines);
+			if(n <= 0)
+				n = 1;
+			goto case_Up;
+		case Kpgup:
+			n = 2*w->maxlines/3;
+		case_Up:
+			q0 = wbacknl(w, w->org, n);
 			wsetorigin(w, q0, TRUE);
 			return;
-		case Kleft: /* left arrow ← cursors left */
+		case Kleft:
 			if(w->q0 > 0){
 				q0 = w->q0-1;
 				wsetselect(w, q0, q0);
 				wshow(w, q0);
 			}
 			return;
-		case Kright: /* right arrow → cursors right */
+		case Kright:
 			if(w->q1 < w->nr){
 				q1 = w->q1+1;
 				wsetselect(w, q1, q1);
 				wshow(w, q1);
 			}
 			return;
-		case Khome: /* home goes to beginning of text */
+		case Khome:
 			wshow(w, 0);
 			return;
-		case Kend: /* end goes to end of text */
+		case Kend:
 		case 0x05:
 			wshow(w, w->nr);
 			return;
@@ -821,8 +839,14 @@ wmousectl(Window *w)
 		but = 2;
 	else if(w->mc.buttons == 4)
 		but = 3;
-	else
+	else{
+		if(w->mc.buttons == 8)
+			wkeyctl(w, Kscrolloneup);
+		if(w->mc.buttons == 16)
+			wkeyctl(w, Kscrollonedown);
 		return;
+	}
+
 	incref(w);		/* hold up window while we track */
 	if(w->deleted)
 		goto Return;

+ 2 - 0
sys/src/cmd/stats.c

@@ -1259,6 +1259,8 @@ main(int argc, char *argv[])
 			if (addmachine(argv[i]))
 				readmach(&mach[j++], 1);
 		}
+		if (j == 0)
+			exits("connect");
 	}
 
 	for(i=0; i<nargs; i++)

+ 2 - 2
sys/src/cmd/tapefs/mkfile

@@ -2,7 +2,7 @@ BUILTINS=
 </$objtype/mkfile
 
 BIN=/$objtype/bin/fs
-TARG=tarfs tpfs v6fs 32vfs cpiofs tapfs v10fs
+TARG=tarfs tpfs v6fs 32vfs cpiofs tapfs v10fs zipfs
 OFILES=\
 	fs.$O\
 	util.$O
@@ -15,7 +15,7 @@ UPDATE=\
 	$HFILES\
 	${OFILES:%.$O=%.c}\
 	${TARG:%=%.c}\
-	${TARG:%=/386/bin/fs/%}\
 
 </sys/src/cmd/mkmany
 
+zipfs.$O:	zip.h

+ 83 - 0
sys/src/cmd/tapefs/zip.h

@@ -0,0 +1,83 @@
+typedef struct ZipHead	ZipHead;
+
+enum
+{
+	/*
+	 * magic numbers
+	 */
+	ZHeader		= 0x04034b50,
+	ZCHeader	= 0x02014b50,
+	ZECHeader	= 0x06054b50,
+
+	/*
+	 * "general purpose flag" bits
+	 */
+	ZEncrypted	= 1 << 0,
+	ZTrailInfo	= 1 << 3,	/* uncsize, csize, and crc are in trailer */
+	ZCompPatch	= 1 << 5,	/* compression patched data */
+
+	ZCrcPoly	= 0xedb88320,
+
+	/*
+	 * compression method
+	 */
+	ZDeflate	= 8,
+
+	/*
+	 * internal file attributes
+	 */
+	ZIsText		= 1 << 0,
+
+	/*
+	 * file attribute interpretation, from high byte of version
+	 */
+	ZDos		= 0,
+	ZAmiga		= 1,
+	ZVMS		= 2,
+	ZUnix		= 3,
+	ZVMCMS		= 4,
+	ZAtariST	= 5,
+	ZOS2HPFS	= 6,
+	ZMac		= 7,
+	ZZsys		= 8,
+	ZCPM		= 9,
+	ZNtfs		= 10,
+
+	/*
+	 * external attribute flags for ZDos
+	 */
+	ZDROnly		= 0x01,
+	ZDHidden	= 0x02,
+	ZDSystem	= 0x04,
+	ZDVLable	= 0x08,
+	ZDDir		= 0x10,
+	ZDArch		= 0x20,
+
+	ZHeadSize	= 4 + 2 + 2 + 2 + 2 + 2 + 4 + 4 + 4 + 2 + 2,
+	ZHeadCrc	= 4 + 2 + 2 + 2 + 2 + 2,
+	ZTrailSize	= 4 + 4 + 4,
+	ZCHeadSize	= 4 + 2 + 2 + 2 + 2 + 2 + 2 + 4 + 4 + 4 + 2 + 2 + 2 + 2 + 2 + 4 + 4,
+	ZECHeadSize	= 4 + 2 + 2 + 2 + 2 + 4 + 4 + 2,
+};
+
+/*
+ * interesting info from a zip header
+ */
+struct ZipHead
+{
+	int	madeos;			/* version made by */
+	int	madevers;
+	int	extos;			/* version needed to extract */
+	int	extvers;
+	int	flags;			/* general purpose bit flag */
+	int	meth;
+	int	modtime;
+	int	moddate;
+	ulong	crc;
+	ulong	csize;
+	ulong	uncsize;
+	int	iattr;
+	ulong	eattr;
+	ulong	off;
+	char	*file;
+};

+ 389 - 0
sys/src/cmd/tapefs/zipfs.c

@@ -0,0 +1,389 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+#include <flate.h>
+#include <auth.h>
+#include <fcall.h>
+#include <ctype.h>
+#include "tapefs.h"
+#include "zip.h"
+
+#define FORCE_LOWER	1	/* force filenames to lower case */
+#define MUNGE_CR	1	/* replace '\r\n' with ' \n' */
+
+/*
+ * File system for zip archives (read-only)
+ */
+
+enum {
+	IS_MSDOS = 0,	/* creator OS (interpretation of external flags) */
+	IS_RDONLY = 1,	/* file was readonly (external flags) */
+	IS_TEXT = 1,	/* file was text  (internal flags) */
+};
+
+typedef struct Block Block;
+struct Block{
+	uchar *pos;
+	uchar *limit;
+};
+
+static Biobuf *bin;
+static ulong *crctab;
+static ulong crc;
+
+extern void populate(char *);
+extern void dotrunc(Ram *);
+extern void docreate(Ram *);
+extern char *doread(Ram *, long, long);
+extern void popdir(Ram *);
+extern void dowrite(Ram *, char *, long, long);
+extern int dopermw(Ram *);
+
+static int findCDir(Biobuf *);
+static int header(Biobuf *, ZipHead *);
+static int cheader(Biobuf *, ZipHead *);
+static void trailer(Biobuf *, ZipHead *);
+static char *getname(Biobuf *, int);
+static int blwrite(void *, void *, int);
+static ulong get4(Biobuf *);
+static int get2(Biobuf *);
+static int get1(Biobuf *);
+static long msdos2time(int, int);
+
+void
+populate(char *name)
+{
+	char *p;
+	Fileinf f;
+	ZipHead zh;
+	int ok, entries;
+
+	crctab = mkcrctab(ZCrcPoly);
+	ok = inflateinit();
+	if(ok != FlateOk)
+		sysfatal("inflateinit failed: %s", flateerr(ok));
+
+	bin = Bopen(name, OREAD);
+	if (bin == nil)
+		error("Can't open argument file");
+
+	entries = findCDir(bin);
+	if(entries < 0)
+		sysfatal("empty file");
+
+	while(entries-- > 0){
+		memset(&zh, 0, sizeof(zh));
+		if(!cheader(bin, &zh))
+			break;
+		f.addr = (void*)(zh.off | ((zh.iattr & IS_TEXT)? 0x80000000: 0));
+		f.mode = (zh.madevers == IS_MSDOS && zh.eattr & IS_RDONLY)? 0444: 0644;
+		if (zh.meth == 0 && zh.uncsize == 0){
+			p = strchr(zh.file, '\0');
+			if(p > zh.file && p[-1] == '/')
+				f.mode |= (DMDIR | 0111);
+		}
+		f.uid = 0;
+		f.gid = 0;
+		f.size = zh.uncsize;
+		f.mdate = msdos2time(zh.modtime, zh.moddate);
+		f.name = zh.file + ((zh.file[0] == '/')? 1: 0);
+		poppath(f, 1);
+		free(zh.file);
+	}
+	return ;
+}
+
+void
+dotrunc(Ram *r)
+{
+	USED(r);
+}
+
+void
+docreate(Ram *r)
+{
+	USED(r);
+}
+
+char *
+doread(Ram *r, long off, long cnt)
+{
+	int i, err;
+	Block bs;
+	ZipHead zh;
+	static Qid oqid;
+	static char buf[Maxbuf];
+	static uchar *cache = nil;
+
+	if (cnt > Maxbuf)
+		sysfatal("file too big (>%d)", Maxbuf);
+
+	if (Bseek(bin, (uvlong)r->data & 0x7fffffff, 0) < 0)
+		sysfatal("seek failed");
+
+	memset(&zh, 0, sizeof(zh));
+	if (!header(bin, &zh))
+		sysfatal("cannot get local header");
+
+	switch(zh.meth){
+	case 0:
+		if (Bseek(bin, off, 1) < 0)
+			sysfatal("seek failed");
+		if (Bread(bin, buf, cnt) != cnt)
+			sysfatal("read failed");
+		break;
+	case 8:
+		if (r->qid.path != oqid.path){
+			oqid = r->qid;
+			if (cache)
+				free(cache);
+			cache = emalloc(r->ndata);
+
+			bs.pos = cache;
+			bs.limit = cache+r->ndata;
+			if ((err = inflate(&bs, blwrite, bin, (int(*)(void*))Bgetc)) != FlateOk)
+				sysfatal("inflate failed - %s", flateerr(err));
+
+			if (blockcrc(crctab, crc, cache, r->ndata) != zh.crc)
+				fprint(2, "%s - crc failed", r->name);
+
+			if ((uvlong)r->data & 0x80000000 && MUNGE_CR){
+				for (i = 0; i < r->ndata -1; i++)
+					if (cache[i] == '\r' && cache[i +1] == '\n')
+						cache[i] = ' ';
+			}
+		}
+		memcpy(buf, cache+off, cnt);
+		break;
+	default:
+		sysfatal("%d - unsupported compression method", zh.meth);
+		break;
+	}
+	
+	return buf;
+}
+
+void
+popdir(Ram *r)
+{
+	USED(r);
+}
+
+void
+dowrite(Ram *r, char *buf, long off, long cnt)
+{
+	USED(r); USED(buf); USED(off); USED(cnt);
+}
+
+int
+dopermw(Ram *r)
+{
+	USED(r);
+	return 0;
+}
+
+/*************************************************/
+
+static int
+findCDir(Biobuf *bin)
+{
+	vlong ecoff;
+	long off;
+	int entries, zclen;
+
+	ecoff = Bseek(bin, -ZECHeadSize, 2);
+	if(ecoff < 0)
+		sysfatal("can't seek to header");
+
+	if(get4(bin) != ZECHeader)
+		sysfatal("bad magic number on directory");
+
+	get2(bin);
+	get2(bin);
+	get2(bin);
+	entries = get2(bin);
+	get4(bin);
+	off = get4(bin);
+	zclen = get2(bin);
+	while(zclen-- > 0)
+		get1(bin);
+
+	if(Bseek(bin, off, 0) != off)
+		sysfatal("can't seek to contents");
+
+	return entries;
+}
+
+
+static int
+header(Biobuf *bin, ZipHead *zh)
+{
+	ulong v;
+	int flen, xlen;
+
+	v = get4(bin);
+	if(v != ZHeader){
+		if(v == ZCHeader)
+			return 0;
+		sysfatal("bad magic on local header");
+	}
+	zh->extvers = get1(bin);
+	zh->extos = get1(bin);
+	zh->flags = get2(bin);
+	zh->meth = get2(bin);
+	zh->modtime = get2(bin);
+	zh->moddate = get2(bin);
+	zh->crc = get4(bin);
+	zh->csize = get4(bin);
+	zh->uncsize = get4(bin);
+	flen = get2(bin);
+	xlen = get2(bin);
+
+	zh->file = getname(bin, flen);
+
+	while(xlen-- > 0)
+		get1(bin);
+	return 1;
+}
+
+static int
+cheader(Biobuf *bin, ZipHead *zh)
+{
+	ulong v;
+	int flen, xlen, fclen;
+
+	v = get4(bin);
+	if(v != ZCHeader){
+		if(v == ZECHeader)
+			return 0;
+		sysfatal("bad magic number in file");
+	}
+	zh->madevers = get1(bin);
+	zh->madeos = get1(bin);
+	zh->extvers = get1(bin);
+	zh->extos = get1(bin);
+	zh->flags = get2(bin);
+	zh->meth = get2(bin);
+	zh->modtime = get2(bin);
+	zh->moddate = get2(bin);
+	zh->crc = get4(bin);
+	zh->csize = get4(bin);
+	zh->uncsize = get4(bin);
+	flen = get2(bin);
+	xlen = get2(bin);
+	fclen = get2(bin);
+	get2(bin);		/* disk number start */
+	zh->iattr = get2(bin);	/* 1 == is-text-file */
+	zh->eattr = get4(bin);	/* 1 == readonly-file */
+	zh->off = get4(bin);
+
+	zh->file = getname(bin, flen);
+
+	while(xlen-- > 0)
+		get1(bin);
+
+	while(fclen-- > 0)
+		get1(bin);
+
+	return 1;
+}
+
+static int
+blwrite(void *vb, void *buf, int n)
+{
+	Block *b = vb;
+	if(n > b->limit - b->pos)
+		n = b->limit - b->pos;
+	memmove(b->pos, buf, n);
+	b->pos += n;
+	return n;
+}
+
+
+static void
+trailer(Biobuf *bin, ZipHead *zh)
+{
+	if(zh->flags & ZTrailInfo){
+		zh->crc = get4(bin);
+		zh->csize = get4(bin);
+		zh->uncsize = get4(bin);
+	}
+}
+
+static char*
+getname(Biobuf *bin, int len)
+{
+	char *s;
+	int i, c;
+
+	s = emalloc(len + 1);
+	for(i = 0; i < len; i++){
+		c = get1(bin);
+		if(FORCE_LOWER)
+			c = tolower(c);
+		s[i] = c;
+	}
+	s[i] = '\0';
+	return s;
+}
+
+
+static ulong
+get4(Biobuf *b)
+{
+	ulong v;
+	int i, c;
+
+	v = 0;
+	for(i = 0; i < 4; i++){
+		c = Bgetc(b);
+		if(c < 0)
+			sysfatal("unexpected eof");
+		v |= c << (i * 8);
+	}
+	return v;
+}
+
+static int
+get2(Biobuf *b)
+{
+	int i, c, v;
+
+	v = 0;
+	for(i = 0; i < 2; i++){
+		c = Bgetc(b);
+		if(c < 0)
+			sysfatal("unexpected eof");
+		v |= c << (i * 8);
+	}
+	return v;
+}
+
+static int
+get1(Biobuf *b)
+{
+	int c;
+
+	c = Bgetc(b);
+	if(c < 0)
+		sysfatal("unexpected eof");
+	return c;
+}
+
+static long
+msdos2time(int time, int date)
+{
+	Tm tm;
+
+	tm.hour = time >> 11;
+	tm.min = (time >> 5) & 63;
+	tm.sec = (time & 31) << 1;
+	tm.year = 80 + (date >> 9);
+	tm.mon = ((date >> 5) & 15) - 1;
+	tm.mday = date & 31;
+	tm.zone[0] = '\0';
+	tm.yday = 0;
+
+	return tm2sec(&tm);
+}
+

+ 47 - 12
sys/src/cmd/upas/smtp/smtp.c

@@ -26,6 +26,8 @@ char	*rewritezone(char *);
 int	dBprint(char*, ...);
 int	dBputc(int);
 String*	fixrouteaddr(String*, Node*, Node*);
+int	ping;
+int	insecure;
 
 #define Retry	"Retry, Temporary Failure"
 #define Giveup	"Permanent Failure"
@@ -33,6 +35,7 @@ String*	fixrouteaddr(String*, Node*, Node*);
 int	debug;		/* true if we're debugging */
 String	*reply;		/* last reply */
 String	*toline;
+int	alarmscale;
 int	last = 'n';	/* last character sent by putcrnl() */
 int	filter;
 int	trysecure;	/* Try to use TLS if the other side supports it */
@@ -53,7 +56,7 @@ Biobuf	bfile;
 void
 usage(void)
 {
-	fprint(2, "usage: smtp [-ads] [-uuser] [-hhost] [.domain] net!host[!service] sender rcpt-list\n");
+	fprint(2, "usage: smtp [-adips] [-uuser] [-hhost] [.domain] net!host[!service] sender rcpt-list\n");
 	exits(Giveup); 
 }
 
@@ -80,6 +83,17 @@ timeout(void *x, char *msg)
 	return 0;
 }
 
+void
+removenewline(char *p)
+{
+	int n = strlen(p)-1;
+
+	if(n < 0)
+		return;
+	if(p[n] == '\n')
+		p[n] = 0;
+}
+
 void
 main(int argc, char **argv)
 {
@@ -93,6 +107,7 @@ main(int argc, char **argv)
 	int i, ok, rcvrs;
 	char **errs;
 
+	alarmscale = 60*1000;	/* minutes */
 	quotefmtinstall();
 	errs = malloc(argc*sizeof(char*));
 	reply = s_new();
@@ -114,6 +129,13 @@ main(int argc, char **argv)
 	case 'h':
 		host = ARGF();
 		break;
+	case 'i':
+		insecure = 1;
+		break;
+	case 'p':
+		alarmscale = 10*1000;	/* tens of seconds */
+		ping = 1;
+		break;
 	case 's':
 		trysecure = 1;
 		break;
@@ -179,13 +201,13 @@ main(int argc, char **argv)
 	/* 10 minutes to get through the initial handshake */
 	atnotify(timeout, 1);
 
-	alarm(10*60*1000);
+	alarm(10*alarmscale);
 	if((rv = connect(addr)) != 0)
 		exits(rv);
-	alarm(10*60*1000);
+	alarm(10*alarmscale);
 	if((rv = hello(hellodomain, 0)) != 0)
 		goto error;
-	alarm(10*60*1000);
+	alarm(10*alarmscale);
 	if((rv = mailfrom(s_to_c(from))) != 0)
 		goto error;
 
@@ -198,6 +220,7 @@ main(int argc, char **argv)
 			if(rv != Giveup)
 				rv = trv;
 			errs[rcvrs] = strdup(s_to_c(reply));
+			removenewline(errs[rcvrs]);
 		} else {
 			ok++;
 			errs[rcvrs] = 0;
@@ -209,10 +232,17 @@ main(int argc, char **argv)
 	if(ok == 0 || rv == Retry)
 		goto error;
 
+	if(ping){
+		quit(0);
+		exits(0);
+	}
+
 	rv = data(from, &bfile);
+if(debug) fprint(2, "data rv %s\n", rv);
 	if(rv != 0)
 		goto error;
 	quit(0);
+if(debug) fprint(2, "rcvrs %d ok %d\n", rcvrs, ok);
 	if(rcvrs == ok)
 		exits(0);
 
@@ -222,7 +252,7 @@ main(int argc, char **argv)
 	fprint(2, "%s connect to %s:\n", thedate(), addr);
 	for(i = 0; i < rcvrs; i++){
 		if(errs[i]){
-			syslog(0, "smtp.fail", "delivery to %s failed: %s", addr, errs[i]);
+			syslog(0, "smtp.fail", "delivery to %s at %s failed: %s", argv[i], addr, errs[i]);
 			fprint(2, "  mail to %s failed: %s", argv[i], errs[i]);
 		}
 	}
@@ -232,10 +262,15 @@ main(int argc, char **argv)
 	 *  here when all rcvrs failed
 	 */
 error:
-	syslog(0, "smtp.fail", "delivery to %s failed: %s", addr, s_to_c(reply));
+	removenewline(s_to_c(reply));
+	syslog(0, "smtp.fail", "%s to %s failed: %s",
+		ping ? "ping" : "delivery",
+		addr, s_to_c(reply));
 	fprint(2, "%s connect to %s:\n%s\n", thedate(), addr, s_to_c(reply));
+if(debug) fprint(2, "errors %s\n", rv);
 	if(!filter)
 		quit(rv);
+if(debug) fprint(2, "exits %s\n", rv);
 	exits(rv);
 }
 
@@ -421,7 +456,7 @@ hello(char *me, int encrypted)
 			s_free(r);
 			return(dotls(me));
 		}
-		if(tryauth && encrypted &&
+		if(tryauth && (encrypted || insecure) &&
 		    (strncmp(s, "250 AUTH", strlen("250 AUTH")) == 0 ||
 		     strncmp(s, "250-AUTH", strlen("250 AUTH")) == 0) &&
 		    strstr(s, "PLAIN") != nil){
@@ -478,7 +513,7 @@ rcptto(char *to)
 		s_append(toline, ddomain);
 		dBprint("RCPT TO:<%s@%s>\r\n", s_to_c(s), ddomain);
 	}
-	alarm(10*60*1000);
+	alarm(10*alarmscale);
 	switch(getreply()){
 	case 2:
 		break;
@@ -544,7 +579,7 @@ data(String *from, Biobuf *b)
 	/*
 	 *  print message observing '.' escapes and using \r\n for \n
 	 */
-	alarm(20*60*1000);
+	alarm(20*alarmscale);
 	if(!filter){
 		dBprint("DATA\r\n");
 		switch(getreply()){
@@ -622,7 +657,7 @@ data(String *from, Biobuf *b)
 			}
 			if(n == 0)
 				break;
-			alarm(10*60*1000);
+			alarm(10*alarmscale);
 			putcrnl(buf, n);
 			nbytes += n;
 		}
@@ -633,7 +668,7 @@ data(String *from, Biobuf *b)
 			dBprint("\r\n.\r\n");
 		else
 			dBprint(".\r\n");
-		alarm(10*60*1000);
+		alarm(10*alarmscale);
 		switch(getreply()){
 		case 2:
 			break;
@@ -657,7 +692,7 @@ quit(char *rv)
 		/* 60 minutes to quit */
 	quitting = 1;
 	quitrv = rv;
-	alarm(60*60*1000);
+	alarm(60*alarmscale);
 	dBprint("QUIT\r\n");
 	getreply();
 	Bterm(&bout);

+ 1 - 1
sys/src/games/sokoban/sokoban.c

@@ -6,7 +6,7 @@
 #include "sokoban.h"
 
 char *LEasy = "/sys/games/lib/sokoban/levels/easy.slc";
-char *LHard = "levels/hard.slc";
+char *LHard = "/sys/games/lib/sokoban/levels/hard.slc";
 char *levelfile;
 
 char		*GRImage = "/sys/games/lib/sokoban/images/right.bit";

+ 1 - 1
sys/src/libdraw/event.c

@@ -406,7 +406,7 @@ emouse(void)
 	m.xy.x = atoi((char*)eb->buf+1+0*12);
 	m.xy.y = atoi((char*)eb->buf+1+1*12);
 	b = atoi((char*)eb->buf+1+2*12);
-	m.buttons = b&7;
+	m.buttons = b;
 	m.msec = atoi((char*)eb->buf+1+3*12);
 	if (logfid)
 		fprint(logfid, "b: %d xy: %P\n", m.buttons, m.xy);

+ 1 - 0
sys/src/libdraw/mkfile

@@ -46,6 +46,7 @@ OFILES=\
 	rectclip.$O\
 	replclipr.$O\
 	rgb.$O\
+	scroll.$O\
 	string.$O\
 	stringbg.$O\
 	stringsubfont.$O\

+ 29 - 0
sys/src/libdraw/scroll.c

@@ -0,0 +1,29 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+
+int
+mousescrollsize(int maxlines)
+{
+	static int lines, pcnt;
+	char *mss;
+
+	if(lines == 0 && pcnt == 0){
+		mss = getenv("mousescrollsize");
+		if(mss){
+			if(strchr(mss, '%') != nil)
+				pcnt = atof(mss);
+			else
+				lines = atoi(mss);
+			free(mss);
+		}
+		if(lines == 0 && pcnt == 0)
+			lines = 1;
+		if(pcnt>=100)
+			pcnt = 100;
+	}
+
+	if(lines)
+		return lines;
+	return pcnt * maxlines/100.0;	
+}