ReactOS 0.4.16-dev-1025-gd3456f5
ftrfork.h
Go to the documentation of this file.
1/****************************************************************************
2 *
3 * ftrfork.h
4 *
5 * Embedded resource forks accessor (specification).
6 *
7 * Copyright (C) 2004-2019 by
8 * Masatake YAMATO and Redhat K.K.
9 *
10 * This file is part of the FreeType project, and may only be used,
11 * modified, and distributed under the terms of the FreeType project
12 * license, LICENSE.TXT. By continuing to use, modify, or distribute
13 * this file you indicate that you have read the license and
14 * understand and accept it fully.
15 *
16 */
17
18/****************************************************************************
19 * Development of the code in this file is support of
20 * Information-technology Promotion Agency, Japan.
21 */
22
23
24#ifndef FTRFORK_H_
25#define FTRFORK_H_
26
27
28#include <ft2build.h>
29#include FT_INTERNAL_OBJECTS_H
30
31
33
34
35 /* Number of guessing rules supported in `FT_Raccess_Guess'. */
36 /* Don't forget to increment the number if you add a new guessing rule. */
37#define FT_RACCESS_N_RULES 9
38
39
40 /* A structure to describe a reference in a resource by its resource ID */
41 /* and internal offset. The `POST' resource expects to be concatenated */
42 /* by the order of resource IDs instead of its appearance in the file. */
43
44 typedef struct FT_RFork_Ref_
45 {
48
50
51
52#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
53 typedef FT_Error
54 (*ft_raccess_guess_func)( FT_Library library,
56 char *base_file_name,
57 char **result_file_name,
58 FT_Long *result_offset );
59
60 typedef enum FT_RFork_Rule_ {
61 FT_RFork_Rule_invalid = -2,
62 FT_RFork_Rule_uknown, /* -1 */
63 FT_RFork_Rule_apple_double,
64 FT_RFork_Rule_apple_single,
65 FT_RFork_Rule_darwin_ufs_export,
66 FT_RFork_Rule_darwin_newvfs,
67 FT_RFork_Rule_darwin_hfsplus,
68 FT_RFork_Rule_vfat,
69 FT_RFork_Rule_linux_cap,
70 FT_RFork_Rule_linux_double,
71 FT_RFork_Rule_linux_netatalk
72 } FT_RFork_Rule;
73
74 /* For fast translation between rule index and rule type,
75 * the macros FT_RFORK_xxx should be kept consistent with the
76 * raccess_guess_funcs table
77 */
78 typedef struct ft_raccess_guess_rec_ {
79 ft_raccess_guess_func func;
80 FT_RFork_Rule type;
81 } ft_raccess_guess_rec;
82
83
84#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
85 static const type name[] = {
86#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
87 { raccess_guess_ ## func_suffix, \
88 FT_RFork_Rule_ ## type_suffix },
89 /* this array is a storage, thus a final `;' is needed */
90#define CONST_FT_RFORK_RULE_ARRAY_END };
91
92#endif /* FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
93
94
95 /**************************************************************************
96 *
97 * @function:
98 * FT_Raccess_Guess
99 *
100 * @description:
101 * Guess a file name and offset where the actual resource fork is stored.
102 * The macro FT_RACCESS_N_RULES holds the number of guessing rules; the
103 * guessed result for the Nth rule is represented as a triplet: a new
104 * file name (new_names[N]), a file offset (offsets[N]), and an error
105 * code (errors[N]).
106 *
107 * @input:
108 * library ::
109 * A FreeType library instance.
110 *
111 * stream ::
112 * A file stream containing the resource fork.
113 *
114 * base_name ::
115 * The (base) file name of the resource fork used for some guessing
116 * rules.
117 *
118 * @output:
119 * new_names ::
120 * An array of guessed file names in which the resource forks may
121 * exist. If 'new_names[N]' is `NULL`, the guessed file name is equal
122 * to `base_name`.
123 *
124 * offsets ::
125 * An array of guessed file offsets. 'offsets[N]' holds the file
126 * offset of the possible start of the resource fork in file
127 * 'new_names[N]'.
128 *
129 * errors ::
130 * An array of FreeType error codes. 'errors[N]' is the error code of
131 * Nth guessing rule function. If 'errors[N]' is not FT_Err_Ok,
132 * 'new_names[N]' and 'offsets[N]' are meaningless.
133 */
134 FT_BASE( void )
137 char* base_name,
138 char** new_names,
140 FT_Error* errors );
141
142
143 /**************************************************************************
144 *
145 * @function:
146 * FT_Raccess_Get_HeaderInfo
147 *
148 * @description:
149 * Get the information from the header of resource fork. The information
150 * includes the file offset where the resource map starts, and the file
151 * offset where the resource data starts. `FT_Raccess_Get_DataOffsets`
152 * requires these two data.
153 *
154 * @input:
155 * library ::
156 * A FreeType library instance.
157 *
158 * stream ::
159 * A file stream containing the resource fork.
160 *
161 * rfork_offset ::
162 * The file offset where the resource fork starts.
163 *
164 * @output:
165 * map_offset ::
166 * The file offset where the resource map starts.
167 *
168 * rdata_pos ::
169 * The file offset where the resource data starts.
170 *
171 * @return:
172 * FreeType error code. FT_Err_Ok means success.
173 */
177 FT_Long rfork_offset,
178 FT_Long *map_offset,
179 FT_Long *rdata_pos );
180
181
182 /**************************************************************************
183 *
184 * @function:
185 * FT_Raccess_Get_DataOffsets
186 *
187 * @description:
188 * Get the data offsets for a tag in a resource fork. Offsets are stored
189 * in an array because, in some cases, resources in a resource fork have
190 * the same tag.
191 *
192 * @input:
193 * library ::
194 * A FreeType library instance.
195 *
196 * stream ::
197 * A file stream containing the resource fork.
198 *
199 * map_offset ::
200 * The file offset where the resource map starts.
201 *
202 * rdata_pos ::
203 * The file offset where the resource data starts.
204 *
205 * tag ::
206 * The resource tag.
207 *
208 * sort_by_res_id ::
209 * A Boolean to sort the fragmented resource by their ids. The
210 * fragmented resources for 'POST' resource should be sorted to restore
211 * Type1 font properly. For 'sfnt' resources, sorting may induce a
212 * different order of the faces in comparison to that by QuickDraw API.
213 *
214 * @output:
215 * offsets ::
216 * The stream offsets for the resource data specified by 'tag'. This
217 * array is allocated by the function, so you have to call @ft_mem_free
218 * after use.
219 *
220 * count ::
221 * The length of offsets array.
222 *
223 * @return:
224 * FreeType error code. FT_Err_Ok means success.
225 *
226 * @note:
227 * Normally you should use `FT_Raccess_Get_HeaderInfo` to get the value
228 * for `map_offset` and `rdata_pos`.
229 */
233 FT_Long map_offset,
234 FT_Long rdata_pos,
235 FT_Long tag,
236 FT_Bool sort_by_res_id,
238 FT_Long *count );
239
240
242
243#endif /* FTRFORK_H_ */
244
245
246/* END */
FT_Library library
Definition: cffdrivr.c:661
#define FT_BASE(x)
Definition: ftconfig.h:407
#define FT_END_HEADER
Definition: ftheader.h:54
#define FT_BEGIN_HEADER
Definition: ftheader.h:36
struct FT_RFork_Ref_ FT_RFork_Ref
FT_Raccess_Guess(FT_Library library, FT_Stream stream, char *base_name, char **new_names, FT_Long *offsets, FT_Error *errors)
Definition: ftrfork.c:917
FT_Raccess_Get_HeaderInfo(FT_Library library, FT_Stream stream, FT_Long rfork_offset, FT_Long *map_offset, FT_Long *rdata_pos)
Definition: ftrfork.c:51
FT_Raccess_Get_DataOffsets(FT_Library library, FT_Stream stream, FT_Long map_offset, FT_Long rdata_pos, FT_Long tag, FT_Bool sort_by_res_id, FT_Long **offsets, FT_Long *count)
Definition: ftrfork.c:185
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
int FT_Error
Definition: fttypes.h:299
signed long FT_Long
Definition: fttypes.h:242
signed short FT_Short
Definition: fttypes.h:198
static const FxOffsetAndName offsets[]
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum func
Definition: glext.h:6028
FT_Long offset
Definition: ftrfork.h:47
FT_Short res_id
Definition: ftrfork.h:46
Definition: parse.h:23
Definition: ecma_167.h:138