1 | /* Copyright (C) 1996-2001 Ghostgum Software Pty Ltd. All rights reserved.
|
---|
2 |
|
---|
3 | This software is provided AS-IS with no warranty, either express or
|
---|
4 | implied.
|
---|
5 |
|
---|
6 | This software is distributed under license and may not be copied,
|
---|
7 | modified or distributed except as expressly authorized under the terms
|
---|
8 | of the license contained in the file LICENSE in this distribution.
|
---|
9 |
|
---|
10 | For more information about licensing, please refer to
|
---|
11 | http://www.ghostscript.com/licensing/. For information on
|
---|
12 | commercial licensing, go to http://www.artifex.com/licensing/ or
|
---|
13 | contact Artifex Software, Inc., 101 Lucas Valley Road #110,
|
---|
14 | San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
---|
15 | */
|
---|
16 |
|
---|
17 | /* $Id: iapi.h,v 1.6 2002/06/16 04:47:10 lpd Exp $ */
|
---|
18 |
|
---|
19 | /*
|
---|
20 | * Public API for Ghostscript interpreter
|
---|
21 | * for use both as DLL and for static linking.
|
---|
22 | *
|
---|
23 | * Should work for Windows, OS/2, Linux, Mac.
|
---|
24 | *
|
---|
25 | * DLL exported functions should be as similar as possible to imain.c
|
---|
26 | * You will need to include "errors.h".
|
---|
27 | *
|
---|
28 | * Current problems:
|
---|
29 | * 1. Ghostscript does not support multiple instances.
|
---|
30 | * 2. Global variables in gs_main_instance_default()
|
---|
31 | * and gsapi_instance_counter
|
---|
32 | */
|
---|
33 |
|
---|
34 | /* Exported functions may need different prefix
|
---|
35 | * GSDLLEXPORT marks functions as exported
|
---|
36 | * GSDLLAPI is the calling convention used on functions exported
|
---|
37 | * by Ghostscript
|
---|
38 | * GSDLLCALL is used on callback functions called by Ghostscript
|
---|
39 | * When you include this header file in the caller, you may
|
---|
40 | * need to change the definitions by defining these
|
---|
41 | * before including this header file.
|
---|
42 | * Make sure you get the calling convention correct, otherwise your
|
---|
43 | * program will crash either during callbacks or soon after returning
|
---|
44 | * due to stack corruption.
|
---|
45 | */
|
---|
46 |
|
---|
47 | #ifndef iapi_INCLUDED
|
---|
48 | # define iapi_INCLUDED
|
---|
49 |
|
---|
50 | #ifdef __WINDOWS__
|
---|
51 | # define _Windows
|
---|
52 | #endif
|
---|
53 |
|
---|
54 | #ifdef _Windows
|
---|
55 | # ifndef GSDLLEXPORT
|
---|
56 | # define GSDLLEXPORT __declspec(dllexport)
|
---|
57 | # endif
|
---|
58 | # ifndef GSDLLAPI
|
---|
59 | # define GSDLLAPI __stdcall
|
---|
60 | # endif
|
---|
61 | # ifndef GSDLLCALL
|
---|
62 | # define GSDLLCALL __stdcall
|
---|
63 | # endif
|
---|
64 | #endif /* _Windows */
|
---|
65 |
|
---|
66 | #if defined(__OS2__) && defined(__IBMC__)
|
---|
67 | # ifndef GSDLLAPI
|
---|
68 | # define GSDLLAPI _System
|
---|
69 | # endif
|
---|
70 | # ifndef GSDLLCALL
|
---|
71 | # define GSDLLCALL _System
|
---|
72 | # endif
|
---|
73 | #endif /* OS2 && __IBMC */
|
---|
74 |
|
---|
75 | #ifdef __MACINTOSH__
|
---|
76 | # pragma export on
|
---|
77 | #endif
|
---|
78 |
|
---|
79 | #ifndef GSDLLEXPORT
|
---|
80 | # define GSDLLEXPORT
|
---|
81 | #endif
|
---|
82 | #ifndef GSDLLAPI
|
---|
83 | # define GSDLLAPI
|
---|
84 | #endif
|
---|
85 | #ifndef GSDLLCALL
|
---|
86 | # define GSDLLCALL
|
---|
87 | #endif
|
---|
88 |
|
---|
89 | #if defined(__IBMC__)
|
---|
90 | # define GSDLLAPIPTR * GSDLLAPI
|
---|
91 | # define GSDLLCALLPTR * GSDLLCALL
|
---|
92 | #else
|
---|
93 | # define GSDLLAPIPTR GSDLLAPI *
|
---|
94 | # define GSDLLCALLPTR GSDLLCALL *
|
---|
95 | #endif
|
---|
96 |
|
---|
97 | #ifndef gs_main_instance_DEFINED
|
---|
98 | # define gs_main_instance_DEFINED
|
---|
99 | typedef struct gs_main_instance_s gs_main_instance;
|
---|
100 | #endif
|
---|
101 | #ifndef display_callback_DEFINED
|
---|
102 | # define display_callback_DEFINED
|
---|
103 | typedef struct display_callback_s display_callback;
|
---|
104 | #endif
|
---|
105 |
|
---|
106 | typedef struct gsapi_revision_s {
|
---|
107 | const char *product;
|
---|
108 | const char *copyright;
|
---|
109 | long revision;
|
---|
110 | long revisiondate;
|
---|
111 | } gsapi_revision_t;
|
---|
112 |
|
---|
113 |
|
---|
114 | /* Get version numbers and strings.
|
---|
115 | * This is safe to call at any time.
|
---|
116 | * You should call this first to make sure that the correct version
|
---|
117 | * of the Ghostscript is being used.
|
---|
118 | * pr is a pointer to a revision structure.
|
---|
119 | * len is the size of this structure in bytes.
|
---|
120 | * Returns 0 if OK, or if len too small (additional parameters
|
---|
121 | * have been added to the structure) it will return the required
|
---|
122 | * size of the structure.
|
---|
123 | */
|
---|
124 | GSDLLEXPORT int GSDLLAPI
|
---|
125 | gsapi_revision(gsapi_revision_t *pr, int len);
|
---|
126 |
|
---|
127 | /*
|
---|
128 | * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
---|
129 | * Ghostscript supports only one instance.
|
---|
130 | * The current implementation uses a global static instance
|
---|
131 | * counter to make sure that only a single instance is used.
|
---|
132 | * If you try to create two instances, the second attempt
|
---|
133 | * will return < 0 and set pinstance to NULL.
|
---|
134 | * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
---|
135 | */
|
---|
136 | /* Create a new instance of Ghostscript.
|
---|
137 | * This instance is passed to most other API functions.
|
---|
138 | * The caller_handle will be provided to callback functions.
|
---|
139 | */
|
---|
140 |
|
---|
141 | GSDLLEXPORT int GSDLLAPI
|
---|
142 | gsapi_new_instance(gs_main_instance **pinstance, void *caller_handle);
|
---|
143 |
|
---|
144 | /*
|
---|
145 | * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
---|
146 | * Ghostscript supports only one instance.
|
---|
147 | * The current implementation uses a global static instance
|
---|
148 | * counter to make sure that only a single instance is used.
|
---|
149 | * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
---|
150 | */
|
---|
151 | /* Destroy an instance of Ghostscript
|
---|
152 | * Before you call this, Ghostscript must have finished.
|
---|
153 | * If Ghostscript has been initialised, you must call gsapi_exit()
|
---|
154 | * before gsapi_delete_instance.
|
---|
155 | */
|
---|
156 | GSDLLEXPORT void GSDLLAPI
|
---|
157 | gsapi_delete_instance(gs_main_instance *instance);
|
---|
158 |
|
---|
159 | /* Set the callback functions for stdio
|
---|
160 | * The stdin callback function should return the number of
|
---|
161 | * characters read, 0 for EOF, or -1 for error.
|
---|
162 | * The stdout and stderr callback functions should return
|
---|
163 | * the number of characters written.
|
---|
164 | * If a callback address is NULL, the real stdio will be used.
|
---|
165 | */
|
---|
166 | GSDLLEXPORT int GSDLLAPI
|
---|
167 | gsapi_set_stdio(gs_main_instance *instance,
|
---|
168 | int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len),
|
---|
169 | int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len),
|
---|
170 | int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len));
|
---|
171 |
|
---|
172 | /* Set the callback function for polling.
|
---|
173 | * This is used for handling window events or cooperative
|
---|
174 | * multitasking. This function will only be called if
|
---|
175 | * Ghostscript was compiled with CHECK_INTERRUPTS
|
---|
176 | * as described in gpcheck.h.
|
---|
177 | */
|
---|
178 | GSDLLEXPORT int GSDLLAPI gsapi_set_poll(gs_main_instance *instance,
|
---|
179 | int (GSDLLCALLPTR poll_fn)(void *caller_handle));
|
---|
180 |
|
---|
181 | /* Set the display device callback structure.
|
---|
182 | * If the display device is used, this must be called
|
---|
183 | * after gsapi_new_instance() and before gsapi_init_with_args().
|
---|
184 | * See gdevdisp.h for more details.
|
---|
185 | */
|
---|
186 | GSDLLEXPORT int GSDLLAPI gsapi_set_display_callback(
|
---|
187 | gs_main_instance *instance, display_callback *callback);
|
---|
188 |
|
---|
189 |
|
---|
190 | /* Initialise the interpreter.
|
---|
191 | * This calls gs_main_init_with_args() in imainarg.c
|
---|
192 | * 1. If quit or EOF occur during gsapi_init_with_args(),
|
---|
193 | * the return value will be e_Quit. This is not an error.
|
---|
194 | * You must call gsapi_exit() and must not call any other
|
---|
195 | * gsapi_XXX functions.
|
---|
196 | * 2. If usage info should be displayed, the return value will be e_Info
|
---|
197 | * which is not an error. Do not call gsapi_exit().
|
---|
198 | * 3. Under normal conditions this returns 0. You would then
|
---|
199 | * call one or more gsapi_run_*() functions and then finish
|
---|
200 | * with gsapi_exit().
|
---|
201 | */
|
---|
202 | GSDLLEXPORT int GSDLLAPI gsapi_init_with_args(gs_main_instance *instance,
|
---|
203 | int argc, char **argv);
|
---|
204 |
|
---|
205 | /*
|
---|
206 | * The gsapi_run_* functions are like gs_main_run_* except
|
---|
207 | * that the error_object is omitted.
|
---|
208 | * If these functions return <= -100, either quit or a fatal
|
---|
209 | * error has occured. You then call gsapi_exit() next.
|
---|
210 | * The only exception is gsapi_run_string_continue()
|
---|
211 | * which will return e_NeedInput if all is well.
|
---|
212 | */
|
---|
213 |
|
---|
214 | GSDLLEXPORT int GSDLLAPI
|
---|
215 | gsapi_run_string_begin(gs_main_instance *instance,
|
---|
216 | int user_errors, int *pexit_code);
|
---|
217 |
|
---|
218 | GSDLLEXPORT int GSDLLAPI
|
---|
219 | gsapi_run_string_continue(gs_main_instance *instance,
|
---|
220 | const char *str, unsigned int length, int user_errors, int *pexit_code);
|
---|
221 |
|
---|
222 | GSDLLEXPORT int GSDLLAPI
|
---|
223 | gsapi_run_string_end(gs_main_instance *instance,
|
---|
224 | int user_errors, int *pexit_code);
|
---|
225 |
|
---|
226 | GSDLLEXPORT int GSDLLAPI
|
---|
227 | gsapi_run_string_with_length(gs_main_instance *instance,
|
---|
228 | const char *str, unsigned int length, int user_errors, int *pexit_code);
|
---|
229 |
|
---|
230 | GSDLLEXPORT int GSDLLAPI
|
---|
231 | gsapi_run_string(gs_main_instance *instance,
|
---|
232 | const char *str, int user_errors, int *pexit_code);
|
---|
233 |
|
---|
234 | GSDLLEXPORT int GSDLLAPI
|
---|
235 | gsapi_run_file(gs_main_instance *instance,
|
---|
236 | const char *file_name, int user_errors, int *pexit_code);
|
---|
237 |
|
---|
238 |
|
---|
239 | /* Exit the interpreter.
|
---|
240 | * This must be called on shutdown if gsapi_init_with_args()
|
---|
241 | * has been called, and just before gsapi_delete_instance().
|
---|
242 | */
|
---|
243 | GSDLLEXPORT int GSDLLAPI
|
---|
244 | gsapi_exit(gs_main_instance *instance);
|
---|
245 |
|
---|
246 | /* Visual Tracer */
|
---|
247 | /* This function is only for debug purpose clients */
|
---|
248 | struct vd_trace_interface_s;
|
---|
249 | GSDLLEXPORT void GSDLLAPI
|
---|
250 | gsapi_set_visual_tracer(struct vd_trace_interface_s *I);
|
---|
251 |
|
---|
252 |
|
---|
253 | /* function prototypes */
|
---|
254 | typedef int (GSDLLAPIPTR PFN_gsapi_revision)(
|
---|
255 | gsapi_revision_t *pr, int len);
|
---|
256 | typedef int (GSDLLAPIPTR PFN_gsapi_new_instance)(
|
---|
257 | gs_main_instance **pinstance, void *caller_handle);
|
---|
258 | typedef void (GSDLLAPIPTR PFN_gsapi_delete_instance)(
|
---|
259 | gs_main_instance *instance);
|
---|
260 | typedef int (GSDLLAPIPTR PFN_gsapi_set_stdio)(gs_main_instance *instance,
|
---|
261 | int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len),
|
---|
262 | int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len),
|
---|
263 | int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len));
|
---|
264 | typedef int (GSDLLAPIPTR PFN_gsapi_set_poll)(gs_main_instance *instance,
|
---|
265 | int(GSDLLCALLPTR poll_fn)(void *caller_handle));
|
---|
266 | typedef int (GSDLLAPIPTR PFN_gsapi_set_display_callback)(
|
---|
267 | gs_main_instance *instance, display_callback *callback);
|
---|
268 | typedef int (GSDLLAPIPTR PFN_gsapi_init_with_args)(
|
---|
269 | gs_main_instance *instance, int argc, char **argv);
|
---|
270 | typedef int (GSDLLAPIPTR PFN_gsapi_run_string_begin)(
|
---|
271 | gs_main_instance *instance, int user_errors, int *pexit_code);
|
---|
272 | typedef int (GSDLLAPIPTR PFN_gsapi_run_string_continue)(
|
---|
273 | gs_main_instance *instance, const char *str, unsigned int length,
|
---|
274 | int user_errors, int *pexit_code);
|
---|
275 | typedef int (GSDLLAPIPTR PFN_gsapi_run_string_end)(
|
---|
276 | gs_main_instance *instance, int user_errors, int *pexit_code);
|
---|
277 | typedef int (GSDLLAPIPTR PFN_gsapi_run_string_with_length)(
|
---|
278 | gs_main_instance *instance, const char *str, unsigned int length,
|
---|
279 | int user_errors, int *pexit_code);
|
---|
280 | typedef int (GSDLLAPIPTR PFN_gsapi_run_string)(
|
---|
281 | gs_main_instance *instance, const char *str,
|
---|
282 | int user_errors, int *pexit_code);
|
---|
283 | typedef int (GSDLLAPIPTR PFN_gsapi_run_file)(gs_main_instance *instance,
|
---|
284 | const char *file_name, int user_errors, int *pexit_code);
|
---|
285 | typedef int (GSDLLAPIPTR PFN_gsapi_exit)(gs_main_instance *instance);
|
---|
286 | typedef void (GSDLLAPIPTR PFN_gsapi_set_visual_tracer)
|
---|
287 | (struct vd_trace_interface_s *I);
|
---|
288 |
|
---|
289 |
|
---|
290 | #ifdef __MACINTOSH__
|
---|
291 | #pragma export off
|
---|
292 | #endif
|
---|
293 |
|
---|
294 | #endif /* iapi_INCLUDED */
|
---|