static void show_items(char* result, deck& source, const char* title) { if(!source.count) return; szprint(result, "%1: ", title); result = zend(result); for(auto e : source) { if(result[0]) zcat(result, ", "); szprint(zend(result), getstr(e)); } zcat(result, ".\n"); }
/* - cleardictstack - */ static int zcleardictstack(i_ctx_t *i_ctx_p) { while (zend(i_ctx_p) >= 0) DO_NOTHING; return 0; }
/* width for an xfont character. */ static int op_show_return_width(i_ctx_t *i_ctx_p, uint npop, double *pwidth) { uint index = op_show_find_index(i_ctx_p); es_ptr ep = (es_ptr) ref_stack_index(&e_stack, index - (snumpush - 1)); int code = gs_text_setcharwidth(esenum(ep), pwidth); uint ocount, dsaved, dcount; if (code < 0) return code; /* Restore the operand and dictionary stacks. */ ocount = ref_stack_count(&o_stack) - (uint) esodepth(ep).value.intval; if (ocount < npop) return_error(e_stackunderflow); dsaved = (uint) esddepth(ep).value.intval; dcount = ref_stack_count(&d_stack); if (dcount < dsaved) return_error(e_dictstackunderflow); while (dcount > dsaved) { code = zend(i_ctx_p); if (code < 0) return code; dcount--; } ref_stack_pop(&o_stack, ocount); /* We don't want to pop the mark or the continuation */ /* procedure (op_show_continue or cshow_continue). */ pop_estack(i_ctx_p, index - snumpush); return o_pop_estack; }
bool ImageBuf::write (ImageOutput *out, ProgressCallback progress_callback, void *progress_callback_data) const { stride_t as = AutoStride; bool ok = true; if (m_localpixels) { // In-core pixel buffer for the whole image ok = out->write_image (m_spec.format, m_localpixels, as, as, as, progress_callback, progress_callback_data); } else if (deep()) { // Deep image record ok = out->write_deep_image (m_deepdata); } else { // Backed by ImageCache std::vector<char> tmp (m_spec.image_bytes()); get_pixels (xbegin(), xend(), ybegin(), yend(), zbegin(), zend(), m_spec.format, &tmp[0]); ok = out->write_image (m_spec.format, &tmp[0], as, as, as, progress_callback, progress_callback_data); // FIXME -- not good for huge images. Instead, we should read // little bits at a time (scanline or tile blocks). } if (! ok) error ("%s", out->geterror ()); return ok; }