psdrv.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. /*
  2. * PostScript driver definitions
  3. *
  4. * Copyright 1998 Huw D M Davies
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * This library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with this library; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19. */
  20. #ifndef __WINE_PSDRV_H
  21. #define __WINE_PSDRV_H
  22. #include <stdarg.h>
  23. #include "windef.h"
  24. #include "winbase.h"
  25. #include "wingdi.h"
  26. #include "wine/wingdi16.h"
  27. #include "winspool.h"
  28. typedef struct {
  29. INT index;
  30. LPCSTR sz;
  31. } GLYPHNAME;
  32. typedef struct {
  33. LONG UV;
  34. const GLYPHNAME *name;
  35. } UNICODEGLYPH;
  36. typedef struct {
  37. float llx, lly, urx, ury;
  38. } AFMBBOX;
  39. typedef struct _tagAFMLIGS {
  40. char *successor;
  41. char *ligature;
  42. struct _tagAFMLIGS *next;
  43. } AFMLIGS;
  44. typedef struct {
  45. int C; /* character */
  46. LONG UV;
  47. float WX;
  48. const GLYPHNAME *N; /* name */
  49. AFMBBOX B;
  50. const AFMLIGS *L; /* Ligatures */
  51. } OLD_AFMMETRICS;
  52. typedef struct {
  53. INT C; /* AFM encoding (or -1) */
  54. LONG UV; /* Unicode value */
  55. FLOAT WX; /* Advance width */
  56. const GLYPHNAME *N; /* Glyph name */
  57. } AFMMETRICS;
  58. typedef struct {
  59. USHORT usUnitsPerEm; /* head:unitsPerEm */
  60. SHORT sAscender; /* hhea:Ascender */
  61. SHORT sDescender; /* hhea:Descender */
  62. SHORT sLineGap; /* hhea:LineGap */
  63. SHORT sAvgCharWidth; /* OS/2:xAvgCharWidth */
  64. SHORT sTypoAscender; /* OS/2:sTypoAscender */
  65. SHORT sTypoDescender; /* OS/2:sTypoDescender */
  66. SHORT sTypoLineGap; /* OS/2:sTypeLineGap */
  67. USHORT usWinAscent; /* OS/2:usWinAscent */
  68. USHORT usWinDescent; /* OS/2:usWinDescent */
  69. } WINMETRICS;
  70. typedef struct _tagAFM {
  71. LPCSTR FontName;
  72. LPCSTR FullName;
  73. LPCSTR FamilyName;
  74. LPCSTR EncodingScheme;
  75. LONG Weight; /* FW_NORMAL etc. */
  76. float ItalicAngle;
  77. BOOL IsFixedPitch;
  78. float UnderlinePosition;
  79. float UnderlineThickness;
  80. AFMBBOX FontBBox;
  81. float Ascender;
  82. float Descender;
  83. WINMETRICS WinMetrics;
  84. int NumofMetrics;
  85. const AFMMETRICS *Metrics;
  86. } AFM;
  87. /* Note no 'next' in AFM. Use AFMLISTENTRY as a container. This allow more than
  88. one list to exist without having to reallocate the entire AFM structure. We
  89. keep a global list of all afms (PSDRV_AFMFontList) plus a list of available
  90. fonts for each DC (dc->physDev->Fonts) */
  91. typedef struct _tagAFMLISTENTRY {
  92. const AFM *afm;
  93. struct _tagAFMLISTENTRY *next;
  94. } AFMLISTENTRY;
  95. typedef struct _tagFONTFAMILY {
  96. char *FamilyName; /* family name */
  97. AFMLISTENTRY *afmlist; /* list of afms for this family */
  98. struct _tagFONTFAMILY *next; /* next family */
  99. } FONTFAMILY;
  100. extern FONTFAMILY *PSDRV_AFMFontList;
  101. extern const AFM *const PSDRV_BuiltinAFMs[]; /* last element is NULL */
  102. typedef struct _tagFONTNAME {
  103. char *Name;
  104. struct _tagFONTNAME *next;
  105. } FONTNAME;
  106. typedef struct {
  107. float llx, lly, urx, ury;
  108. } IMAGEABLEAREA;
  109. typedef struct {
  110. float x, y;
  111. } PAPERDIMENSION;
  112. /* Solaris kludge */
  113. #undef PAGESIZE
  114. typedef struct _tagPAGESIZE {
  115. char *Name;
  116. char *FullName;
  117. char *InvocationString;
  118. IMAGEABLEAREA *ImageableArea;
  119. PAPERDIMENSION *PaperDimension;
  120. WORD WinPage; /*eg DMPAPER_A4. Doesn't really belong here */
  121. struct _tagPAGESIZE *next;
  122. } PAGESIZE;
  123. typedef struct _tagOPTIONENTRY {
  124. char *Name; /* eg "True" */
  125. char *FullName; /* eg "Installed" */
  126. char *InvocationString; /* Often NULL */
  127. struct _tagOPTIONENTRY *next;
  128. } OPTIONENTRY;
  129. typedef struct _tagOPTION { /* Treat bool as a special case of pickone */
  130. char *OptionName; /* eg "*Option1" */
  131. char *FullName; /* eg "Envelope Feeder" */
  132. char *DefaultOption; /* eg "False" */
  133. OPTIONENTRY *Options;
  134. struct _tagOPTION *next;
  135. } OPTION;
  136. typedef struct _tagCONSTRAINT {
  137. char *Feature1;
  138. char *Value1;
  139. char *Feature2;
  140. char *Value2;
  141. struct _tagCONSTRAINT *next;
  142. } CONSTRAINT;
  143. typedef struct _tagINPUTSLOT {
  144. char *Name;
  145. char *FullName;
  146. char *InvocationString;
  147. WORD WinBin; /* eg DMBIN_LOWER */
  148. struct _tagINPUTSLOT *next;
  149. } INPUTSLOT;
  150. typedef enum _RASTERIZEROPTION
  151. {RO_None, RO_Accept68K, RO_Type42, RO_TrueImage} RASTERIZEROPTION;
  152. typedef struct _tagDUPLEX {
  153. char *Name;
  154. char *FullName;
  155. char *InvocationString;
  156. WORD WinDuplex; /* eg DMDUP_SIMPLEX */
  157. struct _tagDUPLEX *next;
  158. } DUPLEX;
  159. typedef struct {
  160. char *NickName;
  161. int LanguageLevel;
  162. BOOL ColorDevice;
  163. int DefaultResolution;
  164. signed int LandscapeOrientation;
  165. char *JCLBegin;
  166. char *JCLToPSInterpreter;
  167. char *JCLEnd;
  168. char *DefaultFont;
  169. FONTNAME *InstalledFonts; /* ptr to a list of FontNames */
  170. PAGESIZE *PageSizes;
  171. PAGESIZE *DefaultPageSize;
  172. OPTION *InstalledOptions;
  173. CONSTRAINT *Constraints;
  174. INPUTSLOT *InputSlots;
  175. RASTERIZEROPTION TTRasterizer;
  176. DUPLEX *Duplexes;
  177. DUPLEX *DefaultDuplex;
  178. } PPD;
  179. typedef struct {
  180. DEVMODEA dmPublic;
  181. struct _tagdocprivate {
  182. int dummy;
  183. } dmDocPrivate;
  184. struct _tagdrvprivate {
  185. UINT numInstalledOptions; /* Options at end of struct */
  186. } dmDrvPrivate;
  187. /* Now comes:
  188. numInstalledOptions of OPTIONs
  189. */
  190. } PSDRV_DEVMODEA;
  191. typedef struct _tagPI {
  192. char *FriendlyName;
  193. PPD *ppd;
  194. PSDRV_DEVMODEA *Devmode;
  195. FONTFAMILY *Fonts;
  196. PPRINTER_ENUM_VALUESA FontSubTable;
  197. DWORD FontSubTableSize;
  198. struct _tagPI *next;
  199. } PRINTERINFO;
  200. typedef struct {
  201. float r, g, b;
  202. } PSRGB;
  203. typedef struct {
  204. float i;
  205. } PSGRAY;
  206. /* def's for PSCOLOR.type */
  207. #define PSCOLOR_GRAY 0
  208. #define PSCOLOR_RGB 1
  209. typedef struct {
  210. int type;
  211. union {
  212. PSRGB rgb;
  213. PSGRAY gray;
  214. } value;
  215. } PSCOLOR;
  216. typedef struct {
  217. const AFM *afm;
  218. float scale;
  219. TEXTMETRICW tm;
  220. } BUILTIN;
  221. typedef struct tagTYPE42 TYPE42;
  222. typedef struct tagTYPE1 TYPE1;
  223. enum downloadtype {
  224. Type1, Type42
  225. };
  226. typedef struct _tagDOWNLOAD {
  227. enum downloadtype type;
  228. union {
  229. TYPE1 *Type1;
  230. TYPE42 *Type42;
  231. } typeinfo;
  232. char *ps_name;
  233. struct _tagDOWNLOAD *next;
  234. } DOWNLOAD;
  235. enum fontloc {
  236. Builtin, Download
  237. };
  238. typedef struct {
  239. enum fontloc fontloc;
  240. union {
  241. BUILTIN Builtin;
  242. DOWNLOAD *Download;
  243. } fontinfo;
  244. int size;
  245. PSCOLOR color;
  246. BOOL set; /* Have we done a setfont yet */
  247. /* These are needed by PSDRV_ExtTextOut */
  248. int escapement;
  249. int underlineThickness;
  250. int underlinePosition;
  251. int strikeoutThickness;
  252. int strikeoutPosition;
  253. } PSFONT;
  254. typedef struct {
  255. PSCOLOR color;
  256. BOOL set;
  257. } PSBRUSH;
  258. typedef struct {
  259. INT style;
  260. INT width;
  261. const char* dash;
  262. PSCOLOR color;
  263. BOOL set;
  264. } PSPEN;
  265. typedef struct {
  266. HANDLE16 hJob;
  267. LPSTR output; /* Output file/port */
  268. LPSTR DocName; /* Document Name */
  269. BOOL banding; /* Have we received a NEXTBAND */
  270. BOOL OutOfPage; /* Page header not sent yet */
  271. INT PageNo;
  272. BOOL quiet; /* Don't actually output anything */
  273. BOOL in_passthrough; /* In PASSTHROUGH mode */
  274. BOOL had_passthrough_rect; /* See the comment in PSDRV_Rectangle */
  275. } JOB;
  276. typedef struct {
  277. HDC hdc;
  278. PSFONT font; /* Current PS font */
  279. DOWNLOAD *downloaded_fonts;
  280. PSPEN pen;
  281. PSBRUSH brush;
  282. PSCOLOR bkColor;
  283. PSCOLOR inkColor; /* Last colour set */
  284. JOB job;
  285. PSDRV_DEVMODEA *Devmode;
  286. PRINTERINFO *pi;
  287. SIZE PageSize; /* Physical page size in device units */
  288. RECT ImageableArea; /* Imageable area in device units */
  289. /* NB both PageSize and ImageableArea
  290. are not rotated in landscape mode,
  291. so PageSize.cx is generally
  292. < PageSize.cy */
  293. int horzRes; /* device caps */
  294. int vertRes;
  295. int horzSize;
  296. int vertSize;
  297. int logPixelsX;
  298. int logPixelsY;
  299. int pathdepth;
  300. } PSDRV_PDEVICE;
  301. typedef struct {
  302. PRINTERINFO *pi;
  303. PSDRV_DEVMODEA *dlgdm;
  304. } PSDRV_DLGINFO;
  305. /*
  306. * Every glyph name in the Adobe Glyph List and the 35 core PostScript fonts
  307. */
  308. extern const INT PSDRV_AGLGlyphNamesSize;
  309. extern GLYPHNAME PSDRV_AGLGlyphNames[];
  310. /*
  311. * The AGL encoding vector
  312. */
  313. extern const INT PSDRV_AGLbyNameSize; /* sorted by name - */
  314. extern const UNICODEGLYPH PSDRV_AGLbyName[]; /* duplicates omitted */
  315. extern const INT PSDRV_AGLbyUVSize; /* sorted by UV - */
  316. extern const UNICODEGLYPH PSDRV_AGLbyUV[]; /* duplicates included */
  317. extern INT16 WINAPI PSDRV_ExtDeviceMode16(HWND16 hwnd, HANDLE16 hDriver,
  318. LPDEVMODEA lpdmOutput, LPSTR lpszDevice, LPSTR lpszPort,
  319. LPDEVMODEA lpdmInput, LPSTR lpszProfile, WORD fwMode);
  320. extern HANDLE PSDRV_Heap;
  321. extern char *PSDRV_ANSIVector[256];
  322. extern void PSDRV_MergeDevmodes(PSDRV_DEVMODEA *dm1, PSDRV_DEVMODEA *dm2,
  323. PRINTERINFO *pi);
  324. extern BOOL PSDRV_GetFontMetrics(void);
  325. extern PPD *PSDRV_ParsePPD(char *fname);
  326. extern PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name);
  327. extern const AFM *PSDRV_FindAFMinList(FONTFAMILY *head, LPCSTR name);
  328. extern BOOL PSDRV_AddAFMtoList(FONTFAMILY **head, const AFM *afm,
  329. BOOL *p_added);
  330. extern void PSDRV_FreeAFMList( FONTFAMILY *head );
  331. extern BOOL WINAPI PSDRV_Init(HINSTANCE hinst, DWORD reason, LPVOID reserved);
  332. extern INT PSDRV_XWStoDS( PSDRV_PDEVICE *physDev, INT width );
  333. extern INT PSDRV_YWStoDS( PSDRV_PDEVICE *physDev, INT height );
  334. extern BOOL PSDRV_Brush(PSDRV_PDEVICE *physDev, BOOL EO);
  335. extern BOOL PSDRV_SetFont( PSDRV_PDEVICE *physDev );
  336. extern BOOL PSDRV_SetPen( PSDRV_PDEVICE *physDev );
  337. extern void PSDRV_SetClip(PSDRV_PDEVICE* phyDev);
  338. extern void PSDRV_ResetClip(PSDRV_PDEVICE* phyDev);
  339. extern BOOL PSDRV_CmpColor(PSCOLOR *col1, PSCOLOR *col2);
  340. extern BOOL PSDRV_CopyColor(PSCOLOR *col1, PSCOLOR *col2);
  341. extern void PSDRV_CreateColor( PSDRV_PDEVICE *physDev, PSCOLOR *pscolor,
  342. COLORREF wincolor );
  343. extern char PSDRV_UnicodeToANSI(int u);
  344. extern INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title );
  345. extern INT PSDRV_WriteFooter( PSDRV_PDEVICE *physDev );
  346. extern INT PSDRV_WriteNewPage( PSDRV_PDEVICE *physDev );
  347. extern INT PSDRV_WriteEndPage( PSDRV_PDEVICE *physDev );
  348. extern BOOL PSDRV_WriteMoveTo(PSDRV_PDEVICE *physDev, INT x, INT y);
  349. extern BOOL PSDRV_WriteLineTo(PSDRV_PDEVICE *physDev, INT x, INT y);
  350. extern BOOL PSDRV_WriteStroke(PSDRV_PDEVICE *physDev);
  351. extern BOOL PSDRV_WriteRectangle(PSDRV_PDEVICE *physDev, INT x, INT y, INT width,
  352. INT height);
  353. extern BOOL PSDRV_WriteRRectangle(PSDRV_PDEVICE *physDev, INT x, INT y, INT width,
  354. INT height);
  355. extern BOOL PSDRV_WriteSetFont(PSDRV_PDEVICE *physDev, const char *name, INT size,
  356. INT escapement);
  357. extern BOOL PSDRV_WriteGlyphShow(PSDRV_PDEVICE *physDev, LPCSTR g_name);
  358. extern BOOL PSDRV_WriteSetPen(PSDRV_PDEVICE *physDev);
  359. extern BOOL PSDRV_WriteArc(PSDRV_PDEVICE *physDev, INT x, INT y, INT w, INT h,
  360. double ang1, double ang2);
  361. extern BOOL PSDRV_WriteSetColor(PSDRV_PDEVICE *physDev, PSCOLOR *color);
  362. extern BOOL PSDRV_WriteSetBrush(PSDRV_PDEVICE *physDev);
  363. extern BOOL PSDRV_WriteFill(PSDRV_PDEVICE *physDev);
  364. extern BOOL PSDRV_WriteEOFill(PSDRV_PDEVICE *physDev);
  365. extern BOOL PSDRV_WriteGSave(PSDRV_PDEVICE *physDev);
  366. extern BOOL PSDRV_WriteGRestore(PSDRV_PDEVICE *physDev);
  367. extern BOOL PSDRV_WriteNewPath(PSDRV_PDEVICE *physDev);
  368. extern BOOL PSDRV_WriteClosePath(PSDRV_PDEVICE *physDev);
  369. extern BOOL PSDRV_WriteInitClip(PSDRV_PDEVICE *physDev);
  370. extern BOOL PSDRV_WriteClip(PSDRV_PDEVICE *physDev);
  371. extern BOOL PSDRV_WriteRectClip(PSDRV_PDEVICE *physDev, INT x, INT y, INT w, INT h);
  372. extern BOOL PSDRV_WriteRectClip2(PSDRV_PDEVICE *physDev, CHAR *pszArrayName);
  373. extern BOOL PSDRV_WriteEOClip(PSDRV_PDEVICE *physDev);
  374. extern BOOL PSDRV_WriteHatch(PSDRV_PDEVICE *physDev);
  375. extern BOOL PSDRV_WriteRotate(PSDRV_PDEVICE *physDev, float ang);
  376. extern BOOL PSDRV_WriteIndexColorSpaceBegin(PSDRV_PDEVICE *physDev, int size);
  377. extern BOOL PSDRV_WriteIndexColorSpaceEnd(PSDRV_PDEVICE *physDev);
  378. extern BOOL PSDRV_WriteRGB(PSDRV_PDEVICE *physDev, COLORREF *map, int number);
  379. extern BOOL PSDRV_WriteImage(PSDRV_PDEVICE *physDev, WORD depth, INT xDst, INT yDst,
  380. INT widthDst, INT heightDst, INT widthSrc,
  381. INT heightSrc, BOOL mask);
  382. extern BOOL PSDRV_WriteBytes(PSDRV_PDEVICE *physDev, const BYTE *bytes, DWORD number);
  383. extern BOOL PSDRV_WriteData(PSDRV_PDEVICE *physDev, const BYTE *byte, DWORD number);
  384. extern DWORD PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPCSTR lpData, DWORD cch);
  385. extern BOOL PSDRV_WritePatternDict(PSDRV_PDEVICE *physDev, BITMAP *bm, BYTE *bits);
  386. extern BOOL PSDRV_WriteDIBPatternDict(PSDRV_PDEVICE *physDev, BITMAPINFO *bmi, UINT usage);
  387. extern BOOL PSDRV_WriteArrayPut(PSDRV_PDEVICE *physDev, CHAR *pszArrayName, INT nIndex, LONG lCoord);
  388. extern BOOL PSDRV_WriteArrayDef(PSDRV_PDEVICE *physDev, CHAR *pszArrayName, INT nSize);
  389. extern BOOL PSDRV_Arc( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
  390. INT bottom, INT xstart, INT ystart,
  391. INT xend, INT yend );
  392. extern BOOL PSDRV_Chord( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
  393. INT bottom, INT xstart, INT ystart,
  394. INT xend, INT yend );
  395. extern BOOL PSDRV_Ellipse( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
  396. INT bottom );
  397. extern INT PSDRV_EndDoc( PSDRV_PDEVICE *physDev );
  398. extern INT PSDRV_EndPage( PSDRV_PDEVICE *physDev );
  399. extern BOOL PSDRV_ExtTextOut( PSDRV_PDEVICE *physDev, INT x, INT y, UINT flags,
  400. const RECT *lprect, LPCWSTR str, UINT count,
  401. const INT *lpDx, INT breakExtra );
  402. extern BOOL PSDRV_GetCharWidth( PSDRV_PDEVICE *physDev, UINT firstChar, UINT lastChar,
  403. LPINT buffer );
  404. extern BOOL PSDRV_GetTextExtentPoint( PSDRV_PDEVICE *physDev, LPCWSTR str, INT count,
  405. LPSIZE size );
  406. extern BOOL PSDRV_GetTextMetrics( PSDRV_PDEVICE *physDev, TEXTMETRICW *metrics );
  407. extern BOOL PSDRV_LineTo( PSDRV_PDEVICE *physDev, INT x, INT y );
  408. extern BOOL PSDRV_PatBlt( PSDRV_PDEVICE *physDev, INT x, INT y, INT width, INT height, DWORD
  409. dwRop);
  410. extern BOOL PSDRV_Pie( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
  411. INT bottom, INT xstart, INT ystart,
  412. INT xend, INT yend );
  413. extern BOOL PSDRV_Polygon( PSDRV_PDEVICE *physDev, const POINT* pt, INT count );
  414. extern BOOL PSDRV_Polyline( PSDRV_PDEVICE *physDev, const POINT* pt, INT count );
  415. extern BOOL PSDRV_PolyPolygon( PSDRV_PDEVICE *physDev, const POINT* pts, const INT* counts,
  416. UINT polygons );
  417. extern BOOL PSDRV_PolyPolyline( PSDRV_PDEVICE *physDev, const POINT* pts, const DWORD* counts,
  418. DWORD polylines );
  419. extern BOOL PSDRV_Rectangle( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
  420. INT bottom );
  421. extern BOOL PSDRV_RoundRect(PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
  422. INT bottom, INT ell_width, INT ell_height);
  423. extern COLORREF PSDRV_SetBkColor( PSDRV_PDEVICE *physDev, COLORREF color );
  424. extern COLORREF PSDRV_SetPixel( PSDRV_PDEVICE *physDev, INT x, INT y, COLORREF color );
  425. extern COLORREF PSDRV_SetTextColor( PSDRV_PDEVICE *physDev, COLORREF color );
  426. extern INT PSDRV_StartDoc( PSDRV_PDEVICE *physDev, const DOCINFOA *doc );
  427. extern INT PSDRV_StartPage( PSDRV_PDEVICE *physDev );
  428. extern INT PSDRV_StretchDIBits( PSDRV_PDEVICE *physDev, INT xDst, INT yDst,
  429. INT widthDst, INT heightDst, INT xSrc,
  430. INT ySrc, INT widthSrc, INT heightSrc,
  431. const void *bits, const BITMAPINFO *info,
  432. UINT wUsage, DWORD dwRop );
  433. extern INT PSDRV_ExtDeviceMode(LPSTR lpszDriver, HWND hwnd,
  434. LPDEVMODEA lpdmOutput,
  435. LPSTR lpszDevice, LPSTR lpszPort,
  436. LPDEVMODEA lpdmInput, LPSTR lpszProfile,
  437. DWORD dwMode);
  438. extern DWORD PSDRV_DeviceCapabilities(LPSTR lpszDriver, LPCSTR lpszDevice,
  439. LPCSTR lpszPort,
  440. WORD fwCapability, LPSTR lpszOutput,
  441. LPDEVMODEA lpdm);
  442. INT PSDRV_GlyphListInit(void);
  443. const GLYPHNAME *PSDRV_GlyphName(LPCSTR szName);
  444. VOID PSDRV_IndexGlyphList(void);
  445. BOOL PSDRV_GetTrueTypeMetrics(void);
  446. BOOL PSDRV_GetType1Metrics(void);
  447. const AFMMETRICS *PSDRV_UVMetrics(LONG UV, const AFM *afm);
  448. SHORT PSDRV_CalcAvgCharWidth(const AFM *afm);
  449. extern BOOL PSDRV_SelectBuiltinFont(PSDRV_PDEVICE *physDev, HFONT hfont,
  450. LOGFONTW *plf, LPSTR FaceName);
  451. extern BOOL PSDRV_WriteSetBuiltinFont(PSDRV_PDEVICE *physDev);
  452. extern BOOL PSDRV_WriteBuiltinGlyphShow(PSDRV_PDEVICE *physDev, LPCWSTR str, INT count);
  453. extern BOOL PSDRV_SelectDownloadFont(PSDRV_PDEVICE *physDev);
  454. extern BOOL PSDRV_WriteSetDownloadFont(PSDRV_PDEVICE *physDev);
  455. extern BOOL PSDRV_WriteDownloadGlyphShow(PSDRV_PDEVICE *physDev, WORD *glpyhs,
  456. UINT count);
  457. extern BOOL PSDRV_EmptyDownloadList(PSDRV_PDEVICE *physDev, BOOL write_undef);
  458. #define MAX_G_NAME 31 /* max length of PS glyph name */
  459. extern void get_glyph_name(HDC hdc, WORD index, char *name);
  460. extern TYPE1 *T1_download_header(PSDRV_PDEVICE *physDev, char *ps_name,
  461. RECT *bbox, UINT emsize);
  462. extern BOOL T1_download_glyph(PSDRV_PDEVICE *physDev, DOWNLOAD *pdl,
  463. DWORD index, char *glyph_name);
  464. extern void T1_free(TYPE1 *t1);
  465. extern TYPE42 *T42_download_header(PSDRV_PDEVICE *physDev, char *ps_name,
  466. RECT *bbox, UINT emsize);
  467. extern BOOL T42_download_glyph(PSDRV_PDEVICE *physDev, DOWNLOAD *pdl,
  468. DWORD index, char *glyph_name);
  469. extern void T42_free(TYPE42 *t42);
  470. extern DWORD RLE_encode(BYTE *in_buf, DWORD len, BYTE *out_buf);
  471. extern DWORD ASCII85_encode(BYTE *in_buf, DWORD len, BYTE *out_buf);
  472. #define push_lc_numeric(x) do { \
  473. const char *tmplocale = setlocale(LC_NUMERIC,NULL); \
  474. setlocale(LC_NUMERIC,x);
  475. #define pop_lc_numeric() \
  476. setlocale(LC_NUMERIC,tmplocale); \
  477. } while (0)
  478. #endif