xref: /plan9/sys/src/cmd/gs/src/interp.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 1994, 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: interp.h,v 1.6 2003/10/15 08:53:13 igor Exp $ */
18 /* Internal interfaces to interp.c and iinit.c */
19 
20 #ifndef interp_INCLUDED
21 #  define interp_INCLUDED
22 
23 /* ------ iinit.c ------ */
24 
25 /* Enter a name and value into systemdict. */
26 int i_initial_enter_name(i_ctx_t *, const char *, const ref *);
27 #define initial_enter_name(nstr, pvalue)\
28   i_initial_enter_name(i_ctx_p, nstr, pvalue)
29 
30 /* Remove a name from systemdict. */
31 void i_initial_remove_name(i_ctx_t *, const char *);
32 #define initial_remove_name(nstr)\
33   i_initial_remove_name(i_ctx_p, nstr)
34 
35 /* ------ interp.c ------ */
36 
37 /*
38  * Maximum number of arguments (and results) for an operator,
39  * determined by operand stack block size.
40  */
41 extern const int gs_interp_max_op_num_args;
42 
43 /*
44  * Number of slots to reserve at the start of op_def_table for
45  * operators which are hard-coded into the interpreter loop.
46  */
47 extern const int gs_interp_num_special_ops;
48 
49 /*
50  * Create an operator during initialization.
51  * If operator is hard-coded into the interpreter,
52  * assign it a special type and index.
53  */
54 void gs_interp_make_oper(ref * opref, op_proc_t, int index);
55 
56 /*
57  * Call the garbage collector, updating the context pointer properly.
58  */
59 int interp_reclaim(i_ctx_t **pi_ctx_p, int space);
60 
61 /* Get the name corresponding to an error number. */
62 int gs_errorname(i_ctx_t *, int, ref *);
63 
64 /* Put a string in $error /errorinfo. */
65 int gs_errorinfo_put_string(i_ctx_t *, const char *);
66 
67 /* Initialize the interpreter. */
68 int gs_interp_init(i_ctx_t **pi_ctx_p, const ref *psystem_dict,
69 		   gs_dual_memory_t *dmem);
70 
71 #ifndef gs_context_state_t_DEFINED
72 #  define gs_context_state_t_DEFINED
73 typedef struct gs_context_state_s gs_context_state_t;
74 #endif
75 
76 /*
77  * Create initial stacks for the interpreter.
78  * We export this for creating new contexts.
79  */
80 int gs_interp_alloc_stacks(gs_ref_memory_t * smem,
81 			   gs_context_state_t * pcst);
82 
83 /*
84  * Free the stacks when destroying a context.  This is the inverse of
85  * create_stacks.
86  */
87 void gs_interp_free_stacks(gs_ref_memory_t * smem,
88 			   gs_context_state_t * pcst);
89 
90 /* Reset the interpreter. */
91 void gs_interp_reset(i_ctx_t *i_ctx_p);
92 
93 /* Define the top-level interface to the interpreter. */
94 int gs_interpret(i_ctx_t **pi_ctx_p, ref * pref, int user_errors,
95 		 int *pexit_code, ref * perror_object);
96 
97 #endif /* interp_INCLUDED */
98