void MATRIX_map_point(MATRIX *matrix, int *x, int *y) { double nx; double ny; MAPDOUBLE(matrix, *x, *y, nx, ny); *x = DROUND(nx); *y = DROUND(ny); }
static void s128_diffuse(struct sober128_prng *c) { ulong32 t; /* relies on FOLD == N == 17! */ DROUND(0); DROUND(1); DROUND(2); DROUND(3); DROUND(4); DROUND(5); DROUND(6); DROUND(7); DROUND(8); DROUND(9); DROUND(10); DROUND(11); DROUND(12); DROUND(13); DROUND(14); DROUND(15); DROUND(16); }
void MATRIX_map_rect(MATRIX *matrix, int *x, int *y, int *w, int *h) { int rx, ry, rw, rh; if (matrix->m12 == 0.0F && matrix->m21 == 0.0F) { rx = DROUND(matrix->m11 * *x + matrix->dx); ry = DROUND(matrix->m22 * *y + matrix->dy); rw = DROUND(matrix->m11 * *w); rh = DROUND(matrix->m22 * *h); if (rw < 0) { rw = -rw; rx -= rw - 1; } if (rh < 0) { rh = -rh; ry -= rh-1; } } else { int left = *x; int top = *y; int right = *x + *w; int bottom = *y + *h; double x0, y0; double x, y; MAPDOUBLE(matrix, left, top, x0, y0 ); double xmin = x0; double ymin = y0; double xmax = x0; double ymax = y0; MAPDOUBLE(matrix, right, top, x, y ); xmin = DMIN( xmin, x ); ymin = DMIN( ymin, y ); xmax = DMAX( xmax, x ); ymax = DMAX( ymax, y ); MAPDOUBLE(matrix, right, bottom, x, y ); xmin = DMIN( xmin, x ); ymin = DMIN( ymin, y ); xmax = DMAX( xmax, x ); ymax = DMAX( ymax, y ); MAPDOUBLE(matrix, left, bottom, x, y ); xmin = DMIN( xmin, x ); ymin = DMIN( ymin, y ); xmax = DMAX( xmax, x ); ymax = DMAX( ymax, y ); double ww = xmax - xmin; double hh = ymax - ymin; xmin -= ( xmin - x0 ) / ww; ymin -= ( ymin - y0 ) / hh; xmax -= ( xmax - x0 ) / ww; ymax -= ( ymax - y0 ) / hh; rx = DROUND(xmin); ry = DROUND(ymin); rw = DROUND(xmax) - DROUND(xmin) + 1; rh = DROUND(ymax) - DROUND(ymin) + 1; } *x = rx; *y = ry; *w = rw; *h = rh; }
void s128_decrypt(s128_ctx *c, UCHAR *buf, int nbytes) { UCHAR *endbuf; WORD t = 0; if ((nbytes & 3) != 0) abort(); endbuf = &buf[nbytes]; /* do small or odd size buffers the slow way, at least at first */ while ((nbytes % (N*4)) != 0) { cycle(c->R); t = nltap(c); t ^= BYTE2WORD(buf); macfunc(c, t); WORD2BYTE(t, buf); nbytes -= 4; buf += 4; } /* now do lots at a time, if there's any left */ while (buf < endbuf) { DROUND(0); DROUND(1); DROUND(2); DROUND(3); DROUND(4); DROUND(5); DROUND(6); DROUND(7); DROUND(8); DROUND(9); DROUND(10); DROUND(11); DROUND(12); DROUND(13); DROUND(14); DROUND(15); DROUND(16); buf += 4*17; } }
static void s128_diffuse(s128_ctx *c) { WORD t; /* relies on FOLD == N! */ DROUND(0); DROUND(1); DROUND(2); DROUND(3); DROUND(4); DROUND(5); DROUND(6); DROUND(7); DROUND(8); DROUND(9); DROUND(10); DROUND(11); DROUND(12); DROUND(13); DROUND(14); DROUND(15); DROUND(16); }