|
|
1.1 root 1: //--------------------------------------------------------------------------
2: //
3: // Module Name: PSCRIPT.H
4: //
5: // Brief Description: This module contains global defines and structures
6: // necessary for the PSCRIPT driver.
7: //
8: // Author: Kent Settle (kentse)
9: // Created: 04-Nov-1991
10: //
11: // 27-Mar-1992 Fri 12:26:47 updated -by- Daniel Chou (danielc)
12: // Modified DEVDATA data structrue, changed halftone data pointer
13: //
14: // Copyright (c) 1991, 1992 Microsoft Corporation
15: //
16: //--------------------------------------------------------------------------
17:
18: #include "stddef.h"
19: #include "windows.h"
20: #include "winddi.h"
21: #include "wingdi.h"
22: #include "winspool.h"
23: #include "ppd.h"
24: #include "pfm.h"
25: #include "psproc.h"
26: #include "fwall.h"
27: #include "libproto.h"
28:
29: //#define INDEX_PAL // defined if we change to indexed palette.
30:
31: // the default linewidth is .008 inch.
32:
33: #define PSFX_DEFAULT_LINEWIDTH LTOPSFX(576) / 1000
34:
35: #define DRIVER_ID 0x44445350 // "PSDD" = driver id.
36: #define PRIVATE_DEVMODE_ID 0x56495250 // "PRIV" = private data id.
37:
38: #define FX_ZERO 0x00000000
39: #define FX_ONEHALF 0x00000008
40: #define FX_ONE 0x00000010
41: #define FX_TWO 0x00000020
42: #define FILLFONTLOADED 1
43: #define BASEPATLOADED 2
44: #define MAX_FONT_NAME 80
45: #define ADOBE_FONT_UNITS 1000
46: #define MAX_CLIP_RECTS 100
47: #define MAX_EPS_FILE 40 // win31 compatible length.
48:
49: // macro for updating pstr to point to the translation string, if
50: // one exists.
51:
52: #define XLATESTRING(pstr) \
53: pstr = strchr(pstrSave, '/'); \
54: if (pstr) \
55: pstr++; \
56: else \
57: pstr = pstrSave
58:
59: typedef struct _HSURFPAT /* hsp */
60: {
61: HSURF hsurf_DENSE1;
62: HSURF hsurf_DENSE2;
63: HSURF hsurf_DENSE3;
64: HSURF hsurf_DENSE4;
65: HSURF hsurf_DENSE5;
66: HSURF hsurf_DENSE6;
67: HSURF hsurf_DENSE7;
68: HSURF hsurf_DENSE8;
69: HSURF hsurf_VERT;
70: HSURF hsurf_HORIZ;
71: HSURF hsurf_DIAG1;
72: HSURF hsurf_DIAG2;
73: HSURF hsurf_DIAG3;
74: HSURF hsurf_DIAG4;
75: HSURF hsurf_NOSHADE;
76: HSURF hsurf_SOLID;
77: HSURF hsurf_HALFTONE;
78: HSURF hsurf_HATCH;
79: HSURF hsurf_DIAGHATCH;
80:
81: } HSURFPAT;
82:
83: typedef HSURFPAT *PHSURFPAT;
84:
85: typedef struct _IOCHANNEL /* ioChannel */
86: {
87: PVOID pBuffer; // pointer to output buffer.
88: ULONG ulBufCount; // buffer position holder.
89: } IOCHANNEL;
90:
91: typedef IOCHANNEL *PIOCHANNEL;
92:
93: #define PSDEVMODE_EPS 0x01 // set if outputting EPS file.
94: #define PSDEVMODE_EHANDLER 0x02 // set if outputting error handler.
95: #define PSDEVMODE_MIRROR 0x04 // set if mirror image.
96: #define PSDEVMODE_BLACK 0x08 // set if all colors set to black.
97: #define PSDEVMODE_NEG 0x10 // set if negative image.
98: #define PSDEVMODE_FONTSUBST 0x20 // set if font substitution enabled.
99:
100: typedef struct
101: {
102: DEVMODE dm;
103: DWORD dwPrivDATA; // private data id.
104: DWORD dwFlags; // a bunch of flags defined above.
105: WCHAR wstrEPSFile[MAX_EPS_FILE]; // EPS file name.
106: COLORADJUSTMENT coloradj; // structure for halftoning.
107: } PSDEVMODE;
108:
109: typedef PSDEVMODE FAR *LPPSDEVMODE;
110:
111: // structure for unicode <-> pscript character mapping.
112:
113: typedef struct
114: {
115: char *szChar;
116: USHORT usPSValue; // Adobe character index.
117: USHORT usUCValue; // UNICODE character index.
118: } UCMap, *PUCMap;
119:
120: // PS_FIX will represent our internal 24.8 number type.
121:
122: typedef LONG PS_FIX;
123: typedef PS_FIX *PPS_FIX;
124:
125: // font downloading struct.
126:
127: typedef struct
128: {
129: ULONG iFace; // device index for font; zero if GDI font.
130: ULONG iUniq; // unique number identifying realization of font.
131: DWORD cGlyphs; // count of HGLYPHS in phgVector.
132: HGLYPH *phgVector; // Encoding vector.
133: CHAR strFont[MAX_FONT_NAME]; // font name as defined in the printer.
134: PS_FIX psfxScaleFactor; // scale factor for this instance of font.
135: } DLFONT, *PDLFONT;
136:
137: // font remapping structure.
138:
139: typedef struct
140: {
141: struct _FREMAP *pNext;
142: DWORD iFontID;
143: } FREMAP, *PFREMAP;
144:
145: // flag defines for the CGS structure.
146:
147: #define CGS_PATHEXISTS 0x00000001 // set if path exists in printer.
148: #define CGS_FONTREDEFINED 0x00000002 // set if font redefine sent.
149: #define CGS_GEOLINEXFORM 0x00000004 // set if xform in progress.
150: #define CGS_BASEPATSENT 0x00000010 // set if base pattern def sent.
151: #define CGS_LATENCODED 0x00000020 // set if latin encoding defined.
152: #define CGS_SYMENCODED 0x00000040 // set if sym encoding defined.
153: #define CGS_DINGENCODED 0x00000080 // set if ding encoding defined.
154: #define CGS_DLFONTTHRESHOLD 0x00000100 // set if font download max.
155: #define CGS_EPS_PROC 0x00000200 // set if EPS procedures defined.
156:
157: // current graphics state structure.
158:
159: typedef struct _CGS /* cgs */
160: {
161: struct _CGS *pcgsNext; // next CGS pointer.
162: struct _CGS *pcgsPrev; // previous CGS pointer.
163: DWORD dwFlags; // a bunch of flags.
164: LINEATTRS lineattrs; // line attributes.
165: LONG psfxLineWidth; // actual width sent to printer.
166: ULONG ulColor; // Current RGB color
167: ULONG lidFont; // Current font ID.
168: PUCMap pmap; // font mapping table.
169: POINTL ptlCurPos;
170: DWORD cDownloadedFonts;
171: DLFONT *pDLFonts; // place to track downloaded fonts.
172: XFORM FontXform;
173: FWORD fwdEmHeight;
174: XFORM GeoLineXform; // geometric linewidth XFORM.
175: LONG psfxScaleFactor; // font point size.
176: BYTE *pSFArray; // BIT array for downloaded softfonts.
177: char szFont[MAX_FONT_NAME]; // The PostScript font name
178: FREMAP FontRemap; // start of linked list of remapped fonts.
179: } CGS;
180: typedef CGS *PCGS;
181:
182: // pscript driver's device brush.
183:
184: typedef struct _DEVBRUSH
185: {
186: #ifdef INDEX_PAL
187: ULONG iSolidColor;
188: #endif
189: SIZEL sizlBitmap;
190: ULONG iFormat; // BMF_XXXX, indicates bitmap Format.
191: FLONG flBitmap; // BMF_TOPDOWN iff (pvBits == pvScan0)
192: ULONG cXlate; // count of color table entries.
193: ULONG offsetXlate;// offset from top of struct to color table.
194: ULONG iPatIndex; // pattern index.
195: BYTE ajBits[1]; // pattern bitmap.
196: } DEVBRUSH;
197:
198: typedef struct
199: {
200: CHAR FormName[CCHFORMNAME];
201: CHAR PrinterForm[CCHFORMNAME];
202: RECTL imagearea; // imageable area rectangle in USER units.
203: SIZEL sizlPaper; // size of the paper in USER units.
204: } CURRENTFORM;
205:
206: typedef struct
207: {
208: PNTFM pntfm;
209: HANDLE hFontRes;
210: } PFMPAIR;
211:
212: // PDEVDATA flag definitions
213:
214: #define PDEV_COMPLETEHEADER 0x00000001 // set if complete header sent to printer.
215: #define PDEV_PRINTCOLOR 0x00000002 // set if using color.
216: #define PDEV_STARTDOC 0x00000004 // set if Escape(STARTDOC) called.
217: #define PDEV_CANCELDOC 0x00000008 // set if EngWrite failed.
218: #define PDEV_FONTREDEFINED 0x00000010 // set if font redefine sent.
219: #define PDEV_LATINENCODED 0x00000020 // set if latin encoding defined.
220: #define PDEV_SYMENCODED 0x00000040 // set if sym encoding defined.
221: #define PDEV_DINGENCODED 0x00000080 // set if ding encoding defined.
222: #define PDEV_MANUALFEED 0x00000100 // set if using manual feed.
223: #define PDEV_UTILSSENT 0x00000200 // set if Utils Procset sent.
224: #define PDEV_BMPPATSENT 0x00000400 // set if Pattern Bmp Procset sent.
225: #define PDEV_IMAGESENT 0x00000800 // set if Image Procset sent.
226: #define PDEV_PSHALFTONE 0x00001000 // set if PS is doing halftoning.
227: #define PDEV_RAWDATASENT 0x00002000 // set if RAW data has been sent.
228: #define PDEV_PROCSET 0x00004000 // set if procset part of header sent.
229: #define PDEV_WITHINPAGE 0x00008000 // set if withing save/restore of page.
230: #define PDEV_SOURCEORHACK 0x00010000 // set if doing source OR hack.
231: #define PDEV_CHANGEFORM 0x00020000 // set if form change within document.
232:
233: // the postscript driver's device data structure.
234:
235: typedef struct _DEVDATA /* dev */
236: {
237: DWORD dwID; // "PSDD" = pdev id.
238: PSDEVMODE psdm; // DEVMODE.
239: HANDLE hheap; // heap handle for current pdev.
240: HANDLE hPrinter; // handle passed in at enablepdev time.
241: PWSTR pwstrPPDFile; // pointer to PPD filename.
242: PWSTR pwstrDocName; // pointer to document name.
243: PS_FIX psfxScale; // scale factor (1.0 = 100%).
244: DWORD ScaledDPI; // (DPI * dmScale) / 100.
245: DWORD cCopies; // count of copies.
246: DWORD cPatterns; // count of patterns.
247: HSURFPAT hsp; // surface handles to patterns.
248: HDEV hdev; // engine's handle for device.
249: HSURF hsurf; // our surface handle.
250: HANDLE hpal; // handle to our palette.
251: PNTPD pntpd; // pointer to printer descriptor.
252: IOCHANNEL ioChannel; // output channel information.
253: CGS cgs; // current graphics state.
254: CGS *pcgsSave; // pointer to gsave linked list.
255: DWORD dwFlags; // a bunch of flags defined above.
256: CURRENTFORM CurForm; // current form information.
257: DWORD dwCurVM; // current VM free in printer.
258: DWORD iDLFonts; // downloadable font threshold.
259: DWORD iPageNumber; // page number of current page.
260: PFMPAIR *pfmtable; // pointer to font metrics table.
261: WCHAR *pTTSubstTable; // pointer to TT font subst table.
262: WCHAR *pTrayFormTable; // pointer to tray-form table.
263: ULONG cDeviceFonts; // count of device fonts.
264: ULONG cSoftFonts; // count of softfonts.
265: VOID *pvDrvHTData; // Now device's halftone info
266: SOFTFONTENTRY *pSFList; // pointer to list of softfonts.
267: DWORD dwEndPDEV; // end of pdev signature.
268: } DEVDATA;
269: typedef DEVDATA *PDEVDATA;
270:
271: #include "pslayer.h"
272:
273: VOID FreeFont(PDEVDATA, ULONG, HANDLE, PNTFM);
274:
275:
276: typedef struct
277: {
278: DWORD iFace;
279: BOOL bFontSubstitution;
280: BOOL bDeviceFont;
281: BOOL bJustification;
282: POINTPSFX ptSpace;
283: POINTPSFX ptNonSpace;
284: } TEXTDATA, *PTEXTDATA;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.