Browse Source

Plan 9 from Bell Labs 2007-01-13

David du Colombier 17 years ago
parent
commit
0a6b8a91f2

+ 5 - 5
dist/replica/_plan9.db

@@ -392,7 +392,7 @@
 386/bin/rio - 775 sys sys 1134389874 310310
 386/bin/rm - 775 sys sys 1168402347 61568
 386/bin/rx - 775 sys sys 1168402347 82290
-386/bin/sam - 775 sys sys 1133892147 159358
+386/bin/sam - 775 sys sys 1168633586 159364
 386/bin/scat - 775 sys sys 1134389875 284491
 386/bin/scp - 775 sys sys 1132506873 152166
 386/bin/scuzz - 775 sys sys 1161026499 113880
@@ -13168,20 +13168,20 @@ sys/src/cmd/sam/cmd.c - 664 sys sys 1132448975 10774
 sys/src/cmd/sam/disk.c - 664 sys sys 1014926938 1988
 sys/src/cmd/sam/error.c - 664 sys sys 1108939612 2222
 sys/src/cmd/sam/errors.h - 664 sys sys 944961628 695
-sys/src/cmd/sam/file.c - 664 sys sys 1166825726 11022
+sys/src/cmd/sam/file.c - 664 sys sys 1168617774 10670
 sys/src/cmd/sam/io.c - 664 sys sys 1111181614 4688
 sys/src/cmd/sam/list.c - 664 sys sys 1133885097 1437
-sys/src/cmd/sam/mesg.c - 664 sys sys 1132448975 14291
+sys/src/cmd/sam/mesg.c - 664 sys sys 1168617775 14393
 sys/src/cmd/sam/mesg.h - 664 sys sys 1111181613 3785
 sys/src/cmd/sam/mkfile - 664 sys sys 1111181613 429
 sys/src/cmd/sam/moveto.c - 664 sys sys 944961628 2698
 sys/src/cmd/sam/multi.c - 664 sys sys 1132448976 1844
 sys/src/cmd/sam/parse.h - 664 sys sys 1130423794 1934
 sys/src/cmd/sam/plan9.c - 664 sys sys 1112535044 2303
-sys/src/cmd/sam/rasp.c - 664 sys sys 1132448976 5618
+sys/src/cmd/sam/rasp.c - 664 sys sys 1168617775 5817
 sys/src/cmd/sam/regexp.c - 664 sys sys 944961629 15390
 sys/src/cmd/sam/sam.c - 664 sys sys 1133885145 12016
-sys/src/cmd/sam/sam.h - 664 sys sys 1133885097 9366
+sys/src/cmd/sam/sam.h - 664 sys sys 1168617774 9418
 sys/src/cmd/sam/shell.c - 664 sys sys 1121977163 3143
 sys/src/cmd/sam/string.c - 664 sys sys 944961629 2766
 sys/src/cmd/sam/sys.c - 664 sys sys 1014926939 745

+ 5 - 5
dist/replica/plan9.db

@@ -392,7 +392,7 @@
 386/bin/rio - 775 sys sys 1134389874 310310
 386/bin/rm - 775 sys sys 1168402347 61568
 386/bin/rx - 775 sys sys 1168402347 82290
-386/bin/sam - 775 sys sys 1133892147 159358
+386/bin/sam - 775 sys sys 1168633586 159364
 386/bin/scat - 775 sys sys 1134389875 284491
 386/bin/scp - 775 sys sys 1132506873 152166
 386/bin/scuzz - 775 sys sys 1161026499 113880
@@ -13168,20 +13168,20 @@ sys/src/cmd/sam/cmd.c - 664 sys sys 1132448975 10774
 sys/src/cmd/sam/disk.c - 664 sys sys 1014926938 1988
 sys/src/cmd/sam/error.c - 664 sys sys 1108939612 2222
 sys/src/cmd/sam/errors.h - 664 sys sys 944961628 695
-sys/src/cmd/sam/file.c - 664 sys sys 1166825726 11022
+sys/src/cmd/sam/file.c - 664 sys sys 1168617774 10670
 sys/src/cmd/sam/io.c - 664 sys sys 1111181614 4688
 sys/src/cmd/sam/list.c - 664 sys sys 1133885097 1437
-sys/src/cmd/sam/mesg.c - 664 sys sys 1132448975 14291
+sys/src/cmd/sam/mesg.c - 664 sys sys 1168617775 14393
 sys/src/cmd/sam/mesg.h - 664 sys sys 1111181613 3785
 sys/src/cmd/sam/mkfile - 664 sys sys 1111181613 429
 sys/src/cmd/sam/moveto.c - 664 sys sys 944961628 2698
 sys/src/cmd/sam/multi.c - 664 sys sys 1132448976 1844
 sys/src/cmd/sam/parse.h - 664 sys sys 1130423794 1934
 sys/src/cmd/sam/plan9.c - 664 sys sys 1112535044 2303
-sys/src/cmd/sam/rasp.c - 664 sys sys 1132448976 5618
+sys/src/cmd/sam/rasp.c - 664 sys sys 1168617775 5817
 sys/src/cmd/sam/regexp.c - 664 sys sys 944961629 15390
 sys/src/cmd/sam/sam.c - 664 sys sys 1133885145 12016
-sys/src/cmd/sam/sam.h - 664 sys sys 1133885097 9366
+sys/src/cmd/sam/sam.h - 664 sys sys 1168617774 9418
 sys/src/cmd/sam/shell.c - 664 sys sys 1121977163 3143
 sys/src/cmd/sam/string.c - 664 sys sys 944961629 2766
 sys/src/cmd/sam/sys.c - 664 sys sys 1014926939 745

+ 6 - 0
dist/replica/plan9.log

@@ -47340,3 +47340,9 @@
 1168462806 0 c 386/9loaddebug - 775 sys sys 1168462195 316226
 1168462806 1 c 386/9loadlitedebug - 775 sys sys 1168462195 202502
 1168554606 0 c sys/games/lib/fortunes - 664 sys sys 1168553329 262588
+1168619407 0 c 386/bin/sam - 775 sys sys 1168617775 159364
+1168619407 1 c sys/src/cmd/sam/file.c - 664 sys sys 1168617774 10670
+1168619407 2 c sys/src/cmd/sam/mesg.c - 664 sys sys 1168617775 14393
+1168619407 3 c sys/src/cmd/sam/rasp.c - 664 sys sys 1168617775 5817
+1168619407 4 c sys/src/cmd/sam/sam.h - 664 sys sys 1168617774 9418
+1168633807 0 c 386/bin/sam - 775 sys sys 1168633586 159364

+ 3 - 24
sys/src/cmd/sam/file.c

@@ -265,18 +265,6 @@ filedeltext(File *f, Text *t)
 }
 #endif
 
-void
-fileinsert(File *f, uint p0, Rune *s, uint ns)
-{
-	if(p0 > f->nc)
-		panic("internal error: fileinsert");
-	if(f->seq > 0)
-		fileuninsert(f, &f->delta, p0, ns);
-	bufinsert(f, p0, s, ns);
-	if(ns)
-		f->mod = TRUE;
-}
-
 void
 fileuninsert(File *f, Buffer *delta, uint p0, uint ns)
 {
@@ -291,18 +279,6 @@ fileuninsert(File *f, Buffer *delta, uint p0, uint ns)
 	bufinsert(delta, delta->nc, (Rune*)&u, Undosize);
 }
 
-void
-filedelete(File *f, uint p0, uint p1)
-{
-	if(!(p0<=p1 && p0<=f->nc && p1<=f->nc))
-		panic("internal error: filedelete");
-	if(f->seq > 0)
-		fileundelete(f, &f->delta, p0, p1);
-	bufdelete(f, p0, p1);
-	if(p1 > p0)
-		f->mod = TRUE;
-}
-
 void
 fileundelete(File *f, Buffer *delta, uint p0, uint p1)
 {
@@ -499,6 +475,9 @@ fileundo(File *f, int isundo, int canredo, uint *q0p, uint *q1p, int flag)
 
 	raspstart(f);
 	while(delta->nc > 0){
+		/* rasp and buffer are in sync; sync with wire if needed */
+		if(needoutflush())
+			raspflush(f);
 		up = delta->nc-Undosize;
 		bufread(delta, up, (Rune*)&u, Undosize);
 		if(isundo){

+ 13 - 7
sys/src/cmd/sam/mesg.c

@@ -10,7 +10,7 @@ Posn	cmdpt;
 Posn	cmdptadv;
 Buffer	snarfbuf;
 int	waitack;
-int	noflush;
+int	outbuffered;
 int	tversion;
 
 int	inshort(void);
@@ -807,21 +807,26 @@ outsend(void)
 {
 	int outcount;
 
+	if(outp >= outdata+nelem(outdata))
+		panic("outsend");
 	outcount = outp-outmsg;
 	outcount -= 3;
 	outmsg[1] = outcount;
 	outmsg[2] = outcount>>8;
 	outmsg = outp;
-	if(!noflush){
+	if(!outbuffered){
 		outcount = outmsg-outdata;
 		if (write(1, (char*) outdata, outcount) != outcount)
 			rescue();
 		outmsg = outdata;
 		return;
 	}
-	if(outmsg < outdata+DATASIZE)
-		return;
-	outflush();
+}
+
+int
+needoutflush(void)
+{
+	return outmsg >= outdata+DATASIZE;
 }
 
 void
@@ -829,7 +834,8 @@ outflush(void)
 {
 	if(outmsg == outdata)
 		return;
-	noflush = 0;
+	outbuffered = 0;
+	/* flow control */
 	outT0(Hack);
 	waitack = 1;
 	do
@@ -839,5 +845,5 @@ outflush(void)
 		}
 	while(waitack);
 	outmsg = outdata;
-	noflush = 1;
+	outbuffered = 1;
 }

+ 16 - 2
sys/src/cmd/sam/rasp.c

@@ -49,7 +49,7 @@ raspstart(File *f)
 		return;
 	grown = 0;
 	shrunk = 0;
-	noflush = 1;
+	outbuffered = 1;
 }
 
 void
@@ -72,13 +72,27 @@ raspdone(File *f, int toterm)
 	if(toterm)
 		outTs(Hcheck0, f->tag);
 	outflush();
-	noflush = 0;
+	outbuffered = 0;
 	if(f == cmd){
 		cmdpt += cmdptadv;
 		cmdptadv = 0;
 	}
 }
 
+void
+raspflush(File *f)
+{
+	if(grown){
+		outTsll(Hgrow, f->tag, growpos, grown);
+		grown = 0;
+	}
+	else if(shrunk){
+		outTsll(Hcut, f->tag, shrinkpos, shrunk);
+		shrunk = 0;
+	}
+	outflush();
+}
+
 void
 raspdelete(File *f, uint p1, uint p2, int toterm)
 {

+ 3 - 1
sys/src/cmd/sam/sam.h

@@ -210,6 +210,7 @@ void		raspstart(File*);
 void		raspdelete(File*, uint, uint, int);
 void		raspinsert(File*, uint, Rune*, uint, int);
 void		raspdone(File*, int);
+void		raspflush(File*);
 
 /*
  * acme fns
@@ -381,7 +382,7 @@ extern int	bpipeok;
 extern int	panicking;
 extern Rune	empty[];
 extern int	termlocked;
-extern int	noflush;
+extern int	outbuffered;
 
 #include "mesg.h"
 
@@ -396,3 +397,4 @@ void	outTsll(Hmesg, int, long, long);
 void	outTsl(Hmesg, int, long);
 void	outTsv(Hmesg, int, vlong);
 void	outflush(void);
+int needoutflush(void);