Vous êtes sur la page 1sur 3

% % % % % % % % % % % % % %

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 8954 2008-08-08 04:22:38Z ray $ % 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 systemdict begin % level2dict

/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 level2dict begin % systemdict

% 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 .argindex findfont 1 index dup type /arraytype eq { makefont } { scalefont } ifelse setfont pop pop } stopped { /selectfont .systemvar $error /errorname get signalerror } if } odef % undefinefont has to take local/global VM into account. /undefinefont % <fontname> undefinefont { .FontDirectory 1 .argindex .forceundef % FontDirectory is readonly .currentglobal { % Current mode is global; delete from local directory too. //systemdict /LocalFontDirectory .knownget { 1 index .forceundef } % LocalFontDirectory is readonly 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 } //superexec } % readonly 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 .forcecopynew 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 { .forceundef } repeat pop

% readonly } if //SharedFontDirectory exch .forcecopynew pop .currentglobal .setglobal % Rebind FontDirectory according to current VM. pop } .bind odef end % level2dict

Vous aimerez peut-être aussi