[5] | 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 */
|
---|