diff --git a/src/cmd/9p.c b/src/cmd/9p.c
index 16fa202..e6646b7 100644
--- a/src/cmd/9p.c
+++ b/src/cmd/9p.c
@@ -239,7 +239,7 @@
 		usage();
 
 	fid = xwalk(argv[0]);
-	if((d = fsdirfstat(fid)) < 0)
+	if((d = fsdirfstat(fid)) == 0)
 		sysfatal("dirfstat: %r");
 	fmtinstall('D', dirfmt);
 	fmtinstall('M', dirmodefmt);
diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c
index 50c0cfc..f84ead2 100644
--- a/src/cmd/9term/9term.c
+++ b/src/cmd/9term/9term.c
@@ -214,7 +214,7 @@
 	if(maxtab <= 0)
 		maxtab = 8;
 
-	initdraw(nil, nil, "9term");
+	initdraw(0, nil, "9term");
 	notify(hangupnote);
 
 	mc = initmouse(nil, screen);
@@ -299,13 +299,27 @@
 {
 	Rune r;
 	int i;
-	Alt a[] = {
-		{mc->c, &mc->m, CHANRCV},
-		{kc->c, &r, CHANRCV},
-		{hostc, &i, CHANRCV},
-		{mc->resizec, nil, CHANRCV},
-		{nil, nil, CHANEND},
-	};
+	Alt a[5];
+
+	a[0].c = mc->c;
+	a[0].v = &mc->m;
+	a[0].op = CHANRCV;
+
+	a[1].c = kc->c;
+	a[1].v = &r;
+	a[1].op = CHANRCV;
+
+	a[2].c = hostc;
+	a[2].v = &i;
+	a[2].op = CHANRCV;
+
+	a[3].c = mc->resizec;
+	a[3].v = nil;
+	a[3].op = CHANRCV;
+
+	a[4].c = nil;
+	a[4].v = nil;
+	a[4].op = CHANEND;
 
 	for(;;) {
 		tcheck();
@@ -326,7 +340,7 @@
 			key(r);
 			break;
 		case 2:
-			conswrite(rcbuf[i].data, rcbuf[i].n);
+			conswrite((char*)rcbuf[i].data, rcbuf[i].n);
 			break;
 		case 3:
 			doreshape();
diff --git a/src/cmd/9term/SunOS.c b/src/cmd/9term/SunOS.c
index d7db9fc..d9104ed 100644
--- a/src/cmd/9term/SunOS.c
+++ b/src/cmd/9term/SunOS.c
@@ -1,6 +1,8 @@
-#include "9term.h"
+#include <u.h>
 #include <termios.h>
 #include <sys/termios.h>
+#include <libc.h>
+#include "term.h"
 
 int
 getpts(int fd[], char *slave)
@@ -14,6 +16,19 @@
 	return 0;
 }
 
+int
+childpty(int fd[], char *slave)
+{
+	int sfd;
+
+	close(fd[1]);
+	setsid();
+	sfd = open(slave, ORDWR);
+	if(sfd < 0)
+		sysfatal("open %s: %r\n", slave);
+	return sfd;
+}
+
 struct winsize ows;
 
 void
@@ -26,7 +41,7 @@
 	ws.ws_xpixel = dx;
 	ws.ws_ypixel = dy;
 	if(ws.ws_row != ows.ws_row || ws.ws_col != ows.ws_col)
-	if(ioctl(rcfd[0], TIOCSWINSZ, &ws) < 0)
+	if(ioctl(rcfd, TIOCSWINSZ, &ws) < 0)
 		fprint(2, "ioctl: %r\n");
 	ows = ws;
 }
diff --git a/src/cmd/9term/rcstart.c b/src/cmd/9term/rcstart.c
index df18782..a6a72fe 100644
--- a/src/cmd/9term/rcstart.c
+++ b/src/cmd/9term/rcstart.c
@@ -35,7 +35,12 @@
 		dup(sfd, 0);
 		dup(sfd, 1);
 		dup(sfd, 2);
-		system("stty tabs -onlcr -echo erase ^h intr ^?");
+//		system("stty tabs -onlcr -echo erase '^h' intr '^?'");
+		system("echo tabs; stty tabs");
+		system("echo onlcr; stty -onlcr");
+		system("echo echo; stty -echo");
+		system("echo erase; stty erase '^h'");
+		system("echo intr; stty intr '^?'");
 		execvp(argv[0], argv);
 		fprint(2, "exec %s failed: %r\n", argv[0]);
 		_exits("oops");
diff --git a/src/cmd/9term/win.c b/src/cmd/9term/win.c
index 95d84a3..d1fc5e1 100644
--- a/src/cmd/9term/win.c
+++ b/src/cmd/9term/win.c
@@ -133,10 +133,10 @@
 		name = "gnot";
 
 	threadnotify(nopipes, 1);
-	if((fs = nsmount("acme", "")) < 0)
+	if((fs = nsmount("acme", "")) == 0)
 		sysfatal("nsmount acme: %r");
 	ctlfd = fsopen(fs, "new/ctl", ORDWR|OCEXEC);
-	if(ctlfd < 0 || fsread(ctlfd, buf, 12) != 12)
+	if(ctlfd == 0 || fsread(ctlfd, buf, 12) != 12)
 		sysfatal("ctl: %r");
 	id = atoi(buf);
 	sprint(buf, "%d/tag", id);
diff --git a/src/cmd/acme/addr.c b/src/cmd/acme/addr.c
index d64db61..2a34474 100644
--- a/src/cmd/acme/addr.c
+++ b/src/cmd/acme/addr.c
@@ -64,7 +64,7 @@
 		if(line<0 || line>t->file->b.nc)
 			goto Rescue;
 		*evalp = TRUE;
-		return (Range){line, line};
+		return range(line, line);
 	}
 	q0 = r.q0;
 	q1 = r.q1;
@@ -104,7 +104,7 @@
 			--q0;
 	}
 	*evalp = TRUE;
-	return (Range){q0, q1};
+	return range(q0, q1);
 
     Rescue:
 	if(md != nil)
@@ -197,7 +197,7 @@
 				if(c == '.')
 					r = ar;
 				else
-					r = (Range){t->file->b.nc, t->file->b.nc};
+					r = range(t->file->b.nc, t->file->b.nc);
 			if(q < q1)
 				dir = Fore;
 			else
diff --git a/src/cmd/acme/exec.c b/src/cmd/acme/exec.c
index 0e3389d..3c1aad2 100644
--- a/src/cmd/acme/exec.c
+++ b/src/cmd/acme/exec.c
@@ -106,7 +106,7 @@
 	{ LTab,		tab,		FALSE,	XXX,		XXX		},
 	{ LUndo,		undo,	FALSE,	TRUE,	XXX		},
 	{ LZerox,	zeroxx,	FALSE,	XXX,		XXX		},
-	{ nil, 			nil,		0,		0,		0		},
+	{ nil, 			0,		0,		0,		0		},
 };
 
 Exectab*
diff --git a/src/cmd/acme/fns.h b/src/cmd/acme/fns.h
index c164bb3..3cabc66 100644
--- a/src/cmd/acme/fns.h
+++ b/src/cmd/acme/fns.h
@@ -91,6 +91,7 @@
 void		startplumbing(void);
 
 Runestr	runestr(Rune*, uint);
+Range range(int, int);
 
 #define	runemalloc(a)		(Rune*)emalloc((a)*sizeof(Rune))
 #define	runerealloc(a, b)	(Rune*)erealloc((a), (b)*sizeof(Rune))
diff --git a/src/cmd/acme/fsys.c b/src/cmd/acme/fsys.c
index af4255c..fb4ae5c 100644
--- a/src/cmd/acme/fsys.c
+++ b/src/cmd/acme/fsys.c
@@ -310,7 +310,7 @@
 fsysflush(Xfid *x, Fid *f)
 {
 	USED(f);
-	sendp(x->c, xfidflush);
+	sendp(x->c, (void*)xfidflush);
 	return nil;
 }
 
@@ -526,7 +526,7 @@
 	if(((f->dir->perm&~(DMDIR|DMAPPEND))&m) != m)
 		goto Deny;
 
-	sendp(x->c, xfidopen);
+	sendp(x->c, (void*)xfidopen);
 	return nil;
 
     Deny:
@@ -624,7 +624,7 @@
 		free(b);
 		return x;
 	}
-	sendp(x->c, xfidread);
+	sendp(x->c, (void*)xfidread);
 	return nil;
 }
 
@@ -633,7 +633,7 @@
 fsyswrite(Xfid *x, Fid *f)
 {
 	USED(f);
-	sendp(x->c, xfidwrite);
+	sendp(x->c, (void*)xfidwrite);
 	return nil;
 }
 
@@ -642,7 +642,7 @@
 fsysclunk(Xfid *x, Fid *f)
 {
 	fsysdelid(f->mntdir);
-	sendp(x->c, xfidclose);
+	sendp(x->c, (void*)xfidclose);
 	return nil;
 }
 
diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
index 7023382..f892640 100644
--- a/src/cmd/acme/look.c
+++ b/src/cmd/acme/look.c
@@ -591,7 +591,7 @@
 	e->u.at = t;
 	e->a0 = amin+1;
 	eval = FALSE;
-	address(nil, nil, (Range){-1,-1}, (Range){0, 0}, t, e->a0, amax, tgetc, &eval, (uint*)&e->a1);
+	address(nil, nil, range(-1,-1), range(0,0), t, e->a0, amax, tgetc, &eval, (uint*)&e->a1);
 	return TRUE;
 
    Isntfile:
@@ -723,7 +723,7 @@
 		eval = FALSE;
 	else{
 		eval = TRUE;
-		r = address(nil, t, (Range){-1, -1}, (Range){t->q0, t->q1}, e->u.at, e->a0, e->a1, e->agetc, &eval, &dummy);
+		r = address(nil, t, range(-1,-1), range(t->q0, t->q1), e->u.at, e->a0, e->a1, e->agetc, &eval, &dummy);
 		if(eval == FALSE)
 			e->jump = FALSE;	/* don't jump if invalid address */
 	}
diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c
index c0cd7ec..6c1243c 100644
--- a/src/cmd/acme/text.c
+++ b/src/cmd/acme/text.c
@@ -894,7 +894,7 @@
 		/* horrible botch: while asleep, may have lost selection altogether */
 		if(selectq > t->file->b.nc)
 			selectq = t->org + t->fr.p0;
-		t->fr.scroll = nil;
+		t->fr.scroll = 0;
 		if(selectq < t->org)
 			q0 = selectq;
 		else
diff --git a/src/cmd/acme/util.c b/src/cmd/acme/util.c
index a7307e0..f72a5bf 100644
--- a/src/cmd/acme/util.c
+++ b/src/cmd/acme/util.c
@@ -14,6 +14,16 @@
 static	Point		prevmouse;
 static	Window	*mousew;
 
+Range
+range(int q0, int q1)
+{
+	Range r;
+
+	r.q0 = q0;
+	r.q1 = q1;
+	return r;
+}
+
 Runestr
 runestr(Rune *r, uint n)
 {
diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c
index 839308e..5fc4c5a 100644
--- a/src/cmd/acme/xfid.c
+++ b/src/cmd/acme/xfid.c
@@ -47,7 +47,7 @@
 	threadsetname("xfidctlthread");
 	x = arg;
 	for(;;){
-		f = recvp(x->c);
+		f = (void(*)(Xfid*))recvp(x->c);
 		(*f)(x);
 		flushimage(display, 1);
 		sendp(cxfidfree, x);
@@ -104,8 +104,8 @@
 		switch(q){
 		case QWaddr:
 			if(w->nopen[q]++ == 0){
-				w->addr = (Range){0,0};
-				w->limit = (Range){-1,-1};
+				w->addr = range(0,0);
+				w->limit = range(-1,-1);
 			}
 			break;
 		case QWdata:
@@ -164,7 +164,7 @@
 			seq++;
 			filemark(t->file);
 			cut(t, t, nil, FALSE, TRUE, nil, 0);
-			w->wrselrange = (Range){t->q1, t->q1};
+			w->wrselrange = range(t->q1, t->q1);
 			w->nomark = TRUE;
 			break;
 		case QWeditout:
@@ -173,7 +173,7 @@
 				respond(x, &fc, Eperm);
 				return;
 			}
-			w->wrselrange = (Range){t->q1, t->q1};
+			w->wrselrange = range(t->q1, t->q1);
 			break;
 		}
 		winunlock(w);
diff --git a/src/cmd/dict/ahd.c b/src/cmd/dict/ahd.c
index 18a56d0..7f18ad9 100644
--- a/src/cmd/dict/ahd.c
+++ b/src/cmd/dict/ahd.c
@@ -7,15 +7,19 @@
  * American Heritage Dictionary (encrypted)
  */
 
-static Rune intab[256] = {
-	[0x82] 0xe9,
-	[0x85] 0xe0,
-	[0x89] 0xeb,
-	[0x8a] 0xe8,
-	[0xa4] 0xf1,
-	[0xf8] 0xb0,
-	[0xf9] 0xb7,
-};
+static Rune intab[256];
+
+static void
+initintab(void)
+{
+	intab[0x82] =  0xe9;
+	intab[0x85] =  0xe0;
+	intab[0x89] =  0xeb;
+	intab[0x8a] =  0xe8;
+	intab[0xa4] =  0xf1;
+	intab[0xf8] =  0xb0;
+	intab[0xf9] =  0xb7;
+}
 
 static char	tag[64];
 
@@ -33,6 +37,7 @@
 	int c, state = Run;
 
 	if(!inited){
+		initintab();
 		for(c=0; c<256; c++)
 			if(intab[c] == 0)
 				intab[c] = c;
diff --git a/src/cmd/dict/movie.c b/src/cmd/dict/movie.c
index b191e14..7e42b93 100644
--- a/src/cmd/dict/movie.c
+++ b/src/cmd/dict/movie.c
@@ -67,7 +67,7 @@
 	tagtab[TI]=	"TI";
 	tagtab[TX]=	"TX";
 	tagtab[VD]=	"VD";
-};
+}
 
 static char	*mget(int, char *, char *, char **);
 #if 0
diff --git a/src/cmd/dict/oed.c b/src/cmd/dict/oed.c
index 868eb48..1e1c0c5 100644
--- a/src/cmd/dict/oed.c
+++ b/src/cmd/dict/oed.c
@@ -992,7 +992,7 @@
 static char	auxname[Maxaux][Buflen];
 static char	auxval[Maxaux][Buflen];
 static char	spec[Buflen];
-static uchar	*auxstate[Naux];	/* vals for most recent tag */
+static char	*auxstate[Naux];	/* vals for most recent tag */
 static Entry	curentry;
 #define cursize (curentry.end-curentry.start)
 
@@ -1154,7 +1154,7 @@
 							outchars(auxstate[Num]);
 							outchars(") ");
 						} else if(t == Sgk) {
-							i = grtab[auxstate[Num][0]];
+							i = grtab[(uchar)auxstate[Num][0]];
 							if(i != NONE)
 								outrune(i);
 							outchars(".  ");
diff --git a/src/cmd/grep/grep.y b/src/cmd/grep/grep.y
index 60d8382..fdde683 100644
--- a/src/cmd/grep/grep.y
+++ b/src/cmd/grep/grep.y
@@ -124,7 +124,7 @@
 	exits("syntax");
 }
 
-long
+int
 yylex(void)
 {
 	char *q, *eq;
diff --git a/src/cmd/plumb/fsys.c b/src/cmd/plumb/fsys.c
index 33a4458..0f5bcc8 100644
--- a/src/cmd/plumb/fsys.c
+++ b/src/cmd/plumb/fsys.c
@@ -122,22 +122,25 @@
 static Fcall* fsysstat(Fcall*, uchar*, Fid*);
 static Fcall* fsyswstat(Fcall*, uchar*, Fid*);
 
-Fcall* 	(*fcall[Tmax])(Fcall*, uchar*, Fid*) =
+Fcall* 	(*fcall[Tmax])(Fcall*, uchar*, Fid*);
+
+static void
+initfcall(void)
 {
-	[Tflush]	= fsysflush,
-	[Tversion]	= fsysversion,
-	[Tauth]	= fsysauth,
-	[Tattach]	= fsysattach,
-	[Twalk]	= fsyswalk,
-	[Topen]	= fsysopen,
-	[Tcreate]	= fsyscreate,
-	[Tread]	= fsysread,
-	[Twrite]	= fsyswrite,
-	[Tclunk]	= fsysclunk,
-	[Tremove]= fsysremove,
-	[Tstat]	= fsysstat,
-	[Twstat]	= fsyswstat,
-};
+	fcall[Tflush]	= fsysflush;
+	fcall[Tversion]	= fsysversion;
+	fcall[Tauth]	= fsysauth;
+	fcall[Tattach]	= fsysattach;
+	fcall[Twalk]	= fsyswalk;
+	fcall[Topen]	= fsysopen;
+	fcall[Tcreate]	= fsyscreate;
+	fcall[Tread]	= fsysread;
+	fcall[Twrite]	= fsyswrite;
+	fcall[Tclunk]	= fsysclunk;
+	fcall[Tremove]= fsysremove;
+	fcall[Tstat]	= fsysstat;
+	fcall[Twstat]	= fsyswstat;
+}
 
 char	Ebadfcall[] =	"bad fcall type";
 char	Eperm[] = 	"permission denied";
@@ -208,6 +211,7 @@
 	uchar *buf;
 
 	USED(v);
+	initfcall();
 	t = nil;
 	for(;;){
 		buf = malloc(messagesize);	/* avoid memset of emalloc */
diff --git a/src/cmd/ramfs.c b/src/cmd/ramfs.c
index 2c1658b..e155607 100644
--- a/src/cmd/ramfs.c
+++ b/src/cmd/ramfs.c
@@ -89,21 +89,25 @@
 	*rread(Fid*), *rwrite(Fid*), *rclunk(Fid*),
 	*rremove(Fid*), *rstat(Fid*), *rwstat(Fid*);
 
-char 	*(*fcalls[])(Fid*) = {
-	[Tversion]	rversion,
-	[Tflush]	rflush,
-	[Tauth]	rauth,
-	[Tattach]	rattach,
-	[Twalk]		rwalk,
-	[Topen]		ropen,
-	[Tcreate]	rcreate,
-	[Tread]		rread,
-	[Twrite]	rwrite,
-	[Tclunk]	rclunk,
-	[Tremove]	rremove,
-	[Tstat]		rstat,
-	[Twstat]	rwstat,
-};
+char 	*(*fcalls[Tmax])(Fid*);
+
+static void
+initfcalls(void)
+{
+	fcalls[Tversion]=	rversion;
+	fcalls[Tflush]=	rflush;
+	fcalls[Tauth]=	rauth;
+	fcalls[Tattach]=	rattach;
+	fcalls[Twalk]=		rwalk;
+	fcalls[Topen]=		ropen;
+	fcalls[Tcreate]=	rcreate;
+	fcalls[Tread]=		rread;
+	fcalls[Twrite]=	rwrite;
+	fcalls[Tclunk]=	rclunk;
+	fcalls[Tremove]=	rremove;
+	fcalls[Tstat]=		rstat;
+	fcalls[Twstat]=	rwstat;
+}
 
 char	Eperm[] =	"permission denied";
 char	Enotdir[] =	"not a directory";
@@ -141,6 +145,7 @@
 	int stdio = 0;
 	char *service;
 
+	initfcalls();
 	service = "ramfs";
 	defmnt = "/tmp";
 	ARGBEGIN{
diff --git a/src/cmd/rc/plan9ish.c b/src/cmd/rc/plan9ish.c
index 6b32a22..30fa896 100644
--- a/src/cmd/rc/plan9ish.c
+++ b/src/cmd/rc/plan9ish.c
@@ -216,10 +216,9 @@
 }
 */
 int
-cmpenv(a, b)
-char **a, **b;
+cmpenv(const void *a, const void *b)
 {
-	return strcmp(*a, *b);
+	return strcmp(*(char**)a, *(char**)b);
 }
 char **mkenv(){
 	register char **env, **ep, *p, *q;
@@ -462,7 +461,7 @@
 	interrupted=0;
 }
 int
-Isatty(fd){
+Isatty(int fd){
 	return isatty(fd);
 }
 void Abort(void){
diff --git a/src/cmd/sam/unix.c b/src/cmd/sam/unix.c
index b8a67b9..162ba74 100644
--- a/src/cmd/sam/unix.c
+++ b/src/cmd/sam/unix.c
@@ -1,3 +1,4 @@
+#include <u.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
diff --git a/src/cmd/samterm/plan9.c b/src/cmd/samterm/plan9.c
index f8614d3..feb8957 100644
--- a/src/cmd/samterm/plan9.c
+++ b/src/cmd/samterm/plan9.c
@@ -1,3 +1,4 @@
+#include <u.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <errno.h>
