123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- % Copyright (C) 1997, 1999 Aladdin Enterprises. All rights reserved.
- %
- % This file is part of AFPL Ghostscript.
- %
- % AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author or
- % distributor accepts any responsibility for the consequences of using it, or
- % for whether it serves any particular purpose or works at all, unless he or
- % she says so in writing. Refer to the Aladdin Free Public License (the
- % "License") for full details.
- %
- % Every copy of AFPL Ghostscript must include a copy of the License, normally
- % in a plain ASCII text file named PUBLIC. The License grants you the right
- % to copy, modify and redistribute AFPL Ghostscript, but only under certain
- % conditions described in the License. Among other things, the License
- % requires that the copyright notice and this notice be preserved on all
- % copies.
- % $Id: gs_dps1.ps,v 1.2 2000/09/19 18:29:11 lpd 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 % 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 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
|