📄 rfc1168.ps
字号:
%!PS-Adobe-1.0% Copyright 1987 Interleaf, Inc.% Ten Canal Park, Cambridge, MA 02141%%%%%%%%%%%%%%%%%%%%%%%%%% PS macros%%%%%%%%%%%%%%%%%%%%%%%%%/bdf {bind def} bind def/xdf {exch def} bdf/ldd {load def} bdf%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% global constants and variables%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Version%/PSPRO-VERSION_MAJOR 3 def %Feb 28, 1987/PSPRO-VERSION_MINOR 2 def %Oct 9, 1987/PSPRO-VERSION_SUB 1 def %Oct 28, 1987%% Drawing modes%/PL_SET 0 def %ink black/PL_CLEAR 1 def %ink white/PL_XOR 2 def %ink by xor'ing source onto page - can PS do it?/PL_REPLACE 3 def %ink by replacing, e.g. overlayed bitmaps%% Default global PS state %/drawmode PL_SET def %default is ink black/useNativeFonts false def /numtextures 21 def %creator should initialize this/whitefill 13 def %FOR NOW, white always position 13 in pat font/docutmark false def %should cropping marks be printed/invertmatrix [1 0 0 -1 0 0] def%% Font limits%/MAXFONT 1024 def/MAXFONT1 MAXFONT 1 sub def/MAXCHARS 128 def %per font/MAXCHARS1 MAXCHARS 1 sub def/VMHEADROOM 1000 def/BOGUSWIDTH -1 def%%%%%%%%%%%%%%%%%%%%%%%%%% Memory Defs%%%%%%%%%%%%%%%%%%%%%%%%%/mesg 64 string def/charname 12 string def/istr 3 string def/ILEncoding 256 array def % New global Encoding vector./ILSymEncoding 256 array def % SymbolB Encoding vector./trashheap 1024 string def/emsg1 256 string def/emsg2 256 string def%%%%%%%%%%%%%%%%%%%%%%%%%%% Job Utilities%%%%%%%%%%%%%%%%%%%%%%%%%/inch {72 mul} bdf/headerpage { %assumes standard PS state /y 9 def /nl {/y y 1 sub def 1 inch y inch moveto } bdf /#copies 1 def /Helvetica-Bold findfont 18 scalefont setfont 1 inch 1 inch moveto nl nl 0 1 hline length 1 sub { hline exch get show nl } for /Helvetica findfont 8 scalefont setfont 1 inch 1 inch moveto (pl2ps )show PSPRO-VERSION_SUB PSPRO-VERSION_MINOR PSPRO-VERSION_MAJOR vershow ( Copyright 1987 Interleaf, Inc. ) show emsg1 0 get 0 ne { 1 inch .75 inch moveto emsg1 show } if emsg2 0 get 0 ne { 1 inch .5 inch moveto emsg2 show } if} bdf/logme { (\tInterleaf::pl2ps ) print PSPRO-VERSION_SUB PSPRO-VERSION_MINOR PSPRO-VERSION_MAJOR verprint hline length 1 sub -1 0 { (\tInterleaf::) print hline exch get print (\n) print } for flush } bdf/verprint { 10 mesg cvrs print (.) print 10 mesg cvrs print (.) print 10 mesg cvrs print (\n) print} bdf/vershow { 10 mesg cvrs show (.) show 10 mesg cvrs show (.) show 10 mesg cvrs show } bdf /versioncheck { /PL2PS-VERSION_MAJOR xdf /PL2PS-VERSION_MINOR xdf /PL2PS-VERSION_SUB xdf /doheader userdict /hline known def PL2PS-VERSION_MAJOR PSPRO-VERSION_MAJOR ne PL2PS-VERSION_MINOR PSPRO-VERSION_MINOR ne or PL2PS-VERSION_SUB PSPRO-VERSION_SUB ne or { doheader {logme } if (\tInterleaf:: FATAL ERROR: pspro.ps and pl2ps versions do not agree.) print (\n\tInterleaf:: pspro.ps version: \t) print PSPRO-VERSION_SUB PSPRO-VERSION_MINOR PSPRO-VERSION_MAJOR verprint (\tInterleaf:: pl2ps version: \t) print PL2PS-VERSION_SUB PL2PS-VERSION_MINOR PL2PS-VERSION_MAJOR verprint flush doheader {headerpage } if ( FATAL ERROR. pspro version ) show PSPRO-VERSION_SUB PSPRO-VERSION_MINOR PSPRO-VERSION_MAJOR vershow ( does not agree with pl2ps version ) show PL2PS-VERSION_SUB PL2PS-VERSION_MINOR PL2PS-VERSION_MAJOR vershow showpage quit } if} bdf%%%%%%%%%%%%%%%%%%%%%%%%%%% Graphics%%%%%%%%%%%%%%%%%%%%%%%%%/sw /setlinewidth ldd/m { /vpos xdf /hpos xdf } bdf %record pl current point, in rsu/v { /vpos xdf } bdf/h { /hpos xdf } bdf/pm /moveto ldd/as /lineto ldd % add segment /av /moveto ldd % add vertex % % Add an arc to the current path ala cookbook% but note clockwise is opposite sense for us.% /el { 0 begin /endangle xdf /startangle xdf /rotation xdf /yrad xdf /xrad xdf /yc xdf /xc xdf /savematrix matrix currentmatrix def xc yc translate rotation rotate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix end} bdf/el load 0 8 dict put/addconic { 0 begin %similar to el, but rotation is around local origin % after imaging an unrotated ellipse at (xc,yc) /clockwise xdf /endangle xdf /startangle xdf /rotation xdf /yrad xdf /xrad xdf /yc xdf /xc xdf %center in rotated x0-y0 space /savematrix matrix currentmatrix def xc yc translate rotation rotate %rotate the imaged ellipse xrad yrad scale 0 0 1 startangle endangle clockwise 1 eq {arc} {arcn} ifelse savematrix setmatrix end} bdf/addconic load 0 9 dict put%% Draw current path%/dp { gsave 1 setlinejoin % round line ends 1 setlinecap % round line ends drawmode PL_CLEAR eq {1} {0} ifelse setgray %only support two modes stroke grestore } bdf %% Pen pattern routines%/ALIGN_NONE 0 def/ALIGN_OPEN 1 def/ALIGN_CLOSE 2 def/PENPATWIDTHADJ [0 0 4 8 12 16 20] def % WARNING these values are derived % by scaling widthadj[], defined % in /usr/xops/lib/crt/scr/pens.c, % by the same factor (.4) that the % pen patterns were scaled when % sent to printerleaf./MINSCALE .1 def % Do not scale pen pattern below 10% % of original size.% % Calulates length of current path. Ala cookbook.%/pathlength { 0 begin flattenpath % changes all curveto's to lineto's /dist 0 def { /yfirst xdf /xfirst xdf /ymoveto yfirst def /xmoveto xfirst def} { /ynext xdf /xnext xdf /dist dist ynext yfirst sub dup mul xnext xfirst sub dup mul add sqrt add def /yfirst ynext def /xfirst xnext def} {} { /ynext ymoveto def /xnext xmoveto def /dist dist ynext yfirst sub dup mul xnext xfirst sub dup mul add sqrt add def /yfirst ynext def /xfirst xnext def} pathforall dist end} bdf/pathlength load 0 7 dict put/setpenpat { 0 begin % define penpattern dictionary /style xdf % alignment style /width xdf /pattern xdf % % Adjust pattern for various pen widths. % /scaleup DPIx 300 div def % Seybold hack!!!! /indx width 1 add scaleup div 4 div cvi def % Change width into an index indx 1 gt indx 7 lt and { /adj PENPATWIDTHADJ indx get def% Get ajustment for specified pen width /adj adj scaleup mul def % from predefined array PENPATWIDTHADJ % and scale up to the resolution. /indx 0 def pattern { /iszero indx 2 mod def % Add ajustment for pen width iszero 0 ne % to just "off" phases of pattern. {adj add /val xdf} {/val xdf} ifelse pattern indx val put /indx indx 1 add def } forall } if % % Align pattern to pathlength. % /offset 0 def /patternlen 0 def /pathlen pathlength def % Computes path length. pattern % Compute total len of repeating pattern {patternlen add /patternlen xdf } forall style ALIGN_NONE eq { } if style ALIGN_CLOSE eq { % from /usr/xops/lib/crt/scr/pens.c /n pathlen patternlen div cvi def /extralen pathlen cvi patternlen cvi mod def /halfpatlen patternlen 2 div def extralen halfpatlen gt {/n n 1 add def} if n 0 eq {/n 1 def} if /scale1 pathlen n patternlen mul div def scale1 MINSCALE gt { /indx 0 def pattern { scale1 mul /val xdf val 0 eq {/val 1 def} if pattern indx val round put /indx indx 1 add def } forall } if /offset pattern 0 get 2 div round def } if style ALIGN_OPEN eq { % from /usr/xops/lib/crt/scr/pens.c /firstdash pattern 0 get def /dashpct firstdash patternlen div def /n pathlen patternlen div dashpct sub cvi def /scale1 pathlen n dashpct add patternlen mul div def /scale2 pathlen n dashpct add 1 add patternlen mul div def /x scale2 1 sub abs def /y scale1 1 sub abs def x y lt {/scale1 scale2 def} if scale1 MINSCALE gt { /indx 0 def pattern { scale1 mul /val xdf val 0 eq {/val 1 def} if pattern indx val round put /indx indx 1 add def } forall /offset 0 def } if } if pattern offset setdash end} bdf/setpenpat load 0 50 dict put%%%%%%%%%%%%%%%%%%%%%%%%%%% Text handling%%%%%%%%%%%%%%%%%%%%%%%%%/s { /mappedsp xdf /spAdj xdf /stEnd xdf /fstring xdf hpos vpos moveto drawmode PL_CLEAR eq {1} {0} ifelse setgray %only support two modes for text spAdj 0 ne mappedsp -1 ne and { spAdj 0 mappedsp fstring widthshow % justify it } { fstring show } ifelse /hpos stEnd def %adjust idea of current point} bdf%%%%%%%%%%%%%%%%%%%%%%%%%%% Images%%%%%%%%%%%%%%%%%%%%%%%%%/PL_bitmap { 0 begin gsave /vpix xdf /hpix xdf /nbytes hpix 15 add 16 idiv 2 mul def /picstr nbytes string def hpos vpos translate nbytes 8 mul vpix false [1 0 0 1 0 0 ] {currentfile picstr 0 nbytes getinterval readhexstring pop} imagemask grestore end} bdf/PL_bitmap load 0 4 dict put/PL_contone { 0 begin gsave /nbits xdf /vpix xdf /hpix xdf /nbytes hpix nbits mul 15 add 16 idiv 2 mul def /picstr nbytes string def hpos vpos translate hpix vpix nbits [1 0 0 1 0 0] {currentfile picstr 0 nbytes getinterval readhexstring pop } image grestore end} bdf/PL_contone load 0 5 dict put/PL_image { 0 begin gsave /ho xdf % upper left corner of image. /vo xdf % /hh xdf % Transformed upper right corner relative /vh xdf % to upper left corner. /hv xdf % Transformed lower left corner relative /vv xdf % to upper left corner. /nbits xdf % depth /vpix xdf % height /hpix xdf % width /mapsz xdf % PL_MAP data size /map xdf % PL_MAP data mapsz 0 ne { /mapsz mapsz 1 sub def {map exch mapsz mul round cvi get mapsz div} settransfer } if /picstr hpix nbits mul 7 add 8 idiv string def ho vo translate [hh vh hv vv 0 0] concat nbits 1 eq mapsz 0 eq and{ hpix vpix false [hpix 0 0 vpix 0 0] {currentfile picstr readhexstring pop } imagemask } { hpix vpix nbits [hpix 0 0 vpix 0 0] {currentfile picstr readhexstring pop } image } ifelse grestore end} bdf/PL_image load 0 12 dict put%%%%%%%%%%%%%%%%%%%%%%%%%%% FONT GOODIES%%%%%%%%%%%%%%%%%%%%%%%%%%% ReEncodeSubset -map character set a'la Interleaf% % snarfed from PS manual, example 22% At the moment, it seems like all overlays will start at char 0,% but we might as well be general/reencodesubdict 12 dict def/ReEncode {%% Copy basefontdict into newfont except for the FID entry.% First create a new font dictionary the size of basefontdict% plus 2 for a FID entry which definefont will provide.% reencodesubdict begin /newencoding xdf /newfontname xdf /basefontname xdf /basefontdict basefontname findfont def /newfont basefontdict maxlength 2 add dict def basefontdict { % Copy basefontdict to newfont exch dup /FID ne { % except for the FID entry. exch newfont 3 1 roll put % Copy entry into newfont. } { pop pop % Remove entry from stack if equal FID. } ifelse } forall newfont /FontName newfontname put newencoding -1 ne { newfont /Encoding newencoding put } if newfontname newfont definefont pop end} bdf%% Now make a global Encoding vector%/insertcharnum { 0 begin % Put /char# into entry i /encoding xdf % of new encoding vector as /i xdf % character names. (char) charname copy pop i istr cvs pop charname 4 istr putinterval encoding i charname cvn put end} bdf/insertcharnum load 0 2 dict putStandardEncoding ILEncoding copy dup 5 /florin put dup 7 /fraction put dup 12 /sterling put dup 27 /section put dup 28 /periodcentered put dup 29 /cent put dup 30 /hyphen put dup 31 /emdash put dup 34 /quotedblright put dup 45 /endash put 127 /quotedblleft put 0 1 4 { ILEncoding insertcharnum } for 6 1 6 { ILEncoding insertcharnum } for 8 1 11 { ILEncoding insertcharnum } for 13 1 26 { ILEncoding insertcharnum } for %% Create a dictionary entry in "fontmap" indexed by% PL fontnames with PS names and sizes as entries% a call is of the form: /timsps10 /ILtims 10 map%/map { 0 begin /PSsize xdf /PSname xdf /PLname xdf /psd 2 dict def psd /pssize PSsize put psd /psname PSname put fontmap PLname psd put % install it end} bdf/map load 0 4 dict put%% Symbol_B character encoding vector. Encodes IL char num to PS% symbol names.%ILSymEncoding 32[/space /logicalor /arrowright /arrowdblleft /arrowdblup /arrowdblright /lozenge /arrowhorizex /angleleft /registersans/Upsilon1 /plusminus /second /angle /greaterequal/radical /ellipsis /Ifraktur /spade /lessequal/minute /degree /fraction /florin /infinity/approxequal /integral /propersuperset /parenrightbt /arrowup/bracketrighttp /aleph /arrowdblboth /bracerightbt /integralbt/notsubset /bracketleftbt /trademarksans /bracelefttp /braceleftmid/braceleftbt /bracketlefttp /braceex /apple /angleright/parenrightex /parenrighttp /arrowdown /divide /element/summation /bracketleftex /parenlefttp /parenleftbt /dotmath/copyrightsans /integralex /parenleftex /integraltp /registerserif /intersection /trademarkserif /arrowdbldown /gradient /logicalnot/reflexsubset /equivalence /propersubset /partialdiff /arrowboth/circlemultiply /heart /bracketrightex /bracerightmid /emptyset/bracketrightbt /Rfraktur /proportional /reflexsuperset /carriagereturn/notequal /notelement /diamond /club /bracerighttp/arrowleft /weierstrass /bullet /circleplus /multiply/arrowvertex /copyrightserif /union /product /logicaland] putinterval0 1 32 {ILSymEncoding insertcharnum } for127 1 255 {ILSymEncoding insertcharnum } for/declareFont { /PLnum xdf /PLname xdf useNativeFonts { PSfontobj PLnum fontmap PLname get dup /psname get findfont invertmatrix makefont exch /pssize get DPIx 72 div mul scalefont put } { PSfontobj PLnum % into the Plnum'th object make a dictionary: 10 dict dup begin /FontType 3 def % scale 300 dpi downloaded fonts to target resolution (1270/300). /FontMatrix [DPIx 300 div 0 0 DPIy 300 div 0 0] def /FontBBox [0 0 0 0] def %updated by LoadGlyph /Encoding ILEncoding def /BuildChar { 0 begin /char xdf /fontdict xdf /charname fontdict /Encoding get char get def /charinfo fontdict /CharData get charname get def /wx charinfo 0 get def charinfo 0 get BOGUSWIDTH eq {puterrchar} { /charbbox charinfo 1 4 getinterval def wx 0 charbbox aload pop setcachedevice charinfo 5 get charinfo 6 get true fontdict /imagemaskmatrix get dup 5 charinfo 8 get put dup 4 charinfo 7 get put charinfo 9 get imagemask }ifelse end %BuildChar dict }def %BuildChar /BuildChar load 0 7 dict put /imagemaskmatrix [1 0 0 1 0 0] def %scale factors irrelevant /CharData MAXCHARS dict def % CharData is built by LoadGlyph. end %font dictionary defn PLname exch definefont put %load a bogus space character in case no one does PSfontobj PLnum get /CharData get /space [16 0 0 1 1 16 1 0 0 [<00>] cvx ] put } ifelse} def/numLoadEmptyGlyph { 0 begin % by number, load font data for char with width but no bits /charno xdf /fontno xdf /w xdf w fontno PSfontobj fontno get /Encoding get charno get LoadEmptyGlyph end} bdf/numLoadEmptyGlyph load 0 3 dict put/LoadEmptyGlyph { 0 begin % by name, load font data for char with width but no bits /charname xdf /fontno xdf /w xdf PSfontobj fontno get /CharData get charname [w 0 0 1 1 w 1 0 0 [<00>] cvx ] put end} bdf/LoadEmptyGlyph load 0 3 dict put/puterrchar { PSfontobj errfontno get dup /BuildChar get errcharno exch exec (\tInterleaf::out of VM loading bitmap (?). Try breaking up document\n) dup print flush emsg1 copy pop} bdf/timeToQuit {% initialstate restore (\tInterleaf::completely out of memory. \n\tTry breaking up the document \n) dup print flush emsg2 copy pop% headerpage showpage stop} bdf/LoadGlyph { 0 begin % load a glyph into the CharData entry of PSFontobj[fontno] % the entry is in the position implied by charno % and with the metrics height, width, lsb /charno xdf /fontno xdf /height xdf /vadj xdf /width xdf /hsize xdf /lsb xdf /noVMHEADROOM vmstatus exch sub exch pop dup VMHEADROOM 2 idiv lt {timeToQuit} if VMHEADROOM lt {true } {false} ifelse def /nbytes hsize 15 add 16 idiv 2 mul height mul def noVMHEADROOM not {/glyph nbytes string def } if currentfile noVMHEADROOM {trashheap 0 nbytes getinterval } {glyph} ifelse readhexstring pop pop %actually, we pass bitmap rounded to 16 bits wide: /hsize hsize 15 add 16 idiv 16 mul def /thefont PSfontobj fontno get def %the font dict % if we are loading glyphs, PSfontobj is an array of % dictionaries each of which already has the form % of Program 21, PS T&C /charname thefont /Encoding get charno get def %access by name ! %now make the parameters for the CharData % 1 unit = 1 pixel /tx lsb neg def /ty vadj neg def /lly height vadj add def %lower left of bbox /llx lsb def /urx hsize lsb add def %upper right /ury vadj def thefont /CharData get charname noVMHEADROOM { [BOGUSWIDTH] } {[width llx lly urx ury hsize height tx ty [glyph] cvx ]} ifelse put end} bdf/LoadGlyph load 0 20 dict put/sf { PSfontobj exch get setfont } bdf%%%%%%%%%%%%%%%%%%%%%%%%%%% FILL PATTERNS%%%%%%%%%%%%%%%%%%%%%%%%%%% Fill patterns by clipping a rectangle filled with characters%% IL patterns are presently on 32x32 tiles, even if there is a subtile% which would define the whole pattern. However, we attempt generality% here grayArray determines whether to use grayscale for some patterns% even if not using native patterns%/stdsizex 32 def/stdsizey 32 def/patternstring 1 string def/grayArray [ %indexed by position in IL pattern font, -1 means not grayscale % others are fraction of WHITE -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 .92 .8 .65 0 .5 .35 .2 ] def/patgrayArray [ %when using grayscale as complete simulation 0 .12 .22 .32 .42 .52 .62 .72 .82 .92 .17 .27 .37 1 .92 .8 .65 0 .5 .35 .2 ] def%% THE APPLICATION CALLS:%/fillpatset { % fnum patchar fillpatset /patchar xdf % selects pattern ch in font fnum /pfindex xdf patgraylevel dup 0 ge { % The extra call to patgraylevel /patIsGray true def % is needed because PS computes /patgray xdf % both operands of an "and" operator } { % even if the first is false. pop /patIsGray false def } ifelse} bdf/fp { gsave pfindex 0 eq patchar 0 eq and { % special case /patIsGray true def /patgray 0 def } if
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -