#include <X11/Xlib.h>
#include <assert.h>
#include <unistd.h>
#include <stdlib.h>

Display *dpy;
Window w;
GC gc;

void do_stuff()
{
	float x = 200, y = 200, e = 1/256.0;

	for(;;) {
		x = x - e*y;
		y = y + e*x;
		XDrawPoint(dpy, w, gc, x+300, y+300);
		usleep(0);
		//usleep(rand() % 10000 == 0);
		XFlush(dpy);
	}
}

int main()
{
	XEvent e;
	int blackColor, whiteColor;

	dpy = XOpenDisplay(NULL);
	assert(dpy);

	blackColor = BlackPixel(dpy, DefaultScreen(dpy));
	whiteColor = WhitePixel(dpy, DefaultScreen(dpy));

	w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 
		600, 600, 0, blackColor, blackColor);

	gc = XCreateGC(dpy, w, 0, NULL);
	XSetForeground(dpy, gc, whiteColor);

	XSelectInput(dpy, w, StructureNotifyMask);
	XMapWindow(dpy, w);
	do { XNextEvent(dpy, &e); } while (e.type != MapNotify);

	do_stuff();

	return 0;
}

