JFIF$        dd7 

Viewing File: /usr/share/ghostscript/Resource/Init/gs_diskn.ps

% Copyright (C) 2001-2021 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
% implied.
%
% This software is distributed under license and may not be copied,
% modified or distributed except as expressly authorized under the terms
% of the license contained in the file LICENSE in this distribution.
%
% Refer to licensing information at http://www.artifex.com or contact
% Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
% CA 94945, U.S.A., +1(415)492-9861, for further information.
%

% Initialization file for %disk device modifications
% When this is run, systemdict is still writable,

systemdict begin

% Collect the list of searchable IODevices in SearchOrder
% Efficiency here doesn't matter since we run this at the end
% of gs_init and convert it to a static array.
/.getsearchabledevs { % - .getsearchabledevs [ list_of_strings ]
  //systemdict /.searchabledevs .knownget not {
    .currentglobal //true .setglobal
    mark (*) {
      dup length string copy dup currentdevparams /Searchable
      .knownget { not { pop } if } { pop } ifelse
    } 8192 string /IODevice resourceforall
    ]
    % now process the array into correct SearchOrder
    0 1 2 {
      mark exch 2 index {
        dup currentdevparams /SearchOrder get 2 index eq
        { exch } { pop } ifelse
      } forall % devices on the old list
      pop
      % make the array and sort it by name
      ] { lt } bind .sort
      exch
    } for
    % collect all devices with SearchOrder > 2
    mark 2 index {
      dup currentdevparams /SearchOrder get 2 gt
      { exch } { pop } ifelse
    } forall
    ] exch pop
    % We now have 4 arrays on the stack, SO=0 SO=1 SO=2 SO>2
    % make them into a single array
    mark 5 1 roll ] mark exch { { } forall } forall ]
    //systemdict /.searchabledevs 2 index .forceput
    exch .setglobal
  } executeonly
  if
} .bind executeonly odef % must be bound and hidden for .forceput

% Modify .putdevparams to force regeneration of .searchabledevs list
/.putdevparams {
  % We could be smarter and check for %disk* device, but this
  % doesn't get run enough to justify the complication
  //.putdevparams
  //systemdict /.searchabledevs .forceundef
} .bind executeonly odef % must be bound and hidden for .forceundef

% ------ extend filenameforall to handle wildcards in %dev% part of pattern -------%
/filenameforall {
  count 3 ge {
    2 index (%) search {
      pop pop
    } {
      % no device specified, so search them all
      pop (*%) 3 index concatstrings
      % we need to suppress the device when we return the string
      % in order to match Adobe's behaviour with %disk devices.
      4 -2 roll		% the callers procedure
      [ { (%) search { pop pop (%) search { pop pop } if } if } /exec load
        4 -1 roll		% the callers procedure
        /exec load
      ] cvx
      4 2 roll		% put the modified procedure where it belongs
    } ifelse
    % extract device portion (up to end of string or next %)
    (%) search { exch pop } if	% stack: opat proc scratch npat device
    dup (*) search { pop pop pop //true } { pop //false } ifelse
    1 index (?) search { pop pop pop //true } { pop //false } ifelse
    or not {
      pop pop //filenameforall	% device with no wildcard
    } {
      (%) concatstrings (%) exch concatstrings
      .getsearchabledevs
      % find all matching devices and add the rest of the search string
      mark exch {
          dup counttomark 1 add index .stringmatch {
          counttomark 2 add index concatstrings
        } {
          pop
        } ifelse
      } forall
      ]
      3 1 roll pop pop
      4 -1 roll pop
      % now we need to invoke filenameforall for each of the strings
      % in the array. We do this by building a procedure that is like
      % an unrolled 'forall' loop. We do this to get the parameters
      % for each filenameforall, since each execution will pop its
      % parameters, but we can't use the operand stack for storage
      % since each invocation must have the same operand stack.
      mark exch {
          counttomark dup 3 add index exch
          2 add index
          /filenameforall load
        } forall
      ] cvx
      3 1 roll pop pop
      exec		% run our unrolled loop
    }
    ifelse
  } {
    //filenameforall	% not enough parameters -- just let it fail
  }
  ifelse
} odef

% redefine file to search all devices in order
/file {
  dup 0 get (r) 0 get eq dup {
    pop //false				% success code
    2 index 0 get 37 eq { [ () ] } { .getsearchabledevs } ifelse
    { 3 index concatstrings	% prepend the device
      {
        2 index //file } //.internalstopped exec not {
        4 1 roll pop pop pop //true
        exit		% exit with success
      } {
        pop pop
      }
      ifelse
    }
    forall
  }
  if
  not {		% just let standard file operator handle things
    //file
  }
  if
} bind odef

% redefine deletefile to search all devices in order
/deletefile {
  //false			% success code
  1 index 0 get 37 eq { [ () ] } { .getsearchabledevs } ifelse
  { 2 index concatstrings	% prepend the device
    { //deletefile } //.internalstopped exec exch pop not {
      pop //true exit		% exit with success
    }
    if
  }
  forall
  not { $error /errorname get /deletefile .systemvar exch signalerror } if
} bind odef

% redefine status to search all devices in order
/status {
  dup type /stringtype eq {
    //false			% success code
    1 index 0 get 37 eq { [ () ] } { .getsearchabledevs } ifelse
    { 2 index concatstrings	% prepend the device
      { //status } //.internalstopped exec not {
        { //true 7 -2 roll pop pop //true exit } % exit with success
        if
      }
      if
    }
    forall
    % If we made it this far, no devices were found to status the file
        % clean up to return 'false'
    exch pop
  } {
    //status
  }
  ifelse
} bind odef

% Also redefine renamefile to search all devices in order
/renamefile {
  //false			% success code
  2 index 0 get 37 eq { [ () ] } { .getsearchabledevs } ifelse
  { dup 4 index concatstrings	% prepend the device
    { (r) //file } //.internalstopped exec
    not {
      closefile exch pop //true exit	% exit with success
    } {
      pop pop
    } ifelse
  }
  forall
  not { $error /errorname get /renamefile .systemvar exch signalerror } if
  3 -1 roll concatstrings exch
  //renamefile
} bind odef

% redefine devforall to process devices in numeric order
% Spec's for 'devforall' are unclear, but font downloaders may expect this
/devforall {		% <proc> <scratch> devforall -
  [ { dup length string copy } 2 index //devforall ]
  % stack: proc scratch array_of_device_names
  { lt } .sort
  % We don't really invoke the procedure with the scratch string
  % but rather with the strings from our array
  exch pop exch forall
} odef
end				% systemdict
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg