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

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * decompile.h - Declarations and types used by decompile.c
  3.  *
  4.  * Author: Chris Wulff, Vanteon (cwulff@vanteon.com)
  5.  *
  6.  */
  7. #ifndef DECOMPILE_H_INCLUDED
  8. #define DECOMPILE_H_INCLUDED
  9. /* Global Tags */
  10. #define TAG_SWITCH_PAGE 0x00
  11. #define TAG_END         0x01
  12. #define TAG_ENTITY      0x02
  13. #define TAG_STR_I       0x03
  14. #define TAG_LITERAL     0x04
  15. #define TAG_EXT_I_0     0x40
  16. #define TAG_EXT_I_1     0x41
  17. #define TAG_EXT_I_2     0x42
  18. #define TAG_PI          0x43
  19. #define TAG_LITERAL_C   0x44
  20. #define TAG_EXT_T_0     0x80
  21. #define TAG_EXT_T_1     0x81
  22. #define TAG_EXT_T_2     0x82
  23. #define TAG_STR_T       0x83
  24. #define TAG_LITERAL_A   0x84
  25. #define TAG_EXT_0       0xc0
  26. #define TAG_EXT_1       0xc1
  27. #define TAG_EXT_2       0xc2
  28. #define TAG_OPAQUE      0xc3
  29. #define TAG_LITERAL_AC  0xc4
  30. /* Codepage tag masks */
  31. #define CODEPAGE_TAG_MASK        ((WBXML_TAG) 0x3f)
  32. #define CODEPAGE_TAG_HAS_CONTENT ((WBXML_TAG) 0x40)
  33. #define CODEPAGE_TAG_HAS_ATTRS   ((WBXML_TAG) 0x80)
  34. /* Sizes */
  35. #define SWITCHPAGE_SIZE 2
  36. /* Codepage Tag Types */
  37. typedef enum tagCP_TYPES
  38. {
  39. CP_TAG_TAG,
  40. CP_TAG_ATTRSTART,
  41. CP_TAG_ATTRVALUE
  42. } CP_TAG_TYPE;
  43. /* Datatypes */
  44. typedef int               BOOL;
  45. #define FALSE 0
  46. #define TRUE 1
  47. typedef unsigned char     WBXML;
  48. typedef WBXML*            P_WBXML;
  49. typedef P_WBXML*          PP_WBXML;
  50. typedef unsigned char     WBXML_TAG;
  51. typedef WBXML_TAG*        P_WBXML_TAG;
  52. typedef unsigned char     WBXML_CODEPAGE;
  53. typedef unsigned long     WBXML_LENGTH;
  54. typedef enum
  55. {
  56. NODE_CODEPAGE_TAG,
  57. NODE_CODEPAGE_LITERAL_TAG,
  58. NODE_ATTRSTART,
  59. NODE_ATTRSTART_LITERAL,
  60. NODE_ATTRVALUE,
  61. NODE_ATTREND,
  62. NODE_STRING,
  63. NODE_DTD_TYPE,
  64. NODE_STRING_TABLE,
  65. NODE_VARIABLE_STRING,
  66. NODE_VARIABLE_INDEX
  67. } WBXML_NODE_TYPE;
  68. typedef struct tagWBXML_NODE
  69. {
  70. void*           m_prev;   /* (P_WBXML_NODE) the previous sibling */
  71. void*           m_next;   /* (P_WBXML_NODE) the next sibling */
  72. void*           m_child;  /* (P_WBXML_NODE) the first child */
  73. void*           m_parent; /* (P_WBXML_NODE) the parent */
  74. WBXML_NODE_TYPE m_type;   /* type of this node */
  75. WBXML_CODEPAGE  m_page;   /* the codepage for this node */
  76. void*           m_data;   /* type specific node data */
  77. } WBXML_NODE;
  78. typedef WBXML_NODE* P_WBXML_NODE;
  79. typedef enum
  80. {
  81. VAR_ESCAPED,
  82. VAR_UNESCAPED,
  83. VAR_UNCHANGED
  84. } WBXML_VARIABLE_TYPE;
  85. typedef unsigned char       WBXML_U_INT8;
  86. typedef WBXML_U_INT8*       P_WBXML_U_INT8;
  87. #define MAX_MB_U_INT32_BYTES 4
  88. typedef unsigned char       WBXML_MB_U_INT32[MAX_MB_U_INT32_BYTES];
  89. typedef WBXML_MB_U_INT32*   P_WBXML_MB_U_INT32;
  90. extern const WBXML_MB_U_INT32 ZERO_WBXML_MB_U_INT32;
  91. typedef WBXML_MB_U_INT32    WBXML_STRING_INDEX;
  92. typedef WBXML_STRING_INDEX* P_WBXML_STRING_INDEX;
  93. typedef unsigned char*      WBXML_BYTES;
  94. typedef WBXML_BYTES*        P_WBXML_BYTES;
  95. typedef WBXML_MB_U_INT32 WBXML_DTD_TYPE;
  96. typedef struct tagDTD_NODE_DATA
  97. {
  98. WBXML_DTD_TYPE   m_dtdnum; /* DTD number */
  99. WBXML_MB_U_INT32 m_index;  /* DTD string table index (for DTD# 0) */
  100. } DTD_NODE_DATA;
  101. typedef struct tagWBXML_INFO
  102. {
  103.   P_WBXML        m_start;   /* Beginning of the binary buffer */
  104.   P_WBXML        m_curpos;  /* Current binary buffer position */
  105.   WBXML_LENGTH   m_length;  /* Length of the binary data */
  106.   P_WBXML_NODE   m_tree;    /* WBXML parse tree */
  107.   P_WBXML_NODE   m_curnode; /* current parse tree node */
  108.   WBXML_CODEPAGE m_curpage; /* the current codepage */
  109. } WBXML_INFO;
  110. typedef WBXML_INFO*         P_WBXML_INFO;
  111. typedef struct tagWBXML_STRING_TABLE
  112. {
  113.   WBXML_MB_U_INT32 m_length;
  114.   WBXML_BYTES      m_strings;
  115. } WBXML_STRING_TABLE;
  116. typedef WBXML_STRING_TABLE* P_WBXML_STRING_TABLE;
  117. typedef enum tagWBXML_PARSE_ERROR
  118. {
  119.   ERR_END_OF_DATA,
  120.   ERR_INTERNAL_BAD_PARAM,
  121.   ERR_TAG_NOT_FOUND,
  122.   ERR_FILE_NOT_FOUND,
  123.   ERR_FILE_NOT_READ,
  124.   ERR_NOT_ENOUGH_MEMORY
  125. } WBXML_PARSE_ERROR;
  126. typedef enum tagWBXML_PARSE_WARNING
  127. {
  128.   WARN_FUTURE_EXPANSION_EXT_0,
  129.   WARN_FUTURE_EXPANSION_EXT_1,
  130.   WARN_FUTURE_EXPANSION_EXT_2
  131. } WBXML_PARSE_WARNING;
  132. typedef struct tagDTD_TYPE_LIST
  133. {
  134. long  m_id;
  135. char* m_name;
  136. } DTD_TYPE_LIST;
  137. typedef struct tagCODEPAGE_TAG_NAME_LIST
  138. {
  139. long           m_dtd_id;
  140. char*          m_name;
  141. WBXML_CODEPAGE m_page;
  142. WBXML_TAG      m_tag;
  143. } CODEPAGE_TAG_NAME_LIST;
  144. typedef CODEPAGE_TAG_NAME_LIST* P_CODEPAGE_TAG_NAME_LIST;
  145. typedef struct tagCODEPAGE_ATTRSTART_NAME_LIST
  146. {
  147. long           m_dtd_id;
  148. char*          m_name;
  149. char*          m_valueprefix;
  150. WBXML_CODEPAGE m_page;
  151. WBXML_TAG      m_tag;
  152. } CODEPAGE_ATTRSTART_NAME_LIST;
  153. typedef CODEPAGE_ATTRSTART_NAME_LIST* P_CODEPAGE_ATTRSTART_NAME_LIST;
  154. typedef struct tagCODEPAGE_ATTRVALUE_NAME_LIST
  155. {
  156. long           m_dtd_id;
  157. char*          m_name;
  158. WBXML_CODEPAGE m_page;
  159. WBXML_TAG      m_tag;
  160. } CODEPAGE_ATTRVALUE_NAME_LIST;
  161. typedef CODEPAGE_ATTRVALUE_NAME_LIST* P_CODEPAGE_ATTRVALUE_NAME_LIST;
  162. /* Flow Control Prototypes */
  163. void Message(char* msg);
  164. void ParseError(WBXML_PARSE_ERROR error);
  165. void ParseWarning(WBXML_PARSE_WARNING warning);
  166. WBXML_LENGTH BytesLeft(P_WBXML_INFO buffer);
  167. BOOL IsTag(P_WBXML_INFO buffer, WBXML_TAG tag);
  168. BOOL IsCodepageTag(P_WBXML_INFO buffer, CP_TAG_TYPE type);
  169. BOOL Is_attrValue  (P_WBXML_INFO buffer);
  170. BOOL Is_extension  (P_WBXML_INFO buffer);
  171. BOOL Is_string     (P_WBXML_INFO buffer);
  172. BOOL Is_switchPage (P_WBXML_INFO buffer);
  173. BOOL Is_inline     (P_WBXML_INFO buffer);
  174. BOOL Is_tableref   (P_WBXML_INFO buffer);
  175. BOOL Is_entity     (P_WBXML_INFO buffer);
  176. BOOL Is_pi         (P_WBXML_INFO buffer);
  177. BOOL Is_opaque     (P_WBXML_INFO buffer);
  178. BOOL Is_zero       (P_WBXML_INFO buffer);
  179. /* Basic Type Decoder Prototypes */
  180. void Read_u_int8     (P_WBXML_INFO buffer, P_WBXML_U_INT8 result);
  181. void Read_mb_u_int32 (P_WBXML_INFO buffer, P_WBXML_MB_U_INT32 result);
  182. void Read_bytes      (P_WBXML_INFO buffer, WBXML_LENGTH length, P_WBXML_BYTES result);
  183. void ReadFixedTag    (P_WBXML_INFO buffer, WBXML_TAG tag);
  184. WBXML_TAG ReadCodepageTag (P_WBXML_INFO buffer, CP_TAG_TYPE type);
  185. /* Basic Type Conversion Prototypes */
  186. long mb_u_int32_to_long(P_WBXML_MB_U_INT32 value);
  187. /* Document Structure Decoder Prototypes */
  188. void Read_start      (P_WBXML_INFO buffer);
  189. void Read_strtbl     (P_WBXML_INFO buffer);
  190. void Read_body       (P_WBXML_INFO buffer);
  191. void Read_element    (P_WBXML_INFO buffer);
  192. void Read_content    (P_WBXML_INFO buffer);
  193. WBXML_TAG Read_stag  (P_WBXML_INFO buffer);
  194. void Read_attribute  (P_WBXML_INFO buffer);
  195. void Read_attrStart  (P_WBXML_INFO buffer);
  196. void Read_attrValue  (P_WBXML_INFO buffer);
  197. void Read_extension  (P_WBXML_INFO buffer);
  198. void Read_string     (P_WBXML_INFO buffer);
  199. void Read_switchPage (P_WBXML_INFO buffer);
  200. void Read_inline     (P_WBXML_INFO buffer);
  201. void Read_tableref   (P_WBXML_INFO buffer);
  202. void Read_entity     (P_WBXML_INFO buffer);
  203. void Read_entcode    (P_WBXML_INFO buffer);
  204. void Read_pi         (P_WBXML_INFO buffer);
  205. void Read_opaque     (P_WBXML_INFO buffer);
  206. void Read_version    (P_WBXML_INFO buffer);
  207. void Read_publicid   (P_WBXML_INFO buffer);
  208. void Read_charset    (P_WBXML_INFO buffer);
  209. void Read_termstr    (P_WBXML_INFO buffer);
  210. void Read_termstr_rtn(P_WBXML_INFO buffer, char** result);
  211. void Read_index      (P_WBXML_INFO buffer, P_WBXML_MB_U_INT32 result);
  212. void Read_length     (P_WBXML_INFO buffer, P_WBXML_MB_U_INT32 result);
  213. void Read_zero       (P_WBXML_INFO buffer);
  214. void Read_pageindex  (P_WBXML_INFO buffer, P_WBXML_U_INT8 result);
  215. #endif /* _DECOMPILE_H_INCLUDED_ */