/* Set up the next sample */ static int screen_sample(i_ctx_t *i_ctx_p) { os_ptr op = osp; gs_screen_enum *penum = senum; gs_point pt; int code = gs_screen_currentpoint(penum, &pt); ref proc; switch (code) { default: return code; case 1: /* All done */ if (real_opproc(esp - 2) != 0) code = (*real_opproc(esp - 2)) (i_ctx_p); esp -= snumpush; screen_cleanup(i_ctx_p); return (code < 0 ? code : o_pop_estack); case 0: ; } push(2); make_real(op - 1, pt.x); make_real(op, pt.y); proc = sproc; push_op_estack(set_screen_continue); *++esp = proc; return o_push_estack; }
/* Record next halftone sample */ int gs_screen_next(gs_screen_enum * penum, floatp value) { if (penum->order.wse) { return gs_wts_screen_enum_next (penum->order.wse, value); } else { ht_sample_t sample; int width = penum->order.width; gx_ht_bit *bits = (gx_ht_bit *)penum->order.bit_data; if (value < -1.0 || value > 1.0) return_error(gs_error_rangecheck); sample = (ht_sample_t) ((value + 1) * max_ht_sample); #ifdef DEBUG if (gs_debug_c('H')) { gs_point pt; gs_screen_currentpoint(penum, &pt); dlprintf6("[H]sample x=%d y=%d (%f,%f): %f -> %u\n", penum->x, penum->y, pt.x, pt.y, value, sample); } #endif bits[penum->y * width + penum->x].mask = sample; if (++(penum->x) >= width) penum->x = 0, ++(penum->y); return 0; } }