To get gamma correction, I just filled a 'xcmap' style XPM image with the Maelstrom colormap, and displayed it with 'xv'. I used 'xv' to perform gamma correction on the colors, and then saved the gamma corrected XPM, and extracted the colors to a new colormap. It turns out that shared memory XImage manipulation is actually faster than shared background pixmaps. This is because the contents of the window can be directly manipulated via the XImage, instead of having to be copied from the XImage. XShmPutImage() acts as XClearArea(), rather than XCopyArea(), and has corresponding speed. XShmPutImage() is faster than using shared background pixmaps, because the server no longer has to deal with tiling and such issues. Asynchronous I/O works reliably under Linux, but seems to lead to race conditions on other versions of UNIX, when used for communication between Maelstrom and the sound server.. Actually, with the use of POSIX signal handling and select() to check for I/O in the I/O handler, asynchronous I/O seems to work well in every other system on which Maelstrom runs. The port to other UNIXes besides Linux is beyond the scope of the rest of this document. Let's just say it involved quite a bit of work with byte order and sound driver development.