Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_tlsv12/sys/src/cmd/gs/src/imain.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1995, 1996, 1999 Aladdin Enterprises.  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: imain.h,v 1.9 2004/08/04 23:33:29 stefan Exp $ */
18
/* Interface to imain.c */
19
/* Requires <stdio.h>, stdpre.h, gsmemory.h, gstypes.h, iref.h */
20
 
21
#ifndef imain_INCLUDED
22
#  define imain_INCLUDED
23
 
24
#include "gsexit.h"		/* exported by imain.c */
25
 
26
/*
27
 * This file defines the intended API between client front ends
28
 * (such as imainarg.c, the command-line-driven front end)
29
 * and imain.c, which provides top-level control of the interpreter.
30
 */
31
 
32
/* ================ Types ================ */
33
 
34
/*
35
 * Currently, the interpreter has a lot of static variables, but
36
 * eventually it will have none, so that clients will be able to make
37
 * multiple instances of it.  In anticipation of this, many of the
38
 * top-level API calls take an interpreter instance (gs_main_instance *)
39
 * as their first argument.
40
 */
41
#ifndef gs_main_instance_DEFINED
42
#  define gs_main_instance_DEFINED
43
typedef struct gs_main_instance_s gs_main_instance;
44
#endif
45
 
46
/* ================ Exported procedures from imain.c ================ */
47
 
48
/* get minst from memory is a hack to allow parts of the system 
49
 * to reach minst, slightly better than a global
50
 */
51
gs_main_instance* get_minst_from_memory(const gs_memory_t *mem);
52
 
53
/* ---------------- Instance creation ---------------- */
54
 
55
/*
56
 * NB: multiple instances are not supported yet
57
 * 
58
 * // add usage documentation
59
 */
60
gs_main_instance *gs_main_alloc_instance(gs_memory_t *); 
61
 
62
/* ---------------- Initialization ---------------- */
63
 
64
/*
65
 * The interpreter requires three initialization steps, called init0,
66
 * init1, and init2.  These steps must be done in that order, but
67
 * init1 may be omitted.
68
 */
69
 
70
/*
71
 * init0 records the files to be used for stdio, and initializes the
72
 * graphics library, the file search paths, and other instance data.
73
 */
74
int gs_main_init0(gs_main_instance *minst, FILE *in, FILE *out, FILE *err,
75
		  int max_lib_paths);
76
 
77
/*
78
 * init1 initializes the memory manager and other internal data
79
 * structures such as the name table, the token scanner tables,
80
 * dictionaries such as systemdict, and the interpreter stacks.
81
 */
82
int gs_main_init1(gs_main_instance * minst);
83
 
84
/*
85
 * init2 finishes preparing the interpreter for use by running
86
 * initialization files with PostScript procedure definitions.
87
 */
88
int gs_main_init2(gs_main_instance * minst);
89
 
90
/*
91
 * The runlibfile operator uses a search path, as described in
92
 * Use.htm, for looking up file names.  Each interpreter instance has
93
 * its own search path.  The following call adds a directory or set of
94
 * directories to the search path; it is equivalent to the -I command
95
 * line switch.  It may be called any time after init0.
96
 */
97
int gs_main_add_lib_path(gs_main_instance * minst, const char *path);
98
 
99
/*
100
 * Under certain internal conditions, the search path may temporarily
101
 * be in an inconsistent state; gs_main_set_lib_paths takes care of
102
 * this.  Clients should never need to call this procedure, and
103
 * eventually it may be removed.
104
 */
105
int gs_main_set_lib_paths(gs_main_instance * minst);
106
 
107
/*
108
 * Open a PostScript file using the search path.  Clients should
109
 * never need to call this procedure, since gs_main_run_file opens the
110
 * file itself, and eventually the procedure may be removed.
111
 */
112
int gs_main_lib_open(gs_main_instance * minst, const char *fname,
113
		     ref * pfile);
114
 
115
/*
116
 * Here we summarize the C API calls that correspond to some of the
117
 * most common command line switches documented in Use.htm, to help
118
 * clients who are familiar with the command line and are starting to
119
 * use the API.
120
 *
121
 *      -d/D, -s/S (for setting device parameters like OutputFile)
122
 *              Use the C API for device parameters documented near the
123
 *              end of gsparam.h.
124
 *
125
 *      -d/D (for setting Boolean parameters like NOPAUSE)
126
 *              { ref vtrue;
127
 *                make_true(&vtrue);
128
 *                dict_put_string(systemdict, "NOPAUSE", &vtrue);
129
 *              }
130
 *      -I
131
 *              Use gs_main_add_lib_path, documented above.
132
 *
133
 *      -A, -A-
134
 *              Set gs_debug['@'] = 1 or 0 respectively.
135
 *      -E, -E-
136
 *              Set gs_debug['#'] = 1 or 0 respectively.
137
 *      -Z..., -Z-...
138
 *              Set gs_debug[c] = 1 or 0 respectively for each character
139
 *              c in the string.
140
 */
141
 
142
/* ---------------- Execution ---------------- */
143
 
144
/*
145
 * After initializing the interpreter, clients may pass it files or
146
 * strings to be interpreted.  There are four ways to do this:
147
 *      - Pass a file name (gs_main_run_file);
148
 *      - Pass a C string (gs_main_run_string);
149
 *      - Pass a string defined by pointer and length
150
 *              (gs_main_run_string_with_length);
151
 *      - Pass strings piece-by-piece
152
 *              (gs_main_run_string_begin/continue/end).
153
 *
154
 * The value returned by the first three of these calls is
155
 * 0 if the interpreter ran to completion, e_Quit for a normal quit,
156
 * or e_Fatal for a non-zero quit or a fatal error.
157
 * e_Fatal stores the exit code in the third argument.
158
 * The str argument of gs_main_run_string[_with_length] must be allocated
159
 * in non-garbage-collectable space (e.g., by malloc or gs_malloc,
160
 * or statically).
161
 */
162
int gs_main_run_file(gs_main_instance * minst, const char *fname,
163
		     int user_errors, int *pexit_code,
164
		     ref * perror_object);
165
int gs_main_run_string(gs_main_instance * minst, const char *str,
166
		       int user_errors, int *pexit_code,
167
		       ref * perror_object);
168
int gs_main_run_string_with_length(gs_main_instance * minst,
169
				   const char *str, uint length,
170
				   int user_errors, int *pexit_code,
171
				   ref * perror_object);
172
 
173
/*
174
 * Open the file for gs_main_run_file.  This is an internal routine
175
 * that is only exported for some special clients.
176
 */
177
int gs_main_run_file_open(gs_main_instance * minst,
178
			  const char *file_name, ref * pfref);
179
 
180
/*
181
 * The next 3 procedures provide for feeding input to the interpreter
182
 * in arbitrary chunks, unlike run_string, which requires that each string
183
 * be a properly formed PostScript program fragment.  To use them:
184
 *      Call run_string_begin.
185
 *      Call run_string_continue as many times as desired,
186
 *        stopping if it returns anything other than e_NeedInput.
187
 *      If run_string_continue didn't indicate an error or a quit
188
 *        (i.e., a return value other than e_NeedInput), call run_string_end
189
 *        to provide an EOF indication.
190
 * Note that run_string_continue takes a pointer and a length, like
191
 * run_string_with_length.
192
 */
193
int gs_main_run_string_begin(gs_main_instance * minst, int user_errors,
194
			     int *pexit_code, ref * perror_object);
195
int gs_main_run_string_continue(gs_main_instance * minst,
196
				const char *str, uint length,
197
				int user_errors, int *pexit_code,
198
				ref * perror_object);
199
int gs_main_run_string_end(gs_main_instance * minst, int user_errors,
200
			   int *pexit_code, ref * perror_object);
201
 
202
/* ---------------- Operand stack access ---------------- */
203
 
204
/*
205
 * The following procedures are not used in normal operation;
206
 * they exist only to allow clients driving the interpreter through the
207
 * gs_main_run_xxx procedures to push parameters quickly and to get results
208
 * back.  The push procedures return 0, e_stackoverflow, or e_VMerror;
209
 * the pop procedures return 0, e_stackunderflow, or e_typecheck.
210
 *
211
 * Procedures to push values on the operand stack:
212
 */
213
int gs_push_boolean(gs_main_instance * minst, bool value);
214
int gs_push_integer(gs_main_instance * minst, long value);
215
int gs_push_real(gs_main_instance * minst, floatp value);
216
int gs_push_string(gs_main_instance * minst, byte * chars, uint length,
217
		   bool read_only);
218
 
219
/*
220
 * Procedures to pop values from the operand stack:
221
 */
222
int gs_pop_boolean(gs_main_instance * minst, bool * result);
223
int gs_pop_integer(gs_main_instance * minst, long *result);
224
int gs_pop_real(gs_main_instance * minst, float *result);
225
 
226
/* gs_pop_string returns 1 if the string is read-only. */
227
int gs_pop_string(gs_main_instance * minst, gs_string * result);
228
 
229
/* ---------------- Debugging ---------------- */
230
 
231
/*
232
 * Print an error mesage including the error code, error object (if any),
233
 * and operand and execution stacks in hex.  Clients will probably
234
 * never call this.
235
 */
236
void gs_main_dump_stack(gs_main_instance *minst, int code,
237
			ref * perror_object);
238
 
239
/* ---------------- Console output ---------------- */
240
 
241
 
242
 
243
 
244
/* ---------------- Termination ---------------- */
245
 
246
/*
247
 * Terminate the interpreter by closing all devices and releasing all
248
 * allocated memory.  Currently, because of some technical problems
249
 * with statically initialized data, it is not possible to reinitialize
250
 * the interpreter after terminating it; we plan to fix this as soon as
251
 * possible.
252
 *
253
 * Note that calling gs_to_exit (defined in gsexit.h) automatically calls
254
 * gs_main_finit for the default instance.
255
 */
256
int gs_main_finit(gs_main_instance * minst, int exit_status, int code);
257
 
258
#endif /* imain_INCLUDED */