Index: trunk/abdev/BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/Compile_CallProc.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler32/Compile_CallProc.cpp	(revision 250)
@@ -329,13 +329,16 @@
 		//call dword ptr[edx+func_index]
 		if(i2*PTR_SIZE<=0x7F){
-			OpBuffer[obp++]=(char)0xFF;
-			OpBuffer[obp++]=(char)0x52;
-			OpBuffer[obp++]=(char)(i2*PTR_SIZE);
+			compiler.codeGenerator.PutOld(
+				(char)0xFF,
+				(char)0x52,
+				(char)(i2*PTR_SIZE)
+			);
 		}
 		else{
-			OpBuffer[obp++]=(char)0xFF;
-			OpBuffer[obp++]=(char)0x92;
-			*((long *)(OpBuffer+obp))=i2*PTR_SIZE;
-			obp+=sizeof(long);
+			compiler.codeGenerator.PutOld(
+				(char)0xFF,
+				(char)0x92
+			);
+			compiler.codeGenerator.PutOld( (long)(i2*PTR_SIZE), Schedule::None );
 		}
 	}
@@ -361,5 +364,5 @@
 }
 
-bool Opcode_CallDllProc( const char *lpszParms, DllProc *pDllProc ){
+bool Opcode_CallDllProc( const char *lpszParms, const DllProc *pDllProc ){
 
 	extern BOOL bDebugCompile;
@@ -397,9 +400,5 @@
 
 	//call dword ptr[LookupTable]
-	pDllProc->Using();
-	OpBuffer[obp++]=(char)0xFF;
-	OpBuffer[obp++]=(char)0x15;
-	pobj_ImportAddrSchedule->add(pDllProc);
-	obp+=sizeof(long);
+	compiler.codeGenerator.op_call( pDllProc );
 
 	if(pDllProc->IsCdecl()){
Index: trunk/abdev/BasicCompiler32/Compile_Func.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/Compile_Func.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler32/Compile_Func.cpp	(revision 250)
@@ -36,42 +36,45 @@
 
 		//fnstcw word ptr[esp]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.PutOld(
+			(char)0xD9,
+			(char)0x3C,
+			(char)0x24
+		);
 
 		//mov ax,word ptr[esp]
-		OpBuffer[obp++]=(char)0x66;
-		OpBuffer[obp++]=(char)0x8B;
-		OpBuffer[obp++]=(char)0x04;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_RM( sizeof(short), REG_EAX, REG_ESP, 0, MOD_BASE );
 
 		//or ah,0Ch
-		OpBuffer[obp++]=(char)0x80;
-		OpBuffer[obp++]=(char)0xCC;
-		OpBuffer[obp++]=(char)0x0C;
+		compiler.codeGenerator.PutOld(
+			(char)0x80,
+			(char)0xCC,
+			(char)0x0C
+		);
 
 		//mov word ptr[esp-2],ax
-		OpBuffer[obp++]=(char)0x66;
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x44;
-		OpBuffer[obp++]=(char)0x24;
-		OpBuffer[obp++]=(char)0xFE;
+		compiler.codeGenerator.op_mov_MR( sizeof(short), REG_EAX, REG_ESP, -2, MOD_BASE_DISP8 );
 
 		//fldcw word ptr[esp-2]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x6C;
-		OpBuffer[obp++]=(char)0x24;
-		OpBuffer[obp++]=(char)0xFE;
+		compiler.codeGenerator.PutOld(
+			(char)0xD9,
+			(char)0x6C,
+			(char)0x24,
+			(char)0xFE
+		);
 
 		//fistp dword ptr[esp+4]
-		OpBuffer[obp++]=(char)0xDB;
-		OpBuffer[obp++]=(char)0x5C;
-		OpBuffer[obp++]=(char)0x24;
-		OpBuffer[obp++]=(char)0x04;
+		compiler.codeGenerator.PutOld(
+			(char)0xDB,
+			(char)0x5C,
+			(char)0x24,
+			(char)0x04
+		);
 
 		//fldcw word ptr[esp]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x2C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.PutOld(
+			(char)0xD9,
+			(char)0x2C,
+			(char)0x24
+		);
 
 		//add esp,4
@@ -86,42 +89,45 @@
 
 		//fnstcw word ptr[esp]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x3C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.PutOld(
+			(char)0xD9,
+			(char)0x3C,
+			(char)0x24
+		);
 
 		//mov ax,word ptr[esp]
-		OpBuffer[obp++]=(char)0x66;
-		OpBuffer[obp++]=(char)0x8B;
-		OpBuffer[obp++]=(char)0x04;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_RM( sizeof(short), REG_EAX, REG_ESP, 0, MOD_BASE );
 
 		//or ah,0Ch
-		OpBuffer[obp++]=(char)0x80;
-		OpBuffer[obp++]=(char)0xCC;
-		OpBuffer[obp++]=(char)0x0C;
+		compiler.codeGenerator.PutOld(
+			(char)0x80,
+			(char)0xCC,
+			(char)0x0C
+		);
 
 		//mov word ptr[esp-2],ax
-		OpBuffer[obp++]=(char)0x66;
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x44;
-		OpBuffer[obp++]=(char)0x24;
-		OpBuffer[obp++]=(char)0xFE;
+		compiler.codeGenerator.op_mov_MR( sizeof(short), REG_EAX, REG_ESP, -2, MOD_BASE_DISP8 );
 
 		//fldcw word ptr[esp-2]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x6C;
-		OpBuffer[obp++]=(char)0x24;
-		OpBuffer[obp++]=(char)0xFE;
+		compiler.codeGenerator.PutOld(
+			(char)0xD9,
+			(char)0x6C,
+			(char)0x24,
+			(char)0xFE
+		);
 
 		//fistp dword ptr[esp+4]
-		OpBuffer[obp++]=(char)0xDB;
-		OpBuffer[obp++]=(char)0x5C;
-		OpBuffer[obp++]=(char)0x24;
-		OpBuffer[obp++]=(char)0x04;
+		compiler.codeGenerator.PutOld(
+			(char)0xDB,
+			(char)0x5C,
+			(char)0x24,
+			(char)0x04
+		);
 
 		//fldcw word ptr[esp]
-		OpBuffer[obp++]=(char)0xD9;
-		OpBuffer[obp++]=(char)0x2C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.PutOld(
+			(char)0xD9,
+			(char)0x2C,
+			(char)0x24
+		);
 
 		//add esp,4
@@ -307,7 +313,5 @@
 
 		//mov eax,ProcAddr
-		OpBuffer[obp++]=(char)0xB8;
-		pobj_SubAddrSchedule->add(pUserProc,0);
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_addressof( REG_EAX, pUserProc );
 	}
 
Index: trunk/abdev/BasicCompiler32/Compile_Object.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/Compile_Object.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler32/Compile_Object.cpp	(revision 250)
@@ -89,9 +89,6 @@
 		compiler.codeGenerator.op_sub_RV8(REG_EBX,1);
 
-		//jnz ↑
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		*((long *)(OpBuffer+obp))=jnz_back-(obp+sizeof(long));
-		obp+=sizeof(long);
+		//jne ↑
+		compiler.codeGenerator.op_jne( jnz_back-obp, sizeof(long), false, true );
 	}
 }
@@ -293,9 +290,6 @@
 	compiler.codeGenerator.op_sub_RV8(REG_EBX,1);
 
-	//jnz ↑
-	OpBuffer[obp++]=(char)0x0F;
-	OpBuffer[obp++]=(char)0x85;
-	*((long *)(OpBuffer+obp))=jnz_back-(obp+sizeof(long));
-	obp+=sizeof(long);
+	//jne ↑
+	compiler.codeGenerator.op_jne( jnz_back-obp, sizeof(long), false, true );
 
 
Index: trunk/abdev/BasicCompiler32/Compile_Statement.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 250)
@@ -798,38 +798,26 @@
 }
 
-void AddCaseSchedule(void){
-	extern DWORD *pCaseSchedule;
-	extern int CaseScheduleNum;
-	extern HANDLE hHeap;
-
-	pCaseSchedule=(DWORD *)HeapReAlloc(hHeap,0,pCaseSchedule,(CaseScheduleNum+1)*sizeof(DWORD));
-	pCaseSchedule[CaseScheduleNum]=obp;
-	CaseScheduleNum++;
-}
-
-int CaseTypeSize;
+//Caseスケジュール
+class SelectSchedule
+{
+public:
+	SelectSchedule( int typeSize )
+		: typeSize( typeSize )
+		, nowCaseSchedule( 0 )
+	{
+	}
+
+	PertialSchedules casePertialSchedules;
+	int typeSize;
+	int nowCaseSchedule;
+};
+std::vector<SelectSchedule> selectSchedules;
+
 void OpcodeSelect(const char *lpszParms){
-	extern DWORD *pCaseSchedule;
-	extern int CaseScheduleNum;
-	extern int NowCaseSchedule;
-	extern int CaseTypeSize;
 	extern HANDLE hHeap;
 	extern char *basbuf;
 	int i,i2,i3,sw,NowCaseCp;
 	char temporary[VN_SIZE];
-
-	DWORD *temp_pCaseSchedule;
-	int temp_CaseScheduleNum;
-	int temp_NowCaseSchedule;
-	int temp_CaseTypeSize;
-
-	temp_pCaseSchedule=pCaseSchedule;
-	temp_CaseScheduleNum=CaseScheduleNum;
-	temp_NowCaseSchedule=NowCaseSchedule;
-	temp_CaseTypeSize=CaseTypeSize;
-	pCaseSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
-	CaseScheduleNum=0;
-	NowCaseSchedule=0;
-
+	
 	Type type1;
 	if( !NumOpe(lpszParms,Type(), type1 ) ){
@@ -837,16 +825,13 @@
 	}
 
-	CaseTypeSize = type1.GetSize();
-	if( CaseTypeSize < sizeof(long) ){
-		CaseTypeSize=sizeof(long);
+	selectSchedules.push_back( SelectSchedule( type1.GetSize() ) );
+
+	if( selectSchedules.back().typeSize < sizeof(long) ){
+		selectSchedules.back().typeSize = sizeof(long);
 	}
 
 	for(i=cp,sw=0;;i++){
 		if(basbuf[i]=='\0'){
-			HeapDefaultFree(pCaseSchedule);
-			pCaseSchedule=temp_pCaseSchedule;
-			CaseScheduleNum=temp_CaseScheduleNum;
-			NowCaseSchedule=temp_NowCaseSchedule;
-			CaseTypeSize=temp_CaseTypeSize;
+			selectSchedules.pop_back();
 			SetError(22,"Select",cp);
 			return;
@@ -865,5 +850,5 @@
 			if(sw==0){
 				//add esp,CaseTypeSize
-				compiler.codeGenerator.op_add_esp(CaseTypeSize);
+				compiler.codeGenerator.op_add_esp( selectSchedules.back().typeSize );
 			}
 			break;
@@ -957,8 +942,7 @@
 
 					//jne ...
-					OpBuffer[obp++]=(char)0x0F;
-					OpBuffer[obp++]=(char)0x85;
-					AddCaseSchedule();
-					obp+=sizeof(long);
+					selectSchedules.back().casePertialSchedules.push_back(
+						compiler.codeGenerator.op_jne( 0, sizeof(long), true )
+					);
 				}
 				else if(type1.IsDouble()){
@@ -969,5 +953,5 @@
 
 					//add esp,CaseTypeSize
-					compiler.codeGenerator.op_add_esp(CaseTypeSize);
+					compiler.codeGenerator.op_add_esp(selectSchedules.back().typeSize);
 
 					//fld qword ptr[esp]
@@ -984,8 +968,7 @@
 
 					//jne ...
-					OpBuffer[obp++]=(char)0x0F;
-					OpBuffer[obp++]=(char)0x85;
-					AddCaseSchedule();
-					obp+=sizeof(long);
+					selectSchedules.back().casePertialSchedules.push_back(
+						compiler.codeGenerator.op_jne( 0, sizeof(long), true )
+					);
 				}
 				else if(type1.IsSingle()){
@@ -996,5 +979,5 @@
 
 					//add esp,CaseTypeSize
-					compiler.codeGenerator.op_add_esp(CaseTypeSize);
+					compiler.codeGenerator.op_add_esp(selectSchedules.back().typeSize);
 
 					//fld dword ptr[esp]
@@ -1011,8 +994,7 @@
 
 					//jne ...
-					OpBuffer[obp++]=(char)0x0F;
-					OpBuffer[obp++]=(char)0x85;
-					AddCaseSchedule();
-					obp+=sizeof(long);
+					selectSchedules.back().casePertialSchedules.push_back(
+						compiler.codeGenerator.op_jne( 0, sizeof(long), true )
+					);
 				}
 				else{
@@ -1029,8 +1011,7 @@
 
 					//je ...
-					OpBuffer[obp++]=(char)0x0F;
-					OpBuffer[obp++]=(char)0x84;
-					AddCaseSchedule();
-					obp+=sizeof(long);
+					selectSchedules.back().casePertialSchedules.push_back(
+						compiler.codeGenerator.op_je( 0, sizeof(long), true )
+					);
 				}
 
@@ -1042,7 +1023,7 @@
 
 			//jmp ...
-			OpBuffer[obp++]=(char)0xE9;
-			AddCaseSchedule();
-			obp+=sizeof(long);
+			selectSchedules.back().casePertialSchedules.push_back(
+				compiler.codeGenerator.op_jmp( 0, sizeof(long), true )
+			);
 		}
 	}
@@ -1055,29 +1036,22 @@
 
 	//jmp EndSelect
-	OpBuffer[obp++]=(char)0xE9;
-	AddCaseSchedule();
-	obp+=sizeof(long);
+	selectSchedules.back().casePertialSchedules.push_back(
+		compiler.codeGenerator.op_jmp( 0, sizeof(long), true )
+	);
 
 	//最終スケジュール
-	for(i=NowCaseSchedule;i<CaseScheduleNum;i++){
-		*(long *)(OpBuffer+pCaseSchedule[i])=obp-(pCaseSchedule[i]+sizeof(long));
-	}
-	HeapDefaultFree(pCaseSchedule);
+	for(i=selectSchedules.back().nowCaseSchedule;i<(int)selectSchedules.back().casePertialSchedules.size();i++){
+		compiler.codeGenerator.opfix_JmpPertialSchedule( selectSchedules.back().casePertialSchedules[i] );
+	}
 
 	//レキシカルスコープをレベルダウン
 	compiler.codeGenerator.lexicalScopes.End();
 
-	pCaseSchedule=temp_pCaseSchedule;
-	CaseScheduleNum=temp_CaseScheduleNum;
-	NowCaseSchedule=temp_NowCaseSchedule;
-	CaseTypeSize=temp_CaseTypeSize;
+	selectSchedules.pop_back();
 }
 void OpcodeCase(char *Parameter){
-	extern DWORD *pCaseSchedule;
-	extern int NowCaseSchedule;
-	extern int CaseTypeSize;
 	int i;
 
-	if(!pCaseSchedule){
+	if(selectSchedules.back().typeSize==-1){
 		SetError(30,"Case",cp);
 		return;
@@ -1085,13 +1059,13 @@
 
 	//jmp EndSelect
-	OpBuffer[obp++]=(char)0xE9;
-	AddCaseSchedule();
-	obp+=sizeof(long);
+	selectSchedules.back().casePertialSchedules.push_back(
+		compiler.codeGenerator.op_jmp( 0, sizeof(long), true )
+	);
 
 	i=0;
 	while(1){
 		//Caseスケジュール
-		*(long *)(OpBuffer+pCaseSchedule[NowCaseSchedule])=obp-(pCaseSchedule[NowCaseSchedule]+sizeof(long));
-		NowCaseSchedule++;
+		compiler.codeGenerator.opfix_JmpPertialSchedule( selectSchedules.back().casePertialSchedules[selectSchedules.back().nowCaseSchedule] );
+		selectSchedules.back().nowCaseSchedule++;
 
 		i=JumpOneParameter(Parameter,i);
@@ -1100,5 +1074,5 @@
 
 	//add esp,CaseTypeSize
-	compiler.codeGenerator.op_add_esp(CaseTypeSize);
+	compiler.codeGenerator.op_add_esp(selectSchedules.back().typeSize);
 }
 
Index: trunk/abdev/BasicCompiler32/Compile_Var.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/Compile_Var.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler32/Compile_Var.cpp	(revision 250)
@@ -1136,10 +1136,5 @@
 
 			//call FillMemory
-			OpBuffer[obp++]=(char)0xFF;
-			OpBuffer[obp++]=(char)0x15;
-			DllProc *pDllProc = GetDeclareHash("FillMemory");
-			pDllProc->Using();
-			pobj_ImportAddrSchedule->add(pDllProc);
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_call( GetDeclareHash("FillMemory") );
 		}
 	}
Index: trunk/abdev/BasicCompiler32/Opcode.h
===================================================================
--- trunk/abdev/BasicCompiler32/Opcode.h	(revision 248)
+++ trunk/abdev/BasicCompiler32/Opcode.h	(revision 250)
@@ -219,5 +219,5 @@
 bool Opcode_CallProcPtr( const char *variable, const char *lpszParms,ProcPointer *pProcPointer);
 bool Opcode_CallProc(const char *Parameter,const UserProc *pUserProc,DWORD dwFlags,const char *ObjectName,int RefType);
-bool Opcode_CallDllProc( const char *lpszParms, DllProc *pDllProc );
+bool Opcode_CallDllProc( const char *lpszParms, const DllProc *pDllProc );
 
 //Compile_ProcOp.cpp
Index: trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp	(revision 250)
@@ -1180,9 +1180,13 @@
 }
 void CodeGenerator::op_call(const UserProc *pUserProc){
-	pUserProc->Using();
-
 	pNativeCode->Put( (char)0xE8 );
 	pNativeCode->PutUserProcSchedule( pUserProc, true );
 }
+void CodeGenerator::op_call( const DllProc *pDllProc )
+{
+	pNativeCode->Put( (char)0xFF );
+	pNativeCode->Put( (char)0x15 );
+	pNativeCode->PutDllProcSchedule( pDllProc );
+}
 void CodeGenerator::op_ret(){
 	pNativeCode->Put( (char)0xC3 );
Index: trunk/abdev/BasicCompiler_Common/Compile.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/Compile.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler_Common/Compile.cpp	(revision 250)
@@ -23,9 +23,4 @@
 LABEL *pLabelNames;
 int MaxLabelNum;
-
-//Caseスケジュール
-DWORD *pCaseSchedule;
-int CaseScheduleNum;
-int NowCaseSchedule;
 
 //グローバル変数初期バッファ
Index: trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 248)
+++ trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 250)
@@ -265,14 +265,14 @@
 	const PertialSchedule *__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
 public:
-	const PertialSchedule *op_jle( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_jbe( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_jge( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_jae( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_jl( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_jb( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_jg( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_ja( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_jne( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	const PertialSchedule *op_je( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
+	const PertialSchedule *op_jle( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_jbe( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_jge( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_jae( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_jl( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_jb( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_jg( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_ja( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_jne( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	const PertialSchedule *op_je( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
 	const PertialSchedule *op_jmp( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
 	void op_jmp_continue();
@@ -435,4 +435,5 @@
 	void op_call_R( int reg );
 	void op_call(const UserProc *pUserProc);
+	void op_call(const DllProc *pDllProc);
 	void op_ret();
 	void op_ret( short stackFrameSize );
Index: trunk/abdev/BasicCompiler_Common/include/NativeCode.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 248)
+++ trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 250)
@@ -33,4 +33,5 @@
 		LONG_PTR lpValue;
 		const ::UserProc *pUserProc;
+		const ::DllProc *pDllProc;
 	};
 
@@ -58,4 +59,10 @@
 		, offset( offset )
 		, pUserProc( pUserProc )
+	{
+	}
+	Schedule( const ::DllProc *pDllProc, long offest )
+		: type( Schedule::UserProc )
+		, offset( offset )
+		, pDllProc( pDllProc )
 	{
 	}
@@ -242,4 +249,5 @@
 	}
 	void PutUserProcSchedule( const UserProc *pUserProc, bool isCall );
+	void PutDllProcSchedule( const DllProc *pDllProc );
 	void Put( short s )
 	{
Index: trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 250)
@@ -158,43 +158,43 @@
 	return pPertialSchedule;
 }
-const PertialSchedule *CodeGenerator::op_jle( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x0E, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_jbe( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x06, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_jge( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x0D, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_jae( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x03, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_jl( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x0C, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_jb( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x02, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_jg( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x0F, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_ja( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x07, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_jne( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x05, offset, op_size, isPertialSchedule );
-}
-const PertialSchedule *CodeGenerator::op_je( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0x04, offset, op_size, isPertialSchedule );
+const PertialSchedule *CodeGenerator::op_jle( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x0E, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_jbe( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x06, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_jge( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x0D, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_jae( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x03, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_jl( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x0C, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_jb( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x02, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_jg( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x0F, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_ja( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x07, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_jne( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x05, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+const PertialSchedule *CodeGenerator::op_je( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0x04, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
 }
 const PertialSchedule *CodeGenerator::op_jmp( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
Index: trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp	(revision 248)
+++ trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp	(revision 250)
@@ -48,2 +48,21 @@
 	ObpPlus( sizeof(long) );
 }
+
+void NativeCode::PutDllProcSchedule( const DllProc *pDllProc )
+{
+	pDllProc->Using();
+
+	schedules.push_back( Schedule( pDllProc, size ) );
+
+	*((long *)(codeBuffer+size))=0;
+	size += sizeof(long);
+
+
+
+	// 未完成
+	pobj_ImportAddrSchedule->add(pDllProc);
+	extern char *OpBuffer;
+	extern int obp;
+	*((long *)(OpBuffer+obp))=0;
+	ObpPlus( sizeof(long) );
+}
