% Copyright (C) 2002 Aladdin Enterprises. 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.
%
% For more information about licensing, please refer to
% http://www.ghostscript.com/licensing/. For information on
% commercial licensing, go to http://www.artifex.com/licensing/ or
% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
% $Id: gs_cspace.ps 8962 2008-08-11 14:16:18Z ken $
% basic colorspace mechanism
%
% There have been some major changes to the PostScript colour handling.
% In particular, the vast majority of the colour space code has been
% converted from PostScript to C. This file has been extensively
% modified, as has gs_icc.ps. The remaining PostScript files which
% previously implemented colour space handling; gs_ciecs2.ps, gs_ciecs3.ps
% gs_devcs.ps, gs_devn.ps, gs_devpxl.ps, gs_indxd.ps, gs_patrn.ps and
% gs_sepr.ps have been superceded by the C code and removed.
%
% gs_lev2.ps and gs_ll3.ps have also been modified so that they no longer
% attempt to execute these PostScript files.
%
.currentglobal true .setglobal
systemdict begin
%
% gs_res.ps, and possibly other files, use this dictionary. Formerly
% in cspace_util, moved to systemdict.
%
20 dict dup /colorspacedict exch def
begin % colorspacedict
%
% gs_res.ps uses these entries in colorspacedict
% to populate the ColorSpaceFamily resource, so we need
% to add the supported spaces.
%
/DeviceGray [] def
/DeviceRGB [] def
/DeviceCMYK [] def
end % colorspacedict
%
% Global, read-only, unpacked, array-form device color spaces
% We need to return an array argument in response to currentcolorspace
% even if the argument presented to setcolorspace was a simple device
% space name. Not only that, but in order to satisfy some Adobe
% applications, it must be the *same* array every time. The only way
% to do that is to define an appropriate set initial arrays and always return
% one of those. These arrays are defined here.
%
/DeviceGray_array /DeviceGray 1 array astore readonly def
/DeviceRGB_array /DeviceRGB 1 array astore readonly def
/DeviceCMYK_array /DeviceCMYK 1 array astore readonly def
%
% - initgraphics -
%
% The internal routine gs_initgraphics doesn't (re)set the color space,
% so we must redefine the operation to do it here.
%
%
/initgraphics
{ initgraphics systemdict /DeviceGray_array get setcolorspace }
.bind odef
%
% These routines used for the NOSUBSTDEVICECOLORS switch. This prevents
% substitution of DeviceGray, DeviceRGB and DeviceCMYK with a Default*
% colour space when /UseCIEColors is true. If the job includes a
% definition of /DefaltGray, DefaultRGB or DefaultCMYK then it also executes
% .includecolorspace to allow the device to record the substitute space.
%
/..page_default_spaces 3 dict def
%
% Used internally to retrieve any relevant default colour space.
%
%