diff options
-rw-r--r-- | base/gsiparm2.h | 60 | ||||
-rw-r--r-- | base/gximage2.c | 316 | ||||
-rw-r--r-- | base/gxiparam.h | 2 | ||||
-rw-r--r-- | base/lib.mak | 17 | ||||
-rw-r--r-- | devices/gdevx.c | 82 | ||||
-rw-r--r-- | psi/zupath.c | 26 | ||||
-rw-r--r-- | windows/ghostscript.vcproj | 8 | ||||
-rw-r--r-- | windows/ghostscript_rt.vcxproj | 2 |
8 files changed, 14 insertions, 499 deletions
diff --git a/base/gsiparm2.h b/base/gsiparm2.h deleted file mode 100644 index 3081b68ac..000000000 --- a/base/gsiparm2.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2001-2018 Artifex Software, Inc. - All Rights Reserved. - - This software is provided AS-IS with no warranty, either express or - implied. - - This software is distributed under license and may not be copied, - modified or distributed except as expressly authorized under the terms - of the license contained in the file LICENSE in this distribution. - - Refer to licensing information at http://www.artifex.com or contact - Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato, - CA 94945, U.S.A., +1(415)492-9861, for further information. -*/ - - -/* ImageType 2 image parameter definition */ - -#ifndef gsiparm2_INCLUDED -# define gsiparm2_INCLUDED - -#include "gsiparam.h" -#include "gsgstate.h" - -/* Opaque type for a path */ -#ifndef gx_path_DEFINED -# define gx_path_DEFINED -typedef struct gx_path_s gx_path; -#endif - -/* - * See Section 7.1 of the Adobe PostScript Version 3010 Supplement - * for a definition of ImageType 2 images. - */ - -typedef struct gs_image2_s { - gs_image_common; - gs_gstate *DataSource; - float XOrigin, YOrigin; - float Width, Height; - /* - * If UnpaintedPath is not 0, any unpainted path will be appended to it. - */ - gx_path *UnpaintedPath; - bool PixelCopy; -} gs_image2_t; -#define private_st_gs_image2() /* in gximage2.c */\ - extern_st(st_gs_image_common);\ - gs_private_st_suffix_add2(st_gs_image2, gs_image2_t, "gs_image2_t",\ - image2_enum_ptrs, image2_reloc_ptrs, st_gs_image_common,\ - DataSource, UnpaintedPath) - -/* - * Initialize an ImageType 2 image. Defaults: - * UnpaintedPath = 0 - * PixelCopy = false - */ -void gs_image2_t_init(gs_image2_t * pim); - -#endif /* gsiparm2_INCLUDED */ diff --git a/base/gximage2.c b/base/gximage2.c deleted file mode 100644 index 16e87cd38..000000000 --- a/base/gximage2.c +++ /dev/null @@ -1,316 +0,0 @@ -/* Copyright (C) 2001-2018 Artifex Software, Inc. - All Rights Reserved. - - This software is provided AS-IS with no warranty, either express or - implied. - - This software is distributed under license and may not be copied, - modified or distributed except as expressly authorized under the terms - of the license contained in the file LICENSE in this distribution. - - Refer to licensing information at http://www.artifex.com or contact - Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato, - CA 94945, U.S.A., +1(415)492-9861, for further information. -*/ - - -/* ImageType 2 image implementation */ -#include "math_.h" -#include "memory_.h" -#include "gx.h" -#include "gserrors.h" -#include "gsmatrix.h" /* for gscoord.h */ -#include "gscoord.h" -#include "gscspace.h" -#include "gscpixel.h" -#include "gsdevice.h" -#include "gsiparm2.h" -#include "gxgetbit.h" -#include "gxiparam.h" -#include "gxpath.h" -#include "gscolor2.h" - -/* Forward references */ -static dev_proc_begin_typed_image(gx_begin_image2); -static image_proc_source_size(gx_image2_source_size); - -/* Structure descriptor */ -private_st_gs_image2(); - -/* Define the image type for ImageType 2 images. */ -const gx_image_type_t gs_image_type_2 = { - &st_gs_image2, gx_begin_image2, gx_image2_source_size, - gx_image_no_sput, gx_image_no_sget, gx_image_default_release, 2 -}; - -/* Initialize an ImageType 2 image. */ -void -gs_image2_t_init(gs_image2_t * pim) -{ - pim->type = &gs_image_type_2; - pim->UnpaintedPath = 0; - pim->PixelCopy = false; -} - -/* - * Compute the device space coordinates and source data size for an - * ImageType 2 image. This procedure fills in - * image.{Width,Height,ImageMatrix}. - */ -typedef struct image2_data_s { - gs_point origin; - gs_int_rect bbox; - gs_image1_t image; -} image2_data_t; -static int -image2_set_data(const gs_image2_t * pim, image2_data_t * pid) -{ - gs_gstate *pgs = pim->DataSource; - gs_matrix smat; - gs_rect sbox, dbox; - - gs_transform(pgs, pim->XOrigin, pim->YOrigin, &pid->origin); - sbox.q.x = (sbox.p.x = pim->XOrigin) + pim->Width; - sbox.q.y = (sbox.p.y = pim->YOrigin) + pim->Height; - gs_currentmatrix(pgs, &smat); - gs_bbox_transform(&sbox, &smat, &dbox); - pid->bbox.p.x = (int)floor(dbox.p.x); - pid->bbox.p.y = (int)floor(dbox.p.y); - pid->bbox.q.x = (int)ceil(dbox.q.x); - pid->bbox.q.y = (int)ceil(dbox.q.y); - pid->image.Width = pid->bbox.q.x - pid->bbox.p.x; - pid->image.Height = pid->bbox.q.y - pid->bbox.p.y; - pid->image.ImageMatrix = pim->ImageMatrix; - pid->image.image_parent_type = gs_image_type2; - return 0; -} - -/* Compute the source size of an ImageType 2 image. */ -static int -gx_image2_source_size(const gs_gstate * pgs, const gs_image_common_t * pim, - gs_int_point * psize) -{ - image2_data_t idata; - - image2_set_data((const gs_image2_t *)pim, &idata); - psize->x = idata.image.Width; - psize->y = idata.image.Height; - return 0; -} - -/* Begin an ImageType 2 image. */ -/* Note that since ImageType 2 images don't have any source data, */ -/* this procedure does all the work. */ -static int -gx_begin_image2(gx_device * dev, - const gs_gstate * pgs1, const gs_matrix * pmat, - const gs_image_common_t * pic, const gs_int_rect * prect, - const gx_drawing_color * pdcolor, const gx_clip_path * pcpath, - gs_memory_t * mem, gx_image_enum_common_t ** pinfo) -{ - const gs_image2_t *pim = (const gs_image2_t *)pic; - gs_gstate *pgs = pim->DataSource; - gx_device *sdev = gs_currentdevice(pgs); - int depth = sdev->color_info.depth; - bool pixel_copy = pim->PixelCopy; - bool has_alpha; - bool direct_copy = false; - image2_data_t idata; - byte *row; - uint row_size, source_size; - gx_image_enum_common_t *info; - gs_matrix smat, dmat; - int code; - - /* verify that color models are the same for PixelCopy */ - if ( pixel_copy && - !gx_color_info_equal(&dev->color_info, &sdev->color_info)) - return_error(gs_error_typecheck); - -/****** ONLY HANDLE depth <= 8 FOR PixelCopy ******/ - if (pixel_copy && depth <= 8) - return_error(gs_error_unregistered); - - gs_image_t_init(&idata.image, gs_currentcolorspace((const gs_gstate *)pgs1)); - - /* Add Decode entries for K and alpha */ - idata.image.Decode[6] = idata.image.Decode[8] = 0.0; - idata.image.Decode[7] = idata.image.Decode[9] = 1.0; - if (pmat == 0) { - gs_currentmatrix((const gs_gstate *)pgs1, &dmat); - pmat = &dmat; - } else - dmat = *pmat; - gs_currentmatrix(pgs, &smat); - code = image2_set_data(pim, &idata); - if (code < 0) - return code; -/****** ONLY HANDLE SIMPLE CASES FOR NOW ******/ - if (idata.bbox.p.x != floor(idata.origin.x)) - return_error(gs_error_rangecheck); - if (!(idata.bbox.p.y == floor(idata.origin.y) || - idata.bbox.q.y == ceil(idata.origin.y)) - ) - return_error(gs_error_rangecheck); - source_size = (idata.image.Width * depth + 7) >> 3; - row_size = max(3 * idata.image.Width, source_size); - row = gs_alloc_bytes(mem, row_size, "gx_begin_image2"); - if (row == 0) - return_error(gs_error_VMerror); - if (pixel_copy) { - idata.image.BitsPerComponent = depth; - has_alpha = false; /* no separate alpha channel */ - - if ( pcpath == NULL || - gx_cpath_includes_rectangle(pcpath, - int2fixed(idata.bbox.p.x), - int2fixed(idata.bbox.p.y), - int2fixed(idata.bbox.q.x), - int2fixed(idata.bbox.q.y)) ) { - gs_matrix mat; - - /* - * Figure 7.2 of the Adobe 3010 Supplement says that we should - * compute CTM x ImageMatrix here, but I'm almost certain it - * should be the other way around. Also see gdevx.c. - */ - gs_matrix_multiply(&idata.image.ImageMatrix, &smat, &mat); - direct_copy = - (is_xxyy(&dmat) || is_xyyx(&dmat)) && -#define eqe(e) mat.e == dmat.e - eqe(xx) && eqe(xy) && eqe(yx) && eqe(yy); -#undef eqe - } - } else { - idata.image.BitsPerComponent = 8; - - /* Always use RGB source color for now. - * - * The source device has alpha if the same RGB values with - * different alphas map to different pixel values. - ****** THIS IS NOT GOOD ENOUGH: WE WANT TO SKIP TRANSFERRING - ****** ALPHA IF THE SOURCE IS CAPABLE OF HAVING ALPHA BUT - ****** DOESN'T CURRENTLY HAVE ANY ACTUAL ALPHA VALUES DIFFERENT - ****** FROM 1. - */ - /* - * Since the default implementation of map_rgb_alpha_color - * premultiplies the color towards white, we can't just test - * whether changing alpha has an effect on the color. - */ - { - gx_color_index trans_black = - (*dev_proc(sdev, map_rgb_alpha_color)) - (sdev, (gx_color_value) 0, (gx_color_value) 0, - (gx_color_value) 0, (gx_color_value) 0); - - has_alpha = - trans_black != (*dev_proc(sdev, map_rgb_alpha_color)) - (sdev, (gx_color_value) 0, (gx_color_value) 0, - (gx_color_value) 0, gx_max_color_value) && - trans_black != (*dev_proc(sdev, map_rgb_alpha_color)) - (sdev, gx_max_color_value, gx_max_color_value, - gx_max_color_value, gx_max_color_value); - } - } - idata.image.Alpha = - (has_alpha ? gs_image_alpha_last : gs_image_alpha_none); - if (smat.yy < 0) { - /* - * The source Y axis is reflected. Reflect the mapping from - * user space to source data. - */ - idata.image.ImageMatrix.ty += idata.image.Height * - idata.image.ImageMatrix.yy; - idata.image.ImageMatrix.xy = -idata.image.ImageMatrix.xy; - idata.image.ImageMatrix.yy = -idata.image.ImageMatrix.yy; - } - if (!direct_copy) - code = (*dev_proc(dev, begin_typed_image)) - (dev, pgs1, pmat, (const gs_image_common_t *)&idata.image, NULL, - pdcolor, pcpath, mem, &info); - if (code >= 0) { - int y; - gs_int_rect rect; - gs_get_bits_params_t params; - const byte *data; - uint offset = row_size - source_size; - - rect = idata.bbox; - for (y = 0; code >= 0 && y < idata.image.Height; ++y) { - gs_int_rect *unread = 0; - int num_unread; - -/****** y COMPUTATION IS ROUNDED -- WRONG ******/ - rect.q.y = rect.p.y + 1; - /* Insist on x_offset = 0 to simplify the conversion loop. */ - params.options = - GB_ALIGN_ANY | (GB_RETURN_COPY | GB_RETURN_POINTER) | - GB_OFFSET_0 | (GB_RASTER_STANDARD | GB_RASTER_ANY) | - GB_PACKING_CHUNKY; - if (pixel_copy) { - params.options |= GB_COLORS_NATIVE; - params.data[0] = row + offset; - code = (*dev_proc(sdev, get_bits_rectangle)) - (sdev, &rect, ¶ms, &unread); - if (code < 0) - break; - num_unread = code; - data = params.data[0]; - if (direct_copy) { - /* - * Copy the pixels directly to the destination. - * We know that the transformation is only a translation, - * but we must handle an inverted destination Y axis. - */ - code = (*dev_proc(dev, copy_color)) - (dev, data, 0, row_size, gx_no_bitmap_id, - (int)(dmat.tx - idata.image.ImageMatrix.tx), - (int)(dmat.ty - idata.image.ImageMatrix.ty + - (dmat.yy < 0 ? ~y : y)), - idata.image.Width, 1); - continue; - } - } else { - /* - * Convert the pixels to pure colors. This may be very - * slow and painful. Eventually we will use indexed color for - * narrow pixels. - */ - /* Always use RGB source color for now. */ - params.options |= - GB_COLORS_RGB | GB_DEPTH_8 | - (has_alpha ? GB_ALPHA_LAST : GB_ALPHA_NONE); - params.data[0] = row; - code = (*dev_proc(sdev, get_bits_rectangle)) - (sdev, &rect, ¶ms, &unread); - if (code < 0) - break; - num_unread = code; - data = params.data[0]; - } - if (num_unread > 0 && pim->UnpaintedPath) { - /* Add the rectangle(s) to the unpainted path. */ - int i; - - for (i = 0; code >= 0 && i < num_unread; ++i) - code = gx_path_add_rectangle(pim->UnpaintedPath, - int2fixed(unread[i].p.x), - int2fixed(unread[i].p.y), - int2fixed(unread[i].q.x), - int2fixed(unread[i].q.y)); - gs_free_object(dev->memory, unread, "UnpaintedPath unread"); - } - code = gx_image_data(info, &data, 0, row_size, 1); - rect.p.y = rect.q.y; - } - if (!direct_copy) { - if (code >= 0) - code = gx_image_end(info, true); - else - discard(gx_image_end(info, false)); - } - } - gs_free_object(mem, row, "gx_begin_image2"); - return (code < 0 ? code : 1); -} diff --git a/base/gxiparam.h b/base/gxiparam.h index 73da01050..53815a3ce 100644 --- a/base/gxiparam.h +++ b/base/gxiparam.h @@ -53,6 +53,8 @@ struct gx_image_type_s { * Compute the width and height of the source data. For images with * explicit data, this information is in the gs_data_image_t * structure, but ImageType 2 images must compute it. + * NOTE: we no longer support ImageType 2, so maybe this could be + * simplified/refactored? */ #define image_proc_source_size(proc)\ int proc(const gs_gstate *pgs, const gs_image_common_t *pic,\ diff --git a/base/lib.mak b/base/lib.mak index 416a8be26..26fd4707f 100644 --- a/base/lib.mak +++ b/base/lib.mak @@ -2952,23 +2952,6 @@ $(GLOBJ)gximdecode.$(OBJ) : $(GLSRC)gximdecode.c $(gximdecode_h) $(string__h)\ $(LIB_MAK) $(MAKEDIRS) $(GLCC) $(GLO_)gximdecode.$(OBJ) $(C_) $(GLSRC)gximdecode.c -# ================ Display Postscript extensions ================ # - -# Display PostScript needs the DevicePixel color space to implement -# the PixelCopy option of ImageType 2 images. -dpslib_=$(GLOBJ)gsdps.$(OBJ) $(GLOBJ)gximage2.$(OBJ) -$(GLD)dpslib.dev : $(LIB_MAK) $(ECHOGS_XE) $(dpslib_) $(GLD)cspixlib.dev \ - $(LIB_MAK) $(MAKEDIRS) - $(SETMOD) $(GLD)dpslib $(dpslib_) - $(ADDMOD) $(GLD)dpslib -imagetype 2 - $(ADDMOD) $(GLD)dpslib -include $(GLD)cspixlib - -$(GLOBJ)gximage2.$(OBJ) : $(GLSRC)gximage2.c $(AK) $(gx_h)\ - $(math__h) $(memory__h) $(gserrors_h) $(gscolor2_h)\ - $(gscpixel_h) $(gscoord_h) $(gscspace_h) $(gsdevice_h) $(gsiparm2_h)\ - $(gsmatrix_h) $(gxgetbit_h) $(gxiparam_h) $(gxpath_h) $(LIB_MAK) $(MAKEDIRS) - $(GLCC) $(GLO_)gximage2.$(OBJ) $(C_) $(GLSRC)gximage2.c - # ================ PostScript LanguageLevel 3 support ================ # $(GLOBJ)gscdevn.$(OBJ) : $(GLSRC)gscdevn.c $(AK) $(gx_h) $(gserrors_h)\ diff --git a/devices/gdevx.c b/devices/gdevx.c index da20177ee..e1c5c1159 100644 --- a/devices/gdevx.c +++ b/devices/gdevx.c @@ -28,7 +28,6 @@ #include "gxpath.h" #include "gxgetbit.h" #include "gxiparam.h" -#include "gsiparm2.h" #include "gxdevmem.h" #include "gdevx.h" #include "gdevkrnlsclass.h" /* 'standard' built in subclasses, currently First/Last Page and obejct filter */ @@ -72,7 +71,6 @@ static dev_proc_copy_color(x_copy_color); /*extern dev_proc_put_params(gdev_x_put_params);*/ static dev_proc_get_page_device(x_get_page_device); static dev_proc_strip_tile_rectangle(x_strip_tile_rectangle); -static dev_proc_begin_typed_image(x_begin_typed_image); static dev_proc_get_bits_rectangle(x_get_bits_rectangle); /*extern dev_proc_get_xfont_procs(gdev_x_finish_copydevice);*/ static dev_proc_fillpage(x_fillpage); @@ -119,7 +117,7 @@ const gx_device_X this_device = { \ x_strip_tile_rectangle, \ NULL, /* strip_copy_rop */ \ NULL, /* get_clipping_box */ \ - x_begin_typed_image, \ + NULL, /* begin_typed_image */ \ x_get_bits_rectangle, \ NULL, /* map_color_rgb_alpha */ \ NULL, /* create_compositor */ \ @@ -737,84 +735,6 @@ x_strip_tile_rectangle(gx_device * dev, const gx_strip_bitmap * tiles, return 0; } -/* Implement ImageType 2 using CopyArea if possible. */ -/* Note that since ImageType 2 images don't have any source data, */ -/* this procedure does all the work. */ -static int -x_begin_typed_image(gx_device * dev, - const gs_gstate * pgs1, const gs_matrix * pmat, - const gs_image_common_t * pic, const gs_int_rect * prect, - const gx_drawing_color * pdcolor, const gx_clip_path * pcpath, - gs_memory_t * mem, gx_image_enum_common_t ** pinfo) -{ - gx_device_X *xdev = (gx_device_X *) dev; - const gs_image2_t *pim; - gs_gstate *pgs = (gs_gstate *)pgs1; - gx_device *sdev; - gs_matrix smat, dmat; - - if (pic->type->index != 2) - goto punt; - pim = (const gs_image2_t *)pic; - if (!pim->PixelCopy) - goto punt; - pgs = pim->DataSource; - if (pgs == 0) - goto punt; - sdev = gs_currentdevice(pgs); - if (dev->dname != sdev->dname || - memcmp(&dev->color_info, &sdev->color_info, - sizeof(dev->color_info)) - ) - goto punt; - flush_text(xdev); - gs_currentmatrix(pgs, &smat); - /* - * Figure 7.2 of the Adobe 3010 Supplement says that we should - * compute CTM x ImageMatrix here, but I'm almost certain it - * should be the other way around. Also see gximage2.c. - */ - gs_matrix_multiply(&pim->ImageMatrix, &smat, &smat); - gs_currentmatrix(pgs, &dmat); - if (!((is_xxyy(&dmat) || is_xyyx(&dmat)) && -#define eqe(e) smat.e == dmat.e - eqe(xx) && eqe(xy) && eqe(yx) && eqe(yy)) -#undef eqe - ) - goto punt; - { - gs_rect rect, src, dest; - gs_int_point size; - int srcx, srcy, destx, desty; - - rect.p.x = rect.p.y = 0; - rect.q.x = pim->Width, rect.q.y = pim->Height; - gs_bbox_transform(&rect, &dmat, &dest); - if (pcpath != NULL && - !gx_cpath_includes_rectangle(pcpath, - float2fixed(dest.p.x), float2fixed(dest.p.y), - float2fixed(dest.q.x), float2fixed(dest.q.y)) - ) - goto punt; - rect.q.x += (rect.p.x = pim->XOrigin); - rect.q.y += (rect.p.y = pim->YOrigin); - gs_bbox_transform(&rect, &smat, &src); - (*pic->type->source_size) (pgs, pic, &size); - X_SET_FILL_STYLE(xdev, FillSolid); - X_SET_FUNCTION(xdev, GXcopy); - srcx = (int)(src.p.x + 0.5); - srcy = (int)(src.p.y + 0.5); - destx = (int)(dest.p.x + 0.5); - desty = (int)(dest.p.y + 0.5); - XCopyArea(xdev->dpy, xdev->bpixmap, xdev->bpixmap, xdev->gc, - srcx, srcy, size.x, size.y, destx, desty); - x_update_add(xdev, destx, desty, size.x, size.y); - } - return 0; - punt:return gx_default_begin_typed_image(dev, pgs, pmat, pic, prect, - pdcolor, pcpath, mem, pinfo); -} - /* Read bits back from the screen. */ static int x_get_bits_rectangle(gx_device * dev, const gs_int_rect * prect, diff --git a/psi/zupath.c b/psi/zupath.c index 6d8c2c545..a79ff2d49 100644 --- a/psi/zupath.c +++ b/psi/zupath.c @@ -454,20 +454,6 @@ zustrokepath(i_ctx_t *i_ctx_p) return 0; } -/* <with_ucache> upath <userpath> */ -/* We do all the work in a procedure that is also used to construct */ -/* the UnpaintedPath user path for ImageType 2 images. */ -int make_upath(i_ctx_t *i_ctx_p, ref *rupath, gs_gstate *pgs, gx_path *ppath, - bool with_ucache); -static int -zupath(i_ctx_t *i_ctx_p) -{ - os_ptr op = osp; - - check_type(*op, t_boolean); - return make_upath(i_ctx_p, op, igs, igs->path, op->value.boolval); -} - /* Compute the path length for user path purposes. */ static int path_length_for_upath(const gx_path *ppath) @@ -496,7 +482,7 @@ path_length_for_upath(const gx_path *ppath) return size; } -int +static int make_upath(i_ctx_t *i_ctx_p, ref *rupath, gs_gstate *pgs, gx_path *ppath, bool with_ucache) { @@ -595,6 +581,16 @@ make_upath(i_ctx_t *i_ctx_p, ref *rupath, gs_gstate *pgs, gx_path *ppath, return 0; } +/* <with_ucache> upath <userpath> */ +static int +zupath(i_ctx_t *i_ctx_p) +{ + os_ptr op = osp; + + check_type(*op, t_boolean); + return make_upath(i_ctx_p, op, igs, igs->path, op->value.boolval); +} + static int zgetpath(i_ctx_t *i_ctx_p) { diff --git a/windows/ghostscript.vcproj b/windows/ghostscript.vcproj index 4804e56ab..b6503666b 100644 --- a/windows/ghostscript.vcproj +++ b/windows/ghostscript.vcproj @@ -3201,10 +3201,6 @@ > </File> <File - RelativePath="..\base\gximage2.c" - > - </File> - <File RelativePath="..\base\gximage3.c" > </File> @@ -3686,10 +3682,6 @@ > </File> <File - RelativePath="..\base\gsiparm2.h" - > - </File> - <File RelativePath="..\base\gsiparm3.h" > </File> diff --git a/windows/ghostscript_rt.vcxproj b/windows/ghostscript_rt.vcxproj index 8097e86e1..589b2d19b 100644 --- a/windows/ghostscript_rt.vcxproj +++ b/windows/ghostscript_rt.vcxproj @@ -762,7 +762,6 @@ <ClCompile Include="..\base\gximag3x.c" /> <ClCompile Include="..\base\gximage.c" /> <ClCompile Include="..\base\gximage1.c" /> - <ClCompile Include="..\base\gximage2.c" /> <ClCompile Include="..\base\gximage3.c" /> <ClCompile Include="..\base\gximage4.c" /> <ClCompile Include="..\base\gximask.c" /> @@ -1736,7 +1735,6 @@ <ClInclude Include="..\base\gsiorom.h" /> <ClInclude Include="..\base\gsipar3x.h" /> <ClInclude Include="..\base\gsiparam.h" /> - <ClInclude Include="..\base\gsiparm2.h" /> <ClInclude Include="..\base\gsiparm3.h" /> <ClInclude Include="..\base\gsiparm4.h" /> <ClInclude Include="..\base\gsjconf.h" /> |