/*
* 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