ws.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:7k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  *
  3.  * ws.h
  4.  *
  5.  * Author: Markku Rossi <mtr@iki.fi>
  6.  *
  7.  * Copyright (c) 1999-2000 WAPIT OY LTD.
  8.  *  All rights reserved.
  9.  *
  10.  * Public header file for the WMLScript compiler library.
  11.  *
  12.  * The compiler is written for WMLScript version 1.1.
  13.  *
  14.  */
  15. #ifndef WS_H
  16. #define WS_H
  17. #include "wsutf8.h"
  18. /********************* Creating and destroying compiler *****************/
  19. /* A callback function of this type is called to output compiler's
  20.    diagnostic, error, and warning messages.  The argument `data' has
  21.    `len' bytes of data that should be output somehow to user.  The
  22.    argument `context' is the user-specified context data for the
  23.    callback function. */
  24. typedef void (*WsIOProc)(const char *data, size_t len, void *context);
  25. /* A callback function of this type is called for each `use meta name'
  26.    and `use meta http equiv' pragma, found from the current
  27.    compilation unit.  The arguments `property_name', `content', and
  28.    `scheme' are the meta-body arguments of the pragma.  They can be
  29.    manipulated with the functions of the `wsutf8.h' module.  The
  30.    argument `scheme' can have the value NULL if the pragma did not
  31.    specify it.  The string arguments belong to the WMLScript compiler
  32.    and you should not modify or free them.  The argument `context' is
  33.    the user-specified context data for the callback function. */
  34. typedef void (*WsPragmaMetaProc)(const WsUtf8String *property_name,
  35.                                  const WsUtf8String *content,
  36.                                  const WsUtf8String *scheme,
  37.                                  void *context);
  38. /* Parameters for a WMLScript copiler. */
  39. struct WsCompilerParamsRec
  40. {
  41.     /* Features. */
  42.     /* Store string constants in ISO-8859/1 (ISO latin1) format.  The
  43.        default format is UTF-8.  This option makes a bit smaller
  44.        byte-code files but it loses information for non-latin1
  45.        languages. */
  46.     unsigned int use_latin1_strings : 1;
  47.     /* Warning flags. */
  48.     /* Warn if a standard library function is called with mismatching
  49.        argument types. */
  50.     unsigned int warn_stdlib_type_mismatch : 1;
  51.     /* Optimization flags. */
  52.     /* Do not perform constant folding. */
  53.     unsigned int no_opt_constant_folding : 1;
  54.     /* Do not sort byte-code functions by their usage counts. */
  55.     unsigned int no_opt_sort_bc_functions : 1;
  56.     /* Do not perform peephole optimization. */
  57.     unsigned int no_opt_peephole : 1;
  58.     /* Do not optimize jumps to jump instructions to jump directly to
  59.        the target label of the next instruction. */
  60.     unsigned int no_opt_jumps_to_jumps : 1;
  61.     /* Do not optimize jumps to the next instruction. */
  62.     unsigned int no_opt_jumps_to_next_instruction : 1;
  63.     /* Do not remove unreachable code. */
  64.     unsigned int no_opt_dead_code : 1;
  65.     /* Do not remove useless conversions */
  66.     unsigned int no_opt_conv : 1;
  67.     /* Perform expensive optimizations which require liveness
  68.        analyzation of the local variables. */
  69.     unsigned int opt_analyze_variable_liveness : 1;
  70.     /* Output flags. */
  71.     /* Print verbose progress messages. */
  72.     unsigned int verbose : 1;
  73.     /* Print symbolic assembler to the stdout. */
  74.     unsigned int print_symbolic_assembler : 1;
  75.     /* Disassemble the resulting byte-code instructions. */
  76.     unsigned int print_assembler : 1;
  77.     /* Function pointers to receive standard output and error messages.
  78.        If these are unset, the outputs are directed to the system's
  79.        standard output and error streams. */
  80.     /* Standard output. */
  81.     WsIOProc stdout_cb;
  82.     void *stdout_cb_context;
  83.     /* Standard error. */
  84.     WsIOProc stderr_cb;
  85.     void *stderr_cb_context;
  86.     /* A callback function which is called for each `use meta name'
  87.        pragma, found from the current compilation unit. */
  88.     WsPragmaMetaProc meta_name_cb;
  89.     void *meta_name_cb_context;
  90.     /* A callback function which is called for each `use meta http
  91.        equiv' pragma, found from the current compilation unit. */
  92.     WsPragmaMetaProc meta_http_equiv_cb;
  93.     void *meta_http_equiv_cb_context;
  94. };
  95. typedef struct WsCompilerParamsRec WsCompilerParams;
  96. /* A compiler handle. */
  97. typedef struct WsCompilerRec *WsCompilerPtr;
  98. /* Create a new WMLScript compiler.  The argument `params' specifies
  99.    initialization parameters for the compiler.  If the argument
  100.    `params' is NULL or any of its fiels have value 0 or NULL, the
  101.    default values will be used for those parameters.  The function
  102.    takes a copy of the value of the `params' argument.  You can free
  103.    it after this call.  The function returns NULL if the operation
  104.    fails (out of memory). */
  105. WsCompilerPtr ws_create(const WsCompilerParams *params);
  106. /* Destroy the WMLScript compiler `compiler' and free all resources it
  107.    has allocated. */
  108. void ws_destroy(WsCompilerPtr compiler);
  109. /********************* Compiling WMLScript ******************************/
  110. /* Returns codes for the compiler functions. */
  111. typedef enum
  112. {
  113.     /* Successful termination */
  114.     WS_OK,
  115.     /* The compiler ran out of memory. */
  116.     WS_ERROR_OUT_OF_MEMORY,
  117.     /* The input was not syntactically correct. */
  118.     WS_ERROR_SYNTAX,
  119.     /* The input was not semantically correct. */
  120.     WS_ERROR_SEMANTIC,
  121.     /* IO error. */
  122.     WS_ERROR_IO,
  123.     /* A generic `catch-all' error code.  This should not be used.  More
  124.        descriptive error messages should be generated instead. */
  125.     WS_ERROR
  126. } WsResult;
  127. /* Compile the WMLScript input file `input' with the compiler
  128.    `compiler' and save the generated byte-code output to the file
  129.    `output'.  The argument `input_name' is the name of the input file
  130.    `input'.  It is used in error messages. The function returns a
  131.    success code that describes the result of the compilation.  The
  132.    output file `output' is modified only if the result code is
  133.    `WS_OK'. */
  134. WsResult ws_compile_file(WsCompilerPtr compiler, const char *input_name,
  135.                          FILE *input, FILE *output);
  136. /* Compile the `input_len' bytes of WMLScript data in `input' with the
  137.    compiler `compiler'.  The data is assumed to be in the ISO-8859/1
  138.    (ISO latin1) format.  The resulting byte-code is returned in
  139.    `output_return' and its length is returned in `output_len_return'.
  140.    The argument `input_name' is the name of the input data
  141.    `input_data'.  It is used in error messages.  The function returns
  142.    a success code that describes the result of the compilation.  The
  143.    output in `output_return' is valid only if the result code is
  144.    `WS_OK'.  The byte-code, returned in `output_return', must be freed
  145.    with the ws_free_byte_code() function after it is not needed
  146.    anymore.  It is a fatal error to free it with any other function,
  147.    like free(). */
  148. WsResult ws_compile_data(WsCompilerPtr compiler, const char *input_name,
  149.                          const unsigned char *input, size_t input_len,
  150.                          unsigned char **output_return,
  151.                          size_t *output_len_return);
  152. /* Free the byte-code buffer `byte_code', returned by
  153.    ws_compiler_data() function.  The byte-code `byte_code' must not be
  154.    used after this function has been called. */
  155. void ws_free_byte_code(unsigned char *byte_code);
  156. /* Convert the result code `result' into human readable 7 bit ASCII
  157.    string. */
  158. const char *ws_result_to_string(WsResult result);
  159. #endif /* not WS_H */