source: trunk/pdr/include/iapi.h

Last change on this file was 5, checked in by bart, 17 years ago

Initial check in of port driver source

File size: 10.3 KB
Line 
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
99typedef struct gs_main_instance_s gs_main_instance;
100#endif
101#ifndef display_callback_DEFINED
102# define display_callback_DEFINED
103typedef struct display_callback_s display_callback;
104#endif
105
106typedef 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 */
124GSDLLEXPORT int GSDLLAPI
125gsapi_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
141GSDLLEXPORT int GSDLLAPI
142gsapi_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 */
156GSDLLEXPORT void GSDLLAPI
157gsapi_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 */
166GSDLLEXPORT int GSDLLAPI
167gsapi_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 */
178GSDLLEXPORT 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 */
186GSDLLEXPORT 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 */
202GSDLLEXPORT 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
214GSDLLEXPORT int GSDLLAPI
215gsapi_run_string_begin(gs_main_instance *instance,
216 int user_errors, int *pexit_code);
217
218GSDLLEXPORT int GSDLLAPI
219gsapi_run_string_continue(gs_main_instance *instance,
220 const char *str, unsigned int length, int user_errors, int *pexit_code);
221
222GSDLLEXPORT int GSDLLAPI
223gsapi_run_string_end(gs_main_instance *instance,
224 int user_errors, int *pexit_code);
225
226GSDLLEXPORT int GSDLLAPI
227gsapi_run_string_with_length(gs_main_instance *instance,
228 const char *str, unsigned int length, int user_errors, int *pexit_code);
229
230GSDLLEXPORT int GSDLLAPI
231gsapi_run_string(gs_main_instance *instance,
232 const char *str, int user_errors, int *pexit_code);
233
234GSDLLEXPORT int GSDLLAPI
235gsapi_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 */
243GSDLLEXPORT int GSDLLAPI
244gsapi_exit(gs_main_instance *instance);
245
246/* Visual Tracer */
247/* This function is only for debug purpose clients */
248struct vd_trace_interface_s;
249GSDLLEXPORT void GSDLLAPI
250gsapi_set_visual_tracer(struct vd_trace_interface_s *I);
251
252
253/* function prototypes */
254typedef int (GSDLLAPIPTR PFN_gsapi_revision)(
255 gsapi_revision_t *pr, int len);
256typedef int (GSDLLAPIPTR PFN_gsapi_new_instance)(
257 gs_main_instance **pinstance, void *caller_handle);
258typedef void (GSDLLAPIPTR PFN_gsapi_delete_instance)(
259 gs_main_instance *instance);
260typedef 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));
264typedef int (GSDLLAPIPTR PFN_gsapi_set_poll)(gs_main_instance *instance,
265 int(GSDLLCALLPTR poll_fn)(void *caller_handle));
266typedef int (GSDLLAPIPTR PFN_gsapi_set_display_callback)(
267 gs_main_instance *instance, display_callback *callback);
268typedef int (GSDLLAPIPTR PFN_gsapi_init_with_args)(
269 gs_main_instance *instance, int argc, char **argv);
270typedef int (GSDLLAPIPTR PFN_gsapi_run_string_begin)(
271 gs_main_instance *instance, int user_errors, int *pexit_code);
272typedef 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);
275typedef int (GSDLLAPIPTR PFN_gsapi_run_string_end)(
276 gs_main_instance *instance, int user_errors, int *pexit_code);
277typedef 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);
280typedef int (GSDLLAPIPTR PFN_gsapi_run_string)(
281 gs_main_instance *instance, const char *str,
282 int user_errors, int *pexit_code);
283typedef int (GSDLLAPIPTR PFN_gsapi_run_file)(gs_main_instance *instance,
284 const char *file_name, int user_errors, int *pexit_code);
285typedef int (GSDLLAPIPTR PFN_gsapi_exit)(gs_main_instance *instance);
286typedef 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 */
Note: See TracBrowser for help on using the repository browser.