% Copyright (C) 1997, 1999 Aladdin Enterprises. All rights reserved. % % This program is free software; you can redistribute it and/or modify it % under the terms of the GNU General Public License as published by the % Free Software Foundation; either version 2 of the License, or (at your % option) any later version. % % This program is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General % Public License for more details. % % You should have received a copy of the GNU General Public License along % with this program; if not, write to the Free Software Foundation, Inc., % 59 Temple Place, Suite 330, Boston, MA, 02111-1307. % $Id: gs_dps1.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 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 % 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 % .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 % 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 % 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 % 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