SunOS can rot in hell.
diff --git a/src/libdraw/devdraw.c b/src/libdraw/devdraw.c
index f474986..49a641b 100644
--- a/src/libdraw/devdraw.c
+++ b/src/libdraw/devdraw.c
@@ -834,7 +834,7 @@
 					err = "image parameters incompatibile with screen";
 					goto error;
 				}
-				reffn = nil;
+				reffn = 0;
 				switch(refresh){
 				case Refbackup:
 					break;
@@ -985,9 +985,9 @@
 			oy = BGLONG(a+41);
 			op = drawclientop(client);
 			/* high bit indicates arc angles are present */
-			if(ox & (1<<31)){
-				if((ox & (1<<30)) == 0)
-					ox &= ~(1<<31);
+			if(ox & ((ulong)1<<31)){
+				if((ox & ((ulong)1<<30)) == 0)
+					ox &= ~((ulong)1<<31);
 				memarc(dst, p, e0, e1, c, src, sp, ox, oy, op);
 			}else
 				memellipse(dst, p, e0, e1, c, src, sp, op);
diff --git a/src/libdraw/ellipse.c b/src/libdraw/ellipse.c
index 7a063f1..33f67c6 100644
--- a/src/libdraw/ellipse.c
+++ b/src/libdraw/ellipse.c
@@ -56,27 +56,27 @@
 void
 arc(Image *dst, Point c, int a, int b, int thick, Image *src, Point sp, int alpha, int phi)
 {
-	alpha |= 1<<31;
+	alpha |= ((ulong)1)<<31;
 	doellipse('e', dst, &c, a, b, thick, src, &sp, alpha, phi, SoverD);
 }
 
 void
 arcop(Image *dst, Point c, int a, int b, int thick, Image *src, Point sp, int alpha, int phi, Drawop op)
 {
-	alpha |= 1<<31;
+	alpha |= (ulong)1<<31;
 	doellipse('e', dst, &c, a, b, thick, src, &sp, alpha, phi, op);
 }
 
 void
 fillarc(Image *dst, Point c, int a, int b, Image *src, Point sp, int alpha, int phi)
 {
-	alpha |= 1<<31;
+	alpha |= (ulong)1<<31;
 	doellipse('E', dst, &c, a, b, 0, src, &sp, alpha, phi, SoverD);
 }
 
 void
 fillarcop(Image *dst, Point c, int a, int b, Image *src, Point sp, int alpha, int phi, Drawop op)
 {
-	alpha |= 1<<31;
+	alpha |= (ulong)1<<31;
 	doellipse('E', dst, &c, a, b, 0, src, &sp, alpha, phi, op);
 }
diff --git a/src/libdraw/md-draw.c b/src/libdraw/md-draw.c
index d0f2d4f..c8ad2a6 100644
--- a/src/libdraw/md-draw.c
+++ b/src/libdraw/md-draw.c
@@ -1906,7 +1906,7 @@
 	default:
 		assert(0 /* boolcopyfn */);
 	}
-	return nil;
+	return 0;
 }
 
 /*
diff --git a/src/libdraw/ml-lsetrefresh.c b/src/libdraw/ml-lsetrefresh.c
index 44079be..17d04cb 100644
--- a/src/libdraw/ml-lsetrefresh.c
+++ b/src/libdraw/ml-lsetrefresh.c
@@ -29,7 +29,7 @@
 		return 0;
 	/* easiest way is just to update the entire save area */
 	l->refreshfn(i, i->r, l->refreshptr);
-	l->refreshfn = nil;
+	l->refreshfn = 0;
 	l->refreshptr = nil;
 	return 1;
 }
diff --git a/src/libdraw/unix.c b/src/libdraw/unix.c
index 491bc66..76bc75d 100644
--- a/src/libdraw/unix.c
+++ b/src/libdraw/unix.c
@@ -1,6 +1,5 @@
-#include <sys/stat.h>
-
 #include <u.h>
+#include <sys/stat.h>
 #include <libc.h>
 #include <draw.h>
 
diff --git a/src/libdraw/x11-alloc.c b/src/libdraw/x11-alloc.c
index 9a6585c..fa7dddd 100644
--- a/src/libdraw/x11-alloc.c
+++ b/src/libdraw/x11-alloc.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
diff --git a/src/libdraw/x11-cload.c b/src/libdraw/x11-cload.c
index 7a84a98..33e3170 100644
--- a/src/libdraw/x11-cload.c
+++ b/src/libdraw/x11-cload.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
diff --git a/src/libdraw/x11-draw.c b/src/libdraw/x11-draw.c
index 6373e4e..0a28813 100644
--- a/src/libdraw/x11-draw.c
+++ b/src/libdraw/x11-draw.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
diff --git a/src/libdraw/x11-event.c b/src/libdraw/x11-event.c
index ba9d031..0548b62 100644
--- a/src/libdraw/x11-event.c
+++ b/src/libdraw/x11-event.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <cursor.h>
diff --git a/src/libdraw/x11-fill.c b/src/libdraw/x11-fill.c
index 33fc6a2..fc43a68 100644
--- a/src/libdraw/x11-fill.c
+++ b/src/libdraw/x11-fill.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
diff --git a/src/libdraw/x11-get.c b/src/libdraw/x11-get.c
index 693b293..395f455 100644
--- a/src/libdraw/x11-get.c
+++ b/src/libdraw/x11-get.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
diff --git a/src/libdraw/x11-init.c b/src/libdraw/x11-init.c
index c959eee..c6fc881 100644
--- a/src/libdraw/x11-init.c
+++ b/src/libdraw/x11-init.c
@@ -1,8 +1,8 @@
 /*
  * Some of the stuff in this file is not X-dependent and should be elsewhere.
  */
-#include "x11-inc.h"
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
@@ -69,7 +69,8 @@
 static Image*
 getimage0(Display *d)
 {
-	char *a, info[12*12+1];
+	char info[12*12+1];
+	uchar *a;
 	int n;
 	Image *image;
 
@@ -323,7 +324,7 @@
 	name.value = (uchar*)label;
 	name.encoding = XA_STRING;
 	name.format = 8;
-	name.nitems = strlen(name.value);
+	name.nitems = strlen((char*)name.value);
 
 	memset(&normalhint, 0, sizeof normalhint);
 	normalhint.flags = USSize|PMaxSize;
@@ -435,7 +436,7 @@
 	name.value = (uchar*)label;
 	name.encoding = XA_STRING;
 	name.format = 8;
-	name.nitems = strlen(name.value);
+	name.nitems = strlen((char*)name.value);
 
 	memset(&classhint, 0, sizeof classhint);
 	classhint.res_name = label;
diff --git a/src/libdraw/x11-itrans.c b/src/libdraw/x11-itrans.c
index 509b55c..3a74588 100644
--- a/src/libdraw/x11-itrans.c
+++ b/src/libdraw/x11-itrans.c
@@ -1,8 +1,7 @@
 /* input event and data structure translation */
 
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
@@ -318,8 +317,8 @@
 
 	fg = _x.map[0];
 	bg = _x.map[255];
-	xsrc = XCreateBitmapFromData(_x.display, _x.drawable, src, 16, 16);
-	xmask = XCreateBitmapFromData(_x.display, _x.drawable, mask, 16, 16);
+	xsrc = XCreateBitmapFromData(_x.display, _x.drawable, (char*)src, 16, 16);
+	xmask = XCreateBitmapFromData(_x.display, _x.drawable, (char*)mask, 16, 16);
 	xc = XCreatePixmapCursor(_x.display, xsrc, xmask, &fg, &bg, -c->offset.x, -c->offset.y);
 	if(xc != 0) {
 		XDefineCursor(_x.display, _x.drawable, xc);
@@ -412,14 +411,14 @@
 		data = nil;
 	}else{
 		if(xdata){
-			data = strdup((char*)xdata);
+			data = (uchar*)strdup((char*)xdata);
 			XFree(xdata);
 		}else
 			data = nil;
 	}
 out:
 	qunlock(&clip.lk);
-	return data;
+	return (char*)data;
 }
 
 void
diff --git a/src/libdraw/x11-keyboard.c b/src/libdraw/x11-keyboard.c
index 83bbbfe..071d16c 100644
--- a/src/libdraw/x11-keyboard.c
+++ b/src/libdraw/x11-keyboard.c
@@ -1,5 +1,5 @@
-#include "x11-inc.h"
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <thread.h>
diff --git a/src/libdraw/x11-load.c b/src/libdraw/x11-load.c
index 5292275..a7446f3 100644
--- a/src/libdraw/x11-load.c
+++ b/src/libdraw/x11-load.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
diff --git a/src/libdraw/x11-mouse.c b/src/libdraw/x11-mouse.c
index 6da045b..93f7ecf 100644
--- a/src/libdraw/x11-mouse.c
+++ b/src/libdraw/x11-mouse.c
@@ -1,5 +1,5 @@
-#include "x11-inc.h"
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <thread.h>
diff --git a/src/libdraw/x11-pixelbits.c b/src/libdraw/x11-pixelbits.c
index 22dfc60..5cbdded 100644
--- a/src/libdraw/x11-pixelbits.c
+++ b/src/libdraw/x11-pixelbits.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
diff --git a/src/libdraw/x11-unload.c b/src/libdraw/x11-unload.c
index 471ca88..d01a232 100644
--- a/src/libdraw/x11-unload.c
+++ b/src/libdraw/x11-unload.c
@@ -1,6 +1,5 @@
-#include "x11-inc.h"
-
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>
diff --git a/src/libdraw/x11-wsys.c b/src/libdraw/x11-wsys.c
index e27202f..c996bd3 100644
--- a/src/libdraw/x11-wsys.c
+++ b/src/libdraw/x11-wsys.c
@@ -1,5 +1,5 @@
-#include "x11-inc.h"
 #include <u.h>
+#include "x11-inc.h"
 #include <libc.h>
 #include <draw.h>
 #include <memdraw.h>