ENUM_PTRS_END static RELOC_PTRS_WITH(screen_enum_reloc_ptrs, gs_screen_enum *eptr) { RELOC_PTR(gs_screen_enum, pgs); RELOC_USING(st_halftone, &eptr->halftone, sizeof(gs_halftone)); RELOC_USING(st_ht_order, &eptr->order, sizeof(gx_ht_order)); }
ENUM_PTRS_END static RELOC_PTRS_WITH(function_Sd_reloc_ptrs, gs_function_Sd_t *pfn) { RELOC_PREFIX(st_function); RELOC_USING(st_data_source, &pfn->params.DataSource, sizeof(pfn->params.DataSource)); RELOC_PTR3(gs_function_Sd_t, params.Encode, params.Decode, params.Size); RELOC_PTR3(gs_function_Sd_t, params.pole, params.array_step, params.stream_step); }
ENUM_PTRS_END static RELOC_PTRS_WITH(device_mask_clip_reloc_ptrs, gx_device_mask_clip *mcdev) { RELOC_PREFIX(st_device_forward); RELOC_USING(st_gx_strip_bitmap, &mcdev->tiles, sizeof(mcdev->tiles)); RELOC_USING(st_device_memory, &mcdev->mdev, sizeof(mcdev->mdev)); if (mcdev->mdev.base != 0) { /* * Update the line pointers specially, since they point into the * buffer that is part of the mask clipping device itself. */ long diff = (char *)RELOC_OBJ(mcdev) - (char *)mcdev; int i; for (i = 0; i < mcdev->mdev.height; ++i) mcdev->mdev.line_ptrs[i] += diff; mcdev->mdev.base = mcdev->mdev.line_ptrs[0]; mcdev->mdev.line_ptrs = (void *)((char *)(mcdev->mdev.line_ptrs) + diff); } }
ENUM_PTRS_END static RELOC_PTRS_WITH(gs_type1_state_reloc_ptrs, gs_type1_state *pcis) { int i; RELOC_PTR(gs_type1_state, pfont); RELOC_PTR(gs_type1_state, pis); RELOC_PTR(gs_type1_state, path); RELOC_PTR(gs_type1_state, callback_data); for (i = 0; i < pcis->ips_count; i++) { ip_state_t *ipsp = &pcis->ipstack[i]; int diff = ipsp->ip - ipsp->cs_data.bits.data; RELOC_USING(st_glyph_data, &ipsp->cs_data, sizeof(ipsp->cs_data)); ipsp->ip = ipsp->cs_data.bits.data + diff; } } RELOC_PTRS_END
ENUM_PTRS_END static RELOC_PTRS_WITH(gs_glyph_cache_elem_reloc_ptrs, gs_glyph_cache_elem *e) { RELOC_PTR(gs_glyph_cache_elem, next); RELOC_USING(st_glyph_data, &e->gd, sizeof(e->gd)); } RELOC_PTRS_END