00001
00032 #ifndef LL_LSCRIPT_READLSO_H
00033 #define LL_LSCRIPT_READLSO_H
00034
00035 #include "lscript_byteconvert.h"
00036 #include "linked_lists.h"
00037
00038
00039 void print_noop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00040 void print_pop(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00041 void print_pops(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00042 void print_popl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00043 void print_popv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00044 void print_popq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00045 void print_poparg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00046 void print_popip(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00047 void print_popbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00048 void print_popsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00049 void print_popslr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00050
00051 void print_dup(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00052 void print_dups(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00053 void print_dupl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00054 void print_dupv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00055 void print_dupq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00056
00057 void print_store(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00058 void print_stores(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00059 void print_storel(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00060 void print_storev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00061 void print_storeq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00062 void print_storeg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00063 void print_storegs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00064 void print_storegl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00065 void print_storegv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00066 void print_storegq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00067 void print_loadp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00068 void print_loadsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00069 void print_loadlp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00070 void print_loadvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00071 void print_loadqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00072 void print_loadgp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00073 void print_loadgsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00074 void print_loadglp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00075 void print_loadgvp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00076 void print_loadgqp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00077
00078 void print_push(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00079 void print_pushl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00080 void print_pushs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00081 void print_pushv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00082 void print_pushq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00083 void print_pushg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00084 void print_pushgl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00085 void print_pushgs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00086 void print_pushgv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00087 void print_pushgq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00088 void print_puship(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00089 void print_pushbp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00090 void print_pushsp(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00091 void print_pushargb(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00092 void print_pushargi(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00093 void print_pushargf(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00094 void print_pushargs(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00095 void print_pushargv(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00096 void print_pushargq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00097 void print_pushe(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00098 void print_pushev(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00099 void print_pusheq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00100 void print_pusharge(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00101
00102 void print_add(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00103 void print_sub(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00104 void print_mul(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00105 void print_div(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00106 void print_mod(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00107
00108 void print_eq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00109 void print_neq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00110 void print_leq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00111 void print_geq(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00112 void print_less(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00113 void print_greater(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00114
00115 void print_bitand(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00116 void print_bitor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00117 void print_bitxor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00118 void print_booland(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00119 void print_boolor(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00120
00121 void print_shl(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00122 void print_shr(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00123
00124 void print_neg(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00125 void print_bitnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00126 void print_boolnot(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00127
00128 void print_jump(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00129 void print_jumpif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00130 void print_jumpnif(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00131
00132 void print_state(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00133 void print_call(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00134 void print_return(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00135 void print_cast(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00136 void print_stacktos(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00137 void print_stacktol(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00138
00139 void print_print(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00140
00141 void print_calllib(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00142 void print_calllib_two_byte(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00143
00144 class LLScriptLSOParse
00145 {
00146 public:
00147 LLScriptLSOParse(LLFILE *fp);
00148 LLScriptLSOParse(U8 *buffer);
00149 ~LLScriptLSOParse();
00150
00151 void initOpCodePrinting();
00152
00153 void printData(LLFILE *fp);
00154 void printNameDesc(LLFILE *fp);
00155 void printRegisters(LLFILE *fp);
00156 void printGlobals(LLFILE *fp);
00157 void printGlobalFunctions(LLFILE *fp);
00158 void printStates(LLFILE *fp);
00159 void printHeap(LLFILE *fp);
00160 void printOpCodes(LLFILE *fp, S32 &offset, S32 tabs);
00161 void printOpCodeRange(LLFILE *fp, S32 start, S32 end, S32 tabs);
00162
00163 U8 *mRawData;
00164 void (*mPrintOpCodes[0x100])(LLFILE *fp, U8 *buffer, S32 &offset, S32 tabs);
00165 };
00166
00167
00168 void lso_print_tabs(LLFILE *fp, S32 tabs);
00169
00170 #endif