%    Copyright (C) 1990 Aladdin Enterprises.  All rights reserved.
%    Distributed by Free Software Foundation, Inc.
%
% This file is part of Ghostscript.
%
% Ghostscript is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY.  No author or distributor accepts responsibility
% to anyone for the consequences of using it or for whether it serves any
% particular purpose or works at all, unless he says so in writing.  Refer
% to the Ghostscript General Public License for full details.
%
% Everyone is granted permission to copy, modify and redistribute
% Ghostscript, but only under the conditions described in the Ghostscript
% General Public License.  A copy of this license is supposed to have been
% given to you along with Ghostscript so you can know your rights and
% responsibilities.  It should be in a file named COPYING.  Among other
% things, the copyright notice and this notice must be preserved on all
% copies.

% Initialization file for Ghostscript Level 2 functions.
% When this is run, systemdict is still writable.

% Define the rectangle procedures in terms of .rectappend.
/rectclip
	{ newpath .rectappend clip newpath } bind def
/rectfill
	{ gsave newpath .rectappend fill grestore } bind def
/rectstroke
	{ gsave newpath .rectappend stroke grestore } bind def

% Define the user path procedures in terms of uappend.
/ucache
	{ } def
/ueofill
	{ gsave newpath uappend eofill grestore } bind def
/ufill
	{ gsave newpath uappend fill grestore } bind def
/upath
	{ [ exch {/ucache cvx} if pathbbox /setbbox cvx
	  {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx}
	  pathforall ] cvx
	} bind def
%****** Implement .ismatrix: push true/false if top is matrix
/ustroke
	{ .ismatrix gsave newpath
	  {exch uappend concat} {uappend} ifelse
	  stroke grestore
	} bind def
/ustrokepath
	{ .ismatrix newpath
	  {exch uappend //.tempmatrix currentmatrix exch concat
	   strokepath setmatrix}
	  {uappend strokepath} ifelse
	} bind def
% Dummy definitions for cache control operators
/ucachestatus
	{ mark 0 0 0 0 0 } bind def
/setucacheparams
	{ cleartomark } bind def

% Initialize the system name table
{
% 0
	/abs /add /aload /anchorsearch /and
	/arc /arcn /arct /arcto /array
	/ashow /astore /awidthshow /begin /bind
	/bitshift /ceiling /charpath /clear /cleartomark
% 20
	/clip /clippath /closepath /concat /concatmatrix
	/copy /count /counttomark /currentcmykcolor /currentdash
	/currentdict /currentfile /currentfont /currentgray /currentgstate
	/currenthsbcolor /currentlinecap /currentlinejoin /currentlinewidth /currentmatrix
% 40
	/currentpoint /currentrgbcolor /currentshared /curveto /cvi
	/cvlit /cvn /cvr /cvrs /cvs
	/cvx /def /defineusername /dict /div
	/dtransform /dup /end /eoclip /eofill
% 60
	% ... 160 more
% 220
	/makepattern /setcolor /setcolorspace /setglobal /setpagedevice
	/setpattern //null //null //null //null
	//null //null //null //null //null
	//null //null //null //null //null
% 240
	//null //null //null //null //null
	//null //null //null //null //null
	//null //null //null //null //null
	//null /= /== /ISOLatin1Encoding /StandardEncoding
% 260
	/[ /] /atan /banddevice /bytesavailable
	/cachestatus /closefile /colorimage /condition /copypage
	/cos /countdictstack /countexecstack /cshow /currentblackgeneration
	/currentcacheparams /currentcolorscreen /currentcolortransfer /currentcontext /currentflat
% 280
	/currenthalftone /currenthalftonephase /currentmiterlimit /currentobjectformat /currentpacking
	/currentscreen /currentstrokeadjust /currenttransfer /currentundercolorremoval /defaultmatrix
	/definefont /deletefile /detach /deviceinfo /dictstack
	/echo /erasepage /errordict /execstack /executeonly
% 300
	% ... 76 more
% 376
	/A /B /C /D /E /F /G /H /I /J /K /L /M
	/N /O /P /Q /R /S /T /U /V /W /X /Y /Z
	/a /b /c /d /e /f /g /h /i /j /k /l /m
	/n /o /p /q /r /s /t /u /v /w /x /y /z
% 428
	% ... 50 more
} cvlit readonly /SystemNames exch def
