Browse Source

Plan 9 from Bell Labs 2005-12-31

David du Colombier 18 years ago
parent
commit
45a86a2da7

+ 22 - 15
acme/bin/source/adict/adict.c

@@ -5,6 +5,11 @@
 #include "win.h"
 #include "adict.h"
 
+enum
+{
+	STACK = 8192,
+};
+
 char *prog = "adict";
 char *lprog = "/bin/adict";
 char *xprog  = "/bin/dict";
@@ -22,10 +27,12 @@ int getaddr(char*);
 void
 usage(void)
 {
-		threadprint(2, "usage: %s [-d dictname] [pattern]\n", argv0);
+		fprint(2, "usage: %s [-d dictname] [pattern]\n", argv0);
 		threadexitsall(nil);
 }
 
+int mainstacksize = STACK;
+
 void
 threadmain(int argc, char** argv)
 {
@@ -46,7 +53,7 @@ threadmain(int argc, char** argv)
 		pattern = pbuffer;
 		strcpy(pattern,argv[0]);
 		if(dict == nil)
-			dict = "oed";
+			dict = "pgw";
 		break;
 	case 0:
 		break;
@@ -89,7 +96,7 @@ procrexec(char *xprog, ...)
 	rexarg[2] = fpipe;
 	rexarg[3] = c;
 
-	proccreate(rexec, rexarg, 8192);
+	proccreate(rexec, rexarg, STACK);
 	recvul(c);
 	chanfree(c);
 	close(fpipe[1]);
@@ -130,7 +137,7 @@ if(bufptr[0] == 0)
 	}
 	curaddr[i] = nil;
 	if (i == MAXMATCH)
-		threadprint(2, "Too many matches!\n");
+		fprint(2, "Too many matches!\n");
 	Bterm(&inbuf);
 	close(fd);
 
@@ -149,7 +156,7 @@ getpattern(char *addr)
 	sprint(buffer,"%sh", addr);
 	fd = procrexec(xprog, "-d", dict, "-c", buffer, nil);
 	if (read(fd, pbuffer, 80) > 80)
-		threadprint(2, "Error in getting addres from dict.\n");
+		fprint(2, "Error in getting addres from dict.\n");
 	else {
 		t = pbuffer;
 		/* remove trailing whitespace, newline */
@@ -182,7 +189,7 @@ chgaddr(int dir)
 		sprint(buffer,"%s+a", curone);
 	fd = procrexec(xprog, "-d", dict, "-c", buffer, nil);
 	if (read(fd, abuffer, 80) > 80)
-		threadprint(2, "Error in getting addres from dict.\n");
+		fprint(2, "Error in getting addres from dict.\n");
 	else {
 		res = abuffer;
 		while (*res != '#') res++;
@@ -352,7 +359,7 @@ procopenwin(char *name, char *buttons, Win *twin, int wintype)
 	arg[2] = twin;
 	arg[3] = (void*)wintype;
 	arg[4] = c;
-	proccreate(vopenwin, arg, 8192);
+	proccreate(vopenwin, arg, STACK);
 	recvul(c);
 	chanfree(c);
 }
@@ -377,7 +384,7 @@ rexec(void *v)
 	close(fd[1]);
 	close(fd[0]);
 	procexec(c, prog, args);
-	threadprint(2, "Remote pipe execution failed: %s %r\n", prog);
+	fprint(2, "Remote pipe execution failed: %s %r\n", prog);
 abort();
 	threadexits(nil);
 }
@@ -396,7 +403,7 @@ pexec(void *v)
 	c = arg[2];
 
 	procexec(c, prog, args);
-	threadprint(2, "Remote execution failed: %s %r\n", prog);
+	fprint(2, "Remote execution failed: %s %r\n", prog);
 abort();
 	threadexits(nil);
 }
@@ -412,7 +419,7 @@ procpexec(char *prog, char **args)
 	rexarg[1] = args;
 	rexarg[2] = c;
 
-	proccreate(pexec, rexarg, 8192);
+	proccreate(pexec, rexarg, STACK);
 	recvul(c);
 	chanfree(c);
 }
@@ -503,19 +510,19 @@ handle(Win *w, int wintype)
 		wevent(w, &e);
 		switch(e.c2){
 		default:
-			/* threadprint(2,"unknown message %c%c\n", e.c1, e.c2); */
+			/* fprint(2,"unknown message %c%c\n", e.c1, e.c2); */
 			break;
 		case 'i':
-			/* threadprint(2,"'%s' inserted in tag at %d\n", e.b, e.q0);*/
+			/* fprint(2,"'%s' inserted in tag at %d\n", e.b, e.q0);*/
 			break;
 		case 'I':
-			/* threadprint(2,"'%s' inserted in body at %d\n", e.b, e.q0);*/
+			/* fprint(2,"'%s' inserted in body at %d\n", e.b, e.q0);*/
 			break;
 		case 'd':
-			/* threadprint(2, "'%s' deleted in tag at %d\n", e.b, e.q0);*/
+			/* fprint(2, "'%s' deleted in tag at %d\n", e.b, e.q0);*/
 			break;
 		case 'D':
-			/* threadprint(2, "'%s' deleted in body at %d\n", e.b, e.q0);*/
+			/* fprint(2, "'%s' deleted in body at %d\n", e.b, e.q0);*/
 			break;
 		case 'x':
 		case 'X':				/* Execute command. */

+ 17 - 17
acme/bin/source/adict/win.c

@@ -9,7 +9,7 @@ erealloc(void *p, uint n)
 {
 	p = realloc(p, n);
 	if(p == nil)
-		threadprint(2, "realloc failed: %r");
+		fprint(2, "realloc failed: %r");
 	return p;
 }
 
@@ -20,7 +20,7 @@ wnew(Win *w)
 
 	w->ctl = open("/mnt/acme/new/ctl", ORDWR);
 	if(w->ctl<0 || read(w->ctl, buf, 12)!=12)
-		 threadprint (2, "can't open window ctl file: %r");
+		 fprint (2, "can't open window ctl file: %r");
 	ctlwrite(w, "noscroll\n");
 	w->winid = atoi(buf);
 	w->event = openfile(w, "event");
@@ -38,7 +38,7 @@ openfile(Win *w, char *f)
 	sprint(buf, "/mnt/acme/%d/%s", w->winid, f);
 	fd = open(buf, ORDWR|OCEXEC);
 	if(fd < 0)
-		 threadprint (2,"can't open window %s file: %r", f);
+		 fprint (2,"can't open window %s file: %r", f);
 	return fd;
 }
 
@@ -50,7 +50,7 @@ openbody(Win *w, int mode)
 	sprint(buf, "/mnt/acme/%d/body", w->winid);
 	w->body = Bopen(buf, mode|OCEXEC);
 	if(w->body == nil)
-		 threadprint(2,"can't open window body file: %r");
+		 fprint(2,"can't open window body file: %r");
 }
 
 void
@@ -59,7 +59,7 @@ wwritebody(Win *w, char *s, int n)
 	if(w->body == nil)
 		openbody(w, OWRITE);
 	if(Bwrite(w->body, s, n) != n)
-		  threadprint(2,"write error to window: %r");
+		  fprint(2,"write error to window: %r");
 	Bflush(w->body);
 }
 
@@ -71,11 +71,11 @@ wreplace(Win *w, char *addr, char *repl, int nrepl)
 	if(w->data < 0)
 		w->data = openfile(w, "data");
 	if(write(w->addr, addr, strlen(addr)) < 0){
-		threadprint(2, "mail: warning: badd address %s:%r\n", addr);
+		fprint(2, "mail: warning: badd address %s:%r\n", addr);
 		return;
 	}
 	if(write(w->data, repl, nrepl) != nrepl)
-		 threadprint(2, "writing data: %r");
+		 fprint(2, "writing data: %r");
 }
 
 static int
@@ -104,10 +104,10 @@ wread(Win *w, uint q0, uint q1, char *data)
 	while(m < q1){
 		n = sprint(buf, "#%d", m);
 		if(write(w->addr, buf, n) != n)
-			  threadprint(2,"writing addr: %r");
+			  fprint(2,"writing addr: %r");
 		n = read(w->data, buf, sizeof buf);
 		if(n <= 0)
-			  threadprint(2,"reading data: %r");
+			  fprint(2,"reading data: %r");
 		nr = nrunes(buf, n);
 		while(m+nr >q1){
 			do; while(n>0 && (buf[--n]&0xC0)==0x80);
@@ -128,7 +128,7 @@ wselect(Win *w, char *addr)
 	if(w->addr < 0)
 		w->addr = openfile(w, "addr");
 	if(write(w->addr, addr, strlen(addr)) < 0)
-		  threadprint(2,"writing addr");
+		  fprint(2,"writing addr");
 	ctlwrite(w, "dot=addr\n");
 }
 
@@ -139,7 +139,7 @@ wtagwrite(Win *w, char *s, int n)
 
 	fd = openfile(w, "tag");
 	if(write(fd, s, n) != n)
-		  threadprint(2,"tag write: %r");
+		  fprint(2,"tag write: %r");
 	close(fd);
 }
 
@@ -150,7 +150,7 @@ ctlwrite(Win *w, char *s)
 
 	n = strlen(s);
 	if(write(w->ctl, s, n) != n)
-		 threadprint(2,"write error to ctl file: %r");
+		 fprint(2,"write error to ctl file: %r");
 }
 
 int
@@ -206,7 +206,7 @@ getec(Win *w)
 	if(w->nbuf == 0){
 		w->nbuf = read(w->event, w->buf, sizeof w->buf);
 		if(w->nbuf <= 0)
-			  threadprint(2,"event read error: %r");
+			  fprint(2,"event read error: %r");
 		w->bufp = w->buf;
 	}
 	w->nbuf--;
@@ -222,7 +222,7 @@ geten(Win *w)
 	while('0'<=(c=getec(w)) && c<='9')
 		n = n*10+(c-'0');
 	if(c != ' ')
-		 threadprint(2, "event number syntax");
+		 fprint(2, "event number syntax");
 	return n;
 }
 
@@ -258,7 +258,7 @@ wevent(Win *w, Event *e)
 	e->flag = geten(w);
 	e->nr = geten(w);
 	if(e->nr > EVENTSIZE)
-		  threadprint(2, "wevent: event string too long");
+		  fprint(2, "wevent: event string too long");
 	e->nb = 0;
 	for(i=0; i<e->nr; i++){
 		e->r[i] = geter(w, e->b+e->nb, &nb);
@@ -267,7 +267,7 @@ wevent(Win *w, Event *e)
 	e->r[e->nr] = 0;
 	e->b[e->nb] = 0;
 	if(getec(w) != '\n')
-		 threadprint(2, "wevent: event syntax 2");
+		 fprint(2, "wevent: event syntax 2");
 }
 
 void
@@ -282,7 +282,7 @@ wslave(Win *w, Channel *ce)
 void
 wwriteevent(Win *w, Event *e)
 {
-	threadprint(w->event, "%c%c%d %d\n", e->c1, e->c2, e->q0, e->q1);
+	fprint(w->event, "%c%c%d %d\n", e->c1, e->c2, e->q0, e->q1);
 }
 
 int

+ 9 - 9
dist/replica/_plan9.db

@@ -317,7 +317,7 @@
 386/bin/kprof - 775 sys sys 1135570830 105465
 386/bin/ktrace - 775 sys sys 1135570830 123137
 386/bin/lens - 775 sys sys 1135570830 150725
-386/bin/lex - 775 sys sys 1135570831 98935
+386/bin/lex - 775 sys sys 1135973488 98980
 386/bin/lnfs - 775 sys sys 1135570831 99434
 386/bin/look - 775 sys sys 1135570831 65531
 386/bin/ls - 775 sys sys 1135570831 82459
@@ -670,11 +670,11 @@ acme/bin/source/acd/toc.c - 664 sys sys 1015011255 753
 acme/bin/source/acd/util.c - 664 sys sys 1032232411 1145
 acme/bin/source/acd/win.c - 664 sys sys 1032232411 5104
 acme/bin/source/adict - 20000000775 sys sys 1015011255 0
-acme/bin/source/adict/adict.c - 664 sys sys 1015011255 10913
+acme/bin/source/adict/adict.c - 664 sys sys 1135960478 10915
 acme/bin/source/adict/adict.h - 664 sys sys 1015011255 102
 acme/bin/source/adict/man - 664 sys sys 1015011255 1044
 acme/bin/source/adict/mkfile - 664 sys sys 1015011255 117
-acme/bin/source/adict/win.c - 664 sys sys 1015011255 4885
+acme/bin/source/adict/win.c - 664 sys sys 1135960478 4800
 acme/bin/source/adict/win.h - 664 sys sys 1015011255 934
 acme/bin/source/mkfile - 664 sys sys 1017679345 263
 acme/bin/source/mkwnew.c - 664 sys sys 1017680666 862
@@ -8048,7 +8048,7 @@ sys/src/9/port/alloc.c - 664 sys sys 1130964595 5674
 sys/src/9/port/allocb.c - 664 sys sys 1123676437 3340
 sys/src/9/port/auth.c - 664 sys sys 1123647282 2392
 sys/src/9/port/cache.c - 664 sys sys 1126586168 9241
-sys/src/9/port/chan.c - 664 sys sys 1131298713 33663
+sys/src/9/port/chan.c - 664 sys sys 1135974610 33663
 sys/src/9/port/cis.c - 664 sys sys 1099761153 9248
 sys/src/9/port/debugalloc.c - 664 sys sys 1014931171 10402
 sys/src/9/port/dev.c - 664 sys sys 1131289870 8219
@@ -12227,12 +12227,12 @@ sys/src/cmd/lens.c - 664 sys sys 1130425803 5109
 sys/src/cmd/lex - 20000000775 sys sys 944961017 0
 sys/src/cmd/lex/header.c - 664 sys sys 1032060383 3368
 sys/src/cmd/lex/ldefs.h - 664 sys sys 1135487942 4101
-sys/src/cmd/lex/lmain.c - 664 sys sys 1135487944 6059
+sys/src/cmd/lex/lmain.c - 664 sys sys 1135921540 6076
 sys/src/cmd/lex/mkfile - 664 sys sys 1032060382 328
 sys/src/cmd/lex/ncform - 664 sys sys 944961017 4060
 sys/src/cmd/lex/parser.y - 664 sys sys 1135487944 14215
-sys/src/cmd/lex/sub1.c - 664 sys sys 1135487942 10099
-sys/src/cmd/lex/sub2.c - 664 sys sys 1135487944 17109
+sys/src/cmd/lex/sub1.c - 664 sys sys 1135921541 10121
+sys/src/cmd/lex/sub2.c - 664 sys sys 1135921541 17089
 sys/src/cmd/lnfs.c - 664 sys sys 1094156765 13332
 sys/src/cmd/look.c - 664 sys sys 944961619 5994
 sys/src/cmd/lp - 20000000775 sys sys 953344617 0
@@ -13091,7 +13091,7 @@ sys/src/cmd/tcs/font/qbits.c - 664 sys sys 944961251 2037
 sys/src/cmd/tcs/gb.c - 664 sys sys 944961288 62707
 sys/src/cmd/tcs/gb.h - 664 sys sys 944961287 183
 sys/src/cmd/tcs/hdr.h - 664 sys sys 944961287 1213
-sys/src/cmd/tcs/html.c - 664 sys sys 1135893400 5237
+sys/src/cmd/tcs/html.c - 664 sys sys 1135958471 5247
 sys/src/cmd/tcs/jis.h - 664 sys sys 944961287 2873
 sys/src/cmd/tcs/ksc.c - 664 sys sys 944961289 72413
 sys/src/cmd/tcs/ksc.h - 664 sys sys 944961287 112
@@ -13177,7 +13177,7 @@ sys/src/cmd/unix/drawterm/Makefile - 664 sys sys 1135900534 1112
 sys/src/cmd/unix/drawterm/README - 664 sys sys 1135900534 925
 sys/src/cmd/unix/drawterm/args.h - 664 sys sys 1135900534 709
 sys/src/cmd/unix/drawterm/bin - 20000000775 sys sys 959090509 0
-sys/src/cmd/unix/drawterm/cpu-bl.c - 644 sys sys 1135900534 14118
+sys/src/cmd/unix/drawterm/cpu-bl.c - 664 sys sys 1135900534 14118
 sys/src/cmd/unix/drawterm/cpu.c - 664 sys sys 1135900534 13988
 sys/src/cmd/unix/drawterm/drawterm.h - 664 sys sys 1135900535 472
 sys/src/cmd/unix/drawterm/drawterm.ico - 664 sys sys 1135900535 1662

+ 9 - 9
dist/replica/plan9.db

@@ -317,7 +317,7 @@
 386/bin/kprof - 775 sys sys 1135570830 105465
 386/bin/ktrace - 775 sys sys 1135570830 123137
 386/bin/lens - 775 sys sys 1135570830 150725
-386/bin/lex - 775 sys sys 1135570831 98935
+386/bin/lex - 775 sys sys 1135973488 98980
 386/bin/lnfs - 775 sys sys 1135570831 99434
 386/bin/look - 775 sys sys 1135570831 65531
 386/bin/ls - 775 sys sys 1135570831 82459
@@ -670,11 +670,11 @@ acme/bin/source/acd/toc.c - 664 sys sys 1015011255 753
 acme/bin/source/acd/util.c - 664 sys sys 1032232411 1145
 acme/bin/source/acd/win.c - 664 sys sys 1032232411 5104
 acme/bin/source/adict - 20000000775 sys sys 1015011255 0
-acme/bin/source/adict/adict.c - 664 sys sys 1015011255 10913
+acme/bin/source/adict/adict.c - 664 sys sys 1135960478 10915
 acme/bin/source/adict/adict.h - 664 sys sys 1015011255 102
 acme/bin/source/adict/man - 664 sys sys 1015011255 1044
 acme/bin/source/adict/mkfile - 664 sys sys 1015011255 117
-acme/bin/source/adict/win.c - 664 sys sys 1015011255 4885
+acme/bin/source/adict/win.c - 664 sys sys 1135960478 4800
 acme/bin/source/adict/win.h - 664 sys sys 1015011255 934
 acme/bin/source/mkfile - 664 sys sys 1017679345 263
 acme/bin/source/mkwnew.c - 664 sys sys 1017680666 862
@@ -8048,7 +8048,7 @@ sys/src/9/port/alloc.c - 664 sys sys 1130964595 5674
 sys/src/9/port/allocb.c - 664 sys sys 1123676437 3340
 sys/src/9/port/auth.c - 664 sys sys 1123647282 2392
 sys/src/9/port/cache.c - 664 sys sys 1126586168 9241
-sys/src/9/port/chan.c - 664 sys sys 1131298713 33663
+sys/src/9/port/chan.c - 664 sys sys 1135974610 33663
 sys/src/9/port/cis.c - 664 sys sys 1099761153 9248
 sys/src/9/port/debugalloc.c - 664 sys sys 1014931171 10402
 sys/src/9/port/dev.c - 664 sys sys 1131289870 8219
@@ -12227,12 +12227,12 @@ sys/src/cmd/lens.c - 664 sys sys 1130425803 5109
 sys/src/cmd/lex - 20000000775 sys sys 944961017 0
 sys/src/cmd/lex/header.c - 664 sys sys 1032060383 3368
 sys/src/cmd/lex/ldefs.h - 664 sys sys 1135487942 4101
-sys/src/cmd/lex/lmain.c - 664 sys sys 1135487944 6059
+sys/src/cmd/lex/lmain.c - 664 sys sys 1135921540 6076
 sys/src/cmd/lex/mkfile - 664 sys sys 1032060382 328
 sys/src/cmd/lex/ncform - 664 sys sys 944961017 4060
 sys/src/cmd/lex/parser.y - 664 sys sys 1135487944 14215
-sys/src/cmd/lex/sub1.c - 664 sys sys 1135487942 10099
-sys/src/cmd/lex/sub2.c - 664 sys sys 1135487944 17109
+sys/src/cmd/lex/sub1.c - 664 sys sys 1135921541 10121
+sys/src/cmd/lex/sub2.c - 664 sys sys 1135921541 17089
 sys/src/cmd/lnfs.c - 664 sys sys 1094156765 13332
 sys/src/cmd/look.c - 664 sys sys 944961619 5994
 sys/src/cmd/lp - 20000000775 sys sys 953344617 0
@@ -13091,7 +13091,7 @@ sys/src/cmd/tcs/font/qbits.c - 664 sys sys 944961251 2037
 sys/src/cmd/tcs/gb.c - 664 sys sys 944961288 62707
 sys/src/cmd/tcs/gb.h - 664 sys sys 944961287 183
 sys/src/cmd/tcs/hdr.h - 664 sys sys 944961287 1213
-sys/src/cmd/tcs/html.c - 664 sys sys 1135893400 5237
+sys/src/cmd/tcs/html.c - 664 sys sys 1135958471 5247
 sys/src/cmd/tcs/jis.h - 664 sys sys 944961287 2873
 sys/src/cmd/tcs/ksc.c - 664 sys sys 944961289 72413
 sys/src/cmd/tcs/ksc.h - 664 sys sys 944961287 112
@@ -13177,7 +13177,7 @@ sys/src/cmd/unix/drawterm/Makefile - 664 sys sys 1135900534 1112
 sys/src/cmd/unix/drawterm/README - 664 sys sys 1135900534 925
 sys/src/cmd/unix/drawterm/args.h - 664 sys sys 1135900534 709
 sys/src/cmd/unix/drawterm/bin - 20000000775 sys sys 959090509 0
-sys/src/cmd/unix/drawterm/cpu-bl.c - 644 sys sys 1135900534 14118
+sys/src/cmd/unix/drawterm/cpu-bl.c - 664 sys sys 1135900534 14118
 sys/src/cmd/unix/drawterm/cpu.c - 664 sys sys 1135900534 13988
 sys/src/cmd/unix/drawterm/drawterm.h - 664 sys sys 1135900535 472
 sys/src/cmd/unix/drawterm/drawterm.ico - 664 sys sys 1135900535 1662

+ 9 - 0
dist/replica/plan9.log

@@ -24679,3 +24679,12 @@
 1135902654 0 c sys/man/8/drawterm - 664 sys sys 1135901219 1741
 1135915258 0 a 386/bin/aquarela - 775 sys sys 1135914849 331831
 1135915258 1 a 386/bin/cifscmd - 775 sys sys 1135914850 342709
+1135922460 0 c sys/src/cmd/lex/lmain.c - 664 sys sys 1135921540 6076
+1135922460 1 c sys/src/cmd/lex/sub1.c - 664 sys sys 1135921541 10121
+1135922460 2 c sys/src/cmd/lex/sub2.c - 664 sys sys 1135921541 17089
+1135958414 0 c sys/src/cmd/tcs/html.c - 664 sys sys 1135958471 5247
+1135958414 1 m sys/src/cmd/unix/drawterm/cpu-bl.c - 664 sys sys 1135900534 14118
+1135962010 0 c acme/bin/source/adict/adict.c - 664 sys sys 1135960478 10915
+1135962010 1 c acme/bin/source/adict/win.c - 664 sys sys 1135960478 4800
+1135974618 0 c 386/bin/lex - 775 sys sys 1135973488 98980
+1135974618 1 c sys/src/9/port/chan.c - 664 sys sys 1135974610 33663

+ 1 - 1
sys/src/9/port/chan.c

@@ -412,7 +412,7 @@ addelem(Path *p, char *s, Chan *from)
 	if(isdotdot(s)){
 		fixdotdotname(p);
 		DBG("addelem %s .. => rm %p\n", p->s, p->mtpt[p->mlen-1]);
-		if(p->mlen>0 && (c = p->mtpt[--p->mlen])){
+		if(p->mlen>1 && (c = p->mtpt[--p->mlen])){
 			p->mtpt[p->mlen] = nil;
 			cclose(c);
 		}

+ 2 - 1
sys/src/cmd/lex/lmain.c

@@ -137,7 +137,7 @@ main(int argc, char **argv)
 	gch();
 		/* may be gotten: def, subs, sname, stchar, ccl, dchar */
 	get1core();
-		/* may be gotten: name, left, right, nullstr, parent */
+		/* may be gotten: name, left, right, nullstr, parent, ptr */
 	strcpy((char*)sp, "INITIAL");
 	sname[0] = sp;
 	sp += strlen("INITIAL") + 1;
@@ -246,6 +246,7 @@ free2core(void)
 	free(right);
 	free(parent);
 	free(nullstr);
+	free(ptr);
 	free(state);
 	free(sname);
 	free(stchar);

+ 6 - 4
sys/src/cmd/lex/sub1.c

@@ -345,7 +345,7 @@ mnp(int a, void *p)
 		if(strlen(p) == 0) nullstr[tptr] = TRUE;
 		break;
 	default:
-		warning("bad switch mnp %d %P", a, p);
+		error("bad switch mnp %d %P", a, p);
 		break;
 	}
 	if(tptr > treesize)
@@ -440,7 +440,9 @@ dupl(int n)
 	switch(i){
 	case RNULLS:
 		return(mn0(i));
-	case RCCL: case RNCCL: case FINAL: case S1FINAL: case S2FINAL:
+	case RCCL: case RNCCL:
+		return(mnp(i,ptr[n]));
+	case FINAL: case S1FINAL: case S2FINAL:
 		return(mn1(i,left[n]));
 	case STAR: case QUEST: case PLUS: case CARAT:
 		return(mn1(i,dupl(left[n])));
@@ -550,11 +552,11 @@ treedump(void)
 				break;
 			case RCCL:
 				print("ccl ");
-				allprint(left[t]);
+				allprint(ptr[t]);
 				break;
 			case RNCCL:
 				print("nccl ");
-				allprint(left[t]);
+				allprint(ptr[t]);
 				break;
 			case DIV:
 				print("/ %d %d",left[t],right[t]);

+ 2 - 2
sys/src/cmd/lex/sub2.c

@@ -238,7 +238,7 @@ cgoto(void)
 			else switch(name[curpos]){
 			case RCCL:
 				tryit = TRUE;
-				q = (uchar *)left[curpos];
+				q = ptr[curpos];
 				while(*q){
 					for(j=1;j<NCH;j++)
 						if(cindex[j] == *q)
@@ -323,7 +323,7 @@ nextstate(int s, int c)
 		j = name[curpos];
 		if(j < NCH && j == c
 		|| j == RSTR && c == right[curpos]
-		|| j == RCCL && member(c, (uchar *)left[curpos])){
+		|| j == RCCL && member(c, ptr[curpos])){
 			f = foll[curpos];
 			number = *f;
 			newpos = f+1;

+ 1 - 0
sys/src/cmd/tcs/html.c

@@ -314,6 +314,7 @@ html_out(Rune *r, int n, long *x)
 	Biobuf b;
 	Rune *er;
 	
+	USED(x);
 	html_init();
 	Binit(&b, 1, OWRITE);
 	er = r+n;