/* we call this from ps code to instantiate a jbig2_global_context object which the JBIG2Decode filter uses if available. The pointer to the global context is stored in an astruct object and returned that way since it lives outside the interpreters memory management */ static int z_jbig2makeglobalctx(i_ctx_t * i_ctx_p) { void *global = NULL; s_jbig2_global_data_t *st; os_ptr op = osp; byte *data; int size; int code = 0; check_type(*op, t_astruct); size = gs_object_size(imemory, op->value.pstruct); data = r_ptr(op, byte); code = s_jbig2decode_make_global_data(data, size, &global); if (size > 0 && global == NULL) { dlprintf("failed to create parsed JBIG2GLOBALS object."); return_error(e_unknownerror); } st = ialloc_struct(s_jbig2_global_data_t, &st_jbig2_global_data_t, "jbig2decode parsed global context"); if (st == NULL) return_error(e_VMerror); st->data = global; make_astruct(op, a_readonly | icurrent_space, (byte*)st); return code; }
/* <int> .bytestring <bytestring> */ private int zbytestring(i_ctx_t *i_ctx_p) { os_ptr op = osp; byte *sbody; uint size; check_int_leu(*op, max_int); size = (uint)op->value.intval; sbody = ialloc_bytes(size, ".bytestring"); if (sbody == 0) return_error(e_VMerror); make_astruct(op, a_all | icurrent_space, sbody); memset(sbody, 0, size); return 0; }
/* <dict> .initialize_dsc_parser - */ static int zinitialize_dsc_parser(i_ctx_t *i_ctx_p) { ref local_ref; int code; os_ptr const op = osp; dict * const pdict = op->value.pdict; gs_memory_t * const mem = (gs_memory_t *)dict_memory(pdict); dsc_data_t * const data = gs_alloc_struct(mem, dsc_data_t, &st_dsc_data_t, "DSC parser init"); data->dsc_data_ptr = dsc_init((void *) "Ghostscript DSC parsing"); if (!data->dsc_data_ptr) return_error(e_VMerror); dsc_set_error_function(data->dsc_data_ptr, dsc_error_handler); make_astruct(&local_ref, a_readonly | r_space(op), (byte *) data); code = idict_put_string(op, dsc_dict_name, &local_ref); if (code >= 0) pop(1); return code; }