#include reverse_area(olda, newa, oldcolor, newcolor) struct dd_area *olda, *newa; PIXEL *oldcolor, *newcolor; { int oldmode, newmode; ERRTYPE err; if (err = dd_rdset(olda, DD_WRITEMODE, &oldmode)) errprnt(dd_err(err)); switch (oldmode) { case DD_ASSIGN : newmode = DD_ASSIGN; *newcolor = 0; break; case DD_AND : newmode = DD_OR; *newcolor = ~(*oldcolor); break; case DD_OR : newmode = DD_AND; *newcolor = ~(*oldcolor); break; case DD_XOR : newmode = DD_XOR; *newcolor = *oldcolor; break; } *newa = *olda; if (err = dd_set(newa, DD_WRITEMODE, newmode)) errprnt(dd_err(err)); }