24 #define BM_WORDSIZE ((int)sizeof(potrace_word)) 25 #define BM_WORDBITS (8*BM_WORDSIZE) 26 #define BM_HIBIT (((potrace_word)1)<<(BM_WORDBITS-1)) 27 #define BM_ALLBITS (~(potrace_word)0) 32 #define bm_scanline(bm, y) ((bm)->map + (ptrdiff_t)(y)*(ptrdiff_t)(bm)->dy) 33 #define bm_index(bm, x, y) (&bm_scanline(bm, y)[(x)/BM_WORDBITS]) 34 #define bm_mask(x) (BM_HIBIT >> ((x) & (BM_WORDBITS-1))) 35 #define bm_range(x, a) ((int)(x) >= 0 && (int)(x) < (a)) 36 #define bm_safe(bm, x, y) (bm_range(x, (bm)->w) && bm_range(y, (bm)->h)) 37 #define BM_UGET(bm, x, y) ((*bm_index(bm, x, y) & bm_mask(x)) != 0) 38 #define BM_USET(bm, x, y) (*bm_index(bm, x, y) |= bm_mask(x)) 39 #define BM_UCLR(bm, x, y) (*bm_index(bm, x, y) &= ~bm_mask(x)) 40 #define BM_UINV(bm, x, y) (*bm_index(bm, x, y) ^= bm_mask(x)) 41 #define BM_UPUT(bm, x, y, b) ((b) ? BM_USET(bm, x, y) : BM_UCLR(bm, x, y)) 42 #define BM_GET(bm, x, y) (bm_safe(bm, x, y) ? BM_UGET(bm, x, y) : 0) 43 #define BM_SET(bm, x, y) (bm_safe(bm, x, y) ? BM_USET(bm, x, y) : 0) 44 #define BM_CLR(bm, x, y) (bm_safe(bm, x, y) ? BM_UCLR(bm, x, y) : 0) 45 #define BM_INV(bm, x, y) (bm_safe(bm, x, y) ? BM_UINV(bm, x, y) : 0) 46 #define BM_PUT(bm, x, y, b) (bm_safe(bm, x, y) ? BM_UPUT(bm, x, y, b) : 0) 89 memset(bm->
map, c ? -1 : 0,
size);
106 ptrdiff_t
size = (ptrdiff_t)bm->
dy * (ptrdiff_t)bm->
h;
108 for (i = 0; i <
size; i++) {
unsigned long potrace_word