OSDN Git Service

update libMiMic
[mimic/MiMicSDK.git] / lib / src / mimicvm / NyLPC_cMiMicTxtCompiler.c
index b7a3dab..a63b3a1 100644 (file)
@@ -19,8 +19,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
  *\r
  * For further information please contact.\r
- *     http://nyatla.jp/\r
- *     <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
+ *  http://nyatla.jp/\r
+ *  <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
  *\r
  *********************************************************************************/\r
 #include <ctype.h>\r
 \r
 struct TInstructionDef\r
 {\r
-       /** MiMicBCのオペコード */\r
-       const char* bcopcode;\r
-       /** インストラクションID */\r
-       NyLPC_TcMiMicVM_OP_TYPE opid;\r
-       /** オペコードのタイプ  */\r
-       NyLPC_TcMiMicVM_OPR_TYPE optype;\r
+    /** MiMicBCのオペコード */\r
+    const char* bcopcode;\r
+    /** インストラクションID */\r
+    NyLPC_TcMiMicVM_OP_TYPE opid;\r
+    /** オペコードのタイプ  */\r
+    NyLPC_TcMiMicVM_OPR_TYPE optype;\r
 };\r
 static NyLPC_TBool bc2opc(const NyLPC_TChar* i_char,NyLPC_TcMiMicVM_OP_TYPE* o_opc,NyLPC_TcMiMicVM_OPR_TYPE* o_opt);\r
 static NyLPC_TBool bc2ctrlc(const NyLPC_TChar* i_char,NyLPC_TcMiMicVM_OP_TYPE* o_opc,NyLPC_TcMiMicVM_OPR_TYPE* o_opt);\r
@@ -48,18 +48,18 @@ static void NyLPC_TcMiMicVM_OPR_TYPE_getOpInfo(NyLPC_TcMiMicVM_OPR_TYPE i_type,N
 \r
 void NyLPC_cMiMicTxtCompiler_initialize(NyLPC_TcMiMicTxtCompiler_t* i_inst)\r
 {\r
-       i_inst->out_buf=NULL;\r
-       i_inst->st=NyLPC_TcMiMicTxtCompiler_ST_OPC;\r
-       i_inst->tmp_len=0;\r
+    i_inst->out_buf=NULL;\r
+    i_inst->st=NyLPC_TcMiMicTxtCompiler_ST_OPC;\r
+    i_inst->tmp_len=0;\r
 }\r
 \r
 \r
 \r
-#define NyLPC_TcMiMicTxtCompiler_ST_OPC  0x01  //OPをパース中\r
-#define NyLPC_TcMiMicTxtCompiler_ST_OPR  0x02  //オペランドを解析中\r
-#define NyLPC_TcMiMicTxtCompiler_ST_CTR  0x03  //制御パラメータを解析中\r
-#define NyLPC_TcMiMicTxtCompiler_ST_OK   0x04  //パースを完了した。(.EMD検出)\r
-#define NyLPC_TcMiMicTxtCompiler_ST_NG   0xff  //パースでエラーが発生ウェーイ\r
+#define NyLPC_TcMiMicTxtCompiler_ST_OPC  0x01   //OPをパース中\r
+#define NyLPC_TcMiMicTxtCompiler_ST_OPR  0x02   //オペランドを解析中\r
+#define NyLPC_TcMiMicTxtCompiler_ST_CTR  0x03   //制御パラメータを解析中\r
+#define NyLPC_TcMiMicTxtCompiler_ST_OK   0x04   //パースを完了した。(.EMD検出)\r
+#define NyLPC_TcMiMicTxtCompiler_ST_NG   0xff   //パースでエラーが発生ウェーイ\r
 \r
 \r
 \r
@@ -76,140 +76,140 @@ void NyLPC_cMiMicTxtCompiler_initialize(NyLPC_TcMiMicTxtCompiler_t* i_inst)
  */\r
 NyLPC_TcMiMicTxtCompiler_RET NyLPC_cMiMicTxtCompiler_compileFragment(NyLPC_TcMiMicTxtCompiler_t* i_inst,const struct NyLPC_TCharArrayPtr* i_bc,struct NyLPC_TUInt32ArrayPtr* i_bin,NyLPC_TUInt16* o_bin_len,NyLPC_TUInt16* o_parsed_bc)\r
 {\r
-       union NyLPC_TcMiMicVM_TInstruction* wptr;\r
-       int i;\r
-       for(i=0;i<i_bc->len;i++)\r
-       {\r
-               switch(i_inst->st){\r
-               case NyLPC_TcMiMicTxtCompiler_ST_OPC:\r
-                       if(i_inst->tmp_len>2){\r
-                               NyLPC_OnErrorGoto(ERROR);\r
-                       }\r
-                       i_inst->tmp[i_inst->tmp_len]=*(i_bc->ptr+i);\r
-                       i_inst->tmp_len++;\r
-                       if(i_inst->tmp_len==2){\r
-                               //[A-Z]{2}がそろった。命令コードか制御命令か判定\r
-                               if(bc2opc(i_inst->tmp,&(i_inst->_current_opc),&(i_inst->_current_oprtype))){\r
-                                       //命令コードならインストラクションの情報をもらってくる。\r
-                                       NyLPC_TcMiMicVM_OPR_TYPE_getOpInfo(i_inst->_current_oprtype,&i_inst->_oprbc_len,&i_inst->_inst_len);\r
-                                       //オペランドが無ければ、命令確定。\r
-                                       if(i_inst->_oprbc_len<=0){\r
-                                               //書込みポインタ保管\r
-                                               wptr=(union NyLPC_TcMiMicVM_TInstruction*)i_bin->ptr;\r
-                                               //バッファのシーク\r
-                                               if(!NyLPC_TUInt32ArrayPtr_seek(i_bin,1)){\r
-                                                       NyLPC_OnErrorGoto(ERROR);\r
-                                               }\r
-                                               //インストラクションの出力と処理したBC長の計算\r
-                                               wptr->op.opc=i_inst->_current_opc;\r
-                                               wptr->op.oprtype=i_inst->_current_oprtype;\r
-                                               *o_parsed_bc=i+1;               //パースしたBCの長さ\r
-                                               *o_bin_len=i_inst->_inst_len;\r
-                                               //解析バッファの長さをリセットして、次のBCブロックのパース準備\r
-                                               i_inst->tmp_len=0;\r
-                                               return NyLPC_TcMiMicTxtCompiler_RET_OK;//命令確定。\r
-                                       }\r
-                                       //オペランドがあるなら、パース対象を変更。\r
-                                       i_inst->tmp_len=0;\r
-                                       i_inst->st=NyLPC_TcMiMicTxtCompiler_ST_OPR;\r
-                               }else if(bc2ctrlc(i_inst->tmp,&(i_inst->_current_opc),&(i_inst->_current_oprtype))){\r
-                                       //命令コードならインストラクションの情報をもらってくる。\r
-                                       NyLPC_TcMiMicVM_OPR_TYPE_getOpInfo(i_inst->_current_oprtype,&i_inst->_oprbc_len,&i_inst->_inst_len);\r
-                                       //制御コードの解析\r
-                                       if(i_inst->_oprbc_len>0){\r
-                                               //パラメータのある制御命令未定義だからエラー。\r
-                                               NyLPC_OnErrorGoto(ERROR);\r
-                                       }\r
-                                       //END制御命令?\r
-                                       if(i_inst->_current_opc==NyLPC_TcMiMicVM_CP_TYPE_END){\r
-                                               *o_bin_len=0;\r
-                                               *o_parsed_bc=i+1;               //パースしたBCの長さ\r
-                                               i_inst->tmp_len=0;\r
-                                               return NyLPC_TcMiMicTxtCompiler_RET_OK_END;//命令確定。(パース完了)\r
-                                       }\r
-                                       //END制御命令以外ならエラー\r
-                                       NyLPC_OnErrorGoto(ERROR);\r
-                               }else{\r
-                                       //不明な命令\r
-                                       NyLPC_OnErrorGoto(ERROR);\r
-                               }\r
-                       }\r
-                       break;\r
-               case NyLPC_TcMiMicTxtCompiler_ST_CTR:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               case NyLPC_TcMiMicTxtCompiler_ST_OPR:\r
-                       //オペランド蓄積.\r
-                       i_inst->tmp[i_inst->tmp_len]=*(i_bc->ptr+i);\r
-                       i_inst->tmp_len++;\r
-                       //オペランド長さになるまで値を追記\r
-                       if(i_inst->_oprbc_len==i_inst->tmp_len){\r
-                               //書込みポインタ保管\r
-                               wptr=(union NyLPC_TcMiMicVM_TInstruction*)i_bin->ptr;\r
-                               //シーク\r
-                               if(!NyLPC_TUInt32ArrayPtr_seek(i_bin,i_inst->_inst_len)){\r
-                                       NyLPC_OnErrorGoto(ERROR);\r
-                               }\r
-                               wptr->op.opc=i_inst->_current_opc;\r
-                               wptr->op.oprtype=i_inst->_current_oprtype;\r
-                               //オペランドの変換処理\r
-                               switch(i_inst->_current_oprtype){\r
-                               case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
-                                       if(!(   txt2WMId(i_inst->tmp,&(wptr->wmwm_32.wm1)) &&\r
-                                                       txt2WMId(i_inst->tmp+2,&(wptr->wmwm_32.wm2))))\r
-                                       {\r
-                                               NyLPC_OnErrorGoto(ERROR);\r
-                                       }\r
-                                       break;\r
-                               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H08:\r
-                                       if(!(   txt2WMId(i_inst->tmp,&(wptr->wmh08_32.wm)) &&\r
-                                                       txt2UInt(i_inst->tmp+2,2,&(wptr->wmh08_32.h8))))\r
-                                       {\r
-                                               NyLPC_OnErrorGoto(ERROR);\r
-                                       }\r
-                                       break;\r
-                               case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
-                                       if(!(   txt2WMId(i_inst->tmp,&(wptr->wmh32_64.wm)) &&\r
-                                                       txt2UInt(i_inst->tmp+2,8,&(wptr->wmh32_64.h32)))){\r
-                                               NyLPC_OnErrorGoto(ERROR);\r
-                                       }\r
-                                       break;\r
-                               case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
-                                       if(!txt2WMId(i_inst->tmp,&(wptr->wm_32.wm))){\r
-                                               NyLPC_OnErrorGoto(ERROR);\r
-                                       }\r
-                                       break;\r
-                               case NyLPC_TcMiMicVM_OPR_TYPE_H32:\r
-                                       if(!txt2UInt(i_inst->tmp,8,&(wptr->h32_64.h32))){\r
-                                               NyLPC_OnErrorGoto(ERROR);\r
-                                       }\r
-                                       break;\r
-                               case NyLPC_TcMiMicVM_OPR_TYPE_H08:\r
-                                       if(!txt2UInt(i_inst->tmp,2,&(wptr->h8_32.h8)))\r
-                                       {\r
-                                               NyLPC_OnErrorGoto(ERROR);\r
-                                       }\r
-                                       break;\r
-                               default:\r
-                                       NyLPC_OnErrorGoto(ERROR);\r
-                               }\r
-                               //OPR解析成功。パースしたブロックサイズの計算。\r
-                               *o_parsed_bc=i+1;               //パースしたBCの長さ\r
-                               *o_bin_len=i_inst->_inst_len;\r
-                               i_inst->tmp_len=0;\r
-                               i_inst->st=NyLPC_TcMiMicTxtCompiler_ST_OPC;\r
-                               return NyLPC_TcMiMicTxtCompiler_RET_OK;\r
-                       }\r
-                       break;\r
-               default:\r
-                       NyLPC_OnErrorGoto(ERROR);\r
-               }\r
-       }\r
-       *o_bin_len=0;\r
-       *o_parsed_bc=i_bc->len;\r
-       return NyLPC_TcMiMicTxtCompiler_RET_CONTINUE;\r
+    union NyLPC_TcMiMicVM_TInstruction* wptr;\r
+    int i;\r
+    for(i=0;i<i_bc->len;i++)\r
+    {\r
+        switch(i_inst->st){\r
+        case NyLPC_TcMiMicTxtCompiler_ST_OPC:\r
+            if(i_inst->tmp_len>2){\r
+                NyLPC_OnErrorGoto(ERROR);\r
+            }\r
+            i_inst->tmp[i_inst->tmp_len]=*(i_bc->ptr+i);\r
+            i_inst->tmp_len++;\r
+            if(i_inst->tmp_len==2){\r
+                //[A-Z]{2}がそろった。命令コードか制御命令か判定\r
+                if(bc2opc(i_inst->tmp,&(i_inst->_current_opc),&(i_inst->_current_oprtype))){\r
+                    //命令コードならインストラクションの情報をもらってくる。\r
+                    NyLPC_TcMiMicVM_OPR_TYPE_getOpInfo(i_inst->_current_oprtype,&i_inst->_oprbc_len,&i_inst->_inst_len);\r
+                    //オペランドが無ければ、命令確定。\r
+                    if(i_inst->_oprbc_len<=0){\r
+                        //書込みポインタ保管\r
+                        wptr=(union NyLPC_TcMiMicVM_TInstruction*)i_bin->ptr;\r
+                        //バッファのシーク\r
+                        if(!NyLPC_TUInt32ArrayPtr_seek(i_bin,1)){\r
+                            NyLPC_OnErrorGoto(ERROR);\r
+                        }\r
+                        //インストラクションの出力と処理したBC長の計算\r
+                        wptr->op.opc=i_inst->_current_opc;\r
+                        wptr->op.oprtype=i_inst->_current_oprtype;\r
+                        *o_parsed_bc=i+1;       //パースしたBCの長さ\r
+                        *o_bin_len=i_inst->_inst_len;\r
+                        //解析バッファの長さをリセットして、次のBCブロックのパース準備\r
+                        i_inst->tmp_len=0;\r
+                        return NyLPC_TcMiMicTxtCompiler_RET_OK;//命令確定。\r
+                    }\r
+                    //オペランドがあるなら、パース対象を変更。\r
+                    i_inst->tmp_len=0;\r
+                    i_inst->st=NyLPC_TcMiMicTxtCompiler_ST_OPR;\r
+                }else if(bc2ctrlc(i_inst->tmp,&(i_inst->_current_opc),&(i_inst->_current_oprtype))){\r
+                    //命令コードならインストラクションの情報をもらってくる。\r
+                    NyLPC_TcMiMicVM_OPR_TYPE_getOpInfo(i_inst->_current_oprtype,&i_inst->_oprbc_len,&i_inst->_inst_len);\r
+                    //制御コードの解析\r
+                    if(i_inst->_oprbc_len>0){\r
+                        //パラメータのある制御命令未定義だからエラー。\r
+                        NyLPC_OnErrorGoto(ERROR);\r
+                    }\r
+                    //END制御命令?\r
+                    if(i_inst->_current_opc==NyLPC_TcMiMicVM_CP_TYPE_END){\r
+                        *o_bin_len=0;\r
+                        *o_parsed_bc=i+1;       //パースしたBCの長さ\r
+                        i_inst->tmp_len=0;\r
+                        return NyLPC_TcMiMicTxtCompiler_RET_OK_END;//命令確定。(パース完了)\r
+                    }\r
+                    //END制御命令以外ならエラー\r
+                    NyLPC_OnErrorGoto(ERROR);\r
+                }else{\r
+                    //不明な命令\r
+                    NyLPC_OnErrorGoto(ERROR);\r
+                }\r
+            }\r
+            break;\r
+        case NyLPC_TcMiMicTxtCompiler_ST_CTR:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        case NyLPC_TcMiMicTxtCompiler_ST_OPR:\r
+            //オペランド蓄積.\r
+            i_inst->tmp[i_inst->tmp_len]=*(i_bc->ptr+i);\r
+            i_inst->tmp_len++;\r
+            //オペランド長さになるまで値を追記\r
+            if(i_inst->_oprbc_len==i_inst->tmp_len){\r
+                //書込みポインタ保管\r
+                wptr=(union NyLPC_TcMiMicVM_TInstruction*)i_bin->ptr;\r
+                //シーク\r
+                if(!NyLPC_TUInt32ArrayPtr_seek(i_bin,i_inst->_inst_len)){\r
+                    NyLPC_OnErrorGoto(ERROR);\r
+                }\r
+                wptr->op.opc=i_inst->_current_opc;\r
+                wptr->op.oprtype=i_inst->_current_oprtype;\r
+                //オペランドの変換処理\r
+                switch(i_inst->_current_oprtype){\r
+                case NyLPC_TcMiMicVM_OPR_TYPE_WM_WM:\r
+                    if(!(   txt2WMId(i_inst->tmp,&(wptr->wmwm_32.wm1)) &&\r
+                            txt2WMId(i_inst->tmp+2,&(wptr->wmwm_32.wm2))))\r
+                    {\r
+                        NyLPC_OnErrorGoto(ERROR);\r
+                    }\r
+                    break;\r
+                case NyLPC_TcMiMicVM_OPR_TYPE_WM_H08:\r
+                    if(!(   txt2WMId(i_inst->tmp,&(wptr->wmh08_32.wm)) &&\r
+                            txt2UInt(i_inst->tmp+2,2,&(wptr->wmh08_32.h8))))\r
+                    {\r
+                        NyLPC_OnErrorGoto(ERROR);\r
+                    }\r
+                    break;\r
+                case NyLPC_TcMiMicVM_OPR_TYPE_WM_H32:\r
+                    if(!(   txt2WMId(i_inst->tmp,&(wptr->wmh32_64.wm)) &&\r
+                            txt2UInt(i_inst->tmp+2,8,&(wptr->wmh32_64.h32)))){\r
+                        NyLPC_OnErrorGoto(ERROR);\r
+                    }\r
+                    break;\r
+                case NyLPC_TcMiMicVM_OPR_TYPE_WM:\r
+                    if(!txt2WMId(i_inst->tmp,&(wptr->wm_32.wm))){\r
+                        NyLPC_OnErrorGoto(ERROR);\r
+                    }\r
+                    break;\r
+                case NyLPC_TcMiMicVM_OPR_TYPE_H32:\r
+                    if(!txt2UInt(i_inst->tmp,8,&(wptr->h32_64.h32))){\r
+                        NyLPC_OnErrorGoto(ERROR);\r
+                    }\r
+                    break;\r
+                case NyLPC_TcMiMicVM_OPR_TYPE_H08:\r
+                    if(!txt2UInt(i_inst->tmp,2,&(wptr->h8_32.h8)))\r
+                    {\r
+                        NyLPC_OnErrorGoto(ERROR);\r
+                    }\r
+                    break;\r
+                default:\r
+                    NyLPC_OnErrorGoto(ERROR);\r
+                }\r
+                //OPR解析成功。パースしたブロックサイズの計算。\r
+                *o_parsed_bc=i+1;       //パースしたBCの長さ\r
+                *o_bin_len=i_inst->_inst_len;\r
+                i_inst->tmp_len=0;\r
+                i_inst->st=NyLPC_TcMiMicTxtCompiler_ST_OPC;\r
+                return NyLPC_TcMiMicTxtCompiler_RET_OK;\r
+            }\r
+            break;\r
+        default:\r
+            NyLPC_OnErrorGoto(ERROR);\r
+        }\r
+    }\r
+    *o_bin_len=0;\r
+    *o_parsed_bc=i_bc->len;\r
+    return NyLPC_TcMiMicTxtCompiler_RET_CONTINUE;\r
 ERROR:\r
-       i_inst->st=NyLPC_TcMiMicTxtCompiler_ST_NG;\r
-       return NyLPC_TcMiMicTxtCompiler_RET_NG;\r
+    i_inst->st=NyLPC_TcMiMicTxtCompiler_ST_NG;\r
+    return NyLPC_TcMiMicTxtCompiler_RET_NG;\r
 }\r
 \r
 \r
@@ -226,11 +226,11 @@ ERROR:
  */\r
 NyLPC_TcMiMicTxtCompiler_RET NyLPC_cMiMicTxtCompiler_compileFragment2(NyLPC_TcMiMicTxtCompiler_t* i_inst,NyLPC_TChar i_bc,struct NyLPC_TUInt32ArrayPtr* i_bin,NyLPC_TUInt16* o_bin_len)\r
 {\r
-       struct NyLPC_TCharArrayPtr bc;\r
-       NyLPC_TUInt16 bc_len;\r
-       bc.ptr=&i_bc;\r
-       bc.len=1;\r
-       return NyLPC_cMiMicTxtCompiler_compileFragment(i_inst,&bc,i_bin,o_bin_len,&bc_len);\r
+    struct NyLPC_TCharArrayPtr bc;\r
+    NyLPC_TUInt16 bc_len;\r
+    bc.ptr=&i_bc;\r
+    bc.len=1;\r
+    return NyLPC_cMiMicTxtCompiler_compileFragment(i_inst,&bc,i_bin,o_bin_len,&bc_len);\r
 }\r
 \r
 \r
@@ -240,23 +240,23 @@ NyLPC_TcMiMicTxtCompiler_RET NyLPC_cMiMicTxtCompiler_compileFragment2(NyLPC_TcMi
  */\r
 static NyLPC_TBool bc2ctrlc(const NyLPC_TChar* i_char,NyLPC_TcMiMicVM_OP_TYPE* o_opc,NyLPC_TcMiMicVM_OPR_TYPE* o_opt)\r
 {\r
-       //バイトコード変換の為のテーブル\r
-       const struct TInstructionDef _bc_type_tbl[]=\r
-       {\r
-               //制御命令\r
-               {".E",NyLPC_TcMiMicVM_CP_TYPE_END,NyLPC_TcMiMicVM_OPR_TYPE_NONE},\r
-               {NULL}\r
-       };\r
-       int i;\r
-       for(i=0;_bc_type_tbl[i].bcopcode!=NULL;i++){\r
-               //2バイト一致?\r
-               if((*i_char==_bc_type_tbl[i].bcopcode[0])&&(*(i_char+1)==_bc_type_tbl[i].bcopcode[1])){\r
-                       *o_opc=_bc_type_tbl[i].opid;\r
-                       *o_opt=_bc_type_tbl[i].optype;\r
-                       return NyLPC_TBool_TRUE;\r
-               }\r
-       }\r
-       return NyLPC_TBool_FALSE;\r
+    //バイトコード変換の為のテーブル\r
+    const struct TInstructionDef _bc_type_tbl[]=\r
+    {\r
+        //制御命令\r
+        {".E",NyLPC_TcMiMicVM_CP_TYPE_END,NyLPC_TcMiMicVM_OPR_TYPE_NONE},\r
+        {NULL}\r
+    };\r
+    int i;\r
+    for(i=0;_bc_type_tbl[i].bcopcode!=NULL;i++){\r
+        //2バイト一致?\r
+        if((*i_char==_bc_type_tbl[i].bcopcode[0])&&(*(i_char+1)==_bc_type_tbl[i].bcopcode[1])){\r
+            *o_opc=_bc_type_tbl[i].opid;\r
+            *o_opt=_bc_type_tbl[i].optype;\r
+            return NyLPC_TBool_TRUE;\r
+        }\r
+    }\r
+    return NyLPC_TBool_FALSE;\r
 }\r
 \r
 \r
@@ -265,62 +265,62 @@ static NyLPC_TBool bc2ctrlc(const NyLPC_TChar* i_char,NyLPC_TcMiMicVM_OP_TYPE* o
  */\r
 static NyLPC_TBool bc2opc(const NyLPC_TChar* i_char,NyLPC_TcMiMicVM_OP_TYPE* o_opc,NyLPC_TcMiMicVM_OPR_TYPE* o_opt)\r
 {\r
-       //バイトコード変換の為のテーブル\r
-       const struct TInstructionDef _bc_type_tbl[]=\r
-       {\r
-               {"AA",NyLPC_TcMiMicVM_OP_TYPE_AND,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"AB",NyLPC_TcMiMicVM_OP_TYPE_AND,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-               {"AE",NyLPC_TcMiMicVM_OP_TYPE_OR,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"AF",NyLPC_TcMiMicVM_OP_TYPE_OR,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-               {"AI",NyLPC_TcMiMicVM_OP_TYPE_XOR,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"AJ",NyLPC_TcMiMicVM_OP_TYPE_XOR,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-               {"AM",NyLPC_TcMiMicVM_OP_TYPE_NOT,NyLPC_TcMiMicVM_OPR_TYPE_WM},\r
-\r
-               {"BA",NyLPC_TcMiMicVM_OP_TYPE_SHL,NyLPC_TcMiMicVM_OPR_TYPE_WM_H08},\r
-               {"BB",NyLPC_TcMiMicVM_OP_TYPE_SHL,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"BE",NyLPC_TcMiMicVM_OP_TYPE_SHR,NyLPC_TcMiMicVM_OPR_TYPE_WM_H08},\r
-               {"BF",NyLPC_TcMiMicVM_OP_TYPE_SHR,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-\r
-               {"CA",NyLPC_TcMiMicVM_OP_TYPE_ADD,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"CB",NyLPC_TcMiMicVM_OP_TYPE_ADD,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-               {"CE",NyLPC_TcMiMicVM_OP_TYPE_SUB,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"CF",NyLPC_TcMiMicVM_OP_TYPE_SUB,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-               {"CI",NyLPC_TcMiMicVM_OP_TYPE_MUL,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"CJ",NyLPC_TcMiMicVM_OP_TYPE_MUL,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-\r
-               {"DA",NyLPC_TcMiMicVM_OP_TYPE_MGET,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-               {"DB",NyLPC_TcMiMicVM_OP_TYPE_MGET,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"DE",NyLPC_TcMiMicVM_OP_TYPE_MPUT,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-               {"DF",NyLPC_TcMiMicVM_OP_TYPE_MPUT,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-\r
-               {"EA",NyLPC_TcMiMicVM_OP_TYPE_SGET,NyLPC_TcMiMicVM_OPR_TYPE_WM},\r
-               {"EE",NyLPC_TcMiMicVM_OP_TYPE_SPUT,NyLPC_TcMiMicVM_OPR_TYPE_WM},\r
-               {"EF",NyLPC_TcMiMicVM_OP_TYPE_SPUT,NyLPC_TcMiMicVM_OPR_TYPE_H32},\r
-\r
-               {"FA",NyLPC_TcMiMicVM_OP_TYPE_LD,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
-               {"FB",NyLPC_TcMiMicVM_OP_TYPE_LD,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
-\r
-               {"ZA",NyLPC_TcMiMicVM_OP_TYPE_NOP,NyLPC_TcMiMicVM_OPR_TYPE_NONE},\r
-               {"ZB",NyLPC_TcMiMicVM_OP_TYPE_NOP,NyLPC_TcMiMicVM_OPR_TYPE_H08},\r
-\r
-               {"ZE",NyLPC_TcMiMicVM_OP_TYPE_CALL,NyLPC_TcMiMicVM_OPR_TYPE_WM},\r
-               {"ZF",NyLPC_TcMiMicVM_OP_TYPE_CALL,NyLPC_TcMiMicVM_OPR_TYPE_H32},\r
-\r
-\r
-               {"ZZ",NyLPC_TcMiMicVM_OP_TYPE_EXIT,NyLPC_TcMiMicVM_OPR_TYPE_NONE},\r
-               {NULL}\r
-       };\r
-       int i;\r
-       //ここ早くできますよね。\r
-       for(i=0;_bc_type_tbl[i].bcopcode!=NULL;i++){\r
-               //2バイト一致?\r
-               if((*i_char==_bc_type_tbl[i].bcopcode[0])&&(*(i_char+1)==_bc_type_tbl[i].bcopcode[1])){\r
-                       *o_opc=_bc_type_tbl[i].opid;\r
-                       *o_opt=_bc_type_tbl[i].optype;\r
-                       return NyLPC_TBool_TRUE;\r
-               }\r
-       }\r
-       return NyLPC_TBool_FALSE;\r
+    //バイトコード変換の為のテーブル\r
+    const struct TInstructionDef _bc_type_tbl[]=\r
+    {\r
+        {"AA",NyLPC_TcMiMicVM_OP_TYPE_AND,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"AB",NyLPC_TcMiMicVM_OP_TYPE_AND,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+        {"AE",NyLPC_TcMiMicVM_OP_TYPE_OR,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"AF",NyLPC_TcMiMicVM_OP_TYPE_OR,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+        {"AI",NyLPC_TcMiMicVM_OP_TYPE_XOR,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"AJ",NyLPC_TcMiMicVM_OP_TYPE_XOR,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+        {"AM",NyLPC_TcMiMicVM_OP_TYPE_NOT,NyLPC_TcMiMicVM_OPR_TYPE_WM},\r
+\r
+        {"BA",NyLPC_TcMiMicVM_OP_TYPE_SHL,NyLPC_TcMiMicVM_OPR_TYPE_WM_H08},\r
+        {"BB",NyLPC_TcMiMicVM_OP_TYPE_SHL,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"BE",NyLPC_TcMiMicVM_OP_TYPE_SHR,NyLPC_TcMiMicVM_OPR_TYPE_WM_H08},\r
+        {"BF",NyLPC_TcMiMicVM_OP_TYPE_SHR,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+\r
+        {"CA",NyLPC_TcMiMicVM_OP_TYPE_ADD,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"CB",NyLPC_TcMiMicVM_OP_TYPE_ADD,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+        {"CE",NyLPC_TcMiMicVM_OP_TYPE_SUB,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"CF",NyLPC_TcMiMicVM_OP_TYPE_SUB,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+        {"CI",NyLPC_TcMiMicVM_OP_TYPE_MUL,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"CJ",NyLPC_TcMiMicVM_OP_TYPE_MUL,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+\r
+        {"DA",NyLPC_TcMiMicVM_OP_TYPE_MGET,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+        {"DB",NyLPC_TcMiMicVM_OP_TYPE_MGET,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"DE",NyLPC_TcMiMicVM_OP_TYPE_MPUT,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+        {"DF",NyLPC_TcMiMicVM_OP_TYPE_MPUT,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+\r
+        {"EA",NyLPC_TcMiMicVM_OP_TYPE_SGET,NyLPC_TcMiMicVM_OPR_TYPE_WM},\r
+        {"EE",NyLPC_TcMiMicVM_OP_TYPE_SPUT,NyLPC_TcMiMicVM_OPR_TYPE_WM},\r
+        {"EF",NyLPC_TcMiMicVM_OP_TYPE_SPUT,NyLPC_TcMiMicVM_OPR_TYPE_H32},\r
+\r
+        {"FA",NyLPC_TcMiMicVM_OP_TYPE_LD,NyLPC_TcMiMicVM_OPR_TYPE_WM_WM},\r
+        {"FB",NyLPC_TcMiMicVM_OP_TYPE_LD,NyLPC_TcMiMicVM_OPR_TYPE_WM_H32},\r
+\r
+        {"ZA",NyLPC_TcMiMicVM_OP_TYPE_NOP,NyLPC_TcMiMicVM_OPR_TYPE_NONE},\r
+        {"ZB",NyLPC_TcMiMicVM_OP_TYPE_NOP,NyLPC_TcMiMicVM_OPR_TYPE_H08},\r
+\r
+        {"ZE",NyLPC_TcMiMicVM_OP_TYPE_CALL,NyLPC_TcMiMicVM_OPR_TYPE_WM},\r
+        {"ZF",NyLPC_TcMiMicVM_OP_TYPE_CALL,NyLPC_TcMiMicVM_OPR_TYPE_H32},\r
+\r
+\r
+        {"ZZ",NyLPC_TcMiMicVM_OP_TYPE_EXIT,NyLPC_TcMiMicVM_OPR_TYPE_NONE},\r
+        {NULL}\r
+    };\r
+    int i;\r
+    //ここ早くできますよね。\r
+    for(i=0;_bc_type_tbl[i].bcopcode!=NULL;i++){\r
+        //2バイト一致?\r
+        if((*i_char==_bc_type_tbl[i].bcopcode[0])&&(*(i_char+1)==_bc_type_tbl[i].bcopcode[1])){\r
+            *o_opc=_bc_type_tbl[i].opid;\r
+            *o_opt=_bc_type_tbl[i].optype;\r
+            return NyLPC_TBool_TRUE;\r
+        }\r
+    }\r
+    return NyLPC_TBool_FALSE;\r
 }\r
 \r
 \r
@@ -333,123 +333,122 @@ static NyLPC_TBool bc2opc(const NyLPC_TChar* i_char,NyLPC_TcMiMicVM_OP_TYPE* o_o
  */\r
 static NyLPC_TBool txt2UInt(const NyLPC_TChar* i_txt,NyLPC_TUInt8 i_num,void* out)\r
 {\r
-       NyLPC_TUInt32 ret=0;\r
-       NyLPC_TChar c;\r
-       int i;\r
-\r
-       for(i=0;i<i_num;i++){\r
-               c=(*(i_txt+i));\r
-               if('f'>=c && c>='a'){\r
-                       c=c-(NyLPC_TUInt8)'a'+10;\r
-               }else if('9'>=c && c>='0'){\r
-                       c-=(NyLPC_TUInt8)'0';\r
-               }else{\r
-                       return NyLPC_TBool_FALSE;\r
-               }\r
-               ret=(ret<<4)|c;\r
-       }\r
-       //2,4,8だけ。\r
-       switch(i_num){\r
-       case 2:\r
-               *((NyLPC_TUInt8*)out)=(NyLPC_TUInt8)ret;\r
-               break;\r
-       case 4:\r
-               *((NyLPC_TUInt16*)out)=(NyLPC_TUInt16)ret;\r
-               break;\r
-       case 8:\r
-               *((NyLPC_TUInt32*)out)=(NyLPC_TUInt32)ret;\r
-               break;\r
-       default:\r
-               return NyLPC_TBool_FALSE;\r
-       }\r
-       return NyLPC_TBool_TRUE;\r
+    NyLPC_TUInt32 ret=0;\r
+    NyLPC_TChar c;\r
+    int i;\r
+\r
+    for(i=0;i<i_num;i++){\r
+        c=(*(i_txt+i));\r
+        if('f'>=c && c>='a'){\r
+            c=c-(NyLPC_TUInt8)'a'+10;\r
+        }else if('9'>=c && c>='0'){\r
+            c-=(NyLPC_TUInt8)'0';\r
+        }else{\r
+            return NyLPC_TBool_FALSE;\r
+        }\r
+        ret=(ret<<4)|c;\r
+    }\r
+    //2,4,8だけ。\r
+    switch(i_num){\r
+    case 2:\r
+        *((NyLPC_TUInt8*)out)=(NyLPC_TUInt8)ret;\r
+        break;\r
+    case 4:\r
+        *((NyLPC_TUInt16*)out)=(NyLPC_TUInt16)ret;\r
+        break;\r
+    case 8:\r
+        *((NyLPC_TUInt32*)out)=(NyLPC_TUInt32)ret;\r
+        break;\r
+    default:\r
+        return NyLPC_TBool_FALSE;\r
+    }\r
+    return NyLPC_TBool_TRUE;\r
 }\r
 /**\r
  * テキストデータをWMIDに変換する。WMIDは、VMの使用の影響を受ける。\r
  */\r
 static NyLPC_TBool txt2WMId(const NyLPC_TChar* i_txt,NyLPC_TUInt8* out)\r
 {\r
-       if(txt2UInt(i_txt,2,out)){\r
-               if(*out<=NyLPC_TcMiMicVM_NUMBER_OF_WM){\r
-                       return NyLPC_TBool_TRUE;\r
-               }\r
-       }\r
-       return NyLPC_TBool_FALSE;\r
+    if(txt2UInt(i_txt,2,out)){\r
+        if(*out<=NyLPC_TcMiMicVM_NUMBER_OF_WM){\r
+            return NyLPC_TBool_TRUE;\r
+        }\r
+    }\r
+    return NyLPC_TBool_FALSE;\r
 }\r
 /**\r
  * オペランドタイプからオペランドのBC長と、インストラクションサイズを計算\r
  */\r
 static void NyLPC_TcMiMicVM_OPR_TYPE_getOpInfo(NyLPC_TcMiMicVM_OPR_TYPE i_type,NyLPC_TUInt8* oprbc_len,NyLPC_TUInt8* o_istlen)\r
 {\r
-       const struct{\r
-               NyLPC_TcMiMicVM_OPR_TYPE t;\r
-               NyLPC_TUInt8 oprbc_len;\r
-               NyLPC_TUInt8 ist_len;\r
-       }_tbl[]={\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_NONE,         0,                      1},\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_WM_WM,        (1+1)*2,        1},\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_WM_H08,       (1+1)*2,        1},\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_WM_H16,       (1+2)*2,        2},\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_WM_H32,       (1+4)*2,        2},\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_WM,           (1)*2,          1},\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_H08,          (1)*2,          1},\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_H16,          (2)*2,          1},\r
-               {NyLPC_TcMiMicVM_OPR_TYPE_H32,          (4)*2,          2},\r
-               {0,0,0}\r
-       };\r
-       int i;\r
-       for(i=0;_tbl[i].t!=0;i++){\r
-               if(_tbl[i].t==i_type){\r
-                       *oprbc_len=_tbl[i].oprbc_len;\r
-                       *o_istlen=_tbl[i].ist_len;\r
-                       return;\r
-               }\r
-       }\r
-       NyLPC_Abort();\r
-       return;\r
+    const struct{\r
+        NyLPC_TcMiMicVM_OPR_TYPE t;\r
+        NyLPC_TUInt8 oprbc_len;\r
+        NyLPC_TUInt8 ist_len;\r
+    }_tbl[]={\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_NONE,     0,          1},\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_WM_WM,    (1+1)*2,    1},\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_WM_H08,   (1+1)*2,    1},\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_WM_H16,   (1+2)*2,    2},\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_WM_H32,   (1+4)*2,    2},\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_WM,       (1)*2,      1},\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_H08,      (1)*2,      1},\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_H16,      (2)*2,      1},\r
+        {NyLPC_TcMiMicVM_OPR_TYPE_H32,      (4)*2,      2},\r
+        {0,0,0}\r
+    };\r
+    int i;\r
+    for(i=0;_tbl[i].t!=0;i++){\r
+        if(_tbl[i].t==i_type){\r
+            *oprbc_len=_tbl[i].oprbc_len;\r
+            *o_istlen=_tbl[i].ist_len;\r
+            return;\r
+        }\r
+    }\r
+    NyLPC_Abort();\r
+    return;\r
 }\r
 \r
 #define TEST\r
 #ifndef TEST\r
 void main(void)\r
 {\r
-       struct NyLPC_TCharArrayPtr bc;\r
-       const char* BC="AA0102AB0100000001AE0203AF0200000003AI0304AJ0300000004AM07BA0505BE0607CA0304CB0300000005CE0304CF0300000005CI0304CJ0300000005DA0400000000DE0400000000EA04EE04EF00000000ZAZZ.E";\r
-       NyLPC_TcMiMicTxtCompiler_t inst;\r
-       struct NyLPC_TUInt32ArrayPtr bin;\r
-\r
-       NyLPC_TUInt16 l,bl;\r
-       NyLPC_TUInt32 obuf[1024];\r
-       NyLPC_cMiMicBcCompiler_initialize(&inst);\r
-       bc.ptr=(char* )BC;\r
-       bc.len=strlen(BC);\r
-       bin.ptr=obuf;\r
-       bin.len=5;\r
-\r
-       for(;;){\r
-\r
-               switch(NyLPC_cMiMicBcCompiler_compileFragment(&inst,&bc,&bin,&bl,&l))\r
-               {\r
-               case NyLPC_TcMiMicTxtCompiler_RET_OK:\r
-                       //命令確定。\r
-                       NyLPC_TUInt32ArrayPtr_seek(&bin,bl);\r
-                       NyLPC_TCharArrayPtr_seek(&bc,l);\r
-                       break;\r
-               case NyLPC_TcMiMicTxtCompiler_RET_OK_END:\r
-                       //命令終端\r
-                       printf("OK");\r
-                       break;\r
-               case NyLPC_TcMiMicTxtCompiler_RET_CONTINUE:\r
-                       //蓄積中。\r
-                       NyLPC_TCharArrayPtr_seek(&bc,l);\r
-                       break;\r
-               case NyLPC_TcMiMicTxtCompiler_RET_NG:\r
-                       printf("エラー");\r
-                       return;\r
-               default:\r
-                       break;\r
-               }\r
-       }\r
+    struct NyLPC_TCharArrayPtr bc;\r
+    const char* BC="AA0102AB0100000001AE0203AF0200000003AI0304AJ0300000004AM07BA0505BE0607CA0304CB0300000005CE0304CF0300000005CI0304CJ0300000005DA0400000000DE0400000000EA04EE04EF00000000ZAZZ.E";\r
+    NyLPC_TcMiMicTxtCompiler_t inst;\r
+    struct NyLPC_TUInt32ArrayPtr bin;\r
+\r
+    NyLPC_TUInt16 l,bl;\r
+    NyLPC_TUInt32 obuf[1024];\r
+    NyLPC_cMiMicBcCompiler_initialize(&inst);\r
+    bc.ptr=(char* )BC;\r
+    bc.len=strlen(BC);\r
+    bin.ptr=obuf;\r
+    bin.len=5;\r
+\r
+    for(;;){\r
+\r
+        switch(NyLPC_cMiMicBcCompiler_compileFragment(&inst,&bc,&bin,&bl,&l))\r
+        {\r
+        case NyLPC_TcMiMicTxtCompiler_RET_OK:\r
+            //命令確定。\r
+            NyLPC_TUInt32ArrayPtr_seek(&bin,bl);\r
+            NyLPC_TCharArrayPtr_seek(&bc,l);\r
+            break;\r
+        case NyLPC_TcMiMicTxtCompiler_RET_OK_END:\r
+            //命令終端\r
+            printf("OK");\r
+            break;\r
+        case NyLPC_TcMiMicTxtCompiler_RET_CONTINUE:\r
+            //蓄積中。\r
+            NyLPC_TCharArrayPtr_seek(&bc,l);\r
+            break;\r
+        case NyLPC_TcMiMicTxtCompiler_RET_NG:\r
+            printf("エラー");\r
+            return;\r
+        default:\r
+            break;\r
+        }\r
+    }\r
 }\r
 #endif\r
-\r