123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- % 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 % level2dict
- systemdict 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 % systemdict
- level2dict 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 .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
|