1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
|
/* $Xorg: Ps.h,v 1.5 2001/02/09 02:04:35 xorgcvs Exp $ */
/*
Copyright 1996, 1998 The Open Group
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation.
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, the name of The Open Group shall not be
used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from The Open Group.
*/
/*
* (c) Copyright 1996 Hewlett-Packard Company
* (c) Copyright 1996 International Business Machines Corp.
* (c) Copyright 1996 Sun Microsystems, Inc.
* (c) Copyright 1996 Novell, Inc.
* (c) Copyright 1996 Digital Equipment Corp.
* (c) Copyright 1996 Fujitsu Limited
* (c) Copyright 1996 Hitachi, Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject
* to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the names of the copyright holders
* shall not be used in advertising or otherwise to promote the sale, use
* or other dealings in this Software without prior written authorization
* from said copyright holders.
*/
/*******************************************************************
**
** *********************************************************
** *
** * File: Ps.h
** *
** * Contents: defines and includes for the Ps driver
** * for a printing X server.
** *
** * Created By: Roger Helmendach (Liberty Systems)
** *
** * Copyright: Copyright 1996 The Open Group, Inc.
** *
** *********************************************************
**
********************************************************************/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#ifndef _PS_H_
#define _PS_H_
#include <stdio.h>
#ifdef abs
#undef abs /* this is because of a non-Spec1170ness in misc.h */
#endif
#include <stdlib.h>
#include "scrnintstr.h"
#include "dix.h"
#include "PsDef.h"
#include "psout.h"
#include <X11/extensions/Print.h>
#include <X11/extensions/Printstr.h>
#include "regionstr.h"
#include <X11/fonts/fontstruct.h>
#include "dixfontstr.h"
#include "gcstruct.h"
/*
* Some sleazes to force the XrmDB stuff into the server
*/
#ifndef HAVE_XPointer
typedef char *XPointer;
#define Status int
#define True 1
#define False 0
#endif
#include <X11/misc.h>
#include <X11/Xfuncproto.h>
#include <X11/Xresource.h>
#include "attributes.h"
/*
* Public index variables from PsInit.c
*/
extern int PsScreenPrivateIndex;
extern int PsWindowPrivateIndex;
extern int PsContextPrivateIndex;
extern int PsPixmapPrivateIndex;
extern XpValidatePoolsRec PsValidatePoolsRec;
/*
* Display list structures
*/
#define DPY_BLOCKSIZE 4096
typedef struct
{
int mode;
int nPoints;
xPoint *pPoints;
} PsPolyPointsRec;
typedef struct
{
int nSegments;
xSegment *pSegments;
} PsSegmentsRec;
typedef struct
{
int nRects;
xRectangle *pRects;
} PsRectanglesRec;
typedef struct
{
int nArcs;
xArc *pArcs;
} PsArcsRec;
typedef struct
{
int x;
int y;
int count;
char *string;
} PsText8Rec;
typedef struct
{
int x;
int y;
int count;
unsigned short *string;
} PsText16Rec;
typedef struct
{
int depth;
int x;
int y;
int w;
int h;
int leftPad;
int format;
int res; /* image resolution */
char *pData;
} PsImageRec;
typedef struct
{
int x;
int y;
int w;
int h;
} PsFrameRec;
typedef enum
{
PolyPointCmd,
PolyLineCmd,
PolySegmentCmd,
PolyRectangleCmd,
FillPolygonCmd,
PolyFillRectCmd,
PolyArcCmd,
PolyFillArcCmd,
Text8Cmd,
Text16Cmd,
TextI8Cmd,
TextI16Cmd,
PutImageCmd,
BeginFrameCmd,
EndFrameCmd
} DisplayElmType;
typedef struct _DisplayElmRec
{
DisplayElmType type;
GCPtr gc;
union
{
PsPolyPointsRec polyPts;
PsSegmentsRec segments;
PsRectanglesRec rects;
PsArcsRec arcs;
PsText8Rec text8;
PsText16Rec text16;
PsImageRec image;
PsFrameRec frame;
} c;
} DisplayElmRec;
typedef DisplayElmRec *DisplayElmPtr;
typedef struct _DisplayListRec
{
struct _DisplayListRec *next;
int nelms;
DisplayElmRec elms[DPY_BLOCKSIZE];
} DisplayListRec;
typedef DisplayListRec *DisplayListPtr;
/*
* Private structures
*/
typedef struct
{
XrmDatabase resDB;
Bool (*DestroyWindow)(WindowPtr);
} PsScreenPrivRec, *PsScreenPrivPtr;
typedef struct PsFontTypeInfoRec PsFontTypeInfoRec;
/* Structure to hold information about one font on disk
* Notes:
* - multiple XLFD names can refer to the same |PsFontTypeInfoRec| (if
* they all use the same font on the disk)
* - the FreeType font download code uses multiple |PsFontTypeInfoRec|
* records for one font on disk if they differ in the encoding being
* used (this is an exception from the
* 'one-|PsFontTypeInfoRec|-per-font-on-disk'-design; maybe it it is better
* to rework that in a later step and add a new per-encoding structure).
*/
struct PsFontTypeInfoRec
{
PsFontTypeInfoRec *next; /* Next record in list... */
char *adobe_ps_name; /* PostScript font name (from the
* "_ADOBE_POSTSCRIPT_FONTNAME" atom) */
char *download_ps_name; /* PostScript font name used for font download */
char *filename; /* File name of font */
#ifdef XP_USE_FREETYPE
char *ft_download_encoding; /* encoding used for download */
PsFTDownloadFontType ft_download_font_type; /* PS font type used for download (e.g. Type1/Type3/CID/etc.) */
#endif /* XP_USE_FREETYPE */
int is_iso_encoding; /* Is this font encoded in ISO Latin 1 ? */
int font_type; /* See PSFTI_FONT_TYPE_* below... */
Bool downloadableFont; /* Font can be downloaded */
Bool alreadyDownloaded[256]; /* Font has been downloaded (for 256 8bit "sub"-font) */
};
#define PSFTI_FONT_TYPE_OTHER (0)
#define PSFTI_FONT_TYPE_PMF (1)
#define PSFTI_FONT_TYPE_PS_TYPE1_PFA (2)
#define PSFTI_FONT_TYPE_PS_TYPE1_PFB (3)
#define PSFTI_FONT_TYPE_TRUETYPE (4)
/* PSFTI_FONT_TYPE_FREETYPE is means the font is handled by the freetype engine */
#define PSFTI_FONT_TYPE_FREETYPE (5)
typedef struct PsFontInfoRec PsFontInfoRec;
/* Structure which represents our context info for a single XLFD font
* Note that multiple |PsFontInfoRec| records can share the same
* |PsFontTypeInfoRec| record - the |PsFontInfoRec| records represent
* different appearances of the same font on disk(=|PsFontTypeInfoRec|)).
*/
struct PsFontInfoRec
{
PsFontInfoRec *next; /* Next record in list... */
/* |font| and |font_fontPrivate| are used by |PsFindFontInfoRec()| to
* identify a font */
FontPtr font; /* The font this record is for */
pointer font_fontPrivate;
PsFontTypeInfoRec *ftir; /* Record about the font file on disk */
const char *dfl_name; /* XLFD for this font */
int size; /* Font size. Use |mtx| if |size==0| */
float mtx[4]; /* Transformation matrix (see |size|) */
};
typedef struct
{
char *jobFileName;
FILE *pJobFile;
GC lastGC;
unsigned char *dash;
int validGC;
ClientPtr getDocClient;
int getDocBufSize;
PsOutPtr pPsOut;
PsFontTypeInfoRec *fontTypeInfoRecords;
PsFontInfoRec *fontInfoRecords;
} PsContextPrivRec, *PsContextPrivPtr;
typedef struct
{
int validContext;
XpContextPtr context;
} PsWindowPrivRec, *PsWindowPrivPtr;
typedef struct
{
XpContextPtr context;
GC lastGC;
int validGC;
DisplayListPtr dispList;
} PsPixmapPrivRec, *PsPixmapPrivPtr;
/*
* Macro functions
*/
#define SEND_PS(f,c) fwrite( c, sizeof( char ), strlen( c ), f )
#define MIN(a,b) (((a)<(b))?(a):(b))
#ifndef MAX
#define MAX(a,b) (((a)>(b))?(a):(b))
#endif
/*
* Functions in PsInit.c
*/
extern Bool InitializePsDriver(int ndx, ScreenPtr pScreen, int argc,
char **argv);
extern XpContextPtr PsGetContextFromWindow(WindowPtr win);
/*
* Functions in PsPrint.c
*/
extern int PsStartJob(XpContextPtr pCon, Bool sendClientData, ClientPtr client);
extern int PsEndJob(XpContextPtr pCon, Bool cancel);
extern int PsStartPage(XpContextPtr pCon, WindowPtr pWin);
extern int PsEndPage(XpContextPtr pCon, WindowPtr pWin);
extern int PsStartDoc(XpContextPtr pCon, XPDocumentType type);
extern int PsEndDoc(XpContextPtr pCon, Bool cancel);
extern int PsDocumentData(XpContextPtr pCon, DrawablePtr pDraw, char *pData,
int len_data, char *pFmt, int len_fmt, char *pOpt, int len_opt,
ClientPtr client);
extern int PsGetDocumentData(XpContextPtr pCon, ClientPtr client,
int maxBufferSize);
/*
* Functions in PsGC.c
*/
extern Bool PsCreateGC(GCPtr pGC);
extern PsContextPrivPtr PsGetPsContextPriv( DrawablePtr pDrawable );
extern int PsUpdateDrawableGC(GCPtr pGC, DrawablePtr pDrawable,
PsOutPtr *psOut, ColormapPtr *cMap);
extern void PsValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
extern void PsChangeGC(GCPtr pGC, unsigned long changes);
extern void PsCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
extern void PsDestroyGC(GCPtr pGC);
extern void PsChangeClip(GCPtr pGC, int type, pointer pValue, int nrects);
extern void PsDestroyClip(GCPtr pGC);
extern void PsCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
extern GCPtr PsCreateAndCopyGC(DrawablePtr pDrawable, GCPtr pSrc);
/*
* Functions in PsMisc.c
*/
extern void PsQueryBestSize(int type, short *pwidth, short *pheight,
ScreenPtr pScreen);
extern Bool PsCloseScreen(int index, ScreenPtr pScreen);
extern void PsLineAttrs(PsOutPtr psOut, GCPtr pGC, ColormapPtr cMap);
extern int PsGetMediumDimensions(
XpContextPtr pCon,
CARD16 *pWidth,
CARD16 *pHeight);
extern int PsGetReproducibleArea(
XpContextPtr pCon,
xRectangle *pRect);
extern int PsSetImageResolution(
XpContextPtr pCon,
int imageRes,
Bool *status);
/*
* Functions in PsSpans.c
*/
extern void PsFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nSpans,
DDXPointPtr pPoints, int *pWidths, int fSorted);
extern void PsSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *pSrc,
DDXPointPtr pPoints, int *pWidths, int nSpans,
int fSorted);
/*
* Functions in PsArea.c
*/
extern void PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
int x, int y, int w, int h, int leftPad, int format,
int imageRes, char *pImage);
extern void PsPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
int x, int y, int w, int h, int leftPad, int format,
char *pImage);
extern void PsPutImageMask(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
int w, int h, int leftPad, int format, char *pImage);
extern RegionPtr PsCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
int srcx, int srcy, int width, int height,
int dstx, int dsty);
extern RegionPtr PsCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
int srcx, int srcy, int width, int height,
int dstx, int dsty, unsigned long plane);
/*
* Functions in PsPixel.c
*/
extern void PsPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
int nPoints, xPoint *pPoints);
extern void PsPushPixels(GCPtr pGC, PixmapPtr pBitmap, DrawablePtr pDrawable,
int width, int height, int x, int y);
/*
* Functions in PsLine.c
*/
extern void PsPolyLine(DrawablePtr pDrawable, GCPtr pGC, int mode,
int nPoints, xPoint *pPoints);
extern void PsPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nSegments,
xSegment *pSegments);
/*
* Functions in PsPolygon.c
*/
extern void PsPolyRectangle(DrawablePtr pDrawable, GCPtr pGC, int nRects,
xRectangle *pRects);
extern void PsFillPolygon(DrawablePtr pDrawable, GCPtr pGC, int shape,
int mode, int nPoints, DDXPointPtr pPoints);
extern void PsPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nRects,
xRectangle *pRects);
/*
* Functions in PsPolygon.c
*/
extern void PsPolyArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs,
xArc *pArcs);
extern void PsPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs,
xArc *pArcs);
/*
* Functions in PsText.c
*/
extern int PsPolyText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
int count, char *string);
extern int PsPolyText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
int count, unsigned short *string);
extern void PsImageText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
int count, char *string);
extern void PsImageText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
int count, unsigned short *string);
extern void PsImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
unsigned int nGlyphs, CharInfoPtr *pCharInfo,
pointer pGlyphBase);
extern void PsPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
unsigned int nGlyphs, CharInfoPtr *pCharInfo,
pointer pGlyphBase);
/*
* Functions in PsWindow.c
*/
extern Bool PsCreateWindow(WindowPtr pWin);
extern Bool PsMapWindow(WindowPtr pWin);
extern Bool PsPositionWindow(WindowPtr pWin, int x, int y);
extern Bool PsUnmapWindow(WindowPtr pWin);
extern void PsCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg,
RegionPtr prgnSrc);
extern Bool PsChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
extern void PsPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what);
extern Bool PsDestroyWindow(WindowPtr pWin);
/*
* Functions in PsFonts.c
*/
extern Bool PsRealizeFont(ScreenPtr pscr, FontPtr pFont);
extern Bool PsUnrealizeFont(ScreenPtr pscr, FontPtr pFont);
extern char *PsGetFontName(FontPtr pFont);
extern int PsGetFontSize(FontPtr pFont, float *mtx);
extern char *PsGetPSFontName(FontPtr pFont);
extern char *PsGetPSFaceOrFontName(FontPtr pFont);
extern int PsIsISOLatin1Encoding(FontPtr pFont);
extern char *PsGetEncodingName(FontPtr pFont);
extern PsFontInfoRec *PsGetFontInfoRec(DrawablePtr pDrawable, FontPtr pFont);
extern void PsFreeFontInfoRecords(PsContextPrivPtr priv);
extern PsFTDownloadFontType PsGetFTDownloadFontType(void);
/*
* Functions in PsFTFonts.c
*/
extern char *PsGetFTFontFileName(FontPtr pFont);
extern Bool PsIsFreeTypeFont(FontPtr pFont);
/*
* Functions in PsAttr.c
*/
extern char *PsGetAttributes(XpContextPtr pCon, XPAttributes pool);
extern char *PsGetOneAttribute(XpContextPtr pCon, XPAttributes pool,
char *attr);
extern int PsAugmentAttributes(XpContextPtr pCon, XPAttributes pool,
char *attrs);
extern int PsSetAttributes(XpContextPtr pCon, XPAttributes pool, char *attrs);
/*
* Functions in PsColor.c
*/
extern Bool PsCreateColormap(ColormapPtr pColor);
extern void PsDestroyColormap(ColormapPtr pColor);
extern void PsInstallColormap(ColormapPtr pColor);
extern void PsUninstallColormap(ColormapPtr pColor);
extern int PsListInstalledColormaps(ScreenPtr pScreen, XID *pCmapList);
extern void PsStoreColors(ColormapPtr pColor, int ndef, xColorItem *pdefs);
extern void PsResolveColor(unsigned short *pRed, unsigned short *pGreen,
unsigned short *pBlue, VisualPtr pVisual);
extern PsOutColor PsGetPixelColor(ColormapPtr cMap, int pixval);
extern void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut,
ColormapPtr cMap);
/*
* Functions in PsPixmap.c
*/
extern PixmapPtr PsCreatePixmap(ScreenPtr pScreen, int width, int height,
int depth);
extern void PsScrubPixmap(PixmapPtr pPixmap);
extern Bool PsDestroyPixmap(PixmapPtr pPixmap);
extern DisplayListPtr PsGetFreeDisplayBlock(PsPixmapPrivPtr priv);
extern void PsReplayPixmap(PixmapPtr pix, DrawablePtr pDrawable);
extern int PsCloneDisplayElm(PixmapPtr dst,
DisplayElmPtr elm, DisplayElmPtr newElm,
int xoff, int yoff);
extern void PsCopyDisplayList(PixmapPtr src, PixmapPtr dst, int xoff,
int yoff, int x, int y, int w, int h);
extern PsElmPtr PsCreateFillElementList(PixmapPtr pix, int *nElms);
extern PsElmPtr PsCloneFillElementList(int nElms, PsElmPtr elms);
extern void PsDestroyFillElementList(int nElms, PsElmPtr elms);
/*
* Functions in PsImageUtil.c
*/
extern unsigned long
PsGetImagePixel(char *pImage, int depth, int w, int h, int leftPad, int format,
int px, int py);
#endif /* _PS_H_ */
|