Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

905 lines
34 KiB

  1. /* @(#)CM_VerSion xcf_priv.h atm09 1.3 16499.eco sum= 64834 atm09.002 */
  2. /* @(#)CM_VerSion xcf_priv.h atm08 1.5 16343.eco sum= 50459 atm08.005 */
  3. /***********************************************************************/
  4. /* */
  5. /* Copyright 1995-1996 Adobe Systems Incorporated. */
  6. /* All rights reserved. */
  7. /* */
  8. /* Patents Pending */
  9. /* */
  10. /* NOTICE: All information contained herein is the property of Adobe */
  11. /* Systems Incorporated. Many of the intellectual and technical */
  12. /* concepts contained herein are proprietary to Adobe, are protected */
  13. /* as trade secrets, and are made available only to Adobe licensees */
  14. /* for their internal use. Any reproduction or dissemination of this */
  15. /* software is strictly forbidden unless prior written permission is */
  16. /* obtained from Adobe. */
  17. /* */
  18. /* PostScript and Display PostScript are trademarks of Adobe Systems */
  19. /* Incorporated or its subsidiaries and may be registered in certain */
  20. /* jurisdictions. */
  21. /* */
  22. /***********************************************************************/
  23. #ifndef XCF_PRIV_H
  24. #define XCF_PRIV_H
  25. #include "algndjmp.h"
  26. #include "xcf_base.h"
  27. #include "xcf_pub.h"
  28. #include "xcf_da.h"
  29. #include "xcf_dtop.h"
  30. #include "xcf_txop.h"
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34. #define XCF_Version "1.0m"
  35. /* Font Basic Types */
  36. #ifndef ARCH_64BIT
  37. typedef long int Fixed; /* 16 bits of integer, 16 bits of fraction */
  38. #ifndef FP_H
  39. typedef long int Frac; /* 2 bits of integer, 30 bits of fraction */
  40. #endif
  41. #else
  42. typedef int Fixed; /* 16 bits of integer, 16 bits of fraction */
  43. typedef int Frac; /* 2 bits of integer, 30 bits of fraction */
  44. #endif
  45. #ifndef CFF_READ_H /* the following are already defined in cff_read.h */
  46. typedef Card16 StringID;
  47. typedef Card32 Offset;
  48. #endif
  49. typedef struct {
  50. Frac mantissa; /* signed mantissa */
  51. long exp; /* number of bits to shift to turn the mantissa
  52. * into a 16.16 fixed point number:
  53. * pos => lshift, neg => rshift
  54. */
  55. } Fxl;
  56. #define FxlIsZero(fxl) ((fxl).mantissa == 0)
  57. #define EOL_SPACING 62
  58. #if UNIX_ENV
  59. #define XCF_NEW_LINE "\n"
  60. #else
  61. #if defined(MAC_ENV)
  62. #if HAS_COOLTYPE_UFL == 1
  63. /* Note: Technically this should be \r on the Mac. But we turn on MW's
  64. * "Map newlines to CR" option for historic compatibility with MPW's
  65. * compiler that reversed the meaning of \r and \n. Thus, we have to
  66. * specify \n here instead, due to this compiler dependency.
  67. */
  68. #define XCF_NEW_LINE "\n"
  69. #else
  70. #define XCF_NEW_LINE "\r"
  71. #endif
  72. #else
  73. #define XCF_NEW_LINE "\r\n"
  74. #endif
  75. #endif
  76. #define NOTDEF_STR ".notdef"
  77. #define NOTDEF_GID 0
  78. #define NOTDEF_SID 0
  79. #define mostSigBit 0x40000000
  80. #define MAXEXP 4 /* must be >=0 */
  81. #define MINEXP -8 /* must be <=0 */
  82. #define expFixed 14 /* difference in exponent from Fixed to Frac */
  83. #define expInteger 30 /* difference in exponent from integer to Frac */
  84. #define FIXEDHALF (Fixed)0x00008000L
  85. #define FIXEDONE (Fixed)0x00010000L
  86. #ifndef FixedPosInf
  87. #define FixedPosInf ((Fixed)0x7FFFFFFF)
  88. #endif
  89. #ifndef FixedNegInf
  90. #define FixedNegInf ((Fixed)0x80000000)
  91. #endif
  92. #define fixedScale 65536.0 /* i=16, f=16, range [-32768, 32768) */
  93. #define fracScale 1073741824.0 /* i=2, f=30 , range [-2, 2) */
  94. #define ROUND_FIXED_TO_INT(x) ((Int16)(x < 0 ? ((x)-(FIXEDHALF))>>16 : ((x)+(FIXEDHALF))>>16))
  95. #define INT_TO_FIXED(number) (((Fixed)(number))<<16)
  96. #define FIXED_TO_INT(number) ((Int16)((number)>>16))
  97. #define REAL_TO_FIXED(number) ((Fixed)(number < 0 ? (number) * fixedScale - 0.5 : (number) * fixedScale + 0.5))
  98. #define FIXED_TO_REAL(number) ((double)(number)/fixedScale)
  99. #define REAL_TO_FRAC(number) ((Frac)number < 0 ? number * fracScale - 0.5 : number * fracScale + 0.5)
  100. #define FRAC_TO_REAL(number) ((double)number/fracScale)
  101. #define ARRAY_LEN(t) (sizeof(t)/sizeof((t)[0]))
  102. #define MAX_OUT_BUFFER 4096 /* Returned data accumulate in a buffer of this size before being returned by putBytes. */
  103. #define MAX_ENCODE_LENGTH 500 /* Largest block of data encrypted with a single call to BufferEncrypt */
  104. #define MAX_EXPANSION_FACTOR 3 /* Must exceed actual data expansion for hex encoding */
  105. #define LEN_IV_INITIAL_KEY 4330
  106. #define EEXEC_INITIAL_KEY 55665
  107. #define COMPACT_FONT_TYPE 2
  108. #define INITIAL_CHARS_ON_HEX_LINE 18
  109. #define MAX_COUNTER_GROUPS 32
  110. #define MAX_COUNTER_BUFFER 25 /* must be greater than 22 */
  111. /* Multiple Master Limits */
  112. #define MAX_MM_AXES 4
  113. #define MAX_MM_DESIGNS 16
  114. #define MAX_BLEND1_VALUES MAX_MM_DESIGNS
  115. /* Stack Limits */
  116. #define MAX_RASTERIZER_STACK_SIZE 48
  117. #define MAX_STACK_SIZE MAX_RASTERIZER_STACK_SIZE * 2
  118. /* BCD Number Size Limit */
  119. #ifndef XCF_MAX_BCD_NIBBLES /* Changed from MAX_BCD_BYTES to avoid name space
  120. * conflict. */
  121. #define XCF_MAX_BCD_NIBBLES 16
  122. #endif
  123. /* Dictionary Limits */
  124. #define MAX_STD_HW_ENTRIES MAX_MM_DESIGNS
  125. #define MAX_STD_VW_ENTRIES MAX_MM_DESIGNS
  126. #define MAX_BLUE_SCALE_ENTRIES MAX_MM_DESIGNS
  127. #define MAX_BLUE_SHIFT_ENTRIES MAX_MM_DESIGNS
  128. #define MAX_BLUE_FUZZ_ENTRIES MAX_MM_DESIGNS
  129. #define MAX_FORCE_BOLD_ENTRIES MAX_MM_DESIGNS
  130. #define MAX_FONTBBOX_ENTRIES 4 * MAX_MM_DESIGNS
  131. #define MAX_BLUE_VALUE_ENTRIES 14 * MAX_MM_DESIGNS
  132. #define MAX_OTHER_BLUES_ENTRIES 10 * MAX_MM_DESIGNS
  133. #define MAX_FAMILY_BLUES_ENTRIES 14 * MAX_MM_DESIGNS
  134. #define MAX_FAMILY_OTHER_BLUES_ENTRIES 10 * MAX_MM_DESIGNS
  135. #define MAX_STEM_SNAP_H_ENTRIES 12 * MAX_MM_DESIGNS
  136. #define MAX_STEM_SNAP_V_ENTRIES 12 * MAX_MM_DESIGNS
  137. #define MAX_BLEND_DESIGN_MAP_ENTRIES 12 * MAX_MM_AXES
  138. #define MAX_DICT_ARGS 14 * MAX_MM_DESIGNS
  139. #define FONT_MATRIX_ENTRIES 6
  140. #define FONT_MATRIX_ENTRY_SIZE XCF_MAX_BCD_NIBBLES * 2 + 1 /* add one for null
  141. character */
  142. #define PRIVATE_DICT_ENTRIES 2
  143. #define MAX_BASE_FONT_BLEND_ENTRIES 16
  144. #define CIDFONT_VERSION_SIZE 15
  145. #define MAX_XUID_ENTRIES 16
  146. #define MAX_CURRENT_OPERATION_STR_LENGTH 100
  147. /* TrueType */
  148. #define INITIAL_GLYPH_INFO_SIZE 256
  149. #define INCR_GLYPH_INFO_SIZE 100
  150. #define INITIAL_POINTS_IN_GLYPH_SIZE 200
  151. #define INCR_POINTS_IN_GLYPH_SIZE 100
  152. typedef Card8 FDIndex;
  153. typedef struct
  154. {
  155. CardX count;
  156. CardX offsetSize;
  157. Offset offsetArrayOffset;
  158. Offset dataOffset;
  159. } IndexDesc;
  160. typedef struct
  161. {
  162. IntX numberOfMasters; /* weightVectorCount */
  163. Fixed weightVector[MAX_MM_DESIGNS];
  164. StringID cdv;
  165. StringID ndv;
  166. IntX normDesignVectorCount;
  167. Fixed normDesignVector[MAX_MM_AXES];
  168. IntX userDesignVectorCount;
  169. Fixed userDesignVector[MAX_MM_AXES + 4]; /* Include room for other
  170. arguments to mm operator. */
  171. IntX blendAxisTypesCount;
  172. Card32 blendAxisTypes[MAX_MM_AXES];
  173. IntX charsetCount;
  174. Card32 charset;
  175. IntX privateDictCount;
  176. Card32 privateDict[PRIVATE_DICT_ENTRIES];
  177. IntX subrsCount;
  178. Card32 subrs;
  179. IntX charStringsCount;
  180. Card32 charStrings;
  181. IntX uniqueIDCount;
  182. Card32 uniqueID;
  183. IntX versionCount;
  184. Card32 version;
  185. IntX fullNameCount;
  186. Card32 fullName;
  187. IntX familyNameCount;
  188. Card32 familyName;
  189. IntX baseFontNameCount;
  190. Card32 baseFontName;
  191. IntX baseFontBlendCount;
  192. Fixed baseFontBlend[MAX_BASE_FONT_BLEND_ENTRIES];
  193. IntX weightCount;
  194. Card32 weight;
  195. IntX embeddedPostscriptCount;
  196. StringID embeddedPostscript;
  197. IntX encodingCount;
  198. Card32 encoding;
  199. IntX defaultWidthXCount;
  200. Fixed defaultWidthX;
  201. IntX nominalWidthXCount;
  202. Fixed nominalWidthX;
  203. IntX noticeCount;
  204. Card32 notice;
  205. IntX fontMatrixCount;
  206. char fontMatrix[FONT_MATRIX_ENTRIES][FONT_MATRIX_ENTRY_SIZE];
  207. IntX strokeWidthCount;
  208. Fixed strokeWidth[MAX_MM_DESIGNS];
  209. IntX expansionFactorCount;
  210. Frac expansionFactor;
  211. IntX initialRandomSeedCount;
  212. Fixed initialRandomSeed;
  213. IntX lenIVCount;
  214. Int32 lenIV;
  215. IntX paintTypeCount;
  216. Fixed paintType;
  217. IntX languageGroupCount;
  218. CardX languageGroup;
  219. IntX xUIDCount;
  220. Card32 xUID[MAX_XUID_ENTRIES];
  221. IntX lenBuildCharArrayCount;
  222. Fixed lenBuildCharArray;
  223. IntX italicAngleCount;
  224. Fixed italicAngle[MAX_MM_DESIGNS];
  225. IntX isFixedPitchCount;
  226. Fixed isFixedPitch[MAX_MM_DESIGNS];
  227. IntX underlinePositionCount;
  228. Fixed underlinePosition[MAX_MM_DESIGNS];
  229. IntX underlineThicknessCount;
  230. Fixed underlineThickness[MAX_MM_DESIGNS];
  231. IntX copyrightCount;
  232. Card32 copyright;
  233. IntX fontTypeCount;
  234. Int32 fontType;
  235. IntX syntheticBaseCount;
  236. Fixed syntheticBase;
  237. /* Multiple Master Entries */
  238. IntX fontBBoxCount;
  239. Fixed fontBBox[MAX_FONTBBOX_ENTRIES];
  240. IntX stdHWCount;
  241. Fixed stdHW[MAX_STD_HW_ENTRIES];
  242. IntX stdVWCount;
  243. Fixed stdVW[MAX_STD_VW_ENTRIES];
  244. IntX blueValuesCount;
  245. Fixed blueValues[MAX_BLUE_VALUE_ENTRIES];
  246. IntX otherBluesCount;
  247. Fixed otherBlues[MAX_OTHER_BLUES_ENTRIES];
  248. IntX familyBluesCount;
  249. Fixed familyBlues[MAX_FAMILY_BLUES_ENTRIES];
  250. IntX familyOtherBluesCount;
  251. Fixed familyOtherBlues[MAX_FAMILY_OTHER_BLUES_ENTRIES];
  252. IntX stemSnapHCount;
  253. Fixed stemSnapH[MAX_STEM_SNAP_H_ENTRIES];
  254. IntX stemSnapVCount;
  255. Fixed stemSnapV[MAX_STEM_SNAP_V_ENTRIES];
  256. IntX blueScaleCount;
  257. Frac blueScale[MAX_BLUE_SCALE_ENTRIES];
  258. IntX blueShiftCount;
  259. Fixed blueShift[MAX_BLUE_SHIFT_ENTRIES];
  260. IntX blueFuzzCount;
  261. Fixed blueFuzz[MAX_BLUE_FUZZ_ENTRIES];
  262. IntX forceBoldCount;
  263. Fixed forceBold[MAX_FORCE_BOLD_ENTRIES];
  264. IntX forceBoldThresholdCount;
  265. Fixed forceBoldThreshold;
  266. IndexDesc localSubrs;
  267. Card16 localSubrBias;
  268. /* Buffer to hold blend arguments in T2/endchar segments in MM dictionaries */
  269. IntX mmDictArgCount;
  270. Fixed mmDictArg[MAX_DICT_ARGS];
  271. /* CID entries */
  272. IntX fdFontNameCount;
  273. Card32 fdFontName;
  274. IntX cidFontVersionCount;
  275. char cidFontVersion[CIDFONT_VERSION_SIZE];
  276. IntX cidFontTypeCount;
  277. Int32 cidFontType;
  278. IntX ROSCount;
  279. Card32 ROS[3];
  280. IntX uidBaseCount;
  281. Card32 uidBase;
  282. IntX cidFDArrayCount;
  283. Int32 cidFDArray; /* offset to FontDict index */
  284. IntX cidFDIndexCount;
  285. Int32 cidFDIndex;
  286. IntX cidCountCount;
  287. Int32 cidCount;
  288. } DictEntriesStruct;
  289. #define CIDFONT (h->type1.cid.flags & CID_FLAG) /* xxx do we want a better flag for this? */
  290. typedef struct
  291. {
  292. Offset offset;
  293. Card32 size;
  294. } BlockDesc;
  295. typedef struct
  296. {
  297. Int16 code;
  298. StringID glyph;
  299. } EncodingMap;
  300. typedef struct
  301. {
  302. CardX fontIndex;
  303. CardX majorVersion;
  304. CardX minorVersion;
  305. CardX offsetSize;
  306. CardX headerSize;
  307. IndexDesc fontNames;
  308. IndexDesc fontDicts;
  309. IndexDesc strings;
  310. IndexDesc charStrings;
  311. IndexDesc globalSubrs;
  312. Card16 globalSubrBias;
  313. BlockDesc fontPrivDictInfo;
  314. Card16 stringIDBias;
  315. } FontSetValuesStruct;
  316. typedef struct
  317. {
  318. boolean eexecOn;
  319. Card8 eexecInitialBytes[4];
  320. Card8 lenIVInitialBytes[4];
  321. Card16 eexecKey;
  322. IntX charsOnLine; /* character count used for formating hex characters */
  323. Card8 outBuffer[MAX_OUT_BUFFER];
  324. Card16 outBufferCount;
  325. Card8 eexecEncodeBuffer[MAX_ENCODE_LENGTH*MAX_EXPANSION_FACTOR];
  326. Card8 charStringEncodeBuffer[MAX_ENCODE_LENGTH];
  327. } OutBufferStruct;
  328. typedef struct
  329. {
  330. Card8 PTR_PREFIX *start;
  331. Card8 PTR_PREFIX *end;
  332. Card8 PTR_PREFIX *pos;
  333. Offset blockOffset;
  334. Card32 blockLength;
  335. } InBufferStruct;
  336. typedef struct
  337. {
  338. Card16 fdCount; /* number of FD's in CIDFont */
  339. Card32 replaceSD1; /* number to replace in DSC comment */
  340. Card32 replaceSD2; /* in PS parameter */
  341. Card32 charMapStart; /* placemarkers in CID binary output */
  342. Card32 subrMapStart;
  343. Card32 subrDataStart;
  344. Card32 charDataStart;
  345. Card32 charDataEnd;
  346. Card32 charDataCount;
  347. FDIndex *pFDIndex;
  348. Card16 flags;
  349. Card32 cidCount; /* number of glyphs in this collection, NOT in this font */
  350. #define CID_FLAG 1
  351. #define WRITE_SUBR_FLAG 2
  352. #define MAX_FD 256
  353. /* These vary by FD and need to be supplied to the cff->t1 conversion code. */
  354. Card8 languageGroup[MAX_FD];
  355. Fixed nominalWidthX[MAX_FD];
  356. Fixed defaultWidthX[MAX_FD];
  357. IndexDesc localSubrs[MAX_FD];
  358. Card16 localSubrBias[MAX_FD];
  359. } CIDData;
  360. typedef struct
  361. {
  362. da_DCL(Card8, charStrs);
  363. da_DCL(Offset, charStrOffsets);
  364. da_DCL(Card8, subrs);
  365. da_DCL(Offset, subrOffsets);
  366. da_DCL(StringID, charset); /* Using if custom charset (Not ISOAdobe, Expert or ExpertSubset) */
  367. StringID encoding[256]; /* Using if custom encoding (Not ISOAdobe or Expert) */
  368. Card16 charsetSize;
  369. StringID *pCharset; /* points to standard internal charset array or dynamic array declared above */
  370. StringID *pEncoding; /* points to standard internal encoding array or encoding array declared above */
  371. CIDData cid;
  372. } Type1Struct;
  373. #ifndef MAX_OPERAND_STACK
  374. #define MAX_OPERAND_STACK 96
  375. #endif
  376. #ifndef MAX_HINTS
  377. #define MAX_HINTS 128
  378. #endif
  379. enum XC_PenState { PenNull, PenUp, PenDown };
  380. enum XC_HintState { NotInHints, InitialHints, SubrHints };
  381. enum PenStateTransition { NoPenEffect, ToPenUp, ToPenDown };
  382. enum HintStateTransition { NoHintEffect, ToNotInHints, ToInitialHints, ToSubrHints };
  383. enum InitialMoveStateTransition { NoMoveEffect, MoveFound, DrawFound };
  384. typedef struct {
  385. boolean blend;
  386. Fixed value[MAX_MM_DESIGNS];
  387. } StackValue, PTR_PREFIX *PStackValue;
  388. typedef struct {
  389. boolean blend;
  390. Fixed value;
  391. } ShortStackValue, PTR_PREFIX *PShortStackValue;
  392. typedef struct {
  393. PStackValue edge;
  394. PStackValue delta;
  395. Card16 opCode;
  396. Card32 counterGroups; /* One bit is set for each counter group to which the stem belongs. */
  397. } HintValue;
  398. /* Index of the temp StackValue */
  399. #define SV0 0
  400. #define SV50 1
  401. #define SVTEMP 2
  402. #define MAX_SVTEMP SVTEMP+1
  403. #define PSTACKVALUE(h, i) (h->cstr.psvTemp[i])
  404. /* Change this definition if you add more StackValue fields into the
  405. CharStrStruct */
  406. /* x, y + stack + counterBuffer + ((HintValue.edge + HintValue.delta) * MAX_HINTS) + psvTemp */
  407. #define NUM_STACK_VALUES (2 + MAX_OPERAND_STACK + MAX_COUNTER_BUFFER + ( MAX_HINTS * 2 ) + MAX_SVTEMP)
  408. /* Change this definition if you change the StackValue definition */
  409. #define SIZEOF_STACK_VALUES(numMasters) (sizeof(boolean) + (sizeof(Fixed) * (numMasters)))
  410. typedef struct
  411. {
  412. enum XC_PenState pen;
  413. enum XC_HintState hints;
  414. boolean waitingForHsbw;
  415. boolean waitingForFirstHint;
  416. boolean flexUsed;
  417. boolean subrFlatten;
  418. Card16 baseSeac;
  419. Card16 accentSeac;
  420. Card16 opCode;
  421. PStackValue x;
  422. PStackValue y;
  423. PStackValue stack[MAX_OPERAND_STACK];
  424. Card16 stackTop;
  425. HintValue hintMap[MAX_HINTS];
  426. Card16 hintCount;
  427. CardX counterGroupCount;
  428. CardX counterGroupHCount;
  429. CardX counterGroupVCount;
  430. PStackValue counterBuffer[MAX_COUNTER_BUFFER]; /* Used to break counter arguments into 22 arg callothersubrs */
  431. CardX counterBufferCount;
  432. CardX languageGroup; /* must be set before parsing a charstring */
  433. Card16 destsvCount;
  434. PStackValue psvTemp[MAX_SVTEMP];
  435. PStackValue pstackVal; /* All the StackValue points to this data space.
  436. * This space is init'ed and freed in XC_Init
  437. * and XC_CleanUp of the xcf_cstr module. */
  438. void *pCounterVal; /* Pointer for the CounterValues contained in CIDFonts.
  439. * This space is inited and freed in XC_Init and
  440. * XC_Cleanup.
  441. */
  442. } CharStrStruct, PTR_PREFIX *PCharStrStruct;
  443. /* Definitions of download record state */
  444. #define XCF_DL_CREATE 0
  445. #define XCF_DL_INIT 1
  446. #define XCF_DL_BASE 2
  447. #define XCF_DL_SUBSET 3
  448. #define IS_GLYPH_SENT(arr, i) ((arr)[((i)>>3)] & (1 << ((i)&7)))
  449. #define SET_GLYPH_SENT_STATUS(arr, i) (arr)[((i)>>3)] |= (1 << ((i)&7))
  450. typedef struct
  451. {
  452. unsigned short state;
  453. Card32 glyphsSize; /* size of the glyphs list */
  454. Card8 PTR_PREFIX *glyphs; /* a list of downloaded chars, the length
  455. * of the list is equal to the number of characters
  456. * available in the charset / 8, i.e., each
  457. * character consumes a single bit w/i the list
  458. */
  459. Card8 seacs[32];
  460. Card16 cSeacs; /* Number of seac chars found w/i a subset */
  461. } DownloadRecordStruct;
  462. typedef struct
  463. {
  464. jmp_buf jumpData;
  465. XCF_CallbackStruct callbacks;
  466. DictEntriesStruct dict;
  467. FontSetValuesStruct fontSet;
  468. XCF_ClientOptions options;
  469. OutBufferStruct outBuffer;
  470. InBufferStruct inBuffer;
  471. Type1Struct type1;
  472. CharStrStruct cstr;
  473. DownloadRecordStruct dl;
  474. } PTR_PREFIX *XCF_Handle;
  475. /* Misc Functions */
  476. #ifdef XCF_DEVELOP
  477. #define XCF_FATAL_ERROR(h, error, msg, number) XCF_FatalErrorHandler((h),(error),(msg),(number))
  478. extern void XCF_FatalErrorHandler(XCF_Handle hndl, int error, char *str, Card32 number);
  479. #else
  480. #define XCF_FATAL_ERROR(h, error, msg, number) XCF_FatalErrorHandler((h),(error))
  481. extern void XCF_FatalErrorHandler(XCF_Handle hndl, int error);
  482. #endif
  483. extern Card16 XCF_CalculateSubrBias(CardX subrCount);
  484. extern void XCF_ReadBlock(XCF_Handle h, Offset pos, Card32 length);
  485. extern Card32 XCF_Read(XCF_Handle h, IntX byteCount);
  486. extern Card8 XCF_Read1(XCF_Handle h);
  487. extern Card16 XCF_Read2(XCF_Handle h);
  488. extern void XCF_PutData(XCF_Handle h, Card8 PTR_PREFIX *pData, Card32 length);
  489. extern void XCF_PutString(XCF_Handle h, char PTR_PREFIX *str);
  490. extern void XCF_FlushOutputBuffer(XCF_Handle h);
  491. extern void XCF_SetOuputPosition(XCF_Handle h, Card32 pos);
  492. extern double XCF_ArgPtrToDouble(XCF_Handle h, Card8 PTR_PREFIX * PTR_PREFIX
  493. *ppArgList);
  494. extern Fixed XCF_ArgPtrToFixed(XCF_Handle h, Card8 PTR_PREFIX * PTR_PREFIX
  495. *ppArgList, boolean fracType);
  496. extern IntX XCF_FindNextOperator(XCF_Handle h, Card16 PTR_PREFIX *opCode, boolean dict);
  497. extern void XCF_SaveDictArgumentList(XCF_Handle h, Fixed PTR_PREFIX *pArgArray,
  498. Card8 PTR_PREFIX *pArgList, IntX
  499. argCount, boolean fracType);
  500. extern void XCF_SaveDictIntArgumentList(XCF_Handle h,
  501. Int32 PTR_PREFIX *pArgArray,
  502. Card8 PTR_PREFIX *pArgList, IntX
  503. argCount);
  504. extern void XCF_SaveFontMatrixStr(XCF_Handle h, char (PTR_PREFIX *pArgArray)[FONT_MATRIX_ENTRY_SIZE],
  505. Card8 PTR_PREFIX *pArgList, IntX argCount);
  506. extern void XCF_SaveStrArgs(XCF_Handle h, char PTR_PREFIX *pArgArray,
  507. Card8 PTR_PREFIX *pArgList, IntX argCount);
  508. extern void XCF_LookUpString(XCF_Handle h, StringID sid, char PTR_PREFIX * PTR_PREFIX *str, Card16 PTR_PREFIX *length);
  509. extern void XCF_ReadDictionary(XCF_Handle h);
  510. extern void XCF_LookUpTableEntry(XCF_Handle h, IndexDesc PTR_PREFIX *pIndex, CardX index);
  511. extern void XCF_DumpGlobalCFFSections(XCF_Handle h, int dumpCompleteFontSet);
  512. extern void XCF_DumpFontSpecificCFFSections(XCF_Handle h);
  513. extern void XT1_PutT1Data(XCF_Handle h, Card8 PTR_PREFIX *pData, Card32 length);
  514. extern void XT1_WriteT1Font(XCF_Handle h);
  515. extern void XT1_WriteCIDTop(XCF_Handle h);
  516. extern void XT1_WriteCIDDict(XCF_Handle h, Card16 fd, Card32 subrMapOffset, Card16 subrCount);
  517. extern void XT1_CIDBeginBinarySection(XCF_Handle h);
  518. extern void XT1_CIDWriteSubrMap(XCF_Handle h, Card16 fdIndex);
  519. extern void XT1_CIDWriteSubrs(XCF_Handle h, Card16 fdIndex);
  520. extern void XT1_CIDWriteCharString(XCF_Handle h);
  521. extern long int XCF_OutputPos(XCF_Handle h);
  522. extern void XT1_CIDWriteCharMap(XCF_Handle h);
  523. extern Card8 XCF_GetFDIndex(XCF_Handle h, Int32 code);
  524. extern void XT1_CIDEndBinarySection(XCF_Handle h);
  525. extern void XT1_WriteAdditionalGlyphDictEntries(XCF_Handle h,
  526. short cGlyphs, XCFGlyphID PTR_PREFIX *pGlyphID,
  527. unsigned long PTR_PREFIX *pCharStrLength);
  528. extern void XT1_WriteGlyphDictEntries(XCF_Handle h, short cGlyphs,
  529. XCFGlyphID PTR_PREFIX *pGlyphID,
  530. unsigned long PTR_PREFIX *pCharStrLength);
  531. extern void XT1_WriteCIDVMBinarySection(XCF_Handle h);
  532. extern void XC_SetUpStandardSubrs(XCF_Handle h);
  533. extern void XC_DVToSubr(XCF_Handle h);
  534. #if HAS_COOLTYPE_UFL == 1
  535. /* These functions are just called from CoolType when converting a CIDFont to
  536. a VMCIDFont. Caution should be used when calling these functions because
  537. it depends on certain internal data structures being initialized.
  538. */
  539. extern Card32 PutType1CharString(XCF_Handle h, Card8 PTR_PREFIX *pData, Card32
  540. length);
  541. extern void PutSizedNumber(XCF_Handle h, Card32 value, Card16 size);
  542. #endif
  543. #ifndef USE_FIXDIV
  544. #define USE_FIXDIV USE_HWFP
  545. #endif
  546. #ifndef USE_FIXMUL
  547. #define USE_FIXMUL USE_HWFP
  548. #endif
  549. #ifndef USE_FRACMUL
  550. #define USE_FRACMUL USE_HWFP
  551. #endif
  552. /* Fixed arithmetic functions. */
  553. extern Fixed XCF_FixMul(Fixed x, Fixed y);
  554. extern Fixed XCF_FixDiv(Fixed x, Fixed y);
  555. extern Frac XCF_FracMul(Frac x, Frac y);
  556. extern void XCF_Fixed2CString(Fixed f, char PTR_PREFIX *s, short precision,
  557. boolean fracType);
  558. #ifdef USE_FXL
  559. Fixed XCF_ConvertFixed (XCF_Handle h, char *s);
  560. Frac XCF_ConvertFrac (XCF_Handle h, char * s);
  561. #endif
  562. /* Charstring Processing Functions */
  563. extern void XC_Init(XCF_Handle h);
  564. extern void XC_ProcessCharstr(XCF_Handle h);
  565. extern void XC_CleanUp(XCF_Handle h);
  566. extern void XC_SetCounters(XCF_Handle h, boolean subr);
  567. extern void XC_WriteHStem(XCF_Handle h, boolean subr);
  568. extern void XC_WriteVStem(XCF_Handle h, boolean subr);
  569. extern void XC_WriteHMoveTo(XCF_Handle h, boolean subr);
  570. extern void XC_WriteVMoveTo(XCF_Handle h, boolean subr);
  571. extern void XC_WriteRLineTo(XCF_Handle h, boolean subr);
  572. extern void XC_WriteRMoveTo(XCF_Handle h, boolean subr);
  573. extern void XC_WriteHLineToAndVLineTo(XCF_Handle h, boolean hLine, boolean subr);
  574. extern void XC_WriteRRCurveTo(XCF_Handle h, boolean subr);
  575. extern void XC_WriteEndChar(XCF_Handle h, boolean subr);
  576. extern void XC_WriteRCurveLine(XCF_Handle h, boolean subr);
  577. extern void XC_WriteRLineCurve(XCF_Handle h, boolean subr);
  578. extern void XC_WriteVVCurveTo(XCF_Handle h, boolean subr);
  579. extern void XC_WriteHHCurveTo(XCF_Handle h, boolean subr);
  580. extern void XC_WriteHVorVHCurveTo(XCF_Handle h, boolean hvCurve, boolean subr);
  581. extern void XC_WriteDotSection(XCF_Handle h, boolean subr);
  582. extern void XC_WriteFlex(XCF_Handle h, boolean subr);
  583. extern void XC_WriteFlex1(XCF_Handle h, boolean subr);
  584. extern void XC_WriteHFlex(XCF_Handle h, boolean subr);
  585. extern void XC_WriteHFlex1(XCF_Handle h, boolean subr);
  586. extern void XC_WriteHintMask(XCF_Handle h, boolean subr);
  587. extern void XC_WriteT1PStackValue(XCF_Handle h, PStackValue psv, boolean subr);
  588. extern void XC_WriteT1OpCode(XCF_Handle h, Card16 opCode, boolean subr);
  589. extern int XC_ParseCharStr(XCF_Handle h, unsigned char PTR_PREFIX *cstr, int init);
  590. /* CoolType is the only client that requires the mm specific code in xcf
  591. * because it converts all Type 1 fonts (including mm) to CFF then calls
  592. * xcf to download. Other clients should be directly dealing with OpenType
  593. * fonts and there should never be an OpenType mm font. Instances will be
  594. * generated instead.
  595. */
  596. #if HAS_COOLTYPE_UFL == 1
  597. extern int XC_TransDesignChar(XCF_Handle h, CardX sid);
  598. extern void XC_ProcessTransDesignSubrs(XCF_Handle h);
  599. #endif
  600. extern int XCF_TransDesignFont(XCF_Handle h);
  601. /* Downloading Functions */
  602. extern void XT1_WriteFontSubset(XCF_Handle h, short cCharStr,
  603. XCFGlyphID PTR_PREFIX *pCharStrID,
  604. unsigned char PTR_PREFIX **pGlyphName,
  605. unsigned long PTR_PREFIX *pCharStrLength);
  606. extern void XT1_WriteAdditionalFontSubset(XCF_Handle h, short cCharStr,
  607. XCFGlyphID PTR_PREFIX *pCharStrID,
  608. unsigned char PTR_PREFIX **pGlyphName,
  609. unsigned long PTR_PREFIX *pCharStrLength);
  610. extern void ProcessOneCharString(XCF_Handle h, unsigned int index);
  611. extern CardX GetStdEncodeSID(CardX gid);
  612. extern char PTR_PREFIX *GetStdEncodingName(CardX gid);
  613. extern void CheckSeacCharString(XCF_Handle h, CardX index);
  614. #ifdef XCF_DEVELOP
  615. extern void XT1_ShowHexString(XCF_Handle h, unsigned char PTR_PREFIX* hexString,
  616. boolean showCtrlD);
  617. /*************************************************************************
  618. Function name: XCF_ShowHexString()
  619. Summary: Show a string
  620. Description: This function is used to display a hex string.
  621. Parameters:
  622. fontsetHandle - XCF fontset handle obtained from XCF_Init().
  623. hexString - hex string to display
  624. showCtrlD - set this to true if you want to add a control D
  625. at the end of the page. This is used in a Windows environment.
  626. Return Values: standard XCF_Result values
  627. *************************************************************************/
  628. extern enum XCF_Result XCF_ShowHexString(XFhandle fonsetHandle,
  629. unsigned char PTR_PREFIX *hexString, unsigned char showCtrlD);
  630. #endif
  631. #define OpCode(op) (0x0FF & (op)) /* strip the escape off an opcode */
  632. #define IsEscOp(op) (!!(0xFF00 & (op))) /* Is this an escape-op? */
  633. #define HintSubtitutionOtherSubrStr \
  634. "{" XCF_NEW_LINE \
  635. "systemdict /internaldict known not" XCF_NEW_LINE \
  636. "{pop 3}" XCF_NEW_LINE \
  637. "{1183615869 systemdict /internaldict get exec" XCF_NEW_LINE \
  638. " dup /startlock known" XCF_NEW_LINE \
  639. " {/startlock get exec}" XCF_NEW_LINE \
  640. " {dup /strtlck known" XCF_NEW_LINE \
  641. " {/strtlck get exec}" XCF_NEW_LINE \
  642. " {pop 3}" XCF_NEW_LINE \
  643. " ifelse}" XCF_NEW_LINE \
  644. " ifelse}" XCF_NEW_LINE \
  645. " ifelse" XCF_NEW_LINE \
  646. "} executeonly" XCF_NEW_LINE
  647. #define FlexOtherSubrStr1 \
  648. "[systemdict /internaldict known" XCF_NEW_LINE \
  649. "{1183615869 systemdict /internaldict get exec" XCF_NEW_LINE \
  650. "/FlxProc known {save true} {false} ifelse}" XCF_NEW_LINE \
  651. "{userdict /internaldict known not {" XCF_NEW_LINE \
  652. "userdict /internaldict" XCF_NEW_LINE \
  653. "{count 0 eq" XCF_NEW_LINE \
  654. "{/internaldict errordict /invalidaccess get exec} if" XCF_NEW_LINE \
  655. "dup type /integertype ne" XCF_NEW_LINE \
  656. "{/internaldict errordict /invalidaccess get exec} if" XCF_NEW_LINE \
  657. "dup 1183615869 eq" XCF_NEW_LINE
  658. #define FlexOtherSubrStr2 \
  659. "{pop 0}" XCF_NEW_LINE \
  660. "{/internaldict errordict /invalidaccess get exec}" XCF_NEW_LINE \
  661. "ifelse" XCF_NEW_LINE \
  662. "}" XCF_NEW_LINE \
  663. "dup 14 get 1 25 dict put" XCF_NEW_LINE \
  664. "bind executeonly put" XCF_NEW_LINE \
  665. "} if" XCF_NEW_LINE \
  666. "1183615869 userdict /internaldict get exec" XCF_NEW_LINE \
  667. "/FlxProc known {save true} {false} ifelse}" XCF_NEW_LINE \
  668. "ifelse" XCF_NEW_LINE
  669. #define FlexOtherSubrStr3 \
  670. "[" XCF_NEW_LINE \
  671. "systemdict /internaldict known not" XCF_NEW_LINE \
  672. "{ 100 dict /begin cvx /mtx matrix /def cvx } if" XCF_NEW_LINE \
  673. "systemdict /currentpacking known {currentpacking true setpacking} if" XCF_NEW_LINE \
  674. "{" XCF_NEW_LINE \
  675. "systemdict /internaldict known {" XCF_NEW_LINE \
  676. "1183615869 systemdict /internaldict get exec" XCF_NEW_LINE \
  677. "dup /$FlxDict known not {" XCF_NEW_LINE \
  678. "dup dup length exch maxlength eq" XCF_NEW_LINE \
  679. "{ pop userdict dup /$FlxDict known not" XCF_NEW_LINE
  680. #define FlexOtherSubrStr4 \
  681. "{ 100 dict begin /mtx matrix def" XCF_NEW_LINE \
  682. "dup /$FlxDict currentdict put end } if }" XCF_NEW_LINE \
  683. "{ 100 dict begin /mtx matrix def" XCF_NEW_LINE \
  684. "dup /$FlxDict currentdict put end }" XCF_NEW_LINE \
  685. "ifelse" XCF_NEW_LINE \
  686. "} if /$FlxDict get begin } if" XCF_NEW_LINE \
  687. "grestore" XCF_NEW_LINE \
  688. "/exdef {exch def} def" XCF_NEW_LINE \
  689. "/dmin exch abs 100 div def" XCF_NEW_LINE \
  690. "/epX exdef /epY exdef" XCF_NEW_LINE
  691. #define FlexOtherSubrStr5 \
  692. "/c4y2 exdef /c4x2 exdef /c4y1 exdef /c4x1 exdef /c4y0 exdef /c4x0 exdef" XCF_NEW_LINE \
  693. "/c3y2 exdef /c3x2 exdef /c3y1 exdef /c3x1 exdef /c3y0 exdef /c3x0 exdef" XCF_NEW_LINE \
  694. "/c1y2 exdef /c1x2 exdef /c2x2 c4x2 def /c2y2 c4y2 def" XCF_NEW_LINE \
  695. "/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def" XCF_NEW_LINE \
  696. "/PickCoords { " XCF_NEW_LINE \
  697. "{c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}" XCF_NEW_LINE \
  698. "{c3x0 c3y0 c3x1 c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}" XCF_NEW_LINE \
  699. "ifelse" XCF_NEW_LINE \
  700. "/y5 exdef /x5 exdef /y4 exdef /x4 exdef /y3 exdef /x3 exdef" XCF_NEW_LINE \
  701. "/y2 exdef /x2 exdef /y1 exdef /x1 exdef /y0 exdef /x0 exdef" XCF_NEW_LINE
  702. #define FlexOtherSubrStr6 \
  703. "} def" XCF_NEW_LINE \
  704. "mtx currentmatrix pop " XCF_NEW_LINE \
  705. "mtx 0 get abs .00001 lt mtx 3 get abs .00001 lt or" XCF_NEW_LINE \
  706. "{/flipXY -1 def}" XCF_NEW_LINE \
  707. "{mtx 1 get abs .00001 lt mtx 2 get abs .00001 lt or" XCF_NEW_LINE \
  708. "{/flipXY 1 def}" XCF_NEW_LINE \
  709. "{/flipXY 0 def}" XCF_NEW_LINE \
  710. "ifelse }" XCF_NEW_LINE \
  711. "ifelse" XCF_NEW_LINE \
  712. "/erosion 1 def " XCF_NEW_LINE
  713. #define FlexOtherSubrStr7 \
  714. "systemdict /internaldict known {" XCF_NEW_LINE \
  715. " 1183615869 systemdict /internaldict get exec dup " XCF_NEW_LINE \
  716. "/erosion known" XCF_NEW_LINE \
  717. "{/erosion get /erosion exch def}" XCF_NEW_LINE \
  718. "{pop}" XCF_NEW_LINE \
  719. "ifelse" XCF_NEW_LINE \
  720. "} if" XCF_NEW_LINE \
  721. "yflag" XCF_NEW_LINE \
  722. "{flipXY 0 eq c3y2 c4y2 eq or" XCF_NEW_LINE \
  723. "{false PickCoords}" XCF_NEW_LINE
  724. #define FlexOtherSubrStr8 \
  725. "{/shrink c3y2 c4y2 eq" XCF_NEW_LINE \
  726. "{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs} ifelse def" XCF_NEW_LINE \
  727. "/yshrink {c4y2 sub shrink mul c4y2 add} def" XCF_NEW_LINE \
  728. "/c1y0 c3y0 yshrink def /c1y1 c3y1 yshrink def" XCF_NEW_LINE \
  729. "/c2y0 c4y0 yshrink def /c2y1 c4y1 yshrink def" XCF_NEW_LINE \
  730. "/c1x0 c3x0 def /c1x1 c3x1 def /c2x0 c4x0 def /c2x1 c4x1 def" XCF_NEW_LINE \
  731. "/dY 0 c3y2 c1y2 sub round" XCF_NEW_LINE \
  732. "dtransform flipXY 1 eq {exch} if pop abs def" XCF_NEW_LINE \
  733. "dY dmin lt PickCoords" XCF_NEW_LINE \
  734. "y2 c1y2 sub abs 0.001 gt {" XCF_NEW_LINE
  735. #define FlexOtherSubrStr9 \
  736. "c1x2 c1y2 transform flipXY 1 eq {exch} if " XCF_NEW_LINE \
  737. "/cx exch def /cy exch def" XCF_NEW_LINE \
  738. "/dY 0 y2 c1y2 sub round dtransform flipXY 1 eq {exch}" XCF_NEW_LINE \
  739. "if pop def" XCF_NEW_LINE \
  740. "dY round dup 0 ne" XCF_NEW_LINE \
  741. "{/dY exdef }" XCF_NEW_LINE \
  742. "{pop dY 0 lt {-1}{1} ifelse /dY exdef}" XCF_NEW_LINE \
  743. "ifelse" XCF_NEW_LINE \
  744. "/erode PaintType 2 ne erosion 0.5 ge and def" XCF_NEW_LINE \
  745. "erode {/cy cy 0.5 sub def} if" XCF_NEW_LINE
  746. #define FlexOtherSubrStr10 \
  747. "/ey cy dY add def " XCF_NEW_LINE \
  748. "/ey ey ceiling ey sub ey floor add def " XCF_NEW_LINE \
  749. "erode {/ey ey 0.5 add def} if " XCF_NEW_LINE \
  750. "ey cx flipXY 1 eq {exch} if itransform exch pop" XCF_NEW_LINE \
  751. "y2 sub /eShift exch def" XCF_NEW_LINE \
  752. "/y1 y1 eShift add def /y2 y2 eShift add def /y3 y3" XCF_NEW_LINE \
  753. "eShift add def" XCF_NEW_LINE \
  754. "} if" XCF_NEW_LINE \
  755. "} ifelse" XCF_NEW_LINE \
  756. "}" XCF_NEW_LINE
  757. #define FlexOtherSubrStr11 \
  758. "{flipXY 0 eq c3x2 c4x2 eq or" XCF_NEW_LINE \
  759. "{false PickCoords }" XCF_NEW_LINE \
  760. "{/shrink c3x2 c4x2 eq" XCF_NEW_LINE \
  761. "{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs} ifelse def" XCF_NEW_LINE \
  762. "/xshrink {c4x2 sub shrink mul c4x2 add} def" XCF_NEW_LINE \
  763. "/c1x0 c3x0 xshrink def /c1x1 c3x1 xshrink def" XCF_NEW_LINE \
  764. "/c2x0 c4x0 xshrink def /c2x1 c4x1 xshrink def" XCF_NEW_LINE \
  765. "/c1y0 c3y0 def /c1y1 c3y1 def /c2y0 c4y0 def /c2y1 c4y1 def" XCF_NEW_LINE \
  766. "/dX c3x2 c1x2 sub round 0 dtransform" XCF_NEW_LINE \
  767. "flipXY -1 eq {exch} if pop abs def" XCF_NEW_LINE
  768. #define FlexOtherSubrStr12 \
  769. "dX dmin lt PickCoords" XCF_NEW_LINE \
  770. "x2 c1x2 sub abs 0.001 gt {" XCF_NEW_LINE \
  771. "c1x2 c1y2 transform flipXY -1 eq {exch} if" XCF_NEW_LINE \
  772. "/cy exch def /cx exch def " XCF_NEW_LINE \
  773. "/dX x2 c1x2 sub round 0 dtransform flipXY -1 eq {exch} if pop def" XCF_NEW_LINE \
  774. "dX round dup 0 ne" XCF_NEW_LINE \
  775. "{/dX exdef}" XCF_NEW_LINE \
  776. "{pop dX 0 lt {-1}{1} ifelse /dX exdef}" XCF_NEW_LINE \
  777. "ifelse" XCF_NEW_LINE \
  778. "/erode PaintType 2 ne erosion .5 ge and def" XCF_NEW_LINE
  779. #define FlexOtherSubrStr13 \
  780. "erode {/cx cx .5 sub def} if" XCF_NEW_LINE \
  781. "/ex cx dX add def" XCF_NEW_LINE \
  782. "/ex ex ceiling ex sub ex floor add def" XCF_NEW_LINE \
  783. "erode {/ex ex .5 add def} if" XCF_NEW_LINE \
  784. "ex cy flipXY -1 eq {exch} if itransform pop" XCF_NEW_LINE \
  785. "x2 sub /eShift exch def" XCF_NEW_LINE \
  786. "/x1 x1 eShift add def /x2 x2 eShift add def /x3 x3 eShift add def" XCF_NEW_LINE \
  787. "} if" XCF_NEW_LINE \
  788. "} ifelse" XCF_NEW_LINE \
  789. "} ifelse" XCF_NEW_LINE
  790. #define FlexOtherSubrStr14 \
  791. "x2 x5 eq y2 y5 eq or" XCF_NEW_LINE \
  792. "{x5 y5 lineto }" XCF_NEW_LINE \
  793. "{x0 y0 x1 y1 x2 y2 curveto" XCF_NEW_LINE \
  794. "x3 y3 x4 y4 x5 y5 curveto}" XCF_NEW_LINE \
  795. "ifelse" XCF_NEW_LINE \
  796. "epY epX " XCF_NEW_LINE \
  797. "}" XCF_NEW_LINE \
  798. "systemdict /currentpacking known {exch setpacking} if " XCF_NEW_LINE \
  799. "/exec cvx /end cvx ] cvx" XCF_NEW_LINE \
  800. "executeonly" XCF_NEW_LINE
  801. #define FlexOtherSubrStr15 \
  802. "exch" XCF_NEW_LINE \
  803. "{pop true exch restore} " XCF_NEW_LINE \
  804. "{ " XCF_NEW_LINE \
  805. "systemdict /internaldict known not" XCF_NEW_LINE \
  806. "{1183615869 userdict /internaldict get exec" XCF_NEW_LINE \
  807. "exch /FlxProc exch put true}" XCF_NEW_LINE \
  808. "{1183615869 systemdict /internaldict get exec" XCF_NEW_LINE \
  809. "dup length exch maxlength eq" XCF_NEW_LINE \
  810. "{false} " XCF_NEW_LINE \
  811. "{1183615869 systemdict /internaldict get exec" XCF_NEW_LINE
  812. #define FlexOtherSubrStr16 \
  813. "exch /FlxProc exch put true}" XCF_NEW_LINE \
  814. "ifelse}" XCF_NEW_LINE \
  815. "ifelse}" XCF_NEW_LINE \
  816. "ifelse" XCF_NEW_LINE \
  817. "{systemdict /internaldict known" XCF_NEW_LINE \
  818. "{{1183615869 systemdict /internaldict get exec /FlxProc get exec}}" XCF_NEW_LINE \
  819. "{{1183615869 userdict /internaldict get exec /FlxProc get exec}}" XCF_NEW_LINE \
  820. "ifelse executeonly" XCF_NEW_LINE \
  821. "} if" XCF_NEW_LINE \
  822. "{gsave currentpoint newpath moveto} executeonly " XCF_NEW_LINE
  823. #define FlexOtherSubrStr17 \
  824. "{currentpoint grestore gsave currentpoint newpath moveto}" XCF_NEW_LINE \
  825. "executeonly " XCF_NEW_LINE
  826. #ifdef __cplusplus
  827. }
  828. #endif
  829. #endif /* XCF_PRIV_H */