Dungeon CrawlX11 の前景+後景かさねあわせ描画をコーディング。
NetHack で以前コード書いた時はX11サーバのマスク処理を使ったけど、今回は*band のmaid-x11.c をまねて XGet/PutPixel によってメモリ内で処理してから XPutImage で転送するようにした。LINUXのようにサーバとクライアントが同一ならどっちがいいかとか気にしなくていいけど、他の環境ではどうか分からない。合成した絵はキャッシュしておき、同じ組合せが出たときに再利用する。同時にポインタストリングの先頭へ移動しておきサーチが速くなるようにした。


ix = -1;
id = (fg <<16)|bg;
for (i=cache_head;;){
ix = i;
if(cache[i].id == id_wanted)break;
i = cache[i].next;
if(i==-1)break;
}
if (i==-1) compose_ximage(cache[ix].ximage, fg, bg);
XPutImage(...,cache[ix].ximage);
// ix をアゲる
if(ix == cache_head) return;
next = cache[ix].next;
prev = cache[ix].prev;
if(next != -1) cache[next].prev = prev;
if(prev != -1) cache[prev].next = next;
cache[ix].prev = -1;
cache[ix].next = cache_head;
cache[cache_head].prev = ix;
cache_head=ix;