texlive[70494] Master/tlpkg/tlgs: gs 10.03.0

commits+kakuto at tug.org commits+kakuto at tug.org
Fri Mar 8 02:38:52 CET 2024


Revision: 70494
          https://tug.org/svn/texlive?view=revision&revision=70494
Author:   kakuto
Date:     2024-03-08 02:38:52 +0100 (Fri, 08 Mar 2024)
Log Message:
-----------
gs 10.03.0

Modified Paths:
--------------
    trunk/Master/tlpkg/tlgs/README.TEXLIVE
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cff.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidcm.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_ciddc.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidfm.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidfn.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cmap.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_cspace.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_diskn.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps1.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps2.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_dscp.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_fapi.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_icc.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_img.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_res.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_resmp.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_statd.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_trap.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_ttf.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ42.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps
    trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps
    trunk/Master/tlpkg/tlgs/bin/gsdll64.dll
    trunk/Master/tlpkg/tlgs/bin/gsdll64.lib
    trunk/Master/tlpkg/tlgs/bin/gswin64.exe
    trunk/Master/tlpkg/tlgs/bin/gswin64c.exe
    trunk/Master/tlpkg/tlgs/lib/pdf_info.ps

Modified: trunk/Master/tlpkg/tlgs/README.TEXLIVE
===================================================================
--- trunk/Master/tlpkg/tlgs/README.TEXLIVE	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/README.TEXLIVE	2024-03-08 01:38:52 UTC (rev 70494)
@@ -1,5 +1,5 @@
 
-This directory contains a subset of the Ghostscript 10.02.1 distribution
+This directory contains a subset of the Ghostscript 10.03.0 distribution
 for Windows.  The only purpose of this package is to support programs
 shipped with TeX Live.  It's not intended for general use. 
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -156,7 +156,7 @@
   /marktype 1 index
   /nulltype 1 index
   /booleantype 1 index
-  /nametype { length add } .bind
+  /nametype { length add } .forcebind
   /stringtype 1 index
   /arraytype 0	% replaced below
   /dicttype 0	% replaced below
@@ -163,7 +163,7 @@
 .dicttomark def
 /.cntobj {
   dup type //cntdict exch get exec
-} .bind def
+} .forcebind def
 cntdict /arraytype {
   dup length            % #refs #chars array len
   4 -1 roll add         % #chars array #refs+len
@@ -172,11 +172,11 @@
   } if
   3 1 roll              % #refs+len #chars array
   //.cntobj forall
-} .bind put	% replace arraytype in cntdict
+} .forcebind put	% replace arraytype in cntdict
 
 cntdict /dicttype {
   /writeobject .systemvar /typecheck signalerror
-} bind put
+} .internalbind put
 
 
 /.bosheader {		% <top_length> <total_length> <string8> .bosheader
@@ -198,7 +198,7 @@
   } if
   2 index 3 3 -1 roll put
   1 index 2 3 -1 roll put
-} .bind def
+} .forcebind def
 
 /.writeobjects {	% <file> <tag> <array> .writeobjects -
   % Apply the tag early and forget about it.
@@ -269,7 +269,7 @@
   } for
 
   cleartomark		% Clean up
-} .bind def
+} .forcebind def
 
 /.writeobject {
   3 copy exch
@@ -277,7 +277,7 @@
                 % to avoid a possible invalidaccess.
   .currentglobal //false .setglobal exch 1 array astore exch .setglobal
   //.writeobjects exec pop pop pop
-} .bind def
+} .forcebind def
 
 /printobject {		% <obj> <tag> printobject -
   currentobjectformat 0 eq {
@@ -299,7 +299,7 @@
                 % This is a pseudo-operator so it will restore the stack
                 % if it gets an error.
   mark 0 0 3 .argindex //.cntobj exec cleartomark pop
-} bind def
+} .internalbind def
 /.printerror {
   $error /binary get .languagelevel 2 ge and {
     currentobjectformat 0 ne {
@@ -315,7 +315,7 @@
   }
   //.printerror		% known to be a procedure
   ifelse
-} bind def
+} .internalbind def
 
 currentdict /cntdict .undef
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cff.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cff.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cff.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -52,7 +52,7 @@
   exch 3 -1 roll 1 add 16 mul 12 add sub
   f exch subfilefilter flushfile	% skip to start
   f exch subfilefilter end
-} .bind executeonly odef
+} .forcebind odef
 
 % <file> .init_otto_font_file <file>
 /.init_wOFF_otto_font_file {
@@ -88,7 +88,7 @@
   { exch pop f exch subfilefilter}
   { pop f exch subfilefilter /FlateDecode filter} ifelse
   end
-} bind def
+} .internalbind def
 
 % <file> .loadfontfile -
 /.loadnonottofontfile /.loadfontfile load def
@@ -115,7 +115,7 @@
                 % Not a TrueType font.
     .loadnonottofontfile
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 currentdict /.init_wOFF_otto_font_file .forceundef
 
@@ -125,12 +125,12 @@
 /subfilefilter {	% <file> <length> subfilefilter <filter>
         % SubFileDecode interprets a length of 0 as infinite.
   dup 0 le { pop pop () 0 } if () /SubFileDecode filter
-} bind def
+} .internalbind def
 
 
 /advance {	% <n> advance -
   f cff eq { pos add /pos exch store } { pop } ifelse
-} bind def
+} .internalbind def
 /next {		% - next <byte>
   f read {
     1 advance
@@ -144,7 +144,7 @@
       pdfformaterror
     } if
   } ifelse
-} bind def
+} .internalbind def
 /next2 {	% - next2 <byte1> <byte2>
   f read {
     f read {
@@ -155,7 +155,7 @@
       CFFDEBUG { (  ) print dup = } if
     } ifelse
   } if
-} bind def
+} .internalbind def
 /nextstring {	% <length> nextstring <string>
   dup 0 eq {
     pop ()
@@ -163,7 +163,7 @@
     string f exch readstring pop dup length advance
     CFFDEBUG { (  ) print dup //== exec } if
   } ifelse
-} bind def
+} .internalbind def
 
 /card8		% - card8 <card8>
  /next load
@@ -170,22 +170,22 @@
 def
 /card16 {	% - card16 <card16>
   next2 exch 8 bitshift add
-} bind def
+} .internalbind def
 /card32 {	% - card32 <card32>
   card16 16 bitshift card16 add
-} bind def
+} .internalbind def
 /offsetprocs [
   /card8 load
   /card16 load
-  { card8 16 bitshift card16 add } bind
+  { card8 16 bitshift card16 add } .internalbind
   /card32 load
 ] readonly def
 /offsetproc {	% <offsize> offsetproc <proc>
   1 sub //offsetprocs exch get
-} bind def
+} .internalbind def
 /offset {	% <offsize> offset <offset>
   offsetproc exec
-} bind def
+} .internalbind def
 /sid		% - <sid> sid
   /card16 load
 def
@@ -201,7 +201,7 @@
 % ordinary CFF font.
 /StartData {          % <resname> <nbytes> StartData -
   currentfile exch subfilefilter //false //false ReadData pop
-} bind executeonly def
+} .internalbind def
 /ReadData {           % <resname> <file> <forceresname> <forcecid> ReadData <fontset>
         % Initialize.
 
@@ -236,7 +236,7 @@
   end		% FontSetInit ProcSet
   /FontSet defineresource
 
-} bind executeonly def
+} .internalbind def
 
 % ---------------- Resource category definition ---------------- %
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidcm.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidcm.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidcm.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -57,15 +57,15 @@
 begin
 
   /begincmap {} def
-  /usecmap {pop} bind def
+  /usecmap {pop} .internalbind def
 
-  {stop} bind
+  {stop} .internalbind
   [ /begincodespacerange /endcodespacerange /beginnotdefchar /endnotdefchar
     /beginnotdefrange /endnotdefrange /begincidchar /endcidchar /begincidrange
     /endcidrange /endcmap /usefont /StartData
   ] {
     1 index def
-  } bind forall
+  } .internalbind forall
   pop
 
 currentdict end def
@@ -80,7 +80,7 @@
   } {
     //findresource exec
   } ifelse
-} bind def
+} .internalbind def
 
 % Define procedures for pre-scanning :
 
@@ -100,7 +100,7 @@
   } repeat {
     begin
   } repeat
-} bind def
+} .internalbind def
 
 /PrescanFile {     % - PrescanFile -
   { //.prs_dict /.prsFile get token {
@@ -115,7 +115,7 @@
       stop
     } ifelse
   } loop
-} bind odef
+} .internalbind odef
 
 /GetCIDSystemInfoFromFile { % <file> GetCIDSystemInfoFromFile <CSI>
 
@@ -136,7 +136,7 @@
   //.prs_dict /.prsResult get
   end
   RESMPDEBUG { (cidcm GetCIDSystemInfoFromFile end) = } if
-} bind def
+} .internalbind def
 
 /GetCIDSystemInfo {     % <InstName> <CatName> GetCIDSystemInfo <CSI>
 
@@ -197,7 +197,7 @@
   } ifelse
   end
   RESMPDEBUG { (cidcm GetCIDSystemInfo end) = } if
-} bind def
+} .internalbind def
 
 /IsCompatibleCSI {  % <CSI-M> <CSI-F> IsCompatibleCSI <bool>
 
@@ -240,7 +240,7 @@
     exch pop exch pop                   % bEQ
     exit
   } loop
-} bind def
+} .internalbind def
 
 /IsWellComposed {     % <CIDFontName> <CMapName> IsWellComposed <bool>
 
@@ -258,7 +258,7 @@
   } {
     pop pop //false
   } ifelse
-} bind def
+} .internalbind def
 
 /IsComposedFont {   % <FontName> IsComposedFont <CIDFontName> <CMapName> true
                     % <FontName> IsComposedFont false
@@ -294,7 +294,7 @@
     } for
     pop
   } stopped
-} bind def
+} .internalbind def
 
 /ComposeName { % <CIDFont> <CMap> <scr> ComposeName <CIDFont-CMap>
   dup dup 5 2 roll                        % (scr) (scr) /CIDFont /CMap (scr)
@@ -307,7 +307,7 @@
   exch getinterval                        % (scr) /CMap l1 (scrT)
   3 2 roll exch cvs length                % (scr) l1 l2
   add 0 exch getinterval                  % (CIDFont-CMap)
-} bind def
+} .internalbind def
 
 % Redefine the /Font category with CIDFont-CMap construction :
 
@@ -327,7 +327,7 @@
       //FindResource exec
     } ifelse
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 /ResourceStatus {  % <InstName> ResourceStatus <nStatus> <nSize> true
                    % <InstName> ResourceStatus false
@@ -359,7 +359,7 @@
       //false
     } ifelse
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 /ResourceForAll { % <template> <proc> <scratch> ResourceForAll -
 
@@ -440,7 +440,7 @@
 
   % Make the enumerator and apply it :
   /MappedCategoryRedefiner /ProcSet findresource /MakeResourceEnumerator get exec exec
-} bind executeonly def
+} .internalbind def
 
 currentdict end /Font exch /Category defineresource pop
 end

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_ciddc.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_ciddc.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_ciddc.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -37,7 +37,7 @@
   pop                                         % /ResName
   currentdict end /Decoding                   % /ResName <<inst>> /Decoding
   defineresource pop
-} bind
+} .internalbind
 
 >> /ProcSet defineresource pop
 
@@ -50,33 +50,33 @@
 %----------------ParseCMap_Inverse procset----------------------------
 
 /ParseCMap_Inverse <<
-  /findresource { pop } bind
-  /defineresource { pop pop } bind
+  /findresource { pop } .internalbind
+  /defineresource { pop pop } .internalbind
   /dict {}
-  /def { pop pop } bind
+  /def { pop pop } .internalbind
   /dup //null
-  /begin { pop } bind
+  /begin { pop } .internalbind
   /end {}
   /currentdict //null
   /CMapName //null
-  /usecmap { pop } bind
+  /usecmap { pop } .internalbind
   /begincmap {}
   /endcmap {}
-  /begincodespacerange { pop mark } bind
-  /endcodespacerange { cleartomark } bind
-  /beginnotdefrange { pop mark } bind
-  /endnotdefrange { cleartomark } bind
-  /beginbfchar { pop mark } bind
-  /endbfchar { pop mark } bind
+  /begincodespacerange { pop mark } .internalbind
+  /endcodespacerange { cleartomark } .internalbind
+  /beginnotdefrange { pop mark } .internalbind
+  /endnotdefrange { cleartomark } .internalbind
+  /beginbfchar { pop mark } .internalbind
+  /endbfchar { pop mark } .internalbind
   /beginbfrange { begincidrange }
   /endbfrange { endcidrange }
   /begincidchar { beginbfchar }
   /endcidchar { endbfchar }
-  /begincidrange { pop mark } bind
-  /endcidrange  { cleartomark } bind
+  /begincidrange { pop mark } .internalbind
+  /endcidrange  { cleartomark } .internalbind
 >>  % Just keep it on stack for a while.
 
-% Now we define another dict for local binding, than merge it with the previous one :
+% Now we define another dict for local .internalbinding, than merge it with the previous one :
 dup length 5 add dict begin
 
   /.Ranges 40 dict def % Key = CID/256, value = array of 256 integer codes.
@@ -84,7 +84,7 @@
 
   /.StringToInt     % <string> .StringToInt <integer>
   { 0 exch { exch 8 bitshift add } forall
-  } bind def
+  } .internalbind def
 
   /.SetCouple    % <I> <b> .SetCouple -
   { exch                                    % b I
@@ -111,7 +111,7 @@
     } {
       pop 3 2 roll put                      %
     } ifelse
-  } bind def
+  } .internalbind def
 
   /endcidrange
   { % Writes the inversed CMap to .Ranges
@@ -131,13 +131,13 @@
       pop
     } repeat
     pop % mark
-  } bind def
+  } .internalbind def
 
   /.GetCIDDecoding         % - .GetCIDDEcoding <dict>
   { //.Ranges dup length dict copy
     //.Ranges //.PurgeDict exec
     //.Ranges /CIDCount 0 put
-  } bind def
+  } .internalbind def
 
 currentdict end
 exch copy % Merge the dicts - see above.
@@ -204,7 +204,7 @@
     exch pop begin                                   %
     .GetCIDDecoding
     end
-  } bind executeonly def
+  } .internalbind def
 
   /FindResource      % <name> FindResource <dict>
   { currentglobal exch                               % bGlobal /InstName
@@ -212,7 +212,7 @@
     dup //.MakeInstance exec                         % bGlobal /InstName <Inst>
     DefineResource                                   % bGlobal <Inst>
     exch setglobal                                   % <Inst>
-  } bind executeonly def
+  } .internalbind def
 
 currentdict end
 /CIDDecoding exch /Category defineresource pop

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidfm.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidfm.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidfm.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -26,7 +26,7 @@
 { % Only for client's needs.
   dup type /stringtype eq exch
   dup type /nametype eq 3 -1 roll or
-} bind def
+} .internalbind def
 
 /RecordVirtualMethods 3 dict begin
 
@@ -42,7 +42,7 @@
 
     dup length dict copy                    % /Name <<CIDFont>>
     1 index ResourceStatus pop exch pop     % /Name <<CIDFont>> size
-  } bind def
+  } .internalbind def
 
   /GetFilePath  % <scratch> <Name> <record> GetFilePath <filepath>
   { % We know that currentdict is the category.
@@ -51,7 +51,7 @@
     {
       exch ResourceFileName
     } if
-  } bind def
+  } .internalbind def
 
   /GetSize   % <Name> <record> GetSize <size>
   { % We know that currentdict is the category.
@@ -69,7 +69,7 @@
         /undefinedresource signalerror
       } ifelse
     }ifelse
-  } bind def
+  } .internalbind def
 
   /GetCSI   % <record> GetCSI null
             % <record> GetCSI dict
@@ -87,11 +87,11 @@
       GetCIDSystemInfoFromMap
     } ifelse
     RESMPDEBUG { (cidfm GetCSI end ) print dup = } if
-  } bind def
+  } .internalbind def
 
   /IsActive % <record> IsActive <bool>
   { pop //true
-  } bind def
+  } .internalbind def
 
 currentdict end def
 
@@ -142,7 +142,7 @@
 /.splitdirname {
   (/) rsearch { //true } { (\\) rsearch } ifelse
   {exch concatstrings exch pop //true}{//false} ifelse
-} bind def
+} .internalbind def
 
 % <file> .addcidfmappath -
 /.addcidfmpermitpath
@@ -152,7 +152,7 @@
     //.splitdirname exec
     {dup def} if
   } if
-} bind def
+} .internalbind def
 
 /VerifyMap  % <raw_map> VerifyMap -
 {
@@ -256,7 +256,7 @@
     } loop
   } loop
   pop pop
-} bind def
+} .internalbind def
 
 currentdict /.splitdirname undef
 currentdict /.addcidfmpermitpath undef
@@ -273,7 +273,7 @@
   } {
     //false
   } ifelse
-} bind def
+} .internalbind def
 
 currentdict end
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidfn.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidfn.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidfn.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -29,7 +29,7 @@
   } {
     1 index /FontType 3 -1 roll put //true
   } ifelse
-} bind def
+} .internalbind def
 
 /.cidfonttypes where { pop } { /.cidfonttypes 6 dict def } ifelse
 .cidfonttypes
@@ -45,7 +45,7 @@
        dup length string copy
        exch setglobal
    } ifelse
-} bind def
+} .internalbind def
 
 % The key in .cidfonttypes is the CIDFontType value;
 % the value is a procedure that takes a font name and the CIDFont dictionary
@@ -112,7 +112,7 @@
     } ifelse
   } forall
   3 -1 roll setglobal
-} bind def
+} .internalbind def
 
 % Read some Subrs for the current Type 1 subfont.
 % The subfont's Private dict is currentdict; the CIDFont itself is the
@@ -123,7 +123,7 @@
     dup SDBytes .readint exch SDBytes add SDBytes .readint
     1 index sub string ReadString 2 index 3 1 roll put
   } for
-} bind def
+} .internalbind def
 
 % Ensure that all the Subrs for the current Type 1 subfont are loaded.
 % The subfont's Private dict is currentdict; the CIDFont itself is the
@@ -145,7 +145,7 @@
     } ifelse
     Subrs copy pop
   } if
-} bind def
+} .internalbind def
 
 % ------ CIDFontType 1 (FontType 10) ------ %
 
@@ -230,7 +230,7 @@
   CIDFontName currentdict /CIDFont defineresource pop
   end			% CID font dict
   end			% resource category dict
-} bind def
+} .internalbind def
 
 % Some Adobe fonts include the line
 %   /Setup /cid_Setup load def
@@ -252,7 +252,7 @@
         % Read from a string or an array of strings.
     GlyphData .stringsreadstring
   } ifelse
-} bind def
+} .internalbind def
 /.stringsreadstring	% <pos> <string> <strings> .stringsreadstring
                         %   <vmstring>
 { dup type /stringtype eq
@@ -282,17 +282,17 @@
      ifelse
    }
   ifelse
-} bind def
+} .internalbind def
 
 % Interpret a byte string as a (big-endian) integer.
 /.cvbsi			% <bytes> .cvbsi <int>
 { 0 exch { exch 8 bitshift add } forall
-} bind def
+} .internalbind def
 
 % Read an integer from binary data.
 /.readint		% <pos> <nbytes> .readint <int>
 { string ReadString .cvbsi
-} bind def
+} .internalbind def
 
 currentdict end
 
@@ -303,7 +303,7 @@
 /.readglyphdata {
   currentfont exch .type9mapcid
   FDArray exch get exch
-} bind executeonly def
+} .internalbind executeonly def
 
 % BuildGlyph procedure for CIDFontType 0.
 % The name %Type9BuildGlyph is known to the interpreter.
@@ -323,7 +323,7 @@
   } ifelse	%**** WRONG ****
   end
   .setglobal
-} bind executeonly def
+} .internalbind executeonly def
 
 % ------ CIDFontType 2 ------ %
 
@@ -336,7 +336,7 @@
   } if
                         % Stack: cidfont cid glyphindex
   1 index exch .type42execchar
-} bind executeonly def
+} .internalbind executeonly def
 
 % ---------------- Define resources ---------------- %
 
@@ -367,7 +367,7 @@
     /ProvideUnicodeDecoding get exec
   } if
   dup /CIDFontType get //.cidfonttypes exch get exec
-} bind executeonly odef
+} .internalbind executeonly odef
 
 /CIDFont /Generic /Category findresource dup length dict .copydict
 dup /InstanceType /dicttype put
@@ -389,7 +389,7 @@
   } {
     dup /undefinedresource signalerror
   } ifelse
-} bind def
+} .internalbind def
 dup /.LoadResource {
   currentglobal {
     //.loadcidfontresource exec
@@ -396,7 +396,7 @@
   } {
     //true setglobal {//.loadcidfontresource exec} stopped //false setglobal {stop} if
   } ifelse
-} bind put
+} .internalbind put
 
 /Category defineresource pop
 
@@ -425,7 +425,7 @@
       //false
     } ifelse
   } ifelse
-} bind put
+} .internalbind put
 /Category defineresource pop
 
 .setlanguagelevel

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cidtt.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -52,7 +52,7 @@
     % Now fill it :
     Decoding TT_cmap SubstNWP GDBytes CIDMap .fillCIDMap
   currentdict end
-} bind def
+} .internalbind def
 
 /GenerateIdentityCIDMap   % <font> GenerateCIDMap <font>
 { begin
@@ -59,7 +59,7 @@
     /CIDMap [ 44000 string 44000 string 44000 string] def
     CIDMap .fillIdentityCIDMap
   currentdict end
-} bind def
+} .internalbind def
 
 /load_sfnts  % <FontDict> load_sfnts <FontDict>
 { % Read the True Type file from the path /Path, and buld /sfnts,
@@ -104,7 +104,7 @@
     //ChooseDecoding exec                                  % <font>
     //GenerateCIDMap exec                                  % <font>
   } ifelse
-} bind def
+} .internalbind def
 
 %-----------TrueType-specific methods for category redefinition : -----------
 
@@ -129,7 +129,7 @@
     } ifelse
   } ifelse
   end
-} bind def
+} .internalbind def
 
 /complete_instance  % <font_name> <FontDict> <Options> complete_FAPI_Font <font_name> <FontDict>
 { 1 index /CIDFontType 2 put % Other types are not emulated yet.
@@ -136,7 +136,7 @@
   //super.complete_instance exec
   //RefinePath exec
   //load_sfnts exec
-} bind def
+} .internalbind def
 
 /ValidFileTypes
 <<
@@ -147,13 +147,13 @@
 /IsMyRecord      % <raw_record> -> <raw_record> bool
 {
   dup type /dicttype eq { dup /FileType .knownget { //ValidFileTypes exch known } { //false } ifelse } { //false } ifelse
-} bind def
+} .internalbind def
 
 currentdict /ValidFileTypes undef
 
 /IsActive       % <record> IsActive <bool>
 { pop //true
-} bind def
+} .internalbind def
 
 /CIDFontRecordVirtualMethods //RecordVirtualMethodsStub dup length 3 add dict copy begin
   /GetCSI //TranslateCSI def
@@ -163,7 +163,7 @@
     //CIDFontOptions //complete_instance exec
     2 copy //GetSize exec
     4 3 roll setglobal
-  } bind def
+  } .internalbind def
 currentdict end def
 
 % Redefine the /CIDFont category :
@@ -170,13 +170,13 @@
 4 dict begin
   /CategoryName /CIDFont def
   /IsMapFileOptional //true def
-  /VerifyMap  { pop } bind def
+  /VerifyMap  { pop } .internalbind def
   /PreprocessRecord  % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
   { //IsMyRecord exec dup {
       pop dup /RecordVirtualMethods //CIDFontRecordVirtualMethods put
       //true
     } if
-  } bind def
+  } .internalbind def
 currentdict end
 
 /MappedCategoryRedefiner /ProcSet findresource /Redefine get exec

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cmap.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cmap.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cmap.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -44,7 +44,7 @@
   } if
   pop
   CMAPDEBUG { (...FINISHED...\n) print } if
-} bind def
+} .internalbind def
 
 /.composefontdict {		% <name> <cmap|cmapname> <fonts> composefont <name> <font_dict>
   10 dict begin
@@ -74,13 +74,13 @@
     CMap /WMode .knownget { /WMode exch def } if
     /FontType 0 def
   pop pop currentdict end
-} bind executeonly odef
+} .internalbind odef
 
 % composefont doesn't appear in CMap files -- it's documented in
 % the "PostScript Language Reference Manual Supplement".
 /composefont {		% <name> <cmap|cmapname> <fonts> composefont <font>
   .composefontdict /Font defineresource
-} bind def
+} .internalbind def
 
 % ---------------- CMap operators ---------------- %
 
@@ -115,7 +115,7 @@
   /.FontIndex 0 def
   /.TempMaps [20 dict 50 dict 50 dict] def
   /CodeMap //null def		% for .buildcmap
-} bind def
+} .internalbind def
 
 /endcmap {		% - endcmap -
   //.rewriteTempMapsNotDef exec
@@ -154,7 +154,7 @@
 
   currentdict /.TempMaps undef
   /FontMatrices FontMatrices .endmap def
-} bind def
+} .internalbind def
 
 /.endmap {		% <map> .endmap <map>
   dup type /arraytype eq {
@@ -168,20 +168,20 @@
   } {
     dup type /stringtype eq { readonly } if
   } ifelse
-} bind def
+} .internalbind def
 
 /.appendmap {		% -mark- <elt> ... <array#> .appendmap -
   .TempMaps exch get counttomark 1 add 1 roll
   ] 1 index length exch put
-} bind def
+} .internalbind def
 
 /begincodespacerange {	% <count> begincodespacerange -
   pop mark
-} bind def
+} .internalbind def
 
 /endcodespacerange {	% <code_lo> <code_hi> ... endcodespacerange -
   0 .appendmap
-} bind def
+} .internalbind def
 
 /usecmap {		% <CMap_name> usecmap -
   /CMap findresource dup
@@ -188,11 +188,11 @@
                 % Copy the top level of .CodeMapData
   /.CodeMapData exch /.CodeMapData get copyarray def
   /FontMatrices exch /FontMatrices get copyarray def
-} bind def
+} .internalbind def
 
 /usefont {		% <fontID> usefont -
   /.FontIndex exch def
-} bind def
+} .internalbind def
 
 /beginusematrix {	% <fontID> beginusematrix -
   FontMatrices wcheck not FontMatrices length 2 index le or {
@@ -200,11 +200,11 @@
     dup 0 FontMatrices putinterval
     /FontMatrices exch def
   } if
-} bind def
+} .internalbind def
 
 /endusematrix {		% <matrix> endusematrix -
   FontMatrices 3 1 roll put
-} bind def
+} .internalbind def
 
 % ------ Rearranged font operators ------ %
 
@@ -213,17 +213,17 @@
   /.FontNames exch def
   /.FontName exch def
   begincmap
-} bind def
+} .internalbind def
 /endrearrangedfont {	% - endrearrangedfont -
   (REARRANGED FONTS NOT IMPLEMENTED YET.) = flush
   .FontName .FontNames 0 get findfont end definefont pop
-} bind def
+} .internalbind def
 
 % ------ Character name/code selector operators ------ %
 
 /beginbfchar {		% <count> beginbfchar -
   pop mark
-} bind def
+} .internalbind def
 /endbfchar {		% [ <code> <to_code|charname> ... endbfchar
   ] [ //true  % [<da><ta>] [ true
   3 -1 roll   % [ true [<da><ta>]
@@ -237,11 +237,11 @@
   } forall
   pop
   1 .appendmap
-} bind def
+} .internalbind def
 
 /beginbfrange {		% <count> beginbfrange -
   pop mark
-} bind def
+} .internalbind def
 /endbfrange {		% <code_lo> <code_hi> <to_code|(charname*)> ...
                         %   endbfrange -
   ] [ 0        % [<da><ta><set>] [ 0
@@ -273,12 +273,12 @@
   } forall
   pop
   1 .appendmap
-} bind def
+} .internalbind def
 
 /.addbfchar {		% <code> <to_code|charname> .addbfchar
                         %   <prefix> <params> <key> <value> <font_index>
   1 index exch .addbfrange
-} bind def
+} .internalbind def
 /.addbfrange {		% <code_lo> <code_hi> <to_code|charname>
                         %   .addbfrange <<same as .addbfchar>>
   4 string dup 3
@@ -304,23 +304,23 @@
     3 -1 roll
   } ifelse
   .FontIndex
-} bind def
+} .internalbind def
 
 % ------ CID selector operators ------ %
 
 /begincidchar {		% <count> begincidchar -
   pop mark
-} bind def
+} .internalbind def
 /endcidchar {		% <code> <cid> ... endcidchar -
   1 .endmapchars
-} bind def
+} .internalbind def
 
 /begincidrange {	% <count> begincidrange -
   pop mark
-} bind def
+} .internalbind def
 /endcidrange {		% <code_lo> <code_hi> <cid_base> ... endcidrange -
   1 .endmapranges
-} bind def
+} .internalbind def
 
 /.endmapchars {         % -mark- <code> <cid> ... <map#> .endmapchars -
   counttomark 1 add 1 roll
@@ -390,7 +390,7 @@
     } if
   } repeat
   counttomark 2 add -1 roll .appendmap
-} bind def
+} .internalbind def
 
 /.endmapranges {	% -mark- <code_lo> <code_hi> <cid_base> ... <map#>
                         %   .endmapranges -
@@ -496,29 +496,29 @@
      } if % end of 2 (or more) ranges
   } repeat
   counttomark 2 add -1 roll .appendmap
-} bind def
+} .internalbind def
 
 /.endmapvalue {		% <cid> .endmapvalue (hi,lo) .FontIndex
   2 string dup 0 3 index -8 bitshift put	% value
   dup 1 4 -1 roll 255 and put
   .FontIndex		% font_index
-} bind def
+} .internalbind def
 
 % ------ notdef operators ------ %
 
 /beginnotdefchar {	% <count> beginnotdefchar -
   pop mark
-} bind def
+} .internalbind def
 /endnotdefchar {	% <code> <cid> ... endnotdefchar -
   2 .endmapchars
-} bind def
+} .internalbind def
 
 /beginnotdefrange {	% <count> beginnotdefrange -
   pop mark
-} bind def
+} .internalbind def
 /endnotdefrange {	% <code_lo> <code_hi> <cid> ... endnotdefrange -
   2 .endmapranges
-} bind def
+} .internalbind def
 
 % ---------------- Resource category definition ---------------- %
 
@@ -553,7 +553,7 @@
   } if
   dup /CodeMap .knownget { //null eq { .buildcmap } if } if
   /Generic /Category findresource /DefineResource get exec
-} bind executeonly put
+} .internalbind put
 /Category defineresource pop
         % We might have loaded CID font support already.
 /CIDInit /ProcSet 2 copy { findresource } //.internalstopped exec

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_cspace.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_cspace.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_cspace.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -105,7 +105,7 @@
     } stopped
     {cleartomark}if
   } ifelse
-}bind def
+}.internalbind def
 
 end
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_diskn.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_diskn.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_diskn.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -53,7 +53,7 @@
     exch .setglobal
   } executeonly
   if
-} .bind executeonly odef % must be bound and hidden for .forceput
+} .forcebind odef % must be bound and hidden for .forceput
 
 % Modify .putdevparams to force regeneration of .searchabledevs list
 /.putdevparams {
@@ -61,7 +61,7 @@
   % doesn't get run enough to justify the complication
   //.putdevparams
   //systemdict /.searchabledevs .forceundef
-} .bind executeonly odef % must be bound and hidden for .forceundef
+} .forcebind odef % must be bound and hidden for .forceundef
 
 % ------ extend filenameforall to handle wildcards in %dev% part of pattern -------%
 /filenameforall {
@@ -144,7 +144,7 @@
     //file
   }
   if
-} bind odef
+} .internalbind odef
 
 % redefine deletefile to search all devices in order
 /deletefile {
@@ -158,7 +158,7 @@
   }
   forall
   not { $error /errorname get /deletefile .systemvar exch signalerror } if
-} bind odef
+} .internalbind odef
 
 % redefine status to search all devices in order
 /status {
@@ -180,7 +180,7 @@
     //status
   }
   ifelse
-} bind odef
+} .internalbind odef
 
 % Also redefine renamefile to search all devices in order
 /renamefile {
@@ -198,7 +198,7 @@
   not { $error /errorname get /renamefile .systemvar exch signalerror } if
   3 -1 roll concatstrings exch
   //renamefile
-} bind odef
+} .internalbind odef
 
 % redefine devforall to process devices in numeric order
 % Spec's for 'devforall' are unclear, but font downloaders may expect this

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps1.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps1.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps1.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -21,7 +21,7 @@
 % ------ Virtual memory ------ %
 
 /currentshared /.currentglobal load def
-/scheck {.gcheck} bind odef
+/scheck {.gcheck} .internalbind odef
 %****** FOLLOWING IS WRONG ******
 /shareddict currentdict /globaldict .knownget not { 20 dict } if def
 
@@ -58,7 +58,7 @@
     { //SharedFontDirectory }
     { /LocalFontDirectory .systemvar }	% can't embed ref to local VM
    ifelse .forceput pop	% LocalFontDirectory is local, systemdict is global
- } .bind executeonly odef
+ } .forcebind odef
 % Don't just copy (load) the definition of .setglobal:
 % it gets redefined for LL3.
 /setshared { /.setglobal .systemvar exec } odef
@@ -95,7 +95,7 @@
       if
     }
    ifelse pop
- } .bind odef
+ } .forcebind odef
 
 % If we load a font into global VM within an inner save, the restore
 % will delete it from FontDirectory but not from SharedFontDirectory.
@@ -136,6 +136,6 @@
    //SharedFontDirectory exch .forcecopynew pop
    .currentglobal .setglobal	% Rebind FontDirectory according to current VM.
    pop
- } .bind odef
+ } .forcebind odef
 
 end				% level2dict

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps2.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps2.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps2.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -28,7 +28,7 @@
 
 /.makestackdict
         { { counttomark -1 roll } forall .dicttomark
-        } bind def
+        } .internalbind def
 /currenthalftone		% - currenthalftone <dict>
         { mark .currenthalftone
            { { exch pop }		% halftone
@@ -63,7 +63,7 @@
     counttomark 2 roll
   } forall pop pop
   /Default 1 index .dicttomark exch pop { .sethalftone5 }
-} bind def
+} .internalbind def
 
 % The value of each entry in .halftonetypes is a procedure:
 %	<setdict> <htdict> <<proc>> <setdict'> <htdict'> <sethalftoneproc>
@@ -74,7 +74,7 @@
 15 dict /.halftonetypes 1 index def begin
   1 {
     mark exch /Default exch .dicttomark { .sethalftone5 }
-  } bind def
+  } .internalbind def
   2 {
     1 { /Frequency /Angle /SpotFunction } {
       /RedFrequency /RedAngle /RedSpotFunction
@@ -82,10 +82,10 @@
       /BlueFrequency /BlueAngle /BlueSpotFunction
       /GrayFrequency /GrayAngle /GraySpotFunction
     } //.makehalftoneRGBV exec
-  } bind def
+  } .internalbind def
   3 {
     mark exch /Default exch .dicttomark { .sethalftone5 }
-  } bind def
+  } .internalbind def
   4 {
     3 { /Width /Height /Thresholds } {
       /RedWidth /RedHeight /RedThresholds
@@ -93,7 +93,7 @@
       /BlueWidth /BlueHeight /BlueThresholds
       /GrayWidth /GrayHeight /GrayThresholds
     } //.makehalftoneRGBV exec
-  } bind def
+  } .internalbind def
   5 {
     pop dup length dict copy
     mark 1 index {
@@ -114,7 +114,7 @@
         pop
       } ifelse
     } forall .dicttomark { .sethalftone5 }
-  } bind def
+  } .internalbind def
 end
 end
 currentdict /.makehalftoneRGBV undef
@@ -132,7 +132,7 @@
   } if
   exec exec
   .setglobal pop
-} .bind odef
+} .forcebind odef
 % Redefine setscreen and setcolorscreen to recognize halftone dictionaries,
 % and to insert the Frequency and Angle into Type 1 halftones, per
 % Adobe TN 5085.
@@ -145,19 +145,19 @@
       languagelevel 3 ge { dup /AccurateScreens dup getuserparam put } if
     }
    if
- } bind def
+ } .internalbind def
 /setscreen		% <ignore*2> <dict> setscreen -
         { dup type /dicttype eq
            { //.fixsethalftonescreen exec sethalftone pop pop pop }
            { //setscreen }
           ifelse
-        } .bind odef
+        } .forcebind odef
 /setcolorscreen		% <ignore*11> <dict> setcolorscreen -
         { dup type /dicttype eq
            { //.fixsethalftonescreen exec sethalftone 12 { pop } repeat }
            { //setcolorscreen }
           ifelse
-        } .bind odef
+        } .forcebind odef
 currentdict /.fixsethalftonescreen undef
 
 % Redefine currentscreen and currentcolorscreen to extract the Frequency
@@ -167,7 +167,7 @@
     { dup /Frequency get 1 index /Angle get }
     { 60.0 0.0 }	% Adobe returns these as reals
    ifelse 3 2 roll
- } bind def
+ } .internalbind def
 /currentscreen		% - currentscreen 60 0 <dict>
         { .currenthalftone
            { { //.fixcurrenthalftonescreen exec }% halftone
@@ -196,7 +196,7 @@
 
 /.UserObjects {
   .userdict /UserObjects
-} bind executeonly odef
+} .internalbind odef
 % In order to get proper error recovery behavior, we need to be careful
 % not to pop any operands from the stack until we're done.
 % The code below faithfully duplicates the apparent array-growing
@@ -220,7 +220,7 @@
     .UserObjects 3 .argindex 1 add 10 .max .localvmarray put
   } ifelse
   .UserObjects get 2 .argindex 2 index put pop pop
-} .bind odef
+} .forcebind odef
 /execuserobject {		% <index> execuserobject -
   dup type /integertype ne {
     % Adobe validates the argument before accessing UserObjects - CET 31-03
@@ -227,7 +227,7 @@
     /execuserobject .systemvar /typecheck signalerror
   } if
   .UserObjects get 1 .argindex get exch pop exec
-} .bind odef
+} .forcebind odef
 /undefineuserobject {		% <index> undefineuserobject -
   dup type /integertype ne {
     % Adobe validates the argument before accessing UserObjects - CET 31-11
@@ -234,7 +234,7 @@
     /undefineuserobject .systemvar /typecheck signalerror
   } if
   .UserObjects get 1 .argindex //null put pop
-} .bind odef
+} .forcebind odef
 currentdict /.UserObjects undef
 
 % ------ Cache control ------ %

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_dscp.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_dscp.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_dscp.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -21,18 +21,18 @@
   dup 0 ge {
     << /Orientation 2 index >> setpagedevice
   } if pop
-} bind def
+} .internalbind def
 
 % This dictionary contains local handlers for DSC comments.
 % See header in zdscpars.c for more information.
 % <dsc_dict> handler <dsc_dict>
 /DSCparseprocs mark
-   /Orientation { dup /Orientation get send_orientation } bind
+   /Orientation { dup /Orientation get send_orientation } .internalbind
    /PageOrientation { dup /PageOrientation .knownget { send_orientation }
                       { dup /Orientation .knownget { send_orientation } if }
-                      ifelse } bind
-   /Page { dup /Orientation .knownget { send_orientation } if } bind
-   /NOP { } bind
+                      ifelse } .internalbind
+   /Page { dup /Orientation .knownget { send_orientation } if } .internalbind
+   /NOP { } .internalbind
 .dicttomark readonly def
 
 % This procedure is called whenever a DSC comment is found by the interpreter
@@ -54,7 +54,7 @@
     } if
   } if
   pop pop				% remove file, dict
-} bind def
+} .internalbind def
 
 % Check whether the currently installed parser is the one defined in this file.
 /.using_parse_dsc {			% - .using_parse_dsc <proc> <using?>
@@ -65,9 +65,9 @@
   } {
     //false
   } ifelse
-} bind def
+} .internalbind def
 
-% Establish a binding for dsc_dict.
+% Establish a .internalbinding for dsc_dict.
 userdict /dsc_dict //null put
 
 % - dsc_init -
@@ -88,13 +88,13 @@
   } ifelse
   setglobal
   /do_parse_dsc //true def
-} bind def
+} .internalbind def
 
 % Enable the DSC parser defined in this file.
 % - enable_dsc -
 /enable_dsc {
   dsc_init
-} bind def
+} .internalbind def
 
 % Disable the DSC parser defined in this file.
 % - disable_dsc -
@@ -112,4 +112,4 @@
   } ifelse
         % If we couldn't restore the old parser, at least disable ours.
   /do_parse_dsc //false def
-} bind def
+} .internalbind def

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -32,7 +32,7 @@
 /EPSBoundingBoxString () def	% set if either BoundingBox is seen (even if invalid)
 /EPSBoundingBoxSetState {
   //systemdict /EPSBoundingBoxState 3 -1 roll .forceput
-} .bind executeonly odef % .forceput must be bound and hidden
+} .forcebind odef % .forceput must be bound and hidden
 
 % Parse 4 numbers for a bounding box
 /EPSBoundingBoxParse { % (llx lly urx ury) -- llx lly urx ury true OR false
@@ -45,7 +45,7 @@
     } {
       cleartomark //false
     } ifelse
-} bind executeonly odef
+} .internalbind odef
 
 % Crop the page to the BoundingBox
 /EPSBoundingBoxCrop { % llx lly urx ury --
@@ -55,7 +55,7 @@
   exch 3 index sub exch 2 index sub % stack: llx lly urx-llx ury-lly
   << /PageSize [ 5 -2 roll ] >> setpagedevice
   neg exch neg exch translate
-} bind executeonly odef
+} .internalbind odef
 
 % Rescale, translate and rotate to fit the BoundingBox on the page
 /EPSBoundingBoxFitPage { % llx lly urx ury --
@@ -113,7 +113,7 @@
   % Center the document
   neg exch neg exch translate
 
-} bind executeonly odef
+} .internalbind odef
 
 /EPSBoundingBoxProcess { % (llx lly urx ury) state --
   % The following 'lt' check prioritzies HiResBoundingBox over BoundingBox
@@ -160,7 +160,7 @@
   } {
     pop pop
   } ifelse
-} bind executeonly odef
+} .internalbind odef
 
 % Perform anchorsearch on the strings in the array until a match is found.
 /anchorsearchforany { % haystack [needle1 ...] --> post needle true
@@ -180,7 +180,7 @@
       } ifelse
     } forall
     exch              % haystack false | post needle true
-} bind def
+} .internalbind def
 
 /ProcessEPSComment { % file comment --  file comment
   /EPSBoundingBoxState .systemvar 3 lt {
@@ -254,7 +254,7 @@
       } ifelse
     } ifelse
   } if
-} bind executeonly def
+} .internalbind def
 
 % Install EPS handler for DSC comments, which we do later
 /EPSBoundingBoxInit {
@@ -266,7 +266,7 @@
     4 array astore cvx readonly
     << /ProcessDSCComment 3 -1 roll >> setuserparams
   } if
-} bind executeonly odef
+} .internalbind odef
 
 
 /.runNoEPS /run load def
@@ -284,7 +284,7 @@
   count runEPS_op_count sub {pop} repeat
   countdictstack runEPS_dict_count sub {end} repeat
   runEPS_save restore
-} bind executeonly odef
+} .internalbind odef
 
 /run { % file OR string --
   dup type /filetype ne { (r) file } if
@@ -319,7 +319,7 @@
     pop
     cvx //.runNoEPS
   } ifelse
-} bind odef
+} .internalbind odef
 
 % Handle DOS EPS files.
 
@@ -359,7 +359,7 @@
 userdict begin
 /.runstdin {
   { (%stdin) run } execute0
-} bind def
+} .internalbind def
 end
 
 % undefine things defined in this file and not referenced elsewhere

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_fapi.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_fapi.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_fapi.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -51,7 +51,7 @@
   % dup mark eq {
   %   pop //true
   % } if
-} bind def
+} .internalbind def
 
 %----------------------------- Process FAPIconfig -----------------------
 
@@ -170,20 +170,20 @@
   } if
   def
   currentdict end
-} bind def
+} .internalbind def
 
 /complete_instance  % <font_name> <FontDict> <Options> complete_FAPI_Font <font_name> <FontDict>
 { //super.complete_instance exec
   dup /CIDFontName known { /CIDFontPath } { /FontPath } ifelse //RefinePath exec
-} bind def
+} .internalbind def
 
 /IsMyRecord      % <raw_record> -> <raw_record> bool
 { dup type /dicttype eq { dup /FAPI known } { //false } ifelse
-} bind def
+} .internalbind def
 
 /IsActive       % <record> IsActive <bool>
 { pop //is_device_compatible_to_FAPI exec
-} bind def
+} .internalbind def
 
 /FontRecordVirtualMethods //RecordVirtualMethodsStub dup length 2 add dict copy begin
   /IsActive //IsActive def
@@ -192,7 +192,7 @@
     //FontOptions //complete_instance exec
     2 copy //GetSize exec
     4 3 roll setglobal
-  } bind def
+  } .internalbind def
 currentdict end def
 
 /CIDFontRecordVirtualMethods //RecordVirtualMethodsStub dup length 3 add dict copy begin
@@ -203,7 +203,7 @@
     //CIDFontOptions //complete_instance exec
     2 copy //GetSize exec
     4 3 roll setglobal
-  } bind def
+  } .internalbind def
 currentdict end def
 
 /ReadFCOfontmap:   % <path> ReadFCOfontmap: name dict ...
@@ -283,7 +283,7 @@
     } ifelse
   } loop
   currentdict /fontfile undef
-} bind def
+} .internalbind def
 
 %----------------------------------The Redefintion---------------------
 
@@ -293,13 +293,13 @@
 4 dict begin
   /CategoryName /Font def
   /MapFileName systemdict /FAPIfontmap known {/FAPIfontmap .systemvar} {(FAPIfontmap)} ifelse def
-  /VerifyMap  { pop } bind def
+  /VerifyMap  { pop } .internalbind def
   /PreprocessRecord  % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
   { //IsMyRecord exec dup {
       pop dup /RecordVirtualMethods //FontRecordVirtualMethods put
       //true
     } if
-  } bind def
+  } .internalbind def
 currentdict end Redefine
 
 % Redefine the /CIDFont category :
@@ -306,13 +306,13 @@
 4 dict begin
   /CategoryName /CIDFont def
   /MapFileName systemdict /FAPIcidfmap known {/FAPIcidfmap .systemvar} {(FAPIcidfmap)} ifelse def
-  /VerifyMap  { pop } bind def
+  /VerifyMap  { pop } .internalbind def
   /PreprocessRecord  % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
   { //IsMyRecord exec dup {
       pop dup /RecordVirtualMethods //CIDFontRecordVirtualMethods put
       //true
     } if
-  } bind def
+  } .internalbind def
 currentdict end Redefine
 
 %==================== A hook for buildfont* operators ====================
@@ -365,7 +365,7 @@
 { % checks whether execution stack contains packedarray started with /FAPI_hook_disable .
   /FAPI_hook_disable /MappedCategoryRedefiner /ProcSet findresource /execstack_lookup get exec
   //null ne
-} bind def
+} .internalbind def
 
 /FAPIhook_aux  %      <string|name> <font_dict> .FAPIhook <string|name> <font>
 {                                                     % name <<font>>
@@ -416,7 +416,7 @@
     % Remove the plugin request from the font dictionary
     dup /FAPIPlugInReq undef
   } ifelse
-} bind def
+} .internalbind def
 
 /FAPIhook  %      <string|name> <font_dict> .FAPIhook <string|name> <font>
 { //is_device_compatible_to_FAPI exec
@@ -424,33 +424,33 @@
   } {
     { (FAPIhook is disabled for the current device.\n) print flush } //FAPI_hook_debug exec
   } ifelse
-} bind def
+} .internalbind def
 
 % ------------------ Redefine .buildfont* with FAPI : -----------------------
 
 /.buildfont1
 { //.buildfont1 exec //FAPIhook exec
-} bind % 'odef' is below.
+} .internalbind % 'odef' is below.
 
 /.buildfont2
 { //.buildfont2 exec //FAPIhook exec
-} bind % 'odef' is below.
+} .internalbind % 'odef' is below.
 
 /.buildfont42
 { //.buildfont42 exec //FAPIhook exec
-} bind % 'odef' is below.
+} .internalbind % 'odef' is below.
 
 /.buildfont9
 { //.buildfont9 exec //FAPIhook exec
-} bind % 'odef' is below.
+} .internalbind % 'odef' is below.
 
 /.buildfont10
 { //.buildfont10 exec //FAPIhook exec
-} bind % 'odef' is below.
+} .internalbind % 'odef' is below.
 
 /.buildfont11
 { //.buildfont11 exec //FAPIhook exec
-} bind % 'odef' is below.
+} .internalbind % 'odef' is below.
 
 end % the temporary dictionary for local binding.
 odef odef odef odef odef odef

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -53,7 +53,7 @@
     /Encoding findresource
   } if
   /Encoding exch def
-} bind def
+} .internalbind def
 
 /FontOptions 5 dict begin
   /make_procs currentdict def
@@ -70,7 +70,7 @@
     % See gs_fapi.ps
     currentdict /CharStrings known not {/CharStrings << /.notdef () >> def} if
     //FontCommon exec
-  } bind def
+  } .internalbind def
 
   42
   { /FontMatrix [1 0 0 1 0 0] def
@@ -79,7 +79,7 @@
     /sfnts [<00010000 0000 0000 0000 0000 0000>] def
     /GlyphDirectory [] def
     //FontCommon exec
-  } bind def
+  } .internalbind def
 
   %fixme : more font types.
 
@@ -103,7 +103,7 @@
   } ifelse
   end
   RESMPDEBUG { (fntem TranslateCSI end ) = } if
-} bind def
+} .internalbind def
 
 /CIDFontCommon
 { /CIDSystemInfo currentdict //TranslateCSI exec def
@@ -110,7 +110,7 @@
   currentdict /CSI undef
   /FontBBox [-128 -128 1024 1024] def % zfapi.ps refines it.
   /CIDCount 1 def % ChooseDecoding will set a reasonable value.
-} bind def
+} .internalbind def
 
 % GFlyph substitution table for narrow, wide, proportional glyphs -
 % used with TrueTypes.
@@ -204,13 +204,13 @@
     /GlyphDirectory [] def
     /GDBytes 1 def
     /FDBytes 0 def
-  } bind def
+  } .internalbind def
 
   1
   { //CIDFontCommon exec
     /FontMatrix [1 0 0 1 0 0] def
     /BuildGlyph {} def
-  } bind def
+  } .internalbind def
 
   2
   { //CIDFontCommon exec
@@ -220,7 +220,7 @@
     /sfnts [<00010000 0000 0000 0000 0000 0000>] def
     /Encoding [] def
     /CharStrings << /.notdef 0 >> def
-  } bind def
+  } .internalbind def
 
 currentdict end def
 
@@ -239,7 +239,7 @@
   setglobal
   currentdict end
   end
-} bind def
+} .internalbind def
 
 /GetFilePath    % <scratch> <Name> <record> GetFilePath <filepath>
 { exch pop                       % (scratch) <record>
@@ -248,12 +248,12 @@
   % What we make here it is not a complete PS resource.
   % Unable to provide full conformity :
   % the attempt to run this file may fail.
-} bind def
+} .internalbind def
 
 /GetSize        % <Name> <record> GetSize <size>
 { pop pop -1 % Unknown size.
   % fixme: probably we could provide an estimation size for some fonts.
-} bind def
+} .internalbind def
 
 /RecordVirtualMethodsStub 3 dict begin
   /GetFilePath //GetFilePath def
@@ -336,7 +336,7 @@
     } if
     1 index exch /SubstNWP exch put
   } if
-} bind def
+} .internalbind def
 
 /PrintFontRef      % <string|name> <font> PrintFontRef <string|name> <font>
 { dup /FontName known { (Font ) } { (CIDFont ) } ifelse print
@@ -350,7 +350,7 @@
   } {
     pop
   } ifelse
-} bind def
+} .internalbind def
 
 /GetFontType       % <font> GetFontType int
 { dup /CIDFontType .knownget {
@@ -358,7 +358,7 @@
   } {
     /FontType get
   } ifelse
-} bind def
+} .internalbind def
 
 /FindInArray    % <array> <elem> .array_find <bool>
 { //false 3 1 roll
@@ -368,7 +368,7 @@
     } if
   } forall
   pop
-} bind def
+} .internalbind def
 
 /ProvideUnicodeDecoding % <font> ProvideUnicodeDecoding <font>
 {
@@ -411,7 +411,7 @@
     exit
   } executeonly loop
   exch setglobal
-} .bind executeonly odef % must be bound and hidden for .forceput
+} .forcebind odef % must be bound and hidden for .forceput
 
 currentdict end /ProcSet defineresource pop
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -34,7 +34,7 @@
 4 dict begin
 (<<) cvn /mark load def
 (>>) cvn /.dicttomark load def
-/; { 2 index 3 1 roll .growput } bind def
+/; { 2 index 3 1 roll .growput }.internalbind def
 %% Replace 0 (Fontmap)
 end def
 .setlanguagelevel
@@ -54,7 +54,7 @@
 % Define a reliable way of accessing FontDirectory in systemdict.
 /.FontDirectory
 { /FontDirectory .systemvar
-} .bind executeonly odef
+} .forcebind odef
 
 % Define a temporary string for local use, since using =string
 % interferes with some PostScript programs.
@@ -67,13 +67,13 @@
       exch pop exch
     }
    loop
- } bind def
+ }.internalbind def
 
 % <dir.../base.extn> .basename <dir>
 /.splitdirname {
     (/) rsearch { //true } { (\\) rsearch } ifelse
   {exch concatstrings exch pop //true}{//false} ifelse
-} bind def
+}.internalbind def
 
 % <dict> .addfontmappermitpaths
 % As fontmap can contain a *lot* of individual entries
@@ -94,7 +94,7 @@
   } forall
   currentdict end
   {exch pop /PermitFileReading exch .addcontrolpath}forall
-} bind def
+}.internalbind def
 
 defaultfontmap_content length 0 gt
 {defaultfontmap_content .addfontmappermitpaths} if
@@ -110,7 +110,7 @@
    50 dict exch .readFontmap
    dup //.addfontmappermitpaths exec
    { .definefontmap } forall
-} bind def
+}.internalbind def
 /.readFontmap {         % <dict> <file> .readFontmap <dict>
     { dup token not { closefile exit } if
                 % stack: dict file fontname
@@ -159,7 +159,7 @@
        } loop
       } ifelse
     } loop
-} bind def
+}.internalbind def
 % Add an entry in Fontmap.  We redefine this if the Level 2
 % resource machinery is loaded.
 /.definefontmapaux                 % <bool> <fontname> <file|alias> .definefontmapaux -
@@ -207,17 +207,17 @@
       mark 4 -1 roll ] readonly .growput
     }
    ifelse .setglobal
- } bind def
+ }.internalbind def
 
 /.definefontmap                 % <fontname> <file|alias> .definefontmap -
 {
   //false 3 1 roll //.definefontmapaux exec
-} bind def
+}.internalbind def
 
 /.definenativefontmap                 % <fontname> <file|alias> .definenativefontmap -
 {
   //true 3 1 roll //.definefontmapaux exec
-} bind def
+}.internalbind def
 
 % Parse a font file just enough to find the FontName or FontType.
 /.findfontvalue {       % <file> <key> .findfontvalue <value> true
@@ -243,10 +243,10 @@
                 % Stack: key file false
     dup { 4 } { 3 } ifelse -2 roll closefile pop
   } { closefile pop //false } ifelse
-} bind executeonly def
+}.internalbind def
 /.findfontname
  { /FontName .findfontvalue
- } bind def
+ }.internalbind def
 
 % If there is no FONTPATH, try to get one from the environment.
 NOFONTPATH { /FONTPATH () def } if
@@ -259,8 +259,8 @@
 % be replaced in the following section.
 % They are here so immediately evaulation will work, and allow them to
 % undefined at the bottom of the file.
-/.scanfontbegin{} bind def
-/.scanfontdir {} bind def
+/.scanfontbegin{}.internalbind def
+/.scanfontdir {}.internalbind def
 
 FONTPATH length 0 eq { (%END FONTPATH) .skipeof } if
 /FONTPATH [ FONTPATH .pathlist ] def
@@ -288,7 +288,7 @@
      if pop
     }
    for
- } bind def
+ }.internalbind def
 /.splitfilename {       % <dir.../base.extn> .basename <base> <extn>
                 % Make the file name read-only to detect aliasing bugs.
                 % We really don't like doing this, but we've had one
@@ -302,7 +302,7 @@
   } {
     exch dup length 2 index length 1 add sub 0 exch getinterval exch
   } ifelse
-} bind def
+}.internalbind def
 /.scanfontdict 1 dict def               % establish a binding
 /.scanfontbegin
  {      % Construct the table of all file names already in Fontmap.
@@ -322,7 +322,7 @@
     }
    forall
    setglobal
- } bind def
+ }.internalbind def
 /.scanfontskip mark
                 % Strings are converted to names anyway, so....
   /afm //true
@@ -428,7 +428,7 @@
    ifelse
    pop
    setglobal
- } bind executeonly def
+ }.internalbind def
 
 %END FONTPATH
 
@@ -450,7 +450,7 @@
   } executeonly
   {pop}
   ifelse
-} .bind executeonly odef
+} .forcebind odef
 systemdict /NONATIVEFONTMAP known .setnativefontmapbuilt
 /.buildnativefontmap {   % - .buildnativefontmap <bool>
   systemdict /.nativefontmapbuilt .knownget not
@@ -494,7 +494,7 @@
     % record that we've been run
     //true //.setnativefontmapbuilt
   } ifelse
-} bind executeonly odef
+}.internalbind odef
 
 % Create the dictionary that registers the .buildfont procedure
 % (called by definefont) for each FontType.
@@ -522,7 +522,7 @@
     { dup wcheck not { dup maxlength dict .copydict } if
     }
    ifelse
- } bind def
+ }.internalbind def
 /.completefont {
   {             % Check for disabled platform fonts.
       NOPLATFONTS
@@ -574,7 +574,7 @@
       } if
       readonly          % stack: name fontdict
   } stopped { $error /command get /invalidfont signalerror } if
-} bind executeonly odef
+}.internalbind odef
 /definefont
  { dup rcheck not {
       /definefont cvx /invalidaccess signalerror
@@ -592,7 +592,7 @@
                 % If the font originated as a resource, register it.
    currentfile .currentresourcefile eq { dup .registerfont } if
    readonly
- } .bind executeonly odef
+ } .forcebind odef
 
 % Define a procedure for defining aliased fonts.
 % We use this only for explicitly aliased fonts, not substituted fonts:
@@ -644,7 +644,7 @@
     }
    ifelse
    exch setglobal
- } bind executeonly odef         % so findfont will bind it
+ }.internalbind odef         % so findfont will bind it
 
 % Define .loadfontfile for loading a font.  If we recognize Type 1 and/or
 % TrueType fonts, gs_type1.ps and/or gs_ttf.ps will redefine this.
@@ -654,10 +654,10 @@
   userdict begin
     cvx exec
   end
-} bind def
+}.internalbind def
 /.setloadingfont {
    //systemdict /.loadingfont 3 -1 roll .forceput
-} .bind executeonly odef % .forceput must be bound and hidden
+} .forcebind odef % .forceput must be bound and hidden
 /.loadfont
  {              % Some buggy fonts leave extra junk on the stack,
                 % so we have to make a closure that records the stack depth
@@ -669,7 +669,7 @@
      exit
    } loop % this loop is a pattern for execstack_lookup, don't remove !
    //false .setloadingfont
- } bind def
+ }.internalbind def
 
 % Find an alternate font to substitute for an unknown one.
 % We go to some trouble to parse the font name and extract
@@ -750,7 +750,7 @@
   } {
     /stringtype ne { pop () } if
   } ifelse
-} bind def
+}.internalbind def
 
 /.fontnameproperties {          % <int> <string|name> .fontnameproperties
                                 %   <int'>
@@ -764,7 +764,7 @@
       pop pop
     } ifelse
   } forall pop
-} bind def
+}.internalbind def
 /.substitutefamilies mark
   /AvantGarde
     {/AvantGarde-Book /AvantGarde-BookOblique
@@ -792,7 +792,7 @@
 /.nametostring {                % <name> .nametostring <string>
                                 % <other> .nametostring <other>
   dup type /nametype eq { .namestring } if
-} bind def
+}.internalbind def
 
 /.substitutefontname {          % <fontname> <properties> .substitutefontname
                                 %   <altname|null>
@@ -823,7 +823,7 @@
     } ifelse
   } forall pop
   1 index length mod get exec
-} bind executeonly odef
+}.internalbind odef
 /.substitutefont {              % <fontname> .substitutefont <altname>
   dup 0 exch //.fontnameproperties exec .substitutefontname
         % Only accept fonts known in the Fontmap.
@@ -832,7 +832,7 @@
      .nativeFontmap 1 index known not
      {pop defaultfontname } if
    } if
-} bind executeonly odef
+}.internalbind odef
 
 % If requested, make (and recognize) fake entries in FontDirectory for fonts
 % present in Fontmap but not actually loaded.  Thanks to Ray Johnston for
@@ -849,7 +849,7 @@
   } {
     2 copy /FontName get findfont //definefont exch pop exch pop
   } ifelse
-} bind odef
+}.internalbind odef
 
 /scalefont {            % <font> <scale> scalefont <font>
   1 index /FontMatrix known {
@@ -858,7 +858,7 @@
     1 index /FontName get findfont 1 index //scalefont
     exch pop exch pop
   } ifelse
-} bind odef
+}.internalbind odef
 
 /makefont {             % <font> <matrix> makefont <font>
   1 index /FontMatrix known {
@@ -867,7 +867,7 @@
     1 index /FontName get findfont 1 index //makefont
     exch pop exch pop
   } ifelse
-} bind odef
+}.internalbind odef
 
 /setfont {              % <font> setfont -
   dup /FontMatrix known {
@@ -875,7 +875,7 @@
   } {
     dup /FontName get findfont //setfont pop
   } ifelse
-} bind odef
+}.internalbind odef
 
 %END FAKEFONTS
 
@@ -891,10 +891,10 @@
   counttomark 1 sub { .aliasfont } repeat end
                       % <fontname> mark <font>
   exch pop exch pop
-} bind odef
+}.internalbind odef
 /findfont {
   .findfont
-} bind def
+}.internalbind def
 % Check whether the font name we are about to look for is already on the list
 % of aliases we're accumulating; if so, cause an error.
 /.checkalias            % -mark- <alias1> ... <name> .checkalias <<same>>
@@ -908,7 +908,7 @@
       if
     }
    for
- } bind def
+ }.internalbind def
 % Get a (non-fake) font if present in a FontDirectory.
 /.fontknownget          % <fontdir> <fontname> .fontknownget <font> true
                         % <fontdir> <fontname> .fontknownget false
@@ -921,7 +921,7 @@
     { //false
     }
    ifelse
- } bind def
+ }.internalbind def
 % This is the standard procedure for handling font substitution.
 % Its location is per an Adobe newsgroup posting.
 % It is called with the font name on the stack, standing in for findfont.
@@ -953,7 +953,7 @@
         } if
       } ifelse
   /Font findresource
-} bind executeonly def
+}.internalbind def
 
 % Default font substitution does {pop /Courier} om many implementations.
 % GS post-process font substitution in .stdsubstfont and uses {} for
@@ -973,7 +973,7 @@
   } {
     pop //false
   } ifelse
-} bind def
+}.internalbind def
 % Do the work of findfont, including substitution, defaulting, and
 % scanning of FONTPATH.
 /.dofindfont {   %  mark <fontname> .dofindfont % mark <alias> ... <font>
@@ -1020,7 +1020,7 @@
       } ifelse
     } ifelse
   } if
-} bind executeonly def
+}.internalbind def
 
 % any user of .putgstringcopy must use bind and executeonly
 /.putgstringcopy  %   <dict> <name> <string> .putgstringcopy -
@@ -1032,7 +1032,7 @@
     dup length string copy
     .forceput setglobal
   } executeonly ifelse
-} .bind executeonly odef % must be bound and hidden for .forceput
+} .forcebind odef % must be bound and hidden for .forceput
 
 /.loadfontloop {        % <fontname> <filename> <libflag> .loadfontloop
                         %   <font> true
@@ -1180,7 +1180,7 @@
 
     } loop              % end of loop
 
- } bind executeonly def % must be bound and hidden for .putgstringcopy
+ }.internalbind def % must be bound and hidden for .putgstringcopy
 
 % Attempt to load a font from a file.
 /.tryloadfont {         % <fontname> .tryloadfont <font> true
@@ -1199,7 +1199,7 @@
   } {
     {//true //.loadfontloop exec} //.internalstopped exec {//false} if
   } ifelse
-} bind def
+}.internalbind def
 
 % Try to find a font using only the present contents of Fontmap.
 /.tryfindfont {         % <fontname> .tryfindfont <font> true
@@ -1286,7 +1286,7 @@
       if
     }
    ifelse
- } bind executeonly def
+ }.internalbind def
 
 % Define a procedure to load all known fonts.
 % This isn't likely to be very useful.
@@ -1293,7 +1293,7 @@
 /loadallfonts
 {
   [Fontmap .nativeFontmap] { { pop findfont pop } forall } forall
-} bind def
+}.internalbind def
 
 % If requested, load all the fonts defined in the Fontmap into FontDirectory
 % as "fake" fonts i.e., font dicts with only FontName and FontType defined.

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_icc.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_icc.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_icc.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -92,7 +92,7 @@
   } {
     pop % Not interested in this DSC comment
   } ifelse
-} bind def
+} .internalbind def
 
 currentdict /cs-sig-dict undef
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_img.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_img.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_img.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -199,7 +199,7 @@
       { pop //false }
     ifelse
   }
-.bind def
+.forcebind def
 
 %
 % Procedures to convert a set of stack entries to a dictionary. There is
@@ -268,7 +268,7 @@
 
     currentdict end
   }
-.bind def
+.forcebind def
 
 %
 %   <dict>  <array>   img_unbuild_dict   <oper_0>  ...  <oper_n>
@@ -287,7 +287,7 @@
     pop
     end
   }
-.bind def
+.forcebind def
 
 %
 % Check the image types that can be used as data sources
@@ -374,7 +374,7 @@
     % stack: <w> <h> <bps> <mtx> <dsrc|dsrc_array> <multi> <n>
     //img_params_ary //img_build_dict exec
   }
-.bind def
+.forcebind def
 currentdict /good_image_types .undef
 
 %
@@ -402,7 +402,7 @@
       }
     if
   }
-.bind def
+.forcebind def
 
 %
 %   <width>  <height>  <polarity>  <matrix>  <dsrc>
@@ -429,7 +429,7 @@
     % the imagemask dictionary can be built; do so
     //img_mask_params_ary //img_build_dict exec
   }
-.bind def
+.forcebind def
 
 %
 %   <?dict?>
@@ -454,7 +454,7 @@
       }
     if
   }
-.bind def
+.forcebind def
 
 %
 %   <width>  <height>  <bits/component>  <matrix>  <dsrc_0> ...
@@ -513,7 +513,7 @@
       }
     if
   }
-.bind def
+.forcebind def
 
 %
 %   <width>  <height>  <bits/component>  <matrix>  <dsrc_0> ...
@@ -534,7 +534,7 @@
                { /colorimage .systemvar  $error /errorname get signalerror }
              if
           }
-        .bind systemdict begin odef end
+        .forcebind systemdict begin odef end
       }
     if
   }
@@ -634,7 +634,7 @@
       }
     ifelse
   }
-.bind odef
+.forcebind odef
 
 % An auxiliary function for checking whether an imagemask to be interpolated.
 /.is_low_resolution    %  <image dict> .is_low_resolution <bool>
@@ -649,7 +649,7 @@
    } repeat
    .max
    2 gt % arbitrary
-} .bind def
+} .forcebind def
 
 %
 %   width  height  polarity  matrix  datasrc   imagemask   -
@@ -712,7 +712,7 @@
       }
     ifelse
   }
-.bind odef
+.forcebind odef
 
 % undefine a bunch of local definitions
 [

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -34,7 +34,7 @@
 % Interpreter library version number
 % NOTE: the interpreter code requires that the first non-comment token
 % in this file be an integer, and that it match the compiled-in version!
-10021
+10030
 
 % Check the interpreter revision.
 dup revision ne
@@ -111,7 +111,19 @@
 currentdict /PDFSTOPONERROR known /PDFSTOPONERROR exch def
 currentdict /PDFSTOPONWARNING known {/PDFSTOPONWARNING //true def /PDFSTOPONERROR //true def}{/PDFSTOPONWARNING //false def} ifelse
 currentdict /PDFNOCIDFALLBACK known /PDFNOCIDFALLBACK exch def
+
+% Versions of bind for use during startup:
+% bind - normal "bind", honors DELAYBIND
+% .bind - normal "bind", but ignores DELAYBIND
+% .internalbind - as "bind" but forces the executeonly attribute
+% .forcebind - as ".bind" but forces the executeonly attribute
+%
+% In general, for security and consistency startup code should use
+% .internalbind or .forcebind, and only use bind/.bind when we
+% cannot enforce executeonly on a given proc
 /.bind /bind load def
+/.internalbind {bind executeonly} .bind 1 index exch .makeoperator def
+/.forcebind {.bind executeonly} .bind 1 index exch .makeoperator def
 
   /VMDEBUG
     INITDEBUG {{print mark
@@ -132,7 +144,7 @@
           {{pop
           }}
          ifelse
-  .bind def
+  .forcebind def
 
 % This was a debugging switch removed in 9.22, no other software
 % should have had any regard for it, and even if testing its value
@@ -253,7 +265,7 @@
 % We can't use readline, because that imposes a line length limit.
 /.skipeof	% <string> .skipeof -
  { currentfile exch 1 exch .subfiledecode flushfile
- } .bind def
+ } .forcebind def
 
 % Define procedures to assist users who don't read the documentation.
 userdict begin
@@ -260,7 +272,7 @@
 /help
  { (Enter PostScript commands.  '(filename) run' runs a file, 'quit' exits.\n)
    print flush
- } .bind def
+ } .forcebind def
 end
 
 % Define =string, which is used by some PostScript programs even though
@@ -288,7 +300,7 @@
    counttomark
     { (%stdout) (w) file exch 0 .writecvp
     } repeat pop
- } .bind def
+ } .forcebind def
 
 QUIET not { //printgreeting exec flush } if
 currentdict /printgreeting .undef
@@ -296,25 +308,25 @@
 % Define a special version of def for making operator procedures.
 /obind {	% <name> <proc> obind <name> <oper>
   1 index exch .makeoperator
-} .bind def
+} .forcebind def
 /odef {		% <name> <proc> odef -
   1 index exch .makeoperator def
-} .bind def
+} .forcebind def
 
 % Define procedures for accessing variables in systemdict and userdict
 % regardless of the contents of the dictionary stack.
 /.systemvar {		% <name> .systemvar <value>
   //systemdict exch get
-} .bind executeonly odef
+} .forcebind odef
 /.systemexec {
   .systemvar exec
-} .bind executeonly odef
+} .forcebind odef
 /.userdict {		% - .userdict <dict>
   /userdict .systemvar
-} .bind executeonly odef
+} .forcebind odef
 /.uservar {		% <name> .uservar <value>
   .userdict exch get
-} .bind executeonly odef
+} .forcebind odef
 
 % If we're delaying binding, remember everything that needs to be bound later.
 DELAYBIND
@@ -329,8 +341,10 @@
    } if
    .currentglobal //false .setglobal
    systemdict /.delaybind 2000 array .forceput
+   systemdict /.delayinternalbind 2000 array .forceput
    .setglobal
    userdict /.delaycount 0 put
+   userdict /.delayinternalcount 0 put
         % When we've done the delayed bind, we want to stop saving.
         % Detect this by the disappearance of .delaybind.
    /bind
@@ -341,7 +355,17 @@
        { pop /.bind cvx exec
        }
       ifelse
-    } .bind odef
+    } .forcebind odef
+
+   /.internalbind
+    { /.delayinternalbind .systemvar dup length 0 ne
+       { .delayinternalcount 2 index put
+         .userdict /.delayinternalcount .delayinternalcount 1 add put
+       }
+       { pop /.forcebind cvx exec
+       }
+      ifelse
+    } .forcebind odef
 } executeonly if
 
 .currentglobal //true .setglobal
@@ -383,7 +407,7 @@
     } executeonly forall
     pop
   } executeonly ifelse
-} .bind executeonly def
+} .forcebind def
 
 /.applyundefinternalnames
 {
@@ -395,7 +419,7 @@
     } executeonly forall
     pop
   } executeonly forall
-} .bind executeonly def
+} .forcebind def
 
 %**************** BACKWARD COMPATIBILITY ****************
 /hwsizedict mark /HWSize //null .dicttomark readonly def
@@ -403,11 +427,11 @@
   0 3 1 roll 3 index //hwsizedict .getdeviceparams
   exch pop exch pop aload pop 3 2 roll
   0 exch //null exch .getbitsrect exch pop
-} bind odef
+} .internalbind odef
 currentdict /hwsizedict .undef
 /getdeviceprops
  { //null .getdeviceparams
- } bind odef
+ } .internalbind odef
 
 % NOTE: Note sure why/if this needs to be a separate operator.  Consider rolling this
 % implementation into /putdeviceprops ?
@@ -419,14 +443,14 @@
       /.putdeviceprops .systemvar exch signalerror
     }
    if
- } bind executeonly odef
-/.writecvs { 0 .writecvp } bind odef
+ } .internalbind odef
+/.writecvs { 0 .writecvp } .internalbind odef
 
 %**************** DEPRECATED PROCEDURES ****************
 %**************** DO NOT USE THESE IN NEW CODE ****************
 % Keeping these because they have been around a long time and we don't want to break old code that's out in the wild
-/max { .max } bind def		% use .max instead
-/min { .min } bind def		% use .min instead
+/max { .max } .internalbind def		% use .max instead
+/min { .min } .internalbind def		% use .min instead
 %**************** END OF BACKWARD COMPATIBILITY SECTION ****************
 
 % Utility for removing all entries from a dictionary
@@ -439,7 +463,7 @@
     1 index exch undef
   } loop
   pop
-} bind def
+} .internalbind def
 
 % Define predefined procedures substituting for operators,
 % in alphabetical order.
@@ -461,7 +485,7 @@
 %
 /initgraphics
   { initgraphics systemdict /DeviceGray_array get setcolorspace }
-.bind executeonly odef
+.forcebind odef
 
 /currentmatrix {
         dup type /arraytype ne
@@ -486,7 +510,7 @@
       pop
     } ifelse
   } if
-} .bind executeonly odef
+} .forcebind odef
 
 % Guard similarly against EndPage not popping its operand.
 /.endpage {		% <reason> .endpage <print_bool>
@@ -504,7 +528,7 @@
   } {
     2 ne
   } ifelse
-} .bind executeonly odef
+} .forcebind odef
 
 % Define .currentnumcopies so it consults the NumCopies device parameter.
 /.numcopiesdict mark
@@ -516,7 +540,7 @@
     { exch pop exch pop }
     { cleartomark #copies }
    ifelse
-} .bind executeonly odef
+} .forcebind odef
 
 /setcolorscreen where { pop		% not in all Level 1 configurations
    /currentcolorscreen
@@ -572,7 +596,7 @@
    $error /errorname //null put
    $error /errorinfo //null put
    0 .setoserrno
- } bind executeonly def
+ } .internalbind def
 
 % To satisfy the Genoa FTS, executive must be a procedure, not an operator.
 % Define the procedure used by .runfile, .runstdin and .runstring
@@ -581,11 +605,11 @@
 /.execute {		% <obj> .execute <stopped>
   stopped $error /newerror get and
    { /handleerror .systemvar exec flush //true } { //false } ifelse
-} bind def
+} .internalbind def
 % Define an execute analogue of runlibfile0.
 /execute0 {		% <obj> execute0 -
   //.execute exec { /execute0 cvx 1 .quit } if
-} bind def
+} .internalbind def
 /executive
         { { prompt
              { (%statementedit) (r) .systemvmfile } stopped
@@ -596,7 +620,7 @@
             if
             cvx { .runexec } //.execute exec pop
           } loop
-        } bind def
+        } .internalbind def
 currentdict /.execute .undef
 
 /filter
@@ -607,7 +631,7 @@
         } odef
 % Internal uses of stopped that aren't going to do a stop if an error occurs
 % should use .internalstopped to avoid setting newerror et al.
-/.internalstopped { //null 1 .stopped //null ne } bind executeonly def
+/.internalstopped { //null 1 .stopped //null ne } .internalbind def
 % handleerror procedure as mentioned in the "Operators" section of the PLRM Section 8.2
 % This invokes the handleerror procedure from errordict (unless we are running under a
 % JOBSERVER where we want to always use a defined error handler (many error handlers in
@@ -617,9 +641,9 @@
 % won't cause nested errors (Unexpected Error conditions).
 /handleerror
         //systemdict /JOBSERVER get{
-          { /.GShandleerror .systemvar //.internalstopped exec pop } bind % always use .GShandleerror.
+          { /.GShandleerror .systemvar //.internalstopped exec pop } .internalbind % always use .GShandleerror.
         } {
-          { /errordict .systemvar /handleerror get //.internalstopped exec pop } bind % PLRM standard errorhandling
+          { /errordict .systemvar /handleerror get //.internalstopped exec pop } .internalbind % PLRM standard errorhandling
         } ifelse def
 /identmatrix [1.0 0.0 0.0 1.0 0.0 0.0] readonly def
 /identmatrix {
@@ -635,13 +659,13 @@
         (GS) print
         count 0 ne { (<) print count =only } if
         (>) print flush
-} bind def
-/prompt	{ flush flushpage //systemdict /NOPROMPT get not { //.promptmsg exec} if } bind def
+} .internalbind def
+/prompt	{ flush flushpage //systemdict /NOPROMPT get not { //.promptmsg exec} if } .internalbind def
 currentdict /.promptmsg .undef
 
-/pstack	{ 0 1 count 3 sub { index == } for } bind def
+/pstack	{ 0 1 count 3 sub { index == } for } .internalbind def
 /putdeviceprops
-        { .putdeviceprops { erasepage } if } bind executeonly odef
+        { .putdeviceprops { erasepage } if } .internalbind odef
 /quit	{ /quit load 0 .quit } odef
 /run	{ dup type /filetype ne { (r) .systemvmfile } if
                 % We must close the file when execution terminates,
@@ -663,7 +687,7 @@
         % startjob replaces the null on the o-stack with a procedure
         % to be executed when we get back here.
   dup //null ne { exec //true } { pop //false } ifelse
-} bind executeonly def
+} .internalbind def
 /.runexec2 {		% <continue> <file|fileproc> .runexec2 -
   exch {
     .runexec
@@ -671,10 +695,10 @@
     dup type /filetype ne { cvx exec } if
     closefile
   } ifelse
-} bind def
+} .internalbind def
 /.runexec {		% <file|fileproc> .runexec -
   cvlit /.runexec1 cvx 1 index /.runexec2 cvx 4 .execn
-} bind def
+} .internalbind def
 % The following is only for compatibility with Adobe interpreters.
 /setdash {
         0 .argindex type dup /integertype eq exch /realtype eq or not {
@@ -730,7 +754,7 @@
       pop
     } ifelse echo
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 /.confirm {
   //systemdict /DISPLAYING get //systemdict /NOPAUSE get not //systemdict /TTYPAUSE get or and {
@@ -742,7 +766,7 @@
   } {
     pop
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 % In LanguageLevel 3, copypage erases the page.
 /copypage {
@@ -754,7 +778,7 @@
         } if pop
     systemdict /..page_default_spaces .knownget { //.PurgeDict exec } if
     .beginpage
-} .bind executeonly odef
+} .forcebind odef
 
 /showpage {
         0 .endpage .doneshowpage {
@@ -772,11 +796,11 @@
         { initgraphics } ifelse
     systemdict /..page_default_spaces .knownget { //.PurgeDict exec } if
     .beginpage
-} .bind executeonly odef
+} .forcebind odef
 
 % Code output by Adobe Illustrator relies on the fact that
 % `stack' is a procedure, not an operator!!!
-/stack	{ 0 1 count 3 sub { index = } for } bind def
+/stack	{ 0 1 count 3 sub { index = } for } .internalbind def
 /start	{ //systemdict /BATCH get { //null 0 .quit } { executive } ifelse } def
 /store {	% Don't alter operands before completing.
         1 .argindex where { 2 index 2 index put pop pop } { def } ifelse
@@ -809,7 +833,7 @@
       /ifelse .systemvar
     ] cvx executeonly
   exch .setglobal
-} executeonly def
+} def
 systemdict /internaldict dup .makeinternaldict .makeoperator
 .forceput		% proc is local, systemdict is global
 currentdict /.makeinternaldict .undef
@@ -822,27 +846,27 @@
         { exch dup length 2 index length add string	% str2 str1 new
           dup dup 4 2 roll copy		% str2 new new new1
           length 4 -1 roll putinterval
-        } bind def
+        } .internalbind def
 /copyarray
-        { dup length array copy } bind def
+        { dup length array copy } .internalbind def
 % Copy a dictionary per the Level 2 spec even in Level 1.
 /.copydict		% <fromdict> <todict> .copydict <todict>
-        { dup 3 -1 roll { put dup } forall pop } bind def
+        { dup 3 -1 roll { put dup } forall pop } .internalbind def
 /findlibfile {
   .systemvmlibfile { dup .filename pop exch //true } { //false } ifelse
 } odef
 /.growdictlength	% get size for growing a dictionary
         { length 3 mul 2 idiv 1 add
-        } bind def
+        } .internalbind def
 /.growdict		% grow a dictionary
         { dup //.growdictlength exec .setmaxlength
-        } bind def
+        } .internalbind def
 /.growput		% put, grow the dictionary if needed
         { 2 index length 3 index maxlength eq
            { 3 copy pop known not { 2 index //.growdict exec} if
            } if
           put
-        } bind def
+        } .internalbind def
 % .localvmarray may be an operator: see zsysvm.c.
 /.localvmarray where {
   pop
@@ -850,7 +874,7 @@
   /.localvmarray {
     .currentglobal //false .setglobal
     exch array exch .setglobal
-  } bind def
+  } .internalbind def
 } ifelse
 /.localvmdict where {
   pop
@@ -858,22 +882,22 @@
   /.localvmdict {
     .currentglobal //false .setglobal
     exch dict exch .setglobal
-  } bind def
+  } .internalbind def
 } ifelse
 /.packtomark
-        { counttomark packedarray exch pop } bind def
+        { counttomark packedarray exch pop } .internalbind def
 /runlibfile
-        {		% We don't want to bind 'run' into this procedure,
+        {		% We don't want to .internalbind 'run' into this procedure,
                         % since run may get redefined.
           findlibfile
            { exch pop /run .systemvar exec }
            { /undefinedfilename signalerror }
           ifelse
-        } bind def
+        } .internalbind def
 /selectdevice
-        { finddevice setdevice .setdefaultscreen } bind def
+        { finddevice setdevice .setdefaultscreen } .internalbind odef
 /signalerror		% <object> <errorname> signalerror -
-        { /errordict .systemvar exch get exec } bind def
+        { /errordict .systemvar exch get exec } .internalbind def
 /signaloperror {	% <object> <errorname> signaloperror -
     % Same as signalerror, except that if we are inside a pseudo-operator
     % or .errorexec, we use its error object, just as errors generated by
@@ -881,7 +905,7 @@
     /errordict .systemvar exch get
     .finderrorobject { 3 -1 roll pop exch } if
     exec
-} bind def
+} .internalbind def
 
 % Define the =[only] procedures.  Also define =print,
 % which is used by some PostScript programs even though
@@ -888,17 +912,128 @@
 % it isn't documented anywhere.
 /write=only {
         .writecvs
-} bind def
+} .internalbind def
 /write= {
         1 index exch write=only (\n) writestring
-} bind def
-/=only	{ (%stdout) (w) file exch write=only } bind odef
-/=	{ =only (\n) print } bind def
+} .internalbind def
+/=only	{ (%stdout) (w) file exch write=only } .internalbind odef
+/=	{ =only (\n) print } .internalbind def
 /=print	/=only load def
 % Temporarily define == as = for the sake of runlibfile0.
 /== /= load def
 
-% The following procedures are documented.
+% Function to purge a named device from the device cache. This is required if we
+% want to 'reset' a device. The setpagedevice implementation, when it creates a
+% device instance, stores it in a cache. Next time we select a device we look in
+% the cache and, if we find we cached it, then we use the cached device.
+%
+% Presumably this is intended as an optimisation, but it defeats the expected use
+% of save and restore wihth devices because, after we restore a device away it is
+% not destroyed, it is in the cache. Requesting the same named device will return
+% the cached device, crucially *without* resetting any of its parameters. In
+% particular NumPages which is used to number output files and is a read-only parameter.
+%
+% /name uncachedevice -
+%
+/uncachedevice
+{
+    % Check we've been given a name
+    dup type /nametype eq
+    {
+        % Check the name isn't the current device. Check both /Name
+        % and /OutputDevice. There seem to be some conditions where
+        % only one is present.
+        %
+        currentpagedevice /Name known
+        {
+          dup currentpagedevice /Name get eq
+        }
+        {
+          //false
+        }ifelse
+        currentpagedevice /OutputDevice known
+        {
+          1 index currentpagedevice /OutputDevice get eq
+        }
+        {
+          //false
+        }ifelse
+
+        % We tested /Name and /OutputDevice to see if they exist, if they do
+        % we checked them against the requested device. If either matches the requested
+        % device we report an error, otherwise we remove the device from the cache.
+        %
+        or
+        {
+            (*** ERROR: Can't uncache the current device\n) print
+            /uncachedevice /invalidaccess signalerror
+        }
+        {
+            % Make sure devicedict exists, if it does not, ignore
+            % the request because this code doesn't know how to
+            % deal with this PostScript itnerpreter.
+            /devicedict where
+            {
+                % Get devicedict out of its containing dictionary
+                /devicedict get dup             % stack: /device -devicedict- -devicedict-
+
+                % Check if the device we were given is known
+                2 index known                   % stack: /device -devicedict- bool
+                {
+                    % device was known, get the key/value pair from devicedict
+                    dup 2 index get             % stack: /device -devicedict- value
+
+                    % We expect the value in devicedict to be an array, check it is
+                    dup type /arraytype eq
+                    {
+                        dup 1 null put          % stack: /device -devicedict- [-device- null]
+                        3 -1 roll exch          % stack: -devicedict- /device [-device- null]
+                        put                     % stack: -
+                    }
+                    {
+                        % Value in devicedict associated with the named key is not an array
+                        /uncachedevice /typecheck signalerror
+                    } ifelse
+                }
+                {
+                    % The named key is not present in devicedict
+                    /uncachedevice /undefined signalerror
+                } ifelse
+            } if
+        } ifelse
+    }
+    {
+        % The parameter we were given wasn't a name type
+        /uncachedevice /typecheck signalerror
+    } ifelse
+} bind readonly odef
+
+% Function to purge all but the current device from the device cache
+%
+% - purgedevicecache -
+%
+/purgedevicecache
+{
+    % Find devicedict, if it doesn't exist just exit silently, we don't know
+    % how to deal with this PostScript interpreter
+    /devicedict where
+    {
+        % Get devicedict from the containing dictionary
+        /devicedict get
+        % For each key/value pair in devicedict
+        {
+          pop                                       % Discard the value
+          dup currentpagedevice /Name get eq not    % Check if the key is the same as the current device
+          {
+              uncachedevice                         % If not, purge the device from the cache
+          }
+          {
+              pop                                   % Don't purge the current device
+          } ifelse
+        } forall
+    } if
+} bind readonly odef
+
 /finddevice {		% <devicename> finddevice <device>
   /devicedict .systemvar exch get
   dup 1 get //null eq {
@@ -909,8 +1044,10 @@
     dup dup 0 get //false .copydevice2 1 exch put
     exch .setglobal
   } if 1 get
-} bind executeonly odef
+} .internalbind odef
 
+% The following procedures are documented.
+
 % Run a resource file.  This allows us to distinguish resource objects
 % from objects coming from input files.
 userdict /.currentresourcefile //null put
@@ -922,10 +1059,10 @@
   2 .execn		% stopped <file>
   .userdict /.currentresourcefile 3 -1 roll put
   { stop } if
-} bind executeonly def
+} .internalbind def
 /.runresource {		% <file> .runresource -
   { /run .systemvar exec } .execasresource
-} bind def
+} .internalbind def
 
 % Convenience function (documented extension)
 /.shellarguments		% -> shell_arguments true (or) false
@@ -935,7 +1072,7 @@
               { pop //false }
              ifelse }
            { //false } ifelse
-        } bind def
+        } .internalbind def
 
 % Define the procedure that the C code uses for running files
 % named on the command line.
@@ -947,13 +1084,13 @@
 % reopened if a startjob does a restore.
 /.runstdin {
   { { (%stdin) (r) file cvx } .runexec } execute0
-} bind def
+} .internalbind def
 % Define the procedure that the C code uses for running commands
 % given on the command line with -c.  We turn the string into a file so that
 % .runexec can do the right thing with a startjob.
 /.runstring {
   0 0 .systemvmstring .systemvmSFD cvx { .runexec } execute0
-} bind def
+} .internalbind def
 
 % Define the procedure that the C code uses to set up for executing
 % a string that may be received in pieces.
@@ -973,7 +1110,7 @@
 /.runstringbegin {
   1 .systemvmarray dup 0 //.needinput 0 get put cvx	% { .needinput } in systemvm
   0 0 .systemvmstring .systemvmSFD cvx .runexec
-} bind executeonly def
+} .internalbind def
 
 % Define a special version of runlibfile that aborts on errors.
 /runlibfile0
@@ -989,7 +1126,7 @@
            { (While reading ) print .currentfilename print (:\n) print flush
              /handleerror .systemvar exec /runlibfile0 1 .quit
            } if
-        } bind def
+        } .internalbind def
 % Temporarily substitute it for the real runlibfile.
 /.runlibfile /runlibfile load def
 /runlibfile //runlibfile0 def
@@ -1020,40 +1157,44 @@
        { not exch pop exit } { pop } ifelse
     }
    for exch pop .quit
- } bind executeonly def
+ } .internalbind def
+/.acquire_$error {
+  //systemdict /$error get
+} .internalbind def
+
 /.errorhandler		% <command> <errorname> .errorhandler -
   {		% Detect an internal 'stopped'.
     1 .instopped { //null eq { pop pop stop } if } if
-    $error /.inerror get 1 .instopped { pop } { pop //true } ifelse
+    //.acquire_$error exec /.inerror get 1 .instopped { pop } { pop //true } ifelse
      { //.unstoppederrorhandler exec
      } if	% detect error recursion
-    $error /globalmode .currentglobal //false .setglobal put
-    $error /.inerror //true put
-    $error /newerror //true put
-    $error exch /errorname exch put
-    $error exch /command exch put
-    $error /errorinfo known not { $error /errorinfo //null put } if
-    $error /recordstacks get $error /errorname get /VMerror ne and
+    //.acquire_$error exec /globalmode .currentglobal //false .setglobal put
+    //.acquire_$error exec /.inerror //true put
+    //.acquire_$error exec /newerror //true put
+    //.acquire_$error exec exch /errorname exch put
+    //.acquire_$error exec exch /command exch put
+    //.acquire_$error exec /errorinfo known not { //.acquire_$error exec /errorinfo //null put } if
+    //.acquire_$error exec /recordstacks get //.acquire_$error exec /errorname get /VMerror ne and
      {		% Attempt to store the stack contents atomically.
-       count array astore dup $error /ostack 4 -1 roll
+       count array astore dup //.acquire_$error exec /ostack 4 -1 roll
        % Grab the execstack, then remove to two elements that are from
        % this error handler (not interesting).
        countexecstack array execstack dup length 2 sub 0 exch getinterval
-       $error /estack 3 -1 roll
-       countdictstack array dictstack $error /dstack 3 -1 roll
+       //.acquire_$error exec /estack 3 -1 roll
+       countdictstack array dictstack //.acquire_$error exec /dstack 3 -1 roll
        put put put aload pop
      }
-     { $error /dstack .undef
-       $error /estack .undef
-       $error /ostack .undef
+     { //.acquire_$error exec /dstack .undef
+       //.acquire_$error exec /estack .undef
+       //.acquire_$error exec /ostack .undef
      }
     ifelse
-    $error /position currentfile status
+    //.acquire_$error exec /position currentfile status
      { currentfile { fileposition } //.internalstopped exec { pop //null } if
      }
      {		% If this was a scanner error, the file is no longer current,
                 % but the command holds the file, which may still be open.
-       $error /command get dup type /filetype eq
+       //.acquire_$error exec /command get dup type /filetype eq
         { { fileposition } //.internalstopped exec { pop //null } if }
         { pop //null }
        ifelse
@@ -1061,10 +1202,10 @@
     ifelse put
                 % During initialization, we don't reset the allocation
                 % mode on errors.
-    $error /globalmode get $error /.nosetlocal get and .setglobal
-    $error /.inerror //false put
+    //.acquire_$error exec /globalmode get //.acquire_$error exec /.nosetlocal get and .setglobal
+    //.acquire_$error exec /.inerror //false put
     stop
-  } bind executeonly def
+  } .internalbind def
 currentdict /.unstoppederrorhandler .undef
 
 % Define the standard handleerror.  We break out the printing procedure
@@ -1146,9 +1287,10 @@
         { (Current file position is ) print position = }
        if
 
-} bind executeonly def
+} .internalbind def
 /.printerror
-{ $error begin newerror
+{
+     //.acquire_$error exec begin newerror
      {
        /command load errorname //systemdict /SHORTERRORS get
         { (%%[ Error: ) print =only flush
@@ -1193,7 +1335,8 @@
      ifelse	% newerror
      end
      flush
-} bind executeonly def
+} .internalbind def
+currentdict /.acquire_$error .undef
 currentdict /.printerror_long .undef
 
 % Define $error.  This must be in local VM.
@@ -1239,10 +1382,10 @@
    3 1 roll
    mark 1 index systemdict /.errorhandler get /exec load //.packtomark exec cvx put
    .setglobal
- } bind def
+ } .internalbind def
 /.registererror		% <name> .registererror -
  { errordict exch //.registererror2 exec
- } bind def
+ } .internalbind def
 currentdict /.registererror2 .undef
 
 ErrorNames
@@ -1255,7 +1398,7 @@
    } forall
 /handleerror	% this key is 'well known' and some PS may redefine it
  { /.printerror .systemvar exec
- } bind def
+ } .internalbind def
 end		% errordict
 
 gserrordict /unknownerror errordict /unknownerror get put
@@ -1277,7 +1420,7 @@
   noaccess pop
   //systemdict /.setsafeerrors .forceundef
   //systemdict /.SAFERERRORLIST .forceundef
-} bind executeonly odef
+} .internalbind odef
 
 SAFERERRORS {.setsafererrors} if
 
@@ -1288,13 +1431,13 @@
 % Define the [write]==[only] procedures.
 /.dict 8 dict dup
 begin def
-  /.cvp {1 index exch 1 .writecvp} bind def
-  /.p {1 index exch writestring} bind def
-  /.p1 {2 index exch writestring} bind def
-  /.p2 {3 index exch writestring} bind def
+  /.cvp {1 index exch 1 .writecvp} .internalbind def
+  /.p {1 index exch writestring} .internalbind def
+  /.p1 {2 index exch writestring} .internalbind def
+  /.p2 {3 index exch writestring} .internalbind def
   /.print
         { dup type .dict exch .knownget { exec } { .cvp } ifelse
-        } bind def
+        } .internalbind def
   /arraytype
         {dup rcheck
           {() exch dup xcheck
@@ -1308,20 +1451,20 @@
              (])}
            ifelse exch pop .p}
           {.cvp}
-         ifelse} bind def
+         ifelse} .internalbind def
   /packedarraytype /arraytype load def
 {//.dict begin .print pop end}
-  bind
+  .bind
 end
 
 /write==only exch def
-/write== {1 index exch write==only (\n) writestring} bind def
-/==only { (%stdout) (w) file exch write==only } bind def
-/== {==only (\n) print} bind def
-
+/write== {1 index exch write==only (\n) writestring} .internalbind def
+/==only { (%stdout) (w) file exch write==only } .internalbind def
+/== {==only (\n) print} .internalbind def
 % Define [write]===[only], an extension that prints dictionaries
 % in readable form and doesn't truncate strings.
 /.dict /write==only load 0 get dup length 2 add dict .copydict dup
+
 begin def
   /dicttype
         { dup rcheck
@@ -1334,19 +1477,19 @@
            { .cvp
            }
           ifelse
-        } bind def
+        } .internalbind def
   /stringtype
         { 1 index exch 2 .writecvp
-        } bind def
+        } .internalbind def
 
 {//.dict begin .print pop end}
-  bind
+  .internalbind
 end
 
 /write===only exch def
-/write=== {1 index exch write===only (\n) writestring} bind def
-/===only { (%stdout) (w) file exch write===only } bind def
-/=== { ===only (\n) print } bind def
+/write=== {1 index exch write===only (\n) writestring} .internalbind def
+/===only { (%stdout) (w) file exch write===only } .internalbind def
+/=== { ===only (\n) print } .internalbind def
 
 % Create the initialization queue.
 1183615869 internaldict dup
@@ -1362,7 +1505,7 @@
   } if
   .delayed_init_queue 3 1 roll .growput
   end
-} bind def
+} .internalbind def
 
 begin
 /.execute_scheduled_inits %   - .execute_scheduled_inits -
@@ -1387,7 +1530,7 @@
   } loop
   currentdict /.newdelayed_init_queue undef
   end
-} bind def
+} .internalbind def
 end
 
 (END PROCS) VMDEBUG
@@ -1403,10 +1546,10 @@
 % Define .findencoding.  (This is redefined in Level 2.)
 /.findencoding
  { //EncodingDirectory exch get exec
- } bind def
+ } .internalbind def
 /.defineencoding
  { //EncodingDirectory 3 1 roll put
- } bind def
+ } .internalbind def
 % If we've got the composite font extensions, define findencoding.
 % To satisfy the Genoa FTS, findencoding must be a procedure, not an operator.
 /rootfont where { pop /findencoding { .findencoding } def } if
@@ -1416,7 +1559,7 @@
 % exist for the sake of toolbin/encs2c.ps.
 /.registerencoding {	% <index> <array> .registerencoding -
   pop pop
-} bind odef
+} .internalbind odef
 
 % Load StandardEncoding.
 %% Replace 1 (gs_std_e.ps)
@@ -1538,12 +1681,12 @@
     { 3 copy 6 copy //setcolorscreen }
     { //setscreen }
    ifelse
-} bind def
+} .internalbind def
 /.setloresscreen {	% <dpi> .setloresscreen -
   .setloreshalftone
   0 array cvx settransfer	% Genoa CET won't accept a packed array!
   /setstrokeadjust where { pop //true setstrokeadjust } if
-} bind def
+} .internalbind def
 % Use a 45-degree spot screen for high-resolution devices.
 % The PS3 CET insists that the screen be an array and not a packedarray (!).
 currentpacking //false setpacking
@@ -1631,7 +1774,7 @@
     { //setscreen			% not high resolution
     }
    ifelse
-} bind def
+} .internalbind def
 /.sethiresscreen {	% <dpi> .sethiresscreen
   .sethireshalftone     % pushes true if a screen halftone used
                         % Stack: doscree
@@ -1664,7 +1807,7 @@
   % Increase fill adjustment so that we effectively use Adobe's
   % any-part-of-pixel rule.
   0.5 dup .setfilladjust2
-} bind def
+} .internalbind def
 
 % Set the default screen and BG/UCR.
 % We define the proc here, rather than inline in .setdefaultbgucr
@@ -1678,12 +1821,12 @@
     (%.defaultbgrucrproc) cvn load dup
     setblackgeneration setundercolorremoval
   } if
-} bind def
+} .internalbind def
 /.useloresscreen {	% - .useloresscreen <bool>
         % Compute min(|dpi x|,|dpi y|) as the definition of the resolution.
   72 72 matrix defaultmatrix dtransform abs exch abs .min
   dup 150 lt //systemdict /DITHERPPI known not and
-} bind def
+} .internalbind def
 
 /.gsgetdeviceprop	% <device> <propname> gsgetdeviceprop <value>
  { 2 copy mark exch //null .dicttomark .getdeviceparams
@@ -1691,7 +1834,7 @@
     { pop dup /undefined signalerror }
     { 5 1 roll pop pop pop pop }
    ifelse
- } bind def
+ } .internalbind def
 
 % The following implementation uses LL2 extensions, but only in stopped
 % contexts so that with LL1, the .set??reshalftone will be used.
@@ -1712,7 +1855,7 @@
     { pop pop //false } { //true } ifelse
   }
   if
-} bind def
+} .internalbind def
 currentdict /.gsgetdeviceprop .forceundef
 
 /.setdefaulthalftone {
@@ -1722,12 +1865,12 @@
     //.useloresscreen exec { .setloreshalftone } { .sethireshalftone pop } ifelse
   }
   ifelse
-} bind def
+} .internalbind def
 
 /.setdefaultscreen {
   //.useloresscreen exec { .setloresscreen } { .sethiresscreen } ifelse
   //.setdefaultbgucr exec
-} bind def
+} .internalbind def
 currentdict /.setdefaultbgucr .undef
 currentdict /.useloresscreen .undef
 
@@ -1780,7 +1923,7 @@
      2 index 2 index 3 -1 roll put 1 add
    } for
    0 exch getinterval exch pop
-} bind def
+} .internalbind def
 
 %   false <dir_list> <template> .generate_dir_list_templates_with_length <t1> ... <tN>
 %   true  <dir_list> <template> .generate_dir_list_templates_with_length <t1> <l1> ... <tN> <ln>
@@ -1872,7 +2015,7 @@
     } forall
   } ifelse                                         % (t1) ?l1 (t2) ?l2 ... (tN) ?ln {} b [dl] (templ) (ffn)
   pop pop pop pop pop                              % (t1) ?l1 (t2) ?l2 ... (tN) ?ln
-} .bind executeonly odef
+} .forcebind odef
 currentdict /.makepathtemplate .undef
 
 %   <dir_list> <template> .generate_dir_list_templates <t1> ... <tN>
@@ -1882,12 +2025,12 @@
 %
 /.generate_dir_list_templates
 { //false 3 1 roll //.generate_dir_list_templates_with_length
-} .bind executeonly odef
+} .forcebind odef
 
 % Load the initialization files for optional features.
 %% Replace 4 INITFILES
 systemdict /INITFILES known
- { INITFILES { <00> search { exch pop dup runlibfile VMDEBUG }{ dup runlibfile VMDEBUG exit } ifelse } .bind loop
+ { INITFILES { <00> search { exch pop dup runlibfile VMDEBUG }{ dup runlibfile VMDEBUG exit } ifelse } .forcebind loop
  }
 if
 
@@ -1910,7 +2053,7 @@
   /FontName () def
   /Encoding StandardEncoding def
   /FontBBox { 0 0 0 0 } readonly def % executable is bogus, but customary ...
-  /BuildChar { pop pop 0 0 setcharwidth } bind def
+  /BuildChar { pop pop 0 0 setcharwidth } .internalbind def
   /PaintType 0 def		% shouldn't be needed!
 end
 /NullFont exch definefont setfont
@@ -1943,7 +2086,7 @@
     { dup type /operatortype eq
        {
          % This might be a real operator, so bind might cause a typecheck
-         {.bind} //.internalstopped exec pop
+         {.forcebind} //.internalstopped exec pop
        }
       if pop pop
     } forall
@@ -2153,7 +2296,7 @@
 % This is a hack to get around problems
 % in some common PostScript-generating applications.
 <04> cvn JOBSERVER {
-    { { clear cleardictstack //false 0 .startnewjob } 2 .stop } bind
+    { { clear cleardictstack //false 0 .startnewjob } 2 .stop } .internalbind
   } {
     { }
   } ifelse def
@@ -2170,13 +2313,13 @@
 }
 {
   {currentfile (%-12345X) .peekstring pop (%-12345X) eq <04> cvn load if}
-} ifelse bind def
+} ifelse .internalbind def
 
 <1b45> cvn { } def		% PJL reset prologue (ESC E)
 <1b451b> cvn <1b> cvn load def	% PJL reset epilogue (ESC E + UEL)
 (\001M) cvn			% TBCP initiator
  { currentfile /TBCPDecode filter cvx exec
- } bind def
+ } .internalbind def
 /@PJL				% H-P job control
  {
    % Windows 2000 driver includes PJL into %%BeginFeature block.
@@ -2193,7 +2336,7 @@
      } if
    } if
    currentfile //=string readline pop pop
- } bind def
+ } .internalbind def
 
 % Install the EPS handler if needed
 systemdict /EPSBoundingBoxInit known { EPSBoundingBoxInit } if
@@ -2219,7 +2362,7 @@
   {systemdict exch .forceundef} forall
 
   //systemdict /SAFERUndefinePostScriptOperators .forceundef
-} .bind executeonly def % must be bound and hidden for .forceundef
+} .forcebind def % must be bound and hidden for .forceundef
 
 /tempfilepaths
 [
@@ -2270,7 +2413,7 @@
 
     .activatepathcontrol
   } ifelse
-} bind def
+} .internalbind def
 
 /.locksafe_userparams {
   SAFETY /safe get not {
@@ -2309,7 +2452,7 @@
     >> setuserparams
   }
   if
-} .bind executeonly def
+} .forcebind def
 
 currentdict /tempfilepaths undef
 
@@ -2325,7 +2468,7 @@
   << /.LockSafetyParams //true >> setpagedevice
   setglobal
   //SAFETY /safe //true .forceput % overrides readonly
-} .bind executeonly odef
+} .forcebind odef
 
 /.setsafe
 {
@@ -2347,7 +2490,7 @@
     } if
   }
   ifelse
-} .bind executeonly odef
+} .forcebind odef
 %% --- End documented extensions ---
 
 % This is only used during startup. Its required so that
@@ -2369,7 +2512,7 @@
   >> setpagedevice
   setglobal
   //SAFETY /safe //true .forceput % overrides readonly
-} .bind def
+} .forcebind def
 
 % See /.locksafeglobal above.
 %
@@ -2393,7 +2536,7 @@
     } if
   }
   ifelse
-} .bind executeonly odef
+} .forcebind odef
 
 % If we are running in SAFER mode, lock things down
 SAFER { .setsafeglobal } if
@@ -2410,7 +2553,7 @@
    /OLDPDF where {/OLDPDF get not {/SHA256Encode /MD5Encode /AESDecode /JPXDecode /JBIG2Decode /ArcfourDecode /.EOFDecode} if} if
   ]
   {filterdict exch undef} forall
-} .bind executeonly def
+} .forcebind def
 
 /UndefinePostScriptOperators {
   % This list is of operators which no longer appear to be used, and which we do not believe
@@ -2555,7 +2698,7 @@
 
   //systemdict /UndefinePostScriptFilters .forceundef
   //systemdict /UndefinePostScriptOperators .forceundef
-} .bind executeonly def % must be bound and hidden for .forceundef
+} .forcebind def % must be bound and hidden for .forceundef
 
 % If we delayed binding, make it possible to do it later.
 /.bindnow {
@@ -2566,8 +2709,10 @@
   % Temporarily disable the typecheck error.
   errordict /typecheck 2 copy get
   errordict /typecheck { pop } put	% pop the command
-  0 1 .delaycount 1 sub { .delaybind exch get .bind pop } for
+  0 1 .delaycount 1 sub { .delaybind exch get .forcebind pop } for
+  0 1 .delayinternalcount 1 sub { .delayinternalbind exch get .forcebind pop } for
   //systemdict /.delaybind {} .forceput	% reclaim the space
+  //systemdict /.delayinternalbind {} .forceput	% reclaim the space
   //systemdict /.bindnow .forceundef	% ditto
   .applyundefinternalnames
   put
@@ -2584,10 +2729,12 @@
   //systemdict /.undefinternalnames .forceundef
   //systemdict /.applyundefinternalnames .forceundef
   //systemdict /.undefinternalnameslist .forceundef
+  //systemdict /.internalbind .forceundef
+  //systemdict /.forcebind .forceundef
   currentuserparams /IdiomRecognition known {
     1 dict dup /IdiomRecognition 4 -1 roll put setuserparams
   } if
-} .bind def
+} .forcebind def
 
 % Turn off array packing, since some PostScript code assumes that
 % procedures are writable.
@@ -2685,6 +2832,8 @@
 
 DELAYBIND not {
   systemdict /.bindnow .undef       % We only need this for DELAYBIND
+  systemdict /.internalbind .undef
+  systemdict /.forcebind .undef
   systemdict /.forcecopynew .undef	% remove temptation
   systemdict /.forceput .undef		% ditto
   systemdict /.forceundef .undef	% ditto

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -46,7 +46,7 @@
 % Check parameters that are managed at the PostScript level.
 /.checkparamtype {		% <newvalue> <type> .checkparamtype <bool>
   exch type eq
-} .bind def
+} .forcebind def
 /.checksetparams {		% <newdict> <opname> <checkdict>
                                 %   .checksetparams <newdict>
   2 .argindex {
@@ -64,7 +64,7 @@
       pop
     } ifelse pop pop
   } forall pop pop
-} .bind def
+} .forcebind def
 
 % currentuser/systemparams creates and returns a dictionary in the
 % current VM.  The easiest way to make this work is to copy any composite
@@ -101,7 +101,7 @@
     1 index length string exch .setglobal
     copy exch not { readonly } if
   } if
-} .bind odef
+} .forcebind odef
 
 % Some user parameters are managed entirely at the PostScript level.
 % We take care of that here.
@@ -119,7 +119,7 @@
   psuserparams 3 copy pop
   type cvlit //.checkparamtype /exec load 3 packedarray cvx put
   userparams 3 1 roll put
-} .bind def
+} .forcebind def
 end
 /currentuserparams {		% - currentuserparams <dict>
   /userparams .systemvar dup length dict .copydict
@@ -164,12 +164,12 @@
         % Set them again to the new values.  From here on, we are safe,
         % since a context switch will consult userparams.
   .setuserparams
-} .bind executeonly odef % must be bound and hidden for .forceput
+} .forcebind odef % must be bound and hidden for .forceput
 
 /setuserparams {		% <dict> setuserparams -
     {.setuserparams2} stopped
     {/setuserparams load $error /errorname get signalerror} if
-} .bind odef
+} .forcebind odef
 % Initialize user parameters managed here.
 /JobName () .definepsuserparam
 
@@ -177,7 +177,7 @@
 % (Since userparams is in local VM, save takes care of saving them.)
 /restore {		% <save> restore -
   //restore /userparams .systemvar .setuserparams
-} .bind odef
+} .forcebind odef
 
 % The pssystemparams dictionary holds some system parameters that
 % are managed entirely at the PostScript level.
@@ -231,7 +231,7 @@
       ifelse
     } executeonly
    forall pop
-} .bind executeonly odef
+} .forcebind odef
 
 % Initialize the passwords.
 % NOTE: the names StartJobPassword and SystemParamsPassword are known to
@@ -246,7 +246,7 @@
   stopped
     {  /setcachelimit .systemvar $error /errorname get signalerror
     } if
-} .bind odef
+} .forcebind odef
 /setcacheparams {
         % The MaxFontCache parameter is a system parameter, which we might
         % not be able to set.  Fortunately, this doesn't matter, because
@@ -260,7 +260,7 @@
   .dicttomark { setuserparams cleartomark } stopped {
     /setcacheparams .systemvar $error /errorname get signalerror
   } if
-} .bind odef
+} .forcebind odef
 
 % Add bogus user and system parameters to satisfy badly written PostScript
 % programs that incorrectly assume the existence of all the parameters
@@ -292,7 +292,7 @@
     }
     ifelse
     //true
-  } .bind def
+  } .forcebind def
 % Initialize the File Permission access control to wide open
 % These will only be accessed via current/set userparams.
 % Values are a string containing multiple nul terminated path strings
@@ -342,13 +342,13 @@
       pop //false
     } ifelse
   } ifelse
-} .bind def
+} .forcebind def
 /ProcessComment //null .definepsuserparam
 psuserparams /ProcessComment {//.checkprocesscomment exec} put
 (%ProcessComment) cvn {
   /ProcessComment getuserparam
   dup //null eq { pop pop pop } { exec } ifelse
-} bind def
+} .internalbind def
 /ProcessDSCComment //null .definepsuserparam
 psuserparams /ProcessDSCComment {//.checkprocesscomment exec} put
 /.loadingfont //false def
@@ -355,7 +355,7 @@
 (%ProcessDSCComment) cvn {
   /ProcessDSCComment getuserparam
   dup //null eq .loadingfont or { pop pop pop } { exec } ifelse
-} bind def
+} .internalbind def
 
 % ------ Miscellaneous ------ %
 
@@ -400,7 +400,7 @@
   } {
     .where
   } ifelse
-} bind put
+} .internalbind put
 
 % ------ Virtual memory ------ %
 
@@ -434,7 +434,7 @@
     {pop /vmreclaim load $error /errorname get signalerror}
     {pop} ifelse
   } ifelse
-} .bind executeonly odef
+} .forcebind odef
 -1 setvmthreshold
 
 % ------ IODevices ------ %
@@ -486,13 +486,13 @@
       pop
       serverdict /.jobsave save put
       serverdict /.jobsavelevel 1 put
-      .userdict /quit { stop } .bind put  % CET 28-10 requires a procedure
+      .userdict /quit { stop } .forcebind put  % CET 28-10 requires a procedure
     } ifelse
                 % Reset the interpreter state.
   clear cleardictstack
   initgraphics
   //false setglobal
-} bind executeonly def
+} .internalbind def
 /.startjob {			% <exit_bool> <password> <finish_proc>
                                 %   .startjob <ok_bool>
   vmstatus pop pop serverdict /.jobsavelevel get eq
@@ -521,7 +521,7 @@
    { end //quit }
    { /quit .systemvar /invalidaccess /signalerror load end exec }
   ifelse
-} bind odef
+} .internalbind odef
 end
 
 % We would like to define exitserver as a procedure, using the code
@@ -536,7 +536,7 @@
   //true exch { .startnewjob } .startjob not {
     /exitserver cvx /invalidaccess signalerror
   } if
-} bind def
+} .internalbind def
 
 end		% serverdict
 
@@ -548,7 +548,7 @@
 % We don't bother with many of these yet.
 
 % convenience function to make a dictionary from an object and a key
-/.pair2dict { exch mark 3 1 roll .dicttomark } bind def
+/.pair2dict { exch mark 3 1 roll .dicttomark } .internalbind def
 
 currentglobal //false setglobal 25 dict exch setglobal begin
 currentsystemparams
@@ -558,28 +558,28 @@
 % Also define /buildtime in systemdict because Adobe does so and some fonts use it as ID
 systemdict /buildtime dup load put
 /byteorder 1 index /ByteOrder get def
-/checkpassword { .checkpassword 0 gt } bind def
+/checkpassword { .checkpassword 0 gt } .internalbind def
 dup /DoStartPage known
- { /dostartpage { /DoStartPage getsystemparam } bind def
-   /setdostartpage { /DoStartPage //.pair2dict exec setsystemparams } bind def
+ { /dostartpage { /DoStartPage getsystemparam } .internalbind def
+   /setdostartpage { /DoStartPage //.pair2dict exec setsystemparams } .internalbind def
  } if
 dup /StartupMode known
- { /dosysstart { /StartupMode getsystemparam 0 ne } bind def
-   /setdosysstart { { 1 } { 0 } ifelse /StartupMode //.pair2dict exec setsystemparams } bind def
+ { /dosysstart { /StartupMode getsystemparam 0 ne } .internalbind def
+   /setdosysstart { { 1 } { 0 } ifelse /StartupMode //.pair2dict exec setsystemparams } .internalbind def
  } if
 %****** Setting jobname is supposed to set userparams.JobName, too.
-/jobname { /JobName getuserparam } bind def
-/jobtimeout { /JobTimeout getuserparam } bind def
-/ramsize { /RamSize getsystemparam } bind def
+/jobname { /JobName getuserparam } .internalbind def
+/jobtimeout { /JobTimeout getuserparam } .internalbind def
+/ramsize { /RamSize getsystemparam } .internalbind def
 /realformat 1 index /RealFormat get def
 dup /PrinterName known
- { /setprintername { /PrinterName //.pair2dict exec setsystemparams } bind def
+ { /setprintername { /PrinterName //.pair2dict exec setsystemparams } .internalbind def
  } if
 /printername
  { currentsystemparams /PrinterName .knownget not { () } if exch copy
- } bind def
+ } .internalbind def
 currentuserparams /WaitTimeout known
- { /waittimeout { /WaitTimeout getuserparam } bind def
+ { /waittimeout { /WaitTimeout getuserparam } .internalbind def
  } if
 
 % The following do require setpagedevice.
@@ -589,30 +589,30 @@
    /JobTimeout .knownget not { 0 } if
    exch /WaitTimeout .knownget not { 0 } if
    currentpagedevice /ManualFeedTimeout .knownget not { 0 } if
- } bind def
+ } .internalbind def
 /margins
  { currentpagedevice /Margins .knownget { exch } { [0 0] } ifelse
- } bind def
+ } .internalbind def
 /pagemargin
  { currentpagedevice /PageOffset .knownget { 0 get } { 0 } ifelse
- } bind def
+ } .internalbind def
 /pageparams
  { currentpagedevice
    dup /Orientation .knownget { 1 and ORIENT1 { 1 xor } if } { 0 } ifelse exch
    dup /PageSize get aload pop 3 index 0 ne { exch } if 3 2 roll
    /PageOffset .knownget { 0 get } { 0 } ifelse 4 -1 roll
- } bind def
+ } .internalbind def
 /setdefaulttimeouts
  { exch mark /ManualFeedTimeout 3 -1 roll
    /Policies mark /ManualFeedTimeout 1 .dicttomark
    .dicttomark setpagedevice
    /WaitTimeout exch mark /JobTimeout 5 2 roll .dicttomark setsystemparams
- } bind def
-/setduplexmode { /Duplex //.pair2dict exec setpagedevice } bind def
+ } .internalbind def
+/setduplexmode { /Duplex //.pair2dict exec setpagedevice } .internalbind def
 /setmargins
  { exch 2 array astore /Margins //.pair2dict exec setpagedevice
- } bind def
-/setpagemargin { 0 2 array astore /PageOffset //.pair2dict exec setpagedevice } bind def
+ } .internalbind def
+/setpagemargin { 0 2 array astore /PageOffset //.pair2dict exec setpagedevice } .internalbind def
 /setpageparams
  { mark /PageSize 6 -2 roll
    4 index 1 and ORIENT1 { 1 } { 0 } ifelse ne { exch } if 2 array astore
@@ -619,7 +619,7 @@
    /Orientation 5 -1 roll ORIENT1 { 1 xor } if
    /PageOffset counttomark 2 add -1 roll 0 2 array astore
    .dicttomark setpagedevice
- } bind def
+ } .internalbind def
 /setresolution
  { count 1 lt { /setresolution cvx /stackunderflow signalerror } if
    dup type dup /integertype eq exch /realtype eq or not
@@ -629,7 +629,7 @@
    dup 2 array astore /HWResolution //.pair2dict exec { setpagedevice } stopped {
      pop /setresolution cvx $error /errorname get signalerror
    } if
- } bind def
+ } .internalbind def
 %END PAGEDEVICE
 
 % The following are not implemented yet.
@@ -780,15 +780,15 @@
   } {
     pop /none
   } ifelse
-} bind def
+} .internalbind def
 
 /GetHalftoneName {		% - GetHalftoneName <name>
   currenthalftone /HalftoneName .knownget not { /none } if
-} bind def
+} .internalbind def
 
 /GetSubstituteCRD {		% <intentname> GetSubstituteCRD <crdname>
   pop /DefaultColorRendering
-} bind def
+} .internalbind def
 
 end
 % The resource machinery hasn't been activated, so just save the ProcSet
@@ -819,13 +819,13 @@
     //.renderingintentdict exch .knownget { .setrenderingintent } if
   } if
   dup .buildcolorrendering1 .setcolorrendering1
-} .bind put
+} .forcebind put
 
 % Note: the value 101 in the next line must be the same as the value of
 % GX_DEVICE_CRD1_TYPE in gscrdp.h.
 .colorrenderingtypes 101 {
   dup .builddevicecolorrendering1 .setdevicecolorrendering1
-} .bind put
+} .forcebind put
 
 % sRGB output CRD, D65 white point
 mark
@@ -868,7 +868,7 @@
   mark
     /DecodeLMN [ {
       dup 0.03928 le { 12.92321 div } { 0.055 add 1.055 div 2.4 exp } ifelse
-    } bind dup dup ] readonly
+    } .internalbind dup dup ] readonly
     /MatrixLMN [
       0.412457 0.212673 0.019334
       0.357576 0.715152 0.119192
@@ -996,7 +996,7 @@
     }ifelse
   }
   {exec} ifelse
-} .bind odef	% must bind .forceput
+} .forcebind odef	% must .internalbind .forceput
 
 /.formtypes 5 dict
   dup 1 /.execform1 load put
@@ -1072,10 +1072,10 @@
 % the values given into an array.  This is consistent with what we see when
 % testing with Adobe Distiller 6.0.
 %   <cyan> <magenta> <yellow> <black> <key> findcmykcustomcolor <array>
-/findcmykcustomcolor { 5 array astore } bind executeonly def
+/findcmykcustomcolor { 5 array astore } .internalbind def
 % The following isn't documented by Adobe, but was found in Adobe Illustrator (R)
 % Version 7.0 Full Prolog
-/findrgbcustomcolor { 4 array astore } bind executeonly def
+/findrgbcustomcolor { 4 array astore } .internalbind def
 
 % Build a tint transform function for use by setcustomcolor.  This function
 % is for a Separation color space which has either a DeviceCMYK base color space
@@ -1104,7 +1104,7 @@
     ]
   } ifelse
   cvx bind exch pop		%  Make executable and remove the input array
-} bind executeonly def
+} .internalbind def
 
 % Construct the colorspace array to be used by setcolorspace from the array
 % result of either findcmykcustomcolor or findrgbcustomcolor.
@@ -1124,7 +1124,7 @@
     ]
   } ifelse
   exch pop		% remove the input array
-} bind executeonly def
+} .internalbind def
 
 % Set a custom color based upon a tint and array which describes the custom
 % color.  See findcmykcustomcolor.  First we create and then set a Separation
@@ -1178,7 +1178,7 @@
     setcolorspace			% Set the Separation color space as current
     setcolor			% Set the tint as the current color
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 % This proc is supposed to implement a version of overprinting. TN 5044 says
 % that this proc is not used by any shipping host-based application. We have
@@ -1189,9 +1189,9 @@
 % to 0.
 /setcmykoverprint {
   4 { dup -1 eq { pop 0 } if 4 1 roll } repeat setcmykcolor
-} bind def
+} .internalbind def
 
-/separation_all [/Separation /All /DeviceCMYK { dup dup dup } bind ] readonly def
+/separation_all [/Separation /All /DeviceCMYK { dup dup dup } .internalbind ] readonly def
 
 % Collect the arguments into the image dictionary
 % <width> <height> <bits/sample> <matrix> <proc> args2dict <dict>
@@ -1201,7 +1201,7 @@
   { /ImageType /Decode /DataSource /ImageMatrix /BitsPerComponent /Height /Width
   } { exch def } forall
   currentdict end
-} bind def
+} .internalbind def
 
 % Prints (1-gray) on all separations.
 % <gray> setseparationgray -
@@ -1208,7 +1208,7 @@
 /setseparationgray {
   //separation_all setcolorspace
   1 exch sub setcolor
-} bind def
+} .internalbind def
 
 % Renders an image whose sample values specify the amount of the custom color.
 % <width> <height> <bits/sample> <matrix> <proc> <array> customcolorimage -
@@ -1217,7 +1217,7 @@
   //buildcolorspacearray exec setcolorspace
   //args2dict exec image
   grestore
-} bind def
+} .internalbind def
 
 % Renders an image on all process and custom color plates.
 % <width> <height> <bits/sample> <matrix> <proc>
@@ -1226,7 +1226,7 @@
   //separation_all setcolorspace
   //args2dict exec image
   grestore
-} bind def
+} .internalbind def
 
 { /buildcustomtinttransform /buildcolorspacearray /separation_all /args2dict }
 { currentdict exch undef } forall

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2023 Artifex Software, Inc.
+% Copyright (C) 2001-2024 Artifex Software, Inc.
 % All Rights Reserved.
 %
 % This software is provided AS-IS with no warranty, either express or
@@ -110,7 +110,7 @@
     3 index read not { pop exch not exch exit } if
     3 copy put pop pop
   } for 3 -1 roll pop exch
-} bind def
+} .internalbind def
 
 /.bigstring {	% <size> .bigstring <string|bytestring>
   count 1 lt { /.bigstring cvx /stackunderflow signalerror } if
@@ -118,7 +118,7 @@
     /.bigstring cvx /typecheck signalerror
   } if
   dup 65400 gt { .bytestring } { string } ifelse
-} bind def
+} .internalbind def
 
 % ------ HalftoneTypes 6, 10, 16 and HalftoneMode ------ %
 
@@ -163,7 +163,7 @@
   } if
   mark /HalftoneType 5 /Default currentdict end .dicttomark
   { .sethalftone5 }
-} bind def
+} .internalbind def
 
 /.sethalftone6 {	% <dict> <dict> .sethalftone6 <setdict> <dict5>
                         %   { .sethalftone5 }
@@ -171,7 +171,7 @@
   dup /Thresholds get
   1 index /Width get 2 index /Height get
   //null 8 //.makehalftone7 exec
-} bind def
+} .internalbind def
 
 /.sethalftone10 {	% <dict> <dict> .sethalftone10 <setdict> <dict5>
                         %   { .sethalftone5 }
@@ -181,7 +181,7 @@
   dup /Thresholds get dup type /stringtype eq { 0 () .subfiledecode } if
   1 index /Xsquare get dup 3 index /Ysquare get dup
   8 //.makehalftone7 exec
-} bind def
+} .internalbind def
 
 /.sethalftone16 {	% <dict> <dict> .sethalftone16 <setdict> <dict5>
                         %   { .sethalftone5 }
@@ -194,7 +194,7 @@
   } {			% 1-rectangle case
     //null
   } ifelse 16 //.makehalftone7 exec
-} bind def
+} .internalbind def
 
 .halftonetypes begin
   6 //.sethalftone6 def
@@ -208,9 +208,12 @@
     //setcolorscreen
   } {
     12 { pop } repeat //.getdefaulthalftone exec
+    currentglobal
+    true setglobal
     { //sethalftone }
     { .setdefaulthalftone }
     ifelse
+    setglobal
   } ifelse
 } odef
 /setscreen {
@@ -218,9 +221,12 @@
     //setscreen
   } {
     pop pop pop //.getdefaulthalftone exec
+    currentglobal
+    true setglobal
     { //sethalftone }
     { .setdefaulthalftone }
     ifelse
+    setglobal
   } ifelse
 } odef
 /sethalftone {
@@ -227,11 +233,14 @@
   /HalftoneMode getuserparam 0 eq {
     //sethalftone
   } {
-    gsave //sethalftone grestore
+    pop
+    currentglobal
+    true setglobal
     //.getdefaulthalftone exec
     { //sethalftone }
     { .setdefaulthalftone }
     ifelse
+    setglobal
   } ifelse
 } odef
 
@@ -248,7 +257,7 @@
   exch dup                            % /name <<sub-image>> <<image>> <<image>>
   4 2 roll                            % <<image>> <<image>> /name <<sub-image>>
   put                                 % <<image>>
-} bind def
+} .internalbind def
 
 % Copy mask data source to a reusable stream
 % <dict> <source> buffer_mask <dict> <file>
@@ -258,7 +267,7 @@
   1 index /BitsPerComponent get mul 7 add 8 idiv
   exch /Height get mul () /SubFileDecode filter
   /ReusableStreamDecode filter
-} bind def
+} .internalbind def
 
 % Data type vs. mask type decission table.
 % All procedures have the signature:
@@ -284,7 +293,7 @@
         1 array astore cvx 0 () /SubFileDecode filter
       } ifelse
       /DataDict //update_image3 exec
-    } bind
+    } .internalbind
   .dicttomark readonly
   /arraytype mark  % data is a proc
     /stringtype { % convert mask to proc
@@ -291,7 +300,7 @@
       exch pop
       1 array astore cvx
       /MaskDict //update_image3 exec
-    } bind
+    } .internalbind
     /arraytype { % buffer mask in reusable stream and convert back to proc
       exch pop
       //buffer_mask exec
@@ -299,7 +308,7 @@
       { readstring pop } aload pop
       4 packedarray cvx
       /MaskDict //update_image3 exec
-    } bind
+    } .internalbind
     /packedarraytype 1 index
     /filetype 1 index
   .dicttomark readonly
@@ -309,12 +318,12 @@
       exch pop
       1 array astore cvx 0 () /SubFileDecode filter
       /MaskDict //update_image3 exec
-    } bind
+    } .internalbind
     /arraytype { % buffer the mask and convert to file
       exch pop
       //buffer_mask exec
       /MaskDict //update_image3 exec
-    } bind
+    } .internalbind
     /packedarraytype 1 index
     /filetype {
       //systemdict /userdict get /PDFTopSave known {
@@ -324,7 +333,7 @@
         //buffer_mask exec
         /MaskDict //update_image3 exec
       } ifelse
-    } bind
+    } .internalbind
   .dicttomark readonly
 .dicttomark readonly def
 
@@ -352,7 +361,7 @@
       } ifelse
     } if
     .image3
-  } bind put
+  } .internalbind put
   dup 4 /.image4 load put
 % We also detect ImageType 103 here: it isn't worth making a separate file
 % just for this.
@@ -443,7 +452,7 @@
     /$error .systemvar /errorinfo [ /ColorSpace //null ] put
     /shfill .systemvar /undefined signalerror
   } ifelse
-} bind def
+} .internalbind def
 
 /.buildshading_and_shfill {
   //.buildshading exec .shfill
@@ -464,7 +473,7 @@
   } if
   .buildshadingpattern
   3 -1 roll pop counttomark 1 add 2 roll setcolorspace setcolor pop
-} bind def
+} .internalbind def
 
 .patterntypes
   2 //.buildpattern2 put

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -1,4 +1,4 @@
-% Copyright (C) 2001-2023 Artifex Software, Inc.
+% Copyright (C) 2001-2024 Artifex Software, Inc.
 % All Rights Reserved.
 %
 % This software is provided AS-IS with no warranty, either express or
@@ -23,8 +23,9 @@
 % These correspond to the 4 predefined settings in Acrobat Distiller 5,
 % plus a "default" setting that doesn't downsample images.
 
+mark
 { /pdfwrite finddevice pop } .internalstopped
-{pop pop (%END PDFWR) .skipeof} if
+{cleartomark (%END PDFWR) .skipeof} {cleartomark} ifelse
 
 languagelevel 2 .setlanguagelevel
 
@@ -333,7 +334,7 @@
     } loop
     pop pop pop
   } ifelse
-} bind def
+} .internalbind def
 
 % Encode values to pass for the /pdfmark or /DSC pseudo-parameter.
 /.pdf===dict mark
@@ -345,7 +346,7 @@
          1 index exch pdf===only ( )
        }
       forall pop exch writestring
-   } bind
+   } .internalbind
   /packedarraytype 1 index
   /dicttype
    { 1 index (<<\n) writestring
@@ -353,7 +354,7 @@
         1 index exch pdf===only dup (\n) writestring
       }
      forall (>>) writestring
-   } bind
+   } .internalbind
   /nametype {
     % If the name string includes any non-regular characters,
     % write it with two preceding and one following null character(s).
@@ -373,7 +374,7 @@
     } {
       write===only
     } ifelse
-  } bind
+  } .internalbind
   /realtype {
     % Prevent using floating point format - see Bug 688167.
     dup dup 0 lt { neg } if 0.01 lt {
@@ -388,11 +389,11 @@
     } {
       write===only
     } ifelse
-  } bind
+  } .internalbind
 .dicttomark readonly def
 /pdf===only {	% <file> <obj> pdf===only -
   .pdf===dict 1 index type .knownget { exec } { write===only } ifelse
-} bind def
+} .internalbind def
 /.pdfcvbuf 30 string def	% enough for most arguments
 userdict /.pdfcvstring () put
 /.pdfcvs {		% <obj> .pdfcvs <string>
@@ -405,7 +406,7 @@
   } /NullEncode filter dup 3 -1 roll pdf===only
   closefile
   .setglobal .pdfcvstring
-} bind def
+} .internalbind def
 
 % Redefine pdfmark to pass the data to the driver.
 % We use a pseudo-parameter named /pdfmark whose value is an array:
@@ -414,7 +415,7 @@
   currentdevice //null //false counttomark 1 add 3 roll
                 % Don't allow the page device to get cleared....
   {.putdeviceparams} .currentpagedevice pop {.setpagedevice} 3 .execn
-} bind def
+} .internalbind def
 % Convert relevant operands to strings in an array.
 /.pdfcvsloop {		% -mark- values ... markname start step .pdfcvsloop
                         %   [values ... ctm markname]
@@ -424,20 +425,20 @@
    3 1 roll
                         % Stack: values start step
    2 index length 3 sub { 2 copy 2 copy get .pdfcvs put pop } for
-} bind def
+} .internalbind def
 /.pdfcvsall {		% -mark- values ... markname .pdfcvsall <<same>>
   0 1 .pdfcvsloop
-} bind def
+} .internalbind def
 /.pdfcvseven {		% -mark- key value ... markname .pdfcvseven <<same>>
   1 2 .pdfcvsloop
-} bind def
+} .internalbind def
 /.pdfcvsnone {		% -mark- values ... markname .pdfcvsnone <<same>>
   100000 1 .pdfcvsloop
-} bind def
+} .internalbind def
 /.pdfcvsfirst {		% -mark- first values ... markname .pdfcvsfirst<<same>>
   .pdfcvsnone
   dup 0 2 copy get .pdfcvs put
-} bind def
+} .internalbind def
 % The procedures in the following dictionary are called with the entire
 % pdfmark operand list (including the pdfmark name) on the stack;
 % they may modify this ad lib.  They must call .pdfcvsxxx.
@@ -461,16 +462,16 @@
     } {
       .pdfcvsall
     } ifelse
-  } bind
+  } .internalbind
         % Unpack the array for PUTINTERVAL.
   /PUTINTERVAL {
     pop aload pop /.PUTINTERVAL .pdfcvsall
-  } bind
+  } .internalbind
 .dicttomark readonly def
 /.pdfparamerror {	% ? ? ? -mark- ... <errname> <opname> .pdfparamerror -
     counttomark 4 add 2 roll cleartomark pop pop pop
     .systemvar exch signalerror
-} bind def
+} .internalbind def
 
 /.CountLeafs {
   0 exch
@@ -496,7 +497,7 @@
       pop pop 0 exit
     } ifelse
   } forall
-} bind def
+} .internalbind def
 
 /.ExtractLeafs
 {
@@ -521,7 +522,7 @@
       } if
     } ifelse
   } forall
-} bind def
+} .internalbind def
 
 /.pdfpagelabels {
   dup type /dicttype eq {
@@ -571,7 +572,7 @@
   }{
     /pdfpagelabels .pdfparamerror
   } ifelse
-} bind def
+} .internalbind def
 
 /pdfmark {		% -mark- <key> <value> ... <markname> pdfmark -
   counttomark 0 eq {
@@ -643,7 +644,7 @@
             } {
               resourcestatus
             } ifelse
-          } bind .makeoperator .forceput
+          } .internalbind .makeoperator .forceput
           systemdict /.pdf_hooked_DSC_Creator //true .forceput
         } executeonly if
         pop
@@ -655,7 +656,7 @@
   {
     pop
   } ifelse
-} .bind executeonly odef % must be bound and hidden for .forceput
+} .forcebind odef % must be bound and hidden for .forceput
 
 % Use the DSC processing hook to pass DSC comments to the driver.
 % We use a pseudo-parameter named DSC whose value is an array:
@@ -686,7 +687,7 @@
   } {
     pop pop pop
   } ifelse
-} bind def
+} .internalbind def
 currentdict /.pdf_hook_DSC_Creator undef
 /.initialize_dsc_parser where {
   pop
@@ -719,7 +720,7 @@
       << /ProcessDSCComment 3 -1 roll >> setuserparams
       setglobal
     } if
-  } bind .schedule_init
+  } .internalbind .schedule_init
 } if
 
 % ---------------- {set,current}distillerparams ---------------- %
@@ -864,7 +865,7 @@
     { currentdevice }
     { /pdfwrite finddevice }
    ifelse
- } bind def
+ } .internalbind def
 
 % Some badly designed PostScript files only expect the current/set
 % distillerparams operators to exist in a distiller. Since we have
@@ -902,7 +903,7 @@
     /setdistillerparams cvx /undefined signalerror
   } if
   .setdistillerparams
-} bind odef
+} .internalbind odef
 /currentdistillerparams {
   % Check to see if the current device is a Distiller
   /IsDistiller /GetDeviceParam .special_op {
@@ -914,7 +915,7 @@
     /currentdistillerparams cvx /undefined signalerror
   } if
   .currentdistillerparams
-} bind odef
+} .internalbind odef
 
 % Patch 'where' so that the distiller operators are only visible
 % if the pdfwrite device is the current one.
@@ -930,7 +931,7 @@
   } {
     .where pop dup //systemdict eq { pop //false } { //true } ifelse
   } ifelse
-} bind
+} .internalbind
 { /currentdistillerparams /setdistillerparams /pdfmark }
 { .wheredict exch 2 index put } forall pop
 
@@ -954,7 +955,7 @@
   } {
     known
   } ifelse
-} .bind odef
+} .forcebind odef
 
 % Create a table for translation DSC comments into Unicode UTF-16
 /.make_DSC_translation_table {        % <encoding> .make_DSC_translation_table <array>
@@ -985,7 +986,7 @@
     3 1 roll put                             % [out] [in]
   } for
   pop                                        % [out]
-} bind def
+} .internalbind def
 
 1000 % priority
 {
@@ -1000,20 +1001,18 @@
   systemdict /ProvideUnicode .knownget not { //false } if or
   {
     currentglobal //true setglobal
-    systemdict /.setupUnicodeDecoder known {
-      /Unicode /Decoding resourcestatus {
-        pop pop
-        /Unicode /Decoding findresource
-        .setupUnicodeDecoder
-      } {
-        QUIET not {
-          (WARNING: /Unicode /Decoding resource is not accessible but it is useful for generating ToUnicode CMap.) =
-        } if
-      } ifelse
-    } if
+    /Unicode /Decoding resourcestatus {
+      pop pop
+      /Unicode /Decoding findresource
+      .setupUnicodeDecoder
+    } {
+      QUIET not {
+        (WARNING: /Unicode /Decoding resource is not accessible but it is useful for generating ToUnicode CMap.) =
+      } if
+    } ifelse
     setglobal
   } if
-} bind .schedule_init
+} .internalbind .schedule_init
 
 1010 % priority
 {
@@ -1056,7 +1055,7 @@
     currentdict end .setdistillerparams
     .distillerdevice //null //false mark .putdeviceparams
     dup type /booleantype eq not { cleartomark pop } if pop pop
-} bind .schedule_init
+} .internalbind .schedule_init
 
 2000 % priority
 { % Note, this may not work if the initial device is not pdfwrite
@@ -1067,7 +1066,7 @@
     % Inform the device with initial graphic state. See gdev_pdf_fill_path.
     newpath fill
   } if
-} bind .schedule_init
+} .internalbind .schedule_init
 
 .setlanguagelevel
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_res.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_res.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_res.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -103,7 +103,7 @@
 /.findcategory {	% <name> .findcategory -
                         %   (pushes the category on the dstack)
     /Category .findresource begin	% note: *not* findresource
-} bind def
+} .internalbind def
 
 % If an error occurs within the logic of a resource operator (after operand
 % acquisition and checking), the Adobe interpreters report the operator name,
@@ -119,12 +119,12 @@
 /.undefinedresource {	% <command> .undefinedresource -
     /Category dup load eq { /undefined } { /undefinedresource } ifelse
     signaloperror
-} bind def
+} .internalbind def
 
 /.resourceexec {	% <key> /xxxResource .resourceexec -
                         %   (also pops the category from the dstack)
   load exec end
-} bind def
+} .internalbind def
 
 % .getvminstance treats instances on disk as undefined.
 /.getvminstance {	% <key> .getvminstance <instance> -true-
@@ -134,7 +134,7 @@
   } {
     //false
   } ifelse
-} bind def
+} .internalbind def
 
 20 dict begin
 
@@ -155,10 +155,10 @@
         }{
           /defineresource cvx /typecheck signaloperror
         } ifelse
-} bind executeonly odef
+} .internalbind odef
 /FindResource		% (redefined below)
         { .Instances exch get 0 get
-        } bind executeonly def
+        } .internalbind def
 
                 % Additional entries
 
@@ -168,7 +168,7 @@
 /.LocalInstances 0 dict def
 /.GetInstance
         { .Instances exch .knownget
-        } bind def
+        } .internalbind def
 /.CheckResource
         { dup gcheck currentglobal and
            { /DefineResource /FindResource /ResourceForAll /ResourceStatus
@@ -177,7 +177,7 @@
           forall
           not { /defineresource cvx /invalidaccess signaloperror } if
           //true
-        } bind def
+        } .internalbind def
 
 .Instances end begin	% for the base case of findresource
 
@@ -198,7 +198,7 @@
         2 copy dup /Category eq
           { pop //Category 0 get begin } { //.findcategory exec } ifelse
         /FindResource //.resourceexec exec exch pop exch pop
-} bind
+} .internalbind
 end		% .Instances of Category
 def
 /findresource {
@@ -210,7 +210,7 @@
       /findresource .systemvar /typecheck signalerror
     } if
     /findresource cvx //.findresource .errorexec
-} bind executeonly odef
+} .internalbind odef
 
 /defineresource {	% <key> <instance> <category> defineresource <instance>
     2 .argindex 2 index 2 index	% catch stackunderflow
@@ -226,7 +226,7 @@
         /DefineResource //.resourceexec exec
         4 1 roll pop pop pop
     } .errorexec
-} bind executeonly odef
+} .internalbind odef
 % We must prevent resourceforall from automatically restoring the stacks,
 % because we don't want the stacks restored if proc causes an error or
 % executes a 'stop'. On the other hand, resourceforall is defined in the
@@ -240,10 +240,10 @@
         % Stack: <template> <proc> <scratch> <category> proc
         exch pop		% pop the category
         exec end
-} .bind executeonly def
+} .forcebind def
 /resourceforall {	% <template> <proc> <scratch> <category> resourceforall1 -
         //resourceforall1 exec		% see above
-} .bind executeonly odef
+} .forcebind odef
 /resourcestatus {	% <key> <category> resourcestatus <status> <size> true
                         % <key> <category> resourcestatus false
   {
@@ -259,7 +259,7 @@
     % for error reporting. CET 23-26
     /resourcestatus cvx $error /errorname get signalerror
   } if
-} .bind executeonly odef
+} .forcebind odef
 /undefineresource {	% <key> <category> undefineresource -
   0 .argindex type /nametype ne {
     /undefinedresource cvx /typecheck signaloperror
@@ -272,7 +272,7 @@
     % here but uses operator for the errors above. CET 23-33
     /undefineresource cvx $error /errorname get signalerror
   } if
-} .bind executeonly odef
+} .forcebind odef
 
 % Define the system parameters used for the Generic implementation of
 % ResourceFileName.
@@ -293,7 +293,7 @@
       } ifelse
     } ifelse
   } forall
-} bind def
+} .internalbind def
 
 %  <path> <name> <string> .resource_dir_name <path> <name> <string>
 /.resource_dir_name
@@ -310,7 +310,7 @@
       /.default_resource_dir cvx /configurationerror signalerror
     } if
   } ifelse
-} bind def
+} .internalbind def
 
 currentdict /pssystemparams known not {
   /pssystemparams 10 dict readonly def
@@ -364,7 +364,7 @@
 /.rfnstring 8192 string def
 /.genericrfn		% <key> <scratch> <prefix> .genericrfn <filename>
  { 3 -1 roll //.rfnstring cvs concatstrings exch copy
- } bind def
+ } .internalbind def
 
 % Define the Generic category.
 
@@ -385,11 +385,11 @@
         % Use .setstackprotect to prevent the stacks from being restored if
         % an error occurs during execution of proc.
   1 get //false .setstackprotect exec //true .setstackprotect
-} bind def
+} .internalbind def
 /.localresourceforall {		% <key> <value> <args> .localr'forall -
   exch pop
   2 copy 0 get .stringmatch { //.enumerateresource exec } { pop pop } ifelse
-} bind def
+} .internalbind def
 /.globalresourceforall {	% <key> <value> <args> .globalr'forall -
   exch pop
   2 copy 0 get .stringmatch {
@@ -401,7 +401,7 @@
   } {
     pop pop
   } ifelse
-} bind def
+} .internalbind def
 /.externalresourceforall {	% <filename> <len> <args> .externalr'forall -
   3 1 roll 1 index length 1 index sub getinterval exch
   dup 3 get begin .Instances .LocalInstances end
@@ -411,7 +411,7 @@
   } {
     2 index known { pop pop } { //.enumerateresource exec } ifelse
   } ifelse
-} bind def
+} .internalbind def
 
 /DefineResource dup {
         .CheckResource
@@ -442,7 +442,7 @@
            { /defineresource cvx /typecheck signaloperror
            }
         ifelse
-} .bind executeonly .makeoperator		% executeonly to prevent access to .forceput
+} .forcebind .makeoperator		% executeonly to prevent access to .forceput
 /UndefineResource
         {  { dup 2 index .knownget
               { dup 1 get 1 ge
@@ -458,7 +458,7 @@
            { 2 copy .Instances exch exec
            }
           if .LocalInstances exch exec
-        } .bind executeonly
+        } .forcebind
 % Because of some badly designed code in Adobe's CID font downloader that
 % makes findresource and resourcestatus deliberately inconsistent with each
 % other, the default FindResource must not call ResourceStatus if there is
@@ -484,7 +484,7 @@
            /findresource cvx //.undefinedresource exec
           } ifelse
         } ifelse
-} .bind executeonly
+} .forcebind
 % Because of some badly designed code in Adobe's CID font downloader, the
 % definition of ResourceStatus for Generic and Font must be the same (!).
 % We patch around this by using an intermediate .ResourceFileStatus procedure.
@@ -494,10 +494,10 @@
         } {
           .ResourceFileStatus
         } ifelse
-} .bind executeonly
+} .forcebind
 /.ResourceFileStatus {
         .ResourceFile { closefile 2 -1 //true } { pop //false } ifelse
-} bind executeonly
+} .internalbind
 /ResourceForAll {
                 % Construct a new procedure to hold the arguments.
                 % All objects constructed here must be in local VM to avoid
@@ -555,7 +555,7 @@
         3 2 roll pop % args
         { forall } 0 get
         currentdict end 2 .execn begin
-} .bind executeonly
+} .forcebind
 
 /ResourceFileName  {                          % /in (scr) --> (p/c/n)
   exch //.rfnstring cvs                       % (scr) (n)
@@ -587,7 +587,7 @@
     ifelse
   } ifelse
   exch copy                                   % (p/c/n)
-} .bind executeonly
+} .forcebind
 
                 % Additional entries
 
@@ -601,7 +601,7 @@
 
 /.LocalInstances
         { localinstancedict Category .knownget not { //.emptydict } if
-        } bind
+        } .internalbind
 /.GetInstance
         { currentglobal
            { .Instances exch .knownget }
@@ -611,10 +611,10 @@
              ifelse
            }
           ifelse
-        } bind
+        } .internalbind
 /.CheckResource
         { //true
-        } bind
+        } .internalbind
 /.vmused {
                 % - .vmused <usedvalue>
                 % usedvalue = vmstatus in global + vmstatus in local.
@@ -622,7 +622,7 @@
     .currentglobal not .setglobal
     vmstatus pop exch pop add
   } repeat
-} bind executeonly odef
+} .internalbind odef
 /.DoLoadResource {
                 % .LoadResource may push entries on the operand stack.
                 % It is an undocumented feature of Adobe implementations,
@@ -641,7 +641,7 @@
         2 3 -1 roll put
                 % Stack: ... count key
         exch count 1 sub exch sub {exch pop} repeat
-} bind
+} .internalbind
 /.LoadResource
         { dup .ResourceFile
            { exch pop currentglobal
@@ -652,7 +652,7 @@
            { dup //.undefinedresource exec
            }
          ifelse
-        } bind
+        } .internalbind
 /.ResourceFile
         {
           Category //.rfnstring cvs length                      % key l
@@ -681,7 +681,7 @@
                pop //false
              } ifelse
           } ifelse
-        } bind
+        } .internalbind
 
 .dicttomark
 /Category defineresource pop
@@ -704,7 +704,7 @@
  /ColorSpaceFamily
    { }	% These must be deferred, because optional features may add some.
  /Emulator
-   mark EMULATORS { <00> search { exch pop cvn exch }{ cvn exit } ifelse } .bind loop //.packtomark exec
+   mark EMULATORS { <00> search { exch pop cvn exch }{ cvn exit } ifelse } .forcebind loop //.packtomark exec
  /Filter
    { }	% These must be deferred, because optional features may add some.
  /IODevice
@@ -753,17 +753,17 @@
              ifelse
            }
           ifelse
-        } bind executeonly
+        } .internalbind
    /UndefineResource
-        { /undefineresource cvx /invalidaccess signaloperror } bind executeonly
+        { /undefineresource cvx /invalidaccess signaloperror } .internalbind
    /FindResource
         { .Instances 1 index .knownget
            { exch pop }
            { /findresource cvx //.undefinedresource exec }
           ifelse
-        } bind executeonly
+        } .internalbind
    /ResourceStatus
-        { .Instances exch known { 0 0 //true } { //false } ifelse } bind executeonly
+        { .Instances exch known { 0 0 //true } { //false } ifelse } .internalbind
    /ResourceForAll
         /Generic //.findcategory exec /ResourceForAll load end
 
@@ -790,7 +790,7 @@
    dict .copydict begin
    counttomark 2 idiv { def } repeat pop	% pop the mark
    currentdict end /Category defineresource pop
- } bind def
+ } .internalbind def
 
 /ColorRendering mark /InstanceType /dicttype .definecategory
 % ColorSpace is defined below
@@ -844,10 +844,10 @@
 % The "hooks" are no-ops here, redefined in LL3.
 /.definedefaultcs {	% <index> <value> .definedefaultcs -
   pop pop
-} bind def
+} .internalbind def
 /.undefinedefaultcs {	% <index> .undefinedefaultcs -
   pop
-} bind def
+} .internalbind def
 
 /ColorSpace mark
 
@@ -866,7 +866,7 @@
     1 index //.definedefaultcs exec
     currentglobal not { .userdict /.localcsdefaults //true put } if
   } if
-} bind executeonly
+} .internalbind
 
 /UndefineResource {
   dup /Generic /Category findresource /UndefineResource get exec
@@ -889,7 +889,7 @@
   } {
     pop
   } ifelse
-} bind executeonly
+} .internalbind
 
 .definecategory			% ColorSpace
 
@@ -904,7 +904,7 @@
 
 /.Instances mark
   EncodingDirectory
-   { dup length 256 eq { [ exch readonly 0 -1 ] } { pop [//null 2 -1] } ifelse
+   {dup length 256 eq { [ exch readonly 0 -1 ] } { pop [//null 2 -1] } ifelse
    } forall
 .dicttomark
 
@@ -919,7 +919,7 @@
     { exch copy exch pop }
     { /Generic /Category findresource /ResourceFileName get exec }
    ifelse
- } bind executeonly
+ } .internalbind
 
 .definecategory			% Encoding
 
@@ -973,7 +973,7 @@
                 % Scan a FONTPATH directory and try again.
     //.scannextfontdir exec not { //false exit } if
   } loop
-} bind def
+} .internalbind def
 
 /.fontstatus {		% <fontname> .fontstatus <fontname> <found>
   //.fontstatusaux exec
@@ -983,7 +983,7 @@
     { //.fontstatusaux exec }
     { //false } ifelse
   } ifelse
-} bind executeonly def
+} .internalbind def
 currentdict /.fontstatusaux .undef
 
 /Font mark
@@ -993,11 +993,11 @@
 /DefineResource
         { 2 copy //definefont exch pop
           /Generic /Category findresource /DefineResource get exec
-        } bind executeonly
+        } .internalbind
 /UndefineResource
         { dup //undefinefont
           /Generic /Category findresource /UndefineResource get exec
-        } bind executeonly
+        } .internalbind
 /FindResource {
         dup //.getvminstance exec {
           exch pop 0 get
@@ -1008,14 +1008,14 @@
             .loadfontresource
           } ifelse
         } ifelse
-} bind executeonly
+} .internalbind
 /ResourceForAll {
         { //.scannextfontdir exec not { exit } if } loop
         /Generic /Category findresource /ResourceForAll get exec
-} .bind executeonly
+} .forcebind
 /.ResourceFileStatus {
         .fontstatus { pop 2 -1 //true } { pop //false } ifelse
-} bind executeonly
+} .internalbind
 
 /.loadfontresource {
         dup //.vmused exch
@@ -1032,7 +1032,7 @@
         } {
           pop
         } ifelse exch pop
-} bind
+} systemdict /CETMODE .knownget not {//false} if {.bind}{.internalbind}ifelse
 
 /.Instances FontDirectory length 2 mul dict
 
@@ -1052,16 +1052,16 @@
     }
    ifelse
    //.definefontmap exec
- } bind def
+ } .internalbind def
 
 /definefont {
   { /Font defineresource } stopped {
       /definefont cvx $error /errorname get signalerror
   } if
-} bind executeonly odef
+} .internalbind odef
 /undefinefont {
   /Font undefineresource
-} bind executeonly odef
+} .internalbind odef
 % The Red Book requires that findfont be a procedure, not an operator,
 % but it still needs to restore the stacks reliably if it fails.
 /.findfontop {
@@ -1068,10 +1068,10 @@
   { /Font findresource } stopped {
     pop /findfont cvx $error /errorname get signalerror
   } if
-} bind executeonly odef
+} .internalbind odef
 /findfont {
   .findfontop
-} bind executeonly def	% Must be a procedure, not an operator
+} .internalbind def	% Must be a procedure, not an operator
 
 % Remove initialization utilities.
 currentdict /.definecategory .undef
@@ -1093,9 +1093,9 @@
     { /Encoding findresource } stopped {
       pop /findencoding cvx $error /errorname get signalerror
     } if
-  } bind def
+  } .internalbind def
   /findencoding /.findencoding load def		% must be a procedure
-  /.defineencoding { /Encoding defineresource pop } bind def
+  /.defineencoding { /Encoding defineresource pop } .internalbind def
         % ColorRendering resources and ProcSet
   systemdict /ColorRendering .knownget {
     /ColorRendering exch /ProcSet defineresource pop
@@ -1158,7 +1158,7 @@
   } forall
         % clean up
   systemdict /.fixresources undef
-} bind def
+} .internalbind def
 
 %% Replace 1 (gs_resmp.ps)
 (gs_resmp.ps)  dup runlibfile VMDEBUG

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_resmp.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_resmp.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_resmp.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -118,7 +118,7 @@
     } ifelse                              % {precopy}
   } for                                   % {copy}
   cvx
-} bind def
+} .internalbind def
 
 //.BindAux 0 //BindWithCurrentdict put   % bind the recursive call in 'Bind'.
 
@@ -150,7 +150,7 @@
     /status 0 def % variable for the current status to enumerate - do not bind with it !
   end
   exch setglobal
-} bind def
+} .internalbind def
 
 /execstack_lookup     % <object> execstack_lookup <object1>
                       % <object> execstack_lookup null
@@ -208,7 +208,7 @@
     } ifelse
   } for                                            % <object> bGlobal [execstack] bResult
   exch pop exch setglobal exch pop                 % bResult
-} bind def
+} .internalbind def
 
 currentpacking //false setpacking
 /MethodsToRedefine 5 dict begin
@@ -383,7 +383,7 @@
         pop
       } if
       RESMPDEBUG { (resmp GetCIDSystemInfoFromMap end) = } if
-    } bind def
+    } .bind def
 
 currentdict end def
 setpacking
@@ -519,7 +519,7 @@
     CategoryName NewCategory /Category defineresource pop
   } if
   end % OptionsDict
-} bind executeonly def
+} .internalbind def
 
 currentdict /PutPreprocessRecord .undef
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -30,23 +30,23 @@
 
 (%gsavepagedevice) cvn
  { currentpagedevice pop gsave
- } bind def
+ } .internalbind def
 
 (%savepagedevice) cvn
  { currentpagedevice pop save
- } bind def
+ } .internalbind def
 
 (%gstatepagedevice) cvn
  { currentpagedevice pop gstate
- } bind def
+ } .internalbind def
 
 (%copygstatepagedevice) cvn
  { currentpagedevice pop copy
- } bind def
+ } .internalbind def
 
 (%currentgstatepagedevice) cvn
  { currentpagedevice pop currentgstate
- } bind def
+ } .internalbind def
 
 % Define interpreter callouts for handling gstate-restoring operators
 % when the current page device needs to be changed.
@@ -140,7 +140,7 @@
         ifelse .copydict readonly
       }
      ifelse
-   } bind
+   } .internalbind
   /OutputAttributes 1 index
   /Policies
     { 3 copy pop .knownget
@@ -147,7 +147,7 @@
        { dup length 2 index length add dict .copydict }
        { dup length dict }
       ifelse copy readonly
-    } bind
+    } .internalbind
 .dicttomark readonly def
 
 % M. Sweet, Easy Software Products:
@@ -261,7 +261,7 @@
       ifelse
     }
    forall pop
- } bind def
+ } .internalbind def
 
 currentdict /.presentspecial .undef
 
@@ -284,7 +284,7 @@
      /setpagedevice .systemvar /rangecheck signalerror
    } if
    2 array astore
- } bind def
+ } .internalbind def
 
 % Try setting the device parameters from the merged request.
 /.trysetparams		% <merged> <(ignored)> <device> <Policies>
@@ -298,7 +298,7 @@
 SETPDDEBUG { (Putting.) = pstack flush } if
    .putdeviceparamsonly
 SETPDDEBUG { (Result of putting.) = pstack flush } if
- } bind executeonly odef
+ } .internalbind odef
 
 /.installpagedevice
  {	% Since setpagedevice doesn't create new device objects,
@@ -326,13 +326,13 @@
         % A careful reading of the Red Book reveals that an erasepage
         % should occur, but *not* an initgraphics.
    erasepage .beginpage
- } bind executeonly def
+ } .internalbind def
 
 /.uninstallpagedevice
  {
    {2 .endpage { .currentnumcopies //false .outputpage } if} //.internalstopped exec pop
    nulldevice
- } bind executeonly def
+ } .internalbind def
 
 (%grestorepagedevice) cvn
  {
@@ -339,23 +339,23 @@
  .uninstallpagedevice
  grestore
  //.installpagedevice exec
- } bind def
+ } .internalbind def
 
 (%grestoreallpagedevice) cvn
  { .uninstallpagedevice grestore //.installpagedevice exec grestoreall
- } bind def
+ } .internalbind def
 
 (%restore1pagedevice) cvn
  { .uninstallpagedevice grestore //.installpagedevice exec restore
- } bind def
+ } .internalbind def
 
 (%restorepagedevice) cvn
  { .uninstallpagedevice restore //.installpagedevice exec
- } bind def
+ } .internalbind def
 
 (%setgstatepagedevice) cvn
  { .uninstallpagedevice setgstate //.installpagedevice exec
- } bind def
+ } .internalbind def
 
 % Redefine .currentpagedevice and .setpagedevice so they convert between
 % null and a fixed empty directionary.
@@ -362,10 +362,10 @@
 /.nullpagedevice 0 dict readonly def
 /.currentpagedevice {
   //.currentpagedevice exch dup //null eq { pop //.nullpagedevice } if exch
-} bind odef
+} .internalbind odef
 /.setpagedevice {
   dup //.nullpagedevice eq { pop //null } if //.setpagedevice
-} bind odef
+} .internalbind odef
 
 % ---------------- Auxiliary definitions ---------------- %
 
@@ -394,7 +394,7 @@
     }
     if
     pop
-  } bind
+  } .internalbind
 .dicttomark readonly def
 % Note that the values of .requiredattrs are executed, not just fetched.
 /.requiredattrs mark
@@ -443,9 +443,9 @@
     mark 0 mark .dicttomark readonly .dicttomark
   }
   (%MediaDestination) 0
-  /Install {{.callinstall}} bind
-  /BeginPage {{.callbeginpage}} bind
-  /EndPage {{.callendpage}} bind
+  /Install {{.callinstall}} .internalbind
+  /BeginPage {{.callbeginpage}} .internalbind
+  /EndPage {{.callendpage}} .internalbind
   /Policies .defaultpolicies
   /ImagingBBox //null		% default value
   /UseCIEColor /.getuseciecolor load
@@ -490,7 +490,7 @@
   % makes the dictionary read only
   .writeonlykeys {2 index exch undef pop} forall
   dup .setpagedevice
-} bind def
+} .internalbind def
 
 % Copy a dictionary recursively.
 /.copytree {	% <dict> .copytree <dict'>
@@ -568,12 +568,12 @@
       readonly
     } ifelse
   } if
-} bind odef
+} .internalbind odef
 
 % Define access to device defaults.
 /.defaultdeviceparams
  { finddevice //null .getdeviceparams
- } bind def
+ } .internalbind def
 
 % Select media (input or output).  The hard work is done in an operator:
 %	<pagedict> <attrdict> <policydict> <keys> .matchmedia <key> true
@@ -606,7 +606,7 @@
       forall
     }
    ifelse
- } bind def
+ } .internalbind def
 
 % Apply Policies to any unprocessed failed requests.
 % As we process each request entry, we replace the error name
@@ -629,7 +629,7 @@
     cleartomark
     /setpagedevice .systemvar /configurationerror signalerror
   } ifelse
-} bind executeonly odef
+} .internalbind odef
 
 % Making this an operator means we can properly hide
 % the contents - specifically .forceput
@@ -642,7 +642,7 @@
   { 4 index 3 1 roll .forceput } executeonly
   { 3 index exch .undef }
   ifelse
-} bind executeonly odef
+} .internalbind odef
 
 /7Policy {		% For PageSize only, just impose the request.
   1 index /PageSize eq
@@ -649,7 +649,7 @@
   { pop pop 1 index /PageSize 7 put }
   { .policyprocs 0 get exec }
   ifelse
-} bind executeonly odef
+} .internalbind odef
 
 /.applypolicies		% <orig> <merged> <failed> .applypolicies
                         %   <orig> <merged'> <failed'>
@@ -674,7 +674,7 @@
      } ifelse
   }
   forall pop
-} .bind executeonly odef
+} .forcebind odef
 
 currentdict /0Policy undef
 currentdict /1Policy undef
@@ -695,7 +695,7 @@
     { pop .putdeviceparams
     }
    ifelse
- } bind def
+ } .internalbind def
 
 
 /.postinstall {		% mark ... <failed> <merged> .postinstall -
@@ -1003,7 +1003,7 @@
     //.postinstall exec
   } ifelse
   setglobal           % return to original VM allocation mode
-} .bind executeonly odef
+} .forcebind odef
 
 % We break out the code after calling the Install procedure into a
 % separate procedure, since it is executed even if Install causes an error.

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_statd.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_statd.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_statd.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -38,7 +38,7 @@
    } {
      pop pop	% success -- pop the arguments
    } ifelse
-} bind def
+} .internalbind def
 
 % Keep the table of named paper sizes as procedures. Reuse them later
 % as compatibility operators.
@@ -150,8 +150,8 @@
 
 % Define the pagetype values for the known page formats.
 % This array is now used for deterministic enumeration of .pagetypeprocs
-/.pagetypenames [ .pagetypeprocs { pop } bind forall ]
-  { .namestring exch .namestring gt } bind .sort
+/.pagetypenames [ .pagetypeprocs { pop } .internalbind forall ]
+  { .namestring exch .namestring gt } .internalbind .sort
   readonly def
 
 %%%%%% The following items were suggested by a user as useful.
@@ -160,41 +160,41 @@
 
 /ramsize         4194304 def
 /hardwareiomode        0 def
-        /sethardwareiomode     {pop} bind def
+        /sethardwareiomode     {pop} .internalbind def
 /softwareiomode        0 def
-        /setsoftwareiomode     {pop} bind def
+        /setsoftwareiomode     {pop} .internalbind def
 /dosysstart        //false def
-        /setdosysstart         {pop} bind def
+        /setdosysstart         {pop} .internalbind def
 /allowjobreset      //true def
-        /setallowjobreset      {pop} bind def
+        /setallowjobreset      {pop} .internalbind def
 /defaultpaperfamily    0 def
-        /setdefaultpaperfamily {pop} bind def
+        /setdefaultpaperfamily {pop} .internalbind def
 /defaultpapertray      0 def
-        /setdefaultpapertray   {pop} bind def
+        /setdefaultpapertray   {pop} .internalbind def
 /defaulttrayswitch //false def
-        /setdefaulttrayswitch  {pop} bind def
+        /setdefaulttrayswitch  {pop} .internalbind def
 
 % Tray and format selection
 
-/11x17tray {/11x17 .uservar stopped { pop pop /11x17tray $error /errorname get signalerror } if } bind executeonly def
-/a3tray {/a3 .uservar stopped { pop pop /a3tray $error /errorname get signalerror } if } bind executeonly def
-/a4tray {/a4 .uservar stopped { pop pop /a4tray $error /errorname get signalerror } if } bind executeonly def
-/a5tray {/a5 .uservar stopped { pop pop /a5tray $error /errorname get signalerror } if } bind executeonly def
-/a6tray {/a6 .uservar stopped { pop pop /a6tray $error /errorname get signalerror } if } bind executeonly def
-/b4tray {/b4 .uservar stopped { pop pop /b4tray $error /errorname get signalerror } if } bind executeonly def
-/b5tray {/b5 .uservar stopped { pop pop /b5tray $error /errorname get signalerror } if } bind executeonly def
-/flsatray {/flsa .uservar stopped { pop pop /flsatray $error /errorname get signalerror } if } bind executeonly def
-/flsetray {/flse .uservar stopped { pop pop /flsetray $error /errorname get signalerror } if } bind executeonly def
-/halflettertray {/halfletter .uservar stopped { pop pop /halflettertray $error /errorname get signalerror } if } bind executeonly def
-/ledgertray {/ledger .uservar stopped { pop pop /ledgertray $error /errorname get signalerror } if } bind executeonly def
-/legaltray {/legal .uservar stopped { pop pop /legaltray $error /errorname get signalerror } if } bind executeonly def
-/lettertray {/letter .uservar stopped { pop pop /lettertray $error /errorname get signalerror } if } bind executeonly def
+/11x17tray {/11x17 .uservar stopped { pop pop /11x17tray $error /errorname get signalerror } if } .internalbind def
+/a3tray {/a3 .uservar stopped { pop pop /a3tray $error /errorname get signalerror } if } .internalbind def
+/a4tray {/a4 .uservar stopped { pop pop /a4tray $error /errorname get signalerror } if } .internalbind def
+/a5tray {/a5 .uservar stopped { pop pop /a5tray $error /errorname get signalerror } if } .internalbind def
+/a6tray {/a6 .uservar stopped { pop pop /a6tray $error /errorname get signalerror } if } .internalbind def
+/b4tray {/b4 .uservar stopped { pop pop /b4tray $error /errorname get signalerror } if } .internalbind def
+/b5tray {/b5 .uservar stopped { pop pop /b5tray $error /errorname get signalerror } if } .internalbind def
+/flsatray {/flsa .uservar stopped { pop pop /flsatray $error /errorname get signalerror } if } .internalbind def
+/flsetray {/flse .uservar stopped { pop pop /flsetray $error /errorname get signalerror } if } .internalbind def
+/halflettertray {/halfletter .uservar stopped { pop pop /halflettertray $error /errorname get signalerror } if } .internalbind def
+/ledgertray {/ledger .uservar stopped { pop pop /ledgertray $error /errorname get signalerror } if } .internalbind def
+/legaltray {/legal .uservar stopped { pop pop /legaltray $error /errorname get signalerror } if } .internalbind def
+/lettertray {/letter .uservar stopped { pop pop /lettertray $error /errorname get signalerror } if } .internalbind def
 
 % Per-job parameters
 
 /paperfamily 0 def	% 0 is US, 1 is European
 /papertray 1 def
-        /setpapertray {statusdict exch /papertray exch put} bind def
+        /setpapertray {statusdict exch /papertray exch put} .internalbind def
 /trayswitch //false def	% paperout feeds from another tray
 % We don't implement the (undocumented by Adobe) papersize 'operator',
 % because it's very awkward to make it interact properly with all the
@@ -206,43 +206,43 @@
 %%%%%% Reference Manual, First Edition, and subsequent 'compatibility'
 %%%%%% documentation from Adobe.
 
- /checkpassword {statusdict begin .password eq end} bind def
- /defaulttimeouts {statusdict begin .timeouts aload pop end} bind def
+ /checkpassword {statusdict begin .password eq end} .internalbind def
+ /defaulttimeouts {statusdict begin .timeouts aload pop end} .internalbind def
  /diskonline {
     //false (%disk*%) { pop not exit } 8192 string /IODevice resourceforall
- } bind def
- /diskstatus {10240 2097152 } bind odef %  - diskstatus <free> <total> (in 1024 byte pages)
+ } .internalbind def
+ /diskstatus {10240 2097152 } .internalbind odef %  - diskstatus <free> <total> (in 1024 byte pages)
 
 %/dostartpage
- /eescratch {pop 0} bind def
- /idlefonts {statusdict begin mark .idlefonts aload pop end} bind def
+ /eescratch {pop 0} .internalbind def
+ /idlefonts {statusdict begin mark .idlefonts aload pop end} .internalbind def
  /jobname () def
 %/jobtimeout
  /manualfeed //false def
  /manualfeedtimeout 60 def
- /margins {statusdict begin .topmargin .leftmargin end} bind def
- /pagecount {4711} bind def
- /pagestackorder {//false} bind def
+ /margins {statusdict begin .topmargin .leftmargin end} .internalbind def
+ /pagecount {4711} .internalbind def
+ /pagestackorder {//false} .internalbind def
  /pagetype 0 def
  /prefeed //false def
- /printererror {pop pop} bind def
- /printername {statusdict /.printername get exch copy} bind def
+ /printererror {pop pop} .internalbind def
+ /printername {statusdict /.printername get exch copy} .internalbind def
  /processcolors /processcolors load def		% defined in systemdict
  /product product def		% product is defined in systemdict
  /revision revision def		% revision is defined in systemdict
- /sccbatch {pop 9600 0} bind def
- /sccinteractive {pop 9600 0} bind def
- /setdefaulttimeouts {statusdict begin .timeouts astore pop end} bind def
- /setdostartpage {statusdict exch /dostartpage exch put} bind def
- /setduplexmode {mark /Duplex 3 -1 roll currentdevice putdeviceprops} bind def
- /seteescratch {pop pop} bind def
- /setidlefonts {] statusdict exch /.idlefonts exch put} bind def
- /setjobtimeout {statusdict exch /jobtimeout exch put} bind def
+ /sccbatch {pop 9600 0} .internalbind def
+ /sccinteractive {pop 9600 0} .internalbind def
+ /setdefaulttimeouts {statusdict begin .timeouts astore pop end} .internalbind def
+ /setdostartpage {statusdict exch /dostartpage exch put} .internalbind def
+ /setduplexmode {mark /Duplex 3 -1 roll currentdevice putdeviceprops} .internalbind def
+ /seteescratch {pop pop} .internalbind def
+ /setidlefonts {] statusdict exch /.idlefonts exch put} .internalbind def
+ /setjobtimeout {statusdict exch /jobtimeout exch put} .internalbind def
  /setmargins
   { statusdict begin
     /.leftmargin exch def /.topmargin exch def
     end
-  } bind def
+  } .internalbind def
 
 % The following compatibility operators are only documented by Adobe in a
 % supplement to the Red Book.
@@ -260,20 +260,20 @@
 % We follow the convention that ORIENT1 determines the orientation value
 % that means portait: false means 0, true means 1.
 
- /pagemargin { 0 } bind def
+ /pagemargin { 0 } .internalbind def
  /pageparams
   { currentdevice 1 dict dup /.MediaSize dup put .getdeviceparams
     exch pop exch pop aload pop 0 ORIENT1 { 1 } { 0 } ifelse
-  } bind def
+  } .internalbind def
  /setpage
   { ORIENT1 { 1 } { 0 } ifelse ne {exch} if
     //.setpagesize exec
-  } bind def
- /setpagemargin {pop} bind def	% can't do better without setpagedevice
+  } .internalbind def
+ /setpagemargin {pop} .internalbind def	% can't do better without setpagedevice
  /setpageparams
   { exch pop ORIENT1 { 1 } { 0 } ifelse ne {exch} if
     //.setpagesize exec
-  } bind def
+  } .internalbind def
  /setpagetype
   { statusdict begin
                 % The Adobe documentation only defines setpagetype
@@ -291,15 +291,15 @@
         /pagetype exch def
     } ifelse
     end
-  } bind def
+  } .internalbind def
 
  /setpassword
   {exch checkpassword
     {statusdict exch /.password exch put //true}
     {pop //false}
-   ifelse} bind def
+   ifelse} .internalbind def
  /setprintername
-  {dup length string copy statusdict exch /.printername exch put} bind def
+  {dup length string copy statusdict exch /.printername exch put} .internalbind def
 
 % setresolution is not documented by Adobe, but some applications
 % use it anyway, without testing whether or not it is present.
@@ -311,10 +311,10 @@
  /setresolution
   { mark /HWResolution [ 4 -1 roll dup ] currentdevice putdeviceprops pop
     initmatrix erasepage
-  } bind def
- /setsccbatch {pop pop pop} bind def
- /setsccinteractive {pop pop pop} bind def
- /settumble {pop} bind def
+  } .internalbind def
+ /setsccbatch {pop pop pop} .internalbind def
+ /setsccinteractive {pop pop pop} .internalbind def
+ /settumble {pop} .internalbind def
  /waittimeout 300 def
 
 %%%%%% End of documented items.
@@ -381,13 +381,13 @@
 
 serverdict begin
 
- /execjob { } bind def
+ /execjob { } .internalbind def
 % The Red Book implies that something like the following is
 % an appropriate definition of exitserver.
- /exitserver { clear stop } bind def
+ /exitserver { clear stop } .internalbind def
 % However, this interacts badly with our standard error handler,
 % so we override it with the following less appropriate definition.
- /exitserver { 0 ne { clear cleardictstack } if } bind def
- /setrealdevice { } bind def
+ /exitserver { 0 ne { clear cleardictstack } if } .internalbind def
+ /setrealdevice { } .internalbind def
 
 end	% serverdict

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_trap.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_trap.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_trap.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -36,7 +36,7 @@
   } forall pop
   dup .settrapparams	% Let the operator check parameter validity.
   .userdict /.trapparams 3 -1 roll put pop
-} bind executeonly .makeoperator
+} .internalbind .makeoperator
 
 /.copyparams {		% <obj> .copyparams <obj'>
   dup type /dicttype eq {
@@ -53,12 +53,12 @@
 
 /currenttrapparams dup {	% - currenttrapparams <paramdict>
   /.trapparams .uservar .copyparams
-} bind executeonly .makeoperator
+} .internalbind executeonly .makeoperator
 
 /settrapzone dup {		% - settrapzone -
         % ****** DUMMY ******
   newpath
-} bind .makeoperator
+} .internalbind .makeoperator
 
 % Define initial (dummy) trapping parameters.
 % These values are mostly complete guesses.

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_ttf.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_ttf.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_ttf.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -74,7 +74,7 @@
     } ifelse
   } for
   exch pop
-} .bind def
+} .forcebind def
 
 % Make /MacRomanEncodingForTrueType including additional
 % characters in Mac OS Roman encoding, which is missing
@@ -168,7 +168,7 @@
     16#ffffffff idiv
   } if
   exch //.setCPSImode
-} .bind def
+} .forcebind def
 /nextxuid {		% - nextxuid -
   3 -1 0 {
     xuidstring 1 index 2 copy get dup 255 ne {
@@ -175,22 +175,22 @@
       1 add put pop exit
     } if pop 0 put pop
   } for
-} bind def
+} .internalbind def
 
 % <string> <index> getu16 <integer>
 /getu16 {
   2 copy get 8 bitshift 3 1 roll 1 add get add
-} .bind def
+} .forcebind def
 
 % <string> <index> gets16 <integer>
 /gets16 {
   getu16 16#8000 xor 16#8000 sub
-} .bind def
+} .forcebind def
 
 % <string> <index> getu32 <integer>
 /getu32 {
   2 copy getu16 16 bitshift 3 1 roll 2 add getu16 add
-} .bind def
+} .forcebind def
 
 % <string> <index> gets32 <integer>
 /gets32 {
@@ -200,17 +200,17 @@
 % <string|array> <index> getu16 <integer>
 /getu16a {
   2 getinterval_from_stringarray 0 getu16
-} .bind def
+} .forcebind def
 
 % <string|array> <index> gets16 <integer>
 /gets16a {
   2 getinterval_from_stringarray 0 gets16
-} .bind def
+} .forcebind def
 
 % <string|array> <index> getu32a <integer>
 /getu32a {
   4 getinterval_from_stringarray 0 getu32
-} .bind def
+} .forcebind def
 
 % <string|array> <index> gets32a <integer>
 /gets32a {
@@ -228,13 +228,13 @@
 /putu16 {
   3 copy -8 bitshift put
   exch 1 add exch 16#ff and put
-} .bind def
+} .forcebind def
 
 % <string> <index> <integer> putu32 -
 /putu32 {
   3 copy -16 bitshift putu16
   exch 2 add exch 16#ffff and putu16
-} .bind def
+} .forcebind def
 
 % <nametable> <nameid> findname <string> true
 % <nametable> <nameid> findname false
@@ -288,7 +288,7 @@
   TTFDEBUG {
     dup { ( = ) print 1 index //== exec } { ( not found) = } ifelse
   } if
-} .bind def
+} .forcebind def
 
 % <namerecord> is2byte <bool>
 /is2byte {
@@ -304,7 +304,7 @@
   dup length 1 sub
   2 index lt {exch pop dup length 1 sub}{exch} ifelse
   get exec
-} .bind def
+} .forcebind def
 
 % <string> is2byte2 <bool>
 /is2byte2 {
@@ -320,7 +320,7 @@
     } for
     exch pop
   } ifelse
-} .bind def
+} .forcebind def
 
 % <string2> string2to1 <string>
 /string2to1 {
@@ -328,7 +328,7 @@
   0 1 3 index length 1 sub {
     3 index 1 index 2 mul 1 add get put dup
   } for pop exch pop
-} .bind def
+} .forcebind def
 
 % Each procedure in this dictionary is called as follows:
 %       <encodingtable> proc <glyph dictionary>
@@ -338,7 +338,7 @@
     mark 0 3 -1 roll
     { 1 index 1 add } forall pop
     .dicttomark
-  } .bind
+  } .forcebind
   2 {		% Apple 16bit CJK (ShiftJIS etc)
 
     % /sHK_sz		subHeaderKey_size	% 1 * uint16
@@ -416,7 +416,7 @@
      } for
      pop
      cmapf2_glyph_array
-  } .bind
+  } .forcebind
   4 {		% Microsoft/Adobe segmented mapping.
     /etab exch def
     /nseg2 etab 6 getu16a def
@@ -499,7 +499,7 @@
     % If we've encoutered an invalid table, remove the key before returning
     glyphs /.cmap_warning_issued undef
     glyphs /glyphs //null def	% for GC
-  } .bind
+  } .forcebind
   6 {		% Single interval lookup.
     dup 6 getu16a /firstcode exch def
     dup 8 getu16a /ng exch def
@@ -511,7 +511,7 @@
       dup firstcode add exch
       2 mul 10 add 4 index exch getu16a 3 copy put pop pop
     } for pop exch pop
-  } .bind
+  } .forcebind
   12 {		% Microsoft/Adobe segmented mapping.
     /etab exch def
     /glyphs 0 dict def
@@ -530,7 +530,7 @@
       } for
     } for
     glyphs /glyphs //null def	% for GC
-  } .bind
+  } .forcebind
 .dicttomark readonly def                % cmapformats
 
 % <cmaptab> cmapdict <glyph dictionary>
@@ -546,7 +546,7 @@
   TTFDEBUG {
     (cmap: length=) print dup length = dup ===
   } if
-} .bind def
+} .forcebind def
 
 /get_from_stringarray % <array|string> <offset> get_from_stringarray <int>
 { 1 index type /stringtype eq {
@@ -560,7 +560,7 @@
       } ifelse
     } forall
   } ifelse
-} .bind def
+} .forcebind def
 
 /getinterval_from_stringarray % <array|string> <offset> <length> getinterval_from_stringarray <string>
 { % May allocate a string in VM.
@@ -608,7 +608,7 @@
       ]
     } ifelse
   } ifelse
-} .bind def
+} .forcebind def
 
 /string_array_size  % <array|string> string_array_size <int>
 { dup type /stringtype eq {
@@ -616,7 +616,7 @@
   } {
     0 exch { length add } forall
   } ifelse
-} .bind def
+} .forcebind def
 
 % Each procedure in this dictionary is called as follows:
 %       posttable <<proc>> glyphencoding
@@ -729,18 +729,18 @@
       } if
     }
     ifelse
-  } .bind
+  } .forcebind
   16#00030000  {	% No map.
     pop [ ]
-  } .bind
+  } .forcebind
 .dicttomark readonly def                % postformats
 
 /call.readtable
 { .readtable
-} .bind def
+} .forcebind def
 /call.readbigtable
 { .readbigtable
-} .bind def
+} .forcebind def
 
 % Each procedure in this dictionary is called as follows:
 %	<file> <length> -proc- <string|array_of_strings>
@@ -780,7 +780,7 @@
 % <file> <length> .skiptable <string>
 /.skiptable {
   pop pop ()
-} .bind def
+} .forcebind def
 
 % Read a table as a single string.
 % <file> <length> .readtable <string>
@@ -794,7 +794,7 @@
         % this explicitly here.
   3 -1 roll exch
   dup () ne { readstring } if pop pop
-} .bind def
+} .forcebind def
 
 % Read a big table (one that may exceed 64K).
 % <file> <length> .readbigtable <string[s]>
@@ -810,7 +810,7 @@
     } loop .readtable ]
     exch vmreclaim
   } ifelse
-} .bind def
+} .forcebind def
 
 end readonly def                % .loadttfontdict
 
@@ -819,7 +819,7 @@
   dup 0 4 getinterval print ( ) print
   dup 8 getu32 =only ( ) print
   12 getu32 =
-} bind def
+} .internalbind def
 
 % <file> <bool> <SubfontID> .loadttfonttables -
 % Pushes .loadttfontdict & scratch dict on d-stack.
@@ -893,7 +893,7 @@
       2 index 12 3 -1 roll putu32
     } if pop pop
   } for
-} .bind executeonly def
+} .forcebind def
 
 
 
@@ -940,7 +940,7 @@
     { exch 4 getu32 exch 4 getu32 lt } .sort
     def
   } ifelse
-} .bind def
+} .forcebind def
 
 /.file_table_pos_names
 mark
@@ -1007,7 +1007,7 @@
     } ifelse
     /fpos fpos tclen add def
   } for
-} .bind def
+} .forcebind def
 
 % Find the string in a list of strings that includes a given index.
 % <strings> <index> .findseg <string> <index'>
@@ -1016,7 +1016,7 @@
     dup length 2 index gt { exch exit } if
     length sub
   } forall
-} .bind def
+} .forcebind def
 
 % - .makesfnts -
 % Defines checksum, getloca, head, locatable, numloca, post, sfnts, upem
@@ -1063,12 +1063,12 @@
       dup type /stringtype ne { aload pop } if
     } forall
   ] def
-} .bind executeonly odef
+} .forcebind odef
 
 /first_post_string % - first_post_string <string>
 {
   post dup type /arraytype eq { 0 get } if
-} bind def
+} .internalbind def
 
 % - .getpost -
 % Uses post, defines glyphencoding
@@ -1089,7 +1089,7 @@
   } ifelse
   TTFDEBUG { (post=) print dup //== exec } if
   def
-} .bind def
+} .forcebind def
 
 % - .ttkeys <key> <value> ...
 /.ttkeys {
@@ -1129,7 +1129,7 @@
     count ttkeycount sub array astore dup { //== exec } forall aload pop
   } if
   /sfnts sfnts
-} .bind def
+} .forcebind def
 
 % ---------------- Standard TrueType font loading ---------------- %
 
@@ -1153,7 +1153,7 @@
   /cmapsub 2 index def  % () []
   exch 4 getu32 1 index string_array_size 1 index sub getinterval_from_stringarray
   /cmaptab exch def
-} .bind def
+} .forcebind def
 
 % - .pickcmap_with_xlatmap -
 % Defines cmapsub, cmaptab
@@ -1217,7 +1217,7 @@
     QUIET not { (True Type font doesn't contain a charset listed in gs/lib/xlatmap.) = } if
     /.pickcmap_with_xlatmap cvx /invalidfont signalerror
   } if                                                   %
-} .bind def
+} .forcebind def
 
 % - .pickcmap -
 % Defines cmapsub, cmaptab
@@ -1237,7 +1237,7 @@
   } {
     //.pickcmap_with_no_xlatmap exec
   } ifelse
-} .bind executeonly odef
+} .forcebind odef
 currentdict /.pickcmap_with_xlatmap .undef
 currentdict /.pickcmap_with_no_xlatmap .undef
 
@@ -1244,7 +1244,7 @@
 % <glyph> .nname <_name>
 /.nname {
   =string cvs (_) exch concatstrings cvn
-} bind def
+} .internalbind def
 
 
 % - .charkeys /CharStrings <charstrings> /Encoding <encoding>
@@ -1403,7 +1403,7 @@
       } ifelse
     ]
   TTFDEBUG { (Encoding: ) print dup === flush } if
-} .bind odef
+} .forcebind odef
 
 % ---------------- CIDFontType 2 font loading ---------------- %
 
@@ -1421,7 +1421,7 @@
       pop 1 add                 % () v+1
   } for
   pop
-} .bind def
+} .forcebind def
 
 % <CIDSystemInfo dict> <dict> .definettcidfont <font>
 /.definettcidfont {
@@ -1450,7 +1450,7 @@
   end
 
   end end dup /CIDFontName get exch /CIDFont defineresource
-} .bind def
+} .forcebind def
 
 % <CIDSystemInfo dict> <file> <Substite name> .loadttcidfont <cidtype2font>
 /.loadttcidfont {
@@ -1467,7 +1467,7 @@
   /fontname exch def
   /FontName exch put           % replace any definition of /FontName
   //.definettcidfont exec
-} .bind executeonly odef
+} .forcebind odef
 
 % <file> <SubfontID> .load_tt_font_stripped <font_data>
 % The font_data includes sfnts, NumGlyphs, TT_cmap, file_table_pos, Decoding.
@@ -1484,7 +1484,7 @@
   /Decoding Decoding
   .dicttomark
   end end
-} .bind executeonly def
+} .forcebind def
 
 /.load_woff_for_cid {
   //false exch //.loadwofftables exec
@@ -1503,7 +1503,7 @@
   /Decoding Decoding
   .dicttomark
   end end
-} .bind executeonly def
+} .forcebind def
 
 % ---------------- PDF TrueType font loading ---------------- %
 
@@ -1527,7 +1527,7 @@
   } for
                 % Stack: false plat+enc cmap || subtable true plat+enc cmap
   pop pop
-} .bind def
+} .forcebind def
 
 % Build .symbol_list for .pdfcharkeys .
 % It is a dictionary containing all SymbolEncoding glyph names
@@ -1546,7 +1546,7 @@
     exch //.symbol_list 3 1 roll put
   } for
   pop
-} .bind exec
+} .forcebind exec
 
 % Create .GS_extended_SymbolEncoding as inverse of .symbol_list .
 {
@@ -1555,7 +1555,7 @@
     exch 2 index 3 1 roll put
   } forall
   .defineencoding
-} .bind exec
+} .forcebind exec
 
 /.hexdigits (0123456789ABCDEF) def
 
@@ -1566,10 +1566,10 @@
   70 le and
   3 1 roll
   and or
-} .bind def
+} .forcebind def
 
-/.popfex { pop //false exit } bind def
-/.pop3ex { pop pop pop exit } bind def
+/.popfex { pop //false exit } .internalbind def
+/.pop3ex { pop pop pop exit } .internalbind def
 
 /.addglyph {  % <dict> <name> <glyph#> .addglyph -
   1 index .namestring     % d n g s
@@ -1616,7 +1616,7 @@
       put exit
     } loop
   } if
-} .bind def
+} .forcebind def
 
 % <chartoglyphmap> <subcmap> <AGL> .pdfmapchars /CharStrings <charstrings>
 /.pdfmapchars {
@@ -1658,7 +1658,7 @@
   } forall
 
   dup /.notdef 0 put
-} .bind def
+} .forcebind def
 
 % <subtable> .pdfmapsymbolic  /Encoding [] /CharStrings <<>>
 /.pdfmapsymbolic {
@@ -1689,7 +1689,7 @@
   /.notdef 0 def
   /Encoding exch
   /CharStrings currentdict end
-} .bind def
+} .forcebind def
 
 % If we're using a 1,0 cmap table, we need to store the table for the heuristic
 % to know whether to image or elide GID 0. See zfapi.c ps_get_glyphname_or_cid().
@@ -1797,7 +1797,7 @@
     } ifelse
   } if
   TTFDEBUG { (.pdfcharkeys end) = } if
-} .bind executeonly def
+} .forcebind def
 
 % <file> <is_symbolic> <Encoding|null> <FontName> .loadpdfttfont <type42font>
 /.loadpdfttfont {
@@ -1855,7 +1855,7 @@
   dup /FontName font_name put        % replace any definition of /FontName
   end end
  .completefont
-} .bind executeonly odef
+} .forcebind odef
 
 %--------- Define main type42font loading routines, after their dependencies ------------
 % <file> .loadttfont <type42font>
@@ -1890,7 +1890,7 @@
   } if
   .dicttomark
   end end dup /FontName get exch definefont
-} .bind executeonly def
+} .forcebind def
 
 % <file> .loadwofffont <type42font>
 /.loadwofffont
@@ -1911,7 +1911,7 @@
   .dicttomark
   end end dup /FontName get exch
   definefont
-} .bind executeonly def
+} .forcebind def
 
 % ----- Utilities for loading possible TrueType font ------
 % <file> .findttfontname <fname> true
@@ -1935,7 +1935,7 @@
     //false
   } ifelse
   f closefile end end
-} .bind def
+} .forcebind def
 
 /.findwoffname {
   //true 0 //.loadwofftables exec
@@ -1962,7 +1962,7 @@
     //false
   } ifelse
   f closefile end end
-} .bind def
+} .forcebind def
 
 /tt_tag_dict << <00010000> 0 (true) 0 (typ1) 0 (ttcf) 0 >> readonly def
 /ttf_otf_tag_dict << <00010000> 0 (true) 0 (typ1) 0 (ttcf) 0 (OTTO) 0>> readonly def
@@ -1978,11 +1978,11 @@
 % <file> .is_ttf_or_otf <bool>
 /.is_ttf_or_otf {
     dup 0 setfileposition (1234) .peekstring { //ttf_otf_tag_dict exch known } { //false } ifelse
-} .bind def
+} .forcebind def
 
 /.is_woff {
     dup 0 setfileposition (1234) .peekstring { //woff_tag_dict exch known } { //false } ifelse
-} .bind def
+} .forcebind def
 
 % <file> <key> .findfontvalue <value> true
 % <file> <key> .findfontvalue false
@@ -2009,7 +2009,7 @@
         .findnonttfontvalue
     } ifelse
   } ifelse
-} .bind executeonly def
+} .forcebind def
 
 % Load a font file that might be a TrueType font.
 % <file> .loadfontfile -
@@ -2028,7 +2028,7 @@
       .loadnonttfontfile
     } ifelse
   } ifelse
-} .bind def
+} .forcebind def
 
 % Undef the local utility funcs
 [

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -59,11 +59,11 @@
   } if
   1 index /CharStrings get 3 index 3 -1 roll put
   pop pop pop pop
-} obind
+} executeonly obind
 
 /removeall {		% <type32font> removeall -
   0 65535 2 index removeglyphs pop
-} obind
+} executeonly obind
 
 /.removeglyphs systemdict /.removeglyphs get
 systemdict /.removeglyphs .undef
@@ -74,7 +74,7 @@
                 % Stack: cidmin cidmax font CharStrings cid bitmap
     pop dup 5 index ge { dup 4 index le { 2 copy undef } if } if pop
   } forall pop pop pop pop
-} obind
+} executeonly obind
 
 .dicttomark /ProcSet defineresource pop
 
@@ -84,7 +84,7 @@
   dup /FontType 32 .forceput
   dup /CharStrings 20 dict .forceput
   1 index exch .buildfont32 exch pop
-} .bind executeonly odef
+} .forcebind odef
 .cidfonttypes begin
 
 
@@ -126,7 +126,7 @@
     [ 1 0 0 1 11 -2 roll exch neg exch neg ] 5 -1 roll imagemask
   } ifelse
   pop pop pop pop
-} .bind def
+} .forcebind def
 
 systemdict /.getmetrics32 .undef
 

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ42.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ42.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ42.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -40,7 +40,7 @@
  } bind executeonly def
 (%Type42BuildGlyph) cvn	% <font> <name> %Type42BuildGlyph -
  { dup //.type42build exec
- } bind executeonly def
+ } .internalbind def
 
 currentdict /.type42build .undef
 
@@ -57,5 +57,5 @@
     } {
       systemdict /.buildfont42 get exec
     } ifelse
-  } bind
+  } .internalbind
 put

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -149,7 +149,7 @@
    {//.buildfont1} stopped
    4 3 roll .setglobal
    {//.buildfont1 $error /errorname get signalerror} if
- } .bind executeonly def	% hide .forceput
+ } .forcebind def	% hide .forceput
 
  % container for CloseSource flag (default //true to prevent buildup of file handles)
  /closesourcedict mark
@@ -178,7 +178,7 @@
         cvx exec
     } ifelse
   } stopped
-} bind executeonly def
+} .internalbind def
 
 % If the diskfont feature isn't included, define a dummy .loadfontdict.
 /.loadfontdict where
@@ -205,7 +205,7 @@
     end
     { stop } if
    cleartomark
- } bind def
+ } .internalbind def
 % undefine stuff that is only used internally, and is immediately bound
 currentdict /closesourcedict .undef
 currentdict /.loadfont1 .undef
@@ -232,7 +232,7 @@
         { CFFCharStrings 0 get} if
     } if
   end
-} bind def
+} .internalbind def
 
 % Here are the BuildChar and BuildGlyph implementation for Type 1 fonts.
 % The names %Type1BuildChar and %Type1BuildGlyph are known to the interpreter.
@@ -241,10 +241,10 @@
 
 (%Type1BuildChar)  cvn {	% <font> <code> %Type1BuildChar -
   1 index /Encoding get 1 index get //.type1build exec .type1execchar
-} bind executeonly def
+} .internalbind def
 (%Type1BuildGlyph) cvn {	% <font> <name> %Type1BuildGlyph -
   dup //.type1build exec .type1execchar
-} bind executeonly def
+} .internalbind def
 
 1183615869 internaldict begin
 % CCRun is an undocumented procedure provided for Type 4 and Type 0 fonts.
@@ -276,7 +276,7 @@
   1 index dup type /integertype eq {
     3 index /Encoding get exch get
   } if exch .type1execchar
-} bind def
+} .internalbind def
 
 % setweightvector is an undocumented procedure that force writes
 % weight vector to the font. Do extra checks for safety.
@@ -293,7 +293,7 @@
   } if
   2 copy /WeightVector exch .forceput
   .setweightvector
-} .bind executeonly odef
+} .forcebind odef
 end
 
 % Register the font types for definefont.
@@ -305,9 +305,9 @@
 pop
 (%Type2BuildChar)  cvn {	% <font> <code> %Type2BuildChar -
   1 index /Encoding get 1 index get //.type1build exec .type2execchar
-} bind executeonly def
+} .internalbind def
 (%Type2BuildGlyph) cvn {	% <font> <name> %Type2BuildGlyph -
   dup //.type1build exec .type2execchar
-} bind executeonly def
+} .internalbind def
 buildfontdict 2 /.buildfont2 cvx put
 %END2

Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -140,7 +140,7 @@
   {
       <</DisablePageHandler //true>> setpagedevice
   } if
-} bind def
+} .internalbind def
 
 /EnablePageHandlerDevice
 {
@@ -150,12 +150,12 @@
   {
       <</DisablePageHandler //false>> setpagedevice
   } if
-} bind def
+} .internalbind def
 
 /newpdf_pdfformaterror {    % <string> pdfformaterror -
   (%stdout) (w) file
   dup 3 -1 roll writestring flushfile
-} bind executeonly def
+} .internalbind def
 
 % This routine sets up the transparency compositor requirement, and
 % number of spot channels required (if any) in the device. This needs
@@ -177,7 +177,7 @@
     pop
   } ifelse
   setpagedevice
-}bind def
+}.internalbind def
 
 % Takes the selected Box as a parameter and scales it to fit the current media.
 % If the amount of scaling would be reduced by rotating the content, then
@@ -230,9 +230,22 @@
 
     % If we need to rotate, recalculate the box
     {
-      90 rotate
-      0 2 index neg translate                   % move 0,0 to bottom right of media to account for rotation
-      exch                                      % swap media width/height for scaling calculation
+      % We take any existing /Rotate key in the dictionary into account as well, because
+      % that way we will preserve the orientation which would be used when displaying
+      % the original, un-modified page. Note that PostScript's rotate operator works
+      % counter-clockwise, while PDF works clockwise....
+      %
+      7 index dup /Rotate known {/Rotate get}{90}ifelse
+      270 eq {
+        90 rotate
+        0 2 index neg translate                 % move 0,0 to bottom right of media to account for rotation
+        exch                                    % swap media width/height for scaling calculation
+      }
+      {
+        270 rotate
+        dup neg 0 translate                     % move 0,0 to bottom right of media to account for rotation
+        exch                                    % swap media width/height for scaling calculation
+      } ifelse
     }if
 
     % Now use the box and media values to calculate the required x/y scale factors
@@ -271,7 +284,7 @@
 
     dup scale                           % scale both axes the same
     pop pop pop                         % remove the leftover boxwidth, boxheight and mediawidth/height
-} bind def
+} .internalbind def
 
 /newpdf_get_media_box { % <pagedict> get_media_box <box> <bool>
   dup /MediaBox known {
@@ -295,7 +308,7 @@
     (               Output may be incorrect.\n) newpdf_pdfformaterror
     [ 0 0 currentpagedevice /PageSize get aload pop ] //false
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 % [llx lly urx ury] newpdf_check_empty_box [llx lly urx ury] true | false
 % rturns true and the original array if its valid, otherwise returns false
@@ -329,7 +342,7 @@
      (                  Output may be incorrect.\n) print flush
     pop //false
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 /newpdf_get_any_box { % <pagedict> get_any_box <box name> <box>
   //systemdict /UseBleedBox .knownget dup { and } if {
@@ -434,7 +447,7 @@
     } ifelse
     4 array astore            % /SomeBox [mX0 mY0 mX1 mY1]
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 % This routine is used to set the PostScript /PageSize from the requested Box of the
 % PDF file. Much of this is copied from the old pdfshowpage_setpage routine which
@@ -634,7 +647,7 @@
   }ifelse
 
   pop
-} bind executeonly def
+} .internalbind def
 
 % This routine checks a list of known/implemented command line switches to see if they
 % have been defined in the PostScript environment. If they have we construct a dictionary
@@ -667,7 +680,7 @@
   /PageCount /CumulativePageCount where { /CumulativePageCount get }{currentpagedevice /PageCount get} ifelse def
 
   currentdict end
-} bind executeonly def
+} .internalbind def
 
 currentdict /PDFSwitches undef
 
@@ -704,14 +717,13 @@
   {
     pop 0
   } ifelse
-}bind def
+}.internalbind def
 
 /runpdfpagerange
 {
   /PageList where {
     pop
-    pdfpagecount
-    .PDFparsePageList
+    PageList pdfpagecount .PDFparsePageList
     dup 0 eq {	% No ranges, error
       (\n   **** Error: Invalid PageList: ) print
       PageList  print
@@ -744,7 +756,7 @@
       } if
     } ifelse
   } ifelse
-} bind def
+} .internalbind def
 
 
 /runpdf_collection_entry
@@ -771,7 +783,7 @@
   } {
     pop pop
   }ifelse
-} bind def
+} .internalbind def
 
 % <file> runpdf -
 /newpdf_runpdf
@@ -803,7 +815,7 @@
   } {
     pop pop
   }ifelse
-} bind def
+} .internalbind def
 
 % start a PDF file, and specify interpreter parameters to be used
 % to override any command line ones.
@@ -866,13 +878,13 @@
       pop
     }ifelse
   }ifelse
-} bind def
+} .internalbind def
 
 % -file- runpdfbegin -
 /runpdfbegin
 {
   <<>> runpdfbegin_with_params
-} bind def
+} .internalbind def
 
 /pdfgetpage
 {
@@ -895,21 +907,21 @@
       /Page# exch put
     } ifelse
   }ifelse
-} bind def
+} .internalbind def
 
 /process_trailer_attrs
 {
-}bind def
+}.internalbind def
 
 /pdfshowpage_init
 {
-} bind def
+} .internalbind def
 
 /pdfshowpage_setpage
 {
   dup newpdf_device_setup
   dup newpdf_set_pagesize
-} bind def
+} .internalbind def
 
 /pdfshowpage_finish
 {
@@ -931,7 +943,7 @@
       (               Could not draw this page at all, page will be missing in the output.\n) newpdf_pdfformaterror
     } if
   }ifelse
-} bind def
+} .internalbind def
 
 /pdfshowpage
 {
@@ -944,7 +956,7 @@
     pdfshowpage_setpage
     pdfshowpage_finish
   }ifelse
-} bind def
+} .internalbind def
 
 /runpdfend
 {
@@ -965,7 +977,7 @@
   % add the number of pages already in the output to the 'Dest' of
   % Outlines and Link annotations.
   add <</PageCount 3 -1 roll >> setpagedevice
-} bind def
+} .internalbind def
 
 /pdfopen
 {
@@ -999,7 +1011,7 @@
     pop
     <</NumPages 0>>
   } ifelse
-} bind def
+} .internalbind def
 
 /pdfclose
 {
@@ -1013,12 +1025,12 @@
       pop
     } if
   }ifelse
-} bind def
+} .internalbind def
 
 /pdfavailable
 {
   .PDFAvailable
-} bind def
+} .internalbind def
 
 % <int> <int> dopdfpages -
 % First Page and then LastPage
@@ -1078,7 +1090,7 @@
     } for
   } ifelse
   //EnablePageHandlerDevice exec
-} bind def
+} .internalbind def
 
 /.runps /run load def
 /run {
@@ -1153,7 +1165,7 @@
   } {
     closefile % file was empty
   } ifelse
-} bind odef
+} .internalbind odef
 currentdict /runpdfstring .undef
 
 currentdict /DisablePageHandlerDevice undef
@@ -1188,7 +1200,7 @@
   } {
     closefile
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 % Recursively enumerate /Names entries
 % <node> pdf_collection_names /temp_file_name ...
@@ -1217,7 +1229,7 @@
       } forall
     } if
   } ifelse
-} bind executeonly def
+} .internalbind def
 
 /runpdf {        % <file> runpdf -
     dup type /filetype eq
@@ -1238,7 +1250,7 @@
     {
       (   **** Error: Attempt to process something other than a file object in runpdf.\n) pdfformaterror
     } ifelse
-} bind executeonly odef
+} .internalbind odef
 
 end            % systemdict
 
@@ -1246,7 +1258,7 @@
 % It is OK to use { (%stdin) run } here, because a startjob cannot occur.
 /.runstdin {
   { (%stdin) run } execute0
-} bind executeonly def
+} .internalbind def
 
 end            % userdict
 
@@ -1268,7 +1280,7 @@
     {
       /.setopacityalpha /undefined cvx signalerror
     } ifelse
-  } bind def
+  } .internalbind def
 
   /.setshapealpha
   {
@@ -1284,7 +1296,7 @@
     {
       /.setshapealpha /undefined cvx signalerror
     } ifelse
-  } bind def
+  } .internalbind def
 } if
 
 .setglobal

Modified: trunk/Master/tlpkg/tlgs/bin/gsdll64.dll
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlgs/bin/gsdll64.lib
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlgs/bin/gswin64.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlgs/bin/gswin64c.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/tlgs/lib/pdf_info.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/lib/pdf_info.ps	2024-03-08 00:44:29 UTC (rev 70493)
+++ trunk/Master/tlpkg/tlgs/lib/pdf_info.ps	2024-03-08 01:38:52 UTC (rev 70494)
@@ -144,261 +144,6 @@
   } ifelse
 } bind def
 
-%% When checking Resources for Font objects, we must ensure that we don't end
-%% up following a circular reference. Circular references in Resources should
-%% not, of course, be present but we've seen a number of cases. If we do detect
-%% a circular reference, then stop checking that chain.
-
-/oforce_no_circular {
-  dup type /packedarraytype eq {
-    dup 0 get
-    currentdict /ProcessedResources known {
-      dup ProcessedResources exch known {
-        pop pop //null
-      } {
-        dup ProcessedResources 3 1 roll put
-        oforce
-      } ifelse
-    } {
-      oforce
-    } ifelse
-  } {
-    oforce
-  } ifelse
-} bind def
-
-/dump-pdf-info {    % (fname) -> -
-  () = (        ) print print ( has ) print
-  PDFPageCount dup =print 10 mod 1 eq { ( page.\n) } { ( pages\n) } ifelse = flush
-
-  Trailer /Root oget /AcroForm knownoget {
-    /XFA knownoget {
-      (File uses XFA forms.\n\n) print
-      pop
-    } if
-  } if
-
-  /DumpXML where {
-    pop
-    Trailer /Root oget /Metadata knownoget {
-      //false resolvestream
-      { dup 256 string readstring exch print not { exit } if } loop
-      pop		% done with the stream
-      (\n_____________________________________________________________) =
-      flush
-    } if
-  } if
-
-  % Print out the "Info" dictionary if present
-  Trailer /Info knownoget {
-     dup /Title knownoget { (Title: ) print write-doc-string () = flush } if
-     dup /Author knownoget { (Author: ) print write-doc-string () = flush } if
-     dup /Subject knownoget { (Subject: ) print write-doc-string () = flush } if
-     dup /Keywords knownoget { (Keywords: ) print write-doc-string () = flush } if
-     dup /Creator knownoget { (Creator: ) print write-doc-string () = flush } if
-     dup /Producer knownoget { (Producer: ) print write-doc-string () = flush } if
-     dup /CreationDate knownoget { (CreationDate: ) print write-doc-string () = flush } if
-     dup /ModDate knownoget { (ModDate: ) print write-doc-string () = flush } if
-     dup /Trapped knownoget { (Trapped: ) print write-doc-string () = flush } if
-     pop
-  } if
-
-} bind def
-
-% <page index> <page dict> dump-media-sizes -
-/dump-media-sizes {
-  DumpMediaSizes {
-    () =
-    % Print out the Page Size info for each page.
-    (Page ) print =print
-    dup /UserUnit pget {
-      ( UserUnit: ) print =print
-    } if
-    dup /MediaBox pget {
-      ( MediaBox: ) print oforce_array ==only
-    } if
-    dup /CropBox pget {
-      ( CropBox: ) print oforce_array ==only
-    } if
-    dup /BleedBox pget {
-      ( BleedBox: ) print oforce_array ==only
-    } if
-    dup /TrimBox pget {
-      ( TrimBox: ) print oforce_array ==only
-    } if
-    dup /ArtBox pget {
-      ( ArtBox: ) print oforce_array ==only
-    } if
-    dup /Rotate pget {
-       (    Rotate = ) print =print
-    } if
-    dup /Annots pget {
-       pop
-        (     Page contains Annotations) print
-    } if
-    dup pageusestransparency {
-        (     Page uses transparency features) print
-    } if
-    dup pagespotcolors
-    dup length 0 gt {
-      (\n    Page Spot colors: ) =
-      << /Black 0 /Cyan 0 /Magenta 0 /Yellow 0 >> exch
-      {
-        pop	% discard the value
-        1 index 1 index known not {	% check if colorant is a standard one
-          (        ) print
-          (') print =print (') =
-        } {
-          pop	% ignore this standard colorant
-        } ifelse
-      } forall
-      pop	% discard dict of standard colorants
-    } {
-      pop
-    } ifelse
-    pop		% done with pagedict
-    () = flush
-  }
-  {
-    pop pop
-  } ifelse
-} bind def
-
-% List of standard font names for use when we are showing the FontsNeeded
-/StdFontNames [
- /Times-Roman /Helvetica /Courier /Symbol
- /Times-Bold /Helvetica-Bold /Courier-Bold /ZapfDingbats
- /Times-Italic /Helvetica-Oblique /Courier-Oblique
- /Times-BoldItalic /Helvetica-BoldOblique /Courier-BoldOblique
-] def
-
-/res-type-dict 10 dict begin
-
-  /Font {
-    {
-      exch pop oforce_no_circular
-      dup //null ne {
-        dup /DescendantFonts knownoget {
-           exch pop 0 get oforce_no_circular
-           %% Check to see if a potentail circular reference was detected. This could be a
-           %% false positive caused by other fonts using the same DescendantFont(s), but if
-           %% so then we've already cehcked them anyway.
-           dup //null eq { pop << >>} if
-        } if
-        dup /FontDescriptor knownoget {
-          dup /FontFile known 1 index /FontFile2 known or exch /FontFile3 known or
-          /ShowEmbeddedFonts where { pop pop //false } if {
-            pop			% skip embedded fonts
-          } {
-            /BaseFont knownoget { %  not embedded
-              2 index exch //null put
-            } if
-          } ifelse
-        } {
-          /BaseFont knownoget { % no FontDescriptor, not embedded
-            2 index exch //null put
-          } if
-        } ifelse
-      } {
-        pop
-      } ifelse
-    } forall	% traverse the dictionary
-  } bind def
-
-  /XObject {
-    {
-      exch pop oforce_no_circular
-      dup //null ne {
-        dup /Subtype knownoget {
-          /Form eq {
-            /Resources knownoget {
-              get-fonts-from-res
-            } if
-          } {
-            pop
-          } ifelse
-        } {
-          pop
-        } ifelse
-      } {
-        pop
-      } ifelse
-    } forall
-  } bind def
-
-  /Pattern {
-    {
-      exch pop oforce_no_circular
-      dup //null ne {
-        /Resources knownoget {
-          get-fonts-from-res
-        } if
-      } {
-        pop
-      } ifelse
-    } forall
-  } bind def
-currentdict end readonly def
-
-% <dict for fonts> <<res-dict>> get-fonts-from-res -
-/get-fonts-from-res {
-  oforce_no_circular
-  dup //null ne {
-    {
-      oforce_no_circular
-      dup //null ne {
-        //res-type-dict 3 -1 roll
-        .knownget {
-          exec
-        } {
-          pop
-        } ifelse
-      } {
-        pop pop
-      } ifelse
-    } forall
-  } {
-    pop
-  } ifelse
-} bind def
-
-currentdict /res-type-dict undef
-
-/getPDFfonts {	%	<dict for fonts> <page dict> getPDFfonts -
-  /ProcessedResources 10 dict def
-  dup /Resources pget { get-fonts-from-res } if
-  /Annots knownoget {
-    { oforce_no_circular
-      dup //null ne {
-        /AP knownoget {
-          { exch pop oforce_no_circular
-            dup //null ne {
-              dup /Resources knownoget {
-                get-fonts-from-res
-              } if
-              { exch pop oforce_no_circular
-                dup type /dicttype eq {
-                  /Resources knownoget {
-                    get-fonts-from-res
-                  } if
-                } {
-                  pop
-                } ifelse
-              } forall
-            } {
-              pop
-            } ifelse
-          } forall
-        } if
-      } {
-        pop
-      } ifelse
-    } forall
-  } if
-  pop
-  currentdict /ProcessedResources undef
-} bind def
-
 % If running with -dSAFER, .sort may not be present. Define a (slower) PS alternative
 systemdict /.sort known not {
 % <array> <lt-proc> .sort <array>
@@ -421,270 +166,158 @@
    } bind def
 } if
 
-/dump-fonts-used { % <dict for fonts> dump-fonts-used -
-  % If DumpFontsUsed is not true, then remove the 'standard' fonts from the list
-  systemdict /DumpFontsUsed known not {
-    StdFontNames {
-      1 index 1 index known { 1 index 1 index undef } if
-      pop
-    } forall
-  } if
-
-  % Now dump the FontsUsed dict into an array so we can sort it.
-  [ 1 index { pop } forall ]
-  { 100 string cvs exch 100 string cvs exch lt } .sort
-
-  systemdict /DumpFontsUsed known
-  {
-    (\nFont or CIDFont resources used (plain name and ASCIIHEX string representation):) =
-    { 128 string cvs dup print (    ) print (<) print 128 string cvs {16 8 string cvrs print} forall (>) print (\n) print} forall
-  } {
-    DumpFontsNeeded {
-      dup length 0 gt {
-        (\nFonts Needed that are not embedded \(system fonts required\):) =
-        { (    ) print 128 string cvs dup print (    ) print (<) print {16 8 string cvrs print} forall (>) print (\n) print} forall
-      } {
-        pop
-        (\nNo system fonts are needed.) =
-      } ifelse
-    } {
-      pop
-    } ifelse
+/knownoget
+{
+  2 copy known {
+    get
+    true
+  }{
+    pop pop false
   } ifelse
-  pop
-} bind def
+}bind def
 
-% Copy selected subfiles to temporary files and return the file names
-% as a PostScript names to protect them from restore.
-% Currently, all PDF files in the Portfolio are extracted and returned.
-%
-% - pdf_collection_files [ /temp_file_name ... /temp_file_name
-/pdf_collection_files {
-  mark
-  Trailer /Root oget
-  dup /Collection oknown {
-    /Names knownoget {
-      /EmbeddedFiles knownoget {
-        pdf_collection_names
-      } if
-    } if
-  } {
-    pop
-  } ifelse
-} bind def
+/PDFContext << >> .PDFInit def
+{File (r) file PDFContext .PDFStream} stopped not
+{
+  PDFContext .PDFInfo
+  File
+  () = (        ) print print ( has ) print
+  dup /NumPages get dup =print 10 mod 1 eq { ( page.\n) } { ( pages\n) } ifelse = flush
 
-% Output all the info about the file
-/dump {  % (title) -> -
-  /PDFPageCount pdfpagecount def
-  dump-pdf-info
-  % dict will be populated with fonts through a call to 'getPDFfonts'
-  % per page, then the contents dumped out in 'dump-fonts-used'
-  1000 dict
-
-  1 1 PDFPageCount
+  /DumpXML where {/DumpXML get}{//false}ifelse
   {
-    dup pdfgetpage dup 3 -1 roll
-    dump-media-sizes
-    1 index exch getPDFfonts
-  } for
+    (\n*** DumpXML is no longer supported. ***\n\n) print
+  }if
 
-  dump-fonts-used
+  dup /Title knownoget { (Title: ) print write-doc-string () = flush } if
+  dup /Author knownoget { (Author: ) print write-doc-string () = flush } if
+  dup /Subject knownoget { (Subject: ) print write-doc-string () = flush } if
+  dup /Keywords knownoget { (Keywords: ) print write-doc-string () = flush } if
+  dup /Creator knownoget { (Creator: ) print write-doc-string () = flush } if
+  dup /Producer knownoget { (Producer: ) print write-doc-string () = flush } if
+  dup /CreationDate knownoget { (CreationDate: ) print write-doc-string () = flush } if
+  dup /ModDate knownoget { (ModDate: ) print write-doc-string () = flush } if
+  dup /Trapped knownoget { (Trapped: ) print write-doc-string () = flush } if
+  (\n) print flush
 
-} bind def
+  /EmbeddedFonts 10 dict def
+  /UnEmbeddedFonts 10 dict def
+  /FontNumbers 10 dict def
 
-% Choose between collection vs plain file.
-% Enumerate collections and apply the dump procedure.
-/enum-pdfs {		% - -> -
-  File (r) file runpdfbegin
-  pdf_collection_files
-  dup mark eq {
-    pop
-    File dump
-    runpdfend
-  } {
-    runpdfend
-    ] 0 1 2 index length 1 sub {
-        2 copy get exch           %  [file ... ] file i
-        1 add (0123456789) cvs    %  [file ... ] file (i+1)
-        File exch ( part ) exch concatstrings concatstrings
-        exch                      %  [file ... ] (fname part i+1) file
-        dup type /filetype eq {
-          runpdfbegin
-          dump
-          runpdfend
-          closefile
-        } {
-          1024 string cvs % .namestring is deprecated
-%          .namestring
-          dup (r) file
-          runpdfbegin
-          exch dump
-          runpdfend
-          deletefile
-        } ifelse
-    } for
-    pop
-  } ifelse
-} bind def
-
-/NEWPDF where {/NEWPDF get}{false}ifelse
-{
-  /knownoget
+  /NumPages get 0 1 3 -1 roll 1 sub
   {
-    2 copy known {
-      get
-      true
-    }{
-      pop pop false
+    dup
+    PDFContext exch .PDFPageInfoExt exch
+    DumpMediaSizes {
+      (Page ) print 1 add =print
+      dup /UserUnit knownoget {( UserUnit: ) print =print} if
+      dup /MediaBox knownoget {( MediaBox: ) print ==only} if
+      dup /CropBox knownoget  {( CropBox: )  print ==only} if
+      dup /BleedBox knownoget {( BleedBox: ) print ==only} if
+      dup /TrimBox knownoget  {( TrimBox: )  print ==only} if
+      dup /ArtBox knownoget   {( ArtBox: )   print ==only} if
+      dup /Rotate knownoget not {0}if ( Rotate = ) print =print
+      dup /Annots knownoget {{(     Page contains Annotations) print} if} if
+      dup /UsesTransparency knownoget {{(     Page uses transparency features) print} if} if
+      dup /Spots knownoget {
+        (\n    Page Spot colors: ) =
+        {(        ) print (') print 256 string cvs print (') =} forall
+      } if
+      (\n) print flush
+      (\n) print flush
+    }
+    {
+      pop
     } ifelse
-  }bind def
 
-  /PDFContext << >> .PDFInit def
-  {File (r) file PDFContext .PDFStream} stopped not
-  {
-
-    PDFContext .PDFInfo
-    File
-    () = (        ) print print ( has ) print
-    dup /NumPages get dup =print 10 mod 1 eq { ( page.\n) } { ( pages\n) } ifelse = flush
-
-    /DumpXML where {/DumpXML get}{//false}ifelse
+    /Fonts knownoget
     {
-      (\n*** DumpXML is no longer supported. ***\n\n) print
-    }if
-
-    dup /Title knownoget { (Title: ) print write-doc-string () = flush } if
-    dup /Author knownoget { (Author: ) print write-doc-string () = flush } if
-    dup /Subject knownoget { (Subject: ) print write-doc-string () = flush } if
-    dup /Keywords knownoget { (Keywords: ) print write-doc-string () = flush } if
-    dup /Creator knownoget { (Creator: ) print write-doc-string () = flush } if
-    dup /Producer knownoget { (Producer: ) print write-doc-string () = flush } if
-    dup /CreationDate knownoget { (CreationDate: ) print write-doc-string () = flush } if
-    dup /ModDate knownoget { (ModDate: ) print write-doc-string () = flush } if
-    dup /Trapped knownoget { (Trapped: ) print write-doc-string () = flush } if
-    (\n) print flush
-
-    /EmbeddedFonts 10 dict def
-    /UnEmbeddedFonts 10 dict def
-    /FontNumbers 10 dict def
-
-    /NumPages get 0 1 3 -1 roll 1 sub
-    {
-      dup
-      PDFContext exch .PDFPageInfoExt exch
-      DumpMediaSizes {
-        (Page ) print 1 add =print
-        dup /UserUnit knownoget {( UserUnit: ) print =print} if
-        dup /MediaBox knownoget {( MediaBox: ) print ==only} if
-        dup /CropBox knownoget  {( CropBox: )  print ==only} if
-        dup /BleedBox knownoget {( BleedBox: ) print ==only} if
-        dup /TrimBox knownoget  {( TrimBox: )  print ==only} if
-        dup /ArtBox knownoget   {( ArtBox: )   print ==only} if
-        dup /Rotate knownoget not {0}if ( Rotate = ) print =print
-        dup /Annots knownoget {{(     Page contains Annotations) print} if} if
-        dup /UsesTransparency knownoget {{(     Page uses transparency features) print} if} if
-        dup /Spots knownoget {
-          (\n    Page Spot colors: ) =
-          {(        ) print (') print 256 string cvs print (') =} forall
-        } if
-        (\n) print flush
-        (\n) print flush
-      }
       {
-        pop
-      } ifelse
-
-      /Fonts knownoget
-      {
+        dup /ObjectNum known
         {
-          dup /ObjectNum known
+          %% Fonts with an ObjectNumber may have been previously referenced on another page
+          dup /ObjectNum get
+          dup FontNumbers exch known
           {
-            %% Fonts with an ObjectNumber may have been previously referenced on another page
-            dup /ObjectNum get
-            dup FontNumbers exch known
-            {
-              pop
-              %% found the ObjectNumber in the FontNumbers dictionary so we've seen this one.
-              //false
-            }
-            {
-              %% Not seen before, add the number to the array and process this font
-              FontNumbers exch dup put
-              //true
-            }ifelse
-          }{
-            %% Fonts without an ObjectNumber are defined inline and so must be unique
+            pop
+            %% found the ObjectNumber in the FontNumbers dictionary so we've seen this one.
+            //false
+          }
+          {
+            %% Not seen before, add the number to the array and process this font
+            FontNumbers exch dup put
             //true
-          } ifelse
+          }ifelse
+        }{
+          %% Fonts without an ObjectNumber are defined inline and so must be unique
+          //true
+        } ifelse
+        {
+          % First time we've seen the font
+          dup /Descendants known
           {
-            % First time we've seen the font
-            dup /Descendants known
+            dup /BaseFont get
+            EmbeddedFonts exch dup put    % We class the Type 0 font as 'embedded', but it's really the descendant which is embedded or not.
+            dup /Descendants get
+            1 index /BaseFont get
+            2 index /Embedded get
             {
-              dup /BaseFont get
-              EmbeddedFonts exch dup put    % We class the Type 0 font as 'embedded', but it's really the descendant which is embedded or not.
-              dup /Descendants get
-              1 index /BaseFont get
-              2 index /Embedded get
-              {
-                EmbeddedFonts exch dup put
-              }
-              {
-                UnEmbeddedFonts exch dup put
-              }ifelse
-              pop
+              EmbeddedFonts exch dup put
             }
             {
-              dup /BaseFont get
-              1 index /Embedded get
-              {
-                EmbeddedFonts exch dup put
-              }
-              {
-                UnEmbeddedFonts exch dup put
-              } ifelse
+              UnEmbeddedFonts exch dup put
             }ifelse
             pop
           }
           {
-            pop
-          } ifelse
-        }forall
-      } if
-    } for
+            dup /BaseFont get
+            1 index /Embedded get
+            {
+              EmbeddedFonts exch dup put
+            }
+            {
+              UnEmbeddedFonts exch dup put
+            } ifelse
+          }ifelse
+          pop
+        }
+        {
+          pop
+        } ifelse
+      }forall
+    } if
+  } for
 
-    /DumpFontsUsed where {/DumpFontsUsed get}{//false}ifelse
+  /DumpFontsUsed where {/DumpFontsUsed get}{//false}ifelse
+  {
+    [
+    UnEmbeddedFonts {pop} forall
+    /ShowEmbeddedFonts where {/ShowEmbeddedFonts get}{//false}ifelse
     {
-      [
+      EmbeddedFonts {pop} forall
+    } if
+    ]
+    dup length 0 gt {
+      { 100 string cvs exch 100 string cvs exch lt } .sort
+      (\nFont or CIDFont resources used (plain name and ASCIIHEX string representation):) =
+      { 128 string cvs dup print (    ) print (<) print 128 string cvs {16 8 string cvrs print} forall (>) print (\n) print} forall
+    } if
+  }
+  {
+    [
+    DumpFontsNeeded
+    {
       UnEmbeddedFonts {pop} forall
-      /ShowEmbeddedFonts where {/ShowEmbeddedFonts get}{//false}ifelse
-      {
-        EmbeddedFonts {pop} forall
-      } if
-      ]
-      dup length 0 gt {
-        { 100 string cvs exch 100 string cvs exch lt } .sort
-        (\nFont or CIDFont resources used (plain name and ASCIIHEX string representation):) =
-        { 128 string cvs dup print (    ) print (<) print 128 string cvs {16 8 string cvrs print} forall (>) print (\n) print} forall
-      } if
-    }
-    {
-      [
-      DumpFontsNeeded
-      {
-        UnEmbeddedFonts {pop} forall
-      } if
-      ]
-      dup length 0 gt {
-        { 100 string cvs exch 100 string cvs exch lt } .sort
-        (\nFonts Needed that are not embedded \(system fonts required\):) =
-        { (    ) print 128 string cvs dup print (    ) print (<) print {16 8 string cvrs print} forall (>) print (\n) print} forall
-      } if
-    }ifelse
-  } if
-  PDFContext .PDFClose
-}
-{
-  enum-pdfs
-} ifelse
+    } if
+    ]
+    dup length 0 gt {
+      { 100 string cvs exch 100 string cvs exch lt } .sort
+      (\nFonts Needed that are not embedded \(system fonts required\):) =
+      { (    ) print 128 string cvs dup print (    ) print (<) print {16 8 string cvrs print} forall (>) print (\n) print} forall
+    } if
+  }ifelse
+} if
+PDFContext .PDFClose
+
 end
 quit



More information about the tex-live-commits mailing list.