% Copyright (C) 1994, 1995 Aladdin Enterprises. All rights reserved. % % This program is free software; you can redistribute it and/or modify it % under the terms of the GNU General Public License as published by the % Free Software Foundation; either version 2 of the License, or (at your % option) any later version. % % This program is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General % Public License for more details. % % You should have received a copy of the GNU General Public License along % with this program; if not, write to the Free Software Foundation, Inc., % 59 Temple Place, Suite 330, Boston, MA, 02111-1307. % $Id: gs_pfile.ps,v 1.2.6.1.2.1 2003/04/12 14:02:38 giles Exp $ % Runtime support for minimum-space fonts and packed files. % ****** NOTE: This file must be kept consistent with % ****** packfile.ps and wrfont.ps. % ---------------- Packed file support ---------------- % % A packed file is the concatenation of several file groups, each of which % is the result of compressing several files concatenated together. % The packed file begins with a procedure that creates an appropriate % decoding filter for each file group, as follows: % -proc- % Thus, accessing an individual file requires 4 parameters: % the starting address and length of the outer compressed file, % and the starting address and length of the inner file. /.packedfilefilter % % .packedfilefilter { 4 index systemdict begin token pop end 6 1 roll % Stack: fproc file ostart olength istart ilength 4 index 5 -1 roll setfileposition % Stack: fproc file olength istart ilength 4 -2 roll () /SubFileDecode filter % Stack: fproc istart ilength ofilter 4 -1 roll exec % Filters don't support setfileposition, so we must skip data % by reading it into a buffer. We rely on the fact that % save/restore don't affect file positions. % Stack: istart ilength dfilter save exch 1000 string % Stack: istart ilength save dfilter scratch 4 index 1 index length idiv { 2 copy readstring pop pop } repeat 2 copy 0 8 -1 roll 2 index length mod getinterval readstring pop pop pop % Stack: ilength save dfilter exch restore exch () /SubFileDecode filter } bind def % Run a packed library file. /.runpackedlibfile % % .runpackedlibfile { 5 -1 roll findlibfile { exch pop dup 6 2 roll .packedfilefilter currentobjectformat exch 1 setobjectformat run setobjectformat closefile } { 5 1 roll /findlibfile load /undefinedfilename signalerror } ifelse } bind def % ---------------- Compacted font support ---------------- % % Compacted fonts written by wrfont.ps depend on the existence and % specifications of the procedures and data in this section. /.compactfontdefault mark /PaintType 0 /FontMatrix [0.001 0 0 0.001 0 0] readonly /FontType 1 /Encoding StandardEncoding .dicttomark readonly def /.checkexistingfont % % .checkexistingfont % {} ( on d-stack) % % .checkexistingfont % -save- --restore-- ( on d-stack) { FontDirectory 4 index .knownget { dup /UniqueID .knownget { 4 index eq exch /FontType get 1 eq and } { pop false } ifelse } { false } ifelse { save /restore load 6 2 roll } { {} 5 1 roll } ifelse dict //.compactfontdefault exch .copydict begin dict /Private exch def Private begin /MinFeature {16 16} def /Password 5839 def /UniqueID 1 index def end /UniqueID exch def /FontName exch def } bind def /.knownEncodings [ ISOLatin1Encoding StandardEncoding SymbolEncoding ] readonly def /.readCharStrings % .readCharStrings { exch dup dict dup 3 -1 roll { currentfile token pop dup type /integertype eq { dup -8 bitshift //.knownEncodings exch get exch 255 and get } if currentfile token pop dup type /nametype eq { 2 index exch get } { % Stack: encrypt dict dict key value 4 index { 4330 exch dup .type1encrypt exch pop } if readonly } ifelse put dup } repeat pop exch pop } bind def