Browse Source

Plan 9 from Bell Labs 2007-09-13

David du Colombier 16 years ago
parent
commit
63603d6999

+ 23 - 22
dist/replica/_plan9.db

@@ -14,7 +14,7 @@
 386/9pxeload - 775 sys sys 1186619809 326380
 386/9pxeload - 775 sys sys 1186619809 326380
 386/bin - 20000000775 sys sys 1018897690 0
 386/bin - 20000000775 sys sys 1018897690 0
 386/bin/8a - 775 sys sys 1168402260 116604
 386/bin/8a - 775 sys sys 1168402260 116604
-386/bin/8c - 775 sys sys 1188446807 367214
+386/bin/8c - 775 sys sys 1189651279 367246
 386/bin/8l - 775 sys sys 1148500567 115711
 386/bin/8l - 775 sys sys 1148500567 115711
 386/bin/9660srv - 775 sys sys 1168402261 104975
 386/bin/9660srv - 775 sys sys 1168402261 104975
 386/bin/aan - 775 sys sys 1184731221 129822
 386/bin/aan - 775 sys sys 1184731221 129822
@@ -236,9 +236,9 @@
 386/bin/fortune - 775 sys sys 1168402308 67356
 386/bin/fortune - 775 sys sys 1168402308 67356
 386/bin/fossil - 20000000775 sys sys 1042005470 0
 386/bin/fossil - 20000000775 sys sys 1042005470 0
 386/bin/fossil/conf - 775 sys sys 1085077052 1506
 386/bin/fossil/conf - 775 sys sys 1085077052 1506
-386/bin/fossil/flchk - 775 sys sys 1189134784 238377
-386/bin/fossil/flfmt - 775 sys sys 1189134789 246382
-386/bin/fossil/fossil - 775 sys sys 1189134796 365084
+386/bin/fossil/flchk - 775 sys sys 1189651283 238380
+386/bin/fossil/flfmt - 775 sys sys 1189651287 246385
+386/bin/fossil/fossil - 775 sys sys 1189651294 365129
 386/bin/fossil/last - 775 sys sys 1168402310 63550
 386/bin/fossil/last - 775 sys sys 1168402310 63550
 386/bin/freq - 775 sys sys 1168402310 62040
 386/bin/freq - 775 sys sys 1168402310 62040
 386/bin/fs - 20000000775 sys sys 954380769 0
 386/bin/fs - 20000000775 sys sys 954380769 0
@@ -270,7 +270,7 @@
 386/bin/grep - 775 sys sys 1168402312 79569
 386/bin/grep - 775 sys sys 1168402312 79569
 386/bin/gs - 775 sys sys 1188447224 13278980
 386/bin/gs - 775 sys sys 1188447224 13278980
 386/bin/gunzip - 775 sys sys 1168402313 80523
 386/bin/gunzip - 775 sys sys 1168402313 80523
-386/bin/gview - 775 sys sys 1179372091 239070
+386/bin/gview - 775 sys sys 1189627772 240774
 386/bin/gzip - 775 sys sys 1178568278 83518
 386/bin/gzip - 775 sys sys 1178568278 83518
 386/bin/hayes - 775 sys sys 1178568278 63329
 386/bin/hayes - 775 sys sys 1178568278 63329
 386/bin/hget - 775 sys sys 1188447230 233647
 386/bin/hget - 775 sys sys 1188447230 233647
@@ -5829,7 +5829,7 @@ sys/games - 20000000775 sys sys 1117225532 0
 sys/games/lib - 20000000775 sys sys 1165337608 0
 sys/games/lib - 20000000775 sys sys 1165337608 0
 sys/games/lib/4scores - 10000000666 sys sys 1118680448 0
 sys/games/lib/4scores - 10000000666 sys sys 1118680448 0
 sys/games/lib/5scores - 10000000666 sys sys 1118680453 0
 sys/games/lib/5scores - 10000000666 sys sys 1118680453 0
-sys/games/lib/fortunes - 664 sys sys 1188481493 266620
+sys/games/lib/fortunes - 664 sys sys 1189631972 266898
 sys/games/lib/mahjongg - 20000000775 sys sys 1095792278 0
 sys/games/lib/mahjongg - 20000000775 sys sys 1095792278 0
 sys/games/lib/mahjongg/backgrounds - 20000000775 sys sys 1095792293 0
 sys/games/lib/mahjongg/backgrounds - 20000000775 sys sys 1095792293 0
 sys/games/lib/mahjongg/backgrounds/default.bit - 664 sys sys 1095792293 346803
 sys/games/lib/mahjongg/backgrounds/default.bit - 664 sys sys 1095792293 346803
@@ -7303,6 +7303,7 @@ sys/log/aan - 10000000666 sys sys 1019856844 0
 sys/log/auth - 10000000666 sys sys 959261821 0
 sys/log/auth - 10000000666 sys sys 959261821 0
 sys/log/cs - 10000000666 sys sys 958934039 0
 sys/log/cs - 10000000666 sys sys 958934039 0
 sys/log/dns - 10000000666 sys sys 1022008449 0
 sys/log/dns - 10000000666 sys sys 1022008449 0
+sys/log/fossil - 10000000666 sys sys 1189575963 0
 sys/log/ftp - 10000000666 sys sys 958934040 0
 sys/log/ftp - 10000000666 sys sys 958934040 0
 sys/log/httpd - 20000000775 sys sys 1142177993 0
 sys/log/httpd - 20000000775 sys sys 1142177993 0
 sys/log/httpd/clf - 666 sys sys 1142177993 0
 sys/log/httpd/clf - 666 sys sys 1142177993 0
@@ -7313,7 +7314,7 @@ sys/log/imap4d - 10000000666 sys sys 958934039 0
 sys/log/ipboot - 10000000666 sys sys 958934040 0
 sys/log/ipboot - 10000000666 sys sys 958934040 0
 sys/log/ipconfig - 10000000666 sys sys 1185923302 0
 sys/log/ipconfig - 10000000666 sys sys 1185923302 0
 sys/log/listen - 10000000666 sys sys 958934040 0
 sys/log/listen - 10000000666 sys sys 958934040 0
-sys/log/mail - 10000000666 sys sys 1080177666 724
+sys/log/mail - 10000000666 sys sys 1189576467 914
 sys/log/nfs - 10000000666 sys sys 958934039 0
 sys/log/nfs - 10000000666 sys sys 958934039 0
 sys/log/nfsserver - 10000000666 sys sys 958934040 0
 sys/log/nfsserver - 10000000666 sys sys 958934040 0
 sys/log/pop3 - 10000000666 sys sys 958934040 0
 sys/log/pop3 - 10000000666 sys sys 958934040 0
@@ -7394,7 +7395,7 @@ sys/man/1/grap - 664 sys sys 944959675 6417
 sys/man/1/graph - 664 sys sys 1148227125 3061
 sys/man/1/graph - 664 sys sys 1148227125 3061
 sys/man/1/grep - 664 sys sys 1139690020 2257
 sys/man/1/grep - 664 sys sys 1139690020 2257
 sys/man/1/gs - 664 sys sys 1032054727 6906
 sys/man/1/gs - 664 sys sys 1032054727 6906
-sys/man/1/gview - 664 sys sys 1136378273 4361
+sys/man/1/gview - 664 sys sys 1189617617 5230
 sys/man/1/gzip - 664 sys sys 1186715466 3965
 sys/man/1/gzip - 664 sys sys 1186715466 3965
 sys/man/1/hget - 664 sys sys 1141313152 1482
 sys/man/1/hget - 664 sys sys 1141313152 1482
 sys/man/1/history - 664 sys sys 1176744024 1706
 sys/man/1/history - 664 sys sys 1176744024 1706
@@ -8002,8 +8003,8 @@ sys/src/9/ip/ipaux.c - 664 sys sys 1185486678 12341
 sys/src/9/ip/ipifc.c - 664 sys sys 1184794851 34006
 sys/src/9/ip/ipifc.c - 664 sys sys 1184794851 34006
 sys/src/9/ip/ipmux.c - 664 sys sys 1187047550 14991
 sys/src/9/ip/ipmux.c - 664 sys sys 1187047550 14991
 sys/src/9/ip/iproute.c - 664 sys sys 1168305878 14778
 sys/src/9/ip/iproute.c - 664 sys sys 1168305878 14778
-sys/src/9/ip/ipv6.c - 664 sys sys 1187735957 14226
-sys/src/9/ip/ipv6.h - 664 sys sys 1187735924 4301
+sys/src/9/ip/ipv6.c - 664 sys sys 1189625381 14192
+sys/src/9/ip/ipv6.h - 664 sys sys 1189625361 4518
 sys/src/9/ip/loopbackmedium.c - 664 sys sys 1055701769 1671
 sys/src/9/ip/loopbackmedium.c - 664 sys sys 1055701769 1671
 sys/src/9/ip/netdevmedium.c - 664 sys sys 1045063517 2675
 sys/src/9/ip/netdevmedium.c - 664 sys sys 1045063517 2675
 sys/src/9/ip/netlog.c - 664 sys sys 1188581818 3953
 sys/src/9/ip/netlog.c - 664 sys sys 1188581818 3953
@@ -9958,7 +9959,7 @@ sys/src/cmd/cc/com.c - 664 sys sys 1168702346 22212
 sys/src/cmd/cc/com64.c - 664 sys sys 1143240308 10001
 sys/src/cmd/cc/com64.c - 664 sys sys 1143240308 10001
 sys/src/cmd/cc/compat - 664 sys sys 1014925177 684
 sys/src/cmd/cc/compat - 664 sys sys 1014925177 684
 sys/src/cmd/cc/compat.c - 664 sys sys 1132451523 454
 sys/src/cmd/cc/compat.c - 664 sys sys 1132451523 454
-sys/src/cmd/cc/dcl.c - 664 sys sys 1143759352 27003
+sys/src/cmd/cc/dcl.c - 664 sys sys 1189631756 27067
 sys/src/cmd/cc/dpchk.c - 664 sys sys 1175892134 7760
 sys/src/cmd/cc/dpchk.c - 664 sys sys 1175892134 7760
 sys/src/cmd/cc/funct.c - 664 sys sys 984718510 6167
 sys/src/cmd/cc/funct.c - 664 sys sys 984718510 6167
 sys/src/cmd/cc/lex.c - 664 sys sys 1188413849 24667
 sys/src/cmd/cc/lex.c - 664 sys sys 1188413849 24667
@@ -10345,12 +10346,12 @@ sys/src/cmd/file.c - 664 sys sys 1172764226 28088
 sys/src/cmd/fmt.c - 664 sys sys 1137603598 4078
 sys/src/cmd/fmt.c - 664 sys sys 1137603598 4078
 sys/src/cmd/fortune.c - 664 sys sys 1072729222 1779
 sys/src/cmd/fortune.c - 664 sys sys 1072729222 1779
 sys/src/cmd/fossil - 20000000775 sys sys 1087005595 0
 sys/src/cmd/fossil - 20000000775 sys sys 1087005595 0
-sys/src/cmd/fossil/9.h - 664 sys sys 1138465941 4438
+sys/src/cmd/fossil/9.h - 664 sys sys 1189574983 4510
 sys/src/cmd/fossil/9auth.c - 664 sys sys 1189552651 3972
 sys/src/cmd/fossil/9auth.c - 664 sys sys 1189552651 3972
 sys/src/cmd/fossil/9dir.c - 664 sys sys 1085333382 2219
 sys/src/cmd/fossil/9dir.c - 664 sys sys 1085333382 2219
 sys/src/cmd/fossil/9excl.c - 664 sys sys 1042005502 1887
 sys/src/cmd/fossil/9excl.c - 664 sys sys 1042005502 1887
 sys/src/cmd/fossil/9fid.c - 664 sys sys 1189110070 5584
 sys/src/cmd/fossil/9fid.c - 664 sys sys 1189110070 5584
-sys/src/cmd/fossil/9fsys.c - 664 sys sys 1177432002 33485
+sys/src/cmd/fossil/9fsys.c - 664 sys sys 1189575340 33617
 sys/src/cmd/fossil/9lstn.c - 664 sys sys 1147355153 3038
 sys/src/cmd/fossil/9lstn.c - 664 sys sys 1147355153 3038
 sys/src/cmd/fossil/9p.c - 664 sys sys 1189110070 22957
 sys/src/cmd/fossil/9p.c - 664 sys sys 1189110070 22957
 sys/src/cmd/fossil/9ping.c - 664 sys sys 1042005503 1563
 sys/src/cmd/fossil/9ping.c - 664 sys sys 1042005503 1563
@@ -10360,15 +10361,15 @@ sys/src/cmd/fossil/9user.c - 664 sys sys 1181842829 17277
 sys/src/cmd/fossil/Ccli.c - 664 sys sys 1042005504 1624
 sys/src/cmd/fossil/Ccli.c - 664 sys sys 1042005504 1624
 sys/src/cmd/fossil/Ccmd.c - 664 sys sys 1138465941 7985
 sys/src/cmd/fossil/Ccmd.c - 664 sys sys 1138465941 7985
 sys/src/cmd/fossil/Ccons.c - 664 sys sys 1055703737 6620
 sys/src/cmd/fossil/Ccons.c - 664 sys sys 1055703737 6620
-sys/src/cmd/fossil/Clog.c - 664 sys sys 1042005505 591
+sys/src/cmd/fossil/Clog.c - 664 sys sys 1189638175 665
 sys/src/cmd/fossil/archive.c - 664 sys sys 1087005594 10230
 sys/src/cmd/fossil/archive.c - 664 sys sys 1087005594 10230
 sys/src/cmd/fossil/build - 664 sys sys 1042005505 449
 sys/src/cmd/fossil/build - 664 sys sys 1042005505 449
 sys/src/cmd/fossil/buildsh - 775 sys sys 1042005505 561
 sys/src/cmd/fossil/buildsh - 775 sys sys 1042005505 561
 sys/src/cmd/fossil/bwatch.c - 664 sys sys 1042005505 6754
 sys/src/cmd/fossil/bwatch.c - 664 sys sys 1042005505 6754
 sys/src/cmd/fossil/cache.c - 664 sys sys 1180158132 43913
 sys/src/cmd/fossil/cache.c - 664 sys sys 1180158132 43913
-sys/src/cmd/fossil/check.c - 664 sys sys 1187136398 17470
+sys/src/cmd/fossil/check.c - 664 sys sys 1189575296 17505
 sys/src/cmd/fossil/conf.rc - 775 sys sys 1084333190 1416
 sys/src/cmd/fossil/conf.rc - 775 sys sys 1084333190 1416
-sys/src/cmd/fossil/dat.h - 664 sys sys 1189552944 7822
+sys/src/cmd/fossil/dat.h - 664 sys sys 1189575011 7906
 sys/src/cmd/fossil/deadlock - 775 sys sys 1042005506 413
 sys/src/cmd/fossil/deadlock - 775 sys sys 1042005506 413
 sys/src/cmd/fossil/disk.c - 664 sys sys 1179296683 6993
 sys/src/cmd/fossil/disk.c - 664 sys sys 1179296683 6993
 sys/src/cmd/fossil/dump.c - 664 sys sys 1042005506 1340
 sys/src/cmd/fossil/dump.c - 664 sys sys 1042005506 1340
@@ -10376,8 +10377,8 @@ sys/src/cmd/fossil/epoch.c - 664 sys sys 1045600021 997
 sys/src/cmd/fossil/error.c - 664 sys sys 1073851927 1450
 sys/src/cmd/fossil/error.c - 664 sys sys 1073851927 1450
 sys/src/cmd/fossil/error.h - 664 sys sys 1073851928 796
 sys/src/cmd/fossil/error.h - 664 sys sys 1073851928 796
 sys/src/cmd/fossil/file.c - 664 sys sys 1177432003 30146
 sys/src/cmd/fossil/file.c - 664 sys sys 1177432003 30146
-sys/src/cmd/fossil/flchk.c - 664 sys sys 1087005592 1771
-sys/src/cmd/fossil/flfmt.c - 664 sys sys 1080586881 10753
+sys/src/cmd/fossil/flchk.c - 664 sys sys 1189575301 1806
+sys/src/cmd/fossil/flfmt.c - 664 sys sys 1189575499 10757
 sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1132451844 12318
 sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1132451844 12318
 sys/src/cmd/fossil/flfmt9660.h - 664 sys sys 1072830621 134
 sys/src/cmd/fossil/flfmt9660.h - 664 sys sys 1072830621 134
 sys/src/cmd/fossil/flproto - 664 sys sys 1173736837 222
 sys/src/cmd/fossil/flproto - 664 sys sys 1173736837 222
@@ -10389,18 +10390,18 @@ sys/src/cmd/fossil/fs.h - 664 sys sys 1189552775 1606
 sys/src/cmd/fossil/history - 664 sys sys 1055703793 1400
 sys/src/cmd/fossil/history - 664 sys sys 1055703793 1400
 sys/src/cmd/fossil/invariants - 664 sys sys 1189552808 4073
 sys/src/cmd/fossil/invariants - 664 sys sys 1189552808 4073
 sys/src/cmd/fossil/last.c - 664 sys sys 1087005593 812
 sys/src/cmd/fossil/last.c - 664 sys sys 1087005593 812
-sys/src/cmd/fossil/mkfile - 664 sys sys 1189020178 2641
+sys/src/cmd/fossil/mkfile - 664 sys sys 1189628168 2584
 sys/src/cmd/fossil/nobwatch.c - 664 sys sys 1042005509 329
 sys/src/cmd/fossil/nobwatch.c - 664 sys sys 1042005509 329
 sys/src/cmd/fossil/pack.c - 664 sys sys 1187136436 4710
 sys/src/cmd/fossil/pack.c - 664 sys sys 1187136436 4710
 sys/src/cmd/fossil/periodic.c - 664 sys sys 1061530726 1087
 sys/src/cmd/fossil/periodic.c - 664 sys sys 1061530726 1087
 sys/src/cmd/fossil/source.c - 664 sys sys 1187135867 20578
 sys/src/cmd/fossil/source.c - 664 sys sys 1187135867 20578
-sys/src/cmd/fossil/srcload.c - 664 sys sys 1042005510 4178
+sys/src/cmd/fossil/srcload.c - 664 sys sys 1189575580 4185
 sys/src/cmd/fossil/stdinc.h - 664 sys sys 1189020178 156
 sys/src/cmd/fossil/stdinc.h - 664 sys sys 1189020178 156
 sys/src/cmd/fossil/trunc.c - 664 sys sys 1042005511 280
 sys/src/cmd/fossil/trunc.c - 664 sys sys 1042005511 280
 sys/src/cmd/fossil/unpack - 775 sys sys 1042005511 286
 sys/src/cmd/fossil/unpack - 775 sys sys 1042005511 286
 sys/src/cmd/fossil/vac.c - 664 sys sys 1061530727 12483
 sys/src/cmd/fossil/vac.c - 664 sys sys 1061530727 12483
 sys/src/cmd/fossil/vac.h - 664 sys sys 1061530727 2779
 sys/src/cmd/fossil/vac.h - 664 sys sys 1061530727 2779
-sys/src/cmd/fossil/view.c - 664 sys sys 1089299187 19664
+sys/src/cmd/fossil/view.c - 664 sys sys 1189575308 19702
 sys/src/cmd/fossil/walk.c - 664 sys sys 1042005512 963
 sys/src/cmd/fossil/walk.c - 664 sys sys 1042005512 963
 sys/src/cmd/freq.c - 664 sys sys 1136378273 1728
 sys/src/cmd/freq.c - 664 sys sys 1136378273 1728
 sys/src/cmd/getmap.c - 664 sys sys 954468786 3290
 sys/src/cmd/getmap.c - 664 sys sys 954468786 3290
@@ -12353,7 +12354,7 @@ sys/src/cmd/gs/zlib/zlib.3 - 664 sys sys 1137452698 4488
 sys/src/cmd/gs/zlib/zlib.h - 664 sys sys 1137452698 57769
 sys/src/cmd/gs/zlib/zlib.h - 664 sys sys 1137452698 57769
 sys/src/cmd/gs/zlib/zutil.c - 664 sys sys 1137452698 7057
 sys/src/cmd/gs/zlib/zutil.c - 664 sys sys 1137452698 7057
 sys/src/cmd/gs/zlib/zutil.h - 664 sys sys 1137452698 6612
 sys/src/cmd/gs/zlib/zutil.h - 664 sys sys 1137452698 6612
-sys/src/cmd/gview.c - 664 sys sys 1136378274 50883
+sys/src/cmd/gview.c - 664 sys sys 1189617614 54822
 sys/src/cmd/gzip - 20000000775 sys sys 1050689595 0
 sys/src/cmd/gzip - 20000000775 sys sys 1050689595 0
 sys/src/cmd/gzip/gunzip.c - 664 sys sys 1143759345 6037
 sys/src/cmd/gzip/gunzip.c - 664 sys sys 1143759345 6037
 sys/src/cmd/gzip/gzip.c - 664 sys sys 1135487934 3655
 sys/src/cmd/gzip/gzip.c - 664 sys sys 1135487934 3655

+ 23 - 22
dist/replica/plan9.db

@@ -14,7 +14,7 @@
 386/9pxeload - 775 sys sys 1186619809 326380
 386/9pxeload - 775 sys sys 1186619809 326380
 386/bin - 20000000775 sys sys 1018897690 0
 386/bin - 20000000775 sys sys 1018897690 0
 386/bin/8a - 775 sys sys 1168402260 116604
 386/bin/8a - 775 sys sys 1168402260 116604
-386/bin/8c - 775 sys sys 1188446807 367214
+386/bin/8c - 775 sys sys 1189651279 367246
 386/bin/8l - 775 sys sys 1148500567 115711
 386/bin/8l - 775 sys sys 1148500567 115711
 386/bin/9660srv - 775 sys sys 1168402261 104975
 386/bin/9660srv - 775 sys sys 1168402261 104975
 386/bin/aan - 775 sys sys 1184731221 129822
 386/bin/aan - 775 sys sys 1184731221 129822
@@ -236,9 +236,9 @@
 386/bin/fortune - 775 sys sys 1168402308 67356
 386/bin/fortune - 775 sys sys 1168402308 67356
 386/bin/fossil - 20000000775 sys sys 1042005470 0
 386/bin/fossil - 20000000775 sys sys 1042005470 0
 386/bin/fossil/conf - 775 sys sys 1085077052 1506
 386/bin/fossil/conf - 775 sys sys 1085077052 1506
-386/bin/fossil/flchk - 775 sys sys 1189134784 238377
-386/bin/fossil/flfmt - 775 sys sys 1189134789 246382
-386/bin/fossil/fossil - 775 sys sys 1189134796 365084
+386/bin/fossil/flchk - 775 sys sys 1189651283 238380
+386/bin/fossil/flfmt - 775 sys sys 1189651287 246385
+386/bin/fossil/fossil - 775 sys sys 1189651294 365129
 386/bin/fossil/last - 775 sys sys 1168402310 63550
 386/bin/fossil/last - 775 sys sys 1168402310 63550
 386/bin/freq - 775 sys sys 1168402310 62040
 386/bin/freq - 775 sys sys 1168402310 62040
 386/bin/fs - 20000000775 sys sys 954380769 0
 386/bin/fs - 20000000775 sys sys 954380769 0
@@ -270,7 +270,7 @@
 386/bin/grep - 775 sys sys 1168402312 79569
 386/bin/grep - 775 sys sys 1168402312 79569
 386/bin/gs - 775 sys sys 1188447224 13278980
 386/bin/gs - 775 sys sys 1188447224 13278980
 386/bin/gunzip - 775 sys sys 1168402313 80523
 386/bin/gunzip - 775 sys sys 1168402313 80523
-386/bin/gview - 775 sys sys 1179372091 239070
+386/bin/gview - 775 sys sys 1189627772 240774
 386/bin/gzip - 775 sys sys 1178568278 83518
 386/bin/gzip - 775 sys sys 1178568278 83518
 386/bin/hayes - 775 sys sys 1178568278 63329
 386/bin/hayes - 775 sys sys 1178568278 63329
 386/bin/hget - 775 sys sys 1188447230 233647
 386/bin/hget - 775 sys sys 1188447230 233647
@@ -5829,7 +5829,7 @@ sys/games - 20000000775 sys sys 1117225532 0
 sys/games/lib - 20000000775 sys sys 1165337608 0
 sys/games/lib - 20000000775 sys sys 1165337608 0
 sys/games/lib/4scores - 10000000666 sys sys 1118680448 0
 sys/games/lib/4scores - 10000000666 sys sys 1118680448 0
 sys/games/lib/5scores - 10000000666 sys sys 1118680453 0
 sys/games/lib/5scores - 10000000666 sys sys 1118680453 0
-sys/games/lib/fortunes - 664 sys sys 1188481493 266620
+sys/games/lib/fortunes - 664 sys sys 1189631972 266898
 sys/games/lib/mahjongg - 20000000775 sys sys 1095792278 0
 sys/games/lib/mahjongg - 20000000775 sys sys 1095792278 0
 sys/games/lib/mahjongg/backgrounds - 20000000775 sys sys 1095792293 0
 sys/games/lib/mahjongg/backgrounds - 20000000775 sys sys 1095792293 0
 sys/games/lib/mahjongg/backgrounds/default.bit - 664 sys sys 1095792293 346803
 sys/games/lib/mahjongg/backgrounds/default.bit - 664 sys sys 1095792293 346803
@@ -7303,6 +7303,7 @@ sys/log/aan - 10000000666 sys sys 1019856844 0
 sys/log/auth - 10000000666 sys sys 959261821 0
 sys/log/auth - 10000000666 sys sys 959261821 0
 sys/log/cs - 10000000666 sys sys 958934039 0
 sys/log/cs - 10000000666 sys sys 958934039 0
 sys/log/dns - 10000000666 sys sys 1022008449 0
 sys/log/dns - 10000000666 sys sys 1022008449 0
+sys/log/fossil - 10000000666 sys sys 1189575963 0
 sys/log/ftp - 10000000666 sys sys 958934040 0
 sys/log/ftp - 10000000666 sys sys 958934040 0
 sys/log/httpd - 20000000775 sys sys 1142177993 0
 sys/log/httpd - 20000000775 sys sys 1142177993 0
 sys/log/httpd/clf - 666 sys sys 1142177993 0
 sys/log/httpd/clf - 666 sys sys 1142177993 0
@@ -7313,7 +7314,7 @@ sys/log/imap4d - 10000000666 sys sys 958934039 0
 sys/log/ipboot - 10000000666 sys sys 958934040 0
 sys/log/ipboot - 10000000666 sys sys 958934040 0
 sys/log/ipconfig - 10000000666 sys sys 1185923302 0
 sys/log/ipconfig - 10000000666 sys sys 1185923302 0
 sys/log/listen - 10000000666 sys sys 958934040 0
 sys/log/listen - 10000000666 sys sys 958934040 0
-sys/log/mail - 10000000666 sys sys 1080177666 724
+sys/log/mail - 10000000666 sys sys 1189576467 914
 sys/log/nfs - 10000000666 sys sys 958934039 0
 sys/log/nfs - 10000000666 sys sys 958934039 0
 sys/log/nfsserver - 10000000666 sys sys 958934040 0
 sys/log/nfsserver - 10000000666 sys sys 958934040 0
 sys/log/pop3 - 10000000666 sys sys 958934040 0
 sys/log/pop3 - 10000000666 sys sys 958934040 0
@@ -7394,7 +7395,7 @@ sys/man/1/grap - 664 sys sys 944959675 6417
 sys/man/1/graph - 664 sys sys 1148227125 3061
 sys/man/1/graph - 664 sys sys 1148227125 3061
 sys/man/1/grep - 664 sys sys 1139690020 2257
 sys/man/1/grep - 664 sys sys 1139690020 2257
 sys/man/1/gs - 664 sys sys 1032054727 6906
 sys/man/1/gs - 664 sys sys 1032054727 6906
-sys/man/1/gview - 664 sys sys 1136378273 4361
+sys/man/1/gview - 664 sys sys 1189617617 5230
 sys/man/1/gzip - 664 sys sys 1186715466 3965
 sys/man/1/gzip - 664 sys sys 1186715466 3965
 sys/man/1/hget - 664 sys sys 1141313152 1482
 sys/man/1/hget - 664 sys sys 1141313152 1482
 sys/man/1/history - 664 sys sys 1176744024 1706
 sys/man/1/history - 664 sys sys 1176744024 1706
@@ -8002,8 +8003,8 @@ sys/src/9/ip/ipaux.c - 664 sys sys 1185486678 12341
 sys/src/9/ip/ipifc.c - 664 sys sys 1184794851 34006
 sys/src/9/ip/ipifc.c - 664 sys sys 1184794851 34006
 sys/src/9/ip/ipmux.c - 664 sys sys 1187047550 14991
 sys/src/9/ip/ipmux.c - 664 sys sys 1187047550 14991
 sys/src/9/ip/iproute.c - 664 sys sys 1168305878 14778
 sys/src/9/ip/iproute.c - 664 sys sys 1168305878 14778
-sys/src/9/ip/ipv6.c - 664 sys sys 1187735957 14226
-sys/src/9/ip/ipv6.h - 664 sys sys 1187735924 4301
+sys/src/9/ip/ipv6.c - 664 sys sys 1189625381 14192
+sys/src/9/ip/ipv6.h - 664 sys sys 1189625361 4518
 sys/src/9/ip/loopbackmedium.c - 664 sys sys 1055701769 1671
 sys/src/9/ip/loopbackmedium.c - 664 sys sys 1055701769 1671
 sys/src/9/ip/netdevmedium.c - 664 sys sys 1045063517 2675
 sys/src/9/ip/netdevmedium.c - 664 sys sys 1045063517 2675
 sys/src/9/ip/netlog.c - 664 sys sys 1188581818 3953
 sys/src/9/ip/netlog.c - 664 sys sys 1188581818 3953
@@ -9958,7 +9959,7 @@ sys/src/cmd/cc/com.c - 664 sys sys 1168702346 22212
 sys/src/cmd/cc/com64.c - 664 sys sys 1143240308 10001
 sys/src/cmd/cc/com64.c - 664 sys sys 1143240308 10001
 sys/src/cmd/cc/compat - 664 sys sys 1014925177 684
 sys/src/cmd/cc/compat - 664 sys sys 1014925177 684
 sys/src/cmd/cc/compat.c - 664 sys sys 1132451523 454
 sys/src/cmd/cc/compat.c - 664 sys sys 1132451523 454
-sys/src/cmd/cc/dcl.c - 664 sys sys 1143759352 27003
+sys/src/cmd/cc/dcl.c - 664 sys sys 1189631756 27067
 sys/src/cmd/cc/dpchk.c - 664 sys sys 1175892134 7760
 sys/src/cmd/cc/dpchk.c - 664 sys sys 1175892134 7760
 sys/src/cmd/cc/funct.c - 664 sys sys 984718510 6167
 sys/src/cmd/cc/funct.c - 664 sys sys 984718510 6167
 sys/src/cmd/cc/lex.c - 664 sys sys 1188413849 24667
 sys/src/cmd/cc/lex.c - 664 sys sys 1188413849 24667
@@ -10345,12 +10346,12 @@ sys/src/cmd/file.c - 664 sys sys 1172764226 28088
 sys/src/cmd/fmt.c - 664 sys sys 1137603598 4078
 sys/src/cmd/fmt.c - 664 sys sys 1137603598 4078
 sys/src/cmd/fortune.c - 664 sys sys 1072729222 1779
 sys/src/cmd/fortune.c - 664 sys sys 1072729222 1779
 sys/src/cmd/fossil - 20000000775 sys sys 1087005595 0
 sys/src/cmd/fossil - 20000000775 sys sys 1087005595 0
-sys/src/cmd/fossil/9.h - 664 sys sys 1138465941 4438
+sys/src/cmd/fossil/9.h - 664 sys sys 1189574983 4510
 sys/src/cmd/fossil/9auth.c - 664 sys sys 1189552651 3972
 sys/src/cmd/fossil/9auth.c - 664 sys sys 1189552651 3972
 sys/src/cmd/fossil/9dir.c - 664 sys sys 1085333382 2219
 sys/src/cmd/fossil/9dir.c - 664 sys sys 1085333382 2219
 sys/src/cmd/fossil/9excl.c - 664 sys sys 1042005502 1887
 sys/src/cmd/fossil/9excl.c - 664 sys sys 1042005502 1887
 sys/src/cmd/fossil/9fid.c - 664 sys sys 1189110070 5584
 sys/src/cmd/fossil/9fid.c - 664 sys sys 1189110070 5584
-sys/src/cmd/fossil/9fsys.c - 664 sys sys 1177432002 33485
+sys/src/cmd/fossil/9fsys.c - 664 sys sys 1189575340 33617
 sys/src/cmd/fossil/9lstn.c - 664 sys sys 1147355153 3038
 sys/src/cmd/fossil/9lstn.c - 664 sys sys 1147355153 3038
 sys/src/cmd/fossil/9p.c - 664 sys sys 1189110070 22957
 sys/src/cmd/fossil/9p.c - 664 sys sys 1189110070 22957
 sys/src/cmd/fossil/9ping.c - 664 sys sys 1042005503 1563
 sys/src/cmd/fossil/9ping.c - 664 sys sys 1042005503 1563
@@ -10360,15 +10361,15 @@ sys/src/cmd/fossil/9user.c - 664 sys sys 1181842829 17277
 sys/src/cmd/fossil/Ccli.c - 664 sys sys 1042005504 1624
 sys/src/cmd/fossil/Ccli.c - 664 sys sys 1042005504 1624
 sys/src/cmd/fossil/Ccmd.c - 664 sys sys 1138465941 7985
 sys/src/cmd/fossil/Ccmd.c - 664 sys sys 1138465941 7985
 sys/src/cmd/fossil/Ccons.c - 664 sys sys 1055703737 6620
 sys/src/cmd/fossil/Ccons.c - 664 sys sys 1055703737 6620
-sys/src/cmd/fossil/Clog.c - 664 sys sys 1042005505 591
+sys/src/cmd/fossil/Clog.c - 664 sys sys 1189638175 665
 sys/src/cmd/fossil/archive.c - 664 sys sys 1087005594 10230
 sys/src/cmd/fossil/archive.c - 664 sys sys 1087005594 10230
 sys/src/cmd/fossil/build - 664 sys sys 1042005505 449
 sys/src/cmd/fossil/build - 664 sys sys 1042005505 449
 sys/src/cmd/fossil/buildsh - 775 sys sys 1042005505 561
 sys/src/cmd/fossil/buildsh - 775 sys sys 1042005505 561
 sys/src/cmd/fossil/bwatch.c - 664 sys sys 1042005505 6754
 sys/src/cmd/fossil/bwatch.c - 664 sys sys 1042005505 6754
 sys/src/cmd/fossil/cache.c - 664 sys sys 1180158132 43913
 sys/src/cmd/fossil/cache.c - 664 sys sys 1180158132 43913
-sys/src/cmd/fossil/check.c - 664 sys sys 1187136398 17470
+sys/src/cmd/fossil/check.c - 664 sys sys 1189575296 17505
 sys/src/cmd/fossil/conf.rc - 775 sys sys 1084333190 1416
 sys/src/cmd/fossil/conf.rc - 775 sys sys 1084333190 1416
-sys/src/cmd/fossil/dat.h - 664 sys sys 1189552944 7822
+sys/src/cmd/fossil/dat.h - 664 sys sys 1189575011 7906
 sys/src/cmd/fossil/deadlock - 775 sys sys 1042005506 413
 sys/src/cmd/fossil/deadlock - 775 sys sys 1042005506 413
 sys/src/cmd/fossil/disk.c - 664 sys sys 1179296683 6993
 sys/src/cmd/fossil/disk.c - 664 sys sys 1179296683 6993
 sys/src/cmd/fossil/dump.c - 664 sys sys 1042005506 1340
 sys/src/cmd/fossil/dump.c - 664 sys sys 1042005506 1340
@@ -10376,8 +10377,8 @@ sys/src/cmd/fossil/epoch.c - 664 sys sys 1045600021 997
 sys/src/cmd/fossil/error.c - 664 sys sys 1073851927 1450
 sys/src/cmd/fossil/error.c - 664 sys sys 1073851927 1450
 sys/src/cmd/fossil/error.h - 664 sys sys 1073851928 796
 sys/src/cmd/fossil/error.h - 664 sys sys 1073851928 796
 sys/src/cmd/fossil/file.c - 664 sys sys 1177432003 30146
 sys/src/cmd/fossil/file.c - 664 sys sys 1177432003 30146
-sys/src/cmd/fossil/flchk.c - 664 sys sys 1087005592 1771
-sys/src/cmd/fossil/flfmt.c - 664 sys sys 1080586881 10753
+sys/src/cmd/fossil/flchk.c - 664 sys sys 1189575301 1806
+sys/src/cmd/fossil/flfmt.c - 664 sys sys 1189575499 10757
 sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1132451844 12318
 sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1132451844 12318
 sys/src/cmd/fossil/flfmt9660.h - 664 sys sys 1072830621 134
 sys/src/cmd/fossil/flfmt9660.h - 664 sys sys 1072830621 134
 sys/src/cmd/fossil/flproto - 664 sys sys 1173736837 222
 sys/src/cmd/fossil/flproto - 664 sys sys 1173736837 222
@@ -10389,18 +10390,18 @@ sys/src/cmd/fossil/fs.h - 664 sys sys 1189552775 1606
 sys/src/cmd/fossil/history - 664 sys sys 1055703793 1400
 sys/src/cmd/fossil/history - 664 sys sys 1055703793 1400
 sys/src/cmd/fossil/invariants - 664 sys sys 1189552808 4073
 sys/src/cmd/fossil/invariants - 664 sys sys 1189552808 4073
 sys/src/cmd/fossil/last.c - 664 sys sys 1087005593 812
 sys/src/cmd/fossil/last.c - 664 sys sys 1087005593 812
-sys/src/cmd/fossil/mkfile - 664 sys sys 1189020178 2641
+sys/src/cmd/fossil/mkfile - 664 sys sys 1189628168 2584
 sys/src/cmd/fossil/nobwatch.c - 664 sys sys 1042005509 329
 sys/src/cmd/fossil/nobwatch.c - 664 sys sys 1042005509 329
 sys/src/cmd/fossil/pack.c - 664 sys sys 1187136436 4710
 sys/src/cmd/fossil/pack.c - 664 sys sys 1187136436 4710
 sys/src/cmd/fossil/periodic.c - 664 sys sys 1061530726 1087
 sys/src/cmd/fossil/periodic.c - 664 sys sys 1061530726 1087
 sys/src/cmd/fossil/source.c - 664 sys sys 1187135867 20578
 sys/src/cmd/fossil/source.c - 664 sys sys 1187135867 20578
-sys/src/cmd/fossil/srcload.c - 664 sys sys 1042005510 4178
+sys/src/cmd/fossil/srcload.c - 664 sys sys 1189575580 4185
 sys/src/cmd/fossil/stdinc.h - 664 sys sys 1189020178 156
 sys/src/cmd/fossil/stdinc.h - 664 sys sys 1189020178 156
 sys/src/cmd/fossil/trunc.c - 664 sys sys 1042005511 280
 sys/src/cmd/fossil/trunc.c - 664 sys sys 1042005511 280
 sys/src/cmd/fossil/unpack - 775 sys sys 1042005511 286
 sys/src/cmd/fossil/unpack - 775 sys sys 1042005511 286
 sys/src/cmd/fossil/vac.c - 664 sys sys 1061530727 12483
 sys/src/cmd/fossil/vac.c - 664 sys sys 1061530727 12483
 sys/src/cmd/fossil/vac.h - 664 sys sys 1061530727 2779
 sys/src/cmd/fossil/vac.h - 664 sys sys 1061530727 2779
-sys/src/cmd/fossil/view.c - 664 sys sys 1089299187 19664
+sys/src/cmd/fossil/view.c - 664 sys sys 1189575308 19702
 sys/src/cmd/fossil/walk.c - 664 sys sys 1042005512 963
 sys/src/cmd/fossil/walk.c - 664 sys sys 1042005512 963
 sys/src/cmd/freq.c - 664 sys sys 1136378273 1728
 sys/src/cmd/freq.c - 664 sys sys 1136378273 1728
 sys/src/cmd/getmap.c - 664 sys sys 954468786 3290
 sys/src/cmd/getmap.c - 664 sys sys 954468786 3290
@@ -12353,7 +12354,7 @@ sys/src/cmd/gs/zlib/zlib.3 - 664 sys sys 1137452698 4488
 sys/src/cmd/gs/zlib/zlib.h - 664 sys sys 1137452698 57769
 sys/src/cmd/gs/zlib/zlib.h - 664 sys sys 1137452698 57769
 sys/src/cmd/gs/zlib/zutil.c - 664 sys sys 1137452698 7057
 sys/src/cmd/gs/zlib/zutil.c - 664 sys sys 1137452698 7057
 sys/src/cmd/gs/zlib/zutil.h - 664 sys sys 1137452698 6612
 sys/src/cmd/gs/zlib/zutil.h - 664 sys sys 1137452698 6612
-sys/src/cmd/gview.c - 664 sys sys 1136378274 50883
+sys/src/cmd/gview.c - 664 sys sys 1189617614 54822
 sys/src/cmd/gzip - 20000000775 sys sys 1050689595 0
 sys/src/cmd/gzip - 20000000775 sys sys 1050689595 0
 sys/src/cmd/gzip/gunzip.c - 664 sys sys 1143759345 6037
 sys/src/cmd/gzip/gunzip.c - 664 sys sys 1143759345 6037
 sys/src/cmd/gzip/gzip.c - 664 sys sys 1135487934 3655
 sys/src/cmd/gzip/gzip.c - 664 sys sys 1135487934 3655

+ 30 - 0
dist/replica/plan9.log

@@ -52740,3 +52740,33 @@
 1189553403 2 c sys/src/cmd/fossil/fns.h - 664 sys sys 1189552875 3262
 1189553403 2 c sys/src/cmd/fossil/fns.h - 664 sys sys 1189552875 3262
 1189553403 3 c sys/src/cmd/fossil/fs.h - 664 sys sys 1189552775 1606
 1189553403 3 c sys/src/cmd/fossil/fs.h - 664 sys sys 1189552775 1606
 1189553403 4 c sys/src/cmd/fossil/invariants - 664 sys sys 1189552808 4073
 1189553403 4 c sys/src/cmd/fossil/invariants - 664 sys sys 1189552808 4073
+1189575003 0 c sys/src/cmd/fossil/9.h - 664 sys sys 1189574983 4510
+1189575003 1 c sys/src/cmd/fossil/dat.h - 664 sys sys 1189575011 7906
+1189576806 0 a sys/log/fossil - 10000000666 sys sys 1189575963 0
+1189576806 1 c sys/log/mail - 10000000666 sys sys 1189576467 914
+1189576806 2 a sys/log/pqlook - 666 sys sys 1189576572 123
+1189576806 3 c sys/src/cmd/fossil/9fsys.c - 664 sys sys 1189575340 33617
+1189576806 4 c sys/src/cmd/fossil/Clog.c - 664 sys sys 1189575348 537
+1189576806 5 c sys/src/cmd/fossil/check.c - 664 sys sys 1189575296 17505
+1189576806 6 c sys/src/cmd/fossil/flchk.c - 664 sys sys 1189575301 1806
+1189576806 7 c sys/src/cmd/fossil/flfmt.c - 664 sys sys 1189575499 10757
+1189576806 8 c sys/src/cmd/fossil/srcload.c - 664 sys sys 1189575580 4185
+1189576806 9 c sys/src/cmd/fossil/view.c - 664 sys sys 1189575308 19702
+1189616404 0 d sys/log/pqlook - 666 sys sys 1189576572 0
+1189618205 0 c sys/man/1/gview - 664 sys sys 1189617617 5230
+1189618205 1 c sys/src/cmd/gview.c - 664 sys sys 1189617614 54822
+1189625405 0 c sys/src/9/ip/ipv6.c - 664 sys sys 1189625381 14192
+1189625405 1 c sys/src/9/ip/ipv6.h - 664 sys sys 1189625361 4518
+1189629005 0 c 386/bin/fossil/flchk - 775 sys sys 1189627751 241008
+1189629005 1 c 386/bin/fossil/flfmt - 775 sys sys 1189627757 248512
+1189629005 2 c 386/bin/fossil/fossil - 775 sys sys 1189627766 367256
+1189629005 3 c 386/bin/gview - 775 sys sys 1189627772 240774
+1189629005 4 c sys/src/cmd/fossil/mkfile - 664 sys sys 1189628168 2584
+1189632604 0 c sys/games/lib/fortunes - 664 sys sys 1189631972 266898
+1189632604 1 c sys/src/cmd/cc/dcl.c - 664 sys sys 1189631756 27067
+1189638004 0 c sys/src/cmd/fossil/Clog.c - 664 sys sys 1189636477 537
+1189639804 0 c sys/src/cmd/fossil/Clog.c - 664 sys sys 1189638175 665
+1189652404 0 c 386/bin/8c - 775 sys sys 1189651279 367246
+1189652404 1 c 386/bin/fossil/flchk - 775 sys sys 1189651283 238380
+1189652404 2 c 386/bin/fossil/flfmt - 775 sys sys 1189651287 246385
+1189652404 3 c 386/bin/fossil/fossil - 775 sys sys 1189651294 365129

+ 2 - 0
sys/games/lib/fortunes

@@ -4193,3 +4193,5 @@ Th' canny man keeps his money in sheep - or he keeps it in th' First Presbyteria
 ttcp-r: 3689238521928343900000000000000 bytes in 41.02 real seconds = 87829643931512629000000000.00 KB/sec +++
 ttcp-r: 3689238521928343900000000000000 bytes in 41.02 real seconds = 87829643931512629000000000.00 KB/sec +++
 By the time you finish reading this article, you will be able to take advantage of the coolest file system feature to be implemented since the symbolic link.  - CLI Magic: Use Extended Attributes for better file management By Ryan Paul
 By the time you finish reading this article, you will be able to take advantage of the coolest file system feature to be implemented since the symbolic link.  - CLI Magic: Use Extended Attributes for better file management By Ryan Paul
 Intel Pentium 4 2.0Hz processor - TigerDirect catalogue
 Intel Pentium 4 2.0Hz processor - TigerDirect catalogue
+You are roughly 2^90 times more likely to win a U.S. state lottery *and* be struck by lightning simultaneously than you are to encounter [an accidental SHA1 collision] in your file system.  - J. Black
+prelink - prelink ELF shared libraries and binaries to speed up startup time

+ 0 - 0
sys/log/fossil


+ 2 - 0
sys/log/mail

@@ -5,3 +5,5 @@ achille Mar 24 08:24:34 remote local!jmk From presotto Wed Mar 24 08:24:28 EST 2
 achille Mar 24 08:46:24 remote local!jmk From presotto Wed Mar 24 08:46:18 EST 2004 (jmk) 436
 achille Mar 24 08:46:24 remote local!jmk From presotto Wed Mar 24 08:46:18 EST 2004 (jmk) 436
 achille Mar 24 19:33:44 remote local!ehg From presotto Wed Mar 24 19:33:42 EST 2004 (ehg) 21973
 achille Mar 24 19:33:44 remote local!ehg From presotto Wed Mar 24 19:33:42 EST 2004 (ehg) 21973
 achille Mar 24 20:21:06 remote local!jmk From presotto Wed Mar 24 20:21:00 EST 2004 (jmk) 1204
 achille Mar 24 20:21:06 remote local!jmk From presotto Wed Mar 24 20:21:00 EST 2004 (jmk) 1204
+olive Sep 12 01:52:28 remote uce.gov!spam From geoff Wed Sep 12 01:52:26 EDT 2007 4431
+olive Sep 12 01:54:27 remote lsub.org!nemo From geoff Wed Sep 12 01:54:25 EDT 2007 (nemo@lsub.org) 428

+ 50 - 3
sys/man/1/gview

@@ -87,13 +87,18 @@ There is a
 .I recolor
 .I recolor
 command on button 3 that lets you select a color and change everything
 command on button 3 that lets you select a color and change everything
 to have that color, and a similar command on button 2 that only affects
 to have that color, and a similar command on button 2 that only affects
-the selected polyline.  The
+the selected polyline.  If the input file uses the
+.B Multi(...)
+feature explained below, either flavor of
+.I recolor
+allows you to type a digit in lieu of selecting a color.
+.PP
+The
 .I thick
 .I thick
 or
 or
 .I thin
 .I thin
 command on button 2 changes the thickness of the selected polyline
 command on button 2 changes the thickness of the selected polyline
 and there is also an undo command for such edits.
 and there is also an undo command for such edits.
-.PP
 Finally, button 3 has commands to
 Finally, button 3 has commands to
 .I read
 .I read
 a new input file and display it on top of everything else,
 a new input file and display it on top of everything else,
@@ -116,6 +121,12 @@ on a line by itself.  The label at the end of the last polyline is
 optional.   It is not legal to have two consecutive labels, since that
 optional.   It is not legal to have two consecutive labels, since that
 would denote a zero-vertex polyline and each polyline must have at least
 would denote a zero-vertex polyline and each polyline must have at least
 one vertex. (One-vertex polylines are useful for scatter plots.)
 one vertex. (One-vertex polylines are useful for scatter plots.)
+Under the
+.B -l
+option, a newline causes the selected polyline's label to appear in
+the log file (where it could be seen by invoking
+.B tail -f
+in another window).
 
 
 If the label after a polyline contains the word
 If the label after a polyline contains the word
 .B "Thick"
 .B "Thick"
@@ -137,6 +148,35 @@ or a color name
 .BR Black ,
 .BR Black ,
 .BR White ),
 .BR White ),
 whichever color name comes first will be used to color the polyline.
 whichever color name comes first will be used to color the polyline.
+Alternatively, labels can contain
+.B Multi
+followed by single-letter versions of these names:
+.BR (R ,
+.BR P ,
+.BR r ,
+.BR O ,
+.BR Y ,
+.BR y ,
+.BR G ,
+.BR g ,
+.BR C ,
+.BR B ,
+.BR b ,
+.BR M ,
+.BR V ,
+.BR A ,
+.BR K ,
+.BR W ,
+each optionally preceded by
+.BR T ).
+Then
+.I recolor
+followed by a nonzero digit
+.I n
+selects the
+.IR n th
+alternative for each polyline.
+
 .SH EXAMPLE
 .SH EXAMPLE
 To see a graph of the function
 To see a graph of the function
 .IR y = sin( x )/ x ,
 .IR y = sin( x )/ x ,
@@ -149,9 +189,16 @@ awk 'BEGIN{for(x=.1;x<500;x+=.1)print x,sin(x)/x}' | gview
 .SH SOURCE
 .SH SOURCE
 .B /sys/src/cmd/gview.c
 .B /sys/src/cmd/gview.c
 .SH SEE ALSO
 .SH SEE ALSO
-.IR awk (1)
+.IR awk (1),
+.IR tail (1)
 .SH BUGS
 .SH BUGS
 The user interface for the
 The user interface for the
 .I slant
 .I slant
 command is counter-intuitive.  Perhaps it would be better to have a scheme
 command is counter-intuitive.  Perhaps it would be better to have a scheme
 for sweeping out a parallelogram.
 for sweeping out a parallelogram.
+.PP
+The
+.B -p
+option makes the interactive point selection feature behave strangely, and
+is unnecessary since extra blank lines in the input achieve essentially the
+same effect.

+ 6 - 10
sys/src/9/ip/ipv6.c

@@ -527,16 +527,12 @@ unfraglen(Block *bp, uchar *nexthdr, int setfh)
 	ufl = IP6HDR;
 	ufl = IP6HDR;
 	p += ufl;
 	p += ufl;
 
 
-	for(;;) {
-		if(*nexthdr == HBH || *nexthdr == RH) {
-			*nexthdr = *p;
-			hs = ((int)*(p+1) + 1) * 8;
-			ufl += hs;
-			q = p;
-			p += hs;
-		}
-		else
-			break;
+	while (*nexthdr == HBH || *nexthdr == RH) {
+		*nexthdr = *p;
+		hs = ((int)*(p+1) + 1) * 8;
+		ufl += hs;
+		q = p;
+		p += hs;
 	}
 	}
 
 
 	if(*nexthdr == FH)
 	if(*nexthdr == FH)

+ 6 - 0
sys/src/9/ip/ipv6.h

@@ -131,6 +131,12 @@ struct	Opthdr {
 	uchar	len;
 	uchar	len;
 };
 };
 
 
+/*
+ * Beware routing header type 0 (loose source routing); see
+ * http://www.secdev.org/conf/IPv6_RH_security-csw07.pdf.
+ * Type 1 is unused.  Type 2 is for MIPv6 (mobile IPv6) filtering
+ * against type 0 header.
+ */
 struct	Routinghdr {
 struct	Routinghdr {
 	uchar	nexthdr;
 	uchar	nexthdr;
 	uchar	len;
 	uchar	len;

+ 2 - 0
sys/src/cmd/cc/dcl.c

@@ -975,6 +975,8 @@ rsametype(Type *t1, Type *t2, int n, int f)
 				snap(t1);
 				snap(t1);
 			if(t2->link == T)
 			if(t2->link == T)
 				snap(t2);
 				snap(t2);
+			if(t1 != t2 && t1->link == T && t2->link == T)
+				return 0;
 			t1 = t1->link;
 			t1 = t1->link;
 			t2 = t2->link;
 			t2 = t2->link;
 			for(;;) {
 			for(;;) {

+ 4 - 2
sys/src/cmd/fossil/9.h

@@ -55,8 +55,8 @@ struct Con {
 	char*	name;
 	char*	name;
 	uchar*	data;			/* max, not negotiated */
 	uchar*	data;			/* max, not negotiated */
 	int	isconsole;		/* immutable */
 	int	isconsole;		/* immutable */
-	int	flags;		/* immutable */
-	char		remote[128];	/* immutable */
+	int	flags;			/* immutable */
+	char	remote[128];		/* immutable */
 	VtLock*	lock;
 	VtLock*	lock;
 	int	state;
 	int	state;
 	int	fd;
 	int	fd;
@@ -229,6 +229,7 @@ extern int cliAddCmd(char*, int (*)(int, char*[]));
 extern int cliError(char*, ...);
 extern int cliError(char*, ...);
 extern int cliInit(void);
 extern int cliInit(void);
 extern int cliExec(char*);
 extern int cliExec(char*);
+#pragma	varargck	argpos	cliError	1
 
 
 /*
 /*
  * Ccmd.c
  * Ccmd.c
@@ -249,6 +250,7 @@ extern int consWrite(char*, int);
  */
  */
 extern int consPrint(char*, ...);
 extern int consPrint(char*, ...);
 extern int consVPrint(char*, va_list);
 extern int consVPrint(char*, va_list);
+#pragma	varargck	argpos	consPrint	1
 
 
 /*
 /*
  * fossil.c
  * fossil.c

+ 8 - 7
sys/src/cmd/fossil/9fsys.c

@@ -1,7 +1,6 @@
 #include "stdinc.h"
 #include "stdinc.h"
 #include "dat.h"
 #include "dat.h"
 #include "fns.h"
 #include "fns.h"
-
 #include "9.h"
 #include "9.h"
 
 
 typedef struct Fsys Fsys;
 typedef struct Fsys Fsys;
@@ -9,7 +8,7 @@ typedef struct Fsys Fsys;
 struct Fsys {
 struct Fsys {
 	VtLock* lock;
 	VtLock* lock;
 
 
-	char*	name;
+	char*	name;		/* copy here & Fs to ease error reporting */
 	char*	dev;
 	char*	dev;
 	char*	venti;
 	char*	venti;
 
 
@@ -82,7 +81,8 @@ cmdPrintConfig(int argc, char* argv[])
 	for(fsys = sbox.head; fsys != nil; fsys = fsys->next){
 	for(fsys = sbox.head; fsys != nil; fsys = fsys->next){
 		consPrint("\tfsys %s config %s\n", fsys->name, fsys->dev);
 		consPrint("\tfsys %s config %s\n", fsys->name, fsys->dev);
 		if(fsys->venti && fsys->venti[0])
 		if(fsys->venti && fsys->venti[0])
-			consPrint("\tfsys %s venti %q\n", fsys->name, fsys->venti);
+			consPrint("\tfsys %s venti %q\n", fsys->name,
+				fsys->venti);
 	}
 	}
 	vtRUnlock(sbox.lock);
 	vtRUnlock(sbox.lock);
 	return 1;
 	return 1;
@@ -754,7 +754,7 @@ fsysBfree(Fsys* fsys, int argc, char* argv[])
 	while(argc > 0){
 	while(argc > 0){
 		addr = strtoul(argv[0], &p, 0);
 		addr = strtoul(argv[0], &p, 0);
 		if(*p != '\0'){
 		if(*p != '\0'){
-			consPrint("bad address - '%s'\n", addr);
+			consPrint("bad address - '%ud'\n", addr);
 			/* syntax error; let's stop */
 			/* syntax error; let's stop */
 			vtRUnlock(fs->elk);
 			vtRUnlock(fs->elk);
 			return 0;
 			return 0;
@@ -803,7 +803,7 @@ fsysDf(Fsys *fsys, int argc, char* argv[])
 
 
 	fs = fsys->fs;
 	fs = fsys->fs;
 	cacheCountUsed(fs->cache, fs->elo, &used, &tot, &bsize);
 	cacheCountUsed(fs->cache, fs->elo, &used, &tot, &bsize);
-	consPrint("\t%s: %,llud used + %,llud free = %,llud (%ud%% used)\n",
+	consPrint("\t%s: %,llud used + %,llud free = %,llud (%llud%% used)\n",
 		fsys->name, used*(vlong)bsize, (tot-used)*(vlong)bsize,
 		fsys->name, used*(vlong)bsize, (tot-used)*(vlong)bsize,
 		tot*(vlong)bsize, used*100LL/tot);
 		tot*(vlong)bsize, used*100LL/tot);
 	return 1;
 	return 1;
@@ -1150,11 +1150,11 @@ fsysStat(Fsys* fsys, int argc, char* argv[])
 	vtRLock(fsys->fs->elk);
 	vtRLock(fsys->fs->elk);
 	for(i=0; i<argc; i++){
 	for(i=0; i<argc; i++){
 		if((f = fileOpen(fsys->fs, argv[i])) == nil){
 		if((f = fileOpen(fsys->fs, argv[i])) == nil){
-			consPrint("%s: %R\n");
+			consPrint("%s: %R\n", argv[i]);
 			continue;
 			continue;
 		}
 		}
 		if(!fileGetDir(f, &de)){
 		if(!fileGetDir(f, &de)){
-			consPrint("%s: %R\n");
+			consPrint("%s: %R\n", argv[i]);
 			fileDecRef(f);
 			fileDecRef(f);
 			continue;
 			continue;
 		}
 		}
@@ -1534,6 +1534,7 @@ fsysOpen(char* name, int argc, char* argv[])
 		fsysPut(fsys);
 		fsysPut(fsys);
 		return 0;
 		return 0;
 	}
 	}
+	fsys->fs->name = fsys->name;	/* for better error messages */
 	fsys->noauth = noauth;
 	fsys->noauth = noauth;
 	fsys->noperm = noperm;
 	fsys->noperm = noperm;
 	fsys->wstatallow = wstatallow;
 	fsys->wstatallow = wstatallow;

+ 24 - 25
sys/src/cmd/fossil/Clog.c

@@ -1,41 +1,40 @@
 #include "stdinc.h"
 #include "stdinc.h"
-
 #include "9.h"
 #include "9.h"
 
 
 /*
 /*
- * Dummy for now.
+ * To do: This will become something else ('vprint'?).
  */
  */
-
 int
 int
-consPrint(char* fmt, ...)
+consVPrint(char* fmt, va_list args)
 {
 {
-	int len;
-	va_list args;
-	char buf[ERRMAX];
+	int len, ret;
+	char buf[256];
 
 
-	/*
-	 * To do:
-	 * This will be integrated with logging and become 'print'.
-	 */
-	va_start(args, fmt);
 	len = vsnprint(buf, sizeof(buf), fmt, args);
 	len = vsnprint(buf, sizeof(buf), fmt, args);
-	va_end(args);
+	ret = consWrite(buf, len);
 
 
-	return consWrite(buf, len);
+	while (len-- > 0 && buf[len] == '\n')
+		buf[len] = '\0';
+	/*
+	 * if we do this, checking the root fossil (if /sys/log/fossil is there)
+	 * will spew all over the console.
+	 */
+	if (0)
+		syslog(0, "fossil", "%s", buf);
+	return ret;
 }
 }
 
 
+/*
+ * To do: This will become 'print'.
+ */
 int
 int
-consVPrint(char* fmt, va_list args)
+consPrint(char* fmt, ...)
 {
 {
-	int len;
-	char buf[ERRMAX];
-
-	/*
-	 * To do:
-	 * This will be integrated with logging and become
-	 * something else ('vprint'?).
-	 */
-	len = vsnprint(buf, sizeof(buf), fmt, args);
+	int ret;
+	va_list args;
 
 
-	return consWrite(buf, len);
+	va_start(args, fmt);
+	ret = consVPrint(fmt, args);
+	va_end(args);
+	return ret;
 }
 }

+ 1 - 0
sys/src/cmd/fossil/check.c

@@ -17,6 +17,7 @@ static int	walkEpoch(Fsck *chk, Block *b, uchar score[VtScoreSize],
 static void	warn(Fsck*, char*, ...);
 static void	warn(Fsck*, char*, ...);
 
 
 #pragma varargck argpos error 2
 #pragma varargck argpos error 2
+#pragma varargck argpos printnop 1
 #pragma varargck argpos warn 2
 #pragma varargck argpos warn 2
 
 
 static Fsck*
 static Fsck*

+ 3 - 1
sys/src/cmd/fossil/dat.h

@@ -77,6 +77,8 @@ struct Fs {
 	int	blockSize;	/* immutable */
 	int	blockSize;	/* immutable */
 	VtSession *z;		/* immutable */
 	VtSession *z;		/* immutable */
 	Snap	*snap;		/* immutable */
 	Snap	*snap;		/* immutable */
+	/* immutable; copy here & Fsys to ease error reporting */
+	char	*name;
 
 
 	Periodic *metaFlush; /* periodically flushes metadata cached in files */
 	Periodic *metaFlush; /* periodically flushes metadata cached in files */
 
 
@@ -128,7 +130,7 @@ struct Source {
 	int	dir;		/* immutable */
 	int	dir;		/* immutable */
 
 
 	Source	*parent;	/* immutable */
 	Source	*parent;	/* immutable */
-	File	*file;		/* immutable */
+	File	*file;		/* immutable; point back */
 
 
 	VtLock	*lk;
 	VtLock	*lk;
 	int	ref;
 	int	ref;

+ 2 - 0
sys/src/cmd/fossil/flchk.c

@@ -13,6 +13,8 @@ usage(void)
 	exits("usage");
 	exits("usage");
 }
 }
 
 
+#pragma	varargck	argpos	flprint	1
+
 static int
 static int
 flprint(char *fmt, ...)
 flprint(char *fmt, ...)
 {
 {

+ 2 - 2
sys/src/cmd/fossil/flfmt.c

@@ -179,7 +179,8 @@ fdsize(int fd)
 static void
 static void
 usage(void)
 usage(void)
 {
 {
-	fprint(2, "usage: %s [-b blocksize] [-h host] [-i file offset] [-l label] [-v score] [-y] file\n", argv0);
+	fprint(2, "usage: %s [-b blocksize] [-h host] [-i file offset] "
+		"[-l label] [-v score] [-y] file\n", argv0);
 	exits("usage");
 	exits("usage");
 }
 }
 
 
@@ -569,4 +570,3 @@ parseScore(uchar *score, char *buf)
 	}
 	}
 	return 1;
 	return 1;
 }
 }
-

+ 1 - 4
sys/src/cmd/fossil/mkfile

@@ -34,7 +34,7 @@ LIBFILES=\
 
 
 LIBCFILES=${LIBFILES:%=%.c}
 LIBCFILES=${LIBFILES:%=%.c}
 LIBOFILES=${LIBFILES:%=%.$O}
 LIBOFILES=${LIBFILES:%=%.$O}
-LIB=libfs.a.$O
+LIB=libfs.a$O
 
 
 HFILES=\
 HFILES=\
 	/sys/include/oventi.h\
 	/sys/include/oventi.h\
@@ -61,8 +61,6 @@ test:V: all
 	slay 8.flfmt | rc
 	slay 8.flfmt | rc
 	slay 8.fossil | rc
 	slay 8.fossil | rc
 	unmount /n/fossil || status=''
 	unmount /n/fossil || status=''
-	9fs emelieother
-	bind -c /n/emelieother/rsc/tmp /tmp
 	{syscall seek 1 6400000000 0; echo} >>/tmp/fossil
 	{syscall seek 1 6400000000 0; echo} >>/tmp/fossil
 	8.flfmt -y /tmp/fossil
 	8.flfmt -y /tmp/fossil
 	8.conf -w /tmp/fossil flproto
 	8.conf -w /tmp/fossil flproto
@@ -85,7 +83,6 @@ test:V: all
 	echo check >>/srv/test.fscons
 	echo check >>/srv/test.fscons
 	echo check >>/srv/test.fscons
 	echo check >>/srv/test.fscons
 	echo check >>/srv/test.fscons
 	echo check >>/srv/test.fscons
-	
 
 
 #	cp /env/timezone /n/fossil/tmp
 #	cp /env/timezone /n/fossil/tmp
 #	cp /lib/words /n/fossil/tmp
 #	cp /lib/words /n/fossil/tmp

+ 6 - 7
sys/src/cmd/fossil/srcload.c

@@ -67,15 +67,15 @@ main(int argc, char *argv[])
 	srand(0);
 	srand(0);
 
 
 	r = fs->source;
 	r = fs->source;
-dump(r, 0, 0);
+	dump(r, 0, 0);
 
 
 	fprint(2, "count = %d\n", count(r, 1));
 	fprint(2, "count = %d\n", count(r, 1));
 	for(i=0; i<num; i++)
 	for(i=0; i<num; i++)
 		new(r, 0, 0);
 		new(r, 0, 0);
 
 
 	for(i=0; i<iter; i++){
 	for(i=0; i<iter; i++){
-if(i % 10000 == 0)
-stats(r);
+		if(i % 10000 == 0)
+			stats(r);
 		new(r, 0, 0);
 		new(r, 0, 0);
 		delete(r);
 		delete(r);
 	}
 	}
@@ -85,7 +85,7 @@ stats(r);
 	fprint(2, "count = %d\n", count(r, 1));
 	fprint(2, "count = %d\n", count(r, 1));
 //	cacheCheck(c);
 //	cacheCheck(c);
 
 
-fprint(2, "deleting\n");
+	fprint(2, "deleting\n");
 	for(i=0; i<num; i++)
 	for(i=0; i<num; i++)
 		delete(r);
 		delete(r);
 //	dump(r, 0, 0);
 //	dump(r, 0, 0);
@@ -94,9 +94,7 @@ fprint(2, "deleting\n");
 	fprint(2, "total time = %ld\n", time(0)-t);
 	fprint(2, "total time = %ld\n", time(0)-t);
 	
 	
 	fsClose(fs);
 	fsClose(fs);
-
 	vtDetach();
 	vtDetach();
-
 	exits(0);
 	exits(0);
 }
 }
 
 
@@ -210,7 +208,8 @@ dump(Source *s, int ident, ulong entry)
 		return;
 		return;
 	}
 	}
 
 
-	Bprint(bout, "%4lud: gen %4ud depth %d tag=%x score=%V", entry, e.gen, e.depth, e.tag, e.score);
+	Bprint(bout, "%4lud: gen %4ud depth %d tag=%x score=%V",
+		entry, e.gen, e.depth, e.tag, e.score);
 	if(!s->dir){
 	if(!s->dir){
 		Bprint(bout, " data size: %llud\n", e.size);
 		Bprint(bout, " data size: %llud\n", e.size);
 		return;
 		return;

+ 2 - 0
sys/src/cmd/fossil/view.c

@@ -301,6 +301,8 @@ copyMetaBlock(MetaBlock mb)
  * visualizer 
  * visualizer 
  */
  */
 
 
+#pragma	varargck	argpos	stringnode	1
+
 Tnode*
 Tnode*
 stringnode(char *fmt, ...)
 stringnode(char *fmt, ...)
 {
 {

+ 206 - 83
sys/src/cmd/gview.c

@@ -117,6 +117,7 @@ Cursor	bullseye =
 	}
 	}
 };
 };
 
 
+/* Wait for a mouse click and return 0 for failue if not button but (curs can be 0) */
 int get_1click(int but, Mouse* m, Cursor* curs)
 int get_1click(int but, Mouse* m, Cursor* curs)
 {
 {
 	if (curs)
 	if (curs)
@@ -129,6 +130,26 @@ int get_1click(int but, Mouse* m, Cursor* curs)
 }
 }
 
 
 
 
+/* Wait for a mouse click or keyboard event from the string of expected characters.  Return
+   the character code or -1 for a button-but mouse event or 0 for wrong button.
+*/
+int get_click_or_kbd(int but, Mouse* m, const char* expected)
+{
+	Event ev;
+	ulong expbits[4], ty;
+	expbits[0] = expbits[1] = expbits[2] = expbits[3];
+	for (; *expected!=0; expected++)
+		expbits[((*expected)>>5)&3] |= 1 << (*expected&31);
+	do ty = eread(Emouse|Ekeyboard, &ev);
+	while ((ty&Emouse) ? ev.mouse.buttons==0
+		: (ev.kbdc&~127) || !(expbits[(ev.kbdc>>5)&3] & (1<<(ev.kbdc&31))) );
+	if (ty&Ekeyboard)
+		return ev.kbdc;
+	*m = ev.mouse;
+	return (ev.mouse.buttons==Button_bit(but)) ? -1 : 0;
+}
+
+
 /* Wait until but goes up or until a mouse event's msec passes tlimit.
 /* Wait until but goes up or until a mouse event's msec passes tlimit.
    Return a boolean result that tells whether the button went up.
    Return a boolean result that tells whether the button went up.
 */
 */
@@ -163,40 +184,53 @@ enum {	DOrange=0xffaa00FF, Dgray=0xbbbbbbFF, DDkgreen=0x009900FF,
 		DCyan, DMagenta, DWhite */
 		DCyan, DMagenta, DWhite */
 };
 };
 
 
+
+typedef struct thick_color {
+	int thick;			/* use 1+2*thick pixel wide lines */
+	Image* clr;			/* Color to use when drawing this */
+} thick_color;
+
+
 typedef struct color_ref {
 typedef struct color_ref {
 	ulong c;			/* RGBA pixel color */
 	ulong c;			/* RGBA pixel color */
 	char* nam;			/* ASCII name (matched to input, used in output)*/
 	char* nam;			/* ASCII name (matched to input, used in output)*/
+	int nam1;			/* single-letter version of color name */
 	Image* im;			/* replicated solid-color image */
 	Image* im;			/* replicated solid-color image */
 } color_ref;
 } color_ref;
 
 
 color_ref clrtab[] = {
 color_ref clrtab[] = {
-	DRed,		"Red",		0,
-	DPink,		"Pink",		0,
-	DDkred,		"Dkred",	0,
-	DOrange,	"Orange",	0,
-	DYellow,	"Yellow",	0,
-	DDkyellow,	"Dkyellow",	0,
-	DGreen,		"Green",	0,
-	DDkgreen,	"Dkgreen",	0,
-	DCyan,		"Cyan",		0,
-	DBlue,		"Blue",		0,
-	DLtblue,	"Ltblue",	0,
-	DMagenta,	"Magenta",	0,
-	DViolet,	"Violet",	0,
-	Dgray,		"Gray",		0,
-	DBlack,		"Black",	0,
-	DWhite,		"White",	0,
-	DNofill,	0,		0	/* DNofill means "end of data" */
+	DRed,		"Red",		'R', 0,
+	DPink,		"Pink",		'P', 0,
+	DDkred,		"Dkred",	'r', 0,
+	DOrange,	"Orange",	'O', 0,
+	DYellow,	"Yellow",	'Y', 0,
+	DDkyellow,	"Dkyellow",	'y', 0,
+	DGreen,		"Green",	'G', 0,
+	DDkgreen,	"Dkgreen",	'g', 0,
+	DCyan,		"Cyan",		'C', 0,
+	DBlue,		"Blue",		'B', 0,
+	DLtblue,	"Ltblue",	'b', 0,
+	DMagenta,	"Magenta",	'M', 0,
+	DViolet,	"Violet",	'V', 0,
+	Dgray,		"Gray",		'A', 0,
+	DBlack,		"Black",	'K', 0,
+	DWhite,		"White",	'W', 0,
+	DNofill,	0,		0,   0	/* DNofill means "end of data" */
 };
 };
 
 
+short nam1_idx[128];			/* the clrtab[] index for each nam1, else -1 */
+
 
 
 void  init_clrtab(void)
 void  init_clrtab(void)
 {
 {
 	int i;
 	int i;
 	Rectangle r = Rect(0,0,1,1);
 	Rectangle r = Rect(0,0,1,1);
-	for (i=0; clrtab[i].c!=DNofill; i++)
+	memset(&nam1_idx[0], -1, sizeof(nam1_idx));
+	for (i=0; clrtab[i].c!=DNofill; i++) {
 		clrtab[i].im = allocimage(display, r, CMAP8, 1, clrtab[i].c);
 		clrtab[i].im = allocimage(display, r, CMAP8, 1, clrtab[i].c);
 		/* should check for 0 result? */
 		/* should check for 0 result? */
+		nam1_idx[clrtab[i].nam1] = i;
+	}
 }
 }
 
 
 
 
@@ -218,58 +252,117 @@ int clr_id(int clr)
 	return i;
 	return i;
 }
 }
 
 
+
 #define clr_im(clr)	clrtab[clr_id(clr)].im
 #define clr_im(clr)	clrtab[clr_id(clr)].im
+#define is_Multi  -2			/* dummy clrtab[] less than -1 */
+
+
+thick_color* tc_default(thick_color *buf)
+{
+	buf[0].thick = 1;
+	buf[1].clr = clr_im(DBlack);
+	buf[1].thick = 0;
+	return buf;
+}
+
+
+/* Return an allocated array that describes the color letters (clrtab[].nam1 values,
+   optionally prefixed by 'T') in the string that starts at c0 and ends just before
+   fin.  The first entry is a dummy whose thick field tells how many data entries follow.
+   If buf!=0, it should point to an array of length 2 that is to hold the output
+   (truncated to a dummy and one data entry).  The error indication is 1 data entry
+   of default color and thickness; e.g., "Multi(xxbadxx)" in a label prevents gview
+   from recognizing anything that follows.
+*/
+thick_color* parse_color_chars(const char* c0, const char* fin, thick_color *buf)
+{
+	thick_color* tc;		/* Pending return value */
+	int i, j, n=fin-c0;		/* n is an upper bound on how many data members */
+	const char* c;
+	for (c=c0; c<fin-1; c++)
+		if (*c=='T')
+			n--;
+	if (buf==0)
+		tc = (thick_color*) malloc((n+1)*sizeof(thick_color));
+	else {tc=buf; n=1;}
+	i = 0;
+	for (c=c0; c<fin && i<n; c++) {
+		tc[++i].thick = 0;
+		if (*c=='T')
+			if (++c==fin)
+				return tc_default(tc);
+			else tc[i].thick=1;
+		j = (*c&~127) ? -1 : nam1_idx[*c];
+		if (j < 0)
+			return tc_default(tc);
+		tc[i].clr = clrtab[j].im;
+	}
+	tc[0].thick = i;
+	return tc;
+}
 
 
 
 
-/* This decides what color to use for a polyline based on the label it has in the
-   input file.  Whichever color name comes first is the winner, otherwise return black.
+/* Decide what color and thickness to use for a polyline based on the label it has in the
+   input file.  The winner is whichever color name comes first, or otherwise black; and
+   thickness is determined by the presence of "Thick" in the string.  Place the result
+   in *r1 and return 0 unless a Multi(...) spec is found, in which case the result is
+   an allocated array of alternative color and thickness values.  A nonzero idxdest
+   requests the clrtab[] index in *idxdest and no allocated array.
 */
 */
-Image* nam2clr(const char* nam, int *idxdest)
+thick_color* nam2thclr(const char* nam, thick_color *r1, int *idxdest)
 {
 {
-	char *c, *cbest=nam;
+	char *c, *cbest=0, *rp=0;
 	int i, ibest=-1;
 	int i, ibest=-1;
-	if (*nam!=0)
+	thick_color* tc = 0;
+	thick_color buf[2];
+	if (*nam!=0) {
+		c = strstr(nam, "Multi(");
+		if (c!=0 && (rp=strchr(c+6,')'))!=0)
+			{ibest=is_Multi; cbest=c;}
 		for (i=0; clrtab[i].nam!=0; i++) {
 		for (i=0; clrtab[i].nam!=0; i++) {
 			c = strstr(nam,clrtab[i].nam);
 			c = strstr(nam,clrtab[i].nam);
-			if (c!=0 && (ibest<0 || c<cbest))
+			if (c!=0 && (ibest==-1 || c<cbest))
 				{ibest=i; cbest=c;}
 				{ibest=i; cbest=c;}
 		}
 		}
+	}
+	if (ibest==is_Multi) {
+		tc = parse_color_chars(cbest+6, rp, (idxdest==0 ? 0 : &buf[0]));
+		ibest = clrim_id(tc[1].clr);
+	}
 	if (idxdest!=0)
 	if (idxdest!=0)
 		*idxdest = (ibest<0) ? clr_id(DBlack) : ibest;
 		*idxdest = (ibest<0) ? clr_id(DBlack) : ibest;
-	return (ibest<0) ? clr_im(DBlack) : clrtab[ibest].im;
-}
-
-/* A polyline is initial drawn in thick mode iff its label in the file contains "Thick" */
-int nam2thick(const char* nam)
-{
-	return strstr(nam,"Thick")==0 ? 0 : 1;
+	r1->clr = (ibest<0) ? clr_im(DBlack) : clrtab[ibest].im;
+	r1->thick = (tc!=0) ? tc[1].thick : (strstr(nam,"Thick")==0 ? 0 : 1);
+	return tc;
 }
 }
 
 
 
 
-/* Alter string nam so that nam2thick() and nam2clr() agree with th and clr, using
+/* Alter string nam so that nam2thick() and nam2clr() agree with *tc, using
    buf[] (a buffer of length bufn) to store the result if it differs from nam.
    buf[] (a buffer of length bufn) to store the result if it differs from nam.
    We go to great pains to perform this alteration in a manner that will seem natural
    We go to great pains to perform this alteration in a manner that will seem natural
    to the user, i.e., we try removing a suitably isolated color name before inserting
    to the user, i.e., we try removing a suitably isolated color name before inserting
    a new one.
    a new one.
 */
 */
-char* nam_with_thclr(char* nam, int th, Image* clr, char* buf, int bufn)
+char* nam_with_thclr(char* nam, const thick_color *tc, char* buf, int bufn)
 {
 {
-	int clr0i, th0=nam2thick(nam);
-	Image* clr0 = nam2clr(nam, &clr0i);
+	thick_color c0;
+	int clr0i;
+	nam2thclr(nam, &c0, &clr0i);
 	char *clr0s;
 	char *clr0s;
-	if (th0==th && clr0==clr)
+	if (c0.thick==tc->thick && c0.clr==tc->clr)
 		return nam;
 		return nam;
 	clr0s = clrtab[clr0i].nam;
 	clr0s = clrtab[clr0i].nam;
 	if (strlen(nam)<bufn) strcpy(buf,nam);
 	if (strlen(nam)<bufn) strcpy(buf,nam);
 	else {strncpy(buf,nam,bufn); buf[bufn-1]='\0';}
 	else {strncpy(buf,nam,bufn); buf[bufn-1]='\0';}
-	if (clr0 != clr)
+	if (c0.clr != tc->clr)
 		remove_substr(buf, clr0s);
 		remove_substr(buf, clr0s);
-	if (th0 > th)
+	if (c0.thick > tc->thick)
 		while (remove_substr(buf, "Thick"))
 		while (remove_substr(buf, "Thick"))
 			/* do nothing */;
 			/* do nothing */;
-	if (nam2clr(buf,0) != clr)
-		str_insert(buf, clrtab[clrim_id(clr)].nam, bufn);
-	if (th0 < th)
+	nam2thclr(nam, &c0, &clr0i);
+	if (c0.clr != tc->clr)
+		str_insert(buf, clrtab[clrim_id(tc->clr)].nam, bufn);
+	if (c0.thick < tc->thick)
 		str_insert(buf, "Thick", bufn);
 		str_insert(buf, "Thick", bufn);
 	return buf;
 	return buf;
 }
 }
@@ -340,8 +433,8 @@ typedef struct fpolygon {
 	int n;				/* p[] has n elements: p[0..n] */
 	int n;				/* p[] has n elements: p[0..n] */
 	frectangle bb;			/* bounding box */
 	frectangle bb;			/* bounding box */
 	char* nam;			/* name of this polygon (malloc'ed) */
 	char* nam;			/* name of this polygon (malloc'ed) */
-	int thick;			/* use 1+2*thick pixel wide lines */
-	Image* clr;			/* Color to use when drawing this */
+	thick_color c;			/* the current color and line thickness */
+	thick_color* ct;		/* 0 or malloc'ed color schemes, ct[1..ct->thick] */
 	struct fpolygon* link;
 	struct fpolygon* link;
 } fpolygon;
 } fpolygon;
 
 
@@ -361,13 +454,20 @@ fpolygons univ = {			/* everything there is to display */
 };
 };
 
 
 
 
+void free_fp_etc(fpolygon* fp)
+{
+	if (fp->ct != 0)
+		free(fp->ct);
+	free(fp->p);
+	free(fp);
+}
+
+
 void set_default_clrs(fpolygons* fps, fpolygon* fpstop)
 void set_default_clrs(fpolygons* fps, fpolygon* fpstop)
 {
 {
 	fpolygon* fp;
 	fpolygon* fp;
-	for (fp=fps->p; fp!=0 && fp!=fpstop; fp=fp->link) {
-		fp->clr = nam2clr(fp->nam,0);
-		fp->thick = nam2thick(fp->nam);
-	}
+	for (fp=fps->p; fp!=0 && fp!=fpstop; fp=fp->link)
+		fp->ct = nam2thclr(fp->nam, &fp->c, 0);
 }
 }
 
 
 
 
@@ -696,28 +796,29 @@ int is_valid_label(char* lab)
 */
 */
 fpolygon* rd_fpoly(FILE* fin, int *lineno)
 fpolygon* rd_fpoly(FILE* fin, int *lineno)
 {
 {
-	char buf[256], junk[2];
+	char buf[4096], junk[2];
 	fpoint q;
 	fpoint q;
 	fpolygon* fp;
 	fpolygon* fp;
 	int allocn;
 	int allocn;
-	if (!fgets(buf,256,fin))
+	if (!fgets(buf,4096,fin))
 		return 0;
 		return 0;
 	(*lineno)++;
 	(*lineno)++;
 	if (sscanf(buf,"%lg%lg%1s",&q.x,&q.y,junk) != 2)
 	if (sscanf(buf,"%lg%lg%1s",&q.x,&q.y,junk) != 2)
 		return 0;
 		return 0;
 	fp = malloc(sizeof(fpolygon));
 	fp = malloc(sizeof(fpolygon));
-	allocn = 16;
+	allocn = 4;
 	fp->p = malloc(allocn*sizeof(fpoint));
 	fp->p = malloc(allocn*sizeof(fpoint));
 	fp->p[0] = q;
 	fp->p[0] = q;
 	fp->n = 0;
 	fp->n = 0;
 	fp->nam = "";
 	fp->nam = "";
-	fp->thick = 0;
-	fp->clr = clr_im(DBlack);
-	while (fgets(buf,256,fin)) {
+	fp->c.thick = 0;
+	fp->c.clr = clr_im(DBlack);
+	fp->ct = 0;
+	while (fgets(buf,4096,fin)) {
 		(*lineno)++;
 		(*lineno)++;
 		if (sscanf(buf,"%lg%lg%1s",&q.x,&q.y,junk) != 2) {
 		if (sscanf(buf,"%lg%lg%1s",&q.x,&q.y,junk) != 2) {
 			if (!is_valid_label(buf))
 			if (!is_valid_label(buf))
-				{free(fp->p); free(fp); return 0;}
+				{free_fp_etc(fp); return 0;}
 			fp->nam = (buf[0]=='"') ? buf+1 : buf;
 			fp->nam = (buf[0]=='"') ? buf+1 : buf;
 			break;
 			break;
 		}
 		}
@@ -784,7 +885,7 @@ void wr_fpoly(FILE* fout, const fpolygon* fp)
 	int i;
 	int i;
 	for (i=0; i<=fp->n; i++)
 	for (i=0; i<=fp->n; i++)
 		fprintf(fout,"%.12g\t%.12g\n", fp->p[i].x, fp->p[i].y);
 		fprintf(fout,"%.12g\t%.12g\n", fp->p[i].x, fp->p[i].y);
-	fprintf(fout,"\"%s\"\n", nam_with_thclr(fp->nam, fp->thick, fp->clr, buf, 256));
+	fprintf(fout,"\"%s\"\n", nam_with_thclr(fp->nam, &fp->c, buf, 256));
 }
 }
 
 
 void wr_fpolys(FILE* fout, fpolygons* fps)
 void wr_fpolys(FILE* fout, fpolygons* fps)
@@ -1447,7 +1548,7 @@ void draw_1fpoly(const fpolygon* fp, const transform* tr, Image* clr,
 	fpoint *p0=fp->p, *pn=fp->p+fp->n;
 	fpoint *p0=fp->p, *pn=fp->p+fp->n;
 	double l1, l2;
 	double l1, l2;
 	if (p0==pn && fcontains(udisp,*p0))
 	if (p0==pn && fcontains(udisp,*p0))
-		{draw_fpts(p0, 0, tr, fp->thick, clr); return;}
+		{draw_fpts(p0, 0, tr, fp->c.thick, clr); return;}
 	while ((l1=out_length(p0,pn,*udisp,slant)) < pn-p0) {
 	while ((l1=out_length(p0,pn,*udisp,slant)) < pn-p0) {
 		fpoint p0sav;
 		fpoint p0sav;
 		int i1 = (int) l1;
 		int i1 = (int) l1;
@@ -1456,7 +1557,7 @@ void draw_1fpoly(const fpolygon* fp, const transform* tr, Image* clr,
 		p0[0].x += l1*(p0[1].x - p0[0].x);
 		p0[0].x += l1*(p0[1].x - p0[0].x);
 		p0[0].y += l1*(p0[1].y - p0[0].y);
 		p0[0].y += l1*(p0[1].y - p0[0].y);
 		l2 = in_length(p0, pn, *udisp, slant);
 		l2 = in_length(p0, pn, *udisp, slant);
-		draw_fpts(p0, l2, tr, fp->thick, clr);
+		draw_fpts(p0, l2, tr, fp->c.thick, clr);
 		*p0 = p0sav;
 		*p0 = p0sav;
 		p0 += (l2>0) ? ((int) ceil(l2)) : 1;
 		p0 += (l2>0) ? ((int) ceil(l2)) : 1;
 	}
 	}
@@ -1495,7 +1596,7 @@ void eresized(int new)
 	slant = get_clip_data(&univ, &clipr);
 	slant = get_clip_data(&univ, &clipr);
 	for (fp=univ.p; fp!=0; fp=fp->link)
 	for (fp=univ.p; fp!=0; fp=fp->link)
 		if (fintersects(&clipr, &fp->bb, slant))
 		if (fintersects(&clipr, &fp->bb, slant))
-			draw_1fpoly(fp, &tr, fp->clr, &clipr, slant);
+			draw_1fpoly(fp, &tr, fp->c.clr, &clipr, slant);
 	reselect(0);
 	reselect(0);
 	if (mv_bkgd!=0 && mv_bkgd->repl==0) {
 	if (mv_bkgd!=0 && mv_bkgd->repl==0) {
 		freeimage(mv_bkgd);
 		freeimage(mv_bkgd);
@@ -1544,27 +1645,45 @@ void all_set_clr(fpolygons* fps, Image* clr)
 {
 {
 	fpolygon* p;
 	fpolygon* p;
 	for (p=fps->p; p!=0; p=p->link)
 	for (p=fps->p; p!=0; p=p->link)
-		p->clr = clr;
+		p->c.clr = clr;
+}
+	
+
+void all_set_scheme(fpolygons* fps, int scheme)
+{
+	fpolygon* p;
+	for (p=fps->p; p!=0; p=p->link)
+		if (p->ct!=0 && scheme <= p->ct[0].thick)
+			p->c = p->ct[scheme];
 }
 }
 	
 	
 
 
 void do_recolor(int but, Mouse* m, int alluniv)
 void do_recolor(int but, Mouse* m, int alluniv)
 {
 {
-	int nclr = clr_id(DWhite);
+	int sel, clkk, nclr = clr_id(DWhite);
 	int dy = draw_palette(nclr);
 	int dy = draw_palette(nclr);
 	Image* clr;
 	Image* clr;
-	if (!get_1click(but, m, 0)) {
+	clkk = get_click_or_kbd(but, m, "123456789abcdefghijklmnopqrstuvwxyz");
+	if (clkk < 0) {
+		clr = palette_color(m->xy, dy, nclr);
+		if (clr != 0) {
+			if (alluniv)
+				all_set_clr(&univ, clr);
+			else cur_sel.fp->c.clr = clr;
+		}
 		eresized(0);
 		eresized(0);
-		return;
-	}
-	clr = palette_color(m->xy, dy, nclr);
-	if (clr != 0) {
+		lift_button(but, m, Never);
+	} else if (clkk > 0) {
+		sel = ('0'<clkk&&clkk<='9') ? 0 : 10+(clkk-'a')*10;
+		while (!('0'<=clkk&&clkk<='9'))
+			clkk = ekbd();
+		sel += clkk-'0';
 		if (alluniv)
 		if (alluniv)
-			all_set_clr(&univ, clr);
-		else	cur_sel.fp->clr = clr;
+			all_set_scheme(&univ, sel);
+		else if (sel <= cur_sel.fp->ct[0].thick)
+			cur_sel.fp->c = cur_sel.fp->ct[sel];
 	}
 	}
 	eresized(0);
 	eresized(0);
-	lift_button(but, m, Never);
 }
 }
 
 
 
 
@@ -1574,7 +1693,7 @@ void prepare_mv(const fpolygon* fp)
 {
 {
 	Rectangle r = screen->r;
 	Rectangle r = screen->r;
 	Image* scr0;
 	Image* scr0;
-	int dt = 1 + fp->thick;
+	int dt = 1 + fp->c.thick;
 	r.min.x+=lft_border-dt;  r.min.y+=top_border-dt;
 	r.min.x+=lft_border-dt;  r.min.y+=top_border-dt;
 	r.max.x-=rt_border-dt;   r.max.y-=bot_border-dt;
 	r.max.x-=rt_border-dt;   r.max.y-=bot_border-dt;
 	if (mv_bkgd!=0 && mv_bkgd->repl==0)
 	if (mv_bkgd!=0 && mv_bkgd->repl==0)
@@ -1631,13 +1750,13 @@ fpoint do_move(int but, Mouse* m)
 	double tsav = cur_sel.t;
 	double tsav = cur_sel.t;
 	unselect(&tr);
 	unselect(&tr);
 	do {	latest_mouse(but, m);
 	do {	latest_mouse(but, m);
-		(fp->thick)++;		/* line() DISAGREES WITH ITSELF */
+		(fp->c.thick)++;		/* line() DISAGREES WITH ITSELF */
 		draw_fpoly(fp, &tr, mv_bkgd);
 		draw_fpoly(fp, &tr, mv_bkgd);
-		(fp->thick)--;
+		(fp->c.thick)--;
 		do_untransform(&loc, &tr, &m->xy);
 		do_untransform(&loc, &tr, &m->xy);
 		move_fp(fp, loc.x-cur_sel.p.x, loc.y-cur_sel.p.y);
 		move_fp(fp, loc.x-cur_sel.p.x, loc.y-cur_sel.p.y);
 		cur_sel.p = loc;
 		cur_sel.p = loc;
-		draw_fpoly(fp, &tr, fp->clr);
+		draw_fpoly(fp, &tr, fp->c.clr);
 	} while (m->buttons & bbit);
 	} while (m->buttons & bbit);
 	cur_sel.t = tsav;
 	cur_sel.t = tsav;
 	reselect(&tr);
 	reselect(&tr);
@@ -1669,13 +1788,13 @@ double do_rotate(int but, Mouse* m)
 	double theta0 = dir_angle(&m->xy, &tr);
 	double theta0 = dir_angle(&m->xy, &tr);
 	double th, theta = theta0;
 	double th, theta = theta0;
 	do {	latest_mouse(but, m);
 	do {	latest_mouse(but, m);
-		(fp->thick)++;		/* line() DISAGREES WITH ITSELF */
+		(fp->c.thick)++;		/* line() DISAGREES WITH ITSELF */
 		draw_fpoly(fp, &tr, mv_bkgd);
 		draw_fpoly(fp, &tr, mv_bkgd);
-		(fp->thick)--;
+		(fp->c.thick)--;
 		th = dir_angle(&m->xy, &tr);
 		th = dir_angle(&m->xy, &tr);
 		rotate_fp(fp, cur_sel.p, th-theta);
 		rotate_fp(fp, cur_sel.p, th-theta);
 		theta = th;
 		theta = th;
-		draw_fpoly(fp, &tr, fp->clr);
+		draw_fpoly(fp, &tr, fp->c.clr);
 	} while (m->buttons & bbit);
 	} while (m->buttons & bbit);
 	unselect(&tr);
 	unselect(&tr);
 	cur_sel = prev_sel;
 	cur_sel = prev_sel;
@@ -1725,11 +1844,11 @@ void init_e_menu(void)
 	e_items[Edelete] = "delete";
 	e_items[Edelete] = "delete";
 	e_items[Erotate] = "rotate";
 	e_items[Erotate] = "rotate";
 	e_items[Eoptions-cantmv] = 0;
 	e_items[Eoptions-cantmv] = 0;
-	e_items[Ethick] = (cur_sel.fp->thick >0) ? "thin" : "thick";
+	e_items[Ethick] = (cur_sel.fp->c.thick >0) ? "thin" : "thick";
 	if (unact!=0)
 	if (unact!=0)
 		switch (unact->typ) {
 		switch (unact->typ) {
 		case Erecolor: u="uncolor"; break;
 		case Erecolor: u="uncolor"; break;
-		case Ethick: u=(unact->fp->thick==0) ? "unthin" : "unthicken";
+		case Ethick: u=(unact->fp->c.thick==0) ? "unthin" : "unthicken";
 			break;
 			break;
 		case Edelete: u="undelete"; break;
 		case Edelete: u="undelete"; break;
 		case Emove: u="unmove"; break;
 		case Emove: u="unmove"; break;
@@ -1748,7 +1867,7 @@ void do_emenu(int but, Mouse* m)
 	h = emenuhit(but, m, &e_menu);
 	h = emenuhit(but, m, &e_menu);
 	switch(h) {
 	switch(h) {
 	case Ethick: unact = save_act(unact, h);
 	case Ethick: unact = save_act(unact, h);
-		cur_sel.fp->thick ^= 1;
+		cur_sel.fp->c.thick ^= 1;
 		eresized(0);
 		eresized(0);
 		break;
 		break;
 	case Edelete: unact = save_act(unact, h);
 	case Edelete: unact = save_act(unact, h);
@@ -1780,8 +1899,8 @@ e_action* save_act(e_action* a0, e_index typ)
 	e_action* a = malloc(sizeof(e_action));
 	e_action* a = malloc(sizeof(e_action));
 	a->link = a0;
 	a->link = a0;
 	a->pt.x = a->pt.y = 0.0;
 	a->pt.x = a->pt.y = 0.0;
-	a->amt = cur_sel.fp->thick;
-	a->clr = cur_sel.fp->clr;
+	a->amt = cur_sel.fp->c.thick;
+	a->clr = cur_sel.fp->c.clr;
 	a->fp = cur_sel.fp;
 	a->fp = cur_sel.fp;
 	a->typ = typ;
 	a->typ = typ;
 	return a;
 	return a;
@@ -1812,10 +1931,10 @@ e_action* do_undo(e_action* a0)		/* pop off an e_action and (un)do it */
 	if (a==0)
 	if (a==0)
 		return 0;
 		return 0;
 	switch(a->typ) {
 	switch(a->typ) {
-	case Ethick: a->fp->thick = a->amt;
+	case Ethick: a->fp->c.thick = a->amt;
 		eresized(0);
 		eresized(0);
 		break;
 		break;
-	case Erecolor: a->fp->clr = a->clr;
+	case Erecolor: a->fp->c.clr = a->clr;
 		eresized(0);
 		eresized(0);
 		break;
 		break;
 	case Edelete: 
 	case Edelete: 
@@ -1945,8 +2064,12 @@ void doevent(void)
 			do_emenu(2, &ev.mouse);
 			do_emenu(2, &ev.mouse);
 		else if (ev.mouse.buttons & But3)
 		else if (ev.mouse.buttons & But3)
 			do_mmenu(3, &ev.mouse);
 			do_mmenu(3, &ev.mouse);
+	} else if (etype & Ekeyboard) {
+		if (ev.kbdc=='\n' && cur_sel.t>=0 && logfil!=0) {
+			fprintf(logfil,"%s\n", cur_sel.fp->nam);
+			fflush(logfil);
+		}
 	}
 	}
-	/* no need to check (etype & Ekeyboard)--there are no keyboard commands */
 }
 }