141 lines · 4.5 KB · Text
RawDownload
%    Copyright (C) 1997, 1999 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_dps1.ps,v 1.4 2002/02/21 21:49:28 giles Exp $% Initialization file for most of the Display PostScript functions% that are also included in Level 2. level2dict begin % ------ Virtual memory ------ % /currentshared /.currentglobal load def/scheck /.gcheck load def%****** FOLLOWING IS WRONG ******/shareddict currentdict /globaldict .knownget not { 20 dict } if def % Global and LocalFontDirectory must remain in systemdict% even if we temporarily exit Level 2 mode. end				% level2dictsystemdict begin /SharedFontDirectory .FontDirectory .gcheck { .currentglobal false .setglobal   /LocalFontDirectory .FontDirectory dup maxlength dict copy   .forcedef	% LocalFontDirectory is local, systemdict is global   .setglobal .FontDirectory } { /LocalFontDirectory .FontDirectory   .forcedef	% LocalFontDirectory is local, systemdict is global   50 dict }ifelse def end				% systemdictlevel2dict begin % setshared must rebind FontDirectory to the appropriate one of% Local or SharedFontDirectory. /.setglobal		% <bool> .setglobal - { dup .setglobal   //systemdict /FontDirectory .currentglobal    { //SharedFontDirectory }    { /LocalFontDirectory .systemvar }	% can't embed ref to local VM   ifelse .forceput pop	% LocalFontDirectory is local, systemdict is global } .bind odef		% must bind .forceput and .setglobal			% even if NOBIND in effect% Don't just copy (load) the definition of .setglobal:% it gets redefined for LL3./setshared { /.setglobal .systemvar exec } odef.currentglobal setshared % See below for changes in save and restore. % ------ Fonts ------ % /selectfont		% <fontname> <size> selectfont - { 1 index findfont   1 index dup type /arraytype eq { makefont } { scalefont } ifelse   setfont pop pop } odef% undefinefont has to take local/global VM into account./undefinefont		% <fontname> undefinefont - { .FontDirectory 1 index .undef   .currentglobal    {		% Current mode is global; delete from local directory too.      //systemdict /LocalFontDirectory .knownget       { 1 index .undef }      if    }    {		% Current mode is local; if there was a shadowed global		% definition, copy it into the local directory.      //systemdict /SharedFontDirectory .knownget       { 1 index .knownget	  { .FontDirectory 2 index 3 -1 roll put }	 if       }      if    }   ifelse pop } odef % If we load a font into global VM within an inner save, the restore% will delete it from FontDirectory but not from SharedFontDirectory.% We have to handle this by making restore copy missing entries from% SharedFontDirectory to FontDirectory.  Since this could slow down restore% considerably, we define a new operator .dictcopynew for this purpose.% Furthermore, if FAKEFONTS is in effect, we want global real fonts to% override fake local ones.  We handle this by brute force./restore		% <save> restore - { dup //restore	% bind even if NOBIND   /LocalFontDirectory .systemvar   FAKEFONTS    { mark		% We want to delete a fake font from the local directory		% iff the global directory now has no definition for it,		% or a non-fake definition.      1 index dup       {		% Stack: lfd mark lfd key ... lfd key value	 length 1 gt	  {		% This is a real local definition; don't do anything.	    pop	  }	  {		% This is a fake local definition, check for global.	    //SharedFontDirectory 1 index .knownget	     {		% A global definition exists, check for fake.	       length 1 eq { pop } { 1 index } ifelse	     }	     {		% No global definition, delete the local one.	       1 index	     }	    ifelse	  }	 ifelse       } forall      pop counttomark 2 idiv { .undef } repeat pop    }   if   //SharedFontDirectory exch .dictcopynew pop   .currentglobal .setglobal	% Rebind FontDirectory according to current VM.   pop } bind odef % ------ Miscellaneous ------ % /undef /.undef load def end				% level2dict