static int ref_param_read_float_array(gs_param_list * plist, gs_param_name pkey, gs_param_float_array * pvalue) { iparam_list *const iplist = (iparam_list *) plist; iparam_loc loc; ref aref, elt; int code = ref_param_read_array(iplist, pkey, &loc); float *pfv; uint size; long i; if (code != 0) return code; size = r_size(loc.pvalue); pfv = (float *)gs_alloc_byte_array(plist->memory, size, sizeof(float), "ref_param_read_float_array"); if (pfv == 0) return_error(e_VMerror); aref = *loc.pvalue; loc.pvalue = &elt; for (i = 0; code >= 0 && i < size; i++) { array_get(plist->memory, &aref, i, &elt); code = float_param(&elt, pfv + i); } if (code < 0) { gs_free_object(plist->memory, pfv, "ref_read_float_array_param"); return (*loc.presult = code); } pvalue->data = pfv; pvalue->size = size; pvalue->persistent = true; return 0; }
/* <array> <offset> setdash - */ static int zsetdash(i_ctx_t *i_ctx_p) { os_ptr op = osp; os_ptr op1 = op - 1; double offset; int code = real_param(op, &offset); uint i, n; gs_memory_t *mem = imemory; float *pattern; if (code < 0) return_op_typecheck(op); if (!r_is_array(op1)) return_op_typecheck(op1); /* Adobe interpreters apparently don't check the array for */ /* read access, so we won't either. */ /*check_read(*op1); */ /* Unpack the dash pattern and check it */ n = r_size(op1); pattern = (float *)gs_alloc_byte_array(mem, n, sizeof(float), "setdash"); if (pattern == 0) return_error(e_VMerror); for (i = 0, code = 0; i < n && code >= 0; ++i) { ref element; array_get(mem, op1, (long)i, &element); code = float_param(&element, &pattern[i]); } if (code >= 0) code = gs_setdash(igs, pattern, n, offset); gs_free_object(mem, pattern, "setdash"); /* gs_setdash copies this */ if (code < 0) return code; ref_assign(&istate->dash_pattern_array, op1); pop(2); return code; }
void voigt::line_float() { if ( fix_lwidth == 0 ) float_param(gl_idx); func_line::line_float(); }