/* <dict> .builddevicecolorrendering1 <crd> */ static int zbuilddevicecolorrendering1(i_ctx_t *i_ctx_p) { os_ptr op = osp; gs_memory_t *mem = gs_state_memory(igs); dict_param_list list; gs_cie_render *pcrd = 0; int code; check_type(*op, t_dictionary); code = dict_param_list_read(&list, op, NULL, false, iimemory); if (code < 0) return code; code = gs_cie_render1_build(&pcrd, mem, ".builddevicecolorrendering1"); if (code >= 0) { code = param_get_cie_render1(pcrd, (gs_param_list *) & list, gs_currentdevice(igs)); if (code >= 0) { /****** FIX refct ******/ /*rc_decrement(pcrd, ".builddevicecolorrendering1"); *//* build sets rc = 1 */ } } iparam_list_release(&list); if (code < 0) { rc_free_struct(pcrd, ".builddevicecolorrendering1"); return code; } istate->colorrendering.dict = *op; make_istruct_new(op, a_readonly, pcrd); return 0; }
static bool pl_read_device_CRD(gs_cie_render *pcrd, gs_state *pgs) { gx_device * pdev = gs_currentdevice(pgs); gs_c_param_list list; gs_param_string dstring; char nbuff[64]; /* ample size */ int code = 0; /*get the CRDName parameter from the device */ gs_c_param_list_write(&list, gs_state_memory(pgs)); if (param_request((gs_param_list *)&list, "CRDName") < 0) return false; if ((code = gs_getdeviceparams(pdev, (gs_param_list *)&list)) >= 0) { gs_c_param_list_read(&list); if ( (code = param_read_string( (gs_param_list *)&list, "CRDName", &dstring )) == 0 ) { if (dstring.size > sizeof(nbuff) - 1) code = 1; else { strncpy(nbuff, (char *)dstring.data, dstring.size); nbuff[dstring.size] = '\0'; } } } gs_c_param_list_release(&list); if (code != 0) return false; gs_c_param_list_write(&list, gs_state_memory(pgs)); if (param_request((gs_param_list *)&list, nbuff) < 0) return false; if ((code = gs_getdeviceparams(pdev, (gs_param_list *)&list)) >= 0) { gs_param_dict dict; gs_c_param_list_read(&list); if ( (code = param_begin_read_dict( (gs_param_list *)&list, nbuff, &dict, false )) == 0 ) { code = param_get_cie_render1(pcrd, dict.list, pdev); param_end_read_dict((gs_param_list *)&list, nbuff, &dict); if (code > 0) code = 0; } } gs_c_param_list_release(&list); return (code == 0); }