Rev 193 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
259 | daniel-mar | 1 | /* |
2 | * ATMInterface.h |
||
3 | * |
||
4 | * Version 3.0 |
||
5 | * |
||
6 | * Adobe Type Manager is a trademark of Adobe Systems Incorporated. |
||
7 | * Copyright 1983-1991 Adobe Systems Incorporated. |
||
8 | * All Rights Reserved. |
||
9 | */ |
||
10 | |||
11 | #ifndef _H_ATMInterface |
||
12 | #define _H_ATMInterface |
||
13 | |||
14 | #include <Dialogs.h> /* needed for MMFPHook declaration */ |
||
15 | |||
16 | /* |
||
17 | * This defines which language calling conventions you wish to use for the |
||
18 | * "pre-3.0" calls with ATM 3.0. For example, do you want the field "fontAvailable" |
||
19 | * a C or Pascal routine? If you wish this to be a PASCAL routine always, use |
||
20 | * #define ATM_LANG pascal |
||
21 | * We don't advise doing this unless you are guaranteed that the ATM you will |
||
22 | * be working with will _always_ be ATM 3.0 or greater! But, you MUST do this |
||
23 | *if you request ATMPascalProcsStatusCode instead of ATMProcsStatusCode. |
||
24 | */ |
||
25 | #ifndef ATM_LANG |
||
26 | #define ATM_LANG ATM_C |
||
27 | #endif |
||
28 | |||
29 | /* |
||
30 | * Does your compiler support function prototypes in structure fields? If so, we |
||
31 | * will supply them for you. Older versions of Think C (pre-5.0) don't and will give |
||
32 | * error messages for prototyping function pointers in structs, so you will want |
||
33 | * to turn this off. |
||
34 | */ |
||
35 | #ifndef ATM_USE_PROTOTYPES |
||
36 | # if !defined(THINK_C) || THINK_C == 5 |
||
37 | # define ATM_USE_PROTOTYPES 1 |
||
38 | # else |
||
39 | # define ATM_USE_PROTOTYPES 0 |
||
40 | # endif |
||
41 | #endif |
||
42 | |||
43 | /* |
||
44 | * Think C 4.0 (THINK_C == 1) doesn't allow the "pascal" keyword in function pointers |
||
45 | * in structs. |
||
46 | */ |
||
47 | #ifndef ATM_C |
||
48 | #define ATM_C |
||
49 | #endif |
||
50 | #ifndef ATM_PASCAL |
||
51 | # if !defined(THINK_C) || THINK_C == 5 |
||
52 | # define ATM_PASCAL pascal |
||
53 | # else |
||
54 | # define ATM_PASCAL |
||
55 | # endif |
||
56 | #endif |
||
57 | |||
58 | #define MaxLegalBlendName 31 /* Maximum size of a legal font name (w/o len). */ |
||
59 | #define MaxBlendEntries 16 /* Max entries in a blend vector. */ |
||
60 | #define MaxBlendAxes 4 /* Can specify 4 dimensions. */ |
||
61 | |||
62 | #define WeightAxis (StringPtr) "\pWeight" /* Weight axis identifier. */ |
||
63 | #define WidthAxis (StringPtr) "\pWidth" /* Width axis identifier. */ |
||
64 | |||
65 | /* For the "method" parameter of CopyFit. */ |
||
66 | enum { |
||
67 | ATMCopyFitDefault, /* Let us choose the best method for H&J. */ |
||
68 | ATMCopyFitConstStems, /* Keep the stem widths constant. */ |
||
69 | ATMCopyFitVarStems /* Allow stem widths to vary. */ |
||
70 | }; |
||
71 | |||
72 | typedef long ATMFixed; |
||
73 | |||
74 | typedef short ATMErr; |
||
75 | |||
76 | /* |
||
77 | * For MPW users who don't want to use the ATMInterface.a glue routines: |
||
78 | * you must use ATMPascalProcsStatusCode. This in turn requires that you |
||
79 | * #define ATM_LANG pascal |
||
80 | * (as described above) before #include'ing ATMInterface.h. |
||
81 | */ |
||
82 | #define ATMProcsStatusCode 0 |
||
83 | #define ATMPascalProcsStatusCode 16 |
||
84 | #define ATMPickerControlCode 10 |
||
85 | |||
86 | /* Return codes from GetBlendedFontType */ |
||
87 | #define ATMNotBlendFont 0 |
||
88 | #define ATMBlendFontInstance 1 |
||
89 | #define ATMBlendFontBaseDesign 2 |
||
90 | #define ATMTempBlendFont 3 |
||
91 | |||
92 | typedef struct |
||
93 | { |
||
94 | ATMFixed a, b, c, d, tx, ty; |
||
95 | } ATMFixedMatrix; |
||
96 | |||
97 | typedef struct |
||
98 | { |
||
99 | ATMFixed x, y; |
||
100 | } ATMFixedPoint, *ATMPFixedPoint; |
||
101 | |||
102 | /* |
||
103 | * This structure is filled via getFontSpecsATM() and gives additional information |
||
104 | * about the current font than we can get from just the FOND. Make sure that the |
||
105 | * appropriate bits are set when the fields are filled in, and the "SpecsReserved" |
||
106 | * is initialized to zero! |
||
107 | * |
||
108 | * As of the 3.0 release, only the vertical stem width and xheight are used, |
||
109 | * though the cap height might be used if the xheight is not available. This structure |
||
110 | * is designed to be expandable as needed in the future. |
||
111 | * |
||
112 | * The version number MUST be initialized to zero or one... |
||
113 | */ |
||
114 | #define FontSpecsVersion 1 |
||
115 | #define SpecReserve 23 |
||
116 | |||
117 | typedef struct FontSpecs { |
||
118 | short version; |
||
119 | Boolean vertStemWidthAvail : 1; /* Signals that data is available. */ |
||
120 | Boolean horizStemWidthAvail : 1; |
||
121 | Boolean xHeightAvail : 1; |
||
122 | Boolean capHeightAvail : 1; |
||
123 | Boolean serifWidthAvail : 1; |
||
124 | Boolean serifHeightAvail : 1; |
||
125 | /* These are in version 1 and above. */ |
||
126 | Boolean italicAngleAvail : 1; |
||
127 | Boolean flagsAvail : 1; |
||
128 | Boolean lowerCaseScaleAvail : 1; |
||
129 | |||
130 | #ifdef THINK_C |
||
131 | long SpecsReserved : SpecReserve; /* Must be initialized to zero (0)! */ |
||
132 | #else |
||
133 | int SpecsReserved : SpecReserve; /* Must be initialized to zero (0)! */ |
||
134 | #endif |
||
135 | |||
136 | Fixed SpecsVertStemWidth; /* Thickness of the vertical stems. */ |
||
137 | Fixed SpecsHorizStemWidth; /* Thickness of the horizontal stems. */ |
||
138 | Fixed SpecsxHeight; /* The height of the letter 'x'. */ |
||
139 | Fixed SpecsCapHeight; /* The height of a capital letter. */ |
||
140 | Fixed SpecsSerifWidth; /* The width of a serif. */ |
||
141 | Fixed SpecsSerifHeight; /* The height of a serif, ie. how tall */ |
||
142 | /* are the tips off the base line. */ |
||
143 | /* These are in version 1 and above. */ |
||
144 | Fixed SpecsItalicAngle; /* How much the font "leans". */ |
||
145 | long SpecsFlags; /* See below for flag values. */ |
||
146 | Fixed SpecsLowerCaseScale; /* Amount to scale lowercase for |
||
147 | * x-height matching */ |
||
148 | |||
149 | Fixed SpecsResSpace[SpecReserve]; /* Reserved fields for later. */ |
||
150 | } FontSpecs; |
||
151 | |||
152 | #define SPECS_FORCE_BOLD 0x1 /* Font should be artificially emboldened. */ |
||
153 | #define SPECS_ALL_CAPS 0x2 /* Font contains uppercase characters in lowercase positions. */ |
||
154 | #define SPECS_SMALL_CAPS 0x4 /* Font contains small capitals in lowercase positions. */ |
||
155 | |||
156 | /* |
||
157 | * Creator/Picker option flags |
||
158 | */ |
||
159 | #define CREATOR_DIALOG 0x0001 /* Creator dialog, else Picker dialog */ |
||
160 | #define OK_IS_QUIT 0x0002 /* Ok button title becomes Quit */ |
||
161 | |||
162 | #if ATM_USE_PROTOTYPES |
||
163 | typedef ATM_PASCAL short (*MMFPHook)(short item, DialogPtr theDialog); |
||
164 | #else |
||
165 | typedef ProcPtr MMFPHook; |
||
166 | #endif |
||
167 | |||
168 | /* |
||
169 | * Multiple Master Font Picker parameters |
||
170 | * |
||
171 | * All strings are Pascal format. |
||
172 | * |
||
173 | * The MMFP_Parms apply to both the Font Picker and Font Creator dialogs. |
||
174 | * Set the CREATOR_DIALOG bit in "flags" to get the Creator rather than the |
||
175 | * Picker dialog. Use "where" to specify the dialog's position, or use [0,0] |
||
176 | * to get the standard positioning. Pass in your own "prompt" string or use |
||
177 | * NULL to get the standard prompt. Pass in your own "sample" string or use |
||
178 | * NULL to get the standard sample. The sample string is continuously redrawn |
||
179 | * to illustrate the current font as the user navigates through the Multiple |
||
180 | * Master design space. A short fragment of the user's selection in the |
||
181 | * current document is a reasonable alternative to the default sample text. |
||
182 | * The user is also able to type in the sample box to see other characters. |
||
183 | * Pass in your own sample "startSize" or use 0 to get the default initial |
||
184 | * sample size. The user can also adjust the sample size through a popup |
||
185 | * menu and type-in size box. Pass in your own "dlgHook" dialog event hook |
||
186 | * function if you wish to change the dialog behavior or add your own items. |
||
187 | * If you specify a "dlgHook", it is called by the Picker immediately after |
||
188 | * each call to ModalDialog(). Refer to the Standard File Package chapter of |
||
189 | * Inside Mac for more details on how to write and use a dialog hook routine. |
||
190 | * Despite their different appearances, both the Creator and Picker dialogs |
||
191 | * share the same item numbering. |
||
192 | * |
||
193 | * When the Picker or Creator dialog is first displayed, the family and |
||
194 | * instance popup menus and the sliders and axis values are all set to reflect |
||
195 | * the initial font, and the sample string is rendered in this font at the |
||
196 | * initial sample size. There are a number of ways to choose this initial font. |
||
197 | * If "startFondID" is a Multiple Master font then it is used as the initial |
||
198 | * font. If "startFondID" is -1 or a regular (non-Multiple Master) font, then |
||
199 | * "startFamilyName" is checked. If this is the name of a Multiple Master |
||
200 | * font, then the instance at "startCoords" is used as the initial font. |
||
201 | * "StartCoords" must have as many elements as there are design axes for |
||
202 | * the specified family. If "startCoords" is NULL, then the first instance |
||
203 | * in "startFamilyName" is used as the initial font. If "startFamilyName" |
||
204 | * is NULL, then "startCoords" is ignored and the default initial font is |
||
205 | * chosen. |
||
206 | */ |
||
207 | struct MMFP_Parms |
||
208 | { |
||
209 | short version; /* (in) always 1 */ |
||
210 | short flags; /* (in) option flags, 0 for default Picker dialog */ |
||
211 | Point where; /* (in) dialog's top-left corner, [0,0] for default */ |
||
212 | StringPtr prompt; /* (in) prompt string, NULL for default */ |
||
213 | StringPtr sample; /* (in) sample string, NULL for default */ |
||
214 | short startFondID; /* (in) initial font, -1 for none */ |
||
215 | StringPtr startFamilyName; /* (in) initial family, NULL for default */ |
||
216 | Fixed *startCoords; /* (in) initial axis coordinates, NULL for default */ |
||
217 | short startSize; /* (in) initial sample size, 0 for default */ |
||
218 | MMFPHook dlgHook; /* (in) application dialog hook function, NULL for none */ |
||
219 | }; |
||
220 | typedef struct MMFP_Parms MMFP_Parms, *MMFP_ParmsPtr; |
||
221 | |||
222 | /* |
||
223 | * Multiple Master Font Picker Reply |
||
224 | * |
||
225 | * All strings are Pascal format. |
||
226 | * |
||
227 | * While the user manipulates the Picker or Creator dialog's controls to |
||
228 | * navigate through the Multiple Master design space, the sample text is |
||
229 | * continuously rerendered in the font instance with the selected design |
||
230 | * coordinates. A temporary instance is created on the fly whenever a |
||
231 | * permanent instance does not already exist. Only the permanent instances |
||
232 | * remain when the dialog is dismissed. The Creator dialog has only an |
||
233 | * OK button while the Picker dialog has both OK and Cancel. (For both |
||
234 | * dialogs, OK can be retitled Quit using the OK_IS_QUIT flag bit). The |
||
235 | * Picker call returns ATM_NOERR (0) for OK, and ATM_PICKER_CANCELLED for |
||
236 | * Cancel. Regardless of the way the user dismisses the dialog, any fields |
||
237 | * specified in MMFP_Reply are filled in to reflect the state in which the |
||
238 | * user last left the dialog. |
||
239 | * |
||
240 | * Any pointer argument specified as NULL is ignored. The others are always |
||
241 | * filled in. Specify "sample" to get a copy of the user's current sample |
||
242 | * text string. Specify "familyName" to get the name of the current |
||
243 | * Multiple Master family. Specify "coords" to get an array of design |
||
244 | * coordinates for the current instance. "Coords" will contain "numAxes" |
||
245 | * elements. Use MaxBlendAxes to safely allocate an array long enough for |
||
246 | * the returned coordinates. If the font instance corresponding to these |
||
247 | * design coordinates was a permanent one, its ID is returned in "fondID". |
||
248 | * If the instance was a temporary one, it no longer exists, so "fondID" is |
||
249 | * set to -1. The calling program may make appropriate ATM calls to create |
||
250 | * a new temporary or permanent instance of that font using the family name |
||
251 | * and design coordinates. |
||
252 | */ |
||
253 | struct MMFP_Reply |
||
254 | { |
||
255 | StringPtr sample; /* (out) last sample string (Str255), NULL to ignore */ |
||
256 | short fondID; /* (out) selected font if permanent, else -1 */ |
||
257 | StringPtr familyName; /* (out) selected family (Str32), NULL to ignore */ |
||
258 | short numAxes; /* (out) number of design axes in selected family */ |
||
259 | Fixed *coords; /* (out) coords of selected instance, NULL to ignore */ |
||
260 | short size; /* (out) last sample size */ |
||
261 | }; |
||
262 | typedef struct MMFP_Reply MMFP_Reply, *MMFP_ReplyPtr; |
||
263 | |||
264 | #if ATM_USE_PROTOTYPES |
||
265 | # define ATM_PROTO7(a,b,c,d,e,f,g) (a,b,c,d,e,f,g) |
||
266 | # define ATM_PROTO6(a,b,c,d,e,f) (a,b,c,d,e,f) |
||
267 | # define ATM_PROTO5(a,b,c,d,e) (a,b,c,d,e) |
||
268 | # define ATM_PROTO4(a,b,c,d) (a,b,c,d) |
||
269 | # define ATM_PROTO3(a,b,c) (a,b,c) |
||
270 | # define ATM_PROTO2(a,b) (a,b) |
||
271 | # define ATM_PROTO1(a) (a) |
||
272 | #else |
||
273 | # define ATM_PROTO7(a,b,c,d,e,f,g) () |
||
274 | # define ATM_PROTO6(a,b,c,d,e,f) () |
||
275 | # define ATM_PROTO5(a,b,c,d,e) () |
||
276 | # define ATM_PROTO4(a,b,c,d) () |
||
277 | # define ATM_PROTO3(a,b,c) () |
||
278 | # define ATM_PROTO2(a,b) () |
||
279 | # define ATM_PROTO1(a) () |
||
280 | #endif |
||
281 | |||
282 | #define ATMProcs3Version 3 |
||
283 | typedef struct |
||
284 | { |
||
285 | long version; |
||
286 | short (*fontAvailable) ATM_PROTO2(short family, short style); |
||
287 | short (*showText) ATM_PROTO3(Byte *text, short length, ATMFixedMatrix *matrix); |
||
288 | short (*xyshowText) ATM_PROTO4(Byte *text, short length, ATMFixedMatrix *matrix, Fixed *displacements); |
||
289 | } ATMProcs3; |
||
290 | |||
291 | #define ATMProcs4Version 4 |
||
292 | typedef struct |
||
293 | { |
||
294 | long version; |
||
295 | short (*fontAvailable) ATM_PROTO2(short family, short style); |
||
296 | short (*showTextErr) ATM_PROTO4(Byte *text, short length, ATMFixedMatrix *matrix, short *errorCode); |
||
297 | short (*xyshowTextErr) ATM_PROTO5(Byte *text, short length, ATMFixedMatrix *matrix, |
||
298 | Fixed *displacements, short *errorCode); |
||
299 | short (*getOutline) ATM_PROTO7(short c, ATMFixedMatrix *matrix, Ptr clientHook, |
||
300 | short (*MoveTo)(Ptr clientHook, ATMPFixedPoint pc), |
||
301 | short (*LineTo)(Ptr clientHook, ATMPFixedPoint pc), |
||
302 | short (*CurveTo)(Ptr clientHook, ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3), |
||
303 | short (*ClosePath)(Ptr clientHook)); |
||
304 | short (*startFill) ATM_PROTO1(void); |
||
305 | short (*fillMoveTo) ATM_PROTO1(ATMPFixedPoint pc); |
||
306 | short (*fillLineTo) ATM_PROTO1(ATMPFixedPoint pc); |
||
307 | short (*fillCurveTo) ATM_PROTO3(ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3); |
||
308 | short (*fillClosePath) ATM_PROTO1(void); |
||
309 | short (*endFill) ATM_PROTO1(void); |
||
310 | } ATMProcs4; |
||
311 | |||
312 | #define ATMProcs5Version 5 |
||
313 | #define ATMProcs8Version 8 |
||
314 | /* |
||
315 | * Note for version 5 and above. |
||
316 | * |
||
317 | * All the routines new for version 5 have pascal interfaces. |
||
318 | * Depending on how the interface is initialized, the older routines may or may not be |
||
319 | * pascal interface. |
||
320 | */ |
||
321 | typedef struct |
||
322 | { |
||
323 | long version; |
||
324 | ATM_LANG short (*fontAvailable) ATM_PROTO2(short family, short style); |
||
325 | ATM_LANG short (*showTextErr) ATM_PROTO4(Byte *text, short length, ATMFixedMatrix *matrix, ATMErr *errorCode); |
||
326 | ATM_LANG short (*xyshowTextErr) ATM_PROTO5(Byte *text, short length, ATMFixedMatrix *matrix, |
||
327 | Fixed *displacements, ATMErr *errorCode); |
||
328 | ATM_LANG short (*getOutline) ATM_PROTO7(short c, ATMFixedMatrix *matrix, Ptr clientHook, |
||
329 | short (*MoveTo)(Ptr clientHook, ATMPFixedPoint pc), |
||
330 | short (*LineTo)(Ptr clientHook, ATMPFixedPoint pc), |
||
331 | short (*CurveTo)(Ptr clientHook, ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3), |
||
332 | short (*ClosePath)(Ptr clientHook)); |
||
333 | ATM_LANG short (*startFill) ATM_PROTO1(void); |
||
334 | ATM_LANG short (*fillMoveTo) ATM_PROTO1(ATMPFixedPoint pc); |
||
335 | ATM_LANG short (*fillLineTo) ATM_PROTO1(ATMPFixedPoint pc); |
||
336 | ATM_LANG short (*fillCurveTo) ATM_PROTO3(ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3); |
||
337 | ATM_LANG short (*fillClosePath) ATM_PROTO1(void); |
||
338 | ATM_LANG short (*endFill) ATM_PROTO1(void); |
||
339 | |||
340 | /* New for version 5 -- control functions for use with control panel (&testing). */ |
||
341 | ATM_PASCAL void (*disable) ATM_PROTO1(void); |
||
342 | ATM_PASCAL void (*reenable) ATM_PROTO1(void); |
||
343 | |||
344 | /* New for version 5 (with blended fonts) */ |
||
345 | ATM_PASCAL short (*getBlendedFontType) ATM_PROTO2(StringPtr fontName, short fondID); |
||
346 | ATM_PASCAL ATMErr (*encodeBlendedFontName) ATM_PROTO4(StringPtr familyName, short numAxes, |
||
347 | Fixed *coords, StringPtr blendName); |
||
348 | ATM_PASCAL ATMErr (*decodeBlendedFontName) ATM_PROTO5(StringPtr blendName, StringPtr familyName, |
||
349 | short *numAxes, Fixed *coords, StringPtr displayInstanceStr); |
||
350 | ATM_PASCAL ATMErr (*addMacStyleToCoords) ATM_PROTO4(Fixed *coords, short macStyle, Fixed *newCoords, short *stylesLeft); |
||
351 | ATM_PASCAL ATMErr (*convertCoordsToBlend) ATM_PROTO2(Fixed *coords, Fixed *weightVector); |
||
352 | ATM_PASCAL ATMErr (*normToUserCoords) ATM_PROTO2(Fixed *normalCoords, Fixed *coords); |
||
353 | ATM_PASCAL ATMErr (*userToNormCoords) ATM_PROTO2(Fixed *coords, Fixed *normalCoords); |
||
354 | ATM_PASCAL ATMErr (*createTempBlendedFont) ATM_PROTO3(short numAxes, Fixed *coords, short *useFondID); |
||
355 | ATM_PASCAL ATMErr (*disposeTempBlendedFont) ATM_PROTO1(short fondID); |
||
356 | ATM_PASCAL ATMErr (*createPermBlendedFont) ATM_PROTO4(StringPtr fontName, short fontSize, short fontFileID, short *retFondID); |
||
357 | ATM_PASCAL ATMErr (*disposePermBlendedFont) ATM_PROTO1(short fondID); |
||
358 | ATM_PASCAL ATMErr (*getTempBlendedFontFileID) ATM_PROTO1(short *fileID); |
||
359 | ATM_PASCAL ATMErr (*getNumAxes) ATM_PROTO1(short *numAxes); |
||
360 | ATM_PASCAL ATMErr (*getNumMasters) ATM_PROTO1(short *numMasters); |
||
361 | ATM_PASCAL ATMErr (*getMasterFOND) ATM_PROTO2(short i, short *masterFOND); |
||
362 | ATM_PASCAL ATMErr (*copyFit) ATM_PROTO6(short method, Fixed TargetWidth, Fixed *beginCoords, |
||
363 | Fixed *baseWidths, Fixed *resultWidth, Fixed *resultCoords); |
||
364 | ATM_PASCAL ATMErr (*getFontSpecs) ATM_PROTO1(FontSpecs *hints); |
||
365 | ATM_PASCAL void (*private1) ATM_PROTO1(void); |
||
366 | ATM_PASCAL void (*private2) ATM_PROTO1(void); |
||
367 | ATM_PASCAL ATMErr (*showTextDesign) ATM_PROTO7(StringPtr fontFamily, Byte *text, short len, ATMFixedMatrix *matrix, |
||
368 | Fixed *coords, Fixed *displacements, short *lenDisplayed); |
||
369 | ATM_PASCAL ATMErr (*getAxisBlendInfo) ATM_PROTO6(short axis, short *userMin, short *userMax, |
||
370 | StringPtr type, StringPtr label, StringPtr shortLabel); |
||
371 | ATM_PASCAL ATMErr (*fontFit) ATM_PROTO7(Fixed *origCoords, short numTargets, short *varyAxes, |
||
372 | Fixed *targetMetrics, Fixed **masterMetrics, |
||
373 | Fixed *retCoords, Fixed *retWeightVector); |
||
374 | ATM_PASCAL ATMErr (*getNumBlessedFonts) ATM_PROTO1(short *numBlessedFonts); |
||
375 | ATM_PASCAL ATMErr (*getBlessedFontName) ATM_PROTO3(short i, StringPtr blessedFontName, Fixed *coords); |
||
376 | ATM_PASCAL ATMErr (*getRegularBlessedFont) ATM_PROTO1(short *regularIndex); |
||
377 | ATM_PASCAL ATMErr (*flushCache) ATM_PROTO1(void); |
||
378 | ATM_PASCAL ATMErr (*getFontFamilyFOND) ATM_PROTO2(StringPtr familyName, short *retFondID); |
||
379 | ATM_PASCAL ATMErr (*MMFontPicker) ATM_PROTO2(MMFP_Parms *parms, MMFP_Reply *reply); |
||
380 | |||
381 | /* New for version 8 (with faux fonts) */ |
||
382 | ATM_PASCAL Boolean (*isSubstFont) ATM_PROTO5(StringPtr fontName, short fondID, short style, FontSpecs ***fontSpecs, Handle *chamName); |
||
383 | ATM_PASCAL ATMErr (*spare02) ATM_PROTO1(void); /* expansion */ |
||
384 | ATM_PASCAL ATMErr (*getPSNum) ATM_PROTO3(StringPtr psName, short *retFondID, Boolean doCreate); |
||
385 | ATM_PASCAL ATMErr (*spare04) ATM_PROTO1(void); /* expansion */ |
||
386 | ATM_PASCAL ATMErr (*spare05) ATM_PROTO1(void); /* expansion */ |
||
387 | ATM_PASCAL ATMErr (*spare06) ATM_PROTO1(void); /* expansion */ |
||
388 | ATM_PASCAL ATMErr (*spare07) ATM_PROTO1(void); /* expansion */ |
||
389 | ATM_PASCAL ATMErr (*spare08) ATM_PROTO1(void); /* expansion */ |
||
390 | ATM_PASCAL ATMErr (*spare09) ATM_PROTO1(void); /* expansion */ |
||
391 | ATM_PASCAL ATMErr (*spare10) ATM_PROTO1(void); /* expansion */ |
||
392 | ATM_PASCAL ATMErr (*spare11) ATM_PROTO1(void); /* expansion */ |
||
393 | ATM_PASCAL ATMErr (*spare12) ATM_PROTO1(void); /* expansion */ |
||
394 | ATM_PASCAL ATMErr (*spare13) ATM_PROTO1(void); /* expansion */ |
||
395 | ATM_PASCAL ATMErr (*spare14) ATM_PROTO1(void); /* expansion */ |
||
396 | ATM_PASCAL ATMErr (*spare15) ATM_PROTO1(void); /* expansion */ |
||
397 | ATM_PASCAL ATMErr (*spare16) ATM_PROTO1(void); /* expansion */ |
||
398 | ATM_PASCAL ATMErr (*spare17) ATM_PROTO1(void); /* expansion */ |
||
399 | ATM_PASCAL ATMErr (*spare18) ATM_PROTO1(void); /* expansion */ |
||
400 | ATM_PASCAL ATMErr (*spare19) ATM_PROTO1(void); /* expansion */ |
||
401 | ATM_PASCAL ATMErr (*spare20) ATM_PROTO1(void); /* expansion */ |
||
402 | } ATMProcs5, ATMProcs8; |
||
403 | |||
404 | #define LATEST_VERSION ATMProcs8Version |
||
405 | #define LATEST_PROCS ATMProcs8 |
||
406 | |||
407 | /* **************** The following routines are available under ATMProcs3Version: **************** */ |
||
408 | |||
409 | #ifdef __cplusplus |
||
410 | extern "C" { |
||
411 | #endif |
||
412 | |||
413 | /* Initializes ATMInterface for a given version, returns 1 if and only if that version |
||
414 | of the ATM interface is available */ |
||
415 | short initVersionATM(short); |
||
416 | |||
417 | /* Initializes ATMInterface for a given version, returns 1 if and only if that version |
||
418 | of the ATM interface is available with the Pascal interfaces */ |
||
419 | short initPascalVersionATM(short); |
||
420 | |||
421 | /* Returns 1 if and only if ATM can image the specified family and style */ |
||
422 | short fontAvailableATM(short family, short style); |
||
423 | |||
424 | /* Show length characters starting at text transformed by the specified matrix */ |
||
425 | /* Returns the number of characters not shown */ |
||
426 | /* Matrix maps one point character space to device space, relative to current pen position */ |
||
427 | /* Matrix's tx and ty components are updated */ |
||
428 | short showTextATM(Byte *text, short length, ATMFixedMatrix *matrix); |
||
429 | |||
430 | /* Show length characters starting at text transformed by the specified matrix */ |
||
431 | /* Matrix maps one point character space to device space, relative to current pen position */ |
||
432 | /* Matrix's tx and ty components are updated */ |
||
433 | /* Character x and y widths are specified by displacements */ |
||
434 | /* Returns the number of characters not shown */ |
||
435 | short xyshowTextATM(Byte *text, short length, ATMFixedMatrix *matrix, ATMFixed *displacements); |
||
436 | |||
437 | #ifdef __cplusplus |
||
438 | } |
||
439 | #endif |
||
440 | |||
441 | /* ****************************** end of ATMProcs3Version routines ****************************** */ |
||
442 | |||
443 | /* **************** The following routines are available under ATMProcs4Version: **************** */ |
||
444 | |||
445 | #ifdef __cplusplus |
||
446 | extern "C" { |
||
447 | #endif |
||
448 | |||
449 | /* Initializes ATMInterface for a given version, returns 1 if and only if that version |
||
450 | of the ATM interface is available */ |
||
451 | short initVersionATM(short); |
||
452 | |||
453 | /* Returns 1 if and only if ATM can image the specified family and style */ |
||
454 | short fontAvailableATM(short family, short style); |
||
455 | |||
456 | /* These error codes are returned by the routines below: */ |
||
457 | #define ATM_NOERR (0) /* Normal return */ |
||
458 | #define ATM_NO_VALID_FONT (-1) /* can't find an outline font, or found a bad font - note that |
||
459 | * ATMGetOutline requires an outline font |
||
460 | * with exactly the current GrafPort's style(s) */ |
||
461 | #define ATM_CANTHAPPEN (-2) /* Internal ATM error */ |
||
462 | #define ATM_BAD_MATRIX (-3) /* Matrix inversion undefined or matrix too big */ |
||
463 | #define ATM_MEMORY (-4) /* Ran out of memory */ |
||
464 | #define ATM_WRONG_VERSION (-5) /* currently installed ATM driver doesn't support this interface */ |
||
465 | #define ATM_NOT_ON (-6) /* the ATM driver is missing or has been turned off */ |
||
466 | #define ATM_FILL_ORDER (-7) /* inconsistent fill calls, e.g. ATMFillMoveTo() without ATMStartFill() */ |
||
467 | #define ATM_CANCELLED (-8) /* the client halted an operation, e.g. a callback from ATMGetOutline returned 0 */ |
||
468 | #define ATM_NO_CHAR (-9) /* the font does not have an outline for this character code */ |
||
469 | #define ATM_BAD_LENGTH (-10) /* ATMShowText() or ATMxyShowText() was called with length argument <= 0 or > 255 */ |
||
470 | #define ATM_PIC_SAVE (-11) |
||
471 | #define ATM_NOT_BLENDED_FONT (-12) /* This font is not a blended font. */ |
||
472 | #define ATM_BASEDESIGN (-13) /* This operation is not allowed on a base design (eg. deleting FOND). */ |
||
473 | #define ATM_TEMPFONT_PROB (-14) /* We had a problem working with a temporary font. */ |
||
474 | #define ATM_ILL_OPER (-15) /* Can't perform this operation on this font. */ |
||
475 | #define ATM_FONTFIT_FAIL (-16) /* FontFit() failed (also from CopyFit()!). */ |
||
476 | #define ATM_MISS_BASEDESIGN (-17) /* Missing base design FOND. */ |
||
477 | #define ATM_NO_BLENDED_FONTS (-18) /* no Multiple Master fonts installed */ |
||
478 | #define ATM_PICKER_CANCELLED (-19) /* user hit Picker/Creator "Cancel" button */ |
||
479 | #define ATM_CREATE_FONT_FAIL (-20) /* general font creation failure */ |
||
480 | #define ATM_DISK_FULL (-21) /* out of disk space */ |
||
481 | #define ATM_WRITE_PROTECTED (-22) /* volume or file is locked */ |
||
482 | #define ATM_IO_ERROR (-23) /* I/O error */ |
||
483 | #define ATM_COPY_PROT (-24) /* font is copy-protected */ |
||
484 | #define ATM_PROT_OUTLINE (-25) /* this outline is copy-protected */ |
||
485 | |||
486 | /* new error code range so ATM error codes don't overrun any more OS error codes */ |
||
487 | #define ATM_SUBST_PROT (-2627) /* font substitution is copy-protected */ |
||
488 | #define ATM_SUBST_DISABLED (-2628) /* font substitution is turned off */ |
||
489 | |||
490 | /* new error codes for ATM's font substitution database. */ |
||
491 | #ifndef DB_FILE_EXPIRED |
||
492 | #define DB_FILE_EXPIRED -2500 /* Database has expired (beta only) */ |
||
493 | #define DB_FILE_DAMAGED -2501 /* Database has been damaged */ |
||
494 | #define DB_FILE_MISSING -2502 /* Font database missing */ |
||
495 | #define DB_FILE_BUSY -2503 /* Font database already in use */ |
||
496 | #define DB_OUT_OF_MEMORY -2504 /* Not enough memory for task */ |
||
497 | #define DB_FONT_NOT_FOUND -2505 /* Font not found in database */ |
||
498 | #define DB_BAD_REF_NUM -2506 /* Illegal ref_num sent to database */ |
||
499 | #define DB_BAD_VERSION -2507 /* Requested version not available */ |
||
500 | #define DB_NOT_A_MM_FONT -2508 /* Font is not Multiple Master Font */ |
||
501 | #endif |
||
502 | |||
503 | /* Show length characters starting at text transformed by the specified matrix */ |
||
504 | /* Returns the number of characters not shown */ |
||
505 | /* Matrix maps one point character space to device space, relative to current pen position */ |
||
506 | /* Matrix's tx and ty components are updated */ |
||
507 | /* *errorCode is set to ATM_NOERR if all went well, otherwise to one of the above error codes */ |
||
508 | short showTextATMErr(Byte *text, short length, ATMFixedMatrix *matrix, short *errorCode); |
||
509 | |||
510 | /* Show length characters starting at text transformed by the specified matrix */ |
||
511 | /* Matrix maps one point character space to device space, relative to current pen position */ |
||
512 | /* Matrix's tx and ty components are updated */ |
||
513 | /* Character x and y widths are specified by displacements */ |
||
514 | /* Returns the number of characters not shown */ |
||
515 | /* *errorCode is set to ATM_NOERR if all went well, otherwise to one of the above error codes */ |
||
516 | short xyshowTextATMErr(Byte *text, short length, ATMFixedMatrix *matrix, ATMFixed *displacements, short *errorCode); |
||
517 | |||
518 | /* Get, via call-back procs, the PostScript definition of a character outline */ |
||
519 | /* The call-backs should return 1 if they wish to continue being called for the remainder */ |
||
520 | /* of the current character; they should return 0 if they wish to terminate getOutlineATM */ |
||
521 | /* Returns ATM_NOERR if successful, otherwise one of the ATM error codes */ |
||
522 | /* Matrix maps one point character space to device space */ |
||
523 | short getOutlineATM(short c, ATMFixedMatrix *matrix, Ptr clientHook, |
||
524 | short (*MoveTo)(/* Ptr clientHook, ATMPFixedPoint pc */), |
||
525 | short (*LineTo)(/* Ptr clientHook, ATMPFixedPoint pc */), |
||
526 | short (*CurveTo)(/* Ptr clientHook, ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3 */), |
||
527 | short (*ClosePath)(/* Ptr clientHook */)); |
||
528 | |||
529 | /* Render the specified path according to the graphic state implicit in the current GrafPort */ |
||
530 | /* All these routines return ATM_NOERR if successful, otherwise one of the ATM error codes */ |
||
531 | |||
532 | short startFillATM(void); |
||
533 | short fillMoveToATM(ATMPFixedPoint pc); |
||
534 | short fillLineToATM(ATMPFixedPoint pc); |
||
535 | short fillCurveToATM(ATMPFixedPoint pc1, ATMPFixedPoint pc2, ATMPFixedPoint pc3); |
||
536 | short fillClosePathATM(void); |
||
537 | short endFillATM(void); |
||
538 | |||
539 | #ifdef __cplusplus |
||
540 | } |
||
541 | #endif |
||
542 | |||
543 | /* ****************************** end of ATMProcs4Version routines ****************************** */ |
||
544 | |||
545 | |||
546 | /* **************** The following routines are available under ATMProcs5Version: **************** */ |
||
547 | |||
548 | #ifdef __cplusplus |
||
549 | extern "C" { |
||
550 | #endif |
||
551 | |||
552 | /* Returns TRUE if the specified font is a multi-master or "blended" font. */ |
||
553 | /* Uses the "fontName" if not NULL, otherwise looks at the fondID. */ |
||
554 | short getBlendedFontTypeATM(StringPtr fontName, short fondID); |
||
555 | |||
556 | /* |
||
557 | * Given a "familyName" (eg. "Minion") and coordinates in the design space, create |
||
558 | * a blended font name. This really isn't implemented well as it doesn't add labels (yet). |
||
559 | */ |
||
560 | ATMErr encodeBlendedFontNameATM(StringPtr familyName, short numAxes, |
||
561 | Fixed *coords, StringPtr blendName); |
||
562 | |||
563 | /* |
||
564 | * Given a "Blended" fontName (eg. "Minion_67 BLD 2 CND"), return coordinates |
||
565 | * in the design space and the font's family name. The "family name" is really |
||
566 | * just the stuff before the '_' (eg. "Minion"), and the display instance string |
||
567 | * is the stuff afterwards (eg. "67 BLD 2 CND"). The "family name" could be |
||
568 | * "AdobeSans", "Adobe Sans" or "AdobeSan", as the only criteria is that the |
||
569 | * PostScript filename ("AdobeSan") can be derived from it according to the |
||
570 | * 533 rule (use first 5 letters from the first word, and first 3 letters from |
||
571 | * every word afterwards. |
||
572 | * |
||
573 | * You may pass NULL for any of the return parameters. |
||
574 | * |
||
575 | */ |
||
576 | ATMErr decodeBlendedFontNameATM(StringPtr blendName, StringPtr familyName, |
||
577 | short *numAxes, Fixed *coords, StringPtr displayInstanceStr); |
||
578 | |||
579 | /* |
||
580 | * When the BOLD bit is set on a multiple master font, we may add a calculated amount |
||
581 | * to the WEIGHT axis (if any). This routines returns the new coordinates for any given |
||
582 | * Mac style for this font. Note that a font designer may not choose to modify the |
||
583 | * coordinates for the Bold, Condensed or Expanded bits, so these will return unchanged. |
||
584 | * |
||
585 | * Whatever styles a blended font design can't handle is returned in "stylesLeft", though |
||
586 | * these styles might be handled by QuickDraw (like Outline, Shadow, etc). |
||
587 | */ |
||
588 | ATMErr addMacStyleToCoordsATM(Fixed *coords, short macStyle, Fixed *newCoords, short *stylesLeft); |
||
589 | |||
590 | /* |
||
591 | * Convert the design coordinates for the current font to a blend vector. This is necessary |
||
592 | * for those who need to output PostScript directlyÑthis is suitable for passing to |
||
593 | * the PostScript operator "makeBlendedFont". |
||
594 | */ |
||
595 | ATMErr convertCoordsToBlendATM(Fixed *coords, Fixed *weightVector); |
||
596 | |||
597 | /* |
||
598 | * Convert the design coordinates to a range usermin..usermax instead of 0.0..1.0. |
||
599 | */ |
||
600 | ATMErr normToUserCoordsATM(Fixed *normalCoords, Fixed *coords); |
||
601 | |||
602 | /* |
||
603 | * Convert the design coordinates to a range 0.0..1.0 instead of usermin..usermax. |
||
604 | */ |
||
605 | ATMErr userToNormCoordsATM(Fixed *coords, Fixed *normalCoords); |
||
606 | |||
607 | /* |
||
608 | * Create a temporary blended font for user interface purposes (so users can choose a blend). |
||
609 | * The first time, initialize "*useFondID" to zero and a new fondID will be returned. |
||
610 | * While displaying various blends, use the returned value in "*useFondID" until the user |
||
611 | * is satisfied. Then dispose of this font with disposeTempBlendedFontATM(). |
||
612 | * Don't expect the name of the font to be what you gave it, we may change it for internal reasons. |
||
613 | */ |
||
614 | ATMErr createTempBlendedFontATM(short numAxes, Fixed *coords, short *useFondID); |
||
615 | ATMErr disposeTempBlendedFontATM(short fondID); |
||
616 | |||
617 | /* |
||
618 | * Create a permanent blended font, of a given size in the given font file. |
||
619 | * Note that the zero-sized case is the only one supported, which will create a "dummy" |
||
620 | * 10 point font. |
||
621 | */ |
||
622 | ATMErr createPermBlendedFontATM(StringPtr fontName, short fontSize, short fontFileID, short *retFondID); |
||
623 | ATMErr disposePermBlendedFontATM(short fondID); |
||
624 | |||
625 | /* |
||
626 | * We store newly created fonts in a temporary file. If you wish to use it (ie, for the |
||
627 | * above routines), feel free. |
||
628 | */ |
||
629 | ATMErr getTempBlendedFontFileIDATM(short *fileID); |
||
630 | |||
631 | /* |
||
632 | * Given the family name (eg. "Minion") and axis ID, return the number of axes. |
||
633 | */ |
||
634 | ATMErr getNumAxesATM(short *numAxes); |
||
635 | |||
636 | /* |
||
637 | * Get the number of base designs (useful for the "CopyFit" routine, below). |
||
638 | */ |
||
639 | ATMErr getNumMastersATM(short *numMasters); |
||
640 | |||
641 | /* |
||
642 | * Get the i'th base design for the given multiple master font (useful for the "CopyFit" |
||
643 | * routine, below). |
||
644 | */ |
||
645 | ATMErr getMasterFONDATM(short i, short *masterFOND); |
||
646 | |||
647 | /* |
||
648 | * Used to choose a multiple-master instance that will match the given widths. |
||
649 | * First, fill in the baseWidths array with the width of the string for each one of |
||
650 | * the base designs. Then choose a method for us to follow (default, constantStems, varStems). |
||
651 | * Give us the targetWidth you want your string and the "beginDesign", which says what your |
||
652 | * original coords were. We will return the best fit we could find in resultDesign, and |
||
653 | * the actual width in resultWidth. |
||
654 | */ |
||
655 | ATMErr copyFitATM(short method, Fixed TargetWidth, Fixed *beginDesign, |
||
656 | Fixed *baseWidths, Fixed *resultWidth, Fixed *resultDesign); |
||
657 | |||
658 | /* |
||
659 | * This extends previous "ShowText" calls so that we can display strings without ever |
||
660 | * creating an explicit FOND (eventually). For the moment, "fontFamily" is ignored, and |
||
661 | * should be passed NULL (this is for future expansion). Pass NULL for "coords" unless |
||
662 | * this is a multiple master font. If "displacements" is NULL then we use the widths from |
||
663 | * the FOND/NFNT; otherwise "displacements" gives us the x and y deltas between each |
||
664 | * character. |
||
665 | */ |
||
666 | ATMErr showTextDesignATM(StringPtr fontFamily, Byte *text, short len, ATMFixedMatrix *matrix, |
||
667 | Fixed *coords, Fixed *displacements, short *lenDisplayed); |
||
668 | |||
669 | /* |
||
670 | * Given the family name (eg. "Minion") and axis ID, return information about the axis. |
||
671 | * Axis numbers start with 1. |
||
672 | * userMin, userMax - Lowest and highest values allowed on this axis. |
||
673 | * axisType - Type of axis. Examples are "Weight" for the weight axis and |
||
674 | * "Width" for the axis modifying width. |
||
675 | * axisLabel - What to label the axis (eg. "Weight"). |
||
676 | * numSubranges - How many labels for subranges there are (ie. Light, Medium, Bold). |
||
677 | * NOTE: passing NULL for any of the parameters ignores that parameter. Thus you don't always |
||
678 | * have to get ALL the information if you only want a little. |
||
679 | */ |
||
680 | ATMErr getAxisBlendInfoATM(short axis, short *userMin, short *userMax, StringPtr axisType, |
||
681 | StringPtr axisLabel, StringPtr axisShortLabel); |
||
682 | |||
683 | /* |
||
684 | * Get the specifications about the current font; this information can be used with |
||
685 | * fontFitATM(), below. |
||
686 | */ |
||
687 | ATMErr getFontSpecsATM(FontSpecs *specs); |
||
688 | |||
689 | /* |
||
690 | * This routine does some amazing calculations, and is the center of the code for dealing |
||
691 | * with copyfitting and other of the fancier multiple master operations. The current font |
||
692 | * and the "origCoords" is given to, for example, adjust a line typed in a multiple master |
||
693 | * typeface so that it exactly matches a given set of dimensions; here we will use string length |
||
694 | * and stem width. |
||
695 | * |
||
696 | * The numTargets is 2 (one for string length and one for stem width). The first entry in |
||
697 | * "targetMetrics" is the length you want the text to be (ie. the width of a column), and the |
||
698 | * second what you want the stem width to be (get this information from getFontSpecsATM(), above). |
||
699 | * The first entry in masterMetrics is a pointer to the widths of the strings at each master |
||
700 | * design (loop through the masters using getMasterFONDATM()). The second entry in masterMetrics |
||
701 | * is the stemwidths for each master design. fontFitATM tries to find the closest match |
||
702 | * possible by adjusting the axes given in varyAxes, and returns the results in retCoords |
||
703 | * and retWeightVector--if either argument is NULL, it is ignored. To get the axis id's, use |
||
704 | * getAxisBlendInfoATM and look for the "axisType". A list of type strings will be given (soon?). |
||
705 | */ |
||
706 | ATMErr fontFitATM(Fixed *origCoords, short numTargets, short *varyAxes, |
||
707 | Fixed *targetMetrics, Fixed **masterMetrics, |
||
708 | Fixed *retCoords, Fixed *retWeightVector); |
||
709 | |||
710 | /* |
||
711 | * There are a number of font instances for each multiple-master family that have been |
||
712 | * "blessed" by our Type group to go well together. The font names for this group can be |
||
713 | * gotten through the following calls: getNumBlessedFonts, getBlessedFontName, and |
||
714 | * getRegularBlessedFont. Most applications will not need these calls.... |
||
715 | * |
||
716 | * getNumBlessedFontsATM() finds how many "blessed" fonts exist. |
||
717 | */ |
||
718 | ATMErr getNumBlessedFontsATM(short *numBlessedFonts); |
||
719 | |||
720 | /* |
||
721 | * Get the nth "blessed" font name (see above discussion). "i" is indexed from 1. |
||
722 | */ |
||
723 | ATMErr getBlessedFontNameATM(short i, StringPtr blessedFontName, Fixed *coords); |
||
724 | |||
725 | /* |
||
726 | * When Adobe Illustrator and Adobe Type Reunion display a list of instances for a |
||
727 | * multiple master family, a "reasonable" choice for the default is chosen. The choice |
||
728 | * is given by this call. Essentially, this finds the equivalent of "Helvetica Regular" |
||
729 | * for multiple master fonts. |
||
730 | * |
||
731 | * The returned value "regularID" is to be used as input to getBlessedFontName. |
||
732 | */ |
||
733 | ATMErr getRegularBlessedFontATM(short *regularID); |
||
734 | |||
735 | /* |
||
736 | * This flushes ATM's font cache. This is basically the counterpart for System 7's |
||
737 | * FlushFonts function. |
||
738 | */ |
||
739 | ATMErr flushCacheATM(void); |
||
740 | |||
741 | /* |
||
742 | * When using many of the above calls for working with multiple master fonts, ATM |
||
743 | * expects the current font to be set to a font in the font family. What happens if |
||
744 | * you only have a font family name? This routine will return a fondID that is usable |
||
745 | * to handle information for that font family. |
||
746 | */ |
||
747 | ATMErr getFontFamilyFONDATM(StringPtr familyName, short *retFondID); |
||
748 | |||
749 | /* |
||
750 | * Multiple Master Font Picker/Creator interface. |
||
751 | * |
||
752 | * This call displays a dialog allowing the user to navigate through the |
||
753 | * design space of any installed Multiple Master font and to pick and/or |
||
754 | * create an instance within that design space. The caller receives |
||
755 | * information about the user's selection, if any. |
||
756 | * |
||
757 | * See MMFP_Parms and MMFP_Reply definitions, above, for a full description. |
||
758 | */ |
||
759 | ATMErr MMFontPickerATM( MMFP_Parms *parms, MMFP_Reply *reply ); |
||
760 | |||
761 | /* Used internally by ATM, don't use. */ |
||
762 | void disableATM(void); |
||
763 | void reenableATM(void); |
||
764 | |||
765 | /* ****************************** end of ATMProcs5Version routines ****************************** */ |
||
766 | |||
767 | /* **************** The following routines are available under ATMProcs8Version: **************** */ |
||
768 | /* |
||
769 | * Returns TRUE if this is a substitute font. |
||
770 | * If TRUE and fontSpecs != NULL, fontSpecs will return a handle to the |
||
771 | * fontSpecs record in the file. It is up to the caller to dispose of this |
||
772 | * handle when done. |
||
773 | * if TRUE and chamName != NULL, chamName will return a handle containing the |
||
774 | * PostScript name of the chameleon font used for substitution. It is up to |
||
775 | * the caller to dispose of this handle when done. |
||
776 | * If fontName is NULL, we use the "fondID" parameter; otherwise, the fondID |
||
777 | * parameter is ignored. |
||
778 | */ |
||
779 | Boolean isSubstFontATM(StringPtr fontName, short fondID, short style, FontSpecs ***fontSpecs, Handle *chamName); |
||
780 | |||
781 | /* |
||
782 | * If the PostScript name is in our database then create its FOND if the parameter |
||
783 | * "doCreate" is TRUE. It's expected that doCreate will generally be TRUE, but we've |
||
784 | * added the flexibility just in case an application wants to ask permission |
||
785 | * before creating the file. |
||
786 | * |
||
787 | * The application MUST check to see if a matching FOND already exists as this |
||
788 | * function will create a FOND every time. |
||
789 | * |
||
790 | * Note that this function does NOT provide a mapping between PostScript names and |
||
791 | * their associated FOND id and style--this must be implemented by the application. |
||
792 | */ |
||
793 | ATMErr getPSNumATM(StringPtr psName, short *retFondID, Boolean doCreate); |
||
794 | |||
795 | #ifdef __cplusplus |
||
796 | } |
||
797 | #endif |
||
798 | |||
799 | /* ****************************** end of ATMProcs8Version routines ****************************** */ |
||
800 | |||
801 | #endif /* _H_ATMInterface */ |