492 lines
14 KiB
Plaintext
492 lines
14 KiB
Plaintext
/*
|
|
* FSBwraps.psw
|
|
*
|
|
* (c) Copyright 1991-1994 Adobe Systems Incorporated.
|
|
* All rights reserved.
|
|
*
|
|
* Permission to use, copy, modify, distribute, and sublicense this software
|
|
* and its documentation for any purpose and without fee is hereby granted,
|
|
* provided that the above copyright notices appear in all copies and that
|
|
* both those copyright notices and this permission notice appear in
|
|
* supporting documentation and that the name of Adobe Systems Incorporated
|
|
* not be used in advertising or publicity pertaining to distribution of the
|
|
* software without specific, written prior permission. No trademark license
|
|
* to use the Adobe trademarks is hereby granted. If the Adobe trademark
|
|
* "Display PostScript"(tm) is used to describe this software, its
|
|
* functionality or for any other purpose, such use shall be limited to a
|
|
* statement that this software works in conjunction with the Display
|
|
* PostScript system. Proper trademark attribution to reflect Adobe's
|
|
* ownership of the trademark shall be given whenever any such reference to
|
|
* the Display PostScript system is made.
|
|
*
|
|
* ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR
|
|
* ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
|
|
* ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NON- INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL ADOBE BE LIABLE
|
|
* TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL
|
|
* DAMAGES OR ANY DAMAGES WHATSOEVER WHETHER IN AN ACTION OF CONTRACT,
|
|
* NEGLIGENCE, STRICT LIABILITY OR ANY OTHER ACTION ARISING OUT OF OR IN
|
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ADOBE WILL NOT
|
|
* PROVIDE ANY TRAINING OR OTHER SUPPORT FOR THE SOFTWARE.
|
|
*
|
|
* Adobe, PostScript, and Display PostScript are trademarks of Adobe Systems
|
|
* Incorporated which may be registered in certain jurisdictions
|
|
*
|
|
* Author: Adobe Systems Incorporated
|
|
*/
|
|
|
|
defineps _DPSFClearWindow(DPSContext ctxt)
|
|
1 setgray
|
|
0 0 2000 2000 rectfill
|
|
endps
|
|
|
|
defineps _DPSFPreviewString(DPSContext ctxt; char *font; float size;
|
|
char *text; int height | boolean *bogus)
|
|
mark {
|
|
/font size selectfont
|
|
0 height neg 5 div itransform
|
|
exch pop 5 exch moveto
|
|
0 setgray
|
|
(text) show
|
|
} stopped bogus cleartomark
|
|
endps
|
|
|
|
defineps _DPSFReclip(DPSContext ctxt)
|
|
initclip
|
|
initviewclip
|
|
endps
|
|
|
|
defineps _DPSFUndefineFont(DPSContext ctxt; char *font; boolean oldServer)
|
|
currentshared true setshared % currentshared
|
|
{/font undefinefont} stopped % currentshared [font] stopped
|
|
{
|
|
false setshared % currentshared font
|
|
{undefinefont} stopped {
|
|
pop
|
|
} if
|
|
} if
|
|
setshared
|
|
oldServer { 2 vmreclaim } if
|
|
endps
|
|
|
|
defineps _DPSFDefineFontEnumFunctions(DPSContext ctxt)
|
|
$Adobe$DPS$Lib$Dict begin
|
|
/GetFontName { % int GetFontName string
|
|
$Adobe$DPS$Lib$Dict /FontDict get begin
|
|
dup maxItems div truncate cvi baseArray exch get
|
|
exch maxItems mod get
|
|
end
|
|
} bind def
|
|
|
|
% (str) x y SafeBBox left bottom right top
|
|
/SafeBBox {
|
|
3 copy % (str) x y (str) x y
|
|
newpath
|
|
moveto % (str) x y (str)
|
|
{
|
|
mark exch false charpath flattenpath pathbbox
|
|
} stopped {
|
|
cleartomark
|
|
3 -1 roll dup length dup % x y (str) len len
|
|
1 le {
|
|
pop
|
|
% punt; we can't divide it any more
|
|
0 0 moveto stringwidth pop % x y wx
|
|
dup 2 index add exch 3 index add exch
|
|
} {
|
|
2 copy % x y (str) len (str) len
|
|
2 idiv % x y (str) len (str) len/2
|
|
0 exch % x y (str) len (str) 0 len/2
|
|
getinterval dup % x y (str) len (s1) (s1)
|
|
5 index 5 index % x y (str) len (s1) (s1) x y
|
|
$Adobe$DPS$Lib$Dict /SafeBBox get exec
|
|
% x y (str) len (s1) l1 b1 r1 t1
|
|
9 4 roll % l1 b1 r1 t1 x y (str) len (s1)
|
|
stringwidth % ... x y (str) len wx wy
|
|
5 -1 roll add exch % ... x (str) len y+wy wx
|
|
5 -1 roll add exch % ... (str) len x+wx y+wy
|
|
4 2 roll % ... x+wx y+wy (str) len
|
|
dup 2 idiv % ... x+wx y+wy (str) len len/2
|
|
exch 2 div ceiling cvi
|
|
% ... x+wx y+wy (str) len/2 ceil(len/2)
|
|
getinterval % ... x+wx y+wy (s2)
|
|
3 1 roll % ... (s2) x+wx y+wy
|
|
$Adobe$DPS$Lib$Dict /SafeBBox get exec
|
|
% l1 b1 r1 t1 l2 b2 r2 t2
|
|
5 -1 roll 2 copy % l1 b1 r1 l2 b2 r2 t2 t1 t2 t1
|
|
gt {pop} {exch pop} ifelse % l1 b1 r1 l2 b2 r2 t
|
|
7 1 roll % t l1 b1 r1 l2 b2 r2
|
|
4 -1 roll 2 copy % t l1 b1 l2 b2 r2 r1 r2 r1
|
|
gt {pop} {exch pop} ifelse % t l1 b1 l2 b2 r
|
|
6 1 roll % r t l1 b1 l2 b2
|
|
3 -1 roll 2 copy % r t l1 l2 b2 b1 b2 b1
|
|
lt {pop} {exch pop} ifelse % r t l1 l2 b
|
|
5 1 roll % b r t l1 l2
|
|
2 copy % b r t l1 l2 l1 l2
|
|
lt {pop} {exch pop} ifelse % b r t l
|
|
4 1 roll % l b r t
|
|
} ifelse
|
|
} { % mark (str) x y l b r t
|
|
8 -4 roll pop pop pop pop
|
|
} ifelse
|
|
} bind def
|
|
/DownloadPS {
|
|
$Adobe$DPS$Lib$Dict /downloadSuccess false put
|
|
(%stdin) (r) file
|
|
cvx stopped
|
|
pop % always true
|
|
% Flush until you get the magic line
|
|
{
|
|
{currentfile 256 string readline} stopped
|
|
pop % don't care stopped result
|
|
pop % don't care readline bool result
|
|
(Magic end of data line \)\)\)\)\)\)\)\)\)\) 99#2 2#99 <xyz> // 7gsad,32h4ghNmndFgj2)
|
|
eq
|
|
{exit} if
|
|
} loop
|
|
} bind def
|
|
end
|
|
endps
|
|
|
|
defineps _DPSFEnumFonts(DPSContext ctxt | int *count; int *totalLength)
|
|
$Adobe$DPS$Lib$Dict begin
|
|
/FontDict 5 dict def
|
|
FontDict begin
|
|
/currentItem 0 def
|
|
/maxItems 100 def
|
|
/maxArrays 20 def % This is the max index, not the array size!
|
|
/baseArray maxArrays 1 add array def
|
|
/currentArray 0 def
|
|
baseArray 0 maxItems array put
|
|
end
|
|
|
|
/AddFontName { % string AddFontName success
|
|
$Adobe$DPS$Lib$Dict /FontDict get begin
|
|
1 { % provides enclosing loop for exit
|
|
currentItem maxItems eq
|
|
{
|
|
currentArray maxArrays eq {pop false exit} if
|
|
/currentArray currentArray 1 add def
|
|
baseArray currentArray maxItems array put
|
|
/currentItem 0 def
|
|
} if
|
|
dup length string copy
|
|
baseArray currentArray get currentItem 3 -1 roll put
|
|
/currentItem currentItem 1 add def
|
|
true
|
|
} repeat % provides enclosing loop for exit
|
|
end
|
|
} bind def
|
|
|
|
3 dict begin
|
|
/$listString 256 string def
|
|
/countFonts 0 def
|
|
/totalLen 0 def
|
|
|
|
% Enumerate SharedFontDirectory
|
|
SharedFontDirectory { % forall
|
|
pop % /fontname
|
|
$listString cvs % (fontname)
|
|
dup AddFontName % (name) success
|
|
{
|
|
/countFonts countFonts 1 add def
|
|
length 1 add totalLen add /totalLen exch def
|
|
} {
|
|
pop
|
|
} ifelse
|
|
} forall
|
|
|
|
% Enumerate %font% storage device, if available.
|
|
/filenameforall where { % if
|
|
pop
|
|
(%font%*) { % filenameforall
|
|
% Check if name is something we really believe
|
|
% is a font. Leave either "false" or "(name) true"
|
|
% on stack
|
|
|
|
% Discard filenames containing "."
|
|
(.) search { % if
|
|
pop pop pop null false
|
|
} { % else
|
|
dup % (%font%name) (%font%name)
|
|
(%font%) anchorsearch { % if
|
|
% (%font%name) (name) (%font%)
|
|
pop exch pop % (name)
|
|
dup AddFontName % (name) success
|
|
} { % else
|
|
pop null false
|
|
} ifelse
|
|
} ifelse
|
|
|
|
% Stack is either "<something> false" or "(name) true"
|
|
{
|
|
/countFonts countFonts 1 add def
|
|
length 1 add totalLen add /totalLen exch def
|
|
} {
|
|
pop
|
|
} ifelse
|
|
} $listString filenameforall
|
|
} if
|
|
totalLen totalLength countFonts count
|
|
end
|
|
end
|
|
|
|
$Adobe$DPS$Lib$Dict /AddFontName undef
|
|
endps
|
|
|
|
defineps _DPSFGetAllFontNames(DPSContext ctxt; int fontCount; int arrLen |
|
|
char fontNames[arrLen])
|
|
$Adobe$DPS$Lib$Dict begin
|
|
FontDict begin
|
|
0 1 fontCount 1 sub {
|
|
GetFontName fontNames
|
|
( ) fontNames
|
|
} for
|
|
end
|
|
end
|
|
endps
|
|
|
|
defineps _DPSFGetFontInfo(DPSContext ctxt; int fontNum; boolean oldServer |
|
|
char *familyName; char *fullName; char *weight;
|
|
boolean *blendedFont, *undefineIt, *bogus)
|
|
fontNum $Adobe$DPS$Lib$Dict /GetFontName get exec
|
|
|
|
dup dup % fontname fontname fontname
|
|
SharedFontDirectory exch known % fontname fontname known
|
|
dup undefineIt exch % fontname known fontname
|
|
% (leave fontname and known on stack
|
|
% for the duration of this call
|
|
% even though I don't list them in
|
|
% the comments)
|
|
{ % stopped
|
|
findfont dup % fontdir fontdir
|
|
/FontInfo known { % fontdir bool
|
|
/FontInfo get dup dup % fontinfo fontinfo fontinfo
|
|
/FamilyName known { % fontinfo fontinfo bool
|
|
/FamilyName get % fontinfo (familyname)
|
|
} {
|
|
pop ()
|
|
} ifelse
|
|
exch dup dup % (familyname) fontinfo fontinfo fontinfo
|
|
/FullName known { % (familyname) fontinfo fontinfo bool
|
|
/FullName get % (familyname) fontinfo (fullname)
|
|
} {
|
|
pop ()
|
|
} ifelse
|
|
exch dup dup % (familyname) (fullname) fontinfo*3
|
|
/Weight known { % (familyname) (fullname) fontinfo*2 bool
|
|
/Weight get % (familyname) (fullname) fontinfo (weight)
|
|
} {
|
|
pop (Medium)
|
|
} ifelse
|
|
exch % (familyname) (fullname) (weight) fontinfo
|
|
/BlendAxisTypes known % (familyname) (fullname) (weight) blendedFont
|
|
|
|
dup blendedFont % (familyname) (fullname) (weight) blendedFont
|
|
} {
|
|
pop () () ()
|
|
false false blendedFont
|
|
} ifelse % (familyname) (fullname) (weight) blendedFont
|
|
false bogus
|
|
|
|
} stopped {
|
|
() () ()
|
|
false false blendedFont
|
|
true bogus
|
|
} if
|
|
|
|
4 1 roll % blendedFont (familyname) (fullname) (weight)
|
|
weight fullName familyName
|
|
% fontname known is still on the stack so...
|
|
% fontname known blendedFont
|
|
|
|
% if blendedFont (the bool on the stack) is true, don't undefine things
|
|
% just yet since we'll be coming back quite soon for more stuff
|
|
|
|
not and { % undefine font if we just defined
|
|
% it to get this information
|
|
currentshared true setshared
|
|
exch % currentshared fontname
|
|
{undefinefont} stopped % currentshared [fontname] stopped
|
|
{
|
|
false setshared % currentshared fontname
|
|
|
|
{undefinefont} stopped {
|
|
pop
|
|
} if
|
|
} if
|
|
setshared
|
|
|
|
oldServer {2 vmreclaim} if
|
|
} {
|
|
pop
|
|
} ifelse
|
|
endps
|
|
|
|
defineps _DPSFFreeFontInfo(DPSContext ctxt)
|
|
$Adobe$DPS$Lib$Dict /FontDict undef
|
|
$Adobe$DPS$Lib$Dict /GetFontName undef
|
|
1 vmreclaim
|
|
endps
|
|
|
|
defineps _DPSFIsFontResident(DPSContext ctxt; char *name; | boolean *resident)
|
|
SharedFontDirectory /name known {
|
|
true resident
|
|
} {
|
|
/buf (name) length 6 add string def
|
|
buf 0 (%font%) putinterval
|
|
buf 6 (name) putinterval
|
|
buf status dup resident { pop pop pop pop } if
|
|
} ifelse
|
|
endps
|
|
|
|
defineps _DPSFGetBlendedFontInfo(DPSContext ctxt; int fontNum;
|
|
boolean undefineIt; boolean oldServer |
|
|
int *axes; int *designs;
|
|
char axisNames[256];
|
|
float blendPos[64]; int breakCount[4];
|
|
int blendBreak[48]; float blendBreakValue[48];
|
|
boolean *bogus)
|
|
|
|
fontNum $Adobe$DPS$Lib$Dict /GetFontName get exec
|
|
$Adobe$DPS$Lib$Dict /stringbuf 256 string put
|
|
dup % duplicate fontname; we'll need it later
|
|
|
|
findfont /FontInfo get dup % fontinfo fontinfo
|
|
/BlendAxisTypes get % fontinfo array
|
|
dup length axes % fontinfo array
|
|
{ % Concatenate all the names into axisNames
|
|
$Adobe$DPS$Lib$Dict /stringbuf get cvs
|
|
axisNames
|
|
( ) axisNames
|
|
} forall
|
|
dup dup % fontinfo fontinfo fontinfo
|
|
/BlendDesignPositions known { % fontinfo fontinfo known
|
|
/BlendDesignPositions get % fontinfo array
|
|
dup length designs % fontinfo array
|
|
{ % enumerate the subarrays
|
|
{
|
|
blendPos
|
|
} forall
|
|
} forall
|
|
false
|
|
} {
|
|
pop true
|
|
} ifelse % fontinfo bool
|
|
exch dup % bool fontinfo fontinfo
|
|
/BlendDesignMap known { % bool fontinfo known
|
|
/BlendDesignMap get % bool array
|
|
{
|
|
dup length % bool subarray len
|
|
breakCount % bool subarray len
|
|
{
|
|
aload pop % bool break breakvalue
|
|
blendBreakValue
|
|
blendBreak
|
|
} forall
|
|
} forall
|
|
false
|
|
} {
|
|
pop true
|
|
} ifelse % bool bool
|
|
|
|
or bogus
|
|
|
|
undefineIt { % undefine font if we just defined
|
|
% it to get this information
|
|
currentshared true setshared
|
|
exch % currentshared fontname
|
|
{undefinefont} stopped % currentshared [fontname] stopped
|
|
{
|
|
false setshared % currentshared fontname
|
|
|
|
{undefinefont} stopped {
|
|
pop
|
|
} if
|
|
} if
|
|
setshared
|
|
oldServer { 2 vmreclaim } if
|
|
} {
|
|
pop
|
|
} ifelse
|
|
$Adobe$DPS$Lib$Dict /stringbuf undef
|
|
endps
|
|
|
|
defineps _DPSFShowText(DPSContext ctxt; char *text; char *font; float size;
|
|
int x, y | boolean *bogus)
|
|
mark {
|
|
/font size selectfont
|
|
x y moveto
|
|
(text) show
|
|
} stopped dup bogus cleartomark
|
|
endps
|
|
|
|
defineps _DPSFShowTextAndGetDimensions(DPSContext ctxt;
|
|
char *text; char *font; float size;
|
|
int x, y |
|
|
float *width, *left, *right,
|
|
*top, *bottom)
|
|
mark {
|
|
/font size selectfont
|
|
x y moveto
|
|
(text) show
|
|
(text) stringwidth pop width
|
|
(text) x y $Adobe$DPS$Lib$Dict /SafeBBox get exec
|
|
} stopped {0 0 0 0} if
|
|
top right bottom left
|
|
cleartomark
|
|
endps
|
|
|
|
defineps _DPSFGetTextDimensions(DPSContext ctxt;
|
|
char *text; char *font; float size;
|
|
float x, y |
|
|
float *width, *height,
|
|
*left, *right, *top, *bottom;
|
|
boolean *bogus)
|
|
mark {
|
|
/font size selectfont
|
|
(text) stringwidth height width
|
|
|
|
(text) x y $Adobe$DPS$Lib$Dict /SafeBBox get exec
|
|
} stopped dup bogus {0 0 0 0} if
|
|
top right bottom left
|
|
cleartomark
|
|
endps
|
|
|
|
defineps _DPSFGetCTM(DPSContext ctx | float ctm[6], invctm[6])
|
|
matrix currentmatrix dup ctm matrix invertmatrix invctm
|
|
endps
|
|
|
|
defineps _DPSFSetUpMM(DPSContext ctxt; char *font, *str; float size;
|
|
int height; float p[n]; int n | boolean *bogus)
|
|
userdict /fontDefined known {
|
|
/tempfont undefinefont
|
|
} if
|
|
mark {
|
|
/tempfont /font findfont p makeblendedfont definefont
|
|
size scalefont setfont
|
|
0 height neg 5 div itransform
|
|
exch pop 5 exch moveto
|
|
(str) stringwidth pop pop
|
|
/fontDefined true def
|
|
} stopped bogus cleartomark
|
|
endps
|
|
|
|
defineps _DPSFDrawMM(DPSContext ctxt; char *str; int height)
|
|
0 height neg 5 div itransform
|
|
exch pop 5 exch moveto
|
|
(str) show
|
|
endps
|
|
|
|
defineps _DPSFPrepareToDownload(DPSContext ctxt; boolean makeShared |
|
|
boolean *currShared)
|
|
$Adobe$DPS$Lib$Dict /DownloadPS get
|
|
currentshared currShared makeShared setshared
|
|
endps
|
|
|
|
defineps _DPSFFinishDownload(DPSContext ctxt; boolean shared | boolean *ok)
|
|
shared setshared
|
|
$Adobe$DPS$Lib$Dict /downloadSuccess get ok
|
|
endps
|