/* * $RCSfile: TextWraps.psw,v $ * * Copyright (C) 1992 by Adobe Systems Incorporated. * All rights reserved. * * Permission to use, copy, modify, and distribute 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. If any portion of this software is changed, it cannot be * marketed under Adobe's trademarks and/or copyrights unless Adobe, in * its sole discretion, approves by a prior writing the quality of the * resulting implementation. * * 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. * * PostScript, Display PostScript, and Adobe are trademarks of Adobe Systems * Incorporated registered in the U.S.A. and other countries. * * Author: Adobe Systems Incorporated */ /*************************************************************** ** ** FUNCTION: PSWGetTransform ** ** DESCRIPTION: Gets the current transform matrices and offset ** coordinates. ** ** PARAMETERS: None ** ** RETURN: Ctm array of current transform matrix ** Invctm array of inverted matrix ** XOffset X offset value ** YOffset Y offset value ** ***************************************************************/ defineps PSWGetTransform (| float Ctm[6], Invctm[6]; int *XOffset, *YOffset) matrix currentmatrix dup Ctm matrix invertmatrix Invctm currentXoffset YOffset XOffset endps /*************************************************************** ** ** FUNCTION: PSWCachestatus ** ** DESCRIPTION: Gets the font cache status measurements. ** ** PARAMETERS: None ** ** RETURN: Array array to hold font cache status ** ***************************************************************/ defineps PSWCachestatus(|int Array[7]) cachestatus 7 -1 1 {1 roll} for 7 {Array} repeat endps /*************************************************************** ** ** FUNCTION: PSWCurrentcacheparams ** ** DESCRIPTION: Gets the current font cache parameters. ** ** PARAMETERS: None ** ** RETURN: Size size of the font cache in bytes ** Lower threshold at which characters may ** be stored in compressed form ** Upper maximum bytes for one character ** ***************************************************************/ defineps PSWCurrentcacheparams(|int *Size, *Lower, *Upper) currentcacheparams Upper Lower Size endps /*************************************************************** ** ** FUNCTION: PSWSetcacheparams ** ** DESCRIPTION: Sets the current font cache parameters. ** ** PARAMETERS: Ctxt DPS context ** ** RETURN: Size size of the font cache in bytes ** Lower threshold at which characters may ** be stored in compressed form ** Upper maximum bytes for one character ** ***************************************************************/ defineps PSWSetcacheparams(int Size, Lower, Upper) mark Size Lower Upper setcacheparams %% Upper setcachelimit endps /*************************************************************** ** ** FUNCTION: PSWrmovetoShow ** ** DESCRIPTION: Move relative to a position and draw the string ** using the 'show' operator. ** ** PARAMETERS: X X offset from current location ** Str string to be drawn ** Num length of the string ** ** RETURN: None ** ***************************************************************/ defineps PSWrmovetoShow(float X; char Str[Num]; int Num) X 0 rmoveto (Str) show endps /*************************************************************** ** ** FUNCTION: PSWshow ** ** DESCRIPTION: Draw string using the 'show' operator. Differs from PSshow ** in taking a counted string, so can be used to show sections ** from the middle of a string ** ** PARAMETERS: Str string to be drawn ** Num length of the string ** ** RETURN: None ** ***************************************************************/ defineps PSWshow(char Str[Num]; int Num) (Str) show endps /*************************************************************** ** ** FUNCTION: PSWashow ** ** DESCRIPTION: Draw string using the 'ashow' operator. ** ** PARAMETERS: Ax X width adjustment for each char ** Ay Y width adjustment for each char ** Str string to be drawn ** Num length of the string ** ** RETURN: None ** ***************************************************************/ defineps PSWashow(float Ax, Ay; char Str[Num]; int Num) Ax Ay (Str) ashow endps /*************************************************************** ** ** FUNCTION: PSWwidthshow ** ** DESCRIPTION: Draw string using the 'widthshow' operator. ** ** PARAMETERS: Cx X character width adjustment ** Cy Y character width adjustment ** C character for width adjustment ** Str string to be drawn ** Num length of the string ** ** RETURN: None ** ***************************************************************/ defineps PSWwidthshow(float Cx, Cy; int C; char Str[Num]; int Num) Cx Cy C (Str) widthshow endps /*************************************************************** ** ** FUNCTION: PSWawidthshow ** ** DESCRIPTION: Draw string using the 'awidthshow' operator. ** ** PARAMETERS: Cx X character width adjustment ** Cy Y character width adjustment ** C character for width adjustment ** Ax X width adjustment for each char ** Ay Y width adjustment for each char ** Str string to be drawn ** Num length of the string ** ** RETURN: None ** ***************************************************************/ defineps PSWawidthshow(float Cx, Cy; int C; float Ax, Ay; char Str[Num]; int Num) Cx Cy C Ax Ay (Str) awidthshow endps /*************************************************************** ** ** FUNCTION: PSWCopyFont ** ** DESCRIPTION: Reencode the font adding BitmapWidths, ExactSize, ** InBetweenSize, and TransformedChar entries set to ** vary the font characteristics. ** ** PARAMETERS: F1 Original font name ** F2 New font name ** BMWValue use bit map widths flag ** CopyUniqueID whether to copy UniqueID ** ESValue what to do on exact size match ** IBSValue what to do on in between sizes ** TCValue what to do for transformed chars ** ** RETURN: None ** ***************************************************************/ defineps PSWCopyFont(char *F1, *F2; boolean BMWValue, CopyUniqueID; int ESValue, IBSValue, TCValue) /F1 findfont dup length 4 add dict begin { 1 index /FID eq 2 index /UniqueID eq CopyUniqueID not and or { pop pop } { def } ifelse } forall /BitmapWidths BMWValue def /ExactSize ESValue def /InBetweenSize IBSValue def /TransformedChar TCValue def /F2 currentdict end definefont pop endps /*************************************************************** ** ** FUNCTION: PSWGetStringWidth ** ** DESCRIPTION: Gets the width of each character in a string string. ** ** PARAMETERS: String string to measure ** Size number of characters in the string ** ** RETURN: Width width of characters ** ***************************************************************/ defineps PSWGetStringWidth (char String[Size]; int Size | float Width[Size]) /str 1 string def 0 1 Size 1 sub { (String) exch get str 0 3 -1 roll put str stringwidth pop Width } for /str where pop /str undef endps /*************************************************************** ** ** FUNCTION: PSWdrawFrame ** ** DESCRIPTION: Draw frame around the displayable page. ** ** PARAMETERS: Ox X coordinate of lower left corner. ** Oy Y coordinate of lower left corner. ** Dx width ** Dy height ** ** RETURN: None ** ***************************************************************/ defineps PSWdrawFrame(int Ox; int Oy; int Dx; int Dy) gsave newpath Ox Oy moveto 0 Dy rlineto Dx 0 rlineto 0 Dy neg rlineto closepath -32768 -32768 moveto 32767 -32768 lineto 32767 32767 lineto -32768 32767 lineto closepath 0.8 setgray fill newpath 10 -10 translate Ox Oy moveto Dx 0 rlineto 0 Dy rlineto -10 0 rlineto 0 Dy neg 10 add rlineto Dx neg 10 add 0 rlineto closepath 0 setgray fill -10 10 translate 4 setlinewidth 0 setgray Ox Oy Dx Dy rectstroke 1 setgray Ox Oy Dx Dy rectfill grestore endps /*************************************************************** ** ** FUNCTION: PSWClearWindow ** ** DESCRIPTION: Fills window with white ** ** PARAMETERS: Width, Height window dimensions ** ** RETURN: None ** ***************************************************************/ defineps PSWClearWindow(float Width, Height) currentgray 1 setgray 0 0 Width Height rectfill setgray endps /*************************************************************** ** ** FUNCTION: PSWSetOffset ** ** DESCRIPTION: Sets the x and y offset, maintaining current matrix ** ** PARAMETERS: X X offset value ** Y Y offset value ** ** RETURN: None ** ***************************************************************/ defineps PSWSetOffset(int x, y) matrix currentmatrix x y setXoffset setmatrix endps /*************************************************************** ** ** FUNCTION: PSWSetRectViewClip ** ** DESCRIPTION: Sets the view clip to the rectangles ** ** PARAMETERS: Rect List of rectangles ** NumRect Number of points in Rect ** ** RETURN: None ** ***************************************************************/ defineps PSWSetRectViewClip(float numstring Rect[NumRect]; int NumRect) Rect rectviewclip endps /*************************************************************** ** ** FUNCTION: PSWSetMatrixAndGetTransform ** ** DESCRIPTION: Sets the current matrix to have the specified ** translation, scale, and halftone phase, and returns ** the matrices ** ** PARAMETERS: tx, ty translation ** s scale ** hx, hy halftonephase ** ** RETURN: Ctm array of current transform matrix ** Invctm array of inverted matrix ** XOffset X offset value ** YOffset Y offset value ** ***************************************************************/ defineps PSWSetMatrixAndGetTransform (float tx, ty, s; int hx, hy | float Ctm[6], Invctm[6]; int *XOffset, *YOffset) initmatrix tx ty translate s s scale hx hy sethalftonephase matrix currentmatrix dup Ctm matrix invertmatrix Invctm currentXoffset YOffset XOffset endps