Kannel: Open Source WAP and SMS gateway  $Revision: 5037 $
ws.h
Go to the documentation of this file.
1 /* ====================================================================
2  * The Kannel Software License, Version 1.0
3  *
4  * Copyright (c) 2001-2016 Kannel Group
5  * Copyright (c) 1998-2001 WapIT Ltd.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Kannel Group (http://www.kannel.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Kannel" and "Kannel Group" must not be used to
28  * endorse or promote products derived from this software without
29  * prior written permission. For written permission, please
30  * contact org@kannel.org.
31  *
32  * 5. Products derived from this software may not be called "Kannel",
33  * nor may "Kannel" appear in their name, without prior written
34  * permission of the Kannel Group.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS
40  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
41  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
42  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
43  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
44  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
45  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
46  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of the Kannel Group. For more information on
51  * the Kannel Group, please see <http://www.kannel.org/>.
52  *
53  * Portions of this software are based upon software originally written at
54  * WapIT Ltd., Helsinki, Finland for the Kannel project.
55  */
56 
57 /*
58  *
59  * ws.h
60  *
61  * Author: Markku Rossi <mtr@iki.fi>
62  *
63  * Copyright (c) 1999-2000 WAPIT OY LTD.
64  * All rights reserved.
65  *
66  * Public header file for the WMLScript compiler library.
67  *
68  * The compiler is written for WMLScript version 1.1.
69  *
70  */
71 
72 #ifndef WS_H
73 #define WS_H
74 
75 #include "wsutf8.h"
76 
77 /********************* Creating and destroying compiler *****************/
78 
79 /* A callback function of this type is called to output compiler's
80  diagnostic, error, and warning messages. The argument `data' has
81  `len' bytes of data that should be output somehow to user. The
82  argument `context' is the user-specified context data for the
83  callback function. */
84 typedef void (*WsIOProc)(const char *data, size_t len, void *context);
85 
86 /* A callback function of this type is called for each `use meta name'
87  and `use meta http equiv' pragma, found from the current
88  compilation unit. The arguments `property_name', `content', and
89  `scheme' are the meta-body arguments of the pragma. They can be
90  manipulated with the functions of the `wsutf8.h' module. The
91  argument `scheme' can have the value NULL if the pragma did not
92  specify it. The string arguments belong to the WMLScript compiler
93  and you should not modify or free them. The argument `context' is
94  the user-specified context data for the callback function. */
95 typedef void (*WsPragmaMetaProc)(const WsUtf8String *property_name,
96  const WsUtf8String *content,
97  const WsUtf8String *scheme,
98  void *context);
99 
100 /* Parameters for a WMLScript copiler. */
102 {
103  /* Features. */
104 
105  /* Store string constants in ISO-8859/1 (ISO latin1) format. The
106  default format is UTF-8. This option makes a bit smaller
107  byte-code files but it loses information for non-latin1
108  languages. */
109  unsigned int use_latin1_strings : 1;
110 
111 
112  /* Warning flags. */
113 
114  /* Warn if a standard library function is called with mismatching
115  argument types. */
116  unsigned int warn_stdlib_type_mismatch : 1;
117 
118 
119  /* Optimization flags. */
120 
121  /* Do not perform constant folding. */
122  unsigned int no_opt_constant_folding : 1;
123 
124  /* Do not sort byte-code functions by their usage counts. */
125  unsigned int no_opt_sort_bc_functions : 1;
126 
127  /* Do not perform peephole optimization. */
128  unsigned int no_opt_peephole : 1;
129 
130  /* Do not optimize jumps to jump instructions to jump directly to
131  the target label of the next instruction. */
132  unsigned int no_opt_jumps_to_jumps : 1;
133 
134  /* Do not optimize jumps to the next instruction. */
136 
137  /* Do not remove unreachable code. */
138  unsigned int no_opt_dead_code : 1;
139 
140  /* Do not remove useless conversions */
141  unsigned int no_opt_conv : 1;
142 
143  /* Perform expensive optimizations which require liveness
144  analyzation of the local variables. */
146 
147 
148  /* Output flags. */
149 
150  /* Print verbose progress messages. */
151  unsigned int verbose : 1;
152 
153  /* Print symbolic assembler to the stdout. */
154  unsigned int print_symbolic_assembler : 1;
155 
156  /* Disassemble the resulting byte-code instructions. */
157  unsigned int print_assembler : 1;
158 
159  /* Function pointers to receive standard output and error messages.
160  If these are unset, the outputs are directed to the system's
161  standard output and error streams. */
162 
163  /* Standard output. */
166 
167  /* Standard error. */
170 
171  /* A callback function which is called for each `use meta name'
172  pragma, found from the current compilation unit. */
175 
176  /* A callback function which is called for each `use meta http
177  equiv' pragma, found from the current compilation unit. */
180 };
181 
183 
184 /* A compiler handle. */
185 typedef struct WsCompilerRec *WsCompilerPtr;
186 
187 /* Create a new WMLScript compiler. The argument `params' specifies
188  initialization parameters for the compiler. If the argument
189  `params' is NULL or any of its fiels have value 0 or NULL, the
190  default values will be used for those parameters. The function
191  takes a copy of the value of the `params' argument. You can free
192  it after this call. The function returns NULL if the operation
193  fails (out of memory). */
194 WsCompilerPtr ws_create(WsCompilerParams *params);
195 
196 /* Destroy the WMLScript compiler `compiler' and free all resources it
197  has allocated. */
198 void ws_destroy(WsCompilerPtr compiler);
199 
200 /********************* Compiling WMLScript ******************************/
201 
202 /* Returns codes for the compiler functions. */
203 typedef enum
204 {
205  /* Successful termination */
207 
208  /* The compiler ran out of memory. */
210 
211  /* The input was not syntactically correct. */
213 
214  /* The input was not semantically correct. */
216 
217  /* IO error. */
219 
220  /* A generic `catch-all' error code. This should not be used. More
221  descriptive error messages should be generated instead. */
223 } WsResult;
224 
225 /* Compile the WMLScript input file `input' with the compiler
226  `compiler' and save the generated byte-code output to the file
227  `output'. The argument `input_name' is the name of the input file
228  `input'. It is used in error messages. The function returns a
229  success code that describes the result of the compilation. The
230  output file `output' is modified only if the result code is
231  `WS_OK'. */
232 WsResult ws_compile_file(WsCompilerPtr compiler, const char *input_name,
233  FILE *input, FILE *output);
234 
235 /* Compile the `input_len' bytes of WMLScript data in `input' with the
236  compiler `compiler'. The data is assumed to be in the ISO-8859/1
237  (ISO latin1) format. The resulting byte-code is returned in
238  `output_return' and its length is returned in `output_len_return'.
239  The argument `input_name' is the name of the input data
240  `input_data'. It is used in error messages. The function returns
241  a success code that describes the result of the compilation. The
242  output in `output_return' is valid only if the result code is
243  `WS_OK'. The byte-code, returned in `output_return', must be freed
244  with the ws_free_byte_code() function after it is not needed
245  anymore. It is a fatal error to free it with any other function,
246  like free(). */
247 WsResult ws_compile_data(WsCompilerPtr compiler, const char *input_name,
248  const unsigned char *input, size_t input_len,
249  unsigned char **output_return,
250  size_t *output_len_return);
251 
252 /* Free the byte-code buffer `byte_code', returned by
253  ws_compiler_data() function. The byte-code `byte_code' must not be
254  used after this function has been called. */
255 void ws_free_byte_code(unsigned char *byte_code);
256 
257 /* Convert the result code `result' into human readable 7 bit ASCII
258  string. */
259 const char *ws_result_to_string(WsResult result);
260 
261 #endif /* not WS_H */
void(* WsPragmaMetaProc)(const WsUtf8String *property_name, const WsUtf8String *content, const WsUtf8String *scheme, void *context)
Definition: ws.h:95
unsigned int no_opt_dead_code
Definition: ws.h:138
unsigned int no_opt_sort_bc_functions
Definition: ws.h:125
unsigned int print_symbolic_assembler
Definition: ws.h:154
Definition: parse.c:65
unsigned int warn_stdlib_type_mismatch
Definition: ws.h:116
unsigned int no_opt_conv
Definition: ws.h:141
WsResult ws_compile_file(WsCompilerPtr compiler, const char *input_name, FILE *input, FILE *output)
Definition: ws.c:177
WsStream * input
Definition: wsint.h:196
void * stdout_cb_context
Definition: ws.h:165
unsigned int use_latin1_strings
Definition: ws.h:109
unsigned int no_opt_jumps_to_next_instruction
Definition: ws.h:135
WsResult
Definition: ws.h:203
WsResult ws_compile_data(WsCompilerPtr compiler, const char *input_name, const unsigned char *input, size_t input_len, unsigned char **output_return, size_t *output_len_return)
Definition: ws.c:206
unsigned int no_opt_constant_folding
Definition: ws.h:122
const char * input_name
Definition: wsint.h:200
Definition: ws.h:206
unsigned int print_assembler
Definition: ws.h:157
void * meta_name_cb_context
Definition: ws.h:174
WsPragmaMetaProc meta_name_cb
Definition: ws.h:173
void ws_destroy(WsCompilerPtr compiler)
Definition: ws.c:163
WsIOProc stdout_cb
Definition: ws.h:164
unsigned int no_opt_peephole
Definition: ws.h:128
void ws_free_byte_code(unsigned char *byte_code)
Definition: ws.c:228
WsPragmaMetaProc meta_http_equiv_cb
Definition: ws.h:178
WsCompilerParams params
Definition: wsint.h:193
void * meta_http_equiv_cb_context
Definition: ws.h:179
WsCompilerPtr ws_create(WsCompilerParams *params)
Definition: ws.c:135
WsIOProc stderr_cb
Definition: ws.h:168
unsigned int opt_analyze_variable_liveness
Definition: ws.h:145
void * stderr_cb_context
Definition: ws.h:169
static Octstr * content
Definition: mtbatch.c:87
struct WsCompilerRec * WsCompilerPtr
Definition: ws.h:185
Definition: ws.h:222
void(* WsIOProc)(const char *data, size_t len, void *context)
Definition: ws.h:84
WsBuffer byte_code
Definition: wsint.h:229
unsigned int verbose
Definition: ws.h:151
unsigned int no_opt_jumps_to_jumps
Definition: ws.h:132
const char * ws_result_to_string(WsResult result)
Definition: ws.c:234
See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.