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

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * wml_tester.c - a simple program to test the WML-compiler module
  3.  *
  4.  * Tuomas Luttinen <tuo@wapit.com>
  5.  */
  6. #include <stdlib.h>
  7. #include <unistd.h>
  8. #include "gwlib/gwlib.h"
  9. #include "gw/wml_compiler.h"
  10. typedef enum { NORMAL_OUT, SOURCE_OUT, BINARY_OUT } output_t;
  11. static void help(void) {
  12.     info(0, "Usage: wml_tester [-hsbz] [-n number] [-f file] "
  13.  "[-c charset] file.wmln"
  14.  "wheren"
  15.  "  -h  this textn"
  16.  "  -s  output also the WML source, cannot be used with bn"
  17.  "  -b  output only the compiled binary, cannot be used with sn"
  18.  "  -z  insert a '\0'-character in the middle of the inputn"
  19.  "  -n number   the number of times the compiling is donen"
  20.  "  -f file     direct the output into a filen"
  21.  "  -c charset  character set as given by the http");
  22. }
  23. static void set_zero(Octstr *ostr)
  24. {
  25.     octstr_set_char(ostr, (1 + (int) (octstr_len(ostr) *gw_rand()/
  26.       (RAND_MAX+1.0))), '');
  27. }
  28. int main(int argc, char **argv)
  29. {
  30.     output_t outputti = NORMAL_OUT;
  31.     FILE *fp = NULL;
  32.     Octstr *output = NULL;
  33.     Octstr *filename = NULL;
  34.     Octstr *wml_text = NULL;
  35.     Octstr *charset = NULL;
  36.     Octstr *wml_binary = NULL;
  37.     int i, ret = 0, opt, file = 0, zero = 0, numstatus = 0;
  38.     long num = 0;
  39.     /* You can give an wml text file as an argument './wml_tester main.wml' */
  40.     gwlib_init();
  41.     while ((opt = getopt(argc, argv, "hsbzn:f:c:")) != EOF) {
  42. switch (opt) {
  43. case 'h':
  44.     help();
  45.     exit(0);
  46. case 's':
  47.     if (outputti == NORMAL_OUT)
  48. outputti = SOURCE_OUT;
  49.     else {
  50. help();
  51. exit(0);
  52.     }
  53.     break;
  54. case 'b':
  55.     if (outputti == NORMAL_OUT)
  56. outputti = BINARY_OUT;
  57.     else {
  58. help();
  59. exit(0);
  60.     }
  61.     break;
  62. case 'z':
  63.     zero = 1;
  64.     break;
  65. case 'n':
  66.     numstatus = octstr_parse_long(&num, octstr_imm(optarg), 0, 0);
  67.     if (numstatus == -1) { 
  68. /* Error in the octstr_parse_long */
  69. error(num, "Error in the handling of argument to option n");
  70. help();
  71. panic(0, "Stopping.");
  72.     }
  73.     break;
  74. case 'f':
  75.     file = 1;
  76.     filename = octstr_create(optarg);
  77.     fp = fopen(optarg, "a");
  78.     if (fp == NULL)
  79. panic(0, "Couldn't open output file.");
  80.     break;
  81. case 'c':
  82.     charset = octstr_create(optarg);
  83.     break;
  84. case '?':
  85. default:
  86.     error(0, "Invalid option %c", opt);
  87.     help();
  88.     panic(0, "Stopping.");
  89. }
  90.     }
  91.     if (optind >= argc) {
  92. error(0, "Missing arguments.");
  93. help();
  94. panic(0, "Stopping.");
  95.     }
  96.     if (outputti == BINARY_OUT)
  97.  log_set_output_level(GW_PANIC);
  98.     wml_init();
  99.     while (optind < argc) {
  100. wml_text = octstr_read_file(argv[optind]);
  101. if (wml_text == NULL)
  102.     panic(0, "Couldn't read WML source file.");
  103. if (zero)
  104.     set_zero(wml_text);
  105. for (i = 0; i <= num; i++) {
  106.     ret = wml_compile(wml_text, charset, &wml_binary);
  107.     if (i < num)
  108. octstr_destroy(wml_binary);
  109. }
  110. optind++;
  111. output = octstr_format("wml_compile returned: %dnn", ret);
  112.     
  113. if (ret == 0) {
  114.     if (fp == NULL)
  115. fp = stdout;
  116.     if (outputti != BINARY_OUT) {
  117. if (outputti == SOURCE_OUT) {
  118.     octstr_insert(output, wml_text, octstr_len(output));
  119.     octstr_append_char(output, 'n');
  120. }
  121. octstr_append(output, octstr_imm(
  122.     "Here's the binary output: nn"));
  123. octstr_print(fp, output);
  124.     }
  125.     if (file && outputti != BINARY_OUT) {
  126. fclose(fp);
  127. log_open(octstr_get_cstr(filename), 0);
  128. octstr_dump(wml_binary, 0);
  129. log_close_all();
  130. fp = fopen(octstr_get_cstr(filename), "a");
  131.     } else if (outputti != BINARY_OUT)
  132. octstr_dump(wml_binary, 0);
  133.     else 
  134. octstr_print(fp, wml_binary);
  135.     if (outputti != BINARY_OUT) {
  136. octstr_destroy(output);
  137. output = octstr_format("n And as a text: nn");
  138. octstr_print(fp, output);
  139.       
  140. octstr_pretty_print(fp, wml_binary);
  141. octstr_destroy(output);
  142. output = octstr_format("nn");
  143. octstr_print(fp, output);
  144.     }
  145. }
  146. octstr_destroy(wml_text);
  147. octstr_destroy(output);
  148. octstr_destroy(wml_binary);
  149.     }
  150.     if (file) {
  151. fclose(fp);
  152. octstr_destroy(filename);
  153.     }
  154.     
  155.     if (charset != NULL)
  156. octstr_destroy(charset);
  157.     wml_shutdown();
  158.     gwlib_shutdown();
  159.     
  160.     return ret;
  161. }