i don't think there are any tricks. here's a pretty minimal program that displays colors. usage might be:
color 0x448844FF 0x000055FF - erik ---- #include <u.h> #include <libc.h> #include <thread.h> #include <draw.h> #include <mouse.h> #include <keyboard.h> static Mousectl *m; static long colors[1024]; static Image *c[1024]; static int ncolor; int rflag; void redraw(int) { int i, x, y; ulong chan; chan = rflag ? CHAN3(CGreen, 8, CBlue, 8, CRed, 8) : RGB24; if(c[0] == 0) for(i = 0; i < ncolor; i++){ c[i] = allocimage(display, Rect(0, 0, 1, 1), chan, 1, colors[i]); if(c[i] == 0) sysfatal("allocimage: %r"); } x = screen->r.min.x; y = screen->r.min.y; for(i = 0; i < ncolor; i++){ draw(screen, Rect(x, y, x+48, y+48), c[i], nil, ZP); x += 50; if(x > screen->r.max.x-60){ x = screen->r.min.x; y += 50; } } } void resizeproc(void *) { for(; recv(m->resizec, 0);){ if(getwindow(display, Refnone) < 0){ fprint(2, "test: can't reattach to window\n"); threadexitsall("resize"); } redraw(1); flushimage(display, 1); } } static void drawe(Display*, char *e) { fprint(2, "%s\n", e); threadexitsall("libdraw"); } int init(void) { // newwindow("-dx 300 -dy 300"); if(initdraw(drawe, 0, "test") < 0){ fprint(2, "test: initdraw failed: %r"); return -1; } m = initmouse(0, screen); return 0; } void kbdproc(void*) { Keyboardctl *k; k = initkeyboard(0); recv(k->c, 0); threadexitsall(""); } void mouseproc(void*) { while(readmouse(m) >= 0) ; threadexitsall("readmouse"); } void usage(void) { fprint(2, "usage: color [-r] color1 ...\n"); threadexitsall("usage"); } void threadmain(int argc, char *argv[]) { ARGBEGIN{ case 'r': rflag ^= rflag; break; default: usage(); }ARGEND; if(argc == 0) usage(); if(argc > nelem(colors)) argc = nelem(colors); for(ncolor = 0; ncolor < argc; ncolor++) colors[ncolor] = strtoul(argv[ncolor], 0, 16); if(init() < 0) threadexitsall("initdraw"); redraw(1); proccreate(kbdproc, 0, 1024); proccreate(mouseproc, 0, 8192); proccreate(resizeproc, 0, 8*8192); for(;;) sleep(10000); }