Index: /BasicCompiler32/BasicCompiler.h
===================================================================
--- /BasicCompiler32/BasicCompiler.h	(revision 3)
+++ /BasicCompiler32/BasicCompiler.h	(revision 3)
@@ -0,0 +1,93 @@
+#include "../BasicCompiler_Common/common.h"
+
+LPSTR BasicFileFilter="プログラム ファイル(*.ab;*.bas;*.abp;*.sbp)\0*.ab;*.bas;*.abp;*sbp\0テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0";
+LPSTR ExeFileFilter="実行可能ファイル(*.exe)\0*.exe\0すべてのファイル(*.*)\0*\0\0";
+
+HINSTANCE hInst;
+HWND hOwnerEditor;
+HWND hMainDlg;
+HWND hDebugWnd;
+HANDLE hHeap;
+int ScreenX,ScreenY;
+WNDPROC OldErrorListProc,OldDebugListProc;
+WNDPROC OldThreadComboProc;
+WNDPROC OldProcComboProc;
+unsigned short TypeOfSubSystem;
+BOOL bClipCompileView;
+
+//不揮発性データ（レジストリに保存される）
+CNonVolatile *pobj_nv;
+
+//プログラム情報
+BOOL bCompilingGlobal;
+BOOL bStrict;
+DWORD ImageBase;
+INCLUDEFILEINFO IncludeFileInfo;
+SUBINFO **ppSubHash;
+int SubNum;
+char **ppMacroNames;
+int MacroNum;
+DECLAREINFO **ppDeclareHash;
+CONSTINFO **ppConstHash;
+PROCPTRINFO *pProcPtrInfo;
+int ProcPtrInfoNum;
+
+ERRORINFO *pErrorInfo;
+int ErrorNum;
+int CompileMsgNum;
+int WarningNum;
+BOOL bError;
+char **SynonymErrorWords;
+int SynonymErrorNum;
+BOOL bStopCompile;
+
+//リソース情報
+char ResourceFileName[MAX_PATH];
+RESOURCEDATAINFO *pCursorResourceInfo;
+int CursorResourceNum;
+RESOURCEDATAINFO *pBitmapResourceInfo;
+int BitmapResourceNum;
+RESOURCEDATAINFO *pIconResourceInfo;
+int IconResourceNum;
+char szManifestPath[MAX_PATH];
+int XPManiResourceNum;
+
+//デバッグ
+BOOL bDebugCompile=0;
+BOOL bDebugRun=0;
+BOOL bAttach=0;
+DWORD dwAttachProcessId;
+BOOL bDebugSupportProc;
+BOOL bSystemProc;
+DWORD dwStepRun;
+double width_ratio_VarList=0.3;
+HWND hDebuggerToolbar;
+char szDebugCmdLine[1024];
+char szDebugExeForDll[1024];
+
+//デバッグ用行番号情報
+LINEINFO *pLineInfo;
+int MaxLineInfoNum;
+
+//ウォッチリスト
+int width_WatchColumn_Expression=200;
+int width_WatchColumn_Value=400;
+
+
+//関数ポインタのベース タイプ インデックス（左辺の関数ポインタのパラメータを参考に、オーバーロードを解決）
+LONG_PTR ProcPtr_BaseIndex;
+
+
+int cp;
+
+BOOL bDll;
+
+char *basbuf;
+char *pBaseBuffer;
+
+char BasicSystemDir[MAX_PATH];	//BasicCompiler.exeが存在するディレクトリ
+char BasicCurDir[MAX_PATH];		//コンパイルするファイルが存在するディレクトリ
+char SourceFileName[MAX_PATH];
+char OutputFileName[MAX_PATH];
+char szDllName[MAX_PATH];
+char szIncludeDir[MAX_PATH]="";
Index: /BasicCompiler32/BasicCompiler.rc
===================================================================
--- /BasicCompiler32/BasicCompiler.rc	(revision 3)
+++ /BasicCompiler32/BasicCompiler.rc	(revision 3)
@@ -0,0 +1,412 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// 日本語 resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
+#ifdef _WIN32
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+#pragma code_page(932)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+#if defined(APSTUDIO_INVOKED) || defined(JPN)
+#if defined(APSTUDIO_INVOKED)
+IDD_MAIN$(JPN) DIALOG DISCARDABLE  0, 0, 205, 229
+#else
+IDD_MAIN DIALOG DISCARDABLE  0, 0, 205, 229
+#endif
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "ActiveBasic Compiler&Debugger"
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    DEFPUSHBUTTON   "コンパイル",IDOK,148,208,50,14
+    LTEXT           "出力先:",IDC_STATIC,7,10,23,8
+    EDITTEXT        IDC_EXEPATH,34,7,164,14,ES_AUTOHSCROLL
+    CONTROL         "Progress1",IDC_PROGRESS,"msctls_progress32",0x0,13,56,
+                    179,14
+    GROUPBOX        "進行状況",IDC_STATIC,7,31,191,45
+    LTEXT           "準備中...",IDC_MESSAGE,13,44,161,8
+    GROUPBOX        "メッセージ リスト",IDC_STATIC,7,83,191,117
+    EDITTEXT        IDC_ERRORLIST,13,113,179,80,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_DISABLED | 
+                    WS_VSCROLL | WS_HSCROLL
+    CONTROL         "エラー",IDC_SHOWERROR,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,13,97,35,10
+    CONTROL         "デバッグ",IDC_SHOWDEBUG,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,50,97,35,10
+    EDITTEXT        IDC_DEBUGLIST,13,113,179,80,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | NOT WS_VISIBLE | 
+                    WS_DISABLED | WS_VSCROLL | WS_HSCROLL
+    LTEXT           "Version",IDC_STATIC_VERSION,7,214,140,8
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(JPN)
+#if defined(APSTUDIO_INVOKED)
+IDD_VARLIST$(JPN) DIALOG DISCARDABLE  0, 0, 215, 199
+#else
+IDD_VARLIST DIALOG DISCARDABLE  0, 0, 215, 199
+#endif
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+CAPTION "ブレーク ポイント"
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    PUSHBUTTON      "閉じる",IDCANCEL,165,6,50,14
+    LTEXT           "対象領域:",IDC_STATIC,2,9,30,8
+    LTEXT           "対象スレッド:",IDC_STATIC,2,26,38,8
+    COMBOBOX        IDC_THREADCOMBO,43,24,69,100,CBS_DROPDOWNLIST | CBS_SORT | 
+                    WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Tree1",IDC_VARTREE,"SysTreeView32",TVS_HASBUTTONS | 
+                    TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP,
+                    0,88,215,111
+    CONTROL         "グローバル",IDC_GLOBAL,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,43,6,47,14
+    CONTROL         "ローカル",IDC_LOCAL,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,92,6,47,14
+    LTEXT           "プロシージャ:",IDC_STATIC,2,43,39,8
+    COMBOBOX        IDC_PROCCOMBO,43,40,69,116,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    CONTROL         "システム変数を表示しない",IDC_HIDESYSVAR,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,44,93,10
+    PUSHBUTTON      "ステップ(IN)",IDC_STEPIN,4,64,50,14
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,59,215,1
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,81,215,1
+    PUSHBUTTON      "ステップ(OVER)",IDC_STEPOVER,57,64,50,14
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(JPN)
+#if defined(APSTUDIO_INVOKED)
+IDD_CLIPMAIN$(JPN) DIALOGEX 0, 0, 332, 88
+#else
+IDD_CLIPMAIN DIALOGEX 0, 0, 332, 88
+#endif
+STYLE WS_CHILD
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    PUSHBUTTON      "コンパイル",IDOK,0,0,37,13
+    EDITTEXT        IDC_EXEPATH,285,57,24,12,ES_AUTOHSCROLL | ES_READONLY | 
+                    NOT WS_VISIBLE
+    EDITTEXT        IDC_ERRORLIST,38,14,129,74,ES_MULTILINE | ES_AUTOVSCROLL | 
+                    ES_AUTOHSCROLL | WS_DISABLED | WS_VSCROLL | WS_HSCROLL
+    CONTROL         "ビルド",IDC_SHOWERROR,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,0,20,37,12
+    CONTROL         "デバッグ",IDC_SHOWDEBUG,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,0,34,37,12
+    EDITTEXT        IDC_DEBUGLIST,38,15,179,73,ES_MULTILINE | ES_AUTOVSCROLL | 
+                    ES_AUTOHSCROLL | NOT WS_VISIBLE | WS_DISABLED | 
+                    WS_VSCROLL | WS_HSCROLL
+    CONTROL         "Progress1",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH,
+                    38,1,293,12
+    LTEXT           "準備中...",IDC_MESSAGE,286,47,24,8,NOT WS_VISIBLE,
+                    WS_EX_TRANSPARENT
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,16,39,1
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(ENG)
+#if defined(APSTUDIO_INVOKED)
+IDD_CLIPMAIN$(ENG) DIALOGEX 0, 0, 332, 88
+#else
+IDD_CLIPMAIN DIALOGEX 0, 0, 332, 88
+#endif
+STYLE WS_CHILD
+FONT 9, "ＭＳ Ｐゴシック", 0, 0, 0x1
+BEGIN
+    PUSHBUTTON      "Compile",IDOK,0,0,37,11
+    EDITTEXT        IDC_EXEPATH,285,57,24,12,ES_AUTOHSCROLL | ES_READONLY | 
+                    NOT WS_VISIBLE
+    EDITTEXT        IDC_ERRORLIST,38,13,129,75,ES_MULTILINE | ES_AUTOVSCROLL | 
+                    ES_AUTOHSCROLL | WS_DISABLED | WS_VSCROLL | WS_HSCROLL
+    CONTROL         "Error",IDC_SHOWERROR,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,0,17,37,10
+    CONTROL         "Debug",IDC_SHOWDEBUG,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,0,28,37,10
+    EDITTEXT        IDC_DEBUGLIST,38,14,179,74,ES_MULTILINE | ES_AUTOVSCROLL | 
+                    ES_AUTOHSCROLL | NOT WS_VISIBLE | WS_DISABLED | 
+                    WS_VSCROLL | WS_HSCROLL
+    CONTROL         "Progress1",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH,
+                    38,0,293,12
+    LTEXT           "Waiting...",IDC_MESSAGE,286,47,24,8,NOT WS_VISIBLE,
+                    WS_EX_TRANSPARENT
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,13,39,1
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(ENG)
+#if defined(APSTUDIO_INVOKED)
+IDD_MAIN$(ENG) DIALOG DISCARDABLE  0, 0, 205, 229
+#else
+IDD_MAIN DIALOG DISCARDABLE  0, 0, 205, 229
+#endif
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "ActiveBasic Compiler&Debugger"
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    DEFPUSHBUTTON   "Compile",IDOK,148,208,50,14
+    LTEXT           "Output:",IDC_STATIC,7,10,22,8
+    EDITTEXT        IDC_EXEPATH,34,7,164,14,ES_AUTOHSCROLL
+    CONTROL         "Progress1",IDC_PROGRESS,"msctls_progress32",0x0,13,56,
+                    179,14
+    GROUPBOX        "Advance situation",IDC_STATIC,7,31,191,45
+    LTEXT           "ready...",IDC_MESSAGE,13,44,161,8
+    GROUPBOX        "Message list",IDC_STATIC,7,83,191,117
+    EDITTEXT        IDC_ERRORLIST,13,113,179,80,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_DISABLED | 
+                    WS_VSCROLL | WS_HSCROLL
+    CONTROL         "Error",IDC_SHOWERROR,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,13,97,30,10
+    CONTROL         "Debug",IDC_SHOWDEBUG,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,50,97,35,10
+    EDITTEXT        IDC_DEBUGLIST,13,113,179,80,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | NOT WS_VISIBLE | 
+                    WS_DISABLED | WS_VSCROLL | WS_HSCROLL
+    LTEXT           "Version 4.00 Global Edition beta1",IDC_STATIC,7,214,98,
+                    8
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(ENG)
+#if defined(APSTUDIO_INVOKED)
+IDD_VARLIST$(ENG) DIALOG DISCARDABLE  0, 0, 215, 199
+#else
+IDD_VARLIST DIALOG DISCARDABLE  0, 0, 215, 199
+#endif
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+CAPTION "Breakpoint"
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    PUSHBUTTON      "Close",IDCANCEL,165,6,50,14
+    LTEXT           "Level:",IDC_STATIC,2,9,18,8
+    LTEXT           "Thread:",IDC_STATIC,2,26,22,8
+    COMBOBOX        IDC_THREADCOMBO,43,24,69,100,CBS_DROPDOWNLIST | CBS_SORT | 
+                    WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Tree1",IDC_VARTREE,"SysTreeView32",TVS_HASBUTTONS | 
+                    TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP,
+                    0,88,215,111
+    CONTROL         "Global",IDC_GLOBAL,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,43,6,47,14
+    CONTROL         "Local",IDC_LOCAL,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,92,6,47,14
+    LTEXT           "Procedure:",IDC_STATIC,2,43,31,8
+    COMBOBOX        IDC_PROCCOMBO,43,40,69,116,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    CONTROL         "Hide system variables",IDC_HIDESYSVAR,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,44,81,10
+    PUSHBUTTON      "Step In",IDC_STEPIN,4,64,50,14
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,59,215,1
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,81,215,1
+    PUSHBUTTON      "Step Over",IDC_STEPOVER,57,64,50,14
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(JPN)
+#if defined(APSTUDIO_INVOKED)
+IDD_DEBUGGER$(JPN) DIALOGEX 0, 0, 291, 148
+#else
+IDD_DEBUGGER DIALOGEX 0, 0, 291, 148
+#endif
+STYLE WS_CHILD
+FONT 9, "ＭＳ Ｐゴシック", 0, 0, 0x1
+BEGIN
+    LTEXT           "対象スレッド:",IDC_STATIC,5,21,38,8
+    COMBOBOX        IDC_THREADCOMBO,5,30,69,100,CBS_DROPDOWNLIST | CBS_SORT | 
+                    WS_VSCROLL | WS_TABSTOP
+    LTEXT           "プロシージャ:",IDC_STATIC,5,49,39,8
+    COMBOBOX        IDC_PROCCOMBO,5,58,69,116,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,15,99,1
+    LTEXT           "dummy",IDC_VARPOS,98,0,35,41,NOT WS_VISIBLE,
+                    WS_EX_STATICEDGE
+    CONTROL         "List2",IDC_WATCHLIST,"SysListView32",LVS_REPORT | 
+                    LVS_EDITLABELS | WS_BORDER | WS_TABSTOP,171,9,60,50,
+                    WS_EX_ACCEPTFILES
+    LTEXT           "コマンド",IDC_STATIC,3,3,23,8
+END
+#endif
+
+IDD_DEBUGGER_TOOLBARBASE DIALOG DISCARDABLE  0, 0, 62, 15
+STYLE WS_CHILD | WS_VISIBLE
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+END
+
+#if defined(APSTUDIO_INVOKED) || defined(ENG)
+#if defined(APSTUDIO_INVOKED)
+IDD_DEBUGGER$(ENG) DIALOGEX 0, 0, 291, 148
+#else
+IDD_DEBUGGER DIALOGEX 0, 0, 291, 148
+#endif
+STYLE WS_CHILD
+FONT 9, "ＭＳ Ｐゴシック", 0, 0, 0x1
+BEGIN
+    LTEXT           "Thread:",IDC_STATIC,5,21,22,8
+    COMBOBOX        IDC_THREADCOMBO,5,30,69,100,CBS_DROPDOWNLIST | CBS_SORT | 
+                    WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Procedure:",IDC_STATIC,5,49,31,8
+    COMBOBOX        IDC_PROCCOMBO,5,58,69,116,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,15,99,1
+    LTEXT           "dummy",IDC_VARPOS,98,0,35,41,NOT WS_VISIBLE,
+                    WS_EX_STATICEDGE
+    CONTROL         "List2",IDC_WATCHLIST,"SysListView32",LVS_REPORT | 
+                    LVS_EDITLABELS | WS_BORDER | WS_TABSTOP,171,9,60,50,
+                    WS_EX_ACCEPTFILES
+    LTEXT           "コマンド",IDC_STATIC,3,3,23,8
+END
+#endif
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO DISCARDABLE 
+BEGIN
+    "IDD_MAIN$(JPN)", DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 198
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 222
+    END
+
+    "IDD_VARLIST$(JPN)", DIALOG
+    BEGIN
+        BOTTOMMARGIN, 161
+    END
+
+    "IDD_MAIN$(ENG)", DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 198
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 222
+    END
+
+    "IDD_VARLIST$(ENG)", DIALOG
+    BEGIN
+        BOTTOMMARGIN, 161
+    END
+
+    IDD_DEBUGGER_TOOLBARBASE, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 55
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 8
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_MAIN                ICON    DISCARDABLE     "icon1.ico"
+IDI_VARSTRUCT           ICON    DISCARDABLE     "VarStruct.ico"
+IDI_VARDATA             ICON    DISCARDABLE     "VarData.ico"
+IDI_VARSTR              ICON    DISCARDABLE     "VarStr.ico"
+IDI_VARARRAY            ICON    DISCARDABLE     "VarArray.ico"
+IDI_VARPTRSTRUCT        ICON    DISCARDABLE     "VarPtrStruct.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Toolbar
+//
+
+IDR_DEBUGGERTOOLBAR TOOLBAR DISCARDABLE  16, 15
+BEGIN
+    BUTTON      IDC_DEBUG_START
+    BUTTON      IDC_DEBUG_STEPOVER
+    BUTTON      IDC_DEBUG_STEPIN
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDR_DEBUGGERTOOLBAR     BITMAP  DISCARDABLE     "toolbar_debugger.bmp"
+IDR_DEBUGGERTOOLBAR_DISABLED BITMAP  DISCARDABLE     "toolbar_debugger_disable.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_DEBUGGER_VARLIST_MENU MENU DISCARDABLE 
+BEGIN
+    POPUP "dummy"
+    BEGIN
+        MENUITEM "一般システム変数を表示する",  IDM_SHOW_DEFAULTSYSTEM_VAR
+        MENUITEM "RADシステム変数を表示する",   IDM_SHOW_RAD_VAR
+        MENUITEM "GUID変数を表示する",          IDM_SHOW_GUID_VAR
+    END
+END
+
+#endif    // 日本語 resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
Index: /BasicCompiler32/BasicCompiler.vcproj
===================================================================
--- /BasicCompiler32/BasicCompiler.vcproj	(revision 3)
+++ /BasicCompiler32/BasicCompiler.vcproj	(revision 3)
@@ -0,0 +1,1973 @@
+<?xml version="1.0" encoding="shift_jis"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="BasicCompiler32"
+	ProjectGUID="{11F0E9AB-EAEC-4616-A9DD-838073342CBB}"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug/BasicCompiler.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;JPN"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				PrecompiledHeaderFile=".\Debug/BasicCompiler.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG,JPN"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib"
+				OutputFile="../ActiveBasic/BasicCompiler32.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\Debug/BasicCompiler32.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Debug/BasicCompiler.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release/BasicCompiler.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\Release/BasicCompiler.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				BrowseInformation="2"
+				BrowseInformationFile=".\Release/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG,JPN"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib"
+				OutputFile="../ActiveBasic/BasicCompiler32.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\Release/BasicCompiler32.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Release/BasicCompiler.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="English_Rel|Win32"
+			OutputDirectory=".\English_Rel"
+			IntermediateDirectory=".\English_Rel"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\English_Rel/BasicCompiler.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;ENG"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\English_Rel/BasicCompiler.pch"
+				AssemblerListingLocation=".\English_Rel/"
+				ObjectFile=".\English_Rel/"
+				ProgramDataBaseFileName=".\English_Rel/"
+				BrowseInformation="2"
+				BrowseInformationFile=".\English_Rel/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG,ENG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib"
+				OutputFile="../ActiveBasic/BasicCompiler32.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\English_Rel/BasicCompiler32.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\English_Rel/BasicCompiler.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="BasicCompiler.rc"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<Filter
+				Name="32及び64共通"
+				>
+				<File
+					RelativePath="..\BasicCompiler_Common\BasicCompiler.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\calculation.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\Compile.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\error.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\gc.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\hash.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\MakeExe.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\NumOpe_GetType.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\Object.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\Overload.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\preprocessor.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\RSrcSection.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\StrOperation.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\Subroutine.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\Variable.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<Filter
+					Name="Intermediate"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\CommandFormat.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Intermediate_Step1.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Intermediate_Step2.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Resource.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="Parts"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\LoopRefCheck.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\NonVolatile.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\TypeDef.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="Debug（共通）"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\BreakPoint.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\BreakPoint.h"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\CDebugThreadInfo.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Debug.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\debug.h"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\DebugMiddleFile.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\DebugSection.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="Class"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\Class.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Class.h"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Enum.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Enum.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="Schedule"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\PESchedule.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\schedule.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="LexicalScoping"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\LexicalScoping.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\LexicalScoping.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="Constant"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\Const.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Const.h"
+						>
+					</File>
+				</Filter>
+			</Filter>
+			<Filter
+				Name="Compile"
+				>
+				<File
+					RelativePath="Compile_Statement.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="Compile_Var.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="MakePeHdr.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<Filter
+					Name="Calculation"
+					>
+					<File
+						RelativePath="Compile_Calc.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="Compile_Calc_PushVar.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="Compile_Set_Var.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="increment.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="NumOpe.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="NumOpe_Arithmetic.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="NumOpe_Logical.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="NumOpe_Relation.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="NumOpe_TypeOperation.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="Object"
+					>
+					<File
+						RelativePath="Compile_Object.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="Opcode"
+					>
+					<File
+						RelativePath="op32_main.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="Procedure"
+					>
+					<File
+						RelativePath="Compile_CallProc.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="Compile_Func.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="Compile_ProcOp.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="CParameter.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="OperatorProc.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+			</Filter>
+			<Filter
+				Name="Debug"
+				>
+				<File
+					RelativePath="VarList.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="WatchList.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="BasicCompiler.h"
+				>
+			</File>
+			<File
+				RelativePath="CommandValue.h"
+				>
+			</File>
+			<File
+				RelativePath="..\BasicCompiler_Common\common.h"
+				>
+			</File>
+			<File
+				RelativePath="Opcode.h"
+				>
+			</File>
+			<Filter
+				Name="言語対応文字列"
+				>
+				<File
+					RelativePath="..\BasicCompiler_Common\common_msg_eng.h"
+					>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\common_msg_jpn.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="Parts_h"
+				>
+				<File
+					RelativePath="..\BasicCompiler_Common\NonVolatile.h"
+					>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\TypeDef.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="icon1.ico"
+				>
+			</File>
+			<File
+				RelativePath="toolbar_debugger.bmp"
+				>
+			</File>
+			<File
+				RelativePath="toolbar_debugger_disable.bmp"
+				>
+			</File>
+			<File
+				RelativePath="VarArray.ico"
+				>
+			</File>
+			<File
+				RelativePath="VarData.ico"
+				>
+			</File>
+			<File
+				RelativePath="VarPtrStruct.ico"
+				>
+			</File>
+			<File
+				RelativePath="VarStr.ico"
+				>
+			</File>
+			<File
+				RelativePath="VarStruct.ico"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /BasicCompiler32/BasicCompiler32.sln
===================================================================
--- /BasicCompiler32/BasicCompiler32.sln	(revision 3)
+++ /BasicCompiler32/BasicCompiler32.sln	(revision 3)
@@ -0,0 +1,23 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BasicCompiler32", "BasicCompiler.vcproj", "{11F0E9AB-EAEC-4616-A9DD-838073342CBB}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		English_Rel|Win32 = English_Rel|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{11F0E9AB-EAEC-4616-A9DD-838073342CBB}.Debug|Win32.ActiveCfg = Debug|Win32
+		{11F0E9AB-EAEC-4616-A9DD-838073342CBB}.Debug|Win32.Build.0 = Debug|Win32
+		{11F0E9AB-EAEC-4616-A9DD-838073342CBB}.English_Rel|Win32.ActiveCfg = English_Rel|Win32
+		{11F0E9AB-EAEC-4616-A9DD-838073342CBB}.English_Rel|Win32.Build.0 = English_Rel|Win32
+		{11F0E9AB-EAEC-4616-A9DD-838073342CBB}.Release|Win32.ActiveCfg = Release|Win32
+		{11F0E9AB-EAEC-4616-A9DD-838073342CBB}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /BasicCompiler32/CParameter.cpp
===================================================================
--- /BasicCompiler32/CParameter.cpp	(revision 3)
+++ /BasicCompiler32/CParameter.cpp	(revision 3)
@@ -0,0 +1,591 @@
+#include "../BasicCompiler_Common/common.h"
+#include "opcode.h"
+
+CParameter::CParameter(char *buffer){
+	///////////////////////////
+	// パラメータ文字列を整理
+	///////////////////////////
+
+	extern HANDLE hHeap;
+	int i,i2,i3;
+	char temporary[VN_SIZE];
+
+	i=0;
+	ParmsNum=0;
+	while(1){
+		if(buffer[i]=='\0') break;
+
+		for(i2=0;;i2++,i++){
+			if(buffer[i]=='\"'){
+				temporary[i2]=buffer[i];
+				for(i++,i2++;;i++,i2++){
+					temporary[i2]=buffer[i];
+					if(buffer[i]=='\"') break;
+				}
+				continue;
+			}
+
+			if(buffer[i]=='('){
+				i3=GetStringInPare(temporary+i2,buffer+i);
+				i2+=i3-1;
+				i+=i3-1;
+				continue;
+			}
+			if(buffer[i]=='['){
+				i3=GetStringInBracket(temporary+i2,buffer+i);
+				i2+=i3-1;
+				i+=i3-1;
+				continue;
+			}
+
+			if(buffer[i]==','||buffer[i]=='\0'){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=buffer[i];
+		}
+
+		Parms[ParmsNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+		lstrcpy(Parms[ParmsNum],temporary);
+		ParmsNum++;
+
+		if(buffer[i]==',') i++;
+	}
+
+	ReturnTypeInfo.type=0;
+	ReturnTypeInfo.u.lpIndex=0;
+}
+CParameter::CParameter(PARAMETER_INFO *pParamInfo,int ParmNum){
+	int i;
+	for(i=0;i<ParmNum;i++){
+		Parms[i]=0;
+		types[i].type=pParamInfo[i].type;
+		types[i].u.lpIndex=pParamInfo[i].u.index;
+	}
+	this->ParmsNum=ParmNum;
+
+	ReturnTypeInfo.type=0;
+	ReturnTypeInfo.u.lpIndex=0;
+}
+CParameter::~CParameter(){
+	int i2;
+
+	//パラメータ文字列を解放
+	for(i2=0;i2<ParmsNum;i2++){
+		if(Parms[i2]==(char *)-1) continue;
+
+		if(Parms[i2]) HeapDefaultFree(Parms[i2]);
+	}
+}
+
+
+void CParameter::SetReturnType(TYPEINFO *pTypeInfo){
+	ReturnTypeInfo=*pTypeInfo;
+}
+
+BOOL CParameter::_overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level){
+	//パラメータを識別してオーバーロードを解決
+
+	//パラメータの個数が不一致の場合
+	if(pi_num!=ParmsNum) return 0;
+
+	int i,type;
+	LONG_PTR lpIndex;
+	for(i=0;i<pi_num;i++){
+		if(Parms[i]){
+			TYPEINFO BaseType={ppi[i].type,ppi[i].u.index};
+			if(Parms[i][0]==1&&Parms[i][1]==ESC_BYVAL){
+				type=NumOpe_GetType(Parms[i]+2,&BaseType,&lpIndex);
+				type=MAKE_PTR_TYPE(NATURAL_TYPE(type),PTR_LEVEL(type)-1);
+			}
+			else{
+				type=NumOpe_GetType(Parms[i],&BaseType,&lpIndex);
+			}
+		}
+		else{
+			type=types[i].type;
+			lpIndex=types[i].u.lpIndex;
+		}
+
+		if(type!=ppi[i].type){
+			if(overload_level==OVERLOAD_LEVEL1){
+				return 0;
+			}
+			else if(overload_level==OVERLOAD_LEVEL2){
+				if(!(
+					IsWholeNumberType(type)&&IsWholeNumberType(ppi[i].type)||
+					IsRealNumberType(type)&&IsRealNumberType(ppi[i].type)
+					)) return 0;
+			}
+			else if(overload_level==OVERLOAD_LEVEL3){
+				if(type==DEF_OBJECT||ppi[i].type==DEF_OBJECT) return 0;
+			}
+		}
+		else{
+			if(NATURAL_TYPE(type)==DEF_OBJECT){
+				if(lpIndex!=ppi[i].u.index) return 0;
+			}
+		}
+	}
+
+	if(pReturnTypeInfo){
+		//戻り値も比較対象にする
+		if(ReturnTypeInfo.type==pReturnTypeInfo->type){
+			if(NATURAL_TYPE(ReturnTypeInfo.type)==DEF_OBJECT){
+				if(ReturnTypeInfo.u.lpIndex != pReturnTypeInfo->u.lpIndex) return 0;
+			}
+		}
+		else return 0;
+	}
+
+	return 1;
+}
+SUBINFO *CParameter::OverloadSolutionWithReturnType(char *name,SUBINFO **ppsi,int num){
+	int i,sw=0;
+	SUBINFO *psi;
+	psi=0;
+	for(i=0;i<num;i++){
+		psi=ppsi[i];
+
+		TYPEINFO ReturnTypeInfo;
+		ReturnTypeInfo.type=psi->ReturnType;
+		ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+		//エラーチェック
+		if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL1)){
+			if(sw){
+				SetError(52,name,cp);
+				return 0;
+			}
+			sw=1;
+			break;
+		}
+	}
+
+	if(!sw){
+		for(i=0;i<num;i++){
+			psi=ppsi[i];
+
+			TYPEINFO ReturnTypeInfo;
+			ReturnTypeInfo.type=psi->ReturnType;
+			ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL2)){
+				if(sw){
+					SetError(52,name,cp);
+					return 0;
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		for(i=0;i<num;i++){
+			psi=ppsi[i];
+
+			TYPEINFO ReturnTypeInfo;
+			ReturnTypeInfo.type=psi->ReturnType;
+			ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL3)){
+				if(sw){
+					SetError(52,name,cp);
+					return 0;
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		SetError(52,name,cp);
+		return 0;
+	}
+
+	return psi;
+}
+
+SUBINFO *CParameter::OverloadSolution(char *name,SUBINFO **ppsi,int num){
+	int i,sw=0;
+	SUBINFO *psi;
+	psi=0;
+	for(i=0;i<num;i++){
+		psi=ppsi[i];
+
+		//エラーチェック
+		if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL1)){
+			if(sw){
+				return OverloadSolutionWithReturnType(name,ppsi,num);
+			}
+			sw=1;
+			break;
+		}
+	}
+
+	if(!sw){
+		for(i=0;i<num;i++){
+			psi=ppsi[i];
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL2)){
+				if(sw){
+					return OverloadSolutionWithReturnType(name,ppsi,num);
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		for(i=0;i<num;i++){
+			psi=ppsi[i];
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL3)){
+				if(sw){
+					return OverloadSolutionWithReturnType(name,ppsi,num);
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		SUBINFO *temp_psi;
+		for(i=0;i<num;i++){
+			temp_psi=ppsi[i];
+
+			//エラーチェック
+			if(temp_psi->ParmNum==this->ParmsNum){
+				if(sw){
+					sw=0;
+					break;
+				}
+				sw=1;
+
+				psi=temp_psi;
+			}
+		}
+	}
+
+	if(!sw){
+		SetError(52,name,cp);
+		return 0;
+	}
+
+	return psi;
+}
+
+BOOL CParameter::ErrorCheck(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
+	if(ParmsNum>pi_num){
+		if(ppi[pi_num-1].type!=DEF_ELLIPSE){
+			//パラメータが多すぎるとき
+			SetError(10,FuncName,cp);
+			return 0;
+		}
+	}
+	else if(ParmsNum<pi_num){
+		if(ParmsNum<SecondParmNum){
+			if(ppi[ParmsNum].type==DEF_ELLIPSE){
+				return 1;
+			}
+
+			//パラメータが少なすぎるとき
+			SetError(10,FuncName,cp);
+			return 0;
+		}
+
+		//省略パラメータに "0" を指定する
+		for(;ParmsNum < pi_num;ParmsNum++){
+			extern HANDLE hHeap;
+			char temporary[64];
+			if(ppi[ParmsNum].bByVal) lstrcpy(temporary,"0");
+			else sprintf(temporary,"%c%c0",1,ESC_BYVAL);
+			Parms[ParmsNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(Parms[ParmsNum],temporary);
+		}
+	}
+
+	return 1;
+}
+void CParameter::MacroParameterSupport(PARAMETER_INFO *ppi){
+	int i;
+	for(i=0;i<ParmsNum;i++){
+		if(Parms[i][0]=='\0'){
+			extern HANDLE hHeap;
+			char temporary[64];
+			if(ppi[i].bByVal) lstrcpy(temporary,"0");
+			else sprintf(temporary,"%c%c0",1,ESC_BYVAL);
+			HeapDefaultFree(Parms[i]);
+			Parms[i]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(Parms[i],temporary);
+		}
+	}
+}
+
+void CParameter::SetObjectParameter(CClass *pobj_Class,LPSTR Parameter){
+	int object_size;
+	object_size=GetSizeOfClass(pobj_Class);
+
+	//push object_size
+	op_push_value(object_size);
+
+	//call calloc
+	extern SUBINFO *pSub_calloc;
+	op_call(pSub_calloc);
+
+	//push eax
+	op_push(REG_EAX);
+
+
+	TYPEINFO BaseType={DEF_OBJECT,(LONG_PTR)pobj_Class};
+	TYPEINFO CalcType;
+	CalcType.type=NumOpe_GetType(Parameter,&BaseType,&CalcType.u.lpIndex);
+
+	if(pobj_Class->CopyConstructorMemberSubIndex!=-1&&
+		CalcType.type==DEF_OBJECT&&CalcType.u.pobj_Class==pobj_Class){
+		////////////////////////////////////
+		// コピーコンストラクタを呼び出す
+		////////////////////////////////////
+
+		//push eax
+		op_push(REG_EAX);
+
+		BOOL bUseHeap;
+		CalcType.type=NumOpe(Parameter,DEF_OBJECT,(LONG_PTR)pobj_Class,&CalcType.u.lpIndex,&bUseHeap);
+
+		//pop ecx
+		op_pop(REG_ECX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		if(bUseHeap){
+			//※解放用に退避
+			//mov esi,ecx
+			op_mov_RR(REG_ESI,REG_ECX);
+		}
+
+		//push ecx
+		op_push(REG_ECX);
+
+		//push eax
+		op_push(REG_EAX);
+
+		//call constructor
+		op_call(pobj_Class->ppobj_Method[pobj_Class->CopyConstructorMemberSubIndex]->psi);
+
+
+		if(bUseHeap){
+			FreeTempObject(REG_ESI,pobj_Class);
+		}
+	}
+	else{
+		//push eax
+		op_push(REG_EAX);
+
+
+			if(pobj_Class->ConstructorMemberSubIndex!=-1){
+				////////////////////////////////
+				// コンストラクタを呼び出す
+				////////////////////////////////
+
+				//push this
+				op_push(REG_EAX);
+
+				//call constructor
+				op_call(pobj_Class->ppobj_Method[pobj_Class->ConstructorMemberSubIndex]->psi);
+			}
+
+
+			TYPEINFO CalcType;
+			BOOL bUseHeap;
+			CalcType.type=NumOpe(Parameter,DEF_OBJECT,(LONG_PTR)pobj_Class,&CalcType.u.lpIndex,&bUseHeap);
+
+
+
+		SetObjectVariable((LONG_PTR)pobj_Class,CalcType.type,CalcType.u.lpIndex,bUseHeap);
+	}
+}
+
+int CParameter::SetParameter(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
+	///////////////////////////////////////////////////////////
+	// パラメータをレジスタ及びスタックフレームにセット
+	///////////////////////////////////////////////////////////
+	int i2,i3;
+
+	BOOL bEllipse;
+	if(pi_num){
+		if(ppi[pi_num-1].type==DEF_ELLIPSE) bEllipse=1;
+		else bEllipse=0;
+	}
+	else bEllipse=0;
+
+	BOOL bHas_System_LocalThis=0;
+	if(ParmsNum>=1){
+		if(lstrcmp(ppi[0].name,"_System_LocalThis")==0)
+			bHas_System_LocalThis=1;
+	}
+
+	//パラメータをレジスタとスタックに格納
+	int CalcType;
+	LONG_PTR lpCalcIndex;
+	BOOL bCalcUseHeap;
+	int ParmSize=0;
+	RELATIVE_VAR RelativeVar;
+	for(i2=ParmsNum-1;i2>=0;i2--){
+		if(bEllipse&&i2<=pi_num-2) bEllipse=0;
+
+		if(i2==0&&ppi[i2].name){
+			if(lstrcmp(ppi[i2].name,"_System_LocalThis")==0){
+				//オブジェクトメンバの第一パラメータのThisポインタ
+				continue;
+			}
+		}
+		if((i2==0||i2==1)&&ppi[i2].name){
+			if(lstrcmp(ppi[i2].name,FuncName)==0){
+				//オブジェクトメンバの第一または第二パラメータの戻り値用オブジェクト
+				continue;
+			}
+		}
+
+		TYPEINFO DummyTypeInfo;
+		BOOL bByVal;
+		if(bEllipse){
+			DummyTypeInfo.type=NumOpe_GetType(Parms[i2],NULL,&DummyTypeInfo.u.lpIndex);
+			bByVal=1;
+		}
+		else{
+			DummyTypeInfo.type=ppi[i2].type;
+			DummyTypeInfo.u.lpIndex=ppi[i2].u.index;
+			bByVal=ppi[i2].bByVal;
+		}
+
+		if(bByVal==1){
+			//値参照
+
+			if(Parms[i2][0]==1&&Parms[i2][1]==ESC_BYVAL){
+				char temp2[255];
+				sprintf(temp2,"%s関数の第%dパラメータ",FuncName,i2+1);
+				SetError(19,temp2,cp);
+				continue;
+			}
+
+			if(DummyTypeInfo.type==DEF_OBJECT){
+				SetObjectParameter(DummyTypeInfo.u.pobj_Class,Parms[i2]);
+				goto next;
+			}
+
+
+			extern LONG_PTR ProcPtr_BaseIndex;
+			LONG_PTR back_ProcPtr_BaseIndex;
+			back_ProcPtr_BaseIndex=ProcPtr_BaseIndex;
+			if(DummyTypeInfo.type==DEF_PTR_PROC) ProcPtr_BaseIndex=DummyTypeInfo.u.lpIndex;
+			else ProcPtr_BaseIndex=-1;
+
+			CalcType=NumOpe(Parms[i2],DummyTypeInfo.type,DummyTypeInfo.u.lpIndex,&lpCalcIndex,&bCalcUseHeap);
+
+			ProcPtr_BaseIndex=back_ProcPtr_BaseIndex;
+
+			if(CalcType==-1) break;
+
+			if(CalcType==DEF_OBJECT){
+				//キャスト演算子のオーバーロードに対応する
+				CallCastOperatorProc(CalcType,lpCalcIndex,bCalcUseHeap,DummyTypeInfo.type,DummyTypeInfo.u.lpIndex);
+			}
+
+			if(!bEllipse){
+				//型チェック
+				if(bHas_System_LocalThis) i3=i2-1;
+				else i3=i2;
+				CheckDifferentType(
+					DummyTypeInfo.type,
+					DummyTypeInfo.u.lpIndex,
+					CalcType,
+					lpCalcIndex,
+					FuncName,
+					i3);
+			}
+
+			if(DummyTypeInfo.type==DEF_DOUBLE){
+				ChangeTypeToDouble(CalcType);
+				ParmSize+=sizeof(long)*2;
+			}
+			else if(DummyTypeInfo.type==DEF_SINGLE){
+				ChangeTypeToSingle(CalcType);
+				ParmSize+=sizeof(long);
+			}
+			else if(DummyTypeInfo.type==DEF_INT64||DummyTypeInfo.type==DEF_QWORD){
+				ChangeTypeToInt64(CalcType);
+				ParmSize+=sizeof(long)*2;
+			}
+			else if(DummyTypeInfo.type==DEF_LONG||DummyTypeInfo.type==DEF_DWORD||
+				(IsPtrType(DummyTypeInfo.type)/*&&DummyTypeInfo.type!=DEF_PTR_VOID&&DummyTypeInfo.type!=DEF_PTR_BYTE*/)){
+				ChangeTypeToLong(CalcType);
+				ParmSize+=sizeof(long);
+			}
+			else if(DummyTypeInfo.type==DEF_INTEGER||DummyTypeInfo.type==DEF_WORD){
+				ChangeTypeToInteger(CalcType);
+				ParmSize+=sizeof(long);
+			}
+			else if(DummyTypeInfo.type==DEF_CHAR||DummyTypeInfo.type==DEF_BYTE){
+				ChangeTypeToByte(CalcType);
+				ParmSize+=sizeof(long);
+			}
+			else{
+				SetError(300,NULL,cp);
+			}
+		}
+		else{
+			//ポインタ参照
+			if(Parms[i2][0]==1&&Parms[i2][1]==ESC_BYVAL){
+				//ポインタ指定
+				i3=NumOpe(Parms[i2]+2,0,0,0);
+
+				ChangeTypeToLong(i3);
+			}
+			else{
+				//変数のアドレスを取得
+				int VarType;
+				LONG_PTR lpVarIndex;
+				if(!GetVarOffset(1,Parms[i2],&VarType,&RelativeVar,&lpVarIndex)) continue;
+
+				if(DummyTypeInfo.type!=DEF_ANY){
+					//型チェックを行う
+					if(DummyTypeInfo.type==VarType){
+						if(DummyTypeInfo.type==DEF_OBJECT){
+							if(DummyTypeInfo.u.lpIndex!=lpVarIndex){
+								SetError(11,Parms[i2],cp);
+							}
+						}
+					}
+					else if((VarType&FLAG_PTR)&&((int)(VarType^FLAG_PTR)==DummyTypeInfo.type)){
+						//仮引数がポインタ参照で、実引数が配列の先頭ポインタのとき
+					}
+					else{
+						SetError(11,Parms[i2],cp);
+					}
+				}
+
+				//変数アドレスをレジスタにセット
+				SetVarPtrToEax(&RelativeVar);
+
+				//push eax
+				op_push(REG_EAX);
+			}
+
+			ParmSize+=PTR_SIZE;
+		}
+
+next:;
+	}
+
+	return ParmSize;
+}
Index: /BasicCompiler32/Compile_Calc.cpp
===================================================================
--- /BasicCompiler32/Compile_Calc.cpp	(revision 3)
+++ /BasicCompiler32/Compile_Calc.cpp	(revision 3)
@@ -0,0 +1,600 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void ChangeTypeToDouble_ToFpuReg(int OldType){
+	//現在のスタックの内容を実数レジスタに保存する
+	//NumOpeの直後専用
+	if(OldType==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else if(OldType==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(OldType==DEF_LONG){
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(OldType==DEF_DWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//push 0
+		op_push_value(0);
+
+		//push eax
+		op_push(REG_EAX);
+
+		//fild qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//add esp,8
+		op_add_esp(8);
+	}
+}
+void ChangeTypeToDouble(int OldType){
+	//現在のスタックの内容をdouble型に変換する
+	//NumOpeの直後専用
+	if(OldType==DEF_DOUBLE) return;
+	else if(OldType==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
+		//64ビット整数型
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(IsWholeNumberType(OldType)){
+		//その他整数型
+
+		if(IsSignedType(OldType)){
+			//符号あり
+
+			if(OldType==DEF_INTEGER){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//movsx eax,ax
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0xBF;
+				OpBuffer[obp++]=(char)0xC0;
+
+				//push eax
+				op_push(REG_EAX);
+			}
+			else if(OldType==DEF_CHAR){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//movsx eax,al
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0xBE;
+				OpBuffer[obp++]=(char)0xC0;
+
+				//push eax
+				op_push(REG_EAX);
+			}
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//sub esp,4
+			op_sub_esp(4);
+		}
+		else{
+			//符号なし
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//push 0
+			op_push_value(0);
+
+			//push eax
+			op_push(REG_EAX);
+
+			//fild qword ptr[esp]
+			OpBuffer[obp++]=(char)0xDF;
+			OpBuffer[obp++]=(char)0x2C;
+			OpBuffer[obp++]=(char)0x24;
+		}
+
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else SetError(9,NULL,cp);
+}
+void ChangeTypeToSingle(int OldType){
+	//現在のスタックの内容をfloat型に変換する
+	//NumOpeの直後専用
+	if(OldType==DEF_SINGLE) return;
+	else if(OldType==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
+		//64ビット整数型
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(IsWholeNumberType(OldType)){
+		//その他整数型
+
+		if(IsSignedType(OldType)){
+			//符号あり
+
+			if(OldType==DEF_INTEGER){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//movsx eax,ax
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0xBF;
+				OpBuffer[obp++]=(char)0xC0;
+
+				//push eax
+				op_push(REG_EAX);
+			}
+			else if(OldType==DEF_CHAR){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//movsx eax,al
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0xBE;
+				OpBuffer[obp++]=(char)0xC0;
+
+				//push eax
+				op_push(REG_EAX);
+			}
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+		else{
+			//符号なし
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else SetError(9,NULL,cp);
+}
+
+void ChangeTypeToInt64(int OldType){
+	//現在のスタックの内容をInt64型に変換する
+	//NumOpeの直後専用
+	if(Is64Type(OldType)) return;
+
+	else if(OldType==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+	}
+	else if(OldType==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+	}
+	else if(IsWholeNumberType(OldType)){
+		//その他整数
+
+		if(IsSignedType(OldType)){
+			//符号あり
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//cdq
+			op_cdq();
+
+			//push edx
+			op_push(REG_EDX);
+
+			//push eax
+			op_push(REG_EAX);
+		}
+		else{
+			//符号なし
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//push 0
+			op_push_value(0);
+
+			//push eax
+			op_push(REG_EAX);
+		}
+	}
+	else SetError(9,NULL,cp);
+}
+void ChangeTypeToLong(int OldType){
+	//現在のスタックの内容をLong型に変換する
+	//NumOpeの直後専用
+	if(OldType==DEF_DOUBLE){
+
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//fistp dword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+	}
+	else if(OldType==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//fistp dword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+	}
+	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+}
+void ChangeTypeToInteger(int OldType){
+	//現在のスタックの内容をInteger型に変換する
+	if(OldType==DEF_BYTE||
+		OldType==DEF_WORD||OldType==DEF_INTEGER) return;
+	else if(OldType==DEF_CHAR){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//movsx eax,al
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBE;
+		OpBuffer[obp++]=(char)0xC0;
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		ChangeTypeToLong(OldType);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//and eax,0000FFFFh
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=0x0000FFFF;
+		obp+=sizeof(long);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+}
+void ChangeTypeToByte(int OldType){
+	//現在のスタックの内容をbyte型に変換する
+	if(OldType==DEF_BYTE||OldType==DEF_CHAR) return;
+
+	ChangeTypeToLong(OldType);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//and eax,000000FFh
+	OpBuffer[obp++]=(char)0x25;
+	*((long *)(OpBuffer+obp))=0x000000FF;
+	obp+=sizeof(long);
+
+	//push eax
+	op_push(REG_EAX);
+}
+
+void OpcodeCalc(char *Command){
+	int i,i2,i3;
+	char variable[VN_SIZE];
+
+	for(i=0;;i++){
+		if(Command[i]=='\"'){
+			//ダブルクォートは不正なのでエラー扱い
+			variable[i]=0;
+			SetError(3,variable,cp);
+			return;
+		}
+
+		if(Command[i]=='('){
+			i2=GetStringInPare(variable+i,Command+i);
+			i+=i2-1;
+			continue;
+		}
+		if(Command[i]=='['){
+			i2=GetStringInBracket(variable+i,Command+i);
+			i+=i2-1;
+			continue;
+		}
+		if(Command[i]=='\0'){
+
+			///////////////////////////////////
+			// インクリメント・デクリメント
+			///////////////////////////////////
+
+			if(i>2){
+				if(Command[i-2]=='+'&&Command[i-1]=='+'){
+					//インクリメント
+					variable[i-2]=0;
+					IncDec(CALC_ADDITION,variable,"1");
+					return;
+				}
+				else if(Command[i-2]=='-'&&Command[i-1]=='-'){
+					//デクリメント
+					variable[i-2]=0;
+					IncDec(CALC_SUBTRACTION,variable,"1");
+					return;
+				}
+			}
+
+
+			//先端部分の識別子をエラーキーワードにする
+			for(i=0;;i++){
+				if(!IsVariableChar(Command[i])){
+					variable[i]=0;
+					break;
+				}
+				variable[i]=Command[i];
+			}
+
+			LONG_PTR lp;
+			if(GetVarType(variable,&lp,0)!=-1){
+				//変数リストに該当したとき
+				SetError(1,NULL,cp);
+			}
+			else{
+				if(GetConstHash(variable)){
+					//定数リストに該当したとき
+					SetError(1,NULL,cp);
+				}
+				else{
+					//変数リスト、定数リストに該当しないとき
+					SetError(3,variable,cp);
+				}
+			}
+			return;
+		}
+
+		i2=GetCalcId(Command+i,&i3);
+		if(i2){
+			variable[i]=0;
+
+			if(Command[i]=='=') break;
+
+			if(Command[i+1+i3]=='='){
+				IncDec(i2,variable,Command+i+1+i3+1);
+				return;
+			}
+		}
+
+		variable[i]=Command[i];
+	}
+
+	if(Command[i+1]=='\0'){
+		SetError(1,NULL,cp);
+		return;
+	}
+
+
+
+	///////////////////////////////////////////////////////////////
+	// インデクサのsetアクセサ（[]=演算子のオーバーロードに対応）
+	///////////////////////////////////////////////////////////////
+
+	char ObjName[VN_SIZE],array_element[VN_SIZE];
+	CClass *pobj_c;
+	GetArrayElement(variable,ObjName,array_element);
+	if(array_element[0]){
+		i2=GetVarType(ObjName,(LONG_PTR *)&pobj_c,0);
+		if(i2==DEF_OBJECT){
+			char temporary[VN_SIZE];
+			sprintf(temporary,"%s.%c%c%c",ObjName,1,ESC_OPERATOR,CALC_ARRAY_SET);
+
+			char temp2[VN_SIZE];
+			sprintf(temp2,"%s,%s",array_element,Command+i+1);
+
+			int idProc;
+			void *pInfo;
+			idProc=GetProc(temporary,&pInfo);
+			if(idProc){
+				CallProc(idProc,pInfo,temporary,temp2,NULL);
+				return;
+			}
+		}
+	}
+
+
+
+	////////////////////////////////////////
+	// 変数のタイプ型を識別して、演算を行う
+	////////////////////////////////////////
+
+	int VarType,CalcType;
+	LONG_PTR lpVarIndex,lpCalcIndex;
+	RELATIVE_VAR VarRelativeVar;
+	BOOL bCalcUseHeap;
+
+	//型を識別
+	VarType=GetVarType(variable,&lpVarIndex,0);
+	if(VarType==-1){
+
+		// プロパティ用のメソッドを呼び出す
+		if(!CallPropertyMethod(variable,Command+i+1,NULL)){
+			//エラーを表示
+			GetVarType(variable,&lpVarIndex,1);
+		}
+
+		return;
+	}
+
+	extern LONG_PTR ProcPtr_BaseIndex;
+	if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex;
+	else ProcPtr_BaseIndex=-1;
+
+	if(VarType==DEF_OBJECT){
+		//代入演算のオーバーロード オペレータに備える
+
+		//変数アドレスを取得
+		if(!GetVarOffset(
+			1,
+			variable,
+			&VarType,
+			&VarRelativeVar,
+			&lpVarIndex)) return;
+
+		SetVarPtrToEax(&VarRelativeVar);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+
+
+	//NumOpe...（スタックに答えが格納される）
+	CalcType=NumOpe(Command+i+1,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
+	if(VarType==-1||CalcType==-1) return;
+
+	//変数アドレスを取得
+	if(!GetVarOffset(
+		1,
+		variable,
+		&VarType,
+		&VarRelativeVar,
+		&lpVarIndex)) return;
+
+	if(VarType&FLAG_PTR){
+		SetError(14,variable,cp);
+		return;
+	}
+
+	if(VarType==DEF_OBJECT){
+		//オブジェクトインスタンスへの代入
+		SetObjectVariable(lpVarIndex,CalcType,lpCalcIndex,bCalcUseHeap);
+		return;
+	}
+
+	if(CalcType==DEF_OBJECT){
+		//キャスト演算子のオーバーロードに対応する
+		CallCastOperatorProc(CalcType,lpCalcIndex,bCalcUseHeap,VarType,lpVarIndex);
+	}
+
+
+
+	/////////////////////////////////
+	// 右辺、左辺の型チェックを行う
+	/////////////////////////////////
+
+	CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
+
+
+	/////////////////////////////////////////////////
+	// スタックの内容を変数にコピーするコードを抽出
+	/////////////////////////////////////////////////
+
+	if(VarType==DEF_CHAR||VarType==DEF_BYTE){
+		//8ビット整数型変数へスタックの内容を格納する
+		Set8Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+	else if(VarType==DEF_INTEGER||VarType==DEF_WORD){
+		//16ビット整数型変数へスタックの内容を格納する
+		Set16Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+	else if(VarType==DEF_LONG||VarType==DEF_DWORD||IsPtrType(VarType)){
+		//32ビット整数型変数へスタックの内容を格納する
+		if(VarType==DEF_LONG)
+			SetLongVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+		else
+			SetDWordVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+	else if(VarType==DEF_INT64||VarType==DEF_QWORD){
+		//64ビット整数型変数へスタックの内容を格納する
+		SetInt64Variable(CalcType,&VarRelativeVar);
+	}
+	else if(VarType==DEF_DOUBLE){
+		//Double型変数へスタックの内容を格納する
+		SetDoubleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+	else if(VarType==DEF_SINGLE){
+		//Single型変数へスタックの内容を格納する
+		SetSingleVariable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
+	}
+}
Index: /BasicCompiler32/Compile_Calc_PushVar.cpp
===================================================================
--- /BasicCompiler32/Compile_Calc_PushVar.cpp	(revision 3)
+++ /BasicCompiler32/Compile_Calc_PushVar.cpp	(revision 3)
@@ -0,0 +1,626 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void SetReg_RealVariable(int type,RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//fld ptr[ecx+offset]
+			op_fld_base_offset(type,REG_ECX,(int)pRelativeVar->offset);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,offset
+			op_mov_RV(REG_ECX,(int)pRelativeVar->offset);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//fld ptr[ecx]
+			op_fld_basereg(type,REG_ECX);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//fld ptr[ebp+ecx+offset]
+			op_fld_base_offset_ex(type,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//fld ptr[ebp+offset]
+			op_fld_base_offset(type,REG_EBP,(int)pRelativeVar->offset);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,qword ptr[ebp+offset]
+			op_add_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,qword ptr[ebp+offset]
+			op_mov_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+directmem:
+		//fld ptr[ecx]
+		op_fld_basereg(type,REG_ECX);
+	}
+}
+void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg){
+	int var_size;
+
+	var_size=GetTypeSize(type,-1);
+
+	if(var_size==sizeof(_int64)){
+		//64ビットの場合はedx:eaxにロード
+		if(reg!=REG_EAX){
+			SetError(300,NULL,cp);
+			return;
+		}
+
+		//下位32ビットをeaxにロード
+		SetReg_WholeVariable(DEF_LONG,pRelativeVar,REG_EAX);
+
+		//上位32ビットをedxにロード
+		pRelativeVar->offset+=sizeof(long);
+		SetReg_WholeVariable(DEF_LONG,pRelativeVar,REG_EDX);
+		pRelativeVar->offset-=sizeof(long);
+
+		return;
+	}
+
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//mov reg, ptr[ecx+offset]
+			op_mov_RM(var_size,reg,REG_ECX,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov reg, ptr[offset]
+			op_mov_RM(var_size,reg,0,(int)pRelativeVar->offset,MOD_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//mov reg, ptr[ebp+ecx+offset]
+			op_mov_RM_ex(var_size,reg,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov reg, ptr[ebp+offset]
+			op_mov_RM(var_size,reg,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,qword ptr[ebp+offset]
+			op_add_RM(var_size,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,qword ptr[ebp+offset]
+			op_mov_RM(var_size,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+directmem:
+		//mov reg, ptr[ecx]
+		op_mov_RM(var_size,reg,REG_ECX,0,MOD_BASE);
+	}
+}
+
+
+
+
+
+void PushDoubleVariable(RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//push dword ptr[ecx+offset+sizeof(long)]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0xB1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset+sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//push dword ptr[ecx+offset]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0xB1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//push dword ptr[offset+sizeof(long)]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x35;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset+sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//push dword ptr[offset]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x35;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,offset+sizeof(long)
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset+sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//push dword ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x74;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+
+			//sub ecx,sizeof(long)
+			OpBuffer[obp++]=(char)0x83;
+			OpBuffer[obp++]=(char)0xE9;
+			OpBuffer[obp++]=(char)0x04;
+
+			//push dword ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x74;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//push dword ptr[ebp+offset+sizeof(long)]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0xB5;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset+sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//push dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0xB5;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		//mov eax,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(pRelativeVar->bOffsetOffset){
+			//add eax,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xC1;
+		}
+
+		//push dword ptr[eax+sizeof(long)]
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0x70;
+		OpBuffer[obp++]=(char)0x04;
+
+		//push dword ptr[eax]
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0x30;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		//push dword ptr[ecx+sizeof(long)]
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0xB1;
+		*((long *)(OpBuffer+obp))=sizeof(long);
+		obp+=sizeof(long);
+
+		//push dword ptr[ecx]
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0x31;
+	}
+}
+void PushLongVariable(RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//push dword ptr[ecx+offset]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0xB1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//push dword ptr[offset]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x35;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//push dword ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x74;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//push dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0xB5;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		//mov eax,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(pRelativeVar->bOffsetOffset){
+			//add eax,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xC1;
+		}
+
+		//push dword ptr[eax]
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0x30;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		//push dword ptr[ecx]
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0x31;
+	}
+}
+void PushIntegerVariable(RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//movsx eax,word ptr[ecx+offset]
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xBF;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//movsx eax,word ptr[offset]
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xBF;
+			OpBuffer[obp++]=(char)0x05;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//movsx eax,word ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xBF;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//movsx eax,word ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xBF;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		//mov ebx,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x9D;
+		*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(pRelativeVar->bOffsetOffset){
+			//add ebx,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xD9;
+		}
+
+		//movsx eax,word ptr[ebx]
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBF;
+		OpBuffer[obp++]=(char)0x03;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		//movsx eax,word ptr[ecx]
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBF;
+		OpBuffer[obp++]=(char)0x01;
+	}
+
+	//push eax
+	op_push(REG_EAX);
+}
+void PushWordVariable(RELATIVE_VAR *pRelativeVar){
+	//xor eax,eax（eaxを0に初期化する）
+	op_zero_reg(REG_EAX);
+
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//mov ax,word ptr[ecx+offset]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ax,word ptr[offset]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0xA1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov ax,word ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//mov ax,word ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		//mov ebx,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x9D;
+		*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(pRelativeVar->bOffsetOffset){
+			//add ebx,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xD9;
+		}
+
+		//mov ax,word ptr[ebx]
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x03;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		//mov ax,word ptr[ecx]
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x01;
+	}
+
+	//push eax
+	op_push(REG_EAX);
+}
+void PushCharVariable(RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//movsx eax,byte ptr[ecx+offset]
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xBE;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//movsx eax,byte ptr[offset]
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xBE;
+			OpBuffer[obp++]=(char)0x05;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//movsx eax,byte ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xBE;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//movsx eax,byte ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xBE;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		//mov ebx,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x9D;
+		*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(pRelativeVar->bOffsetOffset){
+			//add ebx,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xD9;
+		}
+
+		//movsx eax,byte ptr[ebx]
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBE;
+		OpBuffer[obp++]=(char)0x03;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		//movsx eax,byte ptr[ecx]
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBE;
+		OpBuffer[obp++]=(char)0x01;
+	}
+
+	//push eax
+	op_push(REG_EAX);
+}
+void PushByteVariable(RELATIVE_VAR *pRelativeVar){
+	//xor eax,eax（eaxを0に初期化する）
+	op_zero_reg(REG_EAX);
+
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//mov al,byte ptr[ecx+offset]
+			OpBuffer[obp++]=(char)0x8A;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov al,byte ptr[offset]
+			OpBuffer[obp++]=(char)0xA0;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov al,byte ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0x8A;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//mov al,byte ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8A;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		//mov ebx,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x9D;
+		*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(pRelativeVar->bOffsetOffset){
+			//add ebx,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xD9;
+		}
+
+		//mov al,byte ptr[ebx]
+		OpBuffer[obp++]=(char)0x8A;
+		OpBuffer[obp++]=(char)0x03;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		//mov al,byte ptr[ecx]
+		OpBuffer[obp++]=(char)0x8A;
+		OpBuffer[obp++]=(char)0x01;
+	}
+
+	//push eax
+	op_push(REG_EAX);
+}
Index: /BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler32/Compile_CallProc.cpp	(revision 3)
+++ /BasicCompiler32/Compile_CallProc.cpp	(revision 3)
@@ -0,0 +1,516 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+//ローカル変数アドレススケジュール
+DWORD *pLocalVarAddrSchedule;
+int LocalVarAddrScheduleNum;
+
+void Call_DebugSys_SaveContext(){
+	//call _System_GetEip
+	extern SUBINFO *pSub_System_GetEip;
+	op_call(pSub_System_GetEip);
+
+	//push eax
+	op_push(REG_EAX);
+
+	//push ebp
+	op_push(REG_EBP);
+
+	//call _DebugSys_SaveContext
+	extern SUBINFO *pSub_DebugSys_SaveContext;
+	op_call(pSub_DebugSys_SaveContext);
+}
+
+void AddLocalVarAddrSchedule(){
+	extern HANDLE hHeap;
+
+	//ローカル変数アドレススケジュールに追加する
+	pLocalVarAddrSchedule=(DWORD *)HeapReAlloc(hHeap,0,pLocalVarAddrSchedule,(LocalVarAddrScheduleNum+1)*sizeof(DWORD));
+	pLocalVarAddrSchedule[LocalVarAddrScheduleNum]=obp;
+	LocalVarAddrScheduleNum++;
+}
+int CallProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex){
+	int ret_type;
+
+	if(idProc==PROC_DEFAULT){
+		/////////////////////
+		// ユーザー定義関数
+		/////////////////////
+
+		SUBINFO *psi;
+		psi=(SUBINFO *)pInfo;
+
+		//GetSubHash内でエラー提示が行われた場合
+		if(psi==(SUBINFO *)-1) return -1;
+
+
+		//オブジェクト名を取得
+		char ObjectName[VN_SIZE];
+		int RefType;
+		GetObjectName(name,ObjectName,&RefType);
+
+
+		////////////////////////
+		// オーバーロードを解決
+		////////////////////////
+
+		SUBINFO **ppsi;
+		int num;
+		ppsi=GetOverloadSubHash(name,&num);
+		if(num){
+			//オーバーロードを解決
+			psi=OverloadSolutionWithStrParam(name,ppsi,num,Parameter,ObjectName,NULL);
+			HeapDefaultFree(ppsi);
+
+			if(!psi) return 0;
+		}
+
+
+		ret_type=Opcode_CallProc(Parameter,psi,plpRetIndex,0,ObjectName,RefType);
+	}
+	else if(idProc==PROC_DLL){
+		/////////////////////////
+		// DLL関数
+		/////////////////////////
+		DECLAREINFO *pdi;
+		pdi=(DECLAREINFO *)pInfo;
+
+		ret_type=Opcode_CallDllProc(Parameter,pdi,plpRetIndex);
+	}
+	else if(idProc==PROC_BUILTIN){
+		/////////////////////////
+		// 組み込み関数
+		/////////////////////////
+		int FuncId;
+		FuncId=(int)(_int64)pInfo;
+
+		ret_type=Opcode_CallFunc(Parameter,FuncId);
+	}
+	else if(idProc==PROC_PTR){
+		/////////////////
+		// 関数ポインタ
+		/////////////////
+
+		LONG_PTR lpIndex;
+		GetVarType(name,&lpIndex,0);
+
+		extern PROCPTRINFO *pProcPtrInfo;
+		ret_type=Opcode_CallProcPtr(name,Parameter,&pProcPtrInfo[lpIndex],plpRetIndex);
+	}
+
+	return ret_type;
+}
+
+BOOL CallPropertyMethod(char *variable,char *RightSide,TYPEINFO *pRetTypeInfo){
+	//プロパティ用のメソッドを呼び出す
+
+	//配列要素を取得
+	char VarName[VN_SIZE],ArrayElements[VN_SIZE];
+	GetArrayElement(variable,VarName,ArrayElements);
+
+	//オブジェクト名を取得
+	char ObjectName[VN_SIZE];
+	int RefType;
+	GetObjectName(VarName,ObjectName,&RefType);
+
+	//オーバーロード用の関数リストを作成
+	SUBINFO **ppsi;
+	int num;
+	ppsi=GetOverloadSubHash(VarName,&num);
+	if(num==0){
+		return 0;
+	}
+
+	//パラメータを整備
+	char *Parameter;
+	Parameter=(char *)HeapAlloc(hHeap,0,lstrlen(ArrayElements)+lstrlen(RightSide)+32);
+	lstrcpy(Parameter,ArrayElements);
+	if(RightSide){
+		if(Parameter[0]&&RightSide[0]) lstrcat(Parameter,",");
+		lstrcat(Parameter,RightSide);
+	}
+
+	//オーバーロードを解決
+	SUBINFO *psi;
+	psi=OverloadSolutionWithStrParam(VarName,ppsi,num,Parameter,ObjectName,NULL);
+	HeapDefaultFree(ppsi);
+
+	if(psi){
+		//呼び出し
+		int type;
+		LONG_PTR lpIndex;
+		type=Opcode_CallProc(Parameter,psi,&lpIndex,0,ObjectName,RefType);
+
+		if(pRetTypeInfo){
+			pRetTypeInfo->type=type;
+			pRetTypeInfo->u.lpIndex=lpIndex;
+		}
+	}
+
+	HeapDefaultFree(Parameter);
+
+	return 1;
+}
+
+
+int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex){
+	extern HANDLE hHeap;
+	int i;
+
+
+	extern BOOL bDebugCompile;
+	extern BOOL bDebugSupportProc;
+	if(bDebugCompile&&bDebugSupportProc==0)
+		Call_DebugSys_SaveContext();
+
+
+	////////////////////////
+	// パラメータのセット
+	////////////////////////
+
+	//パラメータオブジェクトを生成
+	CParameter *pobj_parameter=0;
+	pobj_parameter=new CParameter(Parameter);
+
+	//エラーチェック
+	pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum);
+
+	//レジスタ、スタックフレームにセット
+	pobj_parameter->SetParameter(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum);
+
+	//パラメータオブジェクトを破棄
+	delete pobj_parameter;
+
+
+	RELATIVE_VAR RelativeVar;
+	LONG_PTR lp;
+	GetVarOffset(1,variable,&i,&RelativeVar,&lp);
+	SetVarPtrToEax(&RelativeVar);
+
+	//mov eax,dword ptr[eax]
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0x00;
+
+	//call eax
+	OpBuffer[obp++]=(char)0xFF;
+	OpBuffer[obp++]=(char)0xD0;
+
+	if(plpIndex) *plpIndex=pi->u.ReturnIndex;
+
+	return pi->ReturnType;
+}
+
+int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType){
+	int i,i2;
+
+	if(psi->dwType==SUBTYPE_MACRO){
+		if(lstrcmpi(psi->name,"Print")==0){
+			Opcode_Print(Parameter,0);
+			return -1;
+		}
+		if(lstrcmpi(psi->name,"Input")==0){
+			Opcode_Input(Parameter);
+			return -1;
+		}
+		if(lstrcmpi(psi->name,"Write")==0){
+			Opcode_Print(Parameter,1);
+			return -1;
+		}
+	}
+
+	psi->bUse=1;
+
+	BOOL bStatic=0;
+	CClass *pobj_c;
+	if(psi->pobj_ParentClass){
+		//クラスのメンバ関数を呼び出す場合はアクセスチェックを行う
+		if(ObjectName[0]){
+			if(lstrcmpi(ObjectName,"Super")==0){
+				//クラスメンバ関数内からスーパークラスの呼び出し
+				pobj_c=pobj_CompilingClass;
+			}
+			else{
+				pobj_c=pobj_DBClass->check(ObjectName);
+				if(pobj_c){
+					//静的メンバ
+					bStatic=1;
+				}
+				else{
+					//"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
+					GetVarType(ObjectName,(LONG_PTR *)&pobj_c,1);
+				}
+			}
+		}
+		else{
+			if(dwFlags&PROCFLAG_NEW){
+				//New演算子によるコンストラクタ呼び出し
+				pobj_c=psi->pobj_ParentClass;
+			}
+			else{
+				//クラスメンバ関数内から同一クラスのメンバ関数の呼び出し
+				pobj_c=pobj_CompilingClass;
+			}
+		}
+
+
+		DWORD dwAccess;
+		for(i=0;i<pobj_c->iMethodNum;i++){
+			if(psi==pobj_c->ppobj_Method[i]->psi) break;
+		}
+		if(i==pobj_c->iMethodNum){
+			for(i=0;i<pobj_c->iStaticMethodNum;i++){
+				if(psi==pobj_c->ppobj_StaticMethod[i]->psi) break;
+			}
+			dwAccess=pobj_c->ppobj_StaticMethod[i]->dwAccess;
+
+			bStatic=1;
+		}
+		else dwAccess=pobj_c->ppobj_Method[i]->dwAccess;
+
+
+		//////////////////////////////
+		// アクセスエラーチェック
+		//////////////////////////////
+
+		if(ObjectName[0]){
+			//外部からの呼び出し
+			if(pobj_c==pobj_CompilingClass){
+				//同一クラスオブジェクトの場合はプライベートアクセスを容認する
+				if(dwAccess==ACCESS_NON){
+					SetError(109,psi->name,cp);
+					return -1;
+				}
+			}
+			else{
+				if(dwAccess==ACCESS_PRIVATE||
+					dwAccess==ACCESS_NON){
+					SetError(109,psi->name,cp);
+					return -1;
+				}
+				if(dwAccess==ACCESS_PROTECTED){
+					SetError(110,psi->name,cp);
+					return -1;
+				}
+			}
+		}
+		else{
+			//クラス内部からの呼び出し（継承によるACCESS_NONのみをエラーとする）
+			if(dwAccess==ACCESS_NON){
+				SetError(109,psi->name,cp);
+				return -1;
+			}
+		}
+	}
+
+
+
+	///////////////////////////////////////////////////////////////
+	// _System_LocalThis、_System_ReturnObjectのダミーをセット
+	///////////////////////////////////////////////////////////////
+
+	char temporary[VN_SIZE]={0};
+	if(psi->pobj_ParentClass&&bStatic==0){
+		//_System_LocalThis（第一パラメータ）のダミーを作成
+		lstrcpy(temporary,"0,");
+	}
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//_System_ReturnObject（第一または第二パラメータのダミーを作成）
+		sprintf(temporary+lstrlen(temporary),"%c%c0,",1,ESC_BYVAL);
+	}
+
+	if(Parameter[0]=='\0'&&temporary[0])
+		temporary[lstrlen(temporary)-1]=0;
+	else lstrcat(temporary,Parameter);
+
+
+
+	////////////////////////
+	// パラメータをセット
+	////////////////////////
+
+	//パラメータオブジェクトを生成
+	CParameter *pobj_parameter=0;
+	pobj_parameter=new CParameter(temporary);
+
+	//エラーチェック
+	pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum);
+
+	if(psi->dwType==SUBTYPE_MACRO){
+		//マクロ関数の場合は、パラメータ省略を考慮する
+		pobj_parameter->MacroParameterSupport(psi->pRealParmInfo);
+	}
+
+	//レジスタ、スタックフレームにセット
+	int ParmSize;
+	ParmSize=pobj_parameter->SetParameter(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum);
+
+	//パラメータオブジェクトを破棄
+	delete pobj_parameter;
+
+
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//////////////////////////////////////////////////////
+		// 戻り値にオブジェクト インスタンスを持つ場合
+		// ※ByRef _System_ReturnObject パラメータをセット
+		//////////////////////////////////////////////////////
+
+		int object_size;
+		object_size=GetSizeOfClass(psi->u.Return_pobj_c);
+
+		//push object_size
+		op_push_value(object_size);
+
+		//call calloc
+		extern SUBINFO *pSub_calloc;
+		op_call(pSub_calloc);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+
+
+	if(psi->pobj_ParentClass&&bStatic==0){
+		//////////////////////////////////////////////////////
+		// メンバ関数の場合
+		// ※_System_LocalThis パラメータをセット
+		//////////////////////////////////////////////////////
+
+		if(ObjectName[0]){
+			if(lstrcmpi(ObjectName,"Super")==0) goto InClassMember;
+
+			RELATIVE_VAR RelativeVar;
+			if(!GetVarOffset(1,ObjectName,&i2,&RelativeVar,0)) return -1;
+			SetVarPtrToEax(&RelativeVar);
+
+			//参照タイプが整合しているかをチェック
+			if(i2!=RefType) SetError(104,ObjectName,cp);
+
+			if(i2==DEF_PTR_OBJECT){
+				//mov eax,dword ptr[eax]
+				OpBuffer[obp++]=(char)0x8B;
+				OpBuffer[obp++]=(char)0x00;
+			}
+
+			//mov ecx,eax
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0xC8;
+		}
+		else{
+InClassMember:
+			if(dwFlags&PROCFLAG_NEW){
+				//New演算子によるコンストラクタ呼び出しの場合
+				//mov ecx,dword ptr[esp+ParmSize]
+				OpBuffer[obp++]=(char)0x8B;
+				OpBuffer[obp++]=(char)0x8C;
+				OpBuffer[obp++]=(char)0x24;
+				*((long *)(OpBuffer+obp))=ParmSize;
+				obp+=sizeof(long);
+			}
+			else{
+				//Thisポインタをecxにコピー
+				SetThisPtrToReg(REG_ECX);
+			}
+		}
+
+		//push ecx
+		op_push(REG_ECX);
+	}
+
+	if(psi->bVirtual){
+		//仮想関数（オブジェクトメソッド）呼び出し
+		//pObj->func_table->func1
+		//                ->func2
+		//                ->func3
+
+		//mov edx,dword ptr[ecx]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x11;
+
+		for(i=0,i2=0;i<pobj_c->iMethodNum;i++){
+			if(pobj_c->ppobj_Method[i]->psi==psi) break;
+			if(pobj_c->ppobj_Method[i]->psi->bVirtual) i2++;
+		}
+
+		//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);
+		}
+		else{
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x92;
+			*((long *)(OpBuffer+obp))=i2*PTR_SIZE;
+			obp+=sizeof(long);
+		}
+	}
+	else{
+		//通常呼び出し
+
+		//call ProcAddr
+		op_call(psi);
+	}
+
+	if(psi->bCdecl){
+		//add esp,ParmSize
+		op_add_esp(ParmSize);
+	}
+
+	if(plpIndex) *plpIndex=psi->u.ReturnIndex;
+
+	return psi->ReturnType;
+}
+
+int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex){
+	char *temporary;
+
+	temporary=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter)+1);
+
+	extern BOOL bDebugCompile;
+	extern BOOL bDebugSupportProc;
+	if(bDebugCompile&&bDebugSupportProc==0&&lstrcmp(pdi->name,"DebugBreak")!=0)
+		Call_DebugSys_SaveContext();
+
+	pdi->bUse=1;
+
+
+	////////////////////////
+	// パラメータのセット
+	////////////////////////
+
+	//パラメータオブジェクトを生成
+	CParameter *pobj_parameter=0;
+	pobj_parameter=new CParameter(Parameter);
+
+	//エラーチェック
+	pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum);
+
+	//レジスタ、スタックフレームにセット
+	int ParmSize;
+	ParmSize=pobj_parameter->SetParameter(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum);
+
+	//パラメータオブジェクトを破棄
+	delete pobj_parameter;
+
+
+	//動的リンクされたプロシージャの呼び出し
+
+	//call dword ptr[LookupTable]
+	OpBuffer[obp++]=(char)0xFF;
+	OpBuffer[obp++]=(char)0x15;
+	pobj_ImportAddrSchedule->add(pdi);
+	obp+=sizeof(long);
+
+	if(pdi->bCdecl){
+		//add esp,ParmSize
+		op_add_esp(ParmSize);
+	}
+
+	if(plpIndex) *plpIndex=pdi->u.ReturnIndex;
+
+	HeapDefaultFree(temporary);
+
+	return pdi->ReturnType;
+}
Index: /BasicCompiler32/Compile_Func.cpp
===================================================================
--- /BasicCompiler32/Compile_Func.cpp	(revision 3)
+++ /BasicCompiler32/Compile_Func.cpp	(revision 3)
@@ -0,0 +1,481 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+int GetFunctionType(int FuncNum){
+	switch(FuncNum){
+		case FUNC_CUDBL:
+			return DEF_DOUBLE;
+		case FUNC_FIX:
+		case FUNC_LEN:
+			return DEF_LONG;
+		case FUNC_ADDRESSOF:
+		case FUNC_SIZEOF:
+		case FUNC_VARPTR:
+			return DEF_DWORD;
+		case FUNC_GETDOUBLE:
+			return DEF_DOUBLE;
+		case FUNC_GETSINGLE:
+			return DEF_SINGLE;
+		case FUNC_GETQWORD:
+			return DEF_QWORD;
+		case FUNC_GETDWORD:
+			return DEF_DWORD;
+		case FUNC_GETWORD:
+			return DEF_WORD;
+		case FUNC_GETBYTE:
+			return DEF_BYTE;
+	}
+	return 0;
+}
+int GetFunctionFromName(char *FuncName){
+	if(lstrcmpi(FuncName,"CUDbl")==0)		return FUNC_CUDBL;
+	if(lstrcmpi(FuncName,"Fix")==0)			return FUNC_FIX;
+	if(lstrcmpi(FuncName,"Len")==0)			return FUNC_LEN;
+	if(lstrcmpi(FuncName,"AddressOf")==0)	return FUNC_ADDRESSOF;
+	if(lstrcmpi(FuncName,"SizeOf")==0)		return FUNC_SIZEOF;
+	if(lstrcmpi(FuncName,"VarPtr")==0)		return FUNC_VARPTR;
+	if(lstrcmpi(FuncName,"GetDouble")==0)	return FUNC_GETDOUBLE;
+	if(lstrcmpi(FuncName,"GetSingle")==0)	return FUNC_GETSINGLE;
+	if(lstrcmpi(FuncName,"GetQWord")==0)	return FUNC_GETQWORD;
+	if(lstrcmpi(FuncName,"GetDWord")==0)	return FUNC_GETDWORD;
+	if(lstrcmpi(FuncName,"GetWord")==0)		return FUNC_GETWORD;
+	if(lstrcmpi(FuncName,"GetByte")==0)		return FUNC_GETBYTE;
+	return 0;
+}
+
+void Opcode_Func_Fix(char *Parameter){
+	int i;
+
+	i=NumOpe(Parameter,0,0,0);
+
+	if(i==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//fnstcw word ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//mov ax,word ptr[esp]
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		//or ah,0Ch
+		OpBuffer[obp++]=(char)0x80;
+		OpBuffer[obp++]=(char)0xCC;
+		OpBuffer[obp++]=(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;
+
+		//fldcw word ptr[esp-2]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x6C;
+		OpBuffer[obp++]=(char)0x24;
+		OpBuffer[obp++]=(char)0xFE;
+
+		//fistp dword ptr[esp+4]
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x5C;
+		OpBuffer[obp++]=(char)0x24;
+		OpBuffer[obp++]=(char)0x04;
+
+		//fldcw word ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(i==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fnstcw word ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//mov ax,word ptr[esp]
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		//or ah,0Ch
+		OpBuffer[obp++]=(char)0x80;
+		OpBuffer[obp++]=(char)0xCC;
+		OpBuffer[obp++]=(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;
+
+		//fldcw word ptr[esp-2]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x6C;
+		OpBuffer[obp++]=(char)0x24;
+		OpBuffer[obp++]=(char)0xFE;
+
+		//fistp dword ptr[esp+4]
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x5C;
+		OpBuffer[obp++]=(char)0x24;
+		OpBuffer[obp++]=(char)0x04;
+
+		//fldcw word ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(Is64Type(i)){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+
+	//pop eax
+	op_pop(REG_EAX);
+}
+
+void Opcode_Func_CUDbl(char *Parameter){
+	int i;
+
+	i=NumOpe(Parameter,0,0,0);
+	ChangeTypeToLong(i);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//push 0
+	OpBuffer[obp++]=(char)0x6A;
+	OpBuffer[obp++]=(char)0x00;
+
+	//push eax
+	op_push(REG_EAX);
+
+	//fild qword ptr[esp]
+	OpBuffer[obp++]=(char)0xDF;
+	OpBuffer[obp++]=(char)0x2C;
+	OpBuffer[obp++]=(char)0x24;
+
+	//add esp,8
+	op_add_esp(8);
+}
+void Opcode_Func_Len(char *Parameter){
+	int type,TypeSize;
+	LONG_PTR lpIndex;
+	BOOL bArrayHead;
+
+	type=GetVarType(Parameter,&lpIndex,0);
+
+	char *tempParm=Parameter;
+	char temporary[VN_SIZE];
+	char temp2[32];
+	if(type==-1){
+		sprintf(temporary,"_System_DummyStr2=%s",Parameter);
+		OpcodeCalc(temporary);
+
+		lstrcpy(temp2,"_System_DummyStr2");
+		tempParm=temp2;
+
+		extern CClass *pobj_StringClass;
+		type=DEF_OBJECT;
+		lpIndex=(LONG_PTR)pobj_StringClass;
+	}
+
+	TYPEINFO TypeInfo={type,lpIndex};
+	if(IsStringObjectType(&TypeInfo)){
+		//Stringオブジェクトの場合
+		char temporary[VN_SIZE];
+		sprintf(temporary,"%s.Length",tempParm);
+
+		NumOpe(temporary,0,0,NULL,NULL);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		return;
+	}
+
+	int SubScripts[MAX_ARRAYDIM];
+	RELATIVE_VAR RelativeVar;
+	if(!GetVarOffset(1,tempParm,&type,&RelativeVar,&lpIndex,SubScripts)) return;
+
+	if(type&FLAG_PTR){
+		type&=~FLAG_PTR;
+
+		bArrayHead=1;
+	}
+	else bArrayHead=0;
+
+	TypeSize=GetTypeSize(type,lpIndex);
+
+	if(bArrayHead) TypeSize*=JumpSubScripts(SubScripts);
+
+	//mov eax,TypeSize
+	OpBuffer[obp++]=(char)0xB8;
+	*((long *)(OpBuffer+obp))=TypeSize;
+	obp+=sizeof(long);
+}
+void Opcode_Func_AddressOf(char *name){
+	extern int cp;
+	SUBINFO *psi;
+
+	extern LONG_PTR ProcPtr_BaseIndex;
+	if(ProcPtr_BaseIndex!=-1){
+		//左辺の型にのっとり、オーバーロードを解決
+
+		SUBINFO **ppsi;
+		int num;
+		ppsi=GetOverloadSubHash(name,&num);
+		if(!num){
+			HeapDefaultFree(ppsi);
+
+			SetError(27,name,cp);
+			return;
+		}
+
+		//オーバーロードを解決
+		extern PROCPTRINFO *pProcPtrInfo;
+		psi=OverloadSolution(name,ppsi,num,pProcPtrInfo[ProcPtr_BaseIndex].pParmInfo,pProcPtrInfo[ProcPtr_BaseIndex].ParmNum,NULL);
+		HeapDefaultFree(ppsi);
+
+		if(!psi){
+			SetError(27,name,cp);
+			return;
+		}
+	}
+	else{
+		psi=GetSubHash(name);
+		if(!psi){
+			SetError(27,name,cp);
+			return;
+		}
+	}
+
+
+	if(psi->bVirtual){
+		///////////////////////////////
+		// 仮想関数の場合
+		// thisポインタをrcxにコピー
+		///////////////////////////////
+
+		CClass *pobj_c;
+
+		char ObjectName[VN_SIZE];
+		int RefType;
+		GetObjectName(name,ObjectName,&RefType);
+
+		if(ObjectName[0]){
+			if(lstrcmpi(ObjectName,"Super")==0) goto InClassMember;
+			else{
+				RELATIVE_VAR RelativeVar;
+				int type;
+				if(!GetVarOffset(1,ObjectName,&type,&RelativeVar,(LONG_PTR *)&pobj_c)) return;
+				SetVarPtrToEax(&RelativeVar);
+
+				//mov ecx,eax
+				op_mov_RR(REG_ECX,REG_EAX);
+
+				//参照タイプが整合しているかをチェック
+				if(type!=RefType) SetError(104,ObjectName,cp);
+
+				if(type==DEF_PTR_OBJECT){
+					//mov ecx,dword ptr[ecx]
+					op_mov_RM(sizeof(long),REG_ECX,REG_ECX,0,MOD_BASE);
+				}
+			}
+		}
+		else{
+InClassMember:
+			//自身のオブジェクトのThisポインタをrcxにコピー
+			SetThisPtrToReg(REG_RCX);
+
+			pobj_c=pobj_CompilingClass;
+		}
+
+
+		//仮想関数（オブジェクトメソッド）
+		//pObj->func_table->func1
+		//                ->func2
+		//                ->func3
+
+		//mov edx,dword ptr[ecx]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x11;
+
+		int i,i2;
+		for(i=0,i2=0;i<pobj_c->iMethodNum;i++){
+			if(pobj_c->ppobj_Method[i]->psi==psi) break;
+			if(pobj_c->ppobj_Method[i]->psi->bVirtual) i2++;
+		}
+
+		//mov eax,dword ptr[edx+func_index]
+		if(i2*PTR_SIZE<=0x7F){
+			op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP8);
+		}
+		else{
+			op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP32);
+		}
+	}
+	else{
+		//一般の関数
+
+		//mov eax,ProcAddr
+		OpBuffer[obp++]=(char)0xB8;
+		pobj_SubAddrSchedule->add(psi,0);
+		obp+=sizeof(long);
+	}
+
+	psi->bUse=1;
+}
+void Opcode_Func_SizeOf(char *Parameter){
+	int type,size;
+	LONG_PTR lpIndex;
+
+	type=GetTypeFixed(Parameter,&lpIndex);
+	if(type==-1){
+		extern int cp;
+		SetError(3,Parameter,cp);
+		return;
+	}
+	size=GetTypeSize(type,lpIndex);
+
+	//mov eax,size
+	OpBuffer[obp++]=(char)0xB8;
+	*((long *)(OpBuffer+obp))=size;
+	obp+=sizeof(long);
+}
+void Opcode_Func_VarPtr(char *Parameter){
+	int type;
+	RELATIVE_VAR RelativeVar;
+
+	//変数のアドレスを取得
+	if(!GetVarOffset(1,Parameter,&type,&RelativeVar,0)) return;
+
+	SetVarPtrToEax(&RelativeVar);
+}
+void Opcode_Func_GetPtrData(char *Parameter,int type){
+	int i2;
+
+	i2=NumOpe(Parameter,0,0,0);
+	ChangeTypeToLong(i2);
+
+	if(type==DEF_DOUBLE){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//fld qword ptr[eax]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x00;
+	}
+	else if(type==DEF_SINGLE||type==DEF_DWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//mov eax,dword ptr[eax]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x00;
+	}
+	else if(type==DEF_QWORD){
+		//pop ecx
+		op_pop(REG_ECX);
+
+		//mov eax,dword ptr[ecx]
+		op_mov_RM(sizeof(long),REG_EAX,REG_ECX,0,MOD_BASE);
+
+		//mov edx,dword ptr[ecx+sizeof(long)]
+		op_mov_RM(sizeof(long),REG_EDX,REG_ECX,sizeof(long),MOD_BASE_DISP8);
+	}
+	else if(type==DEF_WORD){
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//xor eax,eax
+		OpBuffer[obp++]=(char)0x33;
+		OpBuffer[obp++]=(char)0xC0;
+
+		//mov ax,word ptr[ebx]
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x03;
+	}
+	else if(type==DEF_BYTE){
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//xor eax,eax
+		OpBuffer[obp++]=(char)0x33;
+		OpBuffer[obp++]=(char)0xC0;
+
+		//mov al,byte ptr[ebx]
+		OpBuffer[obp++]=(char)0x8A;
+		OpBuffer[obp++]=(char)0x03;
+	}
+}
+
+int Opcode_CallFunc(char *Parameter,int FuncNum){
+	switch(FuncNum){
+		case FUNC_FIX:
+			Opcode_Func_Fix(Parameter);
+			return DEF_LONG;
+		case FUNC_CUDBL:
+			Opcode_Func_CUDbl(Parameter);
+			return DEF_DOUBLE;
+		case FUNC_LEN:
+			Opcode_Func_Len(Parameter);
+			return DEF_LONG;
+		case FUNC_ADDRESSOF:
+			Opcode_Func_AddressOf(Parameter);
+			return DEF_PTR_VOID;
+		case FUNC_SIZEOF:
+			Opcode_Func_SizeOf(Parameter);
+			return DEF_LONG;
+		case FUNC_VARPTR:
+			Opcode_Func_VarPtr(Parameter);
+			return DEF_PTR_VOID;
+
+		case FUNC_GETDOUBLE:
+			Opcode_Func_GetPtrData(Parameter,DEF_DOUBLE);
+			return DEF_DOUBLE;
+		case FUNC_GETSINGLE:
+			Opcode_Func_GetPtrData(Parameter,DEF_SINGLE);
+			return DEF_SINGLE;
+		case FUNC_GETQWORD:
+			Opcode_Func_GetPtrData(Parameter,DEF_QWORD);
+			return DEF_QWORD;
+		case FUNC_GETDWORD:
+			Opcode_Func_GetPtrData(Parameter,DEF_DWORD);
+			return DEF_DWORD;
+		case FUNC_GETWORD:
+			Opcode_Func_GetPtrData(Parameter,DEF_WORD);
+			return DEF_WORD;
+		case FUNC_GETBYTE:
+			Opcode_Func_GetPtrData(Parameter,DEF_BYTE);
+			return DEF_BYTE;
+	}
+	return 0;
+}
Index: /BasicCompiler32/Compile_Object.cpp
===================================================================
--- /BasicCompiler32/Compile_Object.cpp	(revision 3)
+++ /BasicCompiler32/Compile_Object.cpp	(revision 3)
@@ -0,0 +1,361 @@
+#include "../BasicCompiler_Common/common.h"
+#include "opcode.h"
+
+void CallConstructor(CClass *pobj_c,char *CreateParameter,int ObjectSize,BOOL bSomeObjects){
+	////////////////////////////
+	// コンストラクタの呼び出し
+	////////////////////////////
+	
+	//この関数を使用する場合は、
+	//・ebxにオブジェクトの個数
+	//・eaxに先頭ポインタ
+	//をセットしておかなければならない
+
+	int jnz_back;
+
+
+	//jnzの番地
+	jnz_back=obp;
+
+	//push ebx
+	op_push(REG_EBX);
+
+	// ※ここでプッシュされた値はコンストラクタのthisポインタとなる
+	//push eax
+	op_push(REG_EAX);
+
+
+
+	////////////////////////
+	// オーバーロードを解決
+	////////////////////////
+
+	SUBINFO **ppsi;
+	SUBINFO *psi;
+	int num;
+	ppsi=GetOverloadObjectSubHash(pobj_c->name,pobj_c,&num);
+	if(num){
+		//オーバーロードを解決
+		psi=OverloadSolutionWithStrParam(pobj_c->name,
+			ppsi,num,CreateParameter,"",NULL);
+		HeapDefaultFree(ppsi);
+
+		if(!psi) return;
+	}
+
+	//コンストラクタを呼び出す
+	Opcode_CallProc(CreateParameter,
+		psi,
+		0,
+		PROCFLAG_NEW,"",0);
+
+
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//pop ebx
+	op_pop(REG_EBX);
+
+	if(bSomeObjects){
+		//add eax,TypeSize
+		OpBuffer[obp++]=(char)0x05;
+		*((long *)(OpBuffer+obp))=ObjectSize;
+		obp+=sizeof(long);
+
+		//sub ebx,1
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xEB;
+		OpBuffer[obp++]=(char)0x01;
+
+		//jnz ↑
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=jnz_back-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+}
+int Operator_New(char *Parameter,LONG_PTR *plpIndex){
+	char TypeName[VN_SIZE],CreateParameter[VN_SIZE],ObjectSize[VN_SIZE];
+	int i,i2;
+
+	i=0;
+
+	if(Parameter[0]=='['){
+		i=GetStringInBracket(ObjectSize,Parameter);
+
+		SlideString(ObjectSize+1,-1);
+		ObjectSize[i-2]=0;
+	}
+	else ObjectSize[0]=0;
+
+	for(i2=0;;i++,i2++){
+		if(Parameter[i]=='('){
+			TypeName[i2]=0;
+
+			//コンストラクタに渡すパラメータを取得
+			i2=GetStringInPare(CreateParameter,Parameter+i);
+			RemoveStringPare(CreateParameter);
+			i+=i2;
+			if(Parameter[i]!='\0'){
+				SetError(42,NULL,cp);
+				return -1;
+			}
+			break;
+		}
+		TypeName[i2]=Parameter[i];
+		if(Parameter[i]=='\0'){
+			CreateParameter[0]=0;
+			break;
+		}
+	}
+
+	int type,TypeSize;
+	type=GetTypeFixed(TypeName,plpIndex);
+	if(type==-1){
+		SetError(3,TypeName,cp);
+		return -1;
+	}
+	TypeSize=GetTypeSize(type,*plpIndex);
+
+	if(type!=DEF_OBJECT){
+		////////////////////////
+		// 通常のデータ型の場合
+		////////////////////////
+
+		SetError(121,NULL,cp);
+		return -1;
+	}
+
+	CClass *pobj_c;
+	pobj_c=(CClass *)*plpIndex;
+
+	if(pobj_c->IsHoldAbstractFunction()){
+		//抽象クラスだったとき
+		SetError(125,pobj_c->name,cp);
+	}
+
+	if(ObjectSize[0]){
+		i2=NumOpe(ObjectSize,0,0,0);
+		ChangeTypeToLong(i2);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//※添え字上限値であることを考慮
+		//add eax,1
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xC0;
+		OpBuffer[obp++]=(char)0x01;
+
+		//オブジェクトの個数をebxに一時保持
+		//※ebxは関数が呼ばれても不変
+		//mov ebx,eax
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0xD8;
+
+		//imul eax,size
+		OpBuffer[obp++]=(char)0x69;
+		OpBuffer[obp++]=(char)0xC0;
+		*((long *)(OpBuffer+obp))=TypeSize;
+		obp+=sizeof(long);
+
+		//add eax,sizeof(DWORD)*2
+		OpBuffer[obp++]=(char)0x05;
+		*((long *)(OpBuffer+obp))=sizeof(DWORD)*3;
+		obp+=sizeof(long);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		//オブジェクトの個数をebxに一時保持
+		//※ebxは関数が呼ばれても不変
+		//mov ebx,1
+		OpBuffer[obp++]=(char)0xBB;
+		*((long *)(OpBuffer+obp))=1;
+		obp+=sizeof(long);
+
+		//push size
+		OpBuffer[obp++]=(char)0x68;
+		*((long *)(OpBuffer+obp))=TypeSize+sizeof(DWORD)*3;
+		obp+=sizeof(long);
+	}
+
+	//call calloc
+	extern SUBINFO *pSub_calloc;
+	op_call(pSub_calloc);
+
+
+	/*
+	確保されたヒープ領域のポインタ（callocの戻り値eax）をpPtrとすると、
+	pPtr-=sizeof(DWORD)*3
+	pPtr[0]=オブジェクトの個数
+	pPtr[1]=オブジェクトのサイズ
+	pPtr[2]=デストラクタの関数ポインタ
+	*/
+
+
+	//mov dword ptr[eax],ebx（オブジェクトの個数）
+	OpBuffer[obp++]=(char)0x89;
+	OpBuffer[obp++]=(char)0x18;
+
+	//add eax,sizeof(DWORD)
+	OpBuffer[obp++]=(char)0x05;
+	*((long *)(OpBuffer+obp))=sizeof(DWORD);
+	obp+=sizeof(long);
+
+
+	//mov ecx,TypeSize
+	OpBuffer[obp++]=(char)0xB9;
+	*((long *)(OpBuffer+obp))=TypeSize;
+	obp+=sizeof(long);
+
+	//mov dword ptr[eax],ecx
+	OpBuffer[obp++]=(char)0x89;
+	OpBuffer[obp++]=(char)0x08;
+
+	//add eax,sizeof(DWORD)
+	OpBuffer[obp++]=(char)0x05;
+	*((long *)(OpBuffer+obp))=sizeof(DWORD);
+	obp+=sizeof(long);
+
+
+	//mov ecx,DestructorProcAddr
+	i2=pobj_c->DestructorMemberSubIndex;
+	if(i2==-1) return -1;
+	OpBuffer[obp++]=(char)0xB9;
+	pobj_SubAddrSchedule->add(pobj_c->ppobj_Method[i2]->psi,0);
+	pobj_c->ppobj_Method[i2]->psi->bUse=1;
+	obp+=sizeof(long);
+
+	//mov dword ptr[eax],ecx
+	OpBuffer[obp++]=(char)0x89;
+	OpBuffer[obp++]=(char)0x08;
+
+	//add eax,sizeof(DWORD)
+	OpBuffer[obp++]=(char)0x05;
+	*((long *)(OpBuffer+obp))=sizeof(DWORD);
+	obp+=sizeof(long);
+
+
+	// ※ここでプッシュされた値はNew演算子の戻り値となる
+	//push eax
+	op_push(REG_EAX);
+
+
+	/////////////////////////////////////////////////////////////////////
+
+	////////////////////////////
+	// コンストラクタの呼び出し
+	////////////////////////////
+
+	BOOL bSomeObjects;
+	if(ObjectSize[0]) bSomeObjects=1;
+	else bSomeObjects=0;
+	CallConstructor(pobj_c,CreateParameter,TypeSize,bSomeObjects);
+
+	return DEF_PTR_OBJECT;
+}
+
+void OpcodeDelete(char *Parameter){
+	int type;
+
+	type=NumOpe(Parameter,0,0,0);
+	if(type==-1) return;
+	if(!(type==DEF_PTR_OBJECT||type==DEF_PTR_VOID)) SetError(122,NULL,cp);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//sub eax,sizeof(DWORD)*3
+	OpBuffer[obp++]=(char)0x83;
+	OpBuffer[obp++]=(char)0xE8;
+	OpBuffer[obp++]=(char)0x0C;
+
+	//push eax
+	op_push(REG_EAX);
+
+
+	//mov ebx,dword ptr[eax]（オブジェクトの個数）
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0x18;
+
+	//add eax,sizeof(DWORD)
+	OpBuffer[obp++]=(char)0x05;
+	*((long *)(OpBuffer+obp))=sizeof(DWORD);
+	obp+=sizeof(long);
+
+
+	//mov esi,dword ptr[eax]（オブジェクトのサイズ）
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0x30;
+
+	//add eax,sizeof(DWORD)
+	OpBuffer[obp++]=(char)0x05;
+	*((long *)(OpBuffer+obp))=sizeof(DWORD);
+	obp+=sizeof(long);
+
+
+	//mov edx,dword ptr[eax]（デストラクタの関数ポインタ）
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0x10;
+
+	//add eax,sizeof(DWORD)
+	OpBuffer[obp++]=(char)0x05;
+	*((long *)(OpBuffer+obp))=sizeof(DWORD);
+	obp+=sizeof(long);
+
+
+	//mov ecx,eax
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0xC8;
+
+
+	//jnzの番地
+	int jnz_back;
+	jnz_back=obp;
+
+	//push ecx
+	op_push(REG_ECX);
+
+	//push edx
+	op_push(REG_EDX);
+
+	//push ecx（Thisポインタ   ※隠れた第一パラメータ）
+	op_push(REG_ECX);
+
+	//call edx
+	OpBuffer[obp++]=(char)0xFF;
+	OpBuffer[obp++]=(char)0xD2;
+
+	//pop edx
+	op_pop(REG_EDX);
+
+	//pop ecx
+	op_pop(REG_ECX);
+
+	//add ecx,esi
+	OpBuffer[obp++]=(char)0x03;
+	OpBuffer[obp++]=(char)0xCE;
+
+	//sub ebx,1
+	OpBuffer[obp++]=(char)0x83;
+	OpBuffer[obp++]=(char)0xEB;
+	OpBuffer[obp++]=(char)0x01;
+
+	//jnz ↑
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x85;
+	*((long *)(OpBuffer+obp))=jnz_back-(obp+sizeof(long));
+	obp+=sizeof(long);
+
+
+	//////////////////////////////////////////
+	// オブジェクトメンバ変数用のメモリを解放
+	//////////////////////////////////////////
+
+	//call free
+	extern SUBINFO *pSub_free;
+	op_call(pSub_free);
+}
Index: /BasicCompiler32/Compile_ProcOp.cpp
===================================================================
--- /BasicCompiler32/Compile_ProcOp.cpp	(revision 3)
+++ /BasicCompiler32/Compile_ProcOp.cpp	(revision 3)
@@ -0,0 +1,873 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+
+void SystemProc(char *name){
+	if(lstrcmp(name,"_System_GetEip")==0){
+		//mov eax,dword ptr[esp]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_System_InitDllGlobalVariables")==0){
+		////////////////////////////////////////
+		// DLLのグローバル領域をコンパイル
+		////////////////////////////////////////
+
+		extern BOOL bDll;
+		if(!bDll){
+			//ret
+			OpBuffer[obp++]=(char)0xC3;
+
+			return;
+		}
+
+		extern BOOL bCompilingGlobal;
+		BOOL bBackCompilingGlobal;
+		bBackCompilingGlobal=bCompilingGlobal;
+		bCompilingGlobal=1;
+
+		int BackCp;
+		BackCp=cp;
+		cp=-1;
+
+		extern BOOL bDebugCompile;
+		if(bDebugCompile){
+			//デバッグ用の変数を定義
+			DebugVariable();
+		}
+
+		//GC用の変数を定義
+		InitGCVariables();
+
+		GetGlobalDataForDll();
+
+		bCompilingGlobal=bBackCompilingGlobal;
+		cp=BackCp;
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_System_InitStaticLocalVariables")==0){
+		//静的ローカルオブジェクトのコンストラクタ呼び出し
+
+		extern int MaxGlobalVarNum;
+		extern VARIABLE *GlobalVar;
+		int i;
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(_memicmp(GlobalVar[i].name,"Static%",7)==0){
+				//コンストラクタ呼び出し
+				if(GlobalVar[i].type==DEF_OBJECT){
+
+					//エラー用
+					cp=GlobalVar[i].source_code_address;
+
+					TYPEINFO TypeInfo;
+					TypeInfo.type=GlobalVar[i].type;
+					TypeInfo.u.lpIndex=GlobalVar[i].u.index;
+					CallConstractor(
+						GlobalVar[i].name,
+						GlobalVar[i].SubScripts,
+						TypeInfo,
+						GlobalVar[i].ConstractParameter);
+				}
+			}
+		}
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_System_Call_Destructor_of_GlobalObject")==0){
+
+		extern BOOL bCompilingGlobal;
+		BOOL bBackCompilingGlobal;
+		bBackCompilingGlobal=bCompilingGlobal;
+		bCompilingGlobal=1;
+
+		CallDestrouctorsOfScope();
+
+		bCompilingGlobal=bBackCompilingGlobal;
+
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_System_GetSp")==0){
+		//mov eax,esp
+		op_mov_RR(REG_EAX,REG_ESP);
+
+		//add eax,PTR_SIZE
+		op_add_RV8(REG_EAX,PTR_SIZE);
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_allrem")==0){
+		//乗除演算用の特殊関数（64ビット整数対応）
+		BYTE Buffer_allrem[]={
+			0x53,0x57,0x33,0xFF,0x8B,0x44,0x24,0x10,0x0B,0xC0,0x7D,0x14,0x47,0x8B,0x54,0x24,0x0C,0xF7,0xD8,0xF7,0xDA,0x83,0xD8,0x00,0x89,0x44,0x24,0x10,0x89,0x54,0x24,0x0C,0x8B,0x44,0x24,0x18,0x0B,0xC0,0x7D,0x13,0x8B,0x54,0x24,0x14,0xF7,0xD8,0xF7,0xDA,0x83,0xD8,0x00,0x89,0x44,0x24,0x18,0x89,0x54,0x24,0x14,0x0B,0xC0,0x75,0x1B,0x8B,0x4C,0x24,0x14,0x8B,0x44,0x24,0x10,0x33,0xD2,0xF7,0xF1,0x8B,0x44,0x24,0x0C,0xF7,0xF1,0x8B,0xC2,0x33,0xD2,0x4F,0x79,0x4E,0xEB,0x53,0x8B,0xD8,0x8B,0x4C,0x24,0x14,0x8B,0x54,0x24,0x10,0x8B,0x44,0x24,0x0C,0xD1,0xEB,0xD1,0xD9,0xD1,0xEA,0xD1,0xD8,0x0B,0xDB,0x75,0xF4,0xF7,0xF1,0x8B,0xC8,0xF7,0x64,0x24,0x18,0x91,0xF7,0x64,0x24,0x14,0x03,0xD1,0x72,0x0E,0x3B,0x54,0x24,0x10,0x77,0x08,0x72,0x0E,0x3B,0x44,0x24,0x0C,0x76,0x08,0x2B,0x44,0x24,0x14,0x1B,0x54,0x24,0x18,0x2B,0x44,0x24,0x0C,0x1B,0x54,0x24,0x10,0x4F,0x79,0x07,0xF7,0xDA,0xF7,0xD8,0x83,0xDA,0x00,0x5F,0x5B,0xC2,0x10,0x00
+		};
+
+		memcpy(OpBuffer+obp,Buffer_allrem,178);
+		obp+=178;
+	}
+	else if(lstrcmp(name,"_aullrem")==0){
+		//乗除演算用の特殊関数（64ビット整数対応）
+		BYTE Buffer_aullrem[]={
+			0x53,0x8B,0x44,0x24,0x14,0x0B,0xC0,0x75,0x18,0x8B,0x4C,0x24,0x10,0x8B,
+			0x44,0x24,0x0C,0x33,0xD2,0xF7,0xF1,0x8B,0x44,0x24,0x08,0xF7,0xF1,0x8B,
+			0xC2,0x33,0xD2,0xEB,0x50,0x8B,0xC8,0x8B,0x5C,0x24,0x10,0x8B,0x54,0x24,
+			0x0C,0x8B,0x44,0x24,0x08,0xD1,0xE9,0xD1,0xDB,0xD1,0xEA,0xD1,0xD8,0x0B,
+			0xC9,0x75,0xF4,0xF7,0xF3,0x8B,0xC8,0xF7,0x64,0x24,0x14,0x91,0xF7,0x64,
+			0x24,0x10,0x03,0xD1,0x72,0x0E,0x3B,0x54,0x24,0x0C,0x77,0x08,0x72,0x0E,
+			0x3B,0x44,0x24,0x08,0x76,0x08,0x2B,0x44,0x24,0x10,0x1B,0x54,0x24,0x14,
+			0x2B,0x44,0x24,0x08,0x1B,0x54,0x24,0x0C,0xF7,0xDA,0xF7,0xD8,0x83,0xDA,
+			0x00,0x5B,0xC2,0x10,0x00
+		};
+
+		memcpy(OpBuffer+obp,Buffer_aullrem,117);
+		obp+=117;
+	}
+	else if(lstrcmp(name,"_allmul")==0){
+		//乗算用の特殊関数（64ビット整数対応）
+		BYTE Buffer_allmul[]={
+			0x8B,0x44,0x24,0x08,0x8B,0x4C,0x24,0x10,0x0B,0xC8,0x8B,0x4C,0x24,0x0C,0x75,0x09,0x8B,0x44,0x24,0x04,0xF7,0xE1,0xC2,0x10,0x00,0x53,0xF7,0xE1,0x8B,0xD8,0x8B,0x44,0x24,0x08,0xF7,0x64,0x24,0x14,0x03,0xD8,0x8B,0x44,0x24,0x08,0xF7,0xE1,0x03,0xD3,0x5B,0xC2,0x10,0x00
+		};
+
+		memcpy(OpBuffer+obp,Buffer_allmul,52);
+		obp+=52;
+	}
+	else if(lstrcmp(name,"_alldiv")==0){
+		//除算用の特殊関数（64ビット整数対応）
+		BYTE Buffer_alldiv[]={
+			0x57,0x56,0x53,0x33,0xFF,0x8B,0x44,0x24,0x14,0x0B,0xC0,0x7D,0x14,0x47,0x8B,0x54,0x24,0x10,0xF7,0xD8,0xF7,0xDA,0x83,0xD8,0x00,0x89,0x44,0x24,0x14,0x89,0x54,0x24,0x10,0x8B,0x44,0x24,0x1C,0x0B,0xC0,0x7D,0x14,0x47,0x8B,0x54,0x24,0x18,0xF7,0xD8,0xF7,0xDA,0x83,0xD8,0x00,0x89,0x44,0x24,0x1C,0x89,0x54,0x24,0x18,0x0B,0xC0,0x75,0x18,0x8B,0x4C,0x24,0x18,0x8B,0x44,0x24,0x14,0x33,0xD2,0xF7,0xF1,0x8B,0xD8,0x8B,0x44,0x24,0x10,0xF7,0xF1,0x8B,0xD3,0xEB,0x41,0x8B,0xD8,0x8B,0x4C,0x24,0x18,0x8B,0x54,0x24,0x14,0x8B,0x44,0x24,0x10,0xD1,0xEB,0xD1,0xD9,0xD1,0xEA,0xD1,0xD8,0x0B,0xDB,0x75,0xF4,0xF7,0xF1,0x8B,0xF0,0xF7,0x64,0x24,0x1C,0x8B,0xC8,0x8B,0x44,0x24,0x18,0xF7,0xE6,0x03,0xD1,0x72,0x0E,0x3B,0x54,0x24,0x14,0x77,0x08,0x72,0x07,0x3B,0x44,0x24,0x10,0x76,0x01,0x4E,0x33,0xD2,0x8B,0xC6,0x4F,0x75,0x07,0xF7,0xDA,0xF7,0xD8,0x83,0xDA,0x00,0x5B,0x5E,0x5F,0xC2,0x10,0x00
+		};
+
+		memcpy(OpBuffer+obp,Buffer_alldiv,170);
+		obp+=170;
+	}
+	else if(lstrcmp(name,"_aulldiv")==0){
+		//整数除算用の特殊関数（64ビット整数対応）
+		BYTE Buffer_aulldiv[]={
+			0x53,0x56,0x8B,0x44,0x24,0x18,0x0B,0xC0,0x75,0x18,0x8B,0x4C,0x24,0x14,
+			0x8B,0x44,0x24,0x10,0x33,0xD2,0xF7,0xF1,0x8B,0xD8,0x8B,0x44,0x24,0x0C,
+			0xF7,0xF1,0x8B,0xD3,0xEB,0x41,0x8B,0xC8,0x8B,0x5C,0x24,0x14,0x8B,0x54,
+			0x24,0x10,0x8B,0x44,0x24,0x0C,0xD1,0xE9,0xD1,0xDB,0xD1,0xEA,0xD1,0xD8,
+			0x0B,0xC9,0x75,0xF4,0xF7,0xF3,0x8B,0xF0,0xF7,0x64,0x24,0x18,0x8B,0xC8,
+			0x8B,0x44,0x24,0x14,0xF7,0xE6,0x03,0xD1,0x72,0x0E,0x3B,0x54,0x24,0x10,
+			0x77,0x08,0x72,0x07,0x3B,0x44,0x24,0x0C,0x76,0x01,0x4E,0x33,0xD2,0x8B,
+			0xC6,0x5E,0x5B,0xC2,0x10,0x00
+		};
+
+		memcpy(OpBuffer+obp,Buffer_aulldiv,104);
+		obp+=104;
+	}
+	else if(lstrcmp(name,"_allshl")==0){
+		//符号あり左ビットシフト用の特殊関数（64ビット整数対応）
+		BYTE Buffer_allshl[]={
+			0x80,0xF9,0x40,0x73,0x15,0x80,0xF9,0x20,0x73,0x06,0x0F,0xA5,0xC2,0xD3,0xE0,0xC3,0x8B,0xD0,0x33,0xC0,0x80,0xE1,0x1F,0xD3,0xE2,0xC3,0x33,0xC0,0x33,0xD2,0xC3
+		};
+
+		memcpy(OpBuffer+obp,Buffer_allshl,31);
+		obp+=31;
+	}
+	else if(lstrcmp(name,"_allshr")==0){
+		//符号あり右ビットシフト用の特殊関数（64ビット整数対応）
+		BYTE Buffer_allshr[]={
+			0x80,0xF9,0x40,0x73,0x16,0x80,0xF9,0x20,0x73,0x06,0x0F,0xAD,0xD0,0xD3,0xFA,0xC3,0x8B,0xC2,0xC1,0xFA,0x1F,0x80,0xE1,0x1F,0xD3,0xF8,0xC3,0xC1,0xFA,0x1F,0x8B,0xC2,0xC3
+		};
+
+		memcpy(OpBuffer+obp,Buffer_allshr,33);
+		obp+=33;
+	}
+	else if(lstrcmp(name,"_aullshr")==0){
+		//符号なし右ビットシフト用の特殊関数（64ビット整数対応）
+		BYTE Buffer_aullshr[]={
+			0x80,0xF9,0x40,         //cmp         cl,40h
+			0x73,0x15,              //jae         RETZERO (0040d71a)
+			0x80,0xF9,0x20,         //cmp         cl,20h
+			0x73,0x06,              //jae         MORE32 (0040d710)
+			0x0F,0xAD,0xD0,         //shrd        eax,edx,cl
+			0xD3,0xEA,              //shr         edx,cl
+			0xC3,                   //ret
+			//MORE32:
+			0x8B,0xC2,              //mov         eax,edx
+			0x33,0xD2,              //xor         edx,edx
+			0x80,0xE1,0x1F,         //and         cl,1Fh
+			0xD3,0xE8,              //shr         eax,cl
+			0xC3,                   //ret
+			//RETZERO:
+			0x33,0xC0,              //xor         eax,eax
+			0x33,0xD2,              //xor         edx,edx
+			0xC3                    //ret
+		};
+
+		memcpy(OpBuffer+obp,Buffer_aullshr,31);
+		obp+=31;
+	}
+}
+
+void CompileBufferInProcedure(SUBINFO *psi){
+	extern char *basbuf;
+	extern HANDLE hHeap;
+	extern SUBINFO **ppSubHash;
+	extern BOOL bDebugCompile;
+	int i3,i4,i5,VarSize,LocalVarSchedule,EspOffsetSchedule,BufferSize,BaseOffset;
+	char temporary[VN_SIZE];
+
+	BufferSize=128;
+
+	if(psi->bUse==0||psi->bCompile) return;
+
+	psi->bCompile=1;
+
+	extern BOOL bSystemProc;
+	if(memcmp(psi->name,"_System_",8)==0) bSystemProc=1;
+	else bSystemProc=0;
+
+	extern BOOL bDebugSupportProc;
+	if(memcmp(psi->name,"_DebugSys_",10)==0){
+		if(!bDebugCompile){
+			psi->pVar=(VARIABLE *)HeapAlloc(hHeap,0,1);
+			psi->VarNum=0;
+			return;
+		}
+		bDebugSupportProc=1;
+	}
+	else bDebugSupportProc=0;
+
+	psi->CompileAddress=obp;
+
+	if(psi->bSystem){
+		extern int MaxLocalVarNum;
+		extern int AllLocalVarSize;
+		MaxLocalVarNum=0;
+		AllLocalVarSize=0;
+
+		SystemProc(psi->name);
+
+		psi->EndOpAddr=obp;
+		psi->pVar=(VARIABLE *)HeapAlloc(hHeap,0,1);
+		psi->VarNum=0;
+		return;
+	}
+
+	cp=psi->address;
+	for(;;cp++){
+		if(IsCommandDelimitation(basbuf[cp])) break;
+	}
+	cp--;
+
+	//ローカル変数に関する情報
+	extern VARIABLE *LocalVar;
+	extern int MaxLocalVarNum;
+	extern int AllLocalVarSize;
+	LocalVar=(VARIABLE *)HeapAlloc(hHeap,0,1);
+	MaxLocalVarNum=0;
+	AllLocalVarSize=0;
+
+	//ローカル変数アドレススケジュール
+	extern DWORD *pLocalVarAddrSchedule;
+	extern int LocalVarAddrScheduleNum;
+	pLocalVarAddrSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	LocalVarAddrScheduleNum=0;
+
+	//パラメータ用の変数データを考慮
+	for(i3=psi->RealParmNum-1;i3>=0;i3--){
+		//変数データを追加
+		LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE));
+
+		lstrcpy(LocalVar[MaxLocalVarNum].name,psi->pRealParmInfo[i3].name);
+
+		LocalVar[MaxLocalVarNum].bArray=psi->pRealParmInfo[i3].bArray;
+		memcpy(LocalVar[MaxLocalVarNum].SubScripts,psi->pRealParmInfo[i3].SubScripts,MAX_ARRAYDIM*sizeof(int));
+
+		LocalVar[MaxLocalVarNum].type=psi->pRealParmInfo[i3].type;
+		if(LocalVar[MaxLocalVarNum].type==DEF_OBJECT){
+			if(psi->bExport)
+				SetError(24,NULL,cp);
+		}
+
+		LocalVar[MaxLocalVarNum].u.index=psi->pRealParmInfo[i3].u.index;
+
+		if(psi->pRealParmInfo[i3].bByVal&&psi->pRealParmInfo[i3].type==DEF_OBJECT){
+			//実態オブジェクトのByValパラメータ
+			LocalVar[MaxLocalVarNum].fRef=REF_PARAMETER | OBJECT_PARAMETER;
+			VarSize=PTR_SIZE;
+		}
+		else{
+			if(psi->pRealParmInfo[i3].bByVal&&psi->pRealParmInfo[i3].bArray==0){
+				LocalVar[MaxLocalVarNum].fRef=0;
+				VarSize=GetTypeSize(LocalVar[MaxLocalVarNum].type,LocalVar[MaxLocalVarNum].u.index);
+				if(VarSize%PTR_SIZE) VarSize+=PTR_SIZE-(VarSize%PTR_SIZE);
+			}
+			else{
+				LocalVar[MaxLocalVarNum].fRef=REF_PARAMETER;
+				VarSize=PTR_SIZE;
+			}
+		}
+		AllLocalVarSize+=VarSize;
+		LocalVar[MaxLocalVarNum].offset=AllLocalVarSize;
+
+		//レキシカルスコープ情報
+		LocalVar[MaxLocalVarNum].ScopeLevel=obj_LexScopes.GetNowLevel();
+		LocalVar[MaxLocalVarNum].ScopeStartAddress=obj_LexScopes.GetStartAddress();
+		LocalVar[MaxLocalVarNum].bLiving=TRUE;
+
+		MaxLocalVarNum++;
+	}
+
+	//Thisポインタを示すローカルオフセット値をセット
+	extern int LocalVar_ThisPtrOffset;
+	LocalVar_ThisPtrOffset=AllLocalVarSize;
+
+	BaseOffset=AllLocalVarSize;
+
+	//ret用のアドレスを考慮
+	AllLocalVarSize+=sizeof(long);
+
+	//コンパイル中の関数が属するクラス
+	pobj_CompilingClass=psi->pobj_ParentClass;
+
+	//コンパイル中の関数
+	extern SUBINFO *pCompilingSubInfo;
+	pCompilingSubInfo=psi;
+
+
+	///////////////////////
+	// ここからコード生成
+
+	//sub esp,AllLocalVarSize（スケジュール）
+	op_sub_esp(0xFFFFFFFF);
+	LocalVarSchedule=obp-sizeof(long);
+
+	//push ebp
+	op_push(REG_EBP);
+
+	//mov ebp,esp
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0xEC;
+
+	//push ebx
+	op_push(REG_EBX);
+
+	//push esi
+	OpBuffer[obp++]=(char)0x56;
+
+	//push edi
+	OpBuffer[obp++]=(char)0x57;
+
+	if(psi->ReturnType!=-1){
+		//戻り値が存在するとき
+
+		char *temp;
+		if(psi->name[0]==1&&psi->name[1]==ESC_OPERATOR) temp="_System_ReturnValue";
+		else temp=psi->name;
+
+		if(psi->ReturnType==DEF_OBJECT){
+			//戻り値用オブジェクトのコンストラクタを呼び出す
+			if(psi->u.Return_pobj_c->ConstructorMemberSubIndex!=-1){
+				sprintf(temporary,"%s.%s()",temp,psi->u.Return_pobj_c->name);
+				OpcodeOthers(temporary);
+			}
+		}
+		else{
+			//戻り値用の変数の定義
+			sprintf(temporary,"%s%c%c",temp,1,ESC_AS);
+			GetTypeName(psi->ReturnType,psi->u.ReturnIndex,temporary+lstrlen(temporary));
+			OpcodeDim(temporary,0);
+		}
+	}
+
+	//プロシージャ抜け出しスケジュール（Exit Sub/Function）
+	extern DWORD *pExitSubSchedule;
+	extern int ExitSubScheduleNum;
+	pExitSubSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	ExitSubScheduleNum=0;
+
+	//ラベル用のメモリを確保
+	extern LABEL *pLabelNames;
+	extern int MaxLabelNum;
+	pLabelNames=(LABEL *)HeapAlloc(hHeap,0,1);
+	MaxLabelNum=0;
+
+	//Gotoラベルスケジュール
+	extern GOTOLABELSCHEDULE *pGotoLabelSchedule;
+	extern int GotoLabelScheduleNum;
+	pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapAlloc(hHeap,0,1);
+	GotoLabelScheduleNum=0;
+
+	//With情報のメモリを確保
+	extern WITHINFO WithInfo;
+	WithInfo.ppName=(char **)HeapAlloc(hHeap,0,1);
+	WithInfo.pWithCp=(int *)HeapAlloc(hHeap,0,1);
+	WithInfo.num=0;
+
+	//重複エラー情報管理のメモリを確保
+	extern char **SynonymErrorWords;
+	extern int SynonymErrorNum;
+	SynonymErrorNum=0;
+	SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
+
+	//Continueアドレスを初期化
+	extern DWORD dwContinueAddress;
+	dwContinueAddress=-1;
+
+	if(bDebugCompile&&bDebugSupportProc==0){
+		//push dword ptr[ebp+(AllLocalVarSize-BaseOffset)]（スケジュール）
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0xB5;
+		EspOffsetSchedule=obp;
+		obp+=sizeof(long);	
+
+		//push dword ptr[ebp]（以前のebp）
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0x75;
+		OpBuffer[obp++]=(char)0x00;
+
+		//call _DebugSys_StartProc
+		extern SUBINFO *pSub_DebugSys_StartProc;
+		op_call(pSub_DebugSys_StartProc);
+	}
+
+	if(pobj_CompilingClass){
+		if(lstrcmp(psi->name,pobj_CompilingClass->name)==0){
+			////////////////////////////////////
+			// コンストラクタをコンパイルするとき
+			////////////////////////////////////
+
+			//スーパークラスかどうかの識別
+			//（継承元がインターフェイスの場合もスーパークラスと見なす）
+			BOOL bThisIsSuperClass;
+			if(pobj_CompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;
+			else if(pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex==-1){
+				//インターフェイスを継承したときはコンストラクタを持たない
+				bThisIsSuperClass=1;
+			}
+			else bThisIsSuperClass=0;
+
+			if(!bThisIsSuperClass){
+				/* サブクラスコンストラクタをコンパイルしているときは、
+					スーパークラスのコンストラクタを呼び出す */
+
+				i3=cp+1;
+				while(IsCommandDelimitation(basbuf[i3])) i3++;
+				for(i4=0;;i3++,i4++){
+					if(!IsVariableChar(basbuf[i3])){
+						temporary[i4]=0;
+						break;
+					}
+					temporary[i4]=basbuf[i3];
+				}
+				if(lstrcmp(temporary,
+					pobj_CompilingClass->pobj_InheritsClass->name)==0){
+					//スーパークラスのコンストラクタを呼び出す
+					cp=i3;
+					for(i4=0;;cp++,i4++){
+						if(IsCommandDelimitation(basbuf[cp])){
+							temporary[i4]=0;
+							break;
+						}
+						temporary[i4]=basbuf[cp];
+					}
+					if(!(temporary[0]=='('&&temporary[lstrlen(temporary)-1]==')')){
+						SetError(1,NULL,cp);
+					}
+					RemoveStringPare(temporary);
+
+					i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex;
+					Opcode_CallProc(temporary,
+						pobj_CompilingClass->ppobj_Method[i3]->psi,
+						0,
+						0,
+						"",
+						0);
+				}
+				else{
+					//スーパークラスのコンストラクタを暗黙的に呼び出す
+					i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex;
+					Opcode_CallProc("",
+						pobj_CompilingClass->ppobj_Method[i3]->psi,
+						0,
+						0,
+						"",
+						0);
+				}
+			}
+
+
+			//実体クラスを持つメンバのコンストラクタ（引数有りを除く）を呼び出す
+			int offset;
+			int MemberTypeSize;
+			int MemberObjectNum;
+			if(pobj_CompilingClass->vtbl_num) offset=PTR_SIZE;
+			else offset=0;
+			for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
+				offset=GetSizeOfClassMember(pobj_CompilingClass,pobj_CompilingClass->ppobj_Member[i3]->name,NULL);
+
+				if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
+					if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
+						i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
+						if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){	//Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
+
+							MemberTypeSize=
+								GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
+									pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
+
+							MemberObjectNum=
+								JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
+
+							for(i4=0;i4<MemberObjectNum;i4++){
+								//Thisポインタをecxにコピー
+								SetThisPtrToReg(REG_ECX);
+
+								//add ecx,offset
+								OpBuffer[obp++]=(char)0x81;
+								OpBuffer[obp++]=(char)0xC1;
+								*((long *)(OpBuffer+obp))=offset+i4*MemberTypeSize;
+								obp+=sizeof(long);
+
+								//push ecx
+								op_push(REG_ECX);
+
+								//call constructor
+								op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
+							}
+						}
+					}
+				}
+			}
+
+
+			//仮想関数テーブルを初期化
+			if(pobj_CompilingClass->vtbl_num&&
+				pobj_CompilingClass->IsHoldAbstractFunction()==0){
+				//関数テーブルに値をセット
+				offset=pobj_CompilingClass->GetVtblGlobalOffset();
+
+				//mov eax,offset
+				OpBuffer[obp++]=(char)0xB8;
+				*((long *)(OpBuffer+obp))=offset;
+				pobj_DataTableSchedule->add();
+				obp+=sizeof(long);
+
+				//Thisポインタをecxにコピー
+				SetThisPtrToReg(REG_ECX);
+
+				//mov dword ptr[ecx],eax
+				OpBuffer[obp++]=(char)0x89;
+				OpBuffer[obp++]=(char)0x01;
+			}
+		}
+	}
+
+	//////////////////////////////////////////
+	//////////////////////////////////////////
+	////// プロシージャ内をコンパイル ////////
+	if(psi->dwType==SUBTYPE_SUB) CompileBuffer(ESC_ENDSUB,0);
+	else if(psi->dwType==SUBTYPE_FUNCTION) CompileBuffer(ESC_ENDFUNCTION,0);
+	else if(psi->dwType==SUBTYPE_MACRO) CompileBuffer(ESC_ENDMACRO,0);
+	//////////////////////////////////////////
+	//////////////////////////////////////////
+
+	if(pobj_CompilingClass){
+		if(psi->name[0]=='~'){
+			////////////////////////////////////
+			//デストラクタをコンパイルしたとき
+			////////////////////////////////////
+
+			if(pobj_CompilingClass->pobj_InheritsClass){
+				/* サブクラスのデストラクタをコンパイルしているときは、
+					スーパークラスのデストラクタを呼び出す */
+
+				i3=pobj_CompilingClass->pobj_InheritsClass->DestructorMemberSubIndex;
+				if(i3!=-1){
+					Opcode_CallProc("",
+						pobj_CompilingClass->ppobj_Method[i3]->psi,
+						0,
+						0,
+						"",
+						0);
+				}
+			}
+
+			//実体クラスを持つメンバのデストラクタを呼び出す
+			//※コンストラクタと逆順序で呼び出す
+			int offset;
+			int MemberTypeSize;
+			int MemberObjectNum;
+			offset=GetTypeSize(DEF_OBJECT,(LONG_PTR)pobj_CompilingClass);
+			for(i3=pobj_CompilingClass->iMemberNum-1;i3>=0;i3--){
+				MemberTypeSize=
+					GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
+						pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
+
+				MemberObjectNum=
+					JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
+
+				offset-=MemberTypeSize*MemberObjectNum;
+
+				if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
+					if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
+						for(i4=MemberObjectNum-1;i4>=0;i4--){
+							//Thisポインタをecxにコピー
+							SetThisPtrToReg(REG_ECX);
+
+							//add ecx,offset
+							OpBuffer[obp++]=(char)0x81;
+							OpBuffer[obp++]=(char)0xC1;
+							*((long *)(OpBuffer+obp))=offset+i4*MemberTypeSize;
+							obp+=sizeof(long);
+
+							//push ecx
+							op_push(REG_ECX);
+
+							//call destructor
+							i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
+							op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	//プロシージャ抜け出しスケジュール（Exit Sub/Function）
+	for(i3=0;i3<ExitSubScheduleNum;i3++){
+		*((long *)(OpBuffer+pExitSubSchedule[i3]))=obp-(pExitSubSchedule[i3]+sizeof(long));
+	}
+	HeapDefaultFree(pExitSubSchedule);
+
+	if(bDebugCompile&&bDebugSupportProc==0){
+		*((long *)(OpBuffer+EspOffsetSchedule))=AllLocalVarSize-BaseOffset;
+
+		//call _DebugSys_EndProc
+		extern SUBINFO *pSub_DebugSys_EndProc;
+		op_call(pSub_DebugSys_EndProc);
+	}
+
+	//ラベル用のメモリを解放
+	for(i3=0;i3<MaxLabelNum;i3++){
+		if(pLabelNames[i3].pName) HeapDefaultFree(pLabelNames[i3].pName);
+	}
+	HeapDefaultFree(pLabelNames);
+
+	//Goto未知ラベルスケジュールを解放
+	for(i3=0;i3<GotoLabelScheduleNum;i3++){
+		if(pGotoLabelSchedule[i3].pName){
+			SetError(6,pGotoLabelSchedule[i3].pName,pGotoLabelSchedule[i3].now_cp);
+			HeapDefaultFree(pGotoLabelSchedule[i3].pName);
+		}
+		else{
+			sprintf(temporary,"%d",pGotoLabelSchedule[i3].line);
+			SetError(6,temporary,pGotoLabelSchedule[i3].now_cp);
+		}
+	}
+	HeapDefaultFree(pGotoLabelSchedule);
+
+	//With情報のメモリを解放
+	for(i3=0;i3<WithInfo.num;i3++){
+		SetError(22,"With",WithInfo.pWithCp[i3]);
+		HeapDefaultFree(WithInfo.ppName[i3]);
+	}
+	HeapDefaultFree(WithInfo.ppName);
+	HeapDefaultFree(WithInfo.pWithCp);
+
+	//重複エラー情報管理のメモリを解放
+	for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]);
+	HeapDefaultFree(SynonymErrorWords);
+
+	//push ebp
+	AllLocalVarSize+=sizeof(long);
+
+	//ローカルオブジェクトの解放処理
+	CallDestrouctorsOfScope();
+
+	if(psi->ReturnType!=-1){
+		//戻り値をeax、edxに設定
+		RELATIVE_VAR RelativeVar;
+		LONG_PTR lpIndex;
+
+		char *temp;
+		if(psi->name[0]==1&&psi->name[1]==ESC_OPERATOR)
+			temp="_System_ReturnValue";
+		else temp=psi->name;
+		GetVarOffset(1,temp,&i3,&RelativeVar,&lpIndex);
+
+		i3=psi->ReturnType;
+
+		if(i3==DEF_OBJECT){
+			SetVarPtrToEax(&RelativeVar);
+		}
+		else if(i3==DEF_DOUBLE){
+			//fld qword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0xDD;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=RelativeVar.offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else if(i3==DEF_SINGLE){
+			//fld dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0xD9;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=RelativeVar.offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else if(i3==DEF_INT64||i3==DEF_QWORD){
+			//mov eax,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=RelativeVar.offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov edx,dword ptr[ebp+offset+sizeof(long)]
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x95;
+			*((long *)(OpBuffer+obp))=RelativeVar.offset+sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else if(i3==DEF_LONG||i3==DEF_DWORD||
+			IsPtrType(i3)){
+			//mov eax,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=RelativeVar.offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else if(i3==DEF_INTEGER||i3==DEF_WORD){
+			//xor eax,eax（eaxを0に初期化する）
+			op_zero_reg(REG_EAX);
+
+			//mov ax,word ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=RelativeVar.offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else if(i3==DEF_CHAR||i3==DEF_BYTE){
+			//xor eax,eax（eaxを0に初期化する）
+			op_zero_reg(REG_EAX);
+
+			//mov al,byte ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8A;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=RelativeVar.offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+
+	//ローカル変数アドレススケジュール
+	for(i3=0;i3<LocalVarAddrScheduleNum;i3++){
+		*((long *)(OpBuffer+pLocalVarAddrSchedule[i3]))+=AllLocalVarSize;
+	}
+	HeapDefaultFree(pLocalVarAddrSchedule);
+	for(i3=0;i3<MaxLocalVarNum;i3++){
+		LocalVar[i3].offset=AllLocalVarSize-LocalVar[i3].offset;//後にデバッグで利用する
+	}
+
+	//push ebp、ret用のアドレスを考慮
+	AllLocalVarSize-=sizeof(long)*2;
+
+	//ローカル変数用メモリを確保するためのスケジュール（subコマンド）
+	*((long *)(OpBuffer+LocalVarSchedule))=AllLocalVarSize-BaseOffset;
+
+	//pop edi
+	OpBuffer[obp++]=(char)0x5F;
+
+	//pop esi
+	OpBuffer[obp++]=(char)0x5E;
+
+	//pop ebx
+	op_pop(REG_EBX);
+
+	//mov esp,ebp
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0xE5;
+
+	//pop ebp
+	op_pop(REG_EBP);
+
+	//add esp AllLocalVarSize
+	op_add_esp(AllLocalVarSize-BaseOffset);
+
+	if(BaseOffset==0||psi->bCdecl){
+		//ret 0
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else{
+		//ret BaseOffset（パラメータ分のスタック領域を解放）
+		OpBuffer[obp++]=(char)0xC2;
+		*((_int16 *)(OpBuffer+obp))=(_int16)BaseOffset;
+		obp+=sizeof(_int16);
+	}
+
+	psi->EndOpAddr=obp;
+	psi->pVar=LocalVar;
+	psi->VarNum=MaxLocalVarNum;
+
+	//ローカル変数のネーム情報は後に解放する
+}
+void CompileLocal(){
+	extern SUBINFO **ppSubHash;
+	int i2;
+	SUBINFO *psi;
+
+	extern BOOL bDll;
+	if(bDll){
+		//DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする
+		psi=GetSubHash("_System_InitDllGlobalVariables");
+		if(psi){
+			CompileBufferInProcedure(psi);
+		}
+		else SetError(300,NULL,cp);
+	}
+
+	//_System_InitStaticLocalVariablesは一番最後にコンパイル
+	//※一般関数内の静的変数オブジェクトをすべて収集しなければならない
+	extern SUBINFO *pSub_System_InitStaticLocalVariables;
+	pSub_System_InitStaticLocalVariables->bCompile=1;
+
+	//_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
+	extern SUBINFO *pSub_System_Call_Destructor_of_GlobalObject;
+	pSub_System_Call_Destructor_of_GlobalObject->bCompile=1;
+
+Repeat:
+	for(i2=0;i2<MAX_HASH;i2++){
+		psi=ppSubHash[i2];
+		while(psi){
+			CompileBufferInProcedure(psi);
+			psi=psi->pNextData;
+		}
+	}
+
+	//プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
+	for(i2=0;i2<MAX_HASH;i2++){
+		psi=ppSubHash[i2];
+		while(psi){
+			if(psi->bUse&&psi->bCompile==0){
+				goto Repeat;
+			}
+
+			psi=psi->pNextData;
+		}
+	}
+
+	//_System_InitStaticLocalVariablesは一番最後にコンパイル
+	pSub_System_InitStaticLocalVariables->bCompile=0;
+	CompileBufferInProcedure(pSub_System_InitStaticLocalVariables);
+
+	//_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
+	pSub_System_Call_Destructor_of_GlobalObject->bCompile=0;
+	CompileBufferInProcedure(pSub_System_Call_Destructor_of_GlobalObject);
+}
Index: /BasicCompiler32/Compile_Set_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Set_Var.cpp	(revision 3)
+++ /BasicCompiler32/Compile_Set_Var.cpp	(revision 3)
@@ -0,0 +1,867 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+BOOL IsUse_ecx(RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->bOffsetOffset||pRelativeVar->dwKind==VAR_DIRECTMEM) return 1;
+	return 0;
+}
+
+void SetObjectVariable(LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,BOOL bUseHeap){
+	///////////////////////////////////////////////////////////////////
+	// オペレータ '=' のオーバーロード関数を呼ぶ
+	///////////////////////////////////////////////////////////////////
+
+	int type[10];
+	LONG_PTR index_stack[10];
+	BOOL array_bUseHeap[10];
+	int sp=2;
+
+	//左辺
+	type[0]=DEF_OBJECT;
+	index_stack[0]=lpVarIndex;
+	array_bUseHeap[0]=0;
+
+	//右辺
+	type[1]=CalcType;
+	index_stack[1]=lpCalcIndex;
+	array_bUseHeap[1]=bUseHeap;
+
+	int iRet;
+	iRet=CallOperatorProc(CALC_SUBSITUATION,NULL,type,index_stack,array_bUseHeap,sp);
+	if(iRet==-1||iRet==1){
+		//成功したとき、またはエラーが発行されたとき
+		return;
+	}
+
+	if(CalcType==DEF_OBJECT&&lpVarIndex==lpCalcIndex){
+		//双方のオブジェクト型が完全に一致したとき
+		//※コピーを行う
+
+		int object_size;
+		object_size=GetSizeOfClass((CClass *)lpVarIndex);
+
+		//mov ecx,object_size
+		op_mov_RV(REG_ECX,object_size);
+
+		//pop esi
+		op_pop(REG_ESI);
+
+		//pop edi
+		op_pop(REG_EDI);
+
+		if(bUseHeap){
+			//mov eax,esi
+			op_mov_RR(REG_EAX,REG_ESI);
+		}
+
+		//rep movs byte ptr[edi],byte ptr[esi]
+		op_rep_movs(sizeof(BYTE));
+
+		if(bUseHeap){
+			//push eax
+			op_push(REG_EAX);
+
+			//call free
+			extern SUBINFO *pSub_free;
+			op_call(pSub_free);
+		}
+
+		return;
+	}
+	else{
+		SetError(1,NULL,cp);
+	}
+}
+
+void SetDoubleVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset){
+	ChangeTypeToDouble(type);
+
+	//pop ebx
+	op_pop(REG_EBX);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	if(VarKind==VAR_GLOBAL){
+		if(bOffsetOffset){
+			//mov dword ptr[ecx+offset],ebx
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x99;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//mov dword ptr[ecx+offset+sizeof(long)],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=offset+sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov dword ptr[offset],ebx
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x1D;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//mov dword ptr[offset+sizeof(long)],eax
+			OpBuffer[obp++]=(char)0xA3;
+			*((long *)(OpBuffer+obp))=offset+sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_LOCAL){
+		if(bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov dword ptr[ebp+ecx],ebx
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x5C;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+
+			//add ecx,sizeof(long)
+			OpBuffer[obp++]=(char)0x83;
+			OpBuffer[obp++]=(char)0xC1;
+			OpBuffer[obp++]=(char)0x04;
+
+			//mov dword ptr[ebp+ecx],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//mov dword ptr[ebp+offset],ebx
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x9D;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov dword ptr[ebp+offset+sizeof(long)],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=offset+sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_REFLOCAL){
+		if(bOffsetOffset){
+			//add ecx,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x8D;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x8D;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		//mov dword ptr[ecx],ebx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x19;
+
+		//mov dword ptr[ecx+sizeof(long)],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x41;
+		OpBuffer[obp++]=(char)0x04;
+	}
+	else if(VarKind==VAR_DIRECTMEM){
+		//mov dword ptr[ecx],ebx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x19;
+
+		//mov dword ptr[ecx+sizeof(long)],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x41;
+		OpBuffer[obp++]=(char)0x04;
+	}
+}
+void SetSingleVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset){
+	if(type==DEF_SINGLE){
+		//32ビット変数としてそのままコピーする
+		SetDWordVariable(DEF_DWORD,VarKind,offset,bOffsetOffset);
+		return;
+	}
+
+	if(type==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else if(type==DEF_INT64||type==DEF_QWORD){
+		//64ビット整数
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else if(IsSignedType(type)){
+		//符号あり整数
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else{
+		if(!IsWholeNumberType(type)){
+			//不正な型の場合
+			SetError(9,NULL,cp);
+			return;
+		}
+
+		//符号なし整数
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//push 0
+		op_push_value(0);
+
+		//push eax
+		op_push(REG_EAX);
+
+		//fild qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//add esp,8
+		op_add_esp(8);
+	}
+
+	if(VarKind==VAR_GLOBAL){
+		if(bOffsetOffset){
+			//fstp dword ptr[ecx+offset]
+			OpBuffer[obp++]=(char)0xD9;
+			OpBuffer[obp++]=(char)0x99;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//fstp dword ptr[offset]
+			OpBuffer[obp++]=(char)0xD9;
+			OpBuffer[obp++]=(char)0x1D;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_LOCAL){
+		if(bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//fstp dword ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0xD9;
+			OpBuffer[obp++]=(char)0x5C;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//fstp dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0xD9;
+			OpBuffer[obp++]=(char)0x9D;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_REFLOCAL){
+		//mov eax,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(bOffsetOffset){
+			//add eax,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xC1;
+		}
+
+		//fstp dword ptr[eax]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x18;
+	}
+	else if(VarKind==VAR_DIRECTMEM){
+		//fstp dword ptr[ecx]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x19;
+	}
+}
+void SetInt64Variable(int type,RELATIVE_VAR *pRelative){
+	if(type==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else if(type==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else if(type==DEF_INT64||type==DEF_QWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else if(IsSignedType(type)){
+		//符号拡張
+		//edx:eax ← eax
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//cdq
+		op_cdq();
+	}
+	else{
+		if(!IsWholeNumberType(type)){
+			//不正な型の場合
+			SetError(9,NULL,cp);
+			return;
+		}
+
+		//符号拡張
+		//edx=0:eax
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//xor edx,edx
+		op_zero_reg(REG_EDX);
+	}
+
+	if(pRelative->dwKind==VAR_GLOBAL){
+		if(pRelative->bOffsetOffset){
+			//mov dword ptr[ecx+offset],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=pRelative->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//mov dword ptr[ecx+offset+sizeof(long)],edx
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x91;
+			*((long *)(OpBuffer+obp))=pRelative->offset+sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov dword ptr[offset],eax
+			OpBuffer[obp++]=(char)0xA3;
+			*((long *)(OpBuffer+obp))=pRelative->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//mov dword ptr[offset+sizeof(long)],edx
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x15;
+			*((long *)(OpBuffer+obp))=pRelative->offset+sizeof(DWORD);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_LOCAL){
+		if(pRelative->bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov dword ptr[ebp+ecx],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+
+			//add ecx,sizeof(long)
+			OpBuffer[obp++]=(char)0x83;
+			OpBuffer[obp++]=(char)0xC1;
+			OpBuffer[obp++]=(char)0x04;
+
+			//mov dword ptr[ebp+ecx],edx
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x54;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//mov dword ptr[ebp+offset],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov dword ptr[ebp+offset+sizeof(long)],edx
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x95;
+			*((long *)(OpBuffer+obp))=pRelative->offset+sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_REFLOCAL){
+		if(pRelative->bOffsetOffset){
+			//add ecx,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x8D;
+			*((long *)(OpBuffer+obp))=pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x8D;
+			*((long *)(OpBuffer+obp))=pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		//mov dword ptr[ecx],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x01;
+
+		//mov dword ptr[ecx+sizeof(long)],edx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x51;
+		OpBuffer[obp++]=(char)0x04;
+	}
+	else if(pRelative->dwKind==VAR_DIRECTMEM){
+		//mov dword ptr[ecx],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x01;
+
+		//mov dword ptr[ecx+sizeof(long)],edx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x51;
+		OpBuffer[obp++]=(char)0x04;
+	}
+}
+void SetDWordVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset){
+	if(type==DEF_DOUBLE||type==DEF_SINGLE){
+		if(type==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+		}
+		else if(type==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//sub esp,4
+			op_sub_esp(4);
+		}
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(type==DEF_INT64||type==DEF_QWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else{
+		if(!IsWholeNumberType(type)){
+			//不正な型の場合
+			SetError(9,NULL,cp);
+			return;
+		}
+
+		ChangeTypeToWhole(type,DEF_LONG);
+
+		//pop eax
+		op_pop(REG_EAX);
+	}
+
+	if(VarKind==VAR_GLOBAL){
+		if(bOffsetOffset){
+			//mov dword ptr[ecx+offset],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov dword ptr[offset],eax
+			OpBuffer[obp++]=(char)0xA3;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_LOCAL){
+		if(bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov dword ptr[ebp+ecx],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//mov dword ptr[ebp+offset],eax
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_REFLOCAL){
+		if(bOffsetOffset){
+			//add ecx,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x8D;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x8D;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		//mov dword ptr[ecx],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x01;
+	}
+	else if(VarKind==VAR_DIRECTMEM){
+		//mov dword ptr[ecx],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x01;
+	}
+}
+void SetLongVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset){
+	if(type==DEF_DOUBLE||type==DEF_SINGLE){
+		if(type==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(type==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+
+		if(VarKind==VAR_GLOBAL){
+			if(bOffsetOffset){
+				//fistp dword ptr[ecx+offset]
+				fpu_cast();
+				OpBuffer[obp++]=(char)0xDB;
+				OpBuffer[obp++]=(char)0x99;
+				*((long *)(OpBuffer+obp))=offset;
+				pobj_GlobalVarSchedule->add();
+				obp+=sizeof(long);
+				fpu_cast_end();
+			}
+			else{
+				//fistp dword ptr[offset]
+				fpu_cast();
+				OpBuffer[obp++]=(char)0xDB;
+				OpBuffer[obp++]=(char)0x1D;
+				*((long *)(OpBuffer+obp))=offset;
+				pobj_GlobalVarSchedule->add();
+				obp+=sizeof(long);
+				fpu_cast_end();
+			}
+		}
+		else if(VarKind==VAR_LOCAL){
+			if(bOffsetOffset){
+				//add ecx,offset
+				OpBuffer[obp++]=(char)0x81;
+				OpBuffer[obp++]=(char)0xC1;
+				*((long *)(OpBuffer+obp))=offset;
+				AddLocalVarAddrSchedule();
+				obp+=sizeof(long);
+
+				//fistp dword ptr[ebp+ecx]
+				fpu_cast();
+				OpBuffer[obp++]=(char)0xDB;
+				OpBuffer[obp++]=(char)0x5C;
+				OpBuffer[obp++]=(char)0x0D;
+				OpBuffer[obp++]=(char)0x00;
+				fpu_cast_end();
+			}
+			else{
+				//fistp dword ptr[ebp+offset]
+				fpu_cast();
+				OpBuffer[obp++]=(char)0xDB;
+				OpBuffer[obp++]=(char)0x9D;
+				*((long *)(OpBuffer+obp))=offset;
+				AddLocalVarAddrSchedule();
+				obp+=sizeof(long);
+				fpu_cast_end();
+			}
+		}
+		else if(VarKind==VAR_REFLOCAL){
+			//mov eax,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			if(bOffsetOffset){
+				//add eax,ecx
+				OpBuffer[obp++]=(char)0x03;
+				OpBuffer[obp++]=(char)0xC1;
+			}
+
+			//fistp dword ptr[eax]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x18;
+			fpu_cast_end();
+		}
+		else if(VarKind==VAR_DIRECTMEM){
+			//fistp dword ptr[ecx]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x19;
+			fpu_cast_end();
+		}
+	}
+	else{
+		//実数以外の型からの代入処理はDWordのものと同様
+		SetDWordVariable(type,VarKind,offset,bOffsetOffset);
+	}
+}
+void Set16Variable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset){
+	ChangeTypeToWhole(type,DEF_INTEGER);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	if(VarKind==VAR_GLOBAL){
+		if(bOffsetOffset){
+			//mov word ptr[ecx+offset],ax
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov word ptr[offset],ax
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0xA3;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_LOCAL){
+		if(bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov word ptr[ebp+ecx],ax
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//mov word ptr[ebp+offset],ax
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x89;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_REFLOCAL){
+		//mov ebx,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x9D;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(bOffsetOffset){
+			//add ebx,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xD9;
+		}
+
+		//mov word ptr[ebx],ax
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x03;
+	}
+	else if(VarKind==VAR_DIRECTMEM){
+		//mov word ptr[ecx],ax
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x01;
+	}
+}
+void Set8Variable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset){
+	ChangeTypeToWhole(type,DEF_CHAR);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	if(VarKind==VAR_GLOBAL){
+		if(bOffsetOffset){
+			//mov byte ptr[ecx+offset],al
+			OpBuffer[obp++]=(char)0x88;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov byte ptr[offset],al
+			OpBuffer[obp++]=(char)0xA2;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_LOCAL){
+		if(bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//mov byte ptr[ebp+ecx],al
+			OpBuffer[obp++]=(char)0x88;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//mov byte ptr[ebp+offset],al
+			OpBuffer[obp++]=(char)0x88;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(VarKind==VAR_REFLOCAL){
+		//mov ebx,dword ptr[ebp+offset]
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0x9D;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		if(bOffsetOffset){
+			//add ebx,ecx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xD9;
+		}
+
+		//mov byte ptr[ebx],al
+		OpBuffer[obp++]=(char)0x88;
+		OpBuffer[obp++]=(char)0x03;
+	}
+	else if(VarKind==VAR_DIRECTMEM){
+		//mov byte ptr[ecx],al
+		OpBuffer[obp++]=(char)0x88;
+		OpBuffer[obp++]=(char)0x01;
+	}
+}
Index: /BasicCompiler32/Compile_Statement.cpp
===================================================================
--- /BasicCompiler32/Compile_Statement.cpp	(revision 3)
+++ /BasicCompiler32/Compile_Statement.cpp	(revision 3)
@@ -0,0 +1,2028 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void OpcodeOthers(char *Command){
+	int i,i2;
+	char buffer[8192];
+	SUBINFO *psi;
+
+	for(i=0;;i++){
+		if(Command[i]=='['){
+			i2=GetStringInBracket(buffer+i,Command+i);
+			i+=i2-1;
+			continue;
+		}
+		if(Command[i]==1&&Command[i+1]==ESC_PSMEM){
+			buffer[i]=Command[i];
+			i++;
+			buffer[i]=Command[i];
+			continue;
+		}
+		if(!IsVariableChar(Command[i])){
+			buffer[i]=0;
+			break;
+		}
+		buffer[i]=Command[i];
+	}
+
+	if(!(
+		IsVariableTopChar(buffer[0])||
+		buffer[0]=='.'||
+		(buffer[0]==1&&buffer[1]==ESC_PSMEM)
+		)){
+		SetError(1,NULL,cp);
+		return;
+	}
+
+
+	if(Command[i]=='\0'){
+		//////////////////////////////
+		// パラメータ無しのマクロ検索
+		//////////////////////////////
+
+		psi=GetSubHash(Command);
+
+		//GetSubHash内でエラー提示が行われた場合
+		if(psi==(SUBINFO *)-1) return;
+
+		if(psi==0){
+			char temporary[VN_SIZE];
+			lstrcpy(temporary,Command);
+
+			CharUpper(temporary);
+			psi=GetSubHash(temporary);
+
+			//GetSubHash内でエラー提示が行われた場合
+			if(psi==(SUBINFO *)-1) return;
+		}
+
+		if(psi){
+			if(psi->dwType!=SUBTYPE_MACRO) SetError(10,Command,cp);
+
+			Opcode_CallProc("",psi,0,0,"",0);
+
+			return;
+		}
+	}
+	else if(IsNumCalcMark(Command,i)){
+		//代入演算
+		OpcodeCalc(Command);
+		return;
+	}
+
+
+	int idProc;
+	void *pInfo;
+	idProc=GetProc(buffer,&pInfo);
+
+	int i4;
+	char temp2[VN_SIZE];
+	if(idProc){
+		if(Command[i]!='('){
+			SetError(10,buffer,cp);
+			return;
+		}
+		i4=GetStringInPare_RemovePare(temp2,Command+i+1);
+
+		//閉じカッコ")"に続く文字がNULLでないときはエラーにする
+		if(Command[i+1+i4+1]!='\0') SetError(42,NULL,cp);
+
+		////////////////
+		// 呼び出し
+		////////////////
+
+		LONG_PTR lp;
+		i2=CallProc(idProc,pInfo,buffer,temp2,&lp);
+
+
+		/////////////////////
+		// 戻り値の処理
+		/////////////////////
+
+		if(i2==DEF_DOUBLE||i2==DEF_SINGLE){
+			//fstp st(0)
+			OpBuffer[obp++]=(char)0xDD;
+			OpBuffer[obp++]=(char)0xD8;
+		}
+		if(i2==DEF_OBJECT){
+			CClass *pobj_Class;
+			pobj_Class=(CClass *)lp;
+			if(pobj_Class->DestructorMemberSubIndex!=-1){
+				//デストラクタの呼び出し
+
+				//push eax
+				op_push(REG_EAX);
+
+				//push eax
+				op_push(REG_EAX);
+
+				//call destructor
+				int i5;
+				i5=pobj_Class->DestructorMemberSubIndex;
+				op_call(pobj_Class->ppobj_Method[i5]->psi);
+			}
+			else{
+				//push eax
+				op_push(REG_EAX);
+			}
+
+			//call free
+			extern SUBINFO *pSub_free;
+			op_call(pSub_free);
+		}
+		return;
+	}
+
+
+	//////////////////////////
+	// その他は代入演算を行う
+	//////////////////////////
+	OpcodeCalc(Command);
+}
+
+void OpcodeIf(char *Parameter){
+	int i,i2,i3,i4,type;
+
+	for(i=0;;i++){
+		if(Parameter[i]=='\0'){
+			SetError(21,NULL,cp);
+			return;
+		}
+		if(Parameter[i]==1&&Parameter[i+1]==ESC_THEN){
+			Parameter[i]=0;
+			break;
+		}
+	}
+
+	type=NumOpe(Parameter,0,0,0);
+
+	if(type==-1){
+		//NumOpe内でエラー
+		i3=-1;	//ダミー
+	}
+	else if(type==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//push 0
+		op_push_value(0);
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,sizeof(double)+sizeof(long)
+		op_add_esp(sizeof(double)+sizeof(long));
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//test ah,40
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x40;
+
+		//jne (endif、または else まで)
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		obp+=sizeof(long);
+
+		//jneの番地
+		i3=obp;
+	}
+	else if(type==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//push 0
+		op_push_value(0);
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,sizeof(float)+sizeof(long)
+		op_add_esp(sizeof(float)+sizeof(long));
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//test ah,40
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x40;
+
+		//jne (endif、または else まで)
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		obp+=sizeof(long);
+
+		//jneの番地
+		i3=obp;
+	}
+	else if(type==DEF_INT64||type==DEF_QWORD){
+		//64ビット型
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//cmp eax,0
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xF8;
+		OpBuffer[obp++]=(char)0x00;
+
+		//jne
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		obp+=sizeof(long);
+		i3=obp;
+
+
+		//cmp ebx,0
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xFB;
+		OpBuffer[obp++]=(char)0x00;
+
+		//jne
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		obp+=sizeof(long);
+		i4=obp;
+
+
+
+		//jmp (endif、または else までジャンプ)
+		OpBuffer[obp++]=(char)0xE9;
+		obp+=sizeof(long);
+
+		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;
+		*((long *)(OpBuffer+i4-sizeof(long)))=obp-i4;
+
+		//jmpの番地
+		i3=obp;
+	}
+	else{
+		//32ビット型
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//cmp eax,0
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xF8;
+		OpBuffer[obp++]=(char)0x00;
+
+		//je (endif、または else まで条件ジャンプ)
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x84;
+		obp+=sizeof(long);
+
+		//jeの番地
+		i3=obp;
+	}
+
+
+	/////////////////////////
+	// If内をコード化
+	/////////////////////////
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	i2=CompileBuffer(ESC_ENDIF,0);
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+
+	if(i3==-1) return;
+
+	extern char *basbuf;
+	if(i2==ESC_ELSE){
+		//jmp (endifまで)
+		OpBuffer[obp++]=(char)0xE9;
+		obp+=sizeof(long);
+
+		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//ifからelseへのジャンプ先のオフセット値
+
+		i3=obp;
+
+
+		/////////////////////////
+		// Else内をコード化
+		/////////////////////////
+
+		//レキシカルスコープをレベルアップ
+		obj_LexScopes.LevelUp(obp);
+
+		CompileBuffer(ESC_ENDIF,0);
+
+		//レキシカルスコープをレベルダウン
+		obj_LexScopes.LevelDown();
+
+
+		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//jmpジャンプ先のオフセット値
+	}
+	else{
+		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//jeジャンプ先のオフセット値
+	}
+}
+
+int GetLabelAddress(char *LabelName,int LineNum){
+	extern int MaxLabelNum;
+	extern LABEL *pLabelNames;
+	int i;
+
+	if(LabelName){
+		for(i=0;i<MaxLabelNum;i++){
+			if(pLabelNames[i].pName){
+				if(lstrcmp(LabelName,pLabelNames[i].pName)==0) return pLabelNames[i].address;
+			}
+		}
+	}
+	else{
+		for(i=0;i<MaxLabelNum;i++){
+			if(pLabelNames[i].pName==0){
+				if(LineNum==pLabelNames[i].line) return pLabelNames[i].address;
+			}
+		}
+	}
+	return -1;
+}
+void OpcodeGoto(char *Parameter){
+	extern HANDLE hHeap;
+	extern GOTOLABELSCHEDULE *pGotoLabelSchedule;
+	extern int GotoLabelScheduleNum;
+	int i,LineNum;
+
+	if(Parameter[0]=='*'){
+		i=GetLabelAddress(Parameter+1,0);
+
+		//jmp ...
+		OpBuffer[obp++]=(char)0xE9;
+		if(i==-1){
+			pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapReAlloc(hHeap,0,pGotoLabelSchedule,(GotoLabelScheduleNum+1)*sizeof(GOTOLABELSCHEDULE));
+			pGotoLabelSchedule[GotoLabelScheduleNum].pName=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter+1)+1);
+			lstrcpy(pGotoLabelSchedule[GotoLabelScheduleNum].pName,Parameter+1);
+			pGotoLabelSchedule[GotoLabelScheduleNum].pos=obp;
+			pGotoLabelSchedule[GotoLabelScheduleNum].now_cp=cp;
+			GotoLabelScheduleNum++;
+		}
+		*((long *)(OpBuffer+obp))=i-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+	else{
+		LineNum=atoi(Parameter);
+		i=GetLabelAddress(0,LineNum);
+
+		//jmp ...
+		OpBuffer[obp++]=(char)0xE9;
+		if(i==-1){
+			pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapReAlloc(hHeap,0,pGotoLabelSchedule,(GotoLabelScheduleNum+1)*sizeof(GOTOLABELSCHEDULE));
+			pGotoLabelSchedule[GotoLabelScheduleNum].pName=0;
+			pGotoLabelSchedule[GotoLabelScheduleNum].line=LineNum;
+			pGotoLabelSchedule[GotoLabelScheduleNum].pos=obp;
+			pGotoLabelSchedule[GotoLabelScheduleNum].now_cp=cp;
+			GotoLabelScheduleNum++;
+		}
+		*((long *)(OpBuffer+obp))=i-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+}
+void OpcodeWhile(char *Parameter){
+	extern DWORD *pExitWhileSchedule;
+	extern int ExitWhileScheduleNum;
+	extern HANDLE hHeap;
+	int i2,i3,type;
+	DWORD *lpdwTemp;
+	int TempNum;
+
+	//Continueアドレスのバックアップとセット
+	extern DWORD dwContinueAddress;
+	DWORD dwTempContinue;
+	dwTempContinue=dwContinueAddress;
+	dwContinueAddress=obp;
+
+	if(!Parameter[0]) SetError(10,"While",cp);
+	type=NumOpe(Parameter,0,0,0);
+
+	int je_schedule;
+	if(type==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//push 0
+		op_push_value(0);
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,sizeof(double)+sizeof(long)
+		op_add_esp(sizeof(double)+sizeof(long));
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//test ah,40
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x40;
+
+		//jne (Wend まで)
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		obp+=sizeof(long);
+
+		//jeの番地
+		je_schedule=obp;
+	}
+	else if(type==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//push 0
+		op_push_value(0);
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,sizeof(float)+sizeof(long)
+		op_add_esp(sizeof(float)+sizeof(long));
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//test ah,40
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x40;
+
+		//jne (Wend まで)
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		obp+=sizeof(long);
+
+		//jeの番地
+		je_schedule=obp;
+	}
+	else if(type==DEF_INT64||type==DEF_QWORD){
+		//64ビット型
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//cmp eax,0
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xF8;
+		OpBuffer[obp++]=(char)0x00;
+
+		//jne
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		obp+=sizeof(long);
+		i2=obp;
+
+
+		//cmp ebx,0
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xFB;
+		OpBuffer[obp++]=(char)0x00;
+
+		//jne
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		obp+=sizeof(long);
+		i3=obp;
+
+
+		//jmp (endif、または else までジャンプ)
+		OpBuffer[obp++]=(char)0xE9;
+		obp+=sizeof(long);
+
+		*((long *)(OpBuffer+i2-sizeof(long)))=obp-i2;
+		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;
+
+		//jmpの番地
+		je_schedule=obp;
+	}
+	else{
+		//その他整数型
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//cmp eax,0
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xF8;
+		OpBuffer[obp++]=(char)0x00;
+
+		//je (Wend まで)
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x84;
+		obp+=sizeof(long);
+
+		//実行中の番地
+		je_schedule=obp;
+	}
+
+	//ExitWhileスケジュールの準備
+	lpdwTemp=pExitWhileSchedule;
+	TempNum=ExitWhileScheduleNum;
+	pExitWhileSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	ExitWhileScheduleNum=0;
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	//While内をコンパイル
+	CompileBuffer(0,COM_WEND);
+
+	CallDestrouctorsOfScope();
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
+	obp+=sizeof(long);
+
+	//ExitWhileスケジュール
+	for(i2=0;i2<ExitWhileScheduleNum;i2++){
+		*((long *)(OpBuffer+pExitWhileSchedule[i2]))=obp-(pExitWhileSchedule[i2]+sizeof(long));
+	}
+	HeapDefaultFree(pExitWhileSchedule);
+	pExitWhileSchedule=lpdwTemp;
+	ExitWhileScheduleNum=TempNum;
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+	*((long *)(OpBuffer+je_schedule-sizeof(long)))=obp-je_schedule;	//jeジャンプ先のオフセット値
+
+	//Continueアドレスを復元
+	dwContinueAddress=dwTempContinue;
+}
+void OpcodeExitWhile(void){
+	extern DWORD *pExitWhileSchedule;
+	extern int ExitWhileScheduleNum;
+	extern HANDLE hHeap;
+
+	if(!pExitWhileSchedule){
+		SetError(12,"Exit While",cp);
+		return;
+	}
+
+	//jmp ...(Wend addr)
+	OpBuffer[obp++]=(char)0xE9;
+
+	pExitWhileSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitWhileSchedule,(ExitWhileScheduleNum+1)*sizeof(DWORD));
+	pExitWhileSchedule[ExitWhileScheduleNum]=obp;
+	ExitWhileScheduleNum++;
+
+	obp+=sizeof(long);
+}
+char szNextVariable[VN_SIZE];
+void OpcodeFor(char *Parameter){
+	extern DWORD *pExitForSchedule;
+	extern int ExitForScheduleNum;
+	extern HANDLE hHeap;
+	DWORD *lpdwTemp;
+	int TempNum;
+	int i,i2,i3;
+	char temporary[VN_SIZE],variable[VN_SIZE],JudgeNum[VN_SIZE],StepNum[VN_SIZE];
+
+	//第１パラメータを取得
+	i=GetOneParameter(Parameter,0,temporary);
+	if(!Parameter[i]){
+		SetError(12,"For",cp);
+		goto ErrorStep;
+	}
+
+	for(i2=0;;i2++){
+		if(temporary[i2]=='='){
+			variable[i2]=0;
+
+			//カウンタ初期化
+			OpcodeCalc(temporary);
+			break;
+		}
+		if(temporary[i2]=='\0'){
+			SetError(12,"For",cp);
+			goto ErrorStep;
+		}
+		variable[i2]=temporary[i2];
+	}
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	i2=obp;
+	obp+=sizeof(long);
+
+	//Continueアドレスのバックアップとセット
+	extern DWORD dwContinueAddress;
+	DWORD dwTempContinue;
+	dwTempContinue=dwContinueAddress;
+	dwContinueAddress=obp;
+
+	//第２パラメータを取得（to～）
+	i=GetOneParameter(Parameter,i,JudgeNum);
+
+	//第３パラメータを取得（step～）
+	if(Parameter[i]){
+		i=GetOneParameter(Parameter,i,StepNum);
+		if(Parameter[i]) SetError(12,"For",cp);
+	}
+	else lstrcpy(StepNum,"1");
+
+	//カウンタを増加させる
+	sprintf(temporary,"%s=(%s)+(%s)",variable,variable,StepNum);
+	OpcodeCalc(temporary);
+
+	*((long *)(OpBuffer+i2))=obp-(i2+sizeof(long));
+
+	//増加か減少かを区別する
+	sprintf(temporary,"(%s)>=0",StepNum);
+	NumOpe(temporary,0,0,0);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//cmp eax,0
+	OpBuffer[obp++]=(char)0x83;
+	OpBuffer[obp++]=(char)0xF8;
+	OpBuffer[obp++]=(char)0x00;
+
+	//je [カウンタ減少の場合の判定]
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x84;
+	i2=obp;
+	obp+=sizeof(long);
+
+	//判定（カウンタ増加の場合）
+	sprintf(temporary,"%s<=(%s)",variable,JudgeNum);
+	NumOpe(temporary,0,0,0);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//jmp [カウンタ減少の場合の判定を飛び越す]
+	OpBuffer[obp++]=(char)0xE9;
+	i3=obp;
+	obp+=sizeof(long);
+
+	*((long *)(OpBuffer+i2))=obp-(i2+sizeof(long)); //jeジャンプ先のオフセット値
+
+	//判定（カウンタ減少の場合）
+	sprintf(temporary,"%s>=(%s)",variable,JudgeNum);
+	NumOpe(temporary,0,0,0);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	*((long *)(OpBuffer+i3))=obp-(i3+sizeof(long)); //jmpジャンプ先のオフセット値
+
+	//cmp eax,0
+	OpBuffer[obp++]=(char)0x83;
+	OpBuffer[obp++]=(char)0xF8;
+	OpBuffer[obp++]=(char)0x00;
+
+ErrorStep:
+
+	//je ...
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x84;
+	int je_schedule=obp;
+	obp+=sizeof(long);
+
+	//ExitForスケジュールの準備
+	lpdwTemp=pExitForSchedule;
+	TempNum=ExitForScheduleNum;
+	pExitForSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	ExitForScheduleNum=0;
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	//For内をコンパイル
+	CompileBuffer(0,COM_NEXT);
+
+	CallDestrouctorsOfScope();
+
+	if(szNextVariable[0]){
+		if(lstrcmp(szNextVariable,variable)!=0){
+			SetError(55,szNextVariable,cp);
+		}
+	}
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
+	obp+=sizeof(long);
+
+	//ExitForスケジュール
+	for(i=0;i<ExitForScheduleNum;i++){
+		*((long *)(OpBuffer+pExitForSchedule[i]))=obp-(pExitForSchedule[i]+sizeof(long));
+	}
+	HeapDefaultFree(pExitForSchedule);
+	pExitForSchedule=lpdwTemp;
+	ExitForScheduleNum=TempNum;
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+	*((long *)(OpBuffer+je_schedule))=obp-(je_schedule+sizeof(long)); //jeジャンプ先のオフセット値
+
+	//Continueアドレスを復元
+	dwContinueAddress=dwTempContinue;
+}
+void OpcodeExitFor(void){
+	extern DWORD *pExitForSchedule;
+	extern int ExitForScheduleNum;
+	extern HANDLE hHeap;
+
+	if(!pExitForSchedule){
+		SetError(12,"Exit For",cp);
+		return;
+	}
+
+	//jmp ...(Next addr)
+	OpBuffer[obp++]=(char)0xE9;
+
+	pExitForSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitForSchedule,(ExitForScheduleNum+1)*sizeof(DWORD));
+	pExitForSchedule[ExitForScheduleNum]=obp;
+	ExitForScheduleNum++;
+
+	obp+=sizeof(long);
+}
+
+void OpcodeDo(char *Parameter){
+	extern DWORD *pExitDoSchedule;
+	extern int ExitDoScheduleNum;
+	extern HANDLE hHeap;
+	int i,i2,i3,i4,type;
+	DWORD *lpdwTemp;
+	int TempNum;
+
+	if(Parameter[0]) SetError(10,"Do",cp);
+
+	//ExitDoスケジュールの準備
+	lpdwTemp=pExitDoSchedule;
+	TempNum=ExitDoScheduleNum;
+	pExitDoSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	ExitDoScheduleNum=0;
+
+	//Continueアドレスのバックアップとセット
+	extern DWORD dwContinueAddress;
+	DWORD dwTempContinue;
+	dwTempContinue=dwContinueAddress;
+	dwContinueAddress=obp;
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	//Do内をコンパイル
+	CompileBuffer(0,COM_LOOP);
+
+	CallDestrouctorsOfScope();
+
+	extern char *basbuf;
+	char temporary[VN_SIZE];
+	for(i=cp-1;;i--){
+		if(IsCommandDelimitation(basbuf[i])){
+			i+=3;
+			if(!(basbuf[i]=='0'||basbuf[i]=='1')){
+				//無条件ループ
+				break;
+			}
+			i3=i;
+
+			for(i+=2,i2=0;;i++,i2++){
+				if(IsCommandDelimitation(basbuf[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=basbuf[i];
+			}
+
+			type=NumOpe(temporary,0,0,0);
+
+			if(type==DEF_DOUBLE){
+				//fld qword ptr[esp]
+				op_fld_ptr_esp(DEF_DOUBLE);
+
+				//push 0
+				op_push_value(0);
+
+				//fild dword ptr[esp]
+				op_fld_ptr_esp(DEF_LONG);
+
+				//add esp,sizeof(double)+sizeof(long)
+				op_add_esp(sizeof(double)+sizeof(long));
+
+				//fcompp
+				OpBuffer[obp++]=(char)0xDE;
+				OpBuffer[obp++]=(char)0xD9;
+
+				//fnstsw ax
+				OpBuffer[obp++]=(char)0xDF;
+				OpBuffer[obp++]=(char)0xE0;
+
+				//test ah,40
+				OpBuffer[obp++]=(char)0xF6;
+				OpBuffer[obp++]=(char)0xC4;
+				OpBuffer[obp++]=(char)0x40;
+
+				if(basbuf[i3]=='0'){
+					//While
+
+					//jne 5（ループ終了）
+					OpBuffer[obp++]=(char)0x75;
+					OpBuffer[obp++]=(char)0x05;
+				}
+				else if(basbuf[i3]=='1'){
+					//Until
+
+					//je 5（ループ終了）
+					OpBuffer[obp++]=(char)0x74;
+					OpBuffer[obp++]=(char)0x05;
+				}
+			}
+			else if(type==DEF_SINGLE){
+				//fld dword ptr[esp]
+				op_fld_ptr_esp(DEF_SINGLE);
+
+				//push 0
+				op_push_value(0);
+
+				//fild dword ptr[esp]
+				op_fld_ptr_esp(DEF_LONG);
+
+				//add esp,sizeof(float)+sizeof(long)
+				op_add_esp(sizeof(float)+sizeof(long));
+
+				//fcompp
+				OpBuffer[obp++]=(char)0xDE;
+				OpBuffer[obp++]=(char)0xD9;
+
+				//fnstsw ax
+				OpBuffer[obp++]=(char)0xDF;
+				OpBuffer[obp++]=(char)0xE0;
+
+				//test ah,40
+				OpBuffer[obp++]=(char)0xF6;
+				OpBuffer[obp++]=(char)0xC4;
+				OpBuffer[obp++]=(char)0x40;
+
+				if(basbuf[i3]=='0'){
+					//While
+
+					//jne 5（ループ終了）
+					OpBuffer[obp++]=(char)0x75;
+					OpBuffer[obp++]=(char)0x05;
+				}
+				else if(basbuf[i3]=='1'){
+					//Until
+
+					//je 5（ループ終了）
+					OpBuffer[obp++]=(char)0x74;
+					OpBuffer[obp++]=(char)0x05;
+				}
+			}
+			else if(type==DEF_INT64||type==DEF_QWORD){
+				//64ビット型
+
+				//pop eax
+				op_pop(REG_EAX);
+
+				//pop ebx
+				op_pop(REG_EBX);
+
+				//cmp eax,0
+				OpBuffer[obp++]=(char)0x83;
+				OpBuffer[obp++]=(char)0xF8;
+				OpBuffer[obp++]=(char)0x00;
+
+				//jne
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x85;
+				obp+=sizeof(long);
+				i2=obp;
+
+
+				//cmp ebx,0
+				OpBuffer[obp++]=(char)0x83;
+				OpBuffer[obp++]=(char)0xFB;
+				OpBuffer[obp++]=(char)0x00;
+
+				//jne
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x85;
+				obp+=sizeof(long);
+				i4=obp;
+
+
+				if(basbuf[i3]=='0'){
+					//While
+
+					//jmp 5（ループ終了）
+					OpBuffer[obp++]=(char)0xEB;
+					OpBuffer[obp++]=(char)0x05;
+
+					*((long *)(OpBuffer+i2-sizeof(long)))=obp-i2;
+					*((long *)(OpBuffer+i4-sizeof(long)))=obp-i4;
+				}
+				else if(basbuf[i3]=='1'){
+					//Until
+
+					//jmp 2（ループを続ける）
+					OpBuffer[obp++]=(char)0xEB;
+					OpBuffer[obp++]=(char)0x02;
+
+					*((long *)(OpBuffer+i2-sizeof(long)))=obp-i2;
+					*((long *)(OpBuffer+i4-sizeof(long)))=obp-i4;
+
+					//jmp 5（ループ終了）
+					OpBuffer[obp++]=(char)0xEB;
+					OpBuffer[obp++]=(char)0x05;
+				}
+			}
+			else{
+				//pop eax
+				op_pop(REG_EAX);
+
+				//cmp eax,0
+				OpBuffer[obp++]=(char)0x83;
+				OpBuffer[obp++]=(char)0xF8;
+				OpBuffer[obp++]=(char)0x00;
+
+				if(basbuf[i3]=='0'){
+					//While
+
+					//je 5（ループ終了）
+					OpBuffer[obp++]=(char)0x74;
+					OpBuffer[obp++]=(char)0x05;
+				}
+				else if(basbuf[i3]=='1'){
+					//Until
+
+					//jne 5（ループ終了）
+					OpBuffer[obp++]=(char)0x75;
+					OpBuffer[obp++]=(char)0x05;
+				}
+			}
+			break;
+		}
+	}
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
+	obp+=sizeof(long);
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	int je_schedule=obp;
+	obp+=sizeof(long);
+
+	//ExitDoスケジュール
+	for(i=0;i<ExitDoScheduleNum;i++){
+		*((long *)(OpBuffer+pExitDoSchedule[i]))=obp-(pExitDoSchedule[i]+sizeof(long));
+	}
+	HeapDefaultFree(pExitDoSchedule);
+	pExitDoSchedule=lpdwTemp;
+	ExitDoScheduleNum=TempNum;
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+	*((long *)(OpBuffer+je_schedule))=obp-(je_schedule+sizeof(long)); //jmpジャンプ先のオフセット値
+
+
+	//Continueアドレスを復元
+	dwContinueAddress=dwTempContinue;
+}
+void OpcodeExitDo(void){
+	extern HANDLE hHeap;
+	extern DWORD *pExitDoSchedule;
+	extern int ExitDoScheduleNum;
+
+	if(!pExitDoSchedule){
+		SetError(12,"Exit Do",cp);
+		return;
+	}
+
+	//jmp ...(Loop addr)
+	OpBuffer[obp++]=(char)0xE9;
+
+	pExitDoSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitDoSchedule,(ExitDoScheduleNum+1)*sizeof(DWORD));
+	pExitDoSchedule[ExitDoScheduleNum]=obp;
+	ExitDoScheduleNum++;
+
+	obp+=sizeof(long);
+}
+void OpcodeContinue(void){
+	extern DWORD dwContinueAddress;
+
+	if(dwContinueAddress==-1){
+		SetError(12,"Continue",cp);
+		return;
+	}
+
+	//jmp ...(Continue addr)
+	OpBuffer[obp++]=(char)0xE9;
+
+	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
+	obp+=sizeof(long);
+}
+
+void OpcodeExitSub(void){
+	extern DWORD *pExitSubSchedule;
+	extern int ExitSubScheduleNum;
+	extern HANDLE hHeap;
+
+	extern BOOL bCompilingGlobal;
+	if(bCompilingGlobal){
+		SetError(12,"Exit Sub/Function",cp);
+		return;
+	}
+
+	//jmp ...(End Sub/Function)
+	OpBuffer[obp++]=(char)0xE9;
+
+	pExitSubSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitSubSchedule,(ExitSubScheduleNum+1)*sizeof(DWORD));
+	pExitSubSchedule[ExitSubScheduleNum]=obp;
+	ExitSubScheduleNum++;
+
+	obp+=sizeof(long);
+}
+
+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;
+void OpcodeSelect(char *Parameter){
+	extern DWORD *pCaseSchedule;
+	extern int CaseScheduleNum;
+	extern int NowCaseSchedule;
+	extern int CaseTypeSize;
+	extern HANDLE hHeap;
+	extern char *basbuf;
+	int i,i2,i3,sw,type1,type2,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;
+
+	LONG_PTR lpIndex;
+	type1=NumOpe(Parameter,0,0,&lpIndex);
+	if(type1==DEF_INTEGER||
+		type1==DEF_WORD||
+		type1==DEF_CHAR||
+		type1==DEF_BYTE) CaseTypeSize=sizeof(long);
+	else{
+		CaseTypeSize=GetTypeSize(type1,lpIndex);
+		if(type1==DEF_OBJECT) CaseTypeSize=PTR_SIZE;
+	}
+
+	for(i=cp,sw=0;;i++){
+		if(basbuf[i]=='\0'){
+			HeapDefaultFree(pCaseSchedule);
+			pCaseSchedule=temp_pCaseSchedule;
+			CaseScheduleNum=temp_CaseScheduleNum;
+			NowCaseSchedule=temp_NowCaseSchedule;
+			CaseTypeSize=temp_CaseTypeSize;
+			SetError(22,"Select",cp);
+			return;
+		}
+		if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE){
+			for(i2=0;;i++){
+				if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE) i2++;
+				if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
+					i2--;
+					if(i2==0) break;
+				}
+			}
+			continue;
+		}
+		if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
+			if(sw==0){
+				//add esp,CaseTypeSize
+				op_add_esp(CaseTypeSize);
+			}
+			break;
+		}
+		if(basbuf[i]==1&&basbuf[i+1]==ESC_CASE){
+			NowCaseCp=i;
+
+			i++;
+			while(1){
+				for(i++,i2=0;;i++,i2++){
+					if(basbuf[i]=='\"'){
+						i3=GetStringInQuotation(temporary+i2,basbuf+i);
+						i+=i3-1;
+						i2+=i3-1;
+						continue;
+					}
+					if(basbuf[i]=='('){
+						i3=GetStringInPare(temporary+i2,basbuf+i);
+						i+=i3-1;
+						i2+=i3-1;
+						continue;
+					}
+					if(basbuf[i]=='['){
+						i3=GetStringInBracket(temporary+i2,basbuf+i);
+						i+=i3-1;
+						i2+=i3-1;
+						continue;
+					}
+
+					if(IsCommandDelimitation(basbuf[i])){
+						temporary[i2]=0;
+						break;
+					}
+					if(basbuf[i]==','){
+						temporary[i2]=0;
+						break;
+					}
+
+					temporary[i2]=basbuf[i];
+				}
+
+				//エラー用
+				i2=cp;
+				cp=NowCaseCp;
+
+				LONG_PTR lpIndex2;
+				type2=NumOpe(temporary,type1,lpIndex,&lpIndex2);
+
+				cp=i2;
+
+				if(type1==DEF_OBJECT){
+					CClass *pobj_c;
+					pobj_c=(CClass *)lpIndex;
+
+					SUBINFO **ppsi;
+					int num;
+					ppsi=pobj_c->GetOperatorSubInfo(CALC_EQUAL,num);
+					if(num==0){
+						HeapDefaultFree(ppsi);
+
+						return;
+					}
+
+					PARAMETER_INFO *ppi;
+					int iParmNum=0;
+
+					//_System_LocalThis
+					ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);
+					ppi[iParmNum].bArray=0;
+					ppi[iParmNum].bByVal=0;
+					ppi[iParmNum].name=0;
+					ppi[iParmNum].type=DEF_PTR_VOID;
+					ppi[iParmNum].u.index=-1;
+					ppi[iParmNum].SubScripts[0]=-1;
+					iParmNum++;
+
+					ppi[iParmNum].bArray=0;
+					ppi[iParmNum].bByVal=0;
+					ppi[iParmNum].name=0;
+					ppi[iParmNum].type=type2;
+					ppi[iParmNum].u.index=lpIndex2;
+					ppi[iParmNum].SubScripts[0]=-1;
+					iParmNum++;
+
+					//オーバーロードを解決
+					SUBINFO *psi;
+					psi=OverloadSolution("==",ppsi,num,ppi,iParmNum,NULL);
+					HeapDefaultFree(ppsi);
+					HeapDefaultFree(ppi);
+
+					if(!psi){
+						//エラー
+						return;
+					}
+
+
+					//pop edx
+					op_pop(REG_EDX);
+
+					//mov ecx,dword ptr[esp]
+					op_mov_RM(sizeof(long),REG_ECX,REG_ESP,0,MOD_BASE);
+
+					//push edx
+					op_push(REG_EDX);
+
+					//push ecx
+					op_push(REG_ECX);
+
+					//call operator_proc	※ ==演算子
+					op_call(psi);
+
+					//test eax,eax
+					op_test(REG_EAX,REG_EAX);
+
+					//jne ...
+					OpBuffer[obp++]=(char)0x0F;
+					OpBuffer[obp++]=(char)0x85;
+					AddCaseSchedule();
+					obp+=sizeof(long);
+				}
+				else if(type1==DEF_DOUBLE){
+					ChangeTypeToDouble(type2);
+
+					//fld qword ptr[esp]
+					op_fld_ptr_esp(DEF_DOUBLE);
+
+					//add esp,CaseTypeSize
+					op_add_esp(CaseTypeSize);
+
+					//fld qword ptr[esp]
+					op_fld_ptr_esp(DEF_DOUBLE);
+
+					//fcompp
+					OpBuffer[obp++]=(char)0xDE;
+					OpBuffer[obp++]=(char)0xD9;
+
+					//fnstsw ax
+					OpBuffer[obp++]=(char)0xDF;
+					OpBuffer[obp++]=(char)0xE0;
+
+					//test ah,40
+					OpBuffer[obp++]=(char)0xF6;
+					OpBuffer[obp++]=(char)0xC4;
+					OpBuffer[obp++]=(char)0x40;
+
+					//jne ...
+					OpBuffer[obp++]=(char)0x0F;
+					OpBuffer[obp++]=(char)0x85;
+					AddCaseSchedule();
+					obp+=sizeof(long);
+				}
+				else if(type1==DEF_SINGLE){
+					ChangeTypeToSingle(type2);
+
+					//fld dword ptr[esp]
+					op_fld_ptr_esp(DEF_SINGLE);
+
+					//add esp,CaseTypeSize
+					op_add_esp(CaseTypeSize);
+
+					//fld dword ptr[esp]
+					op_fld_ptr_esp(DEF_SINGLE);
+
+					//fcompp
+					OpBuffer[obp++]=(char)0xDE;
+					OpBuffer[obp++]=(char)0xD9;
+
+					//fnstsw ax
+					OpBuffer[obp++]=(char)0xDF;
+					OpBuffer[obp++]=(char)0xE0;
+
+					//test ah,40
+					OpBuffer[obp++]=(char)0xF6;
+					OpBuffer[obp++]=(char)0xC4;
+					OpBuffer[obp++]=(char)0x40;
+
+					//jne ...
+					OpBuffer[obp++]=(char)0x0F;
+					OpBuffer[obp++]=(char)0x85;
+					AddCaseSchedule();
+					obp+=sizeof(long);
+				}
+				else{
+					//その他整数型
+
+					//pop ebx
+					op_pop(REG_EBX);
+
+					//mov eax,dword ptr[esp]
+					OpBuffer[obp++]=(char)0x8B;
+					OpBuffer[obp++]=(char)0x04;
+					OpBuffer[obp++]=(char)0x24;
+
+					//cmp eax,ebx
+					OpBuffer[obp++]=(char)0x3B;
+					OpBuffer[obp++]=(char)0xC3;
+
+					//je ...
+					OpBuffer[obp++]=(char)0x0F;
+					OpBuffer[obp++]=(char)0x84;
+					AddCaseSchedule();
+					obp+=sizeof(long);
+				}
+
+				if(basbuf[i]!=',') break;
+			}
+		}
+		if(basbuf[i]==1&&basbuf[i+1]==ESC_CASEELSE){
+			sw=1;
+
+			//jmp ...
+			OpBuffer[obp++]=(char)0xE9;
+			AddCaseSchedule();
+			obp+=sizeof(long);
+		}
+	}
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	//Select Case内をコンパイル
+	CompileBuffer(ESC_ENDSELECT,0);
+
+	//jmp EndSelect
+	OpBuffer[obp++]=(char)0xE9;
+	AddCaseSchedule();
+	obp+=sizeof(long);
+
+	//最終スケジュール
+	for(i=NowCaseSchedule;i<CaseScheduleNum;i++){
+		*(long *)(OpBuffer+pCaseSchedule[i])=obp-(pCaseSchedule[i]+sizeof(long));
+	}
+	HeapDefaultFree(pCaseSchedule);
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+	pCaseSchedule=temp_pCaseSchedule;
+	CaseScheduleNum=temp_CaseScheduleNum;
+	NowCaseSchedule=temp_NowCaseSchedule;
+	CaseTypeSize=temp_CaseTypeSize;
+}
+void OpcodeCase(char *Parameter){
+	extern DWORD *pCaseSchedule;
+	extern int NowCaseSchedule;
+	extern int CaseTypeSize;
+	int i;
+
+	if(!pCaseSchedule){
+		SetError(30,"Case",cp);
+		return;
+	}
+
+	//jmp EndSelect
+	OpBuffer[obp++]=(char)0xE9;
+	AddCaseSchedule();
+	obp+=sizeof(long);
+
+	i=0;
+	while(1){
+		//Caseスケジュール
+		*(long *)(OpBuffer+pCaseSchedule[NowCaseSchedule])=obp-(pCaseSchedule[NowCaseSchedule]+sizeof(long));
+		NowCaseSchedule++;
+
+		i=JumpOneParameter(Parameter,i);
+		if(Parameter[i]=='\0') break;
+	}
+
+	//add esp,CaseTypeSize
+	op_add_esp(CaseTypeSize);
+}
+
+void OpcodeGosub(char *Parameter){
+	extern HANDLE hHeap;
+	extern GOTOLABELSCHEDULE *pGotoLabelSchedule;
+	extern int GotoLabelScheduleNum;
+	int i,LineNum;
+
+	if(Parameter[0]=='*'){
+		i=GetLabelAddress(Parameter+1,0);
+
+		//call ...
+		OpBuffer[obp++]=(char)0xE8;
+		if(i==-1){
+			pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapReAlloc(hHeap,0,pGotoLabelSchedule,(GotoLabelScheduleNum+1)*sizeof(GOTOLABELSCHEDULE));
+			pGotoLabelSchedule[GotoLabelScheduleNum].pName=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter+1)+1);
+			lstrcpy(pGotoLabelSchedule[GotoLabelScheduleNum].pName,Parameter+1);
+			pGotoLabelSchedule[GotoLabelScheduleNum].pos=obp;
+			pGotoLabelSchedule[GotoLabelScheduleNum].now_cp=cp;
+			GotoLabelScheduleNum++;
+		}
+		*((long *)(OpBuffer+obp))=i-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+	else{
+		LineNum=atoi(Parameter);
+		i=GetLabelAddress(0,LineNum);
+
+		//call ...
+		OpBuffer[obp++]=(char)0xE8;
+		if(i==-1){
+			pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapReAlloc(hHeap,0,pGotoLabelSchedule,(GotoLabelScheduleNum+1)*sizeof(GOTOLABELSCHEDULE));
+			pGotoLabelSchedule[GotoLabelScheduleNum].pName=0;
+			pGotoLabelSchedule[GotoLabelScheduleNum].line=LineNum;
+			pGotoLabelSchedule[GotoLabelScheduleNum].pos=obp;
+			pGotoLabelSchedule[GotoLabelScheduleNum].now_cp=cp;
+			GotoLabelScheduleNum++;
+		}
+		*((long *)(OpBuffer+obp))=i-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+}
+void OpcodeReturn(char *Parameter){
+	extern BOOL bCompilingGlobal;
+	if(bCompilingGlobal){
+		//Gosub～Returnとして扱う
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else{
+		//戻り値をセット
+		if(Parameter[0]){
+			extern SUBINFO *pCompilingSubInfo;
+			char *temp;
+			if(pCompilingSubInfo->name[0]==1&&pCompilingSubInfo->name[1]==ESC_OPERATOR)
+				temp="_System_ReturnValue";
+			else temp=pCompilingSubInfo->name;
+
+			char temporary[VN_SIZE];
+			sprintf(temporary,"%s=%s",temp,Parameter);
+			OpcodeCalc(temporary);
+		}
+
+		//プロシージャを抜け出す（C言語のreturnと同様の処理を行う）
+		OpcodeExitSub();
+	}
+}
+
+void Opcode_Input(char *Parameter){
+	extern int cp;
+	int i2,i3,i4,i5,type;
+	BOOL bFile;
+	char temporary[VN_SIZE],temp2[VN_SIZE],buffer[VN_SIZE];
+
+	KillStringSpaces(Parameter);
+
+	if(Parameter[0]=='#'){
+		bFile=1;
+		for(i2=0,i3=1;;i2++,i3++){
+			buffer[i2]=Parameter[i3];
+			if(Parameter[i3]==','||Parameter[i3]=='\0') break;
+		}
+		buffer[i2+1]=0;
+		i2=i3+1;
+	}
+	else{
+		bFile=0;
+		i2=0;
+		buffer[0]=0;
+
+		//表示用文字列パラメータをセット
+		if(Parameter[0]=='\"'){
+			buffer[0]='\"';
+			for(i2=1;;i2++){
+				if(Parameter[i2]=='\"'){
+					buffer[i2]=0;
+					break;
+				}
+				buffer[i2]=Parameter[i2];
+			}
+			if(Parameter[i2+1]==';') lstrcpy(buffer+i2,"? \"");
+			else if(Parameter[i2+1]==',') lstrcpy(buffer+i2,"\"");
+			else SetError(10,"Input",cp);
+			i2+=2;
+		}
+		else if((Parameter[0]=='e'||Parameter[0]=='E')&&
+			(Parameter[1]=='x'||Parameter[1]=='X')&&
+			Parameter[2]=='\"'){
+			memcpy(buffer,Parameter,3);
+			for(i2=3;;i2++){
+				if(Parameter[i2]=='\"'){
+					buffer[i2]=0;
+					break;
+				}
+				buffer[i2]=Parameter[i2];
+			}
+			if(Parameter[i2+1]==';') lstrcpy(buffer+i2,"? \"");
+			else if(Parameter[i2+1]==',') lstrcpy(buffer+i2,"\"");
+			else SetError(10,"Input",cp);
+			i2+=2;
+		}
+		else{
+			lstrcpy(buffer,"\"? \"");
+			i2=0;
+		}
+	}
+
+	//変数ポインタ、変数のタイプをセット
+	i4=0;
+	while(1){
+		for(i3=0;;i2++,i3++){
+			if(Parameter[i2]=='('){
+				i5=GetStringInPare(temporary+i3,Parameter+i2);
+				i2+=i5-1;
+				i3+=i5-1;
+			}
+			if(Parameter[i2]=='['){
+				i5=GetStringInBracket(temporary+i3,Parameter+i2);
+				i2+=i5-1;
+				i3+=i5-1;
+			}
+			if(Parameter[i2]==','){
+				temporary[i3]=0;
+				i2++;
+				break;
+			}
+			temporary[i3]=Parameter[i2];
+			if(Parameter[i2]=='\0') break;
+		}
+		if(temporary[0]=='\0'){
+			SetError(10,"Input",cp);
+			return;
+		}
+
+		LONG_PTR lpIndex;
+		RELATIVE_VAR RelativeVar;
+		GetVarOffset(1,temporary,&type,&RelativeVar,&lpIndex);
+
+		sprintf(temp2,"_System_InputDataPtr[%d]=VarPtr(%s)",i4,temporary);
+		OpcodeCalc(temp2);
+
+		if(type==DEF_LONG) type=DEF_DWORD;
+		else if(type==DEF_INTEGER) type=DEF_WORD;
+		else if(type==DEF_OBJECT){
+			CClass *pobj_Class=(CClass *)lpIndex;
+			if(lstrcmp(pobj_Class->name,"String")==0) type=DEF_STRING;
+		}
+		sprintf(temp2,"_System_InputDataType[%d]=%d",i4,type);
+		OpcodeCalc(temp2);
+
+		i4++;
+		if(Parameter[i2]=='\0') break;
+	}
+	sprintf(temp2,"_System_InputDataPtr[%d]=0",i4);
+	OpcodeCalc(temp2);
+
+	SUBINFO *psi;
+	if(bFile) psi=GetSubHash("INPUT_FromFile");
+	else psi=GetSubHash("INPUT_FromPrompt");
+	if(!psi){
+		SetError(3,"Input",cp);
+		return;
+	}
+	Opcode_CallProc(buffer,psi,0,0,"",0);
+}
+void Opcode_PrintUsing(char *Parameter,char *buffer,BOOL bFile){
+	extern int cp;
+	int i2,i3,i4,i5;
+	char temporary[VN_SIZE],temp2[8192];
+	BOOL bReturnLine;
+
+	i2=lstrlen(Parameter);
+	if(Parameter[i2-1]==';'){
+		bReturnLine=0;
+		Parameter[i2-1]=0;
+	}
+	else bReturnLine=1;
+
+	i3=lstrlen(buffer);
+	for(i2=0;;i2++,i3++){
+		if(Parameter[i2]==';'){
+			buffer[i3]=0;
+			break;
+		}
+		buffer[i3]=Parameter[i2];
+		if(Parameter[i2]=='\0') break;
+	}
+	if(Parameter[i2]==';') i2++;
+
+	if(bReturnLine) lstrcat(buffer,"+Ex\"\\r\\n\"");
+
+	//データポインタ、データのタイプをセット
+	i4=0;
+	while(1){
+		for(i3=0;;i2++,i3++){
+			if(Parameter[i2]=='\"'){
+				temporary[i3]=Parameter[i2];
+				for(i2++,i3++;;i2++,i3++){
+					temporary[i3]=Parameter[i2];
+					if(Parameter[i2]=='\"') break;
+				}
+				continue;
+			}
+			if(Parameter[i2]=='('){
+				i5=GetStringInPare(temporary+i3,Parameter+i2);
+				i2+=i5-1;
+				i3+=i5-1;
+				continue;
+			}
+			if(Parameter[i2]=='['){
+				i5=GetStringInBracket(temporary+i3,Parameter+i2);
+				i2+=i5-1;
+				i3+=i5-1;
+				continue;
+			}
+			if(Parameter[i2]==','){
+				temporary[i3]=0;
+				i2++;
+				break;
+			}
+			temporary[i3]=Parameter[i2];
+			if(Parameter[i2]=='\0') break;
+		}
+		if(temporary[0]=='\0'){
+			SetError(10,"Print",cp);
+			return;
+		}
+
+		int iResult;
+		iResult=IsStrCalculation(temporary);
+
+		if(iResult==1){
+			//文字列
+			sprintf(temp2,"_System_UsingStrData[%d]=%s",i4,temporary);
+			OpcodeCalc(temp2);
+
+			sprintf(temp2,"_System_UsingDataType[%d]=%d",i4,DEF_STRING);
+			OpcodeCalc(temp2);
+		}
+		else if(iResult==0){
+			//数値
+			sprintf(temp2,"_System_UsingDblData[%d]=%s",i4,temporary);
+			OpcodeCalc(temp2);
+
+			sprintf(temp2,"_System_UsingDataType[%d]=%d",i4,DEF_DOUBLE);
+			OpcodeCalc(temp2);
+		}
+		//else if(iResult==-1) エラー
+
+		i4++;
+		if(Parameter[i2]=='\0') break;
+	}
+	sprintf(temp2,"_System_UsingDataType[%d]=-1",i4);
+	OpcodeCalc(temp2);
+
+	SUBINFO *psi;
+	if(bFile) psi=GetSubHash("PRINTUSING_ToFile");
+	else psi=GetSubHash("PRINTUSING_ToPrompt");
+	if(!psi){
+		SetError(3,"Print",cp);
+		return;
+	}
+	Opcode_CallProc(buffer,psi,0,0,"",0);
+}
+void Opcode_Print(char *Parameter,BOOL bWrite){
+	int i2,i3,i4,sw;
+	char temporary[VN_SIZE],buffer[VN_SIZE];
+	BOOL bFile;
+
+	KillStringSpaces(Parameter);
+
+	if(Parameter[0]=='#'){
+		bFile=1;
+		for(i2=0,i3=1;;i2++,i3++){
+			buffer[i2]=Parameter[i3];
+			if(Parameter[i3]==','||Parameter[i3]=='\0') break;
+		}
+		buffer[i2+1]=0;
+		if(Parameter[i3]==',') i3++;
+		i2=i3;
+	}
+	else{
+		bFile=0;
+		i2=0;
+		buffer[0]=0;
+	}
+	if(Parameter[i2]==1&&Parameter[i2+1]==ESC_USING){
+		Opcode_PrintUsing(Parameter+i2+2,buffer,bFile);
+		return;
+	}
+
+	lstrcat(buffer,"_System_DummyStr+");
+
+	sw=1;
+	while(1){
+		for(i3=0;;i2++,i3++){
+			if(Parameter[i2]=='\"'){
+				temporary[i3]=Parameter[i2];
+				for(i2++,i3++;;i2++,i3++){
+					temporary[i3]=Parameter[i2];
+					if(Parameter[i2]=='\"') break;
+				}
+				continue;
+			}
+			if(Parameter[i2]=='('){
+				i4=GetStringInPare(temporary+i3,Parameter+i2);
+				i2+=i4-1;
+				i3+=i4-1;
+				continue;
+			}
+			if(Parameter[i2]=='['){
+				i4=GetStringInBracket(temporary+i3,Parameter+i2);
+				i2+=i4-1;
+				i3+=i4-1;
+				continue;
+			}
+			if(Parameter[i2]==','||Parameter[i2]==';'){
+				temporary[i3]=0;
+				break;
+			}
+			temporary[i3]=Parameter[i2];
+			if(Parameter[i2]=='\0') break;
+		}
+
+		if(temporary[0]=='\0') lstrcat(buffer,"\"\"");
+		else{
+			int iResult;
+			iResult=IsStrCalculation(temporary);
+			if(iResult==-1){
+				//エラー
+				lstrcat(buffer,"\"\"");
+			}
+			else if(iResult){
+				//文字列
+				lstrcat(buffer,temporary);
+			}
+			else{
+				//数値
+				sprintf(buffer+lstrlen(buffer),"Str$(%s)",temporary);
+			}
+		}
+
+		if(Parameter[i2]==','){
+			if(bWrite) lstrcat(buffer,"+\",\"+");
+			else lstrcat(buffer,"+\"\t\"+");
+		}
+		else if(Parameter[i2]==';'){
+			if(Parameter[i2+1]=='\0'){
+				sw=0;
+				break;
+			}
+			if(bWrite) lstrcat(buffer,"+\",\"+");
+			else lstrcat(buffer,"+\" \"+");
+		}
+		else if(Parameter[i2]=='\0') break;
+
+		i2++;
+	}
+
+	if(sw) lstrcat(buffer,"+Ex\"\\r\\n\"");
+
+	SUBINFO *psi;
+	if(bFile) psi=GetSubHash("PRINT_ToFile");
+	else psi=GetSubHash("PRINT_ToPrompt");
+	if(!psi){
+		SetError(3,"Print",cp);
+		return;
+	}
+	Opcode_CallProc(buffer,psi,0,0,"",0);
+}
+
+
+
+
+////////////
+// ポインタ
+
+void OpcodeCallPtr(char *Parameter){
+	extern HANDLE hHeap;
+	int i,i2,i3,num,types[255];
+	BOOL bCdecl;
+	char szFuncPtr[VN_SIZE],temporary[VN_SIZE],*Parms[255];
+
+	//関数ポインタを取得
+	i=GetOneParameter(Parameter,0,szFuncPtr);
+
+	if(lstrcmpi(szFuncPtr,"cdecl")==0){
+		//cdeclが指定された場合は、第2パラメータを関数ポインタとして扱う
+		bCdecl=1;
+
+		i=GetOneParameter(Parameter,i,szFuncPtr);
+	}
+	else bCdecl=0;
+
+	if(Parameter[0]=='\0'){
+		SetError(10,"CallPtr",cp);
+	}
+
+	num=0;
+	while(Parameter[i]){
+		i=GetOneParameter(Parameter,i,temporary);
+
+		types[num]=DEF_LONG;
+
+		for(i2=0;;i2++){
+			if(temporary[i2]=='\0') break;
+			if(temporary[i2]==1&&temporary[i2+1]==ESC_AS){
+				LONG_PTR lp;
+				types[num]=GetTypeFixed(temporary+i2+2,&lp);
+
+				if(types[num]==DEF_OBJECT){
+					SetError(11,temporary+i2+2,cp);
+				}
+
+				temporary[i2]=0;
+				break;
+			}
+		}
+
+		Parms[num]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+		lstrcpy(Parms[num],temporary);
+
+		num++;
+	}
+
+	int ParmSize=0;
+
+	for(i=num-1;i>=0;i--){
+		//スタックへプッシュ
+		i3=NumOpe(Parms[i],0,0,0);
+
+		switch(types[i]){
+			case DEF_INT64:
+			case DEF_QWORD:
+				ChangeTypeToInt64(i3);
+				break;
+			case DEF_SINGLE:
+				ChangeTypeToSingle(i3);
+				break;
+			case DEF_DOUBLE:
+				ChangeTypeToDouble(i3);
+				break;
+
+			default:
+				ChangeTypeToLong(i3);
+				break;
+		}
+
+		ParmSize+=GetTypeSize(types[i],0);
+
+		HeapDefaultFree(Parms[i]);
+	}
+
+	i3=NumOpe(szFuncPtr,0,0,0);
+	ChangeTypeToLong(i3);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//call eax
+	OpBuffer[obp++]=(char)0xFF;
+	OpBuffer[obp++]=(char)0xD0;
+
+	if(bCdecl){
+		//スタックを戻す
+
+		//add esp,ParmSize
+		op_add_esp(ParmSize);
+	}
+}
+
+void OpcodeSetPtrData(char *Parameter,int type){
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	if(Parameter[0]=='('){
+		i=JumpStringInPare(Parameter,1);
+		if(Parameter[i+1]=='\0'){
+			for(i=0;;i++){
+				Parameter[i]=Parameter[i+1];
+				if(Parameter[i]=='\0') break;
+			}
+			Parameter[i-1]=0;
+		}
+	}
+
+	//第１パラメータを取得
+	i=GetOneParameter(Parameter,0,temporary);
+	if(!Parameter[i]){
+		SetError(1,NULL,cp);
+		return;
+	}
+
+	i2=NumOpe(temporary,0,0,0);
+	ChangeTypeToLong(i2);
+
+	//第２パラメータを取得
+	i=GetOneParameter(Parameter,i,temporary);
+	if(Parameter[i]){
+		SetError(1,NULL,cp);
+		return;
+	}
+
+	i2=NumOpe(temporary,0,0,0);
+	if(type==DEF_DOUBLE){
+		ChangeTypeToDouble_ToFpuReg(i2);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//fstp qword ptr[eax]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x18;
+	}
+	else if(type==DEF_SINGLE){
+		ChangeTypeToSingle(i2);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//mov dword ptr[eax],ebx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x18;
+	}
+	else if(type==DEF_QWORD){
+		ChangeTypeToInt64(i2);
+
+		//pop ecx
+		op_pop(REG_ECX);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//mov dword ptr[eax],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x08;
+
+		//mov dword ptr[eax+sizeof(long)],ebx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x58;
+		OpBuffer[obp++]=(char)0x04;
+	}
+	else if(type==DEF_DWORD){
+		ChangeTypeToLong(i2);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//mov dword ptr[eax],ebx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x18;
+	}
+	else if(type==DEF_WORD){
+		ChangeTypeToLong(i2);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//mov word ptr[eax],bx
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x18;
+	}
+	else if(type==DEF_BYTE){
+		ChangeTypeToLong(i2);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//mov byte ptr[eax],bl
+		OpBuffer[obp++]=(char)0x88;
+		OpBuffer[obp++]=(char)0x18;
+	}
+}
Index: /BasicCompiler32/Compile_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Var.cpp	(revision 3)
+++ /BasicCompiler32/Compile_Var.cpp	(revision 3)
@@ -0,0 +1,1242 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+//変数
+VARIABLE *GlobalVar;
+int MaxGlobalVarNum;
+int AllGlobalVarSize;
+int AllInitGlobalVarSize;
+VARIABLE *LocalVar;
+int MaxLocalVarNum;
+int AllLocalVarSize;
+
+void SetRelativeOffset(int *pType,LONG_PTR lpIndex,RELATIVE_VAR *pRelativeVar,char *lpPtrOffset){
+	int i2;
+
+	PushLongVariable(pRelativeVar);
+
+	i2=NumOpe(lpPtrOffset,0,0,0);
+	ChangeTypeToLong(i2);
+
+	//pop ebx
+	op_pop(REG_EBX);
+
+	if(PTR_LEVEL(*pType)){
+		*pType=MAKE_PTR_TYPE(NATURAL_TYPE(*pType),PTR_LEVEL(*pType)-1);
+		if((*pType)==DEF_OBJECT){
+			//imul ebx,objsize
+			OpBuffer[obp++]=(char)0x69;
+			OpBuffer[obp++]=(char)0xDB;
+			*((long *)(OpBuffer+obp))=GetSizeOfClassMember((CClass *)lpIndex,NULL,NULL);
+			obp+=sizeof(long);
+		}
+		else{
+			i2=GetTypeSize(*pType,-1);
+			if(i2>=2){
+				//imul ebx,i2
+				OpBuffer[obp++]=(char)0x6B;
+				OpBuffer[obp++]=(char)0xDB;
+				OpBuffer[obp++]=(char)i2;
+			}
+		}
+	}
+	else{
+		//エラー
+		SetError(1,NULL,cp);
+		return;
+	}
+
+	//pop ecx
+	op_pop(REG_ECX);
+
+	//add ecx,ebx
+	OpBuffer[obp++]=(char)0x03;
+	OpBuffer[obp++]=(char)0xCB;
+}
+BOOL GetArrayOffset(int *SubScripts,char *array,int type,LONG_PTR lpIndex){
+	extern HANDLE hHeap;
+	int i,i2,i3,i4,TypeSize;
+	char temporary[VN_SIZE],*pParm[MAX_PARMS];
+
+	for(i=0,i2=0,i3=0;;i++,i2++){
+		if(array[i]=='('){
+			i4=GetStringInPare(temporary+i2,array+i);
+			i+=i4-1;
+			i2+=i4-1;
+			continue;
+		}
+		if(array[i]=='['){
+			i4=GetStringInBracket(temporary+i2,array+i);
+			i+=i4-1;
+			i2+=i4-1;
+			continue;
+		}
+		if(array[i]==','||array[i]=='\0'){
+			if(SubScripts[i3]==-1){
+				for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
+				return 0;
+			}
+
+			temporary[i2]=0;
+
+			pParm[i3]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(pParm[i3],temporary);
+
+			i3++;
+
+			if(array[i]=='\0'){
+				if(SubScripts[i3]!=-1){
+					for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
+					return 0;
+				}
+				break;
+			}
+
+			i2=-1;
+			continue;
+		}
+		temporary[i2]=array[i];
+	}
+
+	//push ecx
+	op_push(REG_ECX);
+
+	//push 0
+	op_push_value(0);
+
+	for(i=i3-1;i>=0;i--){
+		TYPEINFO TypeInfo;
+		BOOL bUseHeap;
+		TypeInfo.type=NumOpe(pParm[i],DEF_LONG,-1,&TypeInfo.u.lpIndex,&bUseHeap);
+		if(TypeInfo.type==DEF_OBJECT){
+			//キャスト演算子のオーバーロードに対応する
+			CallCastOperatorProc(
+				TypeInfo.type,TypeInfo.u.lpIndex,
+				bUseHeap,DEF_LONG,-1);
+			TypeInfo.type=DEF_LONG;
+		}
+		ChangeTypeToLong(TypeInfo.type);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		for(i2=i+1,i4=1;i2<i3;i2++) i4*=SubScripts[i2]+1;
+
+		//imul eax,i4
+		OpBuffer[obp++]=(char)0x69;
+		OpBuffer[obp++]=(char)0xC0;
+		*((long *)(OpBuffer+obp))=i4;
+		obp+=sizeof(long);
+
+		//add dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x01;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		HeapDefaultFree(pParm[i]);
+	}
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	TypeSize=GetTypeSize(type,lpIndex);
+
+	//imul eax,TypeSize
+	OpBuffer[obp++]=(char)0x69;
+	OpBuffer[obp++]=(char)0xC0;
+	*((long *)(OpBuffer+obp))=TypeSize;
+	obp+=sizeof(long);
+
+	//pop ecx
+	op_pop(REG_ECX);
+
+	//add ecx,eax
+	OpBuffer[obp++]=(char)0x03;
+	OpBuffer[obp++]=(char)0xC8;
+
+	return 1;
+}
+BOOL GetMemberOffset(BOOL bError,CClass *pobj_c,char *member,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpNestIndex,BOOL bPrivateAccess){
+	int i,offset;
+
+	//クラス、配列の構成要素を解析する
+	char VarName[VN_SIZE];		//変数名
+	char array[VN_SIZE];		//第1次配列
+	char lpPtrOffset[VN_SIZE];	//第2次配列
+	char NestMember[VN_SIZE];	//入れ子メンバ
+	int RefType;				//"."参照のときは0、"->"参照のときは1
+	lstrcpy(VarName,member);
+	if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)) return 0;
+
+	////////////////////////////
+	// メンバオフセットを取得
+	////////////////////////////
+
+	offset=GetSizeOfClassMember(pobj_c,VarName,&i);
+	if(i==pobj_c->iMemberNum){
+		if(bError) SetError(103,VarName,cp);
+		return 0;
+	}
+
+	//アクセシビリティをチェック
+	if(pobj_c==pobj_CompilingClass){
+		//同一クラスオブジェクトの場合はプライベートアクセスを容認する
+		if(pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
+			if(bError) SetError(107,VarName,cp);
+			return 0;
+		}
+	}
+	else{
+		if((bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
+			pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
+			if(bError) SetError(107,VarName,cp);
+			return 0;
+		}
+		else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED){
+			if(bError) SetError(108,VarName,cp);
+			return 0;
+		}
+	}
+
+	*pType=pobj_c->ppobj_Member[i]->TypeInfo.type;
+	*plpNestIndex=pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex;
+
+	//ポインタ変数の場合
+	if(IsPtrType(*pType)){
+		if(pobj_c->ppobj_Member[i]->SubScripts[0]==-1){
+			lstrcpy(lpPtrOffset,array);
+			array[0]=0;
+		}
+	}
+	else{
+		if(lpPtrOffset[0]){
+			if(bError) SetError(16,member,cp);
+			return 0;
+		}
+	}
+
+	if(offset){
+		//add ecx,offset
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)0xC1;
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+
+	if(array[0]){
+		//配列オフセット
+		if(!GetArrayOffset(pobj_c->ppobj_Member[i]->SubScripts,array,*pType,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex))
+			if(bError) SetError(14,member,cp);
+	}
+	else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
+		*pType|=FLAG_PTR;
+	}
+
+	if(NestMember[0]){
+		//入れ子構造の場合
+
+		if(*pType==DEF_OBJECT){
+			if(RefType!=DEF_OBJECT){
+				if(bError) SetError(104,member,cp);
+				return 0;
+			}
+		}
+		else if(*pType==DEF_PTR_OBJECT){
+			//構造体ポインタ型メンバ変数
+
+			if(lpPtrOffset[0]){
+				//pObj[n].member
+				if(RefType!=DEF_OBJECT){
+					if(bError) SetError(104,member,cp);
+					return 0;
+				}
+
+				//直接参照に切り替え
+				SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				lpPtrOffset[0]=0;
+			}
+			else{
+				//pObj->member
+				if(RefType!=DEF_PTR_OBJECT){
+					if(bError) SetError(104,member,cp);
+					return 0;
+				}
+
+				if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+					//mov ecx,dword ptr[ecx]
+					OpBuffer[obp++]=(char)0x8B;
+					OpBuffer[obp++]=(char)0x09;
+				}
+				else{
+					//直接参照に切り替え
+					SetVarPtrToEax(pRelativeVar);
+					pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+					//mov ecx,dword ptr[eax]
+					OpBuffer[obp++]=(char)0x8B;
+					OpBuffer[obp++]=(char)0x08;
+				}
+			}
+		}
+		else if(*pType==MAKE_PTR_TYPE(DEF_OBJECT,2)){
+			//構造体ポインタのポインタ型メンバ変数
+
+			if(lpPtrOffset[0]){
+				//ppObj[n]->member
+				if(RefType!=DEF_PTR_OBJECT){
+					if(bError) SetError(104,member,cp);
+					return 0;
+				}
+
+				//直接参照に切り替え
+				SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				lpPtrOffset[0]=0;
+
+				//mov ecx,dword ptr[ecx]
+				OpBuffer[obp++]=(char)0x8B;
+				OpBuffer[obp++]=(char)0x09;
+			}
+			else{
+				if(bError) SetError(104,member,cp);
+				return 0;
+			}
+		}
+
+		if(!GetMemberOffset(bError,pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
+			NestMember,
+			pType,
+			pRelativeVar,
+			plpNestIndex,
+			0)) return 0;
+	}
+
+	if(lpPtrOffset[0]){
+		SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+		pRelativeVar->dwKind=VAR_DIRECTMEM;
+	}
+
+	return 1;
+}
+void GetWithName(char *buffer){
+	extern WITHINFO WithInfo;
+	int i;
+
+	buffer[0]=0;
+	for(i=0;i<WithInfo.num;i++)
+		lstrcat(buffer,WithInfo.ppName[i]);
+}
+
+int LocalVar_ThisPtrOffset;
+void SetThisPtrToReg(int reg){
+	//自身のオブジェクトのThisポインタをregにコピー
+
+	extern VARIABLE *LocalVar;
+	RELATIVE_VAR RelativeVar;
+	RelativeVar.dwKind=VAR_LOCAL;
+	RelativeVar.bOffsetOffset=0;
+	RelativeVar.offset=-LocalVar_ThisPtrOffset;
+
+	SetReg_WholeVariable(DEF_PTR_VOID,&RelativeVar,reg);
+}
+
+BOOL GetVarOffset(BOOL bError,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
+	extern BOOL bCompilingGlobal;
+	int i,RefType;
+	char variable[VN_SIZE],member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+
+	if(NameBuffer[0]=='.'){
+		GetWithName(variable);
+		lstrcat(variable,NameBuffer);
+	}
+	else lstrcpy(variable,NameBuffer);
+
+	lstrcpy(VarName,variable);
+	GetVarFormatString(VarName,array,lpPtrOffset,member,&RefType);
+
+	LONG_PTR lpIndex;
+	int *pSubScripts;
+
+	if(bCompilingGlobal==0){
+		////////////////////
+		// ローカル変数
+		////////////////////
+
+		for(i=MaxLocalVarNum-1;i>=0;i--){	//レキシカルスコープを考慮してバックサーチ
+			if(LocalVar[i].bLiving){
+				if(lstrcmp(VarName,LocalVar[i].name)==0) break;
+			}
+		}
+		if(i>=0){
+			//ポインタ変数の場合
+			if(IsPtrType(LocalVar[i].type)){
+				if(LocalVar[i].SubScripts[0]==-1){
+					lstrcpy(lpPtrOffset,array);
+					array[0]=0;
+				}
+			}
+			else{
+				if(lpPtrOffset[0]){
+					SetError(16,variable,cp);
+					pRelativeVar->dwKind=NON_VAR;
+					return 0;
+				}
+			}
+
+			pRelativeVar->offset=-LocalVar[i].offset;
+			pRelativeVar->bOffsetOffset=0;
+			if(LocalVar[i].fRef) pRelativeVar->dwKind=VAR_REFLOCAL;
+			else pRelativeVar->dwKind=VAR_LOCAL;
+			*pType=LocalVar[i].type;
+			lpIndex=LocalVar[i].u.index;
+			if(plpIndex) *plpIndex=lpIndex;
+			pSubScripts=LocalVar[i].SubScripts;
+
+			goto ok;
+		}
+	}
+
+	if(pobj_CompilingClass){
+		//////////////////////
+		// クラスメンバの参照
+		//////////////////////
+
+		if(lstrcmpi(variable,"This")==0){
+			//Thisオブジェクト
+
+			//Thisポインタをecxにコピー
+			SetThisPtrToReg(REG_ECX);
+
+			*pType=DEF_OBJECT;
+			pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+			if(plpIndex) *plpIndex=(LONG_PTR)pobj_CompilingClass;
+			return 1;
+		}
+
+		if(_memicmp(variable,"This.",5)==0){
+			//Thisオブジェクトのメンバを参照するとき
+			SlideString(variable+5,-5);
+			lstrcpy(VarName,variable);
+		}
+		else{
+			//クラス内メンバを参照するとき（通常）
+
+			for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
+				if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
+			}
+			if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
+		}
+
+		/////////////////////////////
+		// thisポインタをecxにセット
+
+		//Thisポインタをecxにコピー
+		SetThisPtrToReg(REG_ECX);
+
+		pRelativeVar->dwKind=VAR_DIRECTMEM;
+		if(!GetMemberOffset(bError,pobj_CompilingClass,variable,pType,pRelativeVar,&lpIndex,1)) return 0;
+		if(plpIndex) *plpIndex=lpIndex;
+		return 1;
+	}
+
+NonClassMember:
+
+	//////////////////////////
+	// 静的ローカル変数
+	// ※"Static.Object.Method.Variable"
+	//////////////////////////
+
+	char temporary[VN_SIZE];
+	extern SUBINFO *pCompilingSubInfo;
+	if(pCompilingSubInfo){
+		GetNowStaticVarFullName(VarName,temporary);
+
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(lstrcmp(temporary,GlobalVar[i].name)==0) break;
+		}
+		if(i!=MaxGlobalVarNum){
+			goto GlobalOk;
+		}
+	}
+
+
+	////////////////////
+	// グローバル変数
+	////////////////////
+
+	for(i=MaxGlobalVarNum-1;i>=0;i--){	//レキシカルスコープを考慮してバックサーチ
+		if(GlobalVar[i].bLiving){
+			if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
+		}
+	}
+	if(i>=0){
+		goto GlobalOk;
+	}
+
+
+	//////////////////////////
+	// クラスの静的メンバ
+	//////////////////////////
+
+	if(member[0]){
+		lstrcpy(temporary,member);
+		GetVarFormatString(temporary,array,lpPtrOffset,member,&i);
+
+		char temp2[VN_SIZE];
+		sprintf(temp2,"%s.%s",VarName,temporary);
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(lstrcmp(temp2,GlobalVar[i].name)==0) break;
+		}
+
+		if(i!=MaxGlobalVarNum){
+			goto GlobalOk;
+		}
+	}
+
+	if(pobj_CompilingClass){
+		//自身のクラスから静的メンバを参照する場合
+		char temp2[VN_SIZE];
+		sprintf(temp2,"%s.%s",pobj_CompilingClass->name,VarName);
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(lstrcmp(temp2,GlobalVar[i].name)==0) break;
+		}
+
+		if(i!=MaxGlobalVarNum){
+			goto GlobalOk;
+		}
+	}
+
+	if(bError) SetError(3,variable,cp);
+	pRelativeVar->dwKind=NON_VAR;
+	return 0;
+
+
+GlobalOk:
+
+	//ポインタ変数の場合
+	if(IsPtrType(GlobalVar[i].type)){
+		if(GlobalVar[i].SubScripts[0]==-1){
+			lstrcpy(lpPtrOffset,array);
+			array[0]=0;
+		}
+	}
+	else{
+		if(lpPtrOffset[0]){
+			SetError(16,variable,cp);
+			pRelativeVar->dwKind=NON_VAR;
+			return 0;
+		}
+	}
+
+	pRelativeVar->offset=GlobalVar[i].offset;
+	pRelativeVar->bOffsetOffset=0;
+	pRelativeVar->dwKind=VAR_GLOBAL;
+	*pType=GlobalVar[i].type;
+	lpIndex=GlobalVar[i].u.index;
+	if(plpIndex) *plpIndex=lpIndex;
+	pSubScripts=GlobalVar[i].SubScripts;
+
+
+ok:
+
+
+	if(array[0]==0&&pSubScripts[0]!=-1){
+		//配列の先頭ポインタを示す場合
+		*pType|=FLAG_PTR;
+		if(pss) memcpy(pss,pSubScripts,MAX_ARRAYDIM);
+		return 1;
+	}
+
+	if(array[0]||member[0]){
+		//xor ecx,ecx（ecxを0に初期化する）
+		//※ecxは変数ベースアドレスからの相対オフセットを示す
+		op_zero_reg(REG_ECX);
+
+		pRelativeVar->bOffsetOffset=1;
+	}
+	if(array[0]){
+		if(!GetArrayOffset(pSubScripts,array,*pType,lpIndex)){
+			SetError(14,variable,cp);
+			pRelativeVar->dwKind=NON_VAR;
+			return 0;
+		}
+	}
+	if(member[0]){
+		if(*pType==DEF_OBJECT){
+			//実態オブジェクトのメンバを参照（obj.member）
+			if(RefType!=DEF_OBJECT){
+				SetError(104,VarName,cp);
+				pRelativeVar->dwKind=NON_VAR;
+				return 0;
+			}
+
+			LONG_PTR lp2;
+			if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
+			if(plpIndex) *plpIndex=lp2;
+		}
+		else if(*pType==DEF_PTR_OBJECT){
+			//ポインタオブジェクトが示すメンバを参照
+			if(lpPtrOffset[0]){
+				//pObj[n].member
+				if(RefType!=DEF_OBJECT){
+					SetError(104,VarName,cp);
+					pRelativeVar->dwKind=NON_VAR;
+					return 0;
+				}
+				SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				LONG_PTR lp2;
+				if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
+				if(plpIndex) *plpIndex=lp2;
+			}
+			else{
+				//pObj->member
+				if(RefType!=DEF_PTR_OBJECT){
+					SetError(104,VarName,cp);
+					pRelativeVar->dwKind=NON_VAR;
+					return 0;
+				}
+
+				SetVarPtrToEax(pRelativeVar);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				//mov ecx,dword ptr[eax]
+				OpBuffer[obp++]=(char)0x8B;
+				OpBuffer[obp++]=(char)0x08;
+
+				LONG_PTR lp2;
+				if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
+				if(plpIndex) *plpIndex=lp2;
+			}
+		}
+		else if(*pType==MAKE_PTR_TYPE(DEF_OBJECT,2)){
+			//ポインタオブジェクトが示すメンバを参照
+			if(lpPtrOffset[0]){
+				//ppObj[n]->member
+				if(RefType!=DEF_PTR_OBJECT){
+					SetError(104,VarName,cp);
+					pRelativeVar->dwKind=NON_VAR;
+					return 0;
+				}
+
+				SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+
+				SetVarPtrToEax(pRelativeVar);
+
+				//mov ecx,dword ptr[eax]
+				OpBuffer[obp++]=(char)0x8B;
+				OpBuffer[obp++]=(char)0x08;
+
+				LONG_PTR lp2;
+				if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
+				if(plpIndex) *plpIndex=lp2;
+			}
+			else{
+				SetError(104,VarName,cp);
+				pRelativeVar->dwKind=NON_VAR;
+				return 0;
+			}
+		}
+		else{
+			SetError(102,VarName,cp);
+			pRelativeVar->dwKind=NON_VAR;
+			return 0;
+		}
+		return 1;
+	}
+
+	if(lpPtrOffset[0]){
+		SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
+		pRelativeVar->dwKind=VAR_DIRECTMEM;
+	}
+
+	return 1;
+}
+
+BOOL SetInitGlobalData(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf){
+	extern BYTE *initGlobalBuf;
+	int i,i2,i3,TypeSize;
+	char temporary[VN_SIZE];
+
+	if(InitBuf[0]=='['){
+		SlideString(InitBuf+1,-1);
+		InitBuf[lstrlen(InitBuf)-1]=0;
+
+		TypeSize=GetTypeSize(type,lpIndex);
+
+		if(SubScripts[0]!=-1){
+			TypeSize*=JumpSubScripts(SubScripts+1);
+			i=0;
+			i2=0;
+			while(1){
+				if(SubScripts[0]<i2){
+					SetError(41,0,cp);
+					return 0;
+				}
+				i=GetOneParameter(InitBuf,i,temporary);
+				if(!SetInitGlobalData(
+					offset+i2*TypeSize,
+					type,
+					lpIndex,
+					SubScripts+1,
+					temporary)) return 0;
+				i2++;
+				if(InitBuf[i]=='\0') break;
+			}
+			return -1;
+		}
+
+		if(type==DEF_OBJECT){
+			CClass *pobj_c;
+			pobj_c=(CClass *)lpIndex;
+
+			for(i=0,i2=0;i2<pobj_c->iMemberNum;i2++){
+				i=GetOneParameter(InitBuf,i,temporary);
+
+				i3=GetSizeOfClassMember(pobj_c,pobj_c->ppobj_Member[i2]->name,NULL);
+
+				if(!SetInitGlobalData(offset+i3,
+					pobj_c->ppobj_Member[i2]->TypeInfo.type,
+					pobj_c->ppobj_Member[i2]->TypeInfo.u.lpIndex,
+					pobj_c->ppobj_Member[i2]->SubScripts,
+					temporary)) return 0;
+
+				if(InitBuf[i]=='\0') break;
+			}
+			if(i2+1!=pobj_c->iMemberNum){
+				SetError(41,0,cp);
+				return 0;
+			}
+			return 1;
+		}
+
+		SetError(41,0,cp);
+		return 0;
+	}
+
+	if(SubScripts[0]!=-1){
+		SetError(41,0,cp);
+		return 0;
+	}
+
+	double dbl;
+	_int64 i64data;
+	int CalcType;
+	LONG_PTR lpCalcIndex;
+	CalcType=StaticCalculation(true, InitBuf,type,&i64data,&lpCalcIndex);
+	if(IsRealNumberType(CalcType)){
+		memcpy(&dbl,&i64data,sizeof(double));
+		i64data=(_int64)dbl;
+	}
+	else dbl=(double)i64data;
+
+	//型チェック
+	CheckDifferentType(
+		type,
+		lpIndex,
+		CalcType,
+		lpCalcIndex,
+		0,0);
+
+	if(type==DEF_DOUBLE)
+		*(double *)(initGlobalBuf+offset)=(double)dbl;
+	else if(type==DEF_SINGLE)
+		*(float *)(initGlobalBuf+offset)=(float)dbl;
+	else if(type==DEF_INT64||type==DEF_QWORD)
+		*(_int64 *)(initGlobalBuf+offset)=i64data;
+	else if(type==DEF_LONG||type==DEF_DWORD||IsPtrType(type)){
+		if(type==DEF_PTR_BYTE&&lpCalcIndex==LITERAL_STRING){
+			//文字列定数のとき
+
+			char *temp;
+			temp=(char *)i64data;
+			i2=AddDataTable(temp,lstrlen(temp));
+			HeapDefaultFree(temp);
+
+			//mov eax,DataPos
+			OpBuffer[obp++]=(char)0xB8;
+			*((long *)(OpBuffer+obp))=(long)i2;
+			pobj_DataTableSchedule->add();
+			obp+=sizeof(long);
+
+			//mov dword ptr[offset],eax
+			OpBuffer[obp++]=(char)0xA3;
+			*((long *)(OpBuffer+obp))=offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			*(DWORD *)(initGlobalBuf+offset)=(DWORD)i64data;
+		}
+	}
+	else if(type==DEF_INTEGER||type==DEF_WORD)
+		*(WORD *)(initGlobalBuf+offset)=(WORD)i64data;
+	else if(type==DEF_CHAR||type==DEF_BYTE)
+		*(BYTE *)(initGlobalBuf+offset)=(BYTE)i64data;
+	//String型が未完成
+	return 1;
+}
+BOOL InitLocalVar(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf){
+	int i,i2,i3,TypeSize;
+	char temporary[VN_SIZE];
+
+	if(InitBuf[0]=='['){
+		SlideString(InitBuf+1,-1);
+		InitBuf[lstrlen(InitBuf)-1]=0;
+
+		TypeSize=GetTypeSize(type,lpIndex);
+
+		if(SubScripts[0]!=-1){
+			TypeSize*=JumpSubScripts(SubScripts+1);
+			i=0;
+			i2=0;
+			while(1){
+				if(SubScripts[0]<i2){
+					SetError(41,0,cp);
+					return 0;
+				}
+				i=GetOneParameter(InitBuf,i,temporary);
+				if(!InitLocalVar(
+					offset+i2*TypeSize,
+					type,
+					lpIndex,
+					SubScripts+1,
+					temporary)) return 0;
+				i2++;
+				if(InitBuf[i]=='\0') break;
+			}
+			return -1;
+		}
+
+		if(type==DEF_OBJECT){
+			CClass *pobj_c;
+			pobj_c=(CClass *)lpIndex;
+
+			for(i=0,i2=0;i2<pobj_c->iMemberNum;i2++){
+				i=GetOneParameter(InitBuf,i,temporary);
+
+				i3=GetSizeOfClassMember(pobj_c,pobj_c->ppobj_Member[i2]->name,NULL);
+
+				if(!InitLocalVar(offset+i3,
+					pobj_c->ppobj_Member[i2]->TypeInfo.type,
+					pobj_c->ppobj_Member[i2]->TypeInfo.u.lpIndex,
+					pobj_c->ppobj_Member[i2]->SubScripts,
+					temporary)) return 0;
+
+				if(InitBuf[i]=='\0') break;
+			}
+			if(i2+1!=pobj_c->iMemberNum){
+				SetError(41,0,cp);
+				return 0;
+			}
+			return 1;
+		}
+
+		SetError(41,0,cp);
+		return 0;
+	}
+
+	if(SubScripts[0]!=-1){
+		SetError(41,0,cp);
+		return 0;
+	}
+
+	double dbl;
+	_int64 i64data;
+	int CalcType;
+	LONG_PTR lpCalcIndex;
+	CalcType=StaticCalculation(true, InitBuf,type,&i64data,&lpCalcIndex);
+	if(IsRealNumberType(CalcType)){
+		memcpy(&dbl,&i64data,sizeof(double));
+		i64data=(_int64)dbl;
+	}
+	else dbl=(double)i64data;
+
+	//型チェック
+	CheckDifferentType(
+		type,
+		lpIndex,
+		CalcType,
+		lpCalcIndex,
+		0,0);
+
+	if(type==DEF_DOUBLE){
+		//mov eax,HILONG(dbl)
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=(long)*(long *)(((char *)(&dbl))+4);
+		obp+=sizeof(long);
+
+		//mov dword ptr[ebp+offset+sizeof(long)],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset+sizeof(long);
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		//mov eax,LOLONG(dbl)
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=*(long *)(&dbl);
+		obp+=sizeof(long);
+
+		//mov dword ptr[ebp+offset],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+	}
+	else if(type==DEF_SINGLE){
+		float flt;
+		flt=(float)dbl;
+		//mov eax,InitValue
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=*(long *)&flt;
+		obp+=sizeof(long);
+
+		//mov dword ptr[ebp+offset],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+	}
+	else if(type==DEF_INT64||type==DEF_QWORD){
+		//mov eax,HILONG(i64data)
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=(long)*(long *)(((char *)(&i64data))+4);
+		obp+=sizeof(long);
+
+		//mov dword ptr[ebp+offset+sizeof(long)],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset+sizeof(long);
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+
+		//mov eax,LOLONG(i64data)
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=*(long *)(&i64data);
+		obp+=sizeof(long);
+
+		//mov dword ptr[ebp+offset],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+	}
+	else if(type==DEF_LONG||type==DEF_DWORD||IsPtrType(type)){
+		if(type==DEF_PTR_BYTE&&lpCalcIndex==LITERAL_STRING){
+			//文字列定数のとき
+
+			char *temp;
+			temp=(char *)i64data;
+			i2=AddDataTable(temp,lstrlen(temp));
+			HeapDefaultFree(temp);
+
+			//mov eax,DataPos
+			OpBuffer[obp++]=(char)0xB8;
+			*((long *)(OpBuffer+obp))=(long)i2;
+			pobj_DataTableSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov eax,InitValue
+			OpBuffer[obp++]=(char)0xB8;
+			*((long *)(OpBuffer+obp))=(long)i64data;
+			obp+=sizeof(long);
+		}
+
+		//mov dword ptr[ebp+offset],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+	}
+	else if(type==DEF_INTEGER||type==DEF_WORD){
+		//mov ax,InitValue
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0xB8;
+		*((WORD *)(OpBuffer+obp))=(WORD)i64data;
+		obp+=sizeof(WORD);
+
+		//mov word ptr[ebp+offset],ax
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+	}
+	else if(type==DEF_CHAR||type==DEF_BYTE){
+		//mov byte ptr[ebp+offset],InitValue
+		OpBuffer[obp++]=(char)0xC6;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=offset;
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+		*((BYTE *)(OpBuffer+obp))=(BYTE)i64data;
+		obp+=sizeof(BYTE);
+	}
+	//String型が未完成
+	return 1;
+}
+
+void dim(char *Parameter,DWORD dwFlag){
+	extern BOOL bCompilingGlobal;
+	extern HANDLE hHeap;
+	int i2,i3,VarSize;
+
+	//構文を解析
+	char VarName[VN_SIZE];
+	int SubScripts[MAX_ARRAYDIM];
+	TYPEINFO TypeInfo;
+	char InitBuf[8192];
+	char ConstractParameter[VN_SIZE];
+	if(!GetDimentionFormat(Parameter,VarName,SubScripts,&TypeInfo,InitBuf,ConstractParameter))
+		return;
+
+	//タイプサイズを取得
+	int TypeSize;
+	TypeSize=GetTypeSize(TypeInfo.type,TypeInfo.u.lpIndex);
+
+	//定数と２重定義されていないかを調べる
+	if(GetConstHash(VarName)){
+		SetError(15,VarName,cp);
+		return;
+	}
+
+	if(dwFlag&DIMFLAG_STATIC){
+		if(bCompilingGlobal){
+			SetError(60,NULL,cp);
+			return;
+		}
+
+		/////////////////////
+		// Static変数
+		// ※"Static.Object.Method.Variable"
+		/////////////////////
+
+		char temporary[VN_SIZE];
+		GetNowStaticVarFullName(VarName,temporary);
+
+		AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
+
+		/*
+		Note: 静的変数のコンストラクタ呼び出しは
+			_System_InitStaticLocalVariables関数内で一括して行う
+		*/
+	}
+	else{
+		if(bCompilingGlobal){
+			/////////////////////////
+			// グローバル変数
+			/////////////////////////
+
+			AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
+		}
+		else{
+			/////////////////
+			// ローカル変数
+			/////////////////
+
+			for(i2=0;i2<MaxLocalVarNum;i2++){
+				if(LocalVar[i2].bLiving&&obj_LexScopes.GetNowLevel()==LocalVar[i2].ScopeLevel){
+					if(lstrcmp(LocalVar[i2].name,VarName)==0){
+						//２重定義のエラー
+						SetError(15,VarName,cp);
+						return;
+					}
+				}
+			}
+
+			LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE));
+
+			for(i2=1,i3=0;i3<255;i3++){
+				//配列要素数
+				LocalVar[MaxLocalVarNum].SubScripts[i3]=SubScripts[i3];
+
+				if(SubScripts[i3]==-1) break;
+				i2*=SubScripts[i3]+1;
+			}
+			VarSize=TypeSize*i2;
+			if(VarSize%4) VarSize+=4-(VarSize%4);
+
+			//変数データを追加
+			lstrcpy(LocalVar[MaxLocalVarNum].name,VarName);
+			LocalVar[MaxLocalVarNum].fRef=0;
+			if(SubScripts[0]==-1) LocalVar[MaxLocalVarNum].bArray=0;
+			else LocalVar[MaxLocalVarNum].bArray=1;
+			LocalVar[MaxLocalVarNum].type=TypeInfo.type;
+			LocalVar[MaxLocalVarNum].u.index=TypeInfo.u.lpIndex;
+			AllLocalVarSize+=VarSize;
+			LocalVar[MaxLocalVarNum].offset=AllLocalVarSize;
+
+			//レキシカルスコープ
+			LocalVar[MaxLocalVarNum].ScopeLevel=obj_LexScopes.GetNowLevel();
+			LocalVar[MaxLocalVarNum].ScopeStartAddress=obj_LexScopes.GetStartAddress();
+			LocalVar[MaxLocalVarNum].bLiving=TRUE;
+
+			if(InitBuf[0]){
+				InitLocalVar(-LocalVar[MaxLocalVarNum].offset,
+					LocalVar[MaxLocalVarNum].type,
+					LocalVar[MaxLocalVarNum].u.index,
+					LocalVar[MaxLocalVarNum].SubScripts,
+					InitBuf);
+			}
+			else{
+				//push 0
+				op_push_value(0);
+
+				//push VarSize
+				op_push_value(VarSize);
+
+				//mov eax,ebp
+				OpBuffer[obp++]=(char)0x8B;
+				OpBuffer[obp++]=(char)0xC5;
+
+				//add eax,offset
+				OpBuffer[obp++]=(char)0x05;
+				*((long *)(OpBuffer+obp))=-LocalVar[MaxLocalVarNum].offset;
+				AddLocalVarAddrSchedule();
+				obp+=sizeof(long);
+
+				//push eax
+				op_push(REG_EAX);
+
+				//call FillMemory
+				OpBuffer[obp++]=(char)0xFF;
+				OpBuffer[obp++]=(char)0x15;
+				DECLAREINFO *pdi;
+				pdi=GetDeclareHash("FillMemory");
+				pdi->bUse=1;
+				pobj_ImportAddrSchedule->add(pdi);
+				obp+=sizeof(long);
+			}
+
+			MaxLocalVarNum++;
+		}
+
+		//コンストラクタ呼び出し
+		if(TypeInfo.type==DEF_OBJECT&&(dwFlag&DIMFLAG_NONCALL_CONSTRACTOR)==0){
+			CallConstractor(VarName,SubScripts,TypeInfo,ConstractParameter);
+		}
+	}
+
+	if(TypeInfo.type==DEF_OBJECT){
+		if(TypeInfo.u.pobj_Class->IsHoldAbstractFunction()){
+			//抽象クラスだったとき
+			SetError(125,TypeInfo.u.pobj_Class->name,cp);
+		}
+	}
+}
+void OpcodeDim(char *Parameter,DWORD dwFlag){
+	int i,i2,i3,IsStr=0;
+	char temporary[8192];
+
+	for(i=0,i2=0;;i++,i2++){
+		if(Parameter[i]=='\"') IsStr^=1;
+		if(Parameter[i]=='('&&IsStr==0){
+			i3=GetStringInPare(temporary+i2,Parameter+i);
+			i+=i3-1;
+			i2+=i3-1;
+			continue;
+		}
+		if(Parameter[i]=='['&&IsStr==0){
+			i3=GetStringInBracket(temporary+i2,Parameter+i);
+			i+=i3-1;
+			i2+=i3-1;
+			continue;
+		}
+		if((Parameter[i]==','&&IsStr==0)||
+			Parameter[i]=='\0'){
+			temporary[i2]=0;
+
+			dim(temporary,dwFlag);
+
+			if(Parameter[i]=='\0') break;
+			i2=-1;
+			continue;
+		}
+		temporary[i2]=Parameter[i];
+	}
+}
+
+void SetVarPtrToEax(RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//lea eax,dword ptr[ecx+offset]
+			OpBuffer[obp++]=(char)0x8D;
+			OpBuffer[obp++]=(char)0x81;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov eax,offset
+			OpBuffer[obp++]=(char)0xB8;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,offset
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC1;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//lea eax,dword ptr[ebp+ecx]
+			OpBuffer[obp++]=(char)0x8D;
+			OpBuffer[obp++]=(char)0x44;
+			OpBuffer[obp++]=(char)0x0D;
+			OpBuffer[obp++]=(char)0x00;
+		}
+		else{
+			//lea eax,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8D;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//mov eax,ecx
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0xC1;
+
+			//add eax,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov eax,dword ptr[ebp+offset]
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0x85;
+			*((long *)(OpBuffer+obp))=pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		//mov eax,ecx
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0xC1;
+	}
+}
Index: /BasicCompiler32/FunctionValue.h
===================================================================
--- /BasicCompiler32/FunctionValue.h	(revision 3)
+++ /BasicCompiler32/FunctionValue.h	(revision 3)
@@ -0,0 +1,23 @@
+/* 関数定数 */
+
+//データ型変換
+#define FUNC_CUDBL	0x0210
+#define FUNC_FIX	0x0211
+
+//文字列
+#define FUNC_LEN	0x031D
+
+//メモリ操作
+#define FUNC_VARPTR		0x0591
+
+//その他
+#define FUNC_ADDRESSOF	0x0619
+#define FUNC_SIZEOF		0x0620
+
+//ポインタ
+#define FUNC_GETDOUBLE	0x0630
+#define FUNC_GETSINGLE	0x0631
+#define FUNC_GETQWORD	0x0632
+#define FUNC_GETDWORD	0x0633
+#define FUNC_GETWORD	0x0634
+#define FUNC_GETBYTE	0x0635
Index: /BasicCompiler32/LoopCheck.cpp
===================================================================
--- /BasicCompiler32/LoopCheck.cpp	(revision 3)
+++ /BasicCompiler32/LoopCheck.cpp	(revision 3)
@@ -0,0 +1,5 @@
+/////////////////////////////////////////////////////
+// 循環参照をチェックするためのクラスモジュール
+/////////////////////////////////////////////////////
+
+
Index: /BasicCompiler32/MakePeHdr.cpp
===================================================================
--- /BasicCompiler32/MakePeHdr.cpp	(revision 3)
+++ /BasicCompiler32/MakePeHdr.cpp	(revision 3)
@@ -0,0 +1,1670 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+extern int GlobalOpBufferSize;
+
+
+////////////////////////////
+// 特殊関数の構造体ポインタ
+////////////////////////////
+SUBINFO
+	*pSub_System_StartupProgram,
+	*pSub_DebugSys_StartProc,
+	*pSub_DebugSys_EndProc,
+	*pSub_DebugSys_SaveContext,
+	*pSub_System_GetEip,
+	*pSub_System_InitDllGlobalVariables,
+	*pSub_System_InitStaticLocalVariables,
+	*pSub_System_Call_Destructor_of_GlobalObject,
+	*pSub_System_GetSp,
+	*pSub_pow,
+	*pSub_calloc,
+	*pSub_realloc,
+	*pSub_free,
+
+	*pSub_allrem,
+	*pSub_aullrem,
+	*pSub_allmul,
+	*pSub_alldiv,
+	*pSub_aulldiv,
+	*pSub_allshl,
+	*pSub_allshr,
+	*pSub_aullshr;
+
+
+//////////////////////////////
+// 各セクションの位置とサイズ
+int FileSize_CodeSection,
+	FileSize_ExportSection,
+	FileSize_ImportSection,
+	FileSize_DataSection,
+	FileSize_RWSection,
+	FileSize_RSrcSection,
+	FileSize_RelocSection,
+	FileSize_DebugSection;
+int FilePos_CodeSection,
+	FilePos_ExportSection,
+	FilePos_ImportSection,
+	FilePos_DataSection,
+	FilePos_RWSection,
+	FilePos_RSrcSection,
+	FilePos_RelocSection,
+	FilePos_DebugSection;
+int MemSize_CodeSection,
+	MemSize_ExportSection,
+	MemSize_ImportSection,
+	MemSize_DataSection,
+	MemSize_RWSection,
+	MemSize_RSrcSection,
+	MemSize_RelocSection,
+	MemSize_DebugSection;
+int MemPos_CodeSection,
+	MemPos_ExportSection,
+	MemPos_ImportSection,
+	MemPos_DataSection,
+	MemPos_RWSection,
+	MemPos_RSrcSection,
+	MemPos_RelocSection,
+	MemPos_DebugSection;
+int bUse_CodeSection,
+	bUse_ExportSection,
+	bUse_ImportSection,
+	bUse_DataSection,
+	bUse_RWSection,
+	bUse_RSrcSection,
+	bUse_RelocSection,
+	bUse_DebugSection;
+
+
+int AddDataTable(char *buffer,int length){
+	extern HANDLE hHeap;
+	extern char *DataTable;
+	extern int DataTableSize;
+	int RetNum;
+
+	DataTable=(char *)HeapReAlloc(hHeap,0,DataTable,DataTableSize+length+1);
+	memcpy(DataTable+DataTableSize,buffer,length);
+	DataTable[DataTableSize+length]=0;
+
+	RetNum=DataTableSize; //ImageBase+MemPos_DataSectionが後に足される
+
+	DataTableSize+=length+1;
+
+	return RetNum;
+}
+
+void DebugVariable(void){
+	char temporary[255];
+	sprintf(temporary,"_DebugSys_dwThreadID[255]%c%cDWord",1,ESC_AS);
+	OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
+	sprintf(temporary,"_DebugSys_ProcNum[255]%c%cDWord",1,ESC_AS);
+	OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
+	sprintf(temporary,"_DebugSys_lplpObp[255]%c%c*ULONG_PTR",1,ESC_AS);
+	OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
+	sprintf(temporary,"_DebugSys_lplpSpBase[255]%c%c*ULONG_PTR",1,ESC_AS);
+	OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
+}
+
+void Compile(void){
+	extern HWND hMainDlg;
+	extern HWND hOwnerEditor;
+	extern HANDLE hHeap;
+	extern BOOL bDebugCompile;
+	extern BOOL bDll;
+	extern DWORD ImageBase;
+	extern int obp_AllocSize;
+	extern char *basbuf;
+	extern char OutputFileName[MAX_PATH];
+
+	int i,i2,i3,i4,i5;
+	char temporary[MAX_PATH],*temp2;
+	HANDLE hFile;
+
+
+	//コードセクションのメモリ上の位置
+	MemPos_CodeSection=		0x1000;
+
+	//データセクションのメモリ上の位置（仮定）
+	MemPos_DataSection=		0x10000000;
+
+
+	//エクスポート セクションを利用するかどうか
+	if(bDll) bUse_ExportSection=1;
+	else bUse_ExportSection=0;
+
+
+	//////////////////
+	// データテーブル
+	extern char *DataTable;
+	extern int DataTableSize;
+	if(bDebugCompile){
+		DataTable=(char *)HeapAlloc(hHeap,0,2);
+		DataTable[0]=2;
+		DataTable[1]=0;
+		DataTableSize=2;
+	}
+	else{
+		DataTable=(char *)HeapAlloc(hHeap,0,1);
+		DataTableSize=0;
+	}
+
+
+	//////////////////////
+	// コード生成前の準備
+	//////////////////////
+
+	//重複エラー情報管理のメモリを確保（グローバル領域コンパイル用）
+	extern char **SynonymErrorWords;
+	extern int SynonymErrorNum;
+	SynonymErrorNum=0;
+	SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
+
+	//列挙体に関する情報の初期化
+	CEnumParent::InitEnum();
+
+	//列挙体からクラスコードを生成
+	char *temp;
+	temp=CEnumParent::GenerateCodes();
+	AddSourceCode(temp);
+	HeapDefaultFree(temp);
+
+	//関数ポインタ情報を初期化
+	extern PROCPTRINFO *pProcPtrInfo;
+	extern int ProcPtrInfoNum;
+	pProcPtrInfo=(PROCPTRINFO *)HeapAlloc(hHeap,0,1);
+	ProcPtrInfoNum=0;
+
+	//クラス名を取得（詳細情報はGetObjectClassInfoで取得）
+	//   GetSubInfo関数の中で参照されるオブジェクト名を事前に取得する。
+	//     ※オブジェクトの内容までは取得しない
+	pobj_DBClass=new CDBClass();
+	pobj_DBClass->InitNames();
+
+	//定数情報を取得
+	GetConstInfo();
+
+	//サブルーチン（ユーザー定義、DLL関数）の識別子、アドレスを取得
+	pobj_CompilingClass=0;
+	GetSubInfo();
+
+	//クラス情報を取得（※注 - GetSubInfoの後に呼び出す）
+	pobj_DBClass->GetObjectClassInfo();
+
+	//コードと行番号の関係
+	extern LINEINFO *pLineInfo;
+	extern int MaxLineInfoNum;
+	pLineInfo=(LINEINFO *)HeapAlloc(hHeap,0,1);
+	MaxLineInfoNum=0;
+
+
+	///////////////////////////
+	// 最低限必要な関数を取得
+	///////////////////////////
+	cp=-1;
+
+	if(pSub_System_StartupProgram=GetSubHash("_System_StartupProgram",1))
+		pSub_System_StartupProgram->bUse=1;
+
+	if(pSub_DebugSys_StartProc=GetSubHash("_DebugSys_StartProc",1))
+		pSub_DebugSys_StartProc->bUse=1;
+
+	if(pSub_DebugSys_EndProc=GetSubHash("_DebugSys_EndProc",1))
+		pSub_DebugSys_EndProc->bUse=1;
+
+	if(pSub_DebugSys_SaveContext=GetSubHash("_DebugSys_SaveContext",1))
+		pSub_DebugSys_SaveContext->bUse=1;
+
+	if(pSub_System_GetEip=GetSubHash("_System_GetEip",1)){
+		pSub_System_GetEip->bUse=1;
+		pSub_System_GetEip->bSystem=1;
+	}
+
+	if(pSub_System_InitDllGlobalVariables=GetSubHash("_System_InitDllGlobalVariables",1)){
+		pSub_System_InitDllGlobalVariables->bUse=1;
+		pSub_System_InitDllGlobalVariables->bSystem=1;
+	}
+
+	if(pSub_System_InitStaticLocalVariables=GetSubHash("_System_InitStaticLocalVariables",1)){
+		pSub_System_InitStaticLocalVariables->bUse=1;
+		pSub_System_InitStaticLocalVariables->bSystem=1;
+	}
+
+	if(pSub_System_Call_Destructor_of_GlobalObject=GetSubHash("_System_Call_Destructor_of_GlobalObject",1)){
+		pSub_System_Call_Destructor_of_GlobalObject->bUse=1;
+		pSub_System_Call_Destructor_of_GlobalObject->bSystem=1;
+	}
+
+	if(pSub_System_GetSp=GetSubHash("_System_GetSp",1)){
+		pSub_System_GetSp->bUse=1;
+		pSub_System_GetSp->bSystem=1;
+	}
+
+	if(pSub_pow=GetSubHash("pow",1))
+		pSub_pow->bUse=1;
+
+	if(pSub_calloc=GetSubHash("calloc",1))
+		pSub_calloc->bUse=1;
+
+	if(pSub_realloc=GetSubHash("realloc",1))
+		pSub_realloc->bUse=1;
+
+	if(pSub_free=GetSubHash("free",1))
+		pSub_free->bUse=1;
+
+	pSub_allrem=GetSubHash("_allrem");
+	pSub_allrem->bUse=1;
+	pSub_allrem->bSystem=1;
+
+	pSub_aullrem=GetSubHash("_aullrem");
+	pSub_aullrem->bUse=1;
+	pSub_aullrem->bSystem=1;
+
+	pSub_allmul=GetSubHash("_allmul");
+	pSub_allmul->bUse=1;
+	pSub_allmul->bSystem=1;
+
+	pSub_alldiv=GetSubHash("_alldiv");
+	pSub_alldiv->bUse=1;
+	pSub_alldiv->bSystem=1;
+
+	pSub_aulldiv=GetSubHash("_aulldiv");
+	pSub_aulldiv->bUse=1;
+	pSub_aulldiv->bSystem=1;
+
+	pSub_allshl=GetSubHash("_allshl");
+	pSub_allshl->bUse=1;
+	pSub_allshl->bSystem=1;
+
+	pSub_allshr=GetSubHash("_allshr");
+	pSub_allshr->bUse=1;
+	pSub_allshr->bSystem=1;
+
+	pSub_aullshr=GetSubHash("_aullshr");
+	pSub_aullshr->bUse=1;
+	pSub_aullshr->bSystem=1;
+
+
+	//データテーブルスケジュール
+	pobj_DataTableSchedule=new CSchedule();
+	pobj_DataTableSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
+
+	//インポートテーブルスケジュール
+	pobj_ImportAddrSchedule=new CImportAddrSchedule();
+	pobj_ImportAddrSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
+
+	//プロシージャポインタスケジュール
+	pobj_SubAddrSchedule=new CSubAddrSchedule();
+
+	//グローバル変数アドレススケジュール
+	pobj_GlobalVarSchedule=new CSchedule();
+	pobj_GlobalVarSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
+
+	//グローバル変数の初期バッファ
+	extern BYTE *initGlobalBuf;
+	initGlobalBuf=(BYTE *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+
+	//リロケーション情報
+	pobj_Reloc=new CReloc();
+
+	obp_AllocSize=8192*2;
+	OpBuffer=(char *)HeapAlloc(hHeap,0,obp_AllocSize);
+	obp=0;
+
+
+
+	//////////////////////
+	// グローバル実行領域
+	//////////////////////
+
+	cp=-1;
+	extern BOOL bCompilingGlobal;
+	bCompilingGlobal=1;
+	pobj_CompilingClass=0;
+
+	if(!bDll){
+		//ラベル用のメモリを確保
+		extern LABEL *pLabelNames;
+		extern int MaxLabelNum;
+		pLabelNames=(LABEL *)HeapAlloc(hHeap,0,1);
+		MaxLabelNum=0;
+
+		//Gotoラベルスケジュール
+		extern GOTOLABELSCHEDULE *pGotoLabelSchedule;
+		extern int GotoLabelScheduleNum;
+		pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapAlloc(hHeap,0,1);
+		GotoLabelScheduleNum=0;
+
+		//With情報のメモリを確保
+		extern WITHINFO WithInfo;
+		WithInfo.ppName=(char **)HeapAlloc(hHeap,0,1);
+		WithInfo.pWithCp=(int *)HeapAlloc(hHeap,0,1);
+		WithInfo.num=0;
+
+		//Continueアドレスを初期化
+		extern DWORD dwContinueAddress;
+		dwContinueAddress=-1;
+
+
+		//未完成
+		//OpBuffer[obp++]=(char)0xCC;
+
+		//レキシカルスコープ情報を初期化
+		obj_LexScopes.Init(obp);
+
+		//push ebp
+		op_push(REG_EBP);
+
+		if(bDebugCompile){
+			//デバッグ用の変数を定義
+			DebugVariable();
+		}
+
+		//GC用の変数を定義
+		InitGCVariables();
+
+		//_System_StartupProgramの呼び出し
+		op_call(pSub_System_StartupProgram);
+
+		//クラスに属する静的メンバを定義
+		CMember::InitStaticMember();
+
+		//グローバル実行領域をコンパイル開始
+		CompileBuffer(0,0);
+
+		//ラベル用のメモリを解放
+		for(i=0;i<MaxLabelNum;i++){
+			if(pLabelNames[i].pName) HeapDefaultFree(pLabelNames[i].pName);
+		}
+		HeapDefaultFree(pLabelNames);
+
+		//Goto未知ラベルスケジュールを解放
+		for(i=0;i<GotoLabelScheduleNum;i++){
+			if(pGotoLabelSchedule[i].pName){
+				SetError(6,pGotoLabelSchedule[i].pName,pGotoLabelSchedule[i].now_cp);
+				HeapDefaultFree(pGotoLabelSchedule[i].pName);
+			}
+			else{
+				sprintf(temporary,"%d",pGotoLabelSchedule[i].line);
+				SetError(6,temporary,pGotoLabelSchedule[i].now_cp);
+			}
+		}
+		HeapDefaultFree(pGotoLabelSchedule);
+
+
+		///////////////////////////////////////
+		// グローバル文字列変数の解放処理
+		///////////////////////////////////////
+
+		//call _System_Call_Destructor_of_GlobalObject
+		extern SUBINFO *pSub_System_Call_Destructor_of_GlobalObject;
+		op_call(pSub_System_Call_Destructor_of_GlobalObject);
+
+
+		//xor eax,eax（eaxを0に初期化する）
+		op_zero_reg(REG_EAX);
+
+		//pop ebp
+		op_pop(REG_EBP);
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+
+		//グローバル実行領域のコードサイズ
+		GlobalOpBufferSize=obp;
+
+		//With情報のメモリを解放
+		for(i=0;i<WithInfo.num;i++){
+			SetError(22,"With",WithInfo.pWithCp[i]);
+			HeapDefaultFree(WithInfo.ppName[i]);
+		}
+		HeapDefaultFree(WithInfo.ppName);
+		HeapDefaultFree(WithInfo.pWithCp);
+	}
+	else{
+		////////////////
+		// DLLの場合
+		////////////////
+
+	}
+
+	//重複エラー情報管理のメモリを解放（グローバル領域用）
+	for(i=0;i<SynonymErrorNum;i++) HeapDefaultFree(SynonymErrorWords[i]);
+	HeapDefaultFree(SynonymErrorWords);
+
+
+	StepCompileProgress();
+
+
+	/////////////////////
+	// ローカル実行領域
+	/////////////////////
+
+	bCompilingGlobal=0;
+
+	//プロシージャをコンパイル開始
+	cp=0;
+	CompileLocal();
+
+	// 終了
+	///////////////////////
+
+	StepCompileProgress();
+
+
+
+	////////////////////////////////
+	// 使用するDLL関数のチェック
+	////////////////////////////////
+	for(i=0;i<MAX_HASH;i++){
+		extern DECLAREINFO **ppDeclareHash;
+		DECLAREINFO *pdi;
+		pdi=ppDeclareHash[i];
+		while(pdi){
+			if(pdi->bUse==0){
+				pdi=pdi->pNextData;
+				continue;
+			}
+
+			//エラーチェック
+			HINSTANCE hLib;
+			hLib=LoadLibrary(pdi->file);
+			if(!hLib){
+				extern char OutputFileName[MAX_PATH];
+				char temp2[MAX_PATH],temp3[MAX_PATH];
+				_splitpath(OutputFileName,temp2,temp3,NULL,NULL);
+				lstrcat(temp2,temp3);
+				lstrcpy(temp3,pdi->file);
+				GetFullPath(temp3,temp2);
+				hLib=LoadLibrary(temp3);
+
+				if(!hLib){
+					SetError(-106,pdi->file,pdi->pos);
+				}
+			}
+
+			if(hLib){
+				if(!GetProcAddress(hLib,pdi->alias)){
+					FreeLibrary(hLib);
+					SetError(-107,pdi->alias,pdi->pos);
+				}
+				FreeLibrary(hLib);
+			}
+
+			pdi=pdi->pNextData;
+		}
+	}
+
+
+
+	/////////////////////////////
+	// リソースデータを読み込む
+	/////////////////////////////
+	extern char ResourceFileName[MAX_PATH];
+	GetResourceData(ResourceFileName);
+
+
+	//////////////////////////////
+	// エクスポート情報（DLLのみ）
+	//////////////////////////////
+	IMAGE_EXPORT_DIRECTORY ImageExportDirectory;
+	DWORD *lpdwExportAddressTable;
+	DWORD *lpdwExportNamePointerTable;
+	WORD *lpwExportOrdinalTable;
+	char lpExportNames[8192];
+	int ExportNamesLength;
+	int ExportNum;
+	int DllMain_EntryPoint;
+
+	DllMain_EntryPoint=-1;
+	ExportNum=0;
+	ExportNamesLength=0;
+	lpdwExportAddressTable=(DWORD *)HeapAlloc(hHeap,0,1);
+	lpdwExportNamePointerTable=(DWORD *)HeapAlloc(hHeap,0,1);
+	lpwExportOrdinalTable=(WORD *)HeapAlloc(hHeap,0,1);
+
+	if(bUse_ExportSection){
+		_splitpath(OutputFileName,NULL,NULL,lpExportNames,temporary);
+		lstrcat(lpExportNames,temporary);
+		ExportNamesLength=lstrlen(lpExportNames)+1;
+
+		extern SUBINFO **ppSubHash;
+		SUBINFO *psi,*psi2;
+		while(1){
+			//辞書順にサーチ
+			temporary[0]=0;
+			for(i=0,psi2=0;i<MAX_HASH;i++){
+				psi=ppSubHash[i];
+				while(psi){
+					if(psi->bExport){
+						if(temporary[0]=='\0'){
+							lstrcpy(temporary,psi->name);
+							psi2=psi;
+						}
+						else{
+							i3=lstrlen(temporary);
+							i4=lstrlen(psi->name);
+							if(i3<i4) i3=i4;
+							if(memcmp(temporary,psi->name,i3)>0){
+								lstrcpy(temporary,psi->name);
+								psi2=psi;
+							}
+						}
+					}
+					psi=psi->pNextData;
+				}
+			}
+			if(psi2==0) break;
+			psi=psi2;
+
+			psi->bExport=0;
+
+			if(lstrcmpi(psi->name,"DllMain")==0)
+				DllMain_EntryPoint=psi->CompileAddress;
+
+			lpdwExportAddressTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportAddressTable,(ExportNum+1)*sizeof(DWORD));
+			lpdwExportAddressTable[ExportNum]=psi->CompileAddress;
+
+			lpdwExportNamePointerTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportNamePointerTable,(ExportNum+1)*sizeof(DWORD));
+			lpdwExportNamePointerTable[ExportNum]=ExportNamesLength;
+
+			lpwExportOrdinalTable=(WORD *)HeapReAlloc(hHeap,0,lpwExportOrdinalTable,(ExportNum+1)*sizeof(WORD));
+			lpwExportOrdinalTable[ExportNum]=ExportNum;
+
+			lstrcpy(lpExportNames+ExportNamesLength,psi->name);
+			ExportNamesLength+=lstrlen(lpExportNames+ExportNamesLength)+1;
+
+			ExportNum++;
+		}
+		for(i=0;i<ExportNum;i++){
+			lpdwExportNamePointerTable[i]+=
+				sizeof(IMAGE_EXPORT_DIRECTORY)+	//エクスポートディレクトリテーブルを飛び越す
+				ExportNum*sizeof(DWORD)+		//エクスポート アドレス テーブルを飛び越す
+				ExportNum*sizeof(DWORD)+		//エクスポート名ポインタ テーブルを飛び越す
+				ExportNum*sizeof(WORD);			//エクスポート序数テーブルを飛び越す
+		}
+
+		ImageExportDirectory.Characteristics=0;
+		ImageExportDirectory.TimeDateStamp=(DWORD)time(NULL);
+		ImageExportDirectory.MajorVersion=0;
+		ImageExportDirectory.MinorVersion=0;
+		ImageExportDirectory.Name=sizeof(IMAGE_EXPORT_DIRECTORY)+
+			ExportNum*sizeof(DWORD)+	//エクスポート アドレス テーブルを飛び越す
+			ExportNum*sizeof(DWORD)+	//エクスポート名ポインタ テーブルを飛び越す
+			ExportNum*sizeof(WORD);		//エクスポート序数テーブルを飛び越す
+		ImageExportDirectory.Base=1;
+		ImageExportDirectory.NumberOfFunctions=ExportNum;
+		ImageExportDirectory.NumberOfNames=ExportNum;
+		ImageExportDirectory.AddressOfFunctions=sizeof(IMAGE_EXPORT_DIRECTORY);
+		ImageExportDirectory.AddressOfNames=ImageExportDirectory.AddressOfFunctions+ExportNum*sizeof(DWORD);
+		ImageExportDirectory.AddressOfNameOrdinals=ImageExportDirectory.AddressOfNames+ExportNum*sizeof(DWORD);
+	}
+
+
+	/////////////////////
+	//インポートDLL情報
+	/////////////////////
+	extern DECLAREINFO **ppDeclareHash;
+	DECLAREINFO *pdi;
+	char **ppDllNames;
+	int ImportDllNum;
+
+	/*
+	IMAGE_IMPORT_DESCRIPTOR1[size=0x14]	インポートヘッダ
+	IMAGE_IMPORT_DESCRIPTOR2[size=0x14]
+	IMAGE_IMPORT_DESCRIPTOR3[size=0x14]
+	...
+	Dll名1[size=0x10]
+	Dll名2[size=0x10]
+	Dll名3[size=0x10]
+	...
+	ルックアップ テーブル（ヒントを示すRVA）
+	ヒントテーブル
+	インポート アドレス テーブル（ルックアップと同じ内容だが、プログラム実行時に実行アドレスに書き換えられる）
+	*/
+
+	ppDllNames=(char **)HeapAlloc(hHeap,0,1);
+
+	ImportDllNum=0;
+	for(i=0;i<MAX_HASH;i++){
+		pdi=ppDeclareHash[i];
+		while(pdi){
+			if(pdi->dwType==DECLARE_STATIC||
+				pdi->bUse==0){
+				pdi=pdi->pNextData;
+				continue;
+			}
+
+			if(lstrlen(pdi->file)>16){
+				SetError(7,NULL,cp);
+				break;
+			}
+			for(i2=0;i2<ImportDllNum;i2++){
+				if(lstrcmp(ppDllNames[i2],pdi->file)==0) break;
+			}
+			if(i2==ImportDllNum){
+				ppDllNames=(char **)HeapReAlloc(hHeap,0,ppDllNames,(ImportDllNum+1)*sizeof(char **));
+				ppDllNames[ImportDllNum]=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,16);
+				lstrcpy(ppDllNames[ImportDllNum],pdi->file);
+				ImportDllNum++;
+			}
+
+			pdi=pdi->pNextData;
+		}
+	}
+
+	//インポート テーブル、及びルックアップ テーブル サイズの計算
+	IMAGE_IMPORT_DESCRIPTOR *pImportTable;
+	int LookupSize;
+	LookupSize=0;
+	pImportTable=(IMAGE_IMPORT_DESCRIPTOR *)HeapAlloc(hHeap,0,(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR));
+	i3=(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR);
+	for(i=0;i<ImportDllNum;i++){
+		//インポート テーブル（IMAGE_IMPORT_DESCRIPTOR）
+		pImportTable[i].OriginalFirstThunk=i3+(ImportDllNum*0x10)+LookupSize;
+		pImportTable[i].TimeDateStamp=0;
+		pImportTable[i].ForwarderChain=0;
+		pImportTable[i].Name=i3+i*0x10;
+		for(i2=0;i2<MAX_HASH;i2++){
+			pdi=ppDeclareHash[i2];
+			while(pdi){
+				if(pdi->dwType==DECLARE_STATIC||
+					pdi->bUse==0){
+					pdi=pdi->pNextData;
+					continue;
+				}
+
+				if(lstrcmp(ppDllNames[i],pdi->file)==0){
+					//ルックアップデータのサイズを追加
+					LookupSize+=sizeof(DWORD);
+				}
+
+				pdi=pdi->pNextData;
+			}
+		}
+		LookupSize+=sizeof(DWORD);	//NULL用
+	}
+	memset(&pImportTable[i],0,sizeof(IMAGE_IMPORT_DESCRIPTOR));
+
+	//ルックアップ テーブル、ヒント テーブル
+	DWORD *pLookupTable;
+	pLookupTable=(DWORD *)HeapAlloc(hHeap,0,LookupSize*sizeof(DWORD)+1);
+	char *pHintTable;
+	int HintSize,HintAllocSize;
+	HintSize=0;
+	HintAllocSize=128*2;
+	pHintTable=(char *)HeapAlloc(hHeap,0,HintAllocSize);
+	i3+=ImportDllNum*0x10;
+	for(i=0,i5=0;i<ImportDllNum;i++){
+		for(i2=0;i2<MAX_HASH;i2++){
+			pdi=ppDeclareHash[i2];
+			while(pdi){
+				if(pdi->dwType==DECLARE_STATIC||
+					pdi->bUse==0){
+					pdi=pdi->pNextData;
+					continue;
+				}
+
+				if(lstrcmp(ppDllNames[i],pdi->file)==0){
+					//ルックアップの位置をセット（後にインポート アドレス テーブルにセットしなおされる）
+					pdi->LookupAddress=i3+(i5*sizeof(DWORD));
+
+					//ルックアップ テーブル
+					pLookupTable[i5++]=i3+LookupSize+HintSize;
+
+					//ヒント テーブル
+					pHintTable[HintSize++]=0;
+					pHintTable[HintSize++]=0;
+					lstrcpy(pHintTable+HintSize,pdi->alias);
+					i4=lstrlen(pdi->alias);
+					HintSize+=i4+1;
+					if(i4%2==0) pHintTable[HintSize++]=0;
+
+					if(HintAllocSize<HintSize+128){
+						HintAllocSize+=128;
+						pHintTable=(char *)HeapReAlloc(hHeap,0,pHintTable,HintAllocSize);
+					}
+				}
+
+				pdi=pdi->pNextData;
+			}
+		}
+		pLookupTable[i5++]=0;
+	}
+
+
+	if(bDll){
+		//DLLの場合はリロケーション情報を仮生成
+		//※正式な生成は各セクションのメモリ上のサイズが決定してから再度行う。
+		pobj_Reloc->ResetRelocBuffer();
+	}
+
+
+
+	//グローバル変数情報を扱う構造体も初期バッファの有無による配置を行う
+	//（デバッグ情報で利用される）
+	extern int MaxGlobalVarNum;
+	extern VARIABLE *GlobalVar;
+	extern int AllInitGlobalVarSize;
+	for(i=0;i<MaxGlobalVarNum;i++){
+		if(GlobalVar[i].offset&0x80000000){
+			GlobalVar[i].offset=(GlobalVar[i].offset&0x7FFFFFFF)+AllInitGlobalVarSize;
+		}
+	}
+
+
+
+	////////////////////////////////////
+	// デバッグセクションを生成
+	////////////////////////////////////
+
+	//機械語コードとBasicコードの関係を整理
+	extern LINEINFO *pLineInfo;
+	extern int MaxLineInfoNum;
+	int MinObp,MaxObp;
+	LINEINFO *pTempLineInfo;
+	pTempLineInfo=(LINEINFO *)HeapAlloc(hHeap,0,MaxLineInfoNum*sizeof(LINEINFO));
+	i2=0;
+	MaxObp=0;
+	while(1){
+		for(i3=0,MinObp=0x0FFFFFFF;i3<MaxLineInfoNum;i3++){
+			if(pLineInfo[i3].TopObp<MinObp&&MaxObp<pLineInfo[i3].TopObp){
+				MinObp=pLineInfo[i3].TopObp;
+				i4=i3;
+			}
+		}
+		if(MinObp==0x0FFFFFFF) break;
+		pTempLineInfo[i2]=pLineInfo[i4];
+		MaxObp=pTempLineInfo[i2].TopObp;
+		i2++;
+	}
+	HeapDefaultFree(pLineInfo);
+	pLineInfo=(LINEINFO *)HeapAlloc(hHeap,0,i2*sizeof(LINEINFO));
+	memcpy(pLineInfo,pTempLineInfo,i2*sizeof(LINEINFO));
+	MaxLineInfoNum=i2;
+	HeapDefaultFree(pTempLineInfo);
+
+	//デバッグセクションを生成
+	CDebugSection *pobj_DebugSection;
+	pobj_DebugSection=new CDebugSection();
+	extern BOOL bDebugCompile;
+	extern BOOL bError;
+	if(bDebugCompile&&bError==0){
+		pobj_DebugSection->make();
+	}
+
+
+
+	/////////////////////////////////////
+	// 各セクションの位置とサイズを計算
+	/////////////////////////////////////
+
+	//コードセッションのファイル上のサイズ
+	if(obp%FILE_ALIGNMENT) FileSize_CodeSection=obp+(FILE_ALIGNMENT-obp%FILE_ALIGNMENT);
+	else FileSize_CodeSection=obp;
+	if(FileSize_CodeSection) bUse_CodeSection=1;
+	else bUse_CodeSection=0;
+
+	//エクスポートセクションのファイル上のサイズ
+	i=	sizeof(IMAGE_EXPORT_DIRECTORY)+	//エクスポートディレクトリテーブルを飛び越す
+		ExportNum*sizeof(DWORD)+		//エクスポート アドレス テーブルを飛び越す
+		ExportNum*sizeof(DWORD)+		//エクスポート名ポインタ テーブルを飛び越す
+		ExportNum*sizeof(WORD)+			//エクスポート序数テーブルを飛び越す
+		ExportNamesLength;				//シンボル名バッファ
+	if(bUse_ExportSection){
+		if(i%FILE_ALIGNMENT) FileSize_ExportSection=i+(FILE_ALIGNMENT-i%FILE_ALIGNMENT);
+		else FileSize_ExportSection=i;
+	}
+	else FileSize_ExportSection=0;
+
+	//インポートセクションのファイル上のサイズ
+	i=(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR)+
+		16*ImportDllNum+	//DLL名
+		LookupSize+			//ルックアップテーブル
+		HintSize+			//ヒント名（関数名）テーブル
+		LookupSize;			//インポート アドレス テーブル
+	if(i%FILE_ALIGNMENT) FileSize_ImportSection=i+(FILE_ALIGNMENT-i%FILE_ALIGNMENT);
+	else FileSize_ImportSection=i;
+	bUse_ImportSection=1;	//インポートセクションは必ず存在する
+
+	//データセクションのファイル上のサイズ
+	if(DataTableSize%FILE_ALIGNMENT) FileSize_DataSection=DataTableSize+(FILE_ALIGNMENT-DataTableSize%FILE_ALIGNMENT);
+	else FileSize_DataSection=DataTableSize;
+	if(FileSize_DataSection) bUse_DataSection=1;
+	else bUse_DataSection=0;
+
+	//リライタブルセクションのファイル上のサイズ（グローバル変数の初期情報のみを格納）
+	if(AllInitGlobalVarSize%FILE_ALIGNMENT) FileSize_RWSection=AllInitGlobalVarSize+(FILE_ALIGNMENT-AllInitGlobalVarSize%FILE_ALIGNMENT);
+	else{
+		if(AllInitGlobalVarSize) FileSize_RWSection=AllInitGlobalVarSize;
+		else FileSize_RWSection=FILE_ALIGNMENT;
+	}
+	bUse_RWSection=1;
+
+	//リソースセクションのファイル上のサイズ
+	char *RSrcSectionBuffer;
+	int RSrcSectionSize;
+	RSrcSectionBuffer=GetRSrcSectionBuffer(&RSrcSectionSize);
+	if(RSrcSectionSize%FILE_ALIGNMENT) FileSize_RSrcSection=RSrcSectionSize+(FILE_ALIGNMENT-RSrcSectionSize%FILE_ALIGNMENT);
+	else FileSize_RSrcSection=RSrcSectionSize;
+	if(FileSize_RSrcSection) bUse_RSrcSection=1;
+	else bUse_RSrcSection=0;
+
+	//リロケーションセクションのファイル上のサイズ
+	if(pobj_Reloc->length%FILE_ALIGNMENT) FileSize_RelocSection=pobj_Reloc->length+(FILE_ALIGNMENT-pobj_Reloc->length%FILE_ALIGNMENT);
+	else FileSize_RelocSection=pobj_Reloc->length;
+	if(FileSize_RelocSection) bUse_RelocSection=1;
+	else bUse_RelocSection=0;
+
+	//デバッグセクションのファイル上のサイズ
+	if(pobj_DebugSection->length%FILE_ALIGNMENT) FileSize_DebugSection=pobj_DebugSection->length+(FILE_ALIGNMENT-pobj_DebugSection->length%FILE_ALIGNMENT);
+	else FileSize_DebugSection=pobj_DebugSection->length;
+	if(FileSize_DebugSection) bUse_DebugSection=1;
+	else bUse_DebugSection=0;
+
+
+	//各セッションのファイル上の位置
+	FilePos_CodeSection=	EXE_HEADER_SIZE;
+	FilePos_ExportSection=	FilePos_CodeSection+
+							FileSize_CodeSection;
+	FilePos_ImportSection=	FilePos_ExportSection+
+							FileSize_ExportSection;
+	FilePos_DataSection=	FilePos_ImportSection+
+							FileSize_ImportSection;
+	FilePos_RWSection=		FilePos_DataSection+
+							FileSize_DataSection;
+	FilePos_RSrcSection=	FilePos_RWSection+
+							FileSize_RWSection;
+	FilePos_RelocSection=	FilePos_RSrcSection+
+							FileSize_RSrcSection;
+	FilePos_DebugSection=	FilePos_RelocSection+
+							FileSize_RelocSection;
+
+
+	//コードセッションのメモリ上のサイズ
+	if(FileSize_CodeSection%MEM_ALIGNMENT) MemSize_CodeSection=FileSize_CodeSection+(MEM_ALIGNMENT-FileSize_CodeSection%MEM_ALIGNMENT);
+	else MemSize_CodeSection=FileSize_CodeSection;
+
+	//エクスポートセクションのメモリ上のサイズ
+	if(FileSize_ExportSection%MEM_ALIGNMENT) MemSize_ExportSection=FileSize_ExportSection+(MEM_ALIGNMENT-FileSize_ExportSection%MEM_ALIGNMENT);
+	else MemSize_ExportSection=FileSize_ExportSection;
+
+	//インポートセクションのメモリ上のサイズ
+	if(FileSize_ImportSection%MEM_ALIGNMENT) MemSize_ImportSection=FileSize_ImportSection+(MEM_ALIGNMENT-FileSize_ImportSection%MEM_ALIGNMENT);
+	else MemSize_ImportSection=FileSize_ImportSection;
+
+	//データセクションのメモリ上のサイズ
+	if(FileSize_DataSection%MEM_ALIGNMENT) MemSize_DataSection=FileSize_DataSection+(MEM_ALIGNMENT-FileSize_DataSection%MEM_ALIGNMENT);
+	else MemSize_DataSection=FileSize_DataSection;
+
+	//リライタブルセクションのメモリ上のサイズ
+	extern int AllGlobalVarSize;
+	i=AllInitGlobalVarSize+AllGlobalVarSize;
+	if(i%MEM_ALIGNMENT) MemSize_RWSection=i+(MEM_ALIGNMENT-i%MEM_ALIGNMENT);
+	else MemSize_RWSection=i;
+
+	//リソースセクションのメモリ上のサイズ
+	if(FileSize_RSrcSection%MEM_ALIGNMENT) MemSize_RSrcSection=FileSize_RSrcSection+(MEM_ALIGNMENT-FileSize_RSrcSection%MEM_ALIGNMENT);
+	else MemSize_RSrcSection=FileSize_RSrcSection;
+
+	//リロケーションセクションのメモリ上のサイズ
+	if(FileSize_RelocSection%MEM_ALIGNMENT) MemSize_RelocSection=FileSize_RelocSection+(MEM_ALIGNMENT-FileSize_RelocSection%MEM_ALIGNMENT);
+	else MemSize_RelocSection=FileSize_RelocSection;
+
+	//デバッグセクションのメモリ上のサイズ
+	if(FileSize_DebugSection%MEM_ALIGNMENT) MemSize_DebugSection=FileSize_DebugSection+(MEM_ALIGNMENT-FileSize_DebugSection%MEM_ALIGNMENT);
+	else MemSize_DebugSection=FileSize_DebugSection;
+
+
+	//各セッションのメモリ上の位置
+	if(bUse_ExportSection)	MemPos_ExportSection=	0x1000+
+													MemSize_CodeSection;
+	else					MemPos_ExportSection=0;
+	if(bUse_ImportSection)	MemPos_ImportSection=	0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection;
+	else					MemPos_ImportSection=0;
+	if(bUse_DataSection)	MemPos_DataSection=		0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection;
+	else					MemPos_DataSection=0;
+	if(bUse_RWSection)		MemPos_RWSection=		0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection;
+	else					MemPos_RWSection=0;
+	if(bUse_RSrcSection)	MemPos_RSrcSection=		0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection+
+													MemSize_RWSection;
+	else					MemPos_RSrcSection=0;
+	if(bUse_RelocSection)	MemPos_RelocSection=	0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection+
+													MemSize_RWSection+
+													MemSize_RSrcSection;
+	else					MemPos_RelocSection=0;
+	if(bUse_DebugSection)	MemPos_DebugSection=	0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection+
+													MemSize_RWSection+
+													MemSize_RSrcSection+
+													MemSize_RelocSection;
+	else					MemPos_DebugSection=0;
+
+
+
+	/////////////////////////////
+	// GC用の変数スケジュール
+	/////////////////////////////
+	PerformedGcVarSchedule();
+
+
+
+	////////////////////////////
+	// エクスポート情報の再配置
+	////////////////////////////
+	if(bUse_ExportSection){
+		for(i=0;i<ExportNum;i++){
+			lpdwExportAddressTable[i]+=MemPos_CodeSection;
+			lpdwExportNamePointerTable[i]+=MemPos_ExportSection;
+		}
+
+		ImageExportDirectory.Name+=						MemPos_ExportSection;
+		ImageExportDirectory.AddressOfFunctions+=		MemPos_ExportSection;
+		ImageExportDirectory.AddressOfNames+=			MemPos_ExportSection;
+		ImageExportDirectory.AddressOfNameOrdinals+=	MemPos_ExportSection;
+	}
+
+
+	////////////////////////////
+	// インポート情報の再配置
+	////////////////////////////
+	for(i=0,i5=0;i<ImportDllNum;i++){
+		//インポート テーブル（IMAGE_IMPORT_DESCRIPTOR）
+		pImportTable[i].OriginalFirstThunk+=MemPos_ImportSection;
+		pImportTable[i].Name+=MemPos_ImportSection;
+
+		//インポート アドレス テーブル（ルックアップとヒントを飛び越す）
+		pImportTable[i].FirstThunk=pImportTable[i].OriginalFirstThunk+
+			LookupSize+			//ルックアップテーブル
+			HintSize;			//ヒント名（関数名）テーブル
+
+		for(i2=0;i2<MAX_HASH;i2++){
+			pdi=ppDeclareHash[i2];
+			while(pdi){
+				if(pdi->bUse==0){
+					pdi=pdi->pNextData;
+					continue;
+				}
+
+				if(lstrcmp(ppDllNames[i],pdi->file)==0){
+					//ルックアップ テーブル
+					pLookupTable[i5++]+=MemPos_ImportSection;
+				}
+
+				pdi=pdi->pNextData;
+			}
+		}
+		i5++;
+	}
+
+
+	////////////////////////////////////////
+	//仮想関数データテーブルスケジュール
+	pobj_DBClass->ActionVtblSchedule(ImageBase,MemPos_CodeSection);
+
+
+	//////////////////////////////
+	// データテーブルスケジュール
+	for(i=0;i<pobj_DataTableSchedule->num;i++){
+		*((long *)(OpBuffer+pobj_DataTableSchedule->pObpValues[i]))+=ImageBase+MemPos_DataSection;
+	}
+	delete pobj_DataTableSchedule;
+
+
+	//////////////////////////////////
+	// インポートテーブルスケジュール（インポート アドレス テーブルを指し示させる）
+	for(i=0;i<pobj_ImportAddrSchedule->num;i++){
+		DECLAREINFO *pdi;
+		pdi=pobj_ImportAddrSchedule->ppdi[i];
+		*((long *)(OpBuffer+pobj_ImportAddrSchedule->pObpValues[i]))=
+			ImageBase+
+			MemPos_ImportSection+
+			LookupSize+			//ルックアップテーブル
+			HintSize+			//ヒント名（関数名）テーブル
+			pdi->LookupAddress;
+	}
+	delete pobj_ImportAddrSchedule;
+
+
+	////////////////////////////////////
+	// プロシージャポインタスケジュール
+	for(i=0;i<pobj_SubAddrSchedule->num;i++){
+		if(pobj_SubAddrSchedule->pbCall[i]){
+			*((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
+				pobj_SubAddrSchedule->ppsi[i]->CompileAddress-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));
+		}
+		else{
+			*((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
+				pobj_SubAddrSchedule->ppsi[i]->CompileAddress+ImageBase+MemPos_CodeSection;
+		}
+	}
+	delete pobj_SubAddrSchedule;
+
+
+	if(bDll){
+		//DLLの場合はリロケーション情報を生成
+		pobj_Reloc->ResetRelocBuffer();
+	}
+
+
+
+	//////////////////////////////////////
+	// グローバル変数アドレススケジュール
+	//////////////////////////////////////
+
+	/*
+	GlobalArea1 - 初期バッファあり
+	GlobalArea2 - 初期バッファなし
+	*/
+	for(i=0;i<pobj_GlobalVarSchedule->num;i++){
+		if(*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x80000000){
+			//初期バッファなし
+			*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))=
+				AllInitGlobalVarSize+
+				(*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x7FFFFFFF)+
+				ImageBase+MemPos_RWSection;
+		}
+		else{
+			//初期バッファあり
+			*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))+=
+				ImageBase+MemPos_RWSection;
+		}
+	}
+	delete pobj_GlobalVarSchedule;
+
+
+
+	////////////////////////////////
+	// リソースアドレススケジュール
+	extern DWORD *lpdwRSrcAddrSchedule;
+	extern int RSrcAddrScheduleNum;
+	for(i=0;i<RSrcAddrScheduleNum;i++){
+		*(DWORD *)(RSrcSectionBuffer+lpdwRSrcAddrSchedule[i])+=MemPos_RSrcSection;
+	}
+	HeapDefaultFree(lpdwRSrcAddrSchedule);
+
+
+	//Dosスタブ
+	char *DosStubBuffer;
+	int DosStubSize;
+	extern char BasicSystemDir[MAX_PATH];
+	sprintf(temporary,"%sSubOperation\\dosstub.pgm",BasicSystemDir);
+	hFile=CreateFile(temporary,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		MessageBox(hOwnerEditor,"dosstub.pgmの読み込みに失敗","error",MB_OK);
+		goto EndWriteOpcode;
+	}
+	DosStubSize=GetFileSize(hFile,NULL);
+	DosStubBuffer=(char *)HeapAlloc(hHeap,0,DosStubSize);
+	ReadFile(hFile,DosStubBuffer,DosStubSize,(DWORD *)&i2,NULL);
+	CloseHandle(hFile);
+
+
+	extern BOOL bError;
+	if(bError) goto EndWriteOpcode;
+
+
+	////////////////////////////
+	// EXEファイルのヘッダ情報
+	////////////////////////////
+
+	IMAGE_DOS_HEADER ImageDosHeader;
+	ImageDosHeader.e_magic=	0x5A4D;
+	ImageDosHeader.e_cblp=	0x0090;
+	ImageDosHeader.e_cp=	0x0003;
+	ImageDosHeader.e_crlc=	0;
+	ImageDosHeader.e_cparhdr=4;
+	ImageDosHeader.e_minalloc=0x0000;
+	ImageDosHeader.e_maxalloc=0xFFFF;
+	ImageDosHeader.e_ss=	0x0000;
+	ImageDosHeader.e_sp=	0x00B8;
+	ImageDosHeader.e_csum=	0x0000;
+	ImageDosHeader.e_ip=	0x0000;
+	ImageDosHeader.e_cs=	0x0000;
+	ImageDosHeader.e_lfarlc=0x0040;
+	ImageDosHeader.e_ovno=	0x0000;
+	ImageDosHeader.e_res[0]=0;
+	ImageDosHeader.e_res[1]=0;
+	ImageDosHeader.e_res[2]=0;
+	ImageDosHeader.e_res[3]=0;
+	ImageDosHeader.e_oemid=	0x0000;
+	ImageDosHeader.e_oeminfo=0x0000;
+	ImageDosHeader.e_res2[0]=0;
+	ImageDosHeader.e_res2[1]=0;
+	ImageDosHeader.e_res2[2]=0;
+	ImageDosHeader.e_res2[3]=0;
+	ImageDosHeader.e_res2[4]=0;
+	ImageDosHeader.e_res2[5]=0;
+	ImageDosHeader.e_res2[6]=0;
+	ImageDosHeader.e_res2[7]=0;
+	ImageDosHeader.e_res2[8]=0;
+	ImageDosHeader.e_res2[9]=0;
+	ImageDosHeader.e_lfanew=0x0100;	//PEヘッダの位置
+
+
+	/////////////////////////////////////////////
+	// PEヘッダ
+	/////////////////////////////////////////////
+
+	IMAGE_NT_HEADERS ImagePeHdr;
+	ImagePeHdr.Signature=IMAGE_NT_SIGNATURE;
+
+	//マシンタイプ
+	ImagePeHdr.FileHeader.Machine=			IMAGE_FILE_MACHINE_I386;
+
+	ImagePeHdr.FileHeader.NumberOfSections=		bUse_CodeSection+
+												bUse_ExportSection+
+												bUse_ImportSection+
+												bUse_DataSection+
+												bUse_RWSection+
+												bUse_RSrcSection+
+												bUse_RelocSection+
+												bUse_DebugSection;	//セクション数
+	ImagePeHdr.FileHeader.TimeDateStamp=		(DWORD)time(NULL);
+	ImagePeHdr.FileHeader.PointerToSymbolTable=	0x00000000;
+	ImagePeHdr.FileHeader.NumberOfSymbols=		0x00000000;
+	ImagePeHdr.FileHeader.SizeOfOptionalHeader=	IMAGE_SIZEOF_NT_OPTIONAL32_HEADER;
+	if(bDll){
+		ImagePeHdr.FileHeader.Characteristics=	IMAGE_FILE_EXECUTABLE_IMAGE|
+												IMAGE_FILE_32BIT_MACHINE|
+												IMAGE_FILE_LINE_NUMS_STRIPPED|
+												IMAGE_FILE_LOCAL_SYMS_STRIPPED|
+												IMAGE_FILE_DLL;
+	}
+	else{
+		ImagePeHdr.FileHeader.Characteristics=	IMAGE_FILE_EXECUTABLE_IMAGE|
+												IMAGE_FILE_32BIT_MACHINE|
+												IMAGE_FILE_LINE_NUMS_STRIPPED|
+												IMAGE_FILE_LOCAL_SYMS_STRIPPED;
+	}
+
+	ImagePeHdr.OptionalHeader.Magic=				0x010B;
+	ImagePeHdr.OptionalHeader.MajorLinkerVersion=	4;
+	ImagePeHdr.OptionalHeader.MinorLinkerVersion=	0;
+	ImagePeHdr.OptionalHeader.SizeOfCode=			FileSize_CodeSection;	//コードサイズ（.textのセッションサイズ）
+	ImagePeHdr.OptionalHeader.SizeOfInitializedData=FileSize_DataSection;	//データサイズ（.dataのセッションサイズ）
+	ImagePeHdr.OptionalHeader.SizeOfUninitializedData=0;					//未初期化データのサイズ（なし）
+	if(bDll){
+		if(DllMain_EntryPoint==-1)
+			ImagePeHdr.OptionalHeader.AddressOfEntryPoint=0;
+		else
+			ImagePeHdr.OptionalHeader.AddressOfEntryPoint=MemPos_CodeSection+DllMain_EntryPoint;
+	}
+	else ImagePeHdr.OptionalHeader.AddressOfEntryPoint=	MemPos_CodeSection;
+	ImagePeHdr.OptionalHeader.BaseOfCode=			MemPos_CodeSection;	//.textのアドレス
+	ImagePeHdr.OptionalHeader.BaseOfData=			MemPos_DataSection;	//.dataのアドレス
+
+	ImagePeHdr.OptionalHeader.ImageBase=			ImageBase;		//イメージベース
+	ImagePeHdr.OptionalHeader.SectionAlignment=		MEM_ALIGNMENT;		//セクションアラインメント
+	ImagePeHdr.OptionalHeader.FileAlignment=		FILE_ALIGNMENT;
+	ImagePeHdr.OptionalHeader.MajorOperatingSystemVersion=4;
+	ImagePeHdr.OptionalHeader.MinorOperatingSystemVersion=0;
+	ImagePeHdr.OptionalHeader.MajorImageVersion=	0;
+	ImagePeHdr.OptionalHeader.MinorImageVersion=	0;
+	ImagePeHdr.OptionalHeader.MajorSubsystemVersion=4;
+	ImagePeHdr.OptionalHeader.MinorSubsystemVersion=0;
+	ImagePeHdr.OptionalHeader.Win32VersionValue=	0;
+	ImagePeHdr.OptionalHeader.SizeOfImage=			EXE_HEADER_SIZE+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection+
+													MemSize_RWSection+
+													MemSize_RSrcSection+
+													MemSize_RelocSection+
+													MemSize_DebugSection;//すべてのイメージサイズ
+	ImagePeHdr.OptionalHeader.SizeOfHeaders=		EXE_HEADER_SIZE;//ヘッダサイズ
+	ImagePeHdr.OptionalHeader.CheckSum=				0;
+	extern unsigned short TypeOfSubSystem;
+	ImagePeHdr.OptionalHeader.Subsystem=			TypeOfSubSystem;
+	ImagePeHdr.OptionalHeader.DllCharacteristics=	0;
+	ImagePeHdr.OptionalHeader.SizeOfStackReserve=	0x00100000;
+	ImagePeHdr.OptionalHeader.SizeOfStackCommit=	0x00001000;
+	ImagePeHdr.OptionalHeader.SizeOfHeapReserve=	0x00100000;
+	ImagePeHdr.OptionalHeader.SizeOfHeapCommit=		0x00001000;
+	ImagePeHdr.OptionalHeader.LoaderFlags=			0;
+	ImagePeHdr.OptionalHeader.NumberOfRvaAndSizes=	IMAGE_NUMBEROF_DIRECTORY_ENTRIES;
+
+	//データ ディクショナリ
+	ImagePeHdr.OptionalHeader.DataDirectory[0].VirtualAddress=MemPos_ExportSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[0].Size=FileSize_ExportSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[1].VirtualAddress=MemPos_ImportSection;//インポートテーブル
+	ImagePeHdr.OptionalHeader.DataDirectory[1].Size=FileSize_ImportSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[2].VirtualAddress=MemPos_RSrcSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[2].Size=RSrcSectionSize;
+	ImagePeHdr.OptionalHeader.DataDirectory[3].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[3].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[4].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[4].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[5].VirtualAddress=MemPos_RelocSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[5].Size=pobj_Reloc->length;
+	ImagePeHdr.OptionalHeader.DataDirectory[6].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[6].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[7].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[7].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[8].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[8].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[9].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[9].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[10].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[10].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[11].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[11].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[12].VirtualAddress=MemPos_ImportSection+
+		(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR)+
+		16*ImportDllNum+	//DLL名
+		LookupSize+			//ルックアップテーブル
+		HintSize;			//ヒント名（関数名）テーブル
+	ImagePeHdr.OptionalHeader.DataDirectory[12].Size=LookupSize;
+	ImagePeHdr.OptionalHeader.DataDirectory[13].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[13].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[14].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[14].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[15].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[15].Size=0;
+
+
+	//コードセクションヘッダ
+	IMAGE_SECTION_HEADER CodeSectionHeader;
+	memset((char *)CodeSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)CodeSectionHeader.Name,".text");
+	CodeSectionHeader.Misc.VirtualSize=			MemSize_CodeSection;
+	CodeSectionHeader.VirtualAddress=			MemPos_CodeSection;	//開始アドレス
+	CodeSectionHeader.SizeOfRawData=			FileSize_CodeSection;
+	CodeSectionHeader.PointerToRawData=			FilePos_CodeSection;	//ファイル上の開始アドレス
+	CodeSectionHeader.PointerToRelocations=		0;
+	CodeSectionHeader.PointerToLinenumbers=		0;
+	CodeSectionHeader.NumberOfRelocations=		0;
+	CodeSectionHeader.NumberOfLinenumbers=		0;
+	CodeSectionHeader.Characteristics=			IMAGE_SCN_MEM_EXECUTE|
+												IMAGE_SCN_MEM_READ|
+												IMAGE_SCN_CNT_CODE;
+
+	//エクスポートセクションヘッダ
+	IMAGE_SECTION_HEADER ExportSectionHeader;
+	memset((char *)ExportSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)ExportSectionHeader.Name,".edata");
+	ExportSectionHeader.Misc.VirtualSize=		MemSize_ExportSection;
+	ExportSectionHeader.VirtualAddress=			MemPos_ExportSection;	//開始アドレス
+	ExportSectionHeader.SizeOfRawData=			FileSize_ExportSection;	//サイズ
+	ExportSectionHeader.PointerToRawData=		FilePos_ExportSection;	//ファイル上の開始アドレス
+	ExportSectionHeader.PointerToRelocations=	0;
+	ExportSectionHeader.PointerToLinenumbers=	0;
+	ExportSectionHeader.NumberOfRelocations=	0;
+	ExportSectionHeader.NumberOfLinenumbers=	0;
+	ExportSectionHeader.Characteristics=		IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ;
+
+	//インポートセクションヘッダ
+	IMAGE_SECTION_HEADER ImportSectionHeader;
+	memset((char *)ImportSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)ImportSectionHeader.Name,".idata");
+	ImportSectionHeader.Misc.VirtualSize=		MemSize_ImportSection;
+	ImportSectionHeader.VirtualAddress=			MemPos_ImportSection;	//開始アドレス
+	ImportSectionHeader.SizeOfRawData=			FileSize_ImportSection;	//サイズ
+	ImportSectionHeader.PointerToRawData=		FilePos_ImportSection;	//ファイル上の開始アドレス
+	ImportSectionHeader.PointerToRelocations=	0;
+	ImportSectionHeader.PointerToLinenumbers=	0;
+	ImportSectionHeader.NumberOfRelocations=	0;
+	ImportSectionHeader.NumberOfLinenumbers=	0;
+	ImportSectionHeader.Characteristics=		IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ;
+
+	//データセクションヘッダ
+	IMAGE_SECTION_HEADER DataSectionHeader;
+	memset((char *)DataSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)DataSectionHeader.Name,".sdata");
+	DataSectionHeader.Misc.VirtualSize=			MemSize_DataSection;
+	DataSectionHeader.VirtualAddress=			MemPos_DataSection;
+	DataSectionHeader.SizeOfRawData=			FileSize_DataSection;
+	DataSectionHeader.PointerToRawData=			FilePos_DataSection;
+	DataSectionHeader.PointerToRelocations=		0;
+	DataSectionHeader.PointerToLinenumbers=		0;
+	DataSectionHeader.NumberOfRelocations=		0;
+	DataSectionHeader.NumberOfLinenumbers=		0;
+	DataSectionHeader.Characteristics=			IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ|
+												IMAGE_SCN_MEM_WRITE;
+
+	//リライタブルセクションヘッダ
+	IMAGE_SECTION_HEADER RWSectionHeader;
+	memset((char *)RWSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)RWSectionHeader.Name,".data");
+	RWSectionHeader.Misc.VirtualSize=			AllInitGlobalVarSize+AllGlobalVarSize;
+	RWSectionHeader.VirtualAddress=				MemPos_RWSection;
+	RWSectionHeader.SizeOfRawData=				FileSize_RWSection;
+	RWSectionHeader.PointerToRawData=			FilePos_RWSection;
+	RWSectionHeader.PointerToRelocations=		0;
+	RWSectionHeader.PointerToLinenumbers=		0;
+	RWSectionHeader.NumberOfRelocations=		0;
+	RWSectionHeader.NumberOfLinenumbers=		0;
+	RWSectionHeader.Characteristics=			IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ|
+												IMAGE_SCN_MEM_WRITE;
+
+	//リソースセクションヘッダ
+	IMAGE_SECTION_HEADER RSrcSectionHeader;
+	memset((char *)RSrcSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)RSrcSectionHeader.Name,".rsrc");
+	RSrcSectionHeader.Misc.VirtualSize=			RSrcSectionSize;
+	RSrcSectionHeader.VirtualAddress=			MemPos_RSrcSection;
+	RSrcSectionHeader.SizeOfRawData=			FileSize_RSrcSection;
+	RSrcSectionHeader.PointerToRawData=			FilePos_RSrcSection;
+	RSrcSectionHeader.PointerToRelocations=		0;
+	RSrcSectionHeader.PointerToLinenumbers=		0;
+	RSrcSectionHeader.NumberOfRelocations=		0;
+	RSrcSectionHeader.NumberOfLinenumbers=		0;
+	RSrcSectionHeader.Characteristics=			IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ;
+
+	//リロケーションセクションヘッダ
+	IMAGE_SECTION_HEADER RelocSectionHeader;
+	memset((char *)RelocSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)RelocSectionHeader.Name,".reloc");
+	RelocSectionHeader.Misc.VirtualSize=		pobj_Reloc->length;
+	RelocSectionHeader.VirtualAddress=			MemPos_RelocSection;	//開始アドレス
+	RelocSectionHeader.SizeOfRawData=			FileSize_RelocSection;	//サイズ
+	RelocSectionHeader.PointerToRawData=		FilePos_RelocSection;	//ファイル上の開始アドレス
+	RelocSectionHeader.PointerToRelocations=	0;
+	RelocSectionHeader.PointerToLinenumbers=	0;
+	RelocSectionHeader.NumberOfRelocations=		0;
+	RelocSectionHeader.NumberOfLinenumbers=		0;
+	RelocSectionHeader.Characteristics=			IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_DISCARDABLE|
+												IMAGE_SCN_MEM_READ;
+
+	//デバッグセクションヘッダ
+	IMAGE_SECTION_HEADER DebugSectionHeader;
+	memset((char *)DebugSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)DebugSectionHeader.Name,".debug");
+	DebugSectionHeader.Misc.VirtualSize=		pobj_DebugSection->length;
+	DebugSectionHeader.VirtualAddress=			MemPos_DebugSection;	//開始アドレス
+	DebugSectionHeader.SizeOfRawData=			FileSize_DebugSection;	//サイズ
+	DebugSectionHeader.PointerToRawData=		FilePos_DebugSection;	//ファイル上の開始アドレス
+	DebugSectionHeader.PointerToRelocations=	0;
+	DebugSectionHeader.PointerToLinenumbers=	0;
+	DebugSectionHeader.NumberOfRelocations=		0;
+	DebugSectionHeader.NumberOfLinenumbers=		0;
+	DebugSectionHeader.Characteristics=			IMAGE_SCN_MEM_DISCARDABLE|
+												IMAGE_SCN_MEM_READ;
+
+
+	hFile=CreateFile(OutputFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		SetError(53,OutputFileName,-1);
+		goto EndWriteOpcode;
+	}
+
+	//ヘッダ
+	WriteFile(hFile,(void *)&ImageDosHeader,sizeof(IMAGE_DOS_HEADER),(DWORD *)&i2,NULL);
+	i=i2;
+
+	//Dosスタブ
+	WriteFile(hFile,DosStubBuffer,DosStubSize,(DWORD *)&i2,NULL);
+	i+=i2;
+
+	//0x0100までNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,0x0100-i);
+	WriteFile(hFile,temp2,0x0100-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	//PEヘッダ
+	WriteFile(hFile,&ImagePeHdr,sizeof(IMAGE_NT_HEADERS),(DWORD *)&i2,NULL);
+	i+=i2;
+
+	//コード セクション ヘッダ
+	WriteFile(hFile,&CodeSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+	i+=i2;
+
+	if(bUse_ExportSection){
+		//エクスポート セクション ヘッダ
+		WriteFile(hFile,&ExportSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_ImportSection){
+		//インポート セクション ヘッダ
+		WriteFile(hFile,&ImportSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_DataSection){
+		//データ セクション ヘッダ
+		WriteFile(hFile,&DataSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_RWSection){
+		//リライタブルセクションヘッダ
+		WriteFile(hFile,&RWSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_RSrcSection){
+		//リソースセクションヘッダ
+		WriteFile(hFile,&RSrcSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_RelocSection){
+		//リロケーションセクションヘッダ
+		WriteFile(hFile,&RelocSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_DebugSection){
+		//デバッグセクションヘッダ
+		WriteFile(hFile,&DebugSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//EXE_HEADER_SIZEまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,EXE_HEADER_SIZE-i);
+	WriteFile(hFile,temp2,EXE_HEADER_SIZE-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	//コード
+	WriteFile(hFile,OpBuffer,obp,(DWORD *)&i2,NULL);
+	i+=i2;
+
+	//FilePos_ExportSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_ExportSection-i);
+	WriteFile(hFile,temp2,FilePos_ExportSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_ExportSection){
+		//エクスポート ディレクトリ テーブル
+		WriteFile(hFile,&ImageExportDirectory,sizeof(IMAGE_EXPORT_DIRECTORY),(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//エクスポート アドレス テーブル
+		WriteFile(hFile,lpdwExportAddressTable,ExportNum*sizeof(DWORD),(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//エクスポート名ポインタ テーブル
+		WriteFile(hFile,lpdwExportNamePointerTable,ExportNum*sizeof(DWORD),(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//エクスポート序数テーブル
+		WriteFile(hFile,lpwExportOrdinalTable,ExportNum*sizeof(WORD),(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//シンボル名
+		WriteFile(hFile,lpExportNames,ExportNamesLength,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_ImportSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_ImportSection-i);
+	WriteFile(hFile,temp2,FilePos_ImportSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_ImportSection){
+		//インポート ディレクトリ テーブル（Nullディレクトリ テーブルを含む）
+		for(i3=0;i3<(ImportDllNum+1);i3++){
+			WriteFile(hFile,&pImportTable[i3],sizeof(IMAGE_IMPORT_DESCRIPTOR),(DWORD *)&i2,NULL);
+			i+=i2;
+		}
+
+		//DLL名
+		for(i3=0;i3<ImportDllNum;i3++){
+			WriteFile(hFile,ppDllNames[i3],16,(DWORD *)&i2,NULL);
+			i+=i2;
+		}
+
+		//ルックアップ テーブル
+		WriteFile(hFile,pLookupTable,LookupSize,(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//ヒント テーブル
+		WriteFile(hFile,pHintTable,HintSize,(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//インポート アドレス テーブル
+		WriteFile(hFile,pLookupTable,LookupSize,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_DataSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_DataSection-i);
+	WriteFile(hFile,temp2,FilePos_DataSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_DataSection){
+		//データ テーブル
+		WriteFile(hFile,DataTable,DataTableSize,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_RWSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_RWSection-i);
+	WriteFile(hFile,temp2,FilePos_RWSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_RWSection){
+		//リライタブル データ テーブル（グローバル変数の初期バッファ）
+		initGlobalBuf=(BYTE *)HeapReAlloc(hHeap,
+			HEAP_ZERO_MEMORY,
+			initGlobalBuf,
+			FileSize_RWSection);
+		WriteFile(hFile,initGlobalBuf,FileSize_RWSection,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_RSrcSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_RSrcSection-i);
+	WriteFile(hFile,temp2,FilePos_RSrcSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_RSrcSection){
+		//リソースバッファ
+		WriteFile(hFile,RSrcSectionBuffer,RSrcSectionSize,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_RelocSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_RelocSection-i);
+	WriteFile(hFile,temp2,FilePos_RelocSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_RelocSection){
+		//リロケーション情報
+		WriteFile(hFile,pobj_Reloc->buffer,pobj_Reloc->length,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//ファイルアラインメントを考慮
+	if(i%FILE_ALIGNMENT){
+		temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FILE_ALIGNMENT-i%FILE_ALIGNMENT);
+		WriteFile(hFile,temp2,FILE_ALIGNMENT-i%FILE_ALIGNMENT,(DWORD *)&i2,NULL);
+		HeapDefaultFree(temp2);
+		i+=i2;
+	}
+
+	if(bUse_DebugSection){
+		//デバッグセクション
+		WriteFile(hFile,pobj_DebugSection->buffer,pobj_DebugSection->length,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//ファイルアラインメントを考慮
+	if(i%FILE_ALIGNMENT){
+		temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FILE_ALIGNMENT-i%FILE_ALIGNMENT);
+		WriteFile(hFile,temp2,FILE_ALIGNMENT-i%FILE_ALIGNMENT,(DWORD *)&i2,NULL);
+		HeapDefaultFree(temp2);
+		i+=i2;
+	}
+
+	//書き込み終了
+	CloseHandle(hFile);
+
+
+EndWriteOpcode:
+
+	//Dosスタブ用のメモリを解放
+	HeapDefaultFree(DosStubBuffer);
+
+	//エクスポート テーブル情報を解放
+	HeapDefaultFree(lpdwExportAddressTable);
+	HeapDefaultFree(lpdwExportNamePointerTable);
+	HeapDefaultFree(lpwExportOrdinalTable);
+
+	//インポートDLL情報を解放
+	HeapDefaultFree(pImportTable);
+	for(i=0;i<ImportDllNum;i++)
+		HeapDefaultFree(ppDllNames[i]);
+	HeapDefaultFree(ppDllNames);
+
+	//ルックアップテーブルに関する情報を解放
+	HeapDefaultFree(pLookupTable);
+
+	//ヒントテーブルに関する情報を解放
+	HeapDefaultFree(pHintTable);
+
+	//データテーブルに関する情報を解放
+	HeapDefaultFree(DataTable);
+
+	//グローバル変数の初期バッファを解放
+	HeapDefaultFree(initGlobalBuf);
+
+	//コードバッファを解放
+	HeapDefaultFree(OpBuffer);
+	OpBuffer=0;
+
+	//リソースセクションバッファを解放
+	HeapDefaultFree(RSrcSectionBuffer);
+
+	//デバッグセクションを開放
+	delete pobj_DebugSection;
+
+	//リロケーション情報を解放
+	delete pobj_Reloc;
+
+	//列挙体に関する情報の破棄
+	CEnumParent::DestroyEnum();
+
+	//クラスに関するメモリを解放
+	delete pobj_DBClass;
+	pobj_DBClass=0;
+}
Index: /BasicCompiler32/NumOpe.cpp
===================================================================
--- /BasicCompiler32/NumOpe.cpp	(revision 3)
+++ /BasicCompiler32/NumOpe.cpp	(revision 3)
@@ -0,0 +1,757 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void PushReturnValue(int type){
+	//関数の戻り値をスタックへプッシュする
+	//※この処理内では、esi、ediは使用不可
+
+	if(type==DEF_OBJECT){
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_DOUBLE){
+		//sub esp,8
+		op_sub_esp(8);
+
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type==DEF_SINGLE){
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type==DEF_INT64||type==DEF_QWORD){
+		//push edx
+		op_push(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_LONG){
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_INTEGER){
+		//movsx ebx,ax
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBF;
+		OpBuffer[obp++]=(char)0xD8;
+
+		//push ebx
+		op_push(REG_EBX);
+	}
+	else if(type==DEF_CHAR){
+		//movsx ebx,al
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBE;
+		OpBuffer[obp++]=(char)0xD8;
+
+		//push ebx
+		op_push(REG_EBX);
+	}
+	else if(type==DEF_DWORD||type==DEF_WORD||type==DEF_BYTE||
+		IsPtrType(type)){
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_PTR_BYTE){
+		//push eax
+		op_push(REG_EAX);
+	}
+}
+
+void NewStringObject(LPSTR lpszText){
+	///////////////////////////////////////////////////////
+	// lpszTextを元にStringオブジェクトを生成し、
+	// オブジェクトポインタをスタックに格納する
+	///////////////////////////////////////////////////////
+
+	extern CClass *pobj_StringClass;
+	int object_size;
+	object_size=GetSizeOfClass(pobj_StringClass);
+
+	//push object_size
+	op_push_value(object_size);
+
+	//call calloc
+	extern SUBINFO *pSub_calloc;
+	op_call(pSub_calloc);
+
+	//push eax
+	op_push(REG_EAX);
+
+	//push eax
+	op_push(REG_EAX);
+
+	{
+		//push eax
+		op_push(REG_EAX);
+
+		//call constructor
+		op_call(pobj_StringClass->ppobj_Method[pobj_StringClass->ConstructorMemberSubIndex]->psi);
+	}
+
+	int i2;
+	i2=AddDataTable(lpszText,lstrlen(lpszText));
+
+	//push lpszPtr
+	OpBuffer[obp++]=(char)0x68;
+	*((long *)(OpBuffer+obp))=i2;
+	pobj_DataTableSchedule->add();
+	obp+=sizeof(long);
+
+
+	SetObjectVariable((LONG_PTR)pobj_StringClass,DEF_PTR_BYTE,-1,0);
+}
+
+
+int NumOpe(char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap){
+	extern HANDLE hHeap;
+	int i,i2,i3,i4;
+	char temporary[8192],temp2[1024],temp3[1024];
+
+	if(Command[0]=='\0'){
+		SetError(1,NULL,cp);
+		return -1;
+	}
+
+	if(Command[0]==1&&Command[1]==ESC_NEW){
+		//New演算子（オブジェクト生成）
+		return Operator_New(Command+2,plpIndex);
+	}
+
+
+	/////////////////////////////////
+	// 式要素を逆ポーランド式で取得
+	/////////////////////////////////
+
+	char *values[255];
+	long calc[255];
+	long stack[255];
+	int pnum;
+	if(!GetNumOpeElements(Command,&pnum,values,calc,stack)){
+		for(i=0;i<pnum;i++){
+			if(values[i]) HeapDefaultFree(values[i]);
+		}
+		return 0;
+	}
+
+
+	BOOL bError;
+	bError=0;
+
+	//リテラル値のみの計算かどうかを判別するためのフラグ
+	BOOL bLiteralCalculation=1;
+
+	//リテラル演算の場合を考慮した演算前のバッファ位置
+	int BeforeObp;
+	BeforeObp=obp;
+
+	//リテラル演算の場合を考慮した演算前のプロシージャスケジュール位置
+	//※64ビットの掛け算、除算などで特殊関数が呼ばれるため
+	int Before_ProcAddrScheduleNum;
+	Before_ProcAddrScheduleNum=pobj_SubAddrSchedule->num;
+
+	//リテラル演算の場合を考慮した演算前のデータテーブルスケジュール位置
+	int Before_DataTableScheduleNum;
+	Before_DataTableScheduleNum=pobj_DataTableSchedule->num;
+
+	//リテラル演算の場合を考慮した演算前の再配置スケジュール
+	CReloc *pobj_BackReloc;
+	pobj_BackReloc=new CReloc();
+	pobj_BackReloc->copy(pobj_Reloc);
+
+	double dbl;
+	int sp;
+	int type[255];
+	LONG_PTR index_stack[255];
+	BOOL bUseHeap[255];
+	_int64 i64data;
+	for(i=0,sp=0;i<pnum;i++){
+		int idCalc;
+		idCalc=calc[i]%100;
+
+		if(idCalc){
+			if(type[sp-2]==DEF_OBJECT){
+				//オーバーロードされたオペレータを呼び出す
+				TYPEINFO BaseTypeInfo={BaseType,lpBaseIndex};
+				i2=CallOperatorProc(idCalc,&BaseTypeInfo,type,index_stack,bUseHeap,sp);
+				if(i2==0){
+					if(idCalc==CALC_EQUAL) lstrcpy(temp2,"==");
+					else GetCalcName(idCalc,temp2);
+					sprintf(temporary,"Operator %s",temp2);
+					SetError(27,temporary,cp);
+					goto error;
+				}
+				else if(i2==-1) goto error;
+
+				continue;
+			}
+
+			if(!CheckCalcType(idCalc,type,sp)) goto error;
+		}
+
+		switch(idCalc){
+			//数値
+			case 0:
+				index_stack[sp]=-1;
+				bUseHeap[sp]=0;
+
+				char *term;
+				term=values[i];
+
+				if(term[0]=='\"'){
+					//リテラル文字列
+					if(!RemoveStringQuotes(term)){
+						SetError(43,NULL,cp);
+						goto error;
+					}
+					i3=lstrlen(term);
+StrLiteral:
+
+					if(BaseType==DEF_OBJECT){
+						CClass *pobj_Class;
+						pobj_Class=(CClass *)lpBaseIndex;
+						if(IsStringSubsituation(pobj_Class)){
+							//要求タイプがオブジェクトであり、Stringの受け入れが可能な場合
+
+							//String型オブジェクトを生成
+							NewStringObject(term);
+
+							extern CClass *pobj_StringClass;
+							type[sp]=DEF_OBJECT;
+							index_stack[sp]=(LONG_PTR)pobj_StringClass;
+							bUseHeap[sp]=1;
+							bLiteralCalculation=0;
+
+							sp++;
+							break;
+						}
+					}
+
+
+					type[sp]=DEF_PTR_BYTE;
+					index_stack[sp]=LITERAL_STRING;
+					bLiteralCalculation=0;
+
+					i2=AddDataTable(term,i3);
+
+					//push DataSize
+					OpBuffer[obp++]=(char)0x68;
+					*((long *)(OpBuffer+obp))=i2;
+					pobj_DataTableSchedule->add();
+					obp+=sizeof(long);
+				}
+				else if((term[0]=='e'||term[0]=='E')&&
+					(term[1]=='x'||term[1]=='X')&&
+					term[2]=='\"'){
+					//拡張版リテラル文字列（エスケープシーケンス可能）
+					if(!RemoveStringQuotes(term+2)){
+						SetError(43,NULL,cp);
+						goto error;
+					}
+					i3=FormatString_EscapeSequence(term+2);
+					term+=2;
+
+					goto StrLiteral;
+				}
+				else if(IsVariableTopChar(term[0])||
+					term[0]=='*'||
+					(term[0]=='.'&&IsVariableTopChar(term[1]))){
+					//////////////////
+					// 何らかの識別子
+
+					//////////////////////////////////////
+					// 関数（DLL、ユーザー定義、組み込み）
+					//////////////////////////////////////
+
+					i2=GetCallProcName(term,temporary);
+					if(term[i2]=='('){
+						i4=GetStringInPare_RemovePare(temp2,term+i2+1);
+
+						int idProc;
+						void *pInfo;
+						idProc=GetProc(temporary,&pInfo);
+
+						if(idProc){
+							//閉じカッコ")"に続く文字がNULLでないときはエラーにする
+							if(term[i2+1+i4+1]!='\0') SetError(42,NULL,cp);
+
+							////////////////
+							// 呼び出し
+							////////////////
+
+							i2=CallProc(idProc,pInfo,temporary,temp2,&index_stack[sp]);
+							if(i2==-1){
+								//戻り値が存在しないとき
+								for(i2=2;;i2++){
+									if(term[i2]=='('||term[i2]=='\0'){
+										term[i2]=0;
+										break;
+									}
+								}
+								SetError(38,term,cp);
+
+								goto error;
+							}
+
+
+							/////////////////////
+							// 戻り値の処理
+							/////////////////////
+
+							//大きな型への暗黙の変換
+							type[sp]=AutoBigCast(BaseType,i2);
+							bLiteralCalculation=0;
+
+							//スタックへプッシュ
+							PushReturnValue(i2);
+
+							if(Is64Type(type[sp])&&IsWholeNumberType(i2)&&GetTypeSize(i2,-1)<=sizeof(long)){
+								//必要に応じて64ビット拡張
+								ExtendStackTo64(i2);
+							}
+
+							if(i2==DEF_OBJECT){
+								//Object型が戻ったときはヒープ領域にインスタンスが格納されている
+								//※後にfreeする必要あり
+								bUseHeap[sp]=1;
+							}
+
+							sp++;
+							break;
+						}
+						else if(GetConstCalcBuffer(temporary,temp2,temp3)){
+							/////////////////////////
+							// マクロ関数
+							/////////////////////////
+
+							//閉じカッコ")"に続く文字がNULLでないときはエラーにする
+							if(term[i2+1+i4+1]!='\0') SetError(42,NULL,cp);
+
+							//マクロ関数の場合
+							type[sp]=NumOpe(temp3,0,0,&index_stack[sp]);
+
+							if(!IS_LITERAL(index_stack[sp])){
+								//リテラル値ではなかったとき
+								bLiteralCalculation=0;
+							}
+
+							sp++;
+							break;
+						}
+					}
+
+
+
+					char variable[VN_SIZE],array_element[VN_SIZE];
+					CClass *pobj_c;
+					GetArrayElement(term,variable,array_element);
+					if(array_element[0]){
+						i2=GetVarType(variable,(LONG_PTR *)&pobj_c,0);
+						if(i2==DEF_OBJECT){
+							TYPEINFO RetTypeInfo;
+							CallArrayOperatorProc(pobj_c,variable,array_element,RetTypeInfo);
+							type[sp]=RetTypeInfo.type;
+							index_stack[sp]=RetTypeInfo.u.lpIndex;
+							bLiteralCalculation=0;
+
+							//push eax
+							op_push(REG_EAX);
+
+							sp++;
+							break;
+						}
+					}
+
+
+
+					RELATIVE_VAR RelativeVar;
+					if(GetVarOffset(0,term,&i2,&RelativeVar,&index_stack[sp])){
+						//////////
+						// 変数
+						//////////
+
+						//大きな型への暗黙の変換
+						type[sp]=AutoBigCast(BaseType,i2);
+						bLiteralCalculation=0;
+
+						if(i2&FLAG_PTR){
+							//配列ポインタ
+							type[sp]=GetPtrType(i2^FLAG_PTR,index_stack[sp]);
+
+							SetVarPtrToEax(&RelativeVar);
+
+							//push eax
+							op_push(REG_EAX);
+						}
+						else if(i2==DEF_DOUBLE||
+							i2==DEF_INT64||
+							i2==DEF_QWORD){
+							//64ビット型
+							PushDoubleVariable(&RelativeVar);
+						}
+						else if(i2==DEF_LONG||i2==DEF_DWORD||i2==DEF_SINGLE||
+							IsPtrType(i2)){
+							//32ビット型
+							PushLongVariable(&RelativeVar);
+						}
+						else if(i2==DEF_INTEGER){
+							PushIntegerVariable(&RelativeVar);
+						}
+						else if(i2==DEF_WORD){
+							PushWordVariable(&RelativeVar);
+						}
+						else if(i2==DEF_CHAR){
+							PushCharVariable(&RelativeVar);
+						}
+						else if(i2==DEF_BYTE){
+							PushByteVariable(&RelativeVar);
+						}
+						else if(i2==DEF_OBJECT){
+							//オブジェクト ポインタをeaxへ格納
+							SetVarPtrToEax(&RelativeVar);
+
+							//push eax
+							op_push(REG_EAX);
+						}
+
+						if(Is64Type(type[sp])&&IsWholeNumberType(i2)&&GetTypeSize(i2,-1)<=sizeof(long)){
+							//必要に応じて64ビット拡張
+							ExtendStackTo64(i2);
+						}
+
+						sp++;
+						break;
+					}
+
+
+					//////////////
+					// 定数の場合
+					//////////////
+
+					i3=GetConstValue(term,&dbl,temporary,&index_stack[sp]);
+					if(i3!=-1){
+						type[sp]=i3;
+						if(IsRealNumberType(i3)){
+							//実数
+							memcpy(&i64data,&dbl,sizeof(double));
+							goto Literal;
+						}
+						else if(IsWholeNumberType(i3)){
+							//整数
+							i64data=(_int64)dbl;
+							goto Literal;
+						}
+						else if(Is64Type(i3)){
+							//64ビット整数値
+							memcpy(&i64data,&dbl,sizeof(_int64));
+							goto Literal;
+						}
+						else if(i3==DEF_STRING){
+							//リテラル文字列
+
+							//バイト数
+							i3=(int)dbl;
+
+							memcpy(term,temporary,i3);
+							goto StrLiteral;
+						}
+						else{
+							SetError(300,NULL,cp);
+							goto error;
+						}
+					}
+
+
+					//////////////
+					// 型名の場合
+					//////////////
+
+					LONG_PTR lp;
+					i3=GetTypeFixed(term,&lp);
+					if(i3!=-1){
+						type[sp]=i3|FLAG_CAST;
+						index_stack[sp]=lp;
+						sp++;
+						break;
+					}
+
+
+
+					/////////////////////////////////
+					// プロパティ用のメソッド
+					/////////////////////////////////
+
+					//配列要素を排除
+					char VarName[VN_SIZE],ArrayElements[VN_SIZE];
+					GetArrayElement(term,VarName,ArrayElements);
+
+					if(GetSubHash(VarName,0)){
+						TYPEINFO RetTypeInfo;
+						CallPropertyMethod(term,NULL,&RetTypeInfo);
+
+						//大きな型への暗黙の変換
+						type[sp]=AutoBigCast(BaseType,RetTypeInfo.type);
+
+						index_stack[sp]=RetTypeInfo.u.lpIndex;
+						bLiteralCalculation=0;
+
+						//スタックへプッシュ
+						PushReturnValue(RetTypeInfo.type);
+
+						if(type[sp]==DEF_OBJECT){
+							//Object型が戻ったときはヒープ領域にインスタンスが格納されている
+							//※後にfreeする必要あり
+							bUseHeap[sp]=1;
+						}
+
+						sp++;
+						break;
+					}
+
+
+
+					//該当する識別子が見当たらないときはエラー扱いにする
+					bError=1;
+					SetError(3,term,cp);
+					type[sp]=DEF_DOUBLE;
+				}
+				else{
+					//リテラル値
+					type[sp]=GetLiteralValue(term,&i64data,BaseType);
+Literal:
+					if(type[sp]==DEF_INT64||
+						type[sp]==DEF_QWORD||
+						type[sp]==DEF_DOUBLE){
+						//64ビット（符号有り整数/実数）
+
+						//push HILONG(dbl)
+						op_push_value((long)*(long *)(((char *)(&i64data))+4));
+
+						//push LOLONG(dbl)
+						op_push_value(*(long *)(&i64data));
+					}
+					else if(type[sp]==DEF_SINGLE){
+						//single実数
+
+						float flt;
+						memcpy(&dbl,&i64data,sizeof(double));
+						flt=(float)dbl;
+						memcpy(&i3,&flt,sizeof(long));
+
+						//push term
+						op_push_value(i3);
+					}
+					else{
+						//その他
+
+						//push term
+						op_push_value((long)i64data);
+
+						if((long)i64data==0) index_stack[sp]=LITERAL_NULL;
+					}
+
+
+					//リテラル値の種類
+					if(Is64Type(type[sp])==0&&IsRealNumberType(type[sp])==0){
+						//整数（符号有り/無し）
+
+						index_stack[sp]=GetLiteralIndex(i64data);
+					}
+				}
+				sp++;
+				break;
+
+			//論理演算子
+			case CALC_XOR:
+				//value[sp-2] xor= value[sp-1]
+				//xor演算
+				if(!Calc_Xor(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_OR:
+				//value[sp-2] or= value[sp-1]
+				//or演算
+				if(!Calc_Or(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_AND:
+				//value[sp-2] and= value[sp-1]
+				//and演算
+				if(!Calc_And(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_NOT:
+				//value[sp-1]=Not value[sp-1]
+				//NOT演算子
+				if(!Calc_Not(type,sp)) goto error;
+				break;
+
+			//比較演算子
+			case CALC_PE:
+				//value[sp-2]<=value[sp-1]
+				if(!Calc_Relation_PE(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_QE:
+				//value[sp-2]>=value[sp-1]
+				if(!Calc_Relation_QE(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_P:
+				//value[sp-2]<value[sp-1]
+				if(!Calc_Relation_P(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_Q:
+				//value[sp-2]>value[sp-1]
+				if(!Calc_Relation_Q(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_NOTEQUAL:
+				//value[sp-2]<>value[sp-1]
+				if(!Calc_Relation_NotEqual(type,&sp)) goto error;
+				break;
+			case CALC_EQUAL:
+				//value[sp-2]=value[sp-1]
+				if(!Calc_Relation_Equal(type,&sp)) goto error;
+				break;
+
+			//ビットシフト
+			case CALC_SHL:
+				//value[sp-2]=value[sp-2]<<value[sp-1]
+				if(!Calc_SHL(type,&sp)) goto error;
+				break;
+			case CALC_SHR:
+				//value[sp-2]=value[sp-2]>>value[sp-1]
+				if(!Calc_SHR(type,&sp)) goto error;
+				break;
+
+			//算術演算
+			case CALC_ADDITION:
+			case CALC_SUBTRACTION:
+			case CALC_PRODUCT:
+				if(!CalcTwoTerm_Arithmetic(idCalc,type,index_stack,&sp)) goto error;
+				break;
+
+			case CALC_MOD:
+				//value[sp-2]%=value[sp-1]
+				//剰余演算
+				if(!Calc_Mod(type,&sp)) goto error;
+				break;
+			case CALC_QUOTIENT:
+				//value[sp-2]/=value[sp-1];
+				//除算
+				if(!Calc_Divide(type,&sp,BaseType)) goto error;
+				break;
+			case CALC_INTQUOTIENT:
+				//value[sp-2]/=value[sp-1]
+				//整数除算
+				if(!Calc_IntDivide(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_MINUSMARK:
+				//value[sp-1]=-value[sp-1]
+				//符号反転
+				if(!Calc_MinusMark(type,sp)) goto error;
+				index_stack[sp-1]=-1;
+				break;
+			case CALC_POWER:
+				//べき乗演算（浮動小数点演算のみ）
+				if(!Calc_Power(type,&sp)) goto error;
+				break;
+			case CALC_AS:
+				//キャスト
+				if(!Calc_Cast(type,index_stack,&sp)) goto error;
+				break;
+
+			default:
+				SetError(300,NULL,cp);
+				break;
+		}
+	}
+
+	if(bError) goto error;
+
+	if(sp!=1){
+		SetError(1,NULL,cp);
+		goto error;
+	}
+
+	if(bLiteralCalculation){
+		//右辺値が数値の定数式の場合
+		LONG_PTR lpClassIndex;
+		i2=StaticCalculation(true, Command,BaseType,&i64data,&lpClassIndex);
+
+		obp=BeforeObp;
+		pobj_SubAddrSchedule->num=Before_ProcAddrScheduleNum;
+		pobj_DataTableSchedule->num=Before_DataTableScheduleNum;
+		pobj_Reloc->copy(pobj_BackReloc);
+
+		if(i2==DEF_INT64||
+			i2==DEF_QWORD||
+			i2==DEF_DOUBLE){
+			//64ビット（符号有り整数/実数）
+
+			//push HILONG(i64data)
+			op_push_value((long)*(long *)(((char *)(&i64data))+4));
+
+			//push LOLONG(i64data)
+			op_push_value(*(long *)(&i64data));
+		}
+		else if(i2==DEF_SINGLE){
+			//single実数
+
+			memcpy(&dbl,&i64data,sizeof(_int64));
+
+			float flt;
+			flt=(float)dbl;
+			memcpy(&i3,&flt,sizeof(long));
+
+			//push flt
+			op_push_value(i3);
+		}
+		else{
+			//整数（符号有り/無し）
+
+			i3=(long)i64data;
+
+			if(i2==DEF_CHAR||i2==DEF_BYTE) i3=i3&0x000000FF;
+			if(i2==DEF_INTEGER||i2==DEF_WORD) i3=i3&0x0000FFFF;
+
+			//push term
+			op_push_value(i3);
+		}
+
+		type[0]=i2;
+		index_stack[0]=lpClassIndex;
+	}
+	else{
+		//右辺値が数値の定数式ではないとき
+		if(IS_LITERAL(index_stack[0])) index_stack[0]=-1;
+	}
+
+	if(plpIndex) *plpIndex=index_stack[0];
+	if(pbUseHeap) *pbUseHeap=bUseHeap[0];
+
+	int RetType;
+	RetType=type[0];
+	goto finish;
+
+
+error:
+	RetType=-1;
+	goto finish;
+
+
+finish:
+
+	for(i=0;i<pnum;i++){
+		if(values[i]) HeapDefaultFree(values[i]);
+	}
+
+	//再配置スケジュールバックアップ情報を解放
+	delete pobj_BackReloc;
+
+	return RetType;
+}
Index: /BasicCompiler32/NumOpe_Arithmetic.cpp
===================================================================
--- /BasicCompiler32/NumOpe_Arithmetic.cpp	(revision 3)
+++ /BasicCompiler32/NumOpe_Arithmetic.cpp	(revision 3)
@@ -0,0 +1,1583 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void GetStackData_ToRegister(int *type,int sp){
+	/*NumOpeポーランドのスタック蓄積による演算内容（2つのデータ）を
+		レジスタedx:eax、ecx:ebxに取得する*/
+
+	if(type[sp-1]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop ecx
+		op_pop(REG_ECX);
+	}
+	else if(type[sp-1]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop ecx
+		op_pop(REG_ECX);
+	}
+	else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop ecx
+		op_pop(REG_ECX);
+	}
+	else{
+		//pop eax
+		op_pop(REG_EAX);
+
+		if(IsSignedType(type[sp-1])){
+			//符号拡張
+			//edx:eax ← eax
+				
+			//cdq
+			op_cdq();
+		}
+		else{
+			//ビット拡張
+			//edx:eax ← eax
+
+			//xor edx,edx
+			op_zero_reg(REG_EDX);
+		}
+
+		//mov ebx,eax
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0xD8;
+
+		//mov ecx,edx
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0xCA;
+	}
+
+	//第1項を64ビットに対応させる
+	if(type[sp-2]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else if(type[sp-2]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fistp qword ptr[esp]
+		fpu_cast();
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+		fpu_cast_end();
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else{
+		//pop eax
+		op_pop(REG_EAX);
+
+		if(IsSignedType(type[sp-2])){
+			//符号拡張
+			//edx:eax ← eax
+				
+			//cdq
+			op_cdq();
+		}
+		else{
+			//ビット拡張
+			//edx:eax ← eax
+
+			//xor edx,edx
+			op_zero_reg(REG_EDX);
+		}
+	}
+}
+
+void FormatStackData_To64bit(int *type,int sp){
+	//NumOpeポーランドのスタック蓄積による演算内容（2つのデータ）を64ビット整数型にする
+
+	GetStackData_ToRegister(type,sp);
+
+	//push ecx
+	op_push(REG_ECX);
+
+	//push ebx
+	op_push(REG_EBX);
+
+	//push edx
+	op_push(REG_EDX);
+
+	//push eax
+	op_push(REG_EAX);
+}
+
+BOOL CalcTwoTerm_Arithmetic(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer){
+	/*	value[sp-2] = value[sp-2] + value[sp-1]
+		value[sp-2] = value[sp-2] - value[sp-1]
+		value[sp-2] = value[sp-2] * value[sp-1]		*/
+
+	int sp;
+	sp=*pStackPointer;
+
+	int AnswerType;
+	AnswerType=NeutralizationType(type[sp-2],index_stack[sp-2],type[sp-1],index_stack[sp-1]);
+
+	if(type[sp-2]==DEF_DOUBLE||type[sp-2]==DEF_SINGLE||
+		type[sp-1]==DEF_DOUBLE||type[sp-1]==DEF_SINGLE){
+		/////////////
+		// 実数演算
+		/////////////
+
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else{
+			//その他整数型
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+		}
+		else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+			//64ビット整数値
+			op_fld_ptr_esp(DEF_INT64);
+		}
+		else{
+			//その他整数型
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		if(GetTypeSize(type[sp-2],-1)==sizeof(_int64)){
+			if(AnswerType==DEF_SINGLE){
+				//add esp,4
+				op_add_esp(4);
+			}
+		}
+		else{
+			if(AnswerType==DEF_DOUBLE){
+				//sub esp,4
+				op_sub_esp(4);
+			}
+		}
+
+		if(idCalc==CALC_ADDITION){
+			//faddp st(1),st
+			OpBuffer[obp++]=(char)0xDE;
+			OpBuffer[obp++]=(char)0xC1;
+		}
+		else if(idCalc==CALC_SUBTRACTION){
+			//fsubrp st(1),st
+			OpBuffer[obp++]=(char)0xDE;
+			OpBuffer[obp++]=(char)0xE1;
+		}
+		else if(idCalc==CALC_PRODUCT){
+			//fmulp st(1),st
+			OpBuffer[obp++]=(char)0xDE;
+			OpBuffer[obp++]=(char)0xC9;
+		}
+
+		if(AnswerType==DEF_DOUBLE){
+			//fstp qword ptr[esp]
+			OpBuffer[obp++]=(char)0xDD;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+		}
+		else{
+			//fstp dword ptr[esp]
+			OpBuffer[obp++]=(char)0xD9;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+		}
+	}
+	else if(Is64Type(type[sp-2])||Is64Type(type[sp-1])){
+		//////////////////////
+		// 64ビット整数演算
+		//////////////////////
+
+		if(idCalc==CALC_PRODUCT){
+			if(!((type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD)&&
+				(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD))){
+				//2つの項のどちらかが64ビット整数でないとき
+				FormatStackData_To64bit(type,sp);
+			}
+
+			//call _allmul
+			extern SUBINFO *pSub_allmul;
+			op_call(pSub_allmul);
+
+			//push edx
+			op_push(REG_EDX);
+
+			//push eax
+			op_push(REG_EAX);
+		}
+		else{
+			if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+				//第2項が64ビット整数値のとき
+
+				//pop ebx
+				op_pop(REG_EBX);
+
+				//pop ecx
+				op_pop(REG_ECX);
+			}
+			else{
+				//第2項がその他整数値のとき
+
+				//pop eax
+				op_pop(REG_EAX);
+
+				if(IsSignedType(type[sp-1])){
+					//符号拡張
+					//edx:eax ← eax
+					
+					//cdq
+					op_cdq();
+				}
+				else{
+					//ビット拡張
+					//edx:eax ← eax
+
+					//xor edx,edx
+					op_zero_reg(REG_EDX);
+				}
+
+				//mov ebx,eax
+				OpBuffer[obp++]=(char)0x8B;
+				OpBuffer[obp++]=(char)0xD8;
+
+				//mov ecx,edx
+				OpBuffer[obp++]=(char)0x8B;
+				OpBuffer[obp++]=(char)0xCA;
+			}
+
+			if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+				//第1項が64ビット整数値のとき
+
+				if(idCalc==CALC_ADDITION){
+					//add dword ptr[esp],ebx
+					OpBuffer[obp++]=(char)0x01;
+					OpBuffer[obp++]=(char)0x1C;
+					OpBuffer[obp++]=(char)0x24;
+
+					//adc dword ptr[esp+sizeof(long)],ecx
+					OpBuffer[obp++]=(char)0x11;
+					OpBuffer[obp++]=(char)0x4C;
+					OpBuffer[obp++]=(char)0x24;
+					OpBuffer[obp++]=(char)0x04;
+				}
+				else if(idCalc==CALC_SUBTRACTION){
+					//sub dword ptr[esp],ebx
+					OpBuffer[obp++]=(char)0x29;
+					OpBuffer[obp++]=(char)0x1C;
+					OpBuffer[obp++]=(char)0x24;
+
+					//sbb dword ptr[esp+sizeof(long)],ecx
+					OpBuffer[obp++]=(char)0x19;
+					OpBuffer[obp++]=(char)0x4C;
+					OpBuffer[obp++]=(char)0x24;
+					OpBuffer[obp++]=(char)0x04;
+				}
+			}
+			else{
+				//第1項がその他整数値のとき
+
+				//pop eax
+				op_pop(REG_EAX);
+
+				if(IsSignedType(type[sp-2])){
+					//符号拡張
+					//edx:eax ← eax
+
+					//cdq
+					op_cdq();
+				}
+				else{
+					//ビット拡張
+					//edx:eax ← eax
+
+					//xor edx,edx
+					op_zero_reg(REG_EDX);
+				}
+
+				if(idCalc==CALC_ADDITION){
+					//add ebx,eax
+					OpBuffer[obp++]=(char)0x03;
+					OpBuffer[obp++]=(char)0xD8;
+
+					//adc ecx,edx
+					OpBuffer[obp++]=(char)0x13;
+					OpBuffer[obp++]=(char)0xCA;
+				}
+				else if(idCalc==CALC_SUBTRACTION){
+					//sub ebx,eax
+					OpBuffer[obp++]=(char)0x2B;
+					OpBuffer[obp++]=(char)0xC3;
+
+					//sbb ecx,edx
+					OpBuffer[obp++]=(char)0x1B;
+					OpBuffer[obp++]=(char)0xD1;
+				}
+
+				//push ecx
+				op_push(REG_ECX);
+
+				//push ebx
+				op_push(REG_EBX);
+			}
+		}
+	}
+	else{
+		//////////////////////////
+		//32ビット以下の整数演算
+		//////////////////////////
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		if(idCalc==CALC_ADDITION){
+			//add eax,ebx
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0xC3;
+		}
+		else if(idCalc==CALC_SUBTRACTION){
+			//sub eax,ebx
+			OpBuffer[obp++]=(char)0x2B;
+			OpBuffer[obp++]=(char)0xC3;
+		}
+		else if(idCalc==CALC_PRODUCT){
+			//imul eax,ebx（64ビット演算ではないので、符号を考慮しない）
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0xAF;
+			OpBuffer[obp++]=(char)0xC3;
+		}
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+
+	sp--;
+	type[sp-1]=AnswerType;
+
+	*pStackPointer=sp;
+
+	return 1;
+}
+
+BOOL Calc_Mod(int *type,int *pStackPointer){
+	//value[sp-2]%=value[sp-1]
+	//剰余演算
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD||
+		type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+		////////////////
+		// 64ビット演算
+		////////////////
+
+		//第2項を64ビットに対応させる
+		FormatStackData_To64bit(type,sp);
+
+		if(IsSignedType(type[sp-2])==0&&IsSignedType(type[sp-1])==0){
+			//符号なし演算
+
+			//call _aullrem
+			extern SUBINFO *pSub_aullrem;
+			op_call(pSub_aullrem);
+		}
+		else{
+			//符号あり演算
+
+			//call _allrem
+			extern SUBINFO *pSub_allrem;
+			op_call(pSub_allrem);
+		}
+
+		//push edx
+		op_push(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+
+		sp--;
+		if(type[sp-1]==DEF_QWORD&&type[sp]==DEF_QWORD) type[sp-1]=DEF_QWORD;
+		else type[sp-1]=DEF_INT64;
+	}
+	else{
+		////////////////
+		// 32ビット演算
+		////////////////
+
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		if(type[sp-2]==DEF_DWORD&&type[sp-1]==DEF_DWORD){
+			//xor edx,edx
+			op_zero_reg(REG_EDX);
+
+			//div ebx (eax=eax/ebx...edx)
+			OpBuffer[obp++]=(char)0xF7;
+			OpBuffer[obp++]=(char)0xF3;
+		}
+		else{
+			//cdq
+			op_cdq();
+
+			//idiv ebx (eax=eax/ebx...edx)
+			OpBuffer[obp++]=(char)0xF7;
+			OpBuffer[obp++]=(char)0xFB;
+		}
+
+		//mov dword ptr[esp],edx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x14;
+		OpBuffer[obp++]=(char)0x24;
+
+		sp--;
+		type[sp-1]=DEF_LONG;
+	}
+
+	*pStackPointer=sp;
+
+	return 1;
+}
+
+BOOL Calc_Divide(int *type,int *pStackPointer,int BaseType){
+	//value[sp-2]/=value[sp-1];
+	//除算
+
+	int sp;
+	sp=*pStackPointer;
+
+	///////////////////////
+	// 浮動小数点演算のみ
+	///////////////////////
+
+	int AnswerType;
+	if(type[sp-2]==DEF_DOUBLE||type[sp-1]==DEF_DOUBLE||BaseType==DEF_DOUBLE) AnswerType=DEF_DOUBLE;
+	else AnswerType=DEF_SINGLE;
+
+	if(type[sp-1]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else if(type[sp-1]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		//64ビット整数値
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else if(type[sp-1]==DEF_DWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//push 0
+		op_push_value(0);
+
+		//push eax
+		op_push(REG_EAX);
+
+		//fild qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else{
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+
+	if(type[sp-2]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+	}
+	else if(type[sp-2]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+	}
+	else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+		//64ビット整数値
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+	}
+	else if(type[sp-2]==DEF_DWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//push 0
+		op_push_value(0);
+
+		//push eax
+		op_push(REG_EAX);
+
+		//fild qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else{	//Long
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+	}
+                                                            //↓ここだけ例外DWord
+	if(GetTypeSize(type[sp-2],-1)==sizeof(_int64)||type[sp-2]==DEF_DWORD){
+		if(AnswerType==DEF_SINGLE){
+			//add esp,4
+			op_add_esp(4);
+		}
+	}
+	else{
+		if(AnswerType==DEF_DOUBLE){
+			//sub esp,4
+			op_sub_esp(4);
+		}
+	}
+
+	//fdivrp st(1),st
+	OpBuffer[obp++]=(char)0xDE;
+	OpBuffer[obp++]=(char)0xF1;
+
+	sp--;
+	if(AnswerType==DEF_DOUBLE){
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+
+		type[sp-1]=DEF_DOUBLE;
+	}
+	else{
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+
+		type[sp-1]=DEF_SINGLE;
+	}
+
+	*pStackPointer=sp;
+
+	return 1;
+}
+
+BOOL Calc_IntDivide(int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2]/=value[sp-1]
+	//除算（整数）
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD||
+		type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+		////////////////
+		// 64ビット演算
+		////////////////
+
+		//2つの項を64ビットに対応させる
+		FormatStackData_To64bit(type,sp);
+
+		if(IsSignedType(type[sp-2])==0&&IsSignedType(type[sp-1])==0){
+			//符号なし演算
+
+			//call _aulldiv
+			extern SUBINFO *pSub_aulldiv;
+			op_call(pSub_aulldiv);
+		}
+		else{
+			//符号あり演算
+
+			//call _alldiv
+			extern SUBINFO *pSub_alldiv;
+			op_call(pSub_alldiv);
+		}
+
+		//push edx
+		op_push(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+
+		sp--;
+		if(type[sp-1]==DEF_QWORD&&type[sp]==DEF_QWORD) type[sp-1]=DEF_QWORD;
+		else type[sp-1]=DEF_INT64;
+	}
+	else{
+		////////////////
+		// 32ビット演算
+		////////////////
+
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		if((type[sp-2]==DEF_DWORD&&type[sp-1]==DEF_DWORD)||
+			(IS_POSITIVE_LITERAL(index_stack[sp-2])&&type[sp-1]==DEF_DWORD)||
+			(type[sp-2]==DEF_DWORD&&IS_POSITIVE_LITERAL(index_stack[sp-1]))){
+			//xor edx,edx
+			op_zero_reg(REG_EDX);
+
+			//div ebx (eax=eax/ebx...edx)
+			OpBuffer[obp++]=(char)0xF7;
+			OpBuffer[obp++]=(char)0xF3;
+		}
+		else{
+			//cdq
+			op_cdq();
+
+			//idiv ebx (eax=eax/ebx...edx)
+			OpBuffer[obp++]=(char)0xF7;
+			OpBuffer[obp++]=(char)0xFB;
+		}
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		sp--;
+
+		//整数以外の型だったときはLong型にする
+		if(!IsWholeNumberType(type[sp-1])) type[sp-1]=DEF_LONG;
+	}
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_MinusMark(int *type,int sp){
+	//value[sp-1]=-value[sp-1]
+	//符号反転
+
+	if(type[sp-1]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//push -1
+		op_push_value(-1);
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//fmulp st(1),st
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xC9;
+
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type[sp-1]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//push -1
+		op_push_value(-1);
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//fmulp st(1),st
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xC9;
+
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//neg eax
+		OpBuffer[obp++]=(char)0xF7;
+		OpBuffer[obp++]=(char)0xD8;
+
+		//pop edx
+		op_pop(REG_EDX);
+
+		//adc edx,0
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xD2;
+		OpBuffer[obp++]=(char)0x00;
+
+		//neg edx
+		OpBuffer[obp++]=(char)0xF7;
+		OpBuffer[obp++]=(char)0xDA;
+
+		//push edx
+		op_push(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+
+		type[sp-1]=DEF_INT64;	//QWordはInt64へ
+	}
+	else if(IsWholeNumberType(type[sp-1])){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//imul eax,-1
+		OpBuffer[obp++]=(char)0x6B;
+		OpBuffer[obp++]=(char)0xC0;
+		OpBuffer[obp++]=(char)0xFF;
+
+		//push eax
+		op_push(REG_EAX);
+
+		type[sp-1]=GetSignedType(type[sp-1]);
+	}
+
+	return 1;
+}
+
+BOOL Calc_Power(int *type,int *pStackPointer){
+	//べき乗（実数演算のみ）
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(type[sp-1]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else if(type[sp-1]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		//64ビット整数値
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else{
+		//32ビット整数値
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+
+	if(type[sp-2]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+	}
+	else if(type[sp-2]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+	}
+	else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+		//64ビット整数値
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+	}
+	else{
+		//32ビット整数値
+
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//sub esp,4
+		op_sub_esp(4);
+	}
+
+	//sub esp,8
+	op_sub_esp(8);
+
+	//fstp qword ptr[esp]
+	OpBuffer[obp++]=(char)0xDD;
+	OpBuffer[obp++]=(char)0x1C;
+	OpBuffer[obp++]=(char)0x24;
+
+	//fstp qword ptr[esp+8]
+	OpBuffer[obp++]=(char)0xDD;
+	OpBuffer[obp++]=(char)0x5C;
+	OpBuffer[obp++]=(char)0x24;
+	OpBuffer[obp++]=(char)0x08;
+
+	//call pow
+	extern SUBINFO *pSub_pow;
+	op_call(pSub_pow);
+
+	//sub esp,8
+	op_sub_esp(8);
+
+	//fstp qword ptr[esp]
+	OpBuffer[obp++]=(char)0xDD;
+	OpBuffer[obp++]=(char)0x1C;
+	OpBuffer[obp++]=(char)0x24;
+
+	sp--;
+	type[sp-1]=DEF_DOUBLE;
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Cast(int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//キャスト
+
+	int sp;
+	sp=*pStackPointer;
+
+	int CastType;
+	CastType=type[sp-1];
+	if((CastType&FLAG_CAST)==0){
+		SetError(47,NULL,cp);
+		return 0;
+	}
+	CastType=CastType&(~FLAG_CAST);
+
+	if(IsPtrType(CastType)){
+		ChangeTypeToLong(type[sp-2]);
+	}
+	else if(IsRealNumberType(CastType)){
+		if(CastType==DEF_DOUBLE) ChangeTypeToDouble(type[sp-2]);
+		else if(CastType==DEF_SINGLE) ChangeTypeToSingle(type[sp-2]);
+	}
+	else ChangeTypeToWhole(type[sp-2],CastType);
+
+	type[sp-2]=CastType;
+	index_stack[sp-2]=index_stack[sp-1];
+
+	sp--;
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_SHL(int *type,int *pStackPointer){
+	//左ビットシフト
+	//value[sp-2]=value[sp-2]<<value[sp-1]
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+		////////////////
+		// 64ビット演算
+		////////////////
+
+		//2項目は32ビット整数として利用
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//pop ecx
+			op_pop(REG_ECX);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+
+		//第1項を64ビットに対応させる
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//fistp qword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDF;
+			OpBuffer[obp++]=(char)0x3C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//pop edx
+			op_pop(REG_EDX);
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//sub esp,4
+			op_sub_esp(4);
+
+			//fistp qword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDF;
+			OpBuffer[obp++]=(char)0x3C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//pop edx
+			op_pop(REG_EDX);
+		}
+		else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+			//pop eax
+			op_pop(REG_EAX);
+
+			//pop edx
+			op_pop(REG_EDX);
+		}
+		else{
+			//pop eax
+			op_pop(REG_EAX);
+
+			if(IsSignedType(type[sp-2])){
+				//符号拡張
+				//edx:eax ← eax
+					
+				//cdq
+				op_cdq();
+			}
+			else{
+				//ビット拡張
+				//edx:eax ← eax
+
+				//xor edx,edx
+				op_zero_reg(REG_EDX);
+			}
+		}
+
+		//call _allshl
+		extern SUBINFO *pSub_allshl;
+		op_call(pSub_allshl);
+
+		//push edx
+		op_push(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+
+		sp--;
+	}
+	else{
+		////////////////
+		// 32ビット演算
+		////////////////
+
+		//2項目は32ビット整数として利用
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//pop ecx
+			op_pop(REG_ECX);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//shl eax,cl
+		OpBuffer[obp++]=(char)0xD3;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		sp--;
+
+		//32ビット型にする
+		if(IsSignedType(type[sp-1])) type[sp-1]=DEF_LONG;
+		else type[sp-1]=DEF_DWORD;
+	}
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_SHR(int *type,int *pStackPointer){
+	//右ビットシフト
+	//value[sp-2]=value[sp-2]>>value[sp-1]
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+		////////////////
+		// 64ビット演算
+		////////////////
+
+		//2項目は32ビット整数として利用
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//pop ecx
+			op_pop(REG_ECX);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+
+		//第1項を64ビットに対応させる
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//fistp qword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDF;
+			OpBuffer[obp++]=(char)0x3C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//pop edx
+			op_pop(REG_EDX);
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//sub esp,4
+			op_sub_esp(4);
+
+			//fistp qword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDF;
+			OpBuffer[obp++]=(char)0x3C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//pop edx
+			op_pop(REG_EDX);
+		}
+		else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+			//pop eax
+			op_pop(REG_EAX);
+
+			//pop edx
+			op_pop(REG_EDX);
+		}
+		else{
+			//pop eax
+			op_pop(REG_EAX);
+
+			if(IsSignedType(type[sp-2])){
+				//符号拡張
+				//edx:eax ← eax
+
+				//cdq
+				op_cdq();
+			}
+			else{
+				//ビット拡張
+				//edx:eax ← eax
+
+				//xor edx,edx
+				op_zero_reg(REG_EDX);
+			}
+		}
+
+		if(type[sp-2]==DEF_QWORD){
+			//符号なし演算
+
+			//call _aullshr
+			extern SUBINFO *pSub_aullshr;
+			op_call(pSub_aullshr);
+		}
+		else{
+			//符号あり演算
+
+			//call _allshr
+			extern SUBINFO *pSub_allshr;
+			op_call(pSub_allshr);
+		}
+
+		//push edx
+		op_push(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+
+		sp--;
+	}
+	else{
+		////////////////
+		// 32ビット演算
+		////////////////
+
+		//2項目は32ビット整数として利用
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//pop ecx
+			op_pop(REG_ECX);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		if(type[sp-2]==DEF_DWORD){
+			//shr eax,cl
+			OpBuffer[obp++]=(char)0xD3;
+			OpBuffer[obp++]=(char)0xE8;
+		}
+		else{
+			//sar eax,cl
+			OpBuffer[obp++]=(char)0xD3;
+			OpBuffer[obp++]=(char)0xF8;
+		}
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		sp--;
+
+		//整数以外の型だったときはLong型にする
+		if(!IsWholeNumberType(type[sp-1])) type[sp-1]=DEF_LONG;
+	}
+
+	*pStackPointer=sp;
+	return 1;
+}
Index: /BasicCompiler32/NumOpe_Logical.cpp
===================================================================
--- /BasicCompiler32/NumOpe_Logical.cpp	(revision 3)
+++ /BasicCompiler32/NumOpe_Logical.cpp	(revision 3)
@@ -0,0 +1,480 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+BOOL Calc_Xor(int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2] xor= value[sp-1]
+	//xor演算
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
+		//いずれかの項が実数のとき
+		SetError(45,"xor",cp);
+		return 0;
+	}
+
+	if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD||
+		type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+
+		//第2項を64ビットに対応させる
+		if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//第2項が64ビット整数値のとき
+
+			//pop ebx
+			op_pop(REG_EBX);
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else{
+			//第2項がその他整数値のとき
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			if(IsSignedType(type[sp-1])){
+				//符号拡張
+				//edx:eax ← eax
+				
+				//cdq
+				op_cdq();
+			}
+			else{
+				//ビット拡張
+				//edx:eax ← eax
+
+				//xor edx,edx
+				op_zero_reg(REG_EDX);
+			}
+
+			//mov ebx,eax
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0xD8;
+
+			//mov ecx,edx
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0xCA;
+		}
+
+		if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+			//第1項が64ビット整数値のとき
+
+			//xor dword ptr[esp],ebx
+			OpBuffer[obp++]=(char)0x31;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+
+			//xor dword ptr[esp+sizeof(long)],ecx
+			OpBuffer[obp++]=(char)0x31;
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x24;
+			OpBuffer[obp++]=(char)0x04;
+		}
+		else{
+			//第1項がその他整数値のとき
+			if(IsSignedType(type[sp-2])){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//符号拡張
+				//edx:eax ← eax
+
+				//cdq
+				op_cdq();
+			}
+			else{
+				//pop eax
+				op_pop(REG_EAX);
+
+				//ビット拡張
+				//edx:eax ← eax
+
+				//xor edx,edx
+				op_zero_reg(REG_EDX);
+			}
+
+			//xor ebx,eax
+			OpBuffer[obp++]=(char)0x33;
+			OpBuffer[obp++]=(char)0xD8;
+
+			//xor ecx,edx
+			OpBuffer[obp++]=(char)0x33;
+			OpBuffer[obp++]=(char)0xCA;
+
+			//push ecx
+			op_push(REG_ECX);
+
+			//push ebx
+			op_push(REG_EBX);
+		}
+
+		sp--;
+		if(type[sp-1]==DEF_QWORD&&type[sp]==DEF_QWORD) type[sp-1]=DEF_QWORD;
+		else type[sp-1]=DEF_INT64;
+	}
+	else{
+		////////////////////
+		// 整数演算
+		////////////////////
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//xor eax,ebx
+		OpBuffer[obp++]=(char)0x33;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		sp--;
+		type[sp-1]=NeutralizationType(type[sp-1],index_stack[sp-1],type[sp],index_stack[sp]);
+	}
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Or(int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2] or= value[sp-1]
+	//or演算
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
+		//いずれかの項が実数のとき
+		SetError(45,"or",cp);
+		return 0;
+	}
+
+	if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD||
+		type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+
+		//第2項を64ビットに対応させる
+		if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//第2項が64ビット整数値のとき
+
+			//pop ebx
+			op_pop(REG_EBX);
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else{
+			//第2項が32ビット整数値のとき
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			if(IsSignedType(type[sp-1])){
+				//符号拡張
+				//edx:eax ← eax
+				
+				//cdq
+				op_cdq();
+			}
+			else{
+				//ビット拡張
+				//edx:eax ← eax
+
+				//xor edx,edx
+				op_zero_reg(REG_EDX);
+			}
+
+			//mov ebx,eax
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0xD8;
+
+			//mov ecx,edx
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0xCA;
+		}
+
+		if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+			//第1項が64ビット整数値のとき
+
+			//or dword ptr[esp],ebx
+			OpBuffer[obp++]=(char)0x09;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+
+			//or dword ptr[esp+sizeof(long)],ecx
+			OpBuffer[obp++]=(char)0x09;
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x24;
+			OpBuffer[obp++]=(char)0x04;
+		}
+		else{
+			//第1項が32ビット整数値のとき
+			if(IsSignedType(type[sp-2])){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//符号拡張
+				//edx:eax ← eax
+
+				//cdq
+				op_cdq();
+			}
+			else{
+				//pop eax
+				op_pop(REG_EAX);
+
+				//ビット拡張
+				//edx:eax ← eax
+
+				//xor edx,edx
+				op_zero_reg(REG_EDX);
+			}
+
+			//or ebx,eax
+			OpBuffer[obp++]=(char)0x0B;
+			OpBuffer[obp++]=(char)0xD8;
+
+			//or ecx,edx
+			OpBuffer[obp++]=(char)0x0B;
+			OpBuffer[obp++]=(char)0xCA;
+
+			//push ecx
+			op_push(REG_ECX);
+
+			//push ebx
+			op_push(REG_EBX);
+		}
+
+		sp--;
+		if(type[sp-1]==DEF_QWORD&&type[sp]==DEF_QWORD) type[sp-1]=DEF_QWORD;
+		else type[sp-1]=DEF_INT64;
+	}
+	else{
+		////////////////////
+		// 32ビット整数演算
+		////////////////////
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//or eax,ebx
+		OpBuffer[obp++]=(char)0x0B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		sp--;
+		type[sp-1]=NeutralizationType(type[sp-1],index_stack[sp-1],type[sp],index_stack[sp]);
+	}
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_And(int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2] and= value[sp-1]
+	//and演算
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
+		//いずれかの項が実数のとき
+		SetError(45,"and",cp);
+		return 0;
+	}
+
+	if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD||
+		type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+
+		//第2項を64ビットに対応させる
+		if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//第2項が64ビット整数値のとき
+
+			//pop ebx
+			op_pop(REG_EBX);
+
+			//pop ecx
+			op_pop(REG_ECX);
+		}
+		else{
+			//第2項が32ビット整数値のとき
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			if(IsSignedType(type[sp-1])){
+				//符号拡張
+				//edx:eax ← eax
+				
+				//cdq
+				op_cdq();
+			}
+			else{
+				//ビット拡張
+				//edx:eax ← eax
+
+				//xor edx,edx
+				op_zero_reg(REG_EDX);
+			}
+
+			//mov ebx,eax
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0xD8;
+
+			//mov ecx,edx
+			OpBuffer[obp++]=(char)0x8B;
+			OpBuffer[obp++]=(char)0xCA;
+		}
+
+		if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+			//第1項が64ビット整数値のとき
+
+			//and dword ptr[esp],ebx
+			OpBuffer[obp++]=(char)0x21;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+
+			//and dword ptr[esp+sizeof(long)],ecx
+			OpBuffer[obp++]=(char)0x21;
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x24;
+			OpBuffer[obp++]=(char)0x04;
+		}
+		else{
+			//第1項が32ビット整数値のとき
+			if(IsSignedType(type[sp-2])){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//符号拡張
+				//edx:eax ← eax
+
+				//cdq
+				op_cdq();
+			}
+			else{
+				//pop eax
+				op_pop(REG_EAX);
+
+				//ビット拡張
+				//edx:eax ← eax
+
+				//xor edx,edx
+				op_zero_reg(REG_EDX);
+			}
+
+			//and ebx,eax
+			OpBuffer[obp++]=(char)0x23;
+			OpBuffer[obp++]=(char)0xD8;
+
+			//and ecx,edx
+			OpBuffer[obp++]=(char)0x23;
+			OpBuffer[obp++]=(char)0xCA;
+
+			//push ecx
+			op_push(REG_ECX);
+
+			//push ebx
+			op_push(REG_EBX);
+		}
+
+		sp--;
+		if(type[sp-1]==DEF_QWORD&&type[sp]==DEF_QWORD) type[sp-1]=DEF_QWORD;
+		else type[sp-1]=DEF_INT64;
+	}
+	else{
+		////////////////////
+		// 32ビット整数演算
+		////////////////////
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//and eax,ebx
+		OpBuffer[obp++]=(char)0x23;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+
+		sp--;
+		type[sp-1]=NeutralizationType(type[sp-1],index_stack[sp-1],type[sp],index_stack[sp]);
+	}
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Not(int *type,int sp){
+	//value[sp-1]=Not value[sp-1]
+	//NOT演算子
+
+	if(IsRealNumberType(type[sp-1])){
+		//実数のとき
+		SetError(45,"Not",cp);
+		return 0;
+	}
+
+	if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+
+		//not dword ptr[esp]
+		OpBuffer[obp++]=(char)0xF7;
+		OpBuffer[obp++]=(char)0x14;
+		OpBuffer[obp++]=(char)0x24;
+
+		//not dword ptr[esp+4]
+		OpBuffer[obp++]=(char)0xF7;
+		OpBuffer[obp++]=(char)0x54;
+		OpBuffer[obp++]=(char)0x24;
+		OpBuffer[obp++]=(char)0x04;
+	}
+	else{
+		////////////////////
+		// 32ビット整数演算
+		////////////////////
+
+		//not dword ptr[esp]
+		OpBuffer[obp++]=(char)0xF7;
+		OpBuffer[obp++]=(char)0x14;
+		OpBuffer[obp++]=(char)0x24;
+	}
+
+	return 1;
+}
Index: /BasicCompiler32/NumOpe_Relation.cpp
===================================================================
--- /BasicCompiler32/NumOpe_Relation.cpp	(revision 3)
+++ /BasicCompiler32/NumOpe_Relation.cpp	(revision 3)
@@ -0,0 +1,1339 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+BOOL Calc_Relation_PE(int *type_stack,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2]<=value[sp-1]
+
+	int sp;
+	sp=*pStackPointer;
+
+	int AnswerType;
+	AnswerType=NeutralizationType(type_stack[sp-2],index_stack[sp-2],type_stack[sp-1],index_stack[sp-1]);
+
+	if(IsRealNumberType(AnswerType)){
+		//////////////
+		// 実数演算
+		//////////////
+
+		if(type_stack[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(type_stack[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type_stack[sp-1]==DEF_INT64||type_stack[sp-1]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else{
+			//その他整数型
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+
+		if(type_stack[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type_stack[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+		}
+		else if(type_stack[sp-2]==DEF_INT64||type_stack[sp-2]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{
+			//その他整数型
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//mov ecx,0xFFFFFFFF
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//test ah,41h
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x41;
+
+		//jne 5
+		OpBuffer[obp++]=(char)0x75;
+		OpBuffer[obp++]=(char)0x02;
+
+		//xor ecx,ecx（ecxを0にする）
+		op_zero_reg(REG_ECX);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(Is64Type(AnswerType)){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+		int TrueSchedule,
+			FalseSchedule1,
+			FalseSchedule2;
+
+		// 第1項 <= 第2項
+
+		//第1項 edx:eax
+		//第2項 ecx:ebx
+		GetStackData_ToRegister(type_stack,sp);
+
+		//cmp edx,ecx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xD1;
+
+		if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
+			//符号なし演算
+
+			//ja FalseSchedule1（偽へジャンプ）
+			OpBuffer[obp++]=(char)0x77;
+		}
+		else{
+			//符号あり演算
+
+			//jg FalseSchedule1（偽へジャンプ）
+			OpBuffer[obp++]=(char)0x7F;
+		}
+		FalseSchedule1=obp;
+		obp++;
+
+		if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
+			//符号なし演算
+
+			//jb TrueSchedule（真へジャンプ）
+			OpBuffer[obp++]=(char)0x72;
+		}
+		else{
+			//符号あり演算
+
+			//jl TrueSchedule（真へジャンプ）
+			OpBuffer[obp++]=(char)0x7C;
+		}
+		TrueSchedule=obp;
+		obp++;
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//ja FalseSchedule2（偽へジャンプ）
+		OpBuffer[obp++]=(char)0x77;
+		FalseSchedule2=obp;
+		obp++;
+
+		//TrueScheduleのジャンプ先の設定
+		OpBuffer[TrueSchedule]=obp-(TrueSchedule+1);
+
+		//mov eax,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//jmp 2（演算終了位置へジャンプ）
+		OpBuffer[obp++]=(char)0xEB;
+		OpBuffer[obp++]=(char)0x02;
+
+		//FalseScheduleのジャンプ先の設定
+		OpBuffer[FalseSchedule1]=obp-(FalseSchedule1+1);
+		OpBuffer[FalseSchedule2]=obp-(FalseSchedule2+1);
+
+		//xor eax,eax（eaxを0にする）
+		op_zero_reg(REG_EAX);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		////////////////////
+		// 32ビット整数演算
+		////////////////////
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//mov ecx,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
+			//符号なし演算
+
+			//jbe 5（次のmovを飛び越す）
+			OpBuffer[obp++]=(char)0x76;
+			OpBuffer[obp++]=(char)0x05;
+		}
+		else{
+			//符号あり演算
+
+			//jle 5（次のmovを飛び越す）
+			OpBuffer[obp++]=(char)0x7E;
+			OpBuffer[obp++]=(char)0x05;
+		}
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+
+	sp--;
+	type_stack[sp-1]=DEF_LONG;
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Relation_QE(int *type_stack,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2]>=value[sp-1]
+
+	int sp;
+	sp=*pStackPointer;
+
+	int AnswerType;
+	AnswerType=NeutralizationType(type_stack[sp-2],index_stack[sp-2],type_stack[sp-1],index_stack[sp-1]);
+
+	if(IsRealNumberType(AnswerType)){
+		//浮動小数点演算
+		if(type_stack[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(type_stack[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type_stack[sp-1]==DEF_INT64||type_stack[sp-1]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else{
+			//その他整数型
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+
+		if(type_stack[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type_stack[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+		}
+		else if(type_stack[sp-2]==DEF_INT64||type_stack[sp-2]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{
+			//その他整数型
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//mov ecx,0xFFFFFFFF
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//test ah,1
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x01;
+
+		//je 5
+		OpBuffer[obp++]=(char)0x74;
+		OpBuffer[obp++]=(char)0x05;
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(Is64Type(AnswerType)){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+		int TrueSchedule,
+			FalseSchedule1,
+			FalseSchedule2;
+
+		// 第1項 >= 第2項
+
+		//第1項 edx:eax
+		//第2項 ecx:ebx
+		GetStackData_ToRegister(type_stack,sp);
+
+		//cmp edx,ecx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xD1;
+
+		if(IsSignedType(AnswerType)){
+			//符号あり演算
+
+			//jl FalseSchedule1（偽へジャンプ）
+			OpBuffer[obp++]=(char)0x7C;
+		}
+		else{
+			//符号なし演算
+
+			//jb FalseSchedule1（偽へジャンプ）
+			OpBuffer[obp++]=(char)0x72;
+		}
+		FalseSchedule1=obp;
+		obp++;
+
+		if(IsSignedType(AnswerType)){
+			//符号あり演算
+
+			//jg TrueSchedule（真へジャンプ）
+			OpBuffer[obp++]=(char)0x7F;
+		}
+		else{
+			//符号なし演算
+
+			//ja TrueSchedule（真へジャンプ）
+			OpBuffer[obp++]=(char)0x77;
+		}
+		TrueSchedule=obp;
+		obp++;
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//jb FalseSchedule2（偽へジャンプ）
+		OpBuffer[obp++]=(char)0x72;
+		FalseSchedule2=obp;
+		obp++;
+
+		//TrueScheduleのジャンプ先の設定
+		OpBuffer[TrueSchedule]=obp-(TrueSchedule+1);
+
+		//mov eax,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//jmp 2（演算終了位置へジャンプ）
+		OpBuffer[obp++]=(char)0xEB;
+		OpBuffer[obp++]=(char)0x02;
+
+		//FalseScheduleのジャンプ先の設定
+		OpBuffer[FalseSchedule1]=obp-(FalseSchedule1+1);
+		OpBuffer[FalseSchedule2]=obp-(FalseSchedule2+1);
+
+		//xor eax,eax（eaxを0にする）
+		op_zero_reg(REG_EAX);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		////////////////////
+		// 32ビット整数演算
+		////////////////////
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//mov ecx,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		if(IsSignedType(AnswerType)){
+			//符号あり演算
+
+			//jge 5（次のmovを飛び越す）符号有り
+			OpBuffer[obp++]=(char)0x7D;
+			OpBuffer[obp++]=(char)0x05;
+		}
+		else{
+			//符号なし演算
+
+			//jae 5（次のmovを飛び越す）
+			OpBuffer[obp++]=(char)0x73;
+			OpBuffer[obp++]=(char)0x05;
+		}
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+
+	sp--;
+	type_stack[sp-1]=DEF_LONG;
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Relation_P(int *type_stack,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2]<value[sp-1]
+
+	int sp;
+	sp=*pStackPointer;
+
+	int AnswerType;
+	AnswerType=NeutralizationType(type_stack[sp-2],index_stack[sp-2],type_stack[sp-1],index_stack[sp-1]);
+
+	if(IsRealNumberType(AnswerType)){
+		//////////////
+		// 実数演算
+		//////////////
+
+		if(type_stack[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(type_stack[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type_stack[sp-1]==DEF_INT64||type_stack[sp-1]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else{
+			//その他整数型
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+
+		if(type_stack[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type_stack[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+		}
+		else if(type_stack[sp-2]==DEF_INT64||type_stack[sp-2]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{
+			//その他整数型
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//mov ecx,0xFFFFFFFF
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//test ah,01h
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x01;
+
+		//jne 5
+		OpBuffer[obp++]=(char)0x75;
+		OpBuffer[obp++]=(char)0x05;
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(Is64Type(AnswerType)){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+		int TrueSchedule1,
+			TrueSchedule2,
+			FalseSchedule;
+
+		// 第1項 < 第2項
+
+		//第1項 edx:eax
+		//第2項 ecx:ebx
+		GetStackData_ToRegister(type_stack,sp);
+
+		//cmp edx,ecx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xD1;
+
+		if(IsSignedType(AnswerType)){
+			//符号あり演算
+
+			//jl TrueSchedule1（真へジャンプ）
+			OpBuffer[obp++]=(char)0x7C;
+		}
+		else{
+			//符号なし演算
+
+			//jb TrueSchedule1（真へジャンプ）
+			OpBuffer[obp++]=(char)0x72;
+		}
+		TrueSchedule1=obp;
+		obp++;
+
+		if(IsSignedType(AnswerType)){
+			//符号あり演算
+
+			//jg FalseSchedule（偽へジャンプ）
+			OpBuffer[obp++]=(char)0x7F;
+		}
+		else{
+			//符号なし演算
+
+			//ja FalseSchedule（偽へジャンプ）
+			OpBuffer[obp++]=(char)0x77;
+		}
+		FalseSchedule=obp;
+		obp++;
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//jb TrueSchedule2（真へジャンプ）
+		OpBuffer[obp++]=(char)0x72;
+		TrueSchedule2=obp;
+		obp++;
+
+		//FalseScheduleのジャンプ先の設定
+		OpBuffer[FalseSchedule]=obp-(FalseSchedule+1);
+
+		//xor eax,eax（eaxを0にする）
+		op_zero_reg(REG_EAX);
+
+		//jmp 5（演算終了位置へジャンプ）
+		OpBuffer[obp++]=(char)0xEB;
+		OpBuffer[obp++]=(char)0x05;
+
+		//TrueScheduleのジャンプ先の設定
+		OpBuffer[TrueSchedule1]=obp-(TrueSchedule1+1);
+		OpBuffer[TrueSchedule2]=obp-(TrueSchedule2+1);
+
+		//mov eax,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		///////////////////
+		//32ビット整数演算
+		///////////////////
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//mov ecx,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		if(IsSignedType(AnswerType)){
+			//符号あり演算
+
+			//jl 5（次のmovを飛び越す）
+			OpBuffer[obp++]=(char)0x7C;
+			OpBuffer[obp++]=(char)0x05;
+		}
+		else{
+			//符号なし演算
+
+			//jb 5（次のmovを飛び越す）
+			OpBuffer[obp++]=(char)0x72;
+			OpBuffer[obp++]=(char)0x05;
+		}
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+
+	sp--;
+	type_stack[sp-1]=DEF_LONG;
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Relation_Q(int *type_stack,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2]>value[sp-1]
+
+	int sp;
+	sp=*pStackPointer;
+
+	int AnswerType;
+	AnswerType=NeutralizationType(type_stack[sp-2],index_stack[sp-2],type_stack[sp-1],index_stack[sp-1]);
+
+	if(IsRealNumberType(AnswerType)){
+		//////////////
+		// 実数演算
+		//////////////
+
+		if(type_stack[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(type_stack[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type_stack[sp-1]==DEF_INT64||type_stack[sp-1]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else{	//Long、DWord
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+
+		if(type_stack[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type_stack[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+		}
+		else if(type_stack[sp-2]==DEF_INT64||type_stack[sp-2]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{	//Long、DWord
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//mov ecx,0xFFFFFFFF
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//test ah,41
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x41;
+
+		//je 5
+		OpBuffer[obp++]=(char)0x74;
+		OpBuffer[obp++]=(char)0x05;
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(Is64Type(AnswerType)){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+		int FalseSchedule,
+			TrueSchedule1,
+			TrueSchedule2;
+
+		// 第1項 > 第2項
+
+		//第1項 edx:eax
+		//第2項 ecx:ebx
+		GetStackData_ToRegister(type_stack,sp);
+
+		//cmp edx,ecx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xD1;
+
+		if(IsSignedType(AnswerType)){
+			//符号有り
+
+			//jg TrueSchedule1（真へジャンプ）
+			OpBuffer[obp++]=(char)0x7F;
+		}
+		else{
+			//符号無し
+
+			//ja TrueSchedule1（真へジャンプ）
+			OpBuffer[obp++]=(char)0x77;
+		}
+		TrueSchedule1=obp;
+		obp++;
+
+		if(IsSignedType(AnswerType)){
+			//符号有り
+
+			//jl FalseSchedule（偽へジャンプ）
+			OpBuffer[obp++]=(char)0x7C;
+		}
+		else{
+			//符号無し
+
+			//jb FalseSchedule（偽へジャンプ）
+			OpBuffer[obp++]=(char)0x72;
+		}
+		FalseSchedule=obp;
+		obp++;
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//ja TrueSchedule2（真へジャンプ）
+		OpBuffer[obp++]=(char)0x77;
+		TrueSchedule2=obp;
+		obp++;
+
+		//FalseScheduleのジャンプ先の設定
+		OpBuffer[FalseSchedule]=obp-(FalseSchedule+1);
+
+		//xor eax,eax（eaxを0にする）
+		op_zero_reg(REG_EAX);
+
+		//jmp 5（演算終了位置へジャンプ）
+		OpBuffer[obp++]=(char)0xEB;
+		OpBuffer[obp++]=(char)0x05;
+
+		//TrueScheduleのジャンプ先の設定
+		OpBuffer[TrueSchedule1]=obp-(TrueSchedule1+1);
+		OpBuffer[TrueSchedule2]=obp-(TrueSchedule2+1);
+
+		//mov eax,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		////////////////////
+		// 32ビット整数演算
+		////////////////////
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//mov ecx,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		if(IsSignedType(AnswerType)){
+			//jg 5（次のmovを飛び越す）
+			OpBuffer[obp++]=(char)0x7F;
+			OpBuffer[obp++]=(char)0x05;
+		}
+		else{
+			//ja 5（次のmovを飛び越す）
+			OpBuffer[obp++]=(char)0x77;
+			OpBuffer[obp++]=(char)0x05;
+		}
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+
+	sp--;
+	type_stack[sp-1]=DEF_LONG;
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Relation_NotEqual(int *type,int *pStackPointer){
+	//value[sp-2]<>value[sp-1]
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(type[sp-2]==DEF_DOUBLE||type[sp-2]==DEF_SINGLE||
+		type[sp-1]==DEF_DOUBLE||type[sp-1]==DEF_SINGLE){
+		//////////////
+		// 実数演算
+		//////////////
+
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else{	//Long、DWord
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+		}
+		else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{	//Long、DWord
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//mov ecx,0xFFFFFFFF
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//test ah,40
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x40;
+
+		//je 5
+		OpBuffer[obp++]=(char)0x74;
+		OpBuffer[obp++]=(char)0x05;
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD||
+		type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+		int TrueSchedule1,
+			TrueSchedule2;
+
+		// 第1項 <> 第2項
+
+		//第1項 edx:eax
+		//第2項 ecx:ebx
+		GetStackData_ToRegister(type,sp);
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//jnz TrueSchedule1（真へジャンプ）
+		OpBuffer[obp++]=(char)0x75;
+		TrueSchedule1=obp;
+		obp++;
+
+		//cmp edx,ecx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xD1;
+
+		//jnz TrueSchedule2（真へジャンプ）
+		OpBuffer[obp++]=(char)0x75;
+		TrueSchedule2=obp;
+		obp++;
+
+		//xor eax,eax（eaxを0にする）
+		op_zero_reg(REG_EAX);
+
+		//jmp 5（演算終了位置へジャンプ）
+		OpBuffer[obp++]=(char)0xEB;
+		OpBuffer[obp++]=(char)0x05;
+
+		//TrueScheduleのジャンプ先の設定
+		OpBuffer[TrueSchedule1]=obp-(TrueSchedule1+1);
+		OpBuffer[TrueSchedule2]=obp-(TrueSchedule2+1);
+
+		//mov eax,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		////////////////////
+		// 32ビット整数演算
+		////////////////////
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//xor eax,ebx
+		OpBuffer[obp++]=(char)0x33;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//jz 5（次のmovを飛び越す）
+		OpBuffer[obp++]=(char)0x74;
+		OpBuffer[obp++]=(char)0x05;
+
+		//mov eax,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+
+	sp--;
+	type[sp-1]=DEF_LONG;
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Relation_Equal(int *type,int *pStackPointer){
+	//value[sp-2]=value[sp-1]
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(type[sp-2]==DEF_DOUBLE||type[sp-2]==DEF_SINGLE||
+		type[sp-1]==DEF_DOUBLE||type[sp-1]==DEF_SINGLE){
+		//////////////
+		// 実数演算
+		//////////////
+
+		if(type[sp-1]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(type[sp-1]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else{	//Long、DWord
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+
+		if(type[sp-2]==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(type[sp-2]==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+		}
+		else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+			//64ビット整数値
+
+			//fild qword ptr[esp]
+			op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else{	//Long、DWord
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		//fcompp
+		OpBuffer[obp++]=(char)0xDE;
+		OpBuffer[obp++]=(char)0xD9;
+
+		//fnstsw ax
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0xE0;
+
+		//mov ecx,0xFFFFFFFF
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//test ah,40
+		OpBuffer[obp++]=(char)0xF6;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)0x40;
+
+		//jne 5
+		OpBuffer[obp++]=(char)0x75;
+		OpBuffer[obp++]=(char)0x05;
+
+		//mov ecx,0
+		OpBuffer[obp++]=(char)0xB9;
+		*((long *)(OpBuffer+obp))=0;
+		obp+=sizeof(long);
+
+		//mov dword ptr[esp],ecx
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x0C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD||
+		type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		////////////////////
+		// 64ビット整数演算
+		////////////////////
+		int FalseSchedule1,
+			FalseSchedule2;
+
+		// 第1項 == 第2項
+
+		//第1項 edx:eax
+		//第2項 ecx:ebx
+		GetStackData_ToRegister(type,sp);
+
+		//cmp eax,ebx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//jnz FalseSchedule1（偽へジャンプ）
+		OpBuffer[obp++]=(char)0x75;
+		FalseSchedule1=obp;
+		obp++;
+
+		//cmp edx,ecx
+		OpBuffer[obp++]=(char)0x3B;
+		OpBuffer[obp++]=(char)0xD1;
+
+		//jnz FalseSchedule2（偽へジャンプ）
+		OpBuffer[obp++]=(char)0x75;
+		FalseSchedule2=obp;
+		obp++;
+
+		//mov eax,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//jmp 2（演算終了位置へジャンプ）
+		OpBuffer[obp++]=(char)0xEB;
+		OpBuffer[obp++]=(char)0x02;
+
+		//FalseScheduleのジャンプ先の設定
+		OpBuffer[FalseSchedule1]=obp-(FalseSchedule1+1);
+		OpBuffer[FalseSchedule2]=obp-(FalseSchedule2+1);
+
+		//xor eax,eax（eaxを0にする）
+		op_zero_reg(REG_EAX);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		////////////////////
+		// 32ビット整数演算
+		////////////////////
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//xor eax,ebx
+		OpBuffer[obp++]=(char)0x33;
+		OpBuffer[obp++]=(char)0xC3;
+
+		//jz 5（次のmovを飛び越す）
+		OpBuffer[obp++]=(char)0x74;
+		OpBuffer[obp++]=(char)0x05;
+
+		//mov eax,0FFFFFFFFh
+		OpBuffer[obp++]=(char)0xB8;
+		*((long *)(OpBuffer+obp))=0xFFFFFFFF;
+		obp+=sizeof(long);
+
+		//not eax
+		OpBuffer[obp++]=(char)0xF7;
+		OpBuffer[obp++]=(char)0xD0;
+
+		//mov dword ptr[esp],eax
+		OpBuffer[obp++]=(char)0x89;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+
+	sp--;
+	type[sp-1]=DEF_LONG;
+
+	*pStackPointer=sp;
+	return 1;
+}
Index: /BasicCompiler32/NumOpe_TypeOperation.cpp
===================================================================
--- /BasicCompiler32/NumOpe_TypeOperation.cpp	(revision 3)
+++ /BasicCompiler32/NumOpe_TypeOperation.cpp	(revision 3)
@@ -0,0 +1,213 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void ExtendStackTo32(int type);
+void ExtendStackTo64(int type){
+	if(Is64Type(type)) return;
+
+	//32ビットに拡張
+	ExtendStackTo32(type);
+
+	//64ビットに拡張
+	if(IsSignedType(type)){
+		//符号あり
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//cdq
+		op_cdq();
+
+		//push edx
+		op_push(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else{
+		//符号なし
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//push 0
+		op_push_value(0);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+}
+void ExtendStackTo32(int type){
+	if(GetTypeSize(type,-1)==sizeof(long)) return;
+
+	if(Is64Type(type)){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_INTEGER){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//movsx eax,ax
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBF;
+		OpBuffer[obp++]=(char)0xC0;
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_WORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//and eax,0000FFFFh
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=0x0000FFFF;
+		obp+=sizeof(long);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_CHAR){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//movsx eax,al
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBE;
+		OpBuffer[obp++]=(char)0xC0;
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_BYTE){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//and eax,000000FFh
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=0x000000FF;
+		obp+=sizeof(long);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+}
+void ExtendStackTo16(int type){
+	if(type==DEF_CHAR){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//movsx eax,al
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0xBE;
+		OpBuffer[obp++]=(char)0xC0;
+
+		//push eax
+		op_push(REG_EAX);
+	}
+	else if(type==DEF_BYTE){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//and eax,000000FFh
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=0x000000FF;
+		obp+=sizeof(long);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+}
+void ExtendStackTo8(int type){
+	if(Is64Type(type)){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+}
+
+
+void ChangeTypeToWhole(int OldType,int NewType){
+	if(OldType==DEF_DOUBLE){
+		if(Is64Type(NewType)){
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//fistp qword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDF;
+			OpBuffer[obp++]=(char)0x3C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+		else{
+			//fld qword ptr[esp]
+			op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			op_add_esp(4);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+	}
+	else if(OldType==DEF_SINGLE){
+		if(Is64Type(NewType)){
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//sub esp,4
+			op_sub_esp(4);
+
+			//fistp qword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDF;
+			OpBuffer[obp++]=(char)0x3C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+		else{
+			//fld dword ptr[esp]
+			op_fld_ptr_esp(DEF_SINGLE);
+
+			//fistp dword ptr[esp]
+			fpu_cast();
+			OpBuffer[obp++]=(char)0xDB;
+			OpBuffer[obp++]=(char)0x1C;
+			OpBuffer[obp++]=(char)0x24;
+			fpu_cast_end();
+		}
+	}
+	else{
+		//整数から整数へ変換
+
+		if(Is64Type(NewType)){
+			ExtendStackTo64(OldType);
+		}
+		else if(GetTypeSize(NewType,-1)==sizeof(long)){
+			ExtendStackTo32(OldType);
+		}
+		else if(GetTypeSize(NewType,-1)==sizeof(short)){
+			ExtendStackTo16(OldType);
+		}
+		else if(GetTypeSize(NewType,-1)==sizeof(char)){
+			ExtendStackTo8(OldType);
+		}
+	}
+}
Index: /BasicCompiler32/Opcode.h
===================================================================
--- /BasicCompiler32/Opcode.h	(revision 3)
+++ /BasicCompiler32/Opcode.h	(revision 3)
@@ -0,0 +1,313 @@
+//Opcode.h
+
+//未定義の定数情報
+#define IMAGE_FILE_MACHINE_AMD64 0x8664
+
+
+//レジスタを示す定数
+#define REG_EAX 0x00	//reg:000
+#define REG_ECX 0x01	//reg:001
+#define REG_EDX 0x02	//reg:010
+#define REG_EBX 0x03	//reg:011
+#define REG_ESP 0x04	//reg:100
+#define REG_EBP 0x05	//reg:101
+#define REG_ESI 0x06	//reg:110
+#define REG_EDI 0x07	//reg:111
+
+#define REG_RAX REG_EAX
+#define REG_RCX REG_ECX
+#define REG_RDX REG_EDX
+#define REG_RBX REG_EBX
+#define REG_RSP REG_ESP
+#define REG_RBP REG_EBP
+#define REG_RSI REG_ESI
+#define REG_RDI REG_EDI
+
+#define REGISTER_OPERAND(reg) (reg&0x07)
+
+//変数の種類
+#define NON_VAR			0
+#define VAR_GLOBAL		1	//Global Variable
+#define VAR_LOCAL		2	//Local Variable
+#define VAR_REFLOCAL	3	//Local Refference Variable
+#define VAR_DIRECTMEM	4	//Direct memory
+
+extern int cp;
+extern int obp;
+extern char *OpBuffer;
+
+//ラベルアドレス
+struct LABEL{
+	char *pName;
+	int line;
+	DWORD address;
+};
+
+//Goto未知ラベル
+struct GOTOLABELSCHEDULE{
+	char *pName;
+	int line;
+	DWORD pos;
+	DWORD now_cp;
+};
+
+//プロシージャの種類
+#define PROC_DEFAULT	1	//ユーザー定義関数
+#define PROC_DLL		2	//DLL関数
+#define PROC_BUILTIN	3	//コンパイラ埋め込み型
+#define PROC_PTR		4	//関数ポインタ
+
+//プロシージャ
+struct PROCEDURE{
+	char name[255];
+	int address;
+	int types[MAX_PARMS];
+	_int8 ByVal[MAX_PARMS];
+	BOOL ReturnType;
+};
+
+//With情報
+struct WITHINFO{
+	char **ppName;
+	int *pWithCp;
+	int num;
+};
+
+
+//MakePeHdr.cpp
+int AddDataTable(char *buffer,int length);
+
+//RSrcSection.cpp
+char *GetRSrcSectionBuffer(int *pLen);
+
+//Compile.cpp
+void ChangeOpcode(char *Command);
+void GetGlobalDataForDll(void);
+DWORD CompileBuffer(char Return_Sequence,WORD Return_Command);
+
+//Compile_Calc.cpp
+void ChangeTypeToDouble_ToFpuReg(int OldType);
+void ChangeTypeToDouble(int OldType);
+void ChangeTypeToSingle(int OldType);
+void ChangeTypeToInt64(int OldType);
+void ChangeTypeToLong(int OldType);
+void ChangeTypeToInteger(int OldType);
+void ChangeTypeToByte(int OldType);
+void OpcodeCalc(char *Command);
+
+//NumOpe.cpp
+void PushReturnValue(int type);
+int NumOpe(char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap=0);
+
+//NumOpe_Arithmetic.cpp
+void GetStackData_ToRegister(int *type,int sp);
+BOOL CalcTwoTerm_Arithmetic(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Mod(int *type,int *pStackPointer);
+BOOL Calc_Divide(int *type,int *pStackPointer,int BaseType);
+BOOL Calc_IntDivide(int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_MinusMark(int *type,int sp);
+BOOL Calc_Power(int *type,int *pStackPointer);
+BOOL Calc_Cast(int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_SHL(int *type,int *pStackPointer);
+BOOL Calc_SHR(int *type,int *pStackPointer);
+
+//NumOpe_Logical.cpp
+BOOL Calc_Xor(int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Or(int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_And(int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Not(int *type,int sp);
+
+//NumOpe_Relation.cpp
+BOOL Calc_Relation_PE(int *type_stack,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Relation_QE(int *type_stack,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Relation_P(int *type_stack,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Relation_Q(int *type_stack,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Relation_NotEqual(int *type,int *pStackPointer);
+BOOL Calc_Relation_Equal(int *type,int *pStackPointer);
+
+//NumOpe_TypeOperation.cpp
+void ExtendStackTo64(int type);
+void ChangeTypeToWhole(int OldType,int NewType);
+
+//Compile_Set_Var.cpp
+BOOL IsUse_ecx(RELATIVE_VAR *pRelativeVar);
+void SetObjectVariable(LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,BOOL bUseHeap);
+void SetDoubleVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
+void SetSingleVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
+void SetInt64Variable(int type,RELATIVE_VAR *pRelative);
+void SetDWordVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
+void SetLongVariable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
+void Set16Variable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
+void Set8Variable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset);
+
+//increment.cpp
+void IncDec(int idCalc, char *lpszLeft, char *lpszRight);
+
+//calc2.cpp
+#define EXP_TYPE_NUMBER	1
+#define EXP_TYPE_EAX	2
+#define EXP_TYPE_FPU	3
+#define EXP_TYPE_VAR	4
+int NumOpEx(char *Command,double *pDbl,DWORD *pdwType,RELATIVE_VAR *pRelativeVar);
+
+//SetVar.cpp
+BOOL SetVariable(DWORD dwVarType,RELATIVE_VAR *pVarRelativeVar,
+				 DWORD dwExpType,DWORD dwType,void *data);
+
+//Compile_Calc_PushVar.cpp
+void SetReg_RealVariable(int type,RELATIVE_VAR *pRelativeVar);
+void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg);
+void PushDoubleVariable(RELATIVE_VAR *pRelativeVar);
+void PushLongVariable(RELATIVE_VAR *pRelativeVar);
+void PushIntegerVariable(RELATIVE_VAR *pRelativeVar);
+void PushWordVariable(RELATIVE_VAR *pRelativeVar);
+void PushCharVariable(RELATIVE_VAR *pRelativeVar);
+void PushByteVariable(RELATIVE_VAR *pRelativeVar);
+
+//Compile_Object.cpp
+int Operator_New(char *Parameter,LONG_PTR *plpIndex);
+void OpcodeDelete(char *Parameter);
+
+//Compile_Var.cpp
+void GetWithName(char *buffer);
+void SetThisPtrToReg(int reg);
+BOOL GetVarOffset(BOOL bError,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
+BOOL SetInitGlobalData(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf);
+#define DIMFLAG_INITDEBUGVAR 1
+#define DIMFLAG_NONCALL_CONSTRACTOR 2
+#define DIMFLAG_STATIC 4
+void OpcodeDim(char *Parameter,DWORD dwFlag);
+void SetVarPtrToEax(RELATIVE_VAR *pRelativeVar);
+
+//CParameter.cpp
+#define OVERLOAD_LEVEL1 1
+#define OVERLOAD_LEVEL2 2
+#define OVERLOAD_LEVEL3 3
+class CParameter{
+	char *Parms[255];
+	TYPEINFO types[255];
+	int ParmsNum;
+
+	TYPEINFO ReturnTypeInfo;
+
+public:
+	CParameter(char *buffer);
+	CParameter(PARAMETER_INFO *pParamInfo,int ParmNum);
+	~CParameter();
+	void SetReturnType(TYPEINFO *pTypeInfo);
+
+private:
+	BOOL _overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level);
+	SUBINFO *OverloadSolutionWithReturnType(char *name,SUBINFO **ppsi,int num);
+public:
+	SUBINFO *OverloadSolution(char *name,SUBINFO **ppsi,int num);
+
+	BOOL ErrorCheck(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
+	void MacroParameterSupport(PARAMETER_INFO *ppi);
+	void SetObjectParameter(CClass *pobj_Class,LPSTR Parameter);
+	int SetParameter(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
+};
+
+//Compile_CallProc.cpp
+void AddLocalVarAddrSchedule();
+int CallProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex);
+BOOL CallPropertyMethod(char *variable,char *RightSide,TYPEINFO *pRetTypeInfo);
+#define PROCFLAG_NEW	1
+int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex);
+int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType);
+int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex);
+
+//Compile_ProcOp.cpp
+void CompileLocal();
+
+//Compile_Func.cpp
+int GetFunctionType(int FuncNum);
+int GetFunctionFromName(char *FuncName);
+int Opcode_CallFunc(char *Parameter,int FuncNum);
+
+//OperatorProc.cpp
+void FreeTempObject(int reg,CClass *pobj_c);
+int CallOperatorProc(int idCalc,TYPEINFO *pBaseTypeInfo,int *type,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp);
+void CallCastOperatorProc(int &CalcType,LONG_PTR &lpCalcIndex,BOOL bCalcUseHeap,int ToType,LONG_PTR lpToIndex);
+void CallArrayOperatorProc(CClass *pobj_Class,char *ObjectName,char *Parameter,TYPEINFO &RetTypeInfo);
+
+//Compile_Statement.cpp
+void OpcodeOthers(char *Command);
+void OpcodeIf(char *Parameter);
+void OpcodeGoto(char *Parameter);
+void OpcodeWhile(char *Parameter);
+void OpcodeExitWhile(void);
+void OpcodeFor(char *Parameter);
+void OpcodeExitFor(void);
+void OpcodeDo(char *Parameter);
+void OpcodeExitDo(void);
+void OpcodeContinue(void);
+void OpcodeExitSub(void);
+void OpcodeSelect(char *Parameter);
+void OpcodeCase(char *Parameter);
+void OpcodeGosub(char *Parameter);
+void OpcodeReturn(char *Parameter);
+void Opcode_Input(char *Parameter);
+void Opcode_Print(char *Parameter,BOOL bWrite);
+void OpcodeCallPtr(char *Parameter);
+void OpcodeSetPtrData(char *Parameter,int type);
+
+
+
+
+////////////////////////////////
+// IA-32機械語生成に利用する関数郡
+////////////////////////////////
+
+//Mod（モード）
+#define MOD_BASE		(char)0x00
+#define MOD_DISP32		(char)0xFF
+#define MOD_BASE_DISP8	(char)0x40
+#define MOD_BASE_DISP32	(char)0x80
+#define MOD_REG				(char)0xC0
+
+#define USE_OFFSET 1
+#define NON_OFFSET 0
+
+//op32_main.cpp
+BOOL IsSafeReg(int reg);
+void op_mov_RV			(int reg,int offset);
+void op_mov_RV			(int op_size,int reg,int offset);
+void op_mov_RR			(int reg1,int reg2);
+void op_mov_RM			(int op_size,int reg,int base_reg,int offset,char mod);
+void op_mov_RM_ex		(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
+void op_mov_MR			(int op_size,int reg,int base_reg,int offset,char mod);
+void op_mov_MR_ex		(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
+void op_movsx_R32R16	(int reg32,int reg16);
+void op_movsx_R32R8		(int reg32,int reg8);
+void op_movsx_R16R8		(int reg16,int reg8);
+void op_inc				(int reg);
+void op_dec				(int reg);
+void op_add_RV8			(int reg,char cValue);
+void op_add_RM			(int op_size,int reg,int base_reg,int offset,char mod);
+void op_adc_RV8			(int reg,char cValue);
+void op_sub_RV8			(int reg,char cValue);
+void op_sbb_RV8			(int reg,char cValue);
+void op_and_RV			(int reg,int value);
+void op_cdq				();
+
+void op_rep_movs		(int op_size);
+
+void op_push(int reg);
+void op_push_value(long data);
+void op_pop(int reg);
+void op_add_esp(int num);
+void op_sub_esp(int num);
+void op_test(int reg1,int reg2);
+void op_fld_ptr_esp(int type);
+void op_fld_basereg			(int type,int base_reg);
+void op_fld_base_offset		(int type,int base_reg,int offset);
+void op_fld_base_offset_ex	(int type,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
+void op_fstp_basereg		(int type,int base_reg);
+void op_fstp_base_offset	(int type,int base_reg,int offset);
+void op_fstp_base_offset_ex	(int type,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
+void op_zero_reg(int reg);
+void fpu_cast();
+void fpu_cast_end();
+
+void op_call(SUBINFO *psi);
Index: /BasicCompiler32/OperatorProc.cpp
===================================================================
--- /BasicCompiler32/OperatorProc.cpp	(revision 3)
+++ /BasicCompiler32/OperatorProc.cpp	(revision 3)
@@ -0,0 +1,287 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void FreeTempObject(int reg,CClass *pobj_c){
+	if(!IsSafeReg(reg)) SetError(300,NULL,cp);
+
+	if(pobj_c->DestructorMemberSubIndex!=-1){
+		//push reg
+		op_push(reg);
+
+		//call DestructorProcAddr
+		op_call(pobj_c->ppobj_Method[pobj_c->DestructorMemberSubIndex]->psi);
+	}
+
+	//push reg
+	op_push(reg);
+
+	//call free
+	extern SUBINFO *pSub_free;
+	op_call(pSub_free);
+}
+
+int CallOperatorProc(int idCalc,TYPEINFO *pBaseTypeInfo,int *type,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp){
+	//オーバーロードされたオペレータ関数を呼び出す
+	CClass *pobj_c;
+	pobj_c=(CClass *)index_stack[sp-2];
+
+	SUBINFO **ppsi;
+	int num;
+	ppsi=pobj_c->GetOperatorSubInfo(idCalc,num);
+	if(num==0){
+		HeapDefaultFree(ppsi);
+
+		return 0;
+	}
+
+
+	//項の数
+	BOOL bTwoTerm=1;
+	if(idCalc==CALC_AS) bTwoTerm=0;
+
+
+	int i;
+	BOOL bReturnTypeIsObject=1;
+	TYPEINFO ReturnType={DEF_OBJECT,ppsi[0]->u.ReturnIndex};
+	for(i=0;i<num;i++){
+		if(ppsi[i]->ReturnType!=DEF_OBJECT)
+			bReturnTypeIsObject=0;
+	}
+
+	if(bReturnTypeIsObject==0){
+		if(pBaseTypeInfo){
+			if(pBaseTypeInfo->type==DEF_OBJECT){
+				bReturnTypeIsObject=1;
+				ReturnType.u.lpIndex=pBaseTypeInfo->u.lpIndex;
+			}
+		}
+	}
+
+
+
+	/////////////////////////////////////////////
+	// オーバーロード解決用のパラメータを設定
+	/////////////////////////////////////////////
+
+	PARAMETER_INFO *ppi;
+	int iParmNum=0;
+
+	//_System_LocalThis
+	ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);
+	ppi[iParmNum].bArray=0;
+	ppi[iParmNum].bByVal=0;
+	ppi[iParmNum].name=0;
+	ppi[iParmNum].type=DEF_PTR_VOID;
+	ppi[iParmNum].u.index=-1;
+	ppi[iParmNum].SubScripts[0]=-1;
+	iParmNum++;
+
+	if(bTwoTerm){
+		ppi[iParmNum].bArray=0;
+		ppi[iParmNum].bByVal=0;
+		ppi[iParmNum].name=0;
+		ppi[iParmNum].type=type[sp-1];
+		ppi[iParmNum].u.index=index_stack[sp-1];
+		ppi[iParmNum].SubScripts[0]=-1;
+		iParmNum++;
+	}
+
+
+	//オーバーロードを解決
+	char temporary[255];
+	if(idCalc==CALC_EQUAL) lstrcpy(temporary,"==");
+	else GetCalcName(idCalc,temporary);
+	SUBINFO *psi;
+	psi=OverloadSolution(temporary,ppsi,num,ppi,iParmNum,pBaseTypeInfo);
+	HeapDefaultFree(ppsi);
+
+	if(!psi){
+		HeapDefaultFree(ppi);
+		return -1;
+	}
+	else{
+		//オーバーロードされていないが、パラメータ個数が一致しないとき
+		if(iParmNum!=psi->ParmNum){
+			HeapDefaultFree(ppi);
+			return -1;
+		}
+	}
+
+	for(i=0;i<iParmNum;i++){
+		CheckDifferentType(
+			psi->pParmInfo[i].type,
+			psi->pParmInfo[i].u.index,
+			ppi[i].type,
+			ppi[i].u.index,
+			"",
+			i);
+	}
+
+	HeapDefaultFree(ppi);
+
+	int right_side_size;
+	if(type[sp-1]==DEF_OBJECT) right_side_size=PTR_SIZE;
+	else right_side_size=GetTypeSize(type[sp-1],index_stack[sp-1]);
+
+	if(bTwoTerm){
+		if(psi->pParmInfo[1].type==DEF_OBJECT&&psi->pParmInfo[1].bByVal){
+			//一時オブジェクトはメソッド内で破棄される
+			bUseHeap[sp-1]=0;
+		}
+	}
+
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//////////////////////////////////////////////////////
+		// 戻り値にオブジェクト インスタンスを持つ場合
+		// ※ByRef _System_ReturnObject パラメータ用領域を取得
+		//////////////////////////////////////////////////////
+
+		int object_size;
+		object_size=GetSizeOfClass(psi->u.Return_pobj_c);
+
+		//push object_size
+		op_push_value(object_size);
+
+		//call calloc
+		extern SUBINFO *pSub_calloc;
+		op_call(pSub_calloc);
+
+		//mov ebx,eax
+		op_mov_RR(REG_EBX,REG_EAX);
+	}
+
+
+	//2つの項を取り出す
+	if(bTwoTerm){
+		if(right_side_size==sizeof(_int64)){
+			//pop eax
+			op_pop(REG_EAX);
+
+			//pop edx
+			op_pop(REG_EDX);
+		}
+		else{
+			//pop eax
+			op_pop(REG_EAX);
+		}
+	}
+
+	//pop ecx
+	op_pop(REG_ECX);
+
+
+	//ヒープ解放用に退避
+	if(bUseHeap[sp-1]){
+		//mov esi,eax
+		op_mov_RR(REG_ESI,REG_EAX);
+	}
+	if(bUseHeap[sp-2]){
+		//mov edi,ecx
+		op_mov_RR(REG_EDI,REG_ECX);
+	}
+
+
+
+	if(bTwoTerm){
+		if(right_side_size==sizeof(_int64)){
+			//push edx
+			op_push(REG_EDX);
+
+			//push eax
+			op_push(REG_EAX);
+		}
+		else{
+			//push eax
+			op_push(REG_EAX);
+		}
+	}
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//push ebx
+		op_push(REG_EBX);
+	}
+
+	//push ecx
+	op_push(REG_ECX);
+
+	//call operator_proc
+	op_call(psi);
+
+	if(psi->ReturnType!=-1){
+		//スタックへプッシュ
+		PushReturnValue(psi->ReturnType);
+	}
+
+	if(bUseHeap[sp-1]){
+		FreeTempObject(REG_ESI,(CClass *)index_stack[sp-1]);
+	}
+	if(bUseHeap[sp-2]){
+		FreeTempObject(REG_EDI,(CClass *)index_stack[sp-2]);
+	}
+
+	sp--;
+	type[sp-1]=psi->ReturnType;
+	index_stack[sp-1]=psi->u.ReturnIndex;
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//Object型が戻ったときはヒープ領域にインスタンスが格納されている
+		//※後にfreeする必要あり
+		bUseHeap[sp-1]=1;
+	}
+	else bUseHeap[sp-1]=0;
+
+	return 1;
+}
+
+void CallCastOperatorProc(int &CalcType,LONG_PTR &lpCalcIndex,BOOL bCalcUseHeap,int ToType,LONG_PTR lpToIndex){
+	int type[10];
+	LONG_PTR index_stack[10];
+	BOOL array_bUseHeap[10];
+	int sp=2;
+
+	if(bCalcUseHeap){
+		//未解放のインスタンスが存在する旨を示す警告
+		SetError(-105,NULL,cp);
+	}
+
+	//左辺
+	type[0]=CalcType;
+	index_stack[0]=lpCalcIndex;
+	array_bUseHeap[0]=0;
+	type[1]=ToType;
+	index_stack[1]=lpToIndex;
+	array_bUseHeap[1]=0;
+
+	TYPEINFO BaseTypeInfo={ToType,lpToIndex};
+
+	int iRet;
+	iRet=CallOperatorProc(CALC_AS,&BaseTypeInfo,type,index_stack,array_bUseHeap,sp);
+	if(iRet==1){
+		//成功したとき
+		CalcType=type[0];
+		lpCalcIndex=index_stack[0];
+		return;
+	}
+	else if(iRet==-1){
+		//エラーが発行されたとき
+		return;
+	}
+
+	//エラーを発行
+	SetError(-1,"キャスト演算子がオーバーロードされていません。",cp);
+}
+void CallArrayOperatorProc(CClass *pobj_Class,char *ObjectName,char *Parameter,TYPEINFO &RetTypeInfo){
+	SUBINFO **ppsi;
+	int num;
+	ppsi=pobj_Class->GetOperatorSubInfo(CALC_ARRAY_GET,num);
+	if(num==0){
+		HeapDefaultFree(ppsi);
+
+		return;
+	}
+
+	RetTypeInfo.type=Opcode_CallProc(Parameter,ppsi[0],&RetTypeInfo.u.lpIndex,0,ObjectName,DEF_OBJECT);
+
+	HeapDefaultFree(ppsi);
+}
Index: /BasicCompiler32/VarList.cpp
===================================================================
--- /BasicCompiler32/VarList.cpp	(revision 3)
+++ /BasicCompiler32/VarList.cpp	(revision 3)
@@ -0,0 +1,1322 @@
+#include "../BasicCompiler_Common/common.h"
+
+//デバッグ用
+#include "../BasicCompiler_Common/debug.h"
+
+//変数リストのツリーハンドル
+HWND hVarTree_Global,hVarTree_Local,hVarTree_This;
+
+int VarList_Array(HWND hVarTree,HTREEITEM hParent,DWORD offset,int type,int *SubScripts,LONG_PTR lpIndex);
+void VarList_Member(HWND hVarTree,HTREEITEM hParent,DWORD pTopOffset,CClass *pobj_c,BOOL bPtr);
+void VarList_Insert(HWND hVarTree,TV_INSERTSTRUCT *lptv,char *VarName,int type,DWORD offset,LONG_PTR lpIndex){
+	extern HANDLE hDebugProcess;
+	int i2;
+	char temporary[255],temp2[255];
+	DWORD dwData,dwAccessByte;
+	double dbl;
+	float flt;
+	WORD wData;
+	BYTE byteData;
+	HTREEITEM hParent;
+
+	if(type==DEF_OBJECT){
+		sprintf(lptv->item.pszText,"%s %s(&H%X)",VarName,STRING_OBJECT,offset);
+		lptv->item.iImage=1;
+		lptv->item.iSelectedImage=1;
+		hParent=TreeView_InsertItem(hVarTree,lptv);
+
+		VarList_Member(hVarTree,hParent,offset,(CClass *)lpIndex,0);
+		return;
+	}
+	if(type==DEF_PTR_OBJECT){
+		i2=ReadProcessMemory(hDebugProcess,(void *)offset,&dwData,sizeof(DWORD),&dwAccessByte);
+
+		sprintf(lptv->item.pszText,"%s %s(&H%X)",VarName,STRING_POINTEROFOBJECT,dwData);
+		lptv->item.iImage=4;
+		lptv->item.iSelectedImage=4;
+		hParent=TreeView_InsertItem(hVarTree,lptv);
+
+		if(i2) VarList_Member(hVarTree,hParent,dwData,(CClass *)lpIndex,1);
+		return;
+	}
+	else{
+		if(type==DEF_PTR_BYTE){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&dwData,sizeof(DWORD),&dwAccessByte)){
+				for(i2=0;;i2++){
+					if(!ReadProcessMemory(hDebugProcess,(void *)(dwData+i2),&temporary[i2],1,&dwAccessByte)){
+						i2=-1;
+						break;
+					}
+					if(temporary[i2]=='\0') break;
+					if(i2==64){
+						lstrcpy(temporary+i2,"...");
+						break;
+					}
+				}
+				if(i2==-1) sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,dwData,dwData);
+				else sprintf(lptv->item.pszText,"%s %d(&H%X) \"%s\"",VarName,dwData,dwData,temporary);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_DOUBLE){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&dbl,sizeof(double),&dwAccessByte)){
+				sprintf(lptv->item.pszText,"%s %.15g",VarName,dbl);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_SINGLE){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&flt,sizeof(float),&dwAccessByte)){
+				sprintf(lptv->item.pszText,"%s %.6g",VarName,flt);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_INT64){
+			_int64 i64data;
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&dwAccessByte)){
+				_i64toa(i64data,temporary,10);
+				_i64toa(i64data,temp2,16);
+				CharUpper(temp2);
+				sprintf(lptv->item.pszText,"%s %s(&H%s)",VarName,temporary,temp2);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_QWORD){
+			_int64 i64data;
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&dwAccessByte)){
+				_ui64toa(i64data,temporary,10);
+				_ui64toa(i64data,temp2,16);
+				CharUpper(temp2);
+				sprintf(lptv->item.pszText,"%s %s(&H%s)",VarName,temporary,temp2);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_LONG){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&dwData,sizeof(DWORD),&dwAccessByte)){
+				sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,dwData,dwData);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_DWORD||IsPtrType(type)){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&dwData,sizeof(DWORD),&dwAccessByte)){
+				sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,dwData,dwData);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_INTEGER){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&dwAccessByte)){
+				sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,(short)wData,(short)wData);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_WORD){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&dwAccessByte)){
+				sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,wData,wData);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_CHAR){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&dwAccessByte)){
+				temporary[0]=byteData;
+				temporary[1]=0;
+				sprintf(lptv->item.pszText,"%s %d(&H%X)'%s'",VarName,(char)byteData,byteData,temporary);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_BYTE){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&dwAccessByte)){
+				temporary[0]=byteData;
+				temporary[1]=0;
+				sprintf(lptv->item.pszText,"%s %d(&H%X)'%s'",VarName,byteData,byteData,temporary);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		lptv->item.iImage=2;
+		lptv->item.iSelectedImage=2;
+	}
+	TreeView_InsertItem(hVarTree,lptv);
+}
+void VarList_Member(HWND hVarTree,HTREEITEM hParent,DWORD pTopOffset,CClass *pobj_c,BOOL bPtr){
+	int i,i2;
+	char VarData[VN_SIZE],VarName[VN_SIZE];
+	TV_INSERTSTRUCT tv;
+
+	memset(&tv,0,sizeof(TV_INSERTSTRUCT));
+	tv.hInsertAfter=TVI_LAST;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.hParent=hParent;
+	tv.item.pszText=VarData;
+
+	for(i=0;i<pobj_c->iMemberNum;i++){
+		if(bPtr){
+			lstrcpy(VarName,"->");
+			lstrcat(VarName,pobj_c->ppobj_Member[i]->name);
+		}
+		else{
+			lstrcpy(VarName,".");
+			lstrcat(VarName,pobj_c->ppobj_Member[i]->name);
+		}
+
+		LONG_PTR offset;
+		offset=GetSizeOfClassMember(pobj_c,pobj_c->ppobj_Member[i]->name,&i2);
+
+		if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
+			//構造体内の配列
+			sprintf(VarData,"%s %s(&H%X)",VarName,STRING_ARRAY,pTopOffset+offset);
+			tv.item.iImage=0;
+			tv.item.iSelectedImage=0;
+			hParent=TreeView_InsertItem(hVarTree,&tv);
+
+			VarList_Array(hVarTree,hParent,
+				pTopOffset+offset,
+				pobj_c->ppobj_Member[i]->TypeInfo.type,
+				pobj_c->ppobj_Member[i]->SubScripts,
+				pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
+		}
+		else{
+			//メンバ変数
+			VarList_Insert(hVarTree,
+				&tv,
+				VarName,
+				pobj_c->ppobj_Member[i]->TypeInfo.type,
+				pTopOffset+offset,
+				pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
+		}
+	}
+}
+int VarList_Array(HWND hVarTree,HTREEITEM hParent,DWORD offset,int type,int *SubScripts,LONG_PTR lpIndex){
+	int i,i2,i3,ElementNum,MemCounter,UseCount[255],TypeSize;
+	char temporary[VN_SIZE],temp2[DIGIT_SIZE];
+
+	TV_INSERTSTRUCT tv;
+	memset(&tv,0,sizeof(TV_INSERTSTRUCT));
+	tv.hInsertAfter=TVI_LAST;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.hParent=hParent;
+	tv.item.pszText=temporary;
+
+	TypeSize=GetTypeSize(type,lpIndex);
+
+	for(i=0;i<255;i++){
+		if(SubScripts[i]==-1) break;
+		UseCount[i]=0;
+	}
+	UseCount[i]=-2;
+	MemCounter=0;
+	while(1){
+		UseCount[i]++;
+		for(ElementNum=0;SubScripts[i-ElementNum]<UseCount[i-ElementNum];ElementNum++){
+			UseCount[i-ElementNum]=0;
+			if(i-ElementNum-1<0) return MemCounter;
+			UseCount[i-ElementNum-1]++;
+		}
+
+		if(MemCounter<50){
+			temporary[0]='[';
+			temporary[1]=0;
+			for(i2=0;i2<i;i2++){
+				sprintf(temp2,"%d",UseCount[i2]);
+				lstrcat(temporary,temp2);
+				lstrcat(temporary,",");
+			}
+			i3=lstrlen(temporary);
+			temporary[i3-1]=']';
+			temporary[i3]=0;
+
+			VarList_Insert(hVarTree,&tv,temporary,type,offset+MemCounter*TypeSize,lpIndex);
+		}
+
+		MemCounter++;
+		if(MemCounter==50){
+			lstrcpy(tv.item.pszText,"...");
+			TreeView_InsertItem(hVarTree,&tv);
+		}
+	}
+	return 0;
+}
+void RefreshGlobalVar(void){
+	extern DWORD ImageBase;
+	int i;
+	char temporary[VN_SIZE];
+	TV_INSERTSTRUCT tv;
+	HTREEITEM hParent;
+
+	TreeView_DeleteAllItems(hVarTree_Global);
+
+	memset(&tv,0,sizeof(TV_INSERTSTRUCT));
+	tv.hInsertAfter=TVI_LAST;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.hParent=TVI_ROOT;
+	tv.item.pszText=temporary;
+
+	extern HANDLE hDebugProcess;
+	extern int MemPos_RWSection;
+	extern int MaxGlobalVarNum;
+	extern VARIABLE *GlobalVar;
+
+	for(i=0;i<MaxGlobalVarNum;i++){
+		VARIABLE *pVar=&GlobalVar[i];
+
+		//スコープ外の場合は無視
+		if(pVar->ScopeLevel!=0){
+			if(rva_to_real(pVar->ScopeStartAddress) <= pobj_dti->lplpObp[0]  &&
+				pobj_dti->lplpObp[0] < rva_to_real(pVar->ScopeEndAddress)){
+				//範囲内
+			}
+			else{
+				//範囲外
+				continue;
+			}
+		}
+
+		if(!pobj_nv->bShow_DefaultSystem_Var){
+			if(memcmp(pVar->name,"_System_",8)==0||
+				memcmp(pVar->name,"_DebugSys_",10)==0||
+				memcmp(pVar->name,"_PromptSys_",11)==0) continue;
+		}
+		if(!pobj_nv->bShow_Rad_Var){
+			if(memcmp(pVar->name,"_RadSys_",8)==0) continue;
+		}
+		if(!pobj_nv->bShow_GUID_Var){
+			if(memcmp(pVar->name,"GUID_",5)==0||
+				memcmp(pVar->name,"IID_",4)==0||
+				memcmp(pVar->name,"CLSID_",6)==0) continue;
+		}
+
+		//静的メンバ
+		if(strstr(pVar->name,".")) continue;
+
+		if(pVar->bArray){
+			sprintf(temporary,"%s %s(&H%X)",
+				pVar->name,
+				STRING_ARRAY,
+				ImageBase+MemPos_RWSection+pVar->offset);
+			tv.item.iImage=0;
+			tv.item.iSelectedImage=0;
+			hParent=TreeView_InsertItem(hVarTree_Global,&tv);
+
+			VarList_Array(hVarTree_Global,hParent,
+				ImageBase+MemPos_RWSection+pVar->offset,
+				pVar->type,
+				pVar->SubScripts,
+				pVar->u.index);
+		}
+		else{
+			VarList_Insert(hVarTree_Global,
+				&tv,
+				pVar->name,
+				pVar->type,
+				ImageBase+MemPos_RWSection+pVar->offset,
+				pVar->u.index);
+		}
+	}
+}
+void RefreshLocalVar(void){
+	int i,i2,i3,sw;
+	char temporary[VN_SIZE];
+	TV_INSERTSTRUCT tv;
+	HTREEITEM hParent;
+	ULONG_PTR lpData;
+	LONG_PTR offset;
+	ULONG_PTR lpAccBytes;
+
+	TreeView_DeleteAllItems(hVarTree_Local);
+
+	memset(&tv,0,sizeof(TV_INSERTSTRUCT));
+	tv.hInsertAfter=TVI_LAST;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.hParent=TVI_ROOT;
+	tv.item.pszText=temporary;
+
+	extern HANDLE hDebugProcess;
+	extern HWND hDebugWnd;
+	i2=SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+	i2=pobj_dti->iProcLevel-i2;
+
+	if(pobj_dti->lplpSpBase[i2]==0) return;
+
+	extern SUBINFO **ppSubHash;
+	SUBINFO *psi;
+	for(i3=0,sw=0;i3<MAX_HASH;i3++){
+		psi=ppSubHash[i3];
+		while(psi){
+			if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
+				pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
+				sw=1;
+				break;
+			}
+
+			psi=psi->pNextData;
+		}
+		if(sw) break;
+	}
+	if(!psi) return;
+
+	for(i=0;i<psi->VarNum;i++){
+		VARIABLE *pVar=&psi->pVar[i];
+
+		//スコープ外の場合は無視
+		if(pVar->ScopeLevel!=0){
+			if(rva_to_real(pVar->ScopeStartAddress) <= pobj_dti->lplpObp[i2]  &&
+				pobj_dti->lplpObp[i2] < rva_to_real(pVar->ScopeEndAddress)){
+				//範囲内
+			}
+			else{
+				//範囲外
+				continue;
+			}
+		}
+
+		if(pVar->bArray){
+			sprintf(temporary,"%s %s(&H%X)",
+				pVar->name,
+				STRING_ARRAY,
+				pobj_dti->lplpSpBase[i2]+pVar->offset);
+			tv.item.iImage=0;
+			tv.item.iSelectedImage=0;
+			hParent=TreeView_InsertItem(hVarTree_Local,&tv);
+
+			VarList_Array(hVarTree_Local,hParent,
+				pobj_dti->lplpSpBase[i2]+pVar->offset,
+				pVar->type,
+				pVar->SubScripts,
+				pVar->u.index);
+		}
+		else{
+			offset=pobj_dti->lplpSpBase[i2]+pVar->offset;
+			if(pVar->fRef){
+				ReadProcessMemory(hDebugProcess,(void *)offset,&lpData,sizeof(ULONG_PTR),&lpAccBytes);
+				offset=lpData;
+			}
+			VarList_Insert(hVarTree_Local,&tv,
+				pVar->name,
+				pVar->type,
+				offset,
+				pVar->u.index);
+		}
+	}
+
+
+
+	/////////////////////////////
+	// Thisオブジェクトのリスト
+	/////////////////////////////
+
+	TreeView_DeleteAllItems(hVarTree_This);
+	if(!psi->pobj_ParentClass) return;
+
+	//Thisポインタを取得
+	LONG_PTR pThis;
+	for(i=0;i<psi->VarNum;i++){
+		if(lstrcmp(psi->pVar[i].name,"_System_LocalThis")==0) break;
+	}
+	if(i==psi->VarNum) return;
+	lpData=pobj_dti->lplpSpBase[i2]+psi->pVar[i].offset;
+	ReadProcessMemory(hDebugProcess,(void *)lpData,&pThis,sizeof(LONG_PTR),&lpAccBytes);
+
+	for(i=0;i<psi->pobj_ParentClass->iMemberNum;i++){
+		offset=GetSizeOfClassMember(psi->pobj_ParentClass,psi->pobj_ParentClass->ppobj_Member[i]->name,&i2);
+
+		if(psi->pobj_ParentClass->ppobj_Member[i]->SubScripts[0]!=-1){
+			//配列
+			sprintf(temporary,"%s %s(&H%X)",
+				psi->pobj_ParentClass->ppobj_Member[i]->name,
+				STRING_ARRAY,
+				offset);
+			tv.item.iImage=0;
+			tv.item.iSelectedImage=0;
+			hParent=TreeView_InsertItem(hVarTree_This,&tv);
+
+			VarList_Array(hVarTree_This,hParent,
+				pThis+offset,
+				psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.type,
+				psi->pobj_ParentClass->ppobj_Member[i]->SubScripts,
+				psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.u.lpIndex);
+		}
+		else{
+			VarList_Insert(hVarTree_This,&tv,
+				psi->pobj_ParentClass->ppobj_Member[i]->name,
+				psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.type,
+				pThis+offset,
+				psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.u.lpIndex);
+		}
+	}
+}
+void RefreshGlobalVar_with_WindowLock(void){
+	extern HWND hDebugWnd;
+
+	//処理時間を短くするため、一時的に非表示にする
+	LockWindowUpdate(hDebugWnd);
+	ShowWindow(GetParent(hVarTree_Global),SW_HIDE);
+
+	//リフレッシュ
+	RefreshGlobalVar();
+
+	LockWindowUpdate(NULL);
+	ShowWindow(GetParent(hVarTree_Global),SW_SHOW);
+}
+void RefreshLocalVar_with_WindowLock(void){
+	extern HWND hDebugWnd;
+
+	//処理時間を短くするため、一時的に非表示にする
+	LockWindowUpdate(hDebugWnd);
+	ShowWindow(GetParent(hVarTree_Local),SW_HIDE);
+
+	//リフレッシュ
+	RefreshLocalVar();
+
+	LockWindowUpdate(NULL);
+	ShowWindow(GetParent(hVarTree_Local),SW_SHOW);
+}
+
+void SetCalcToWatchList(HWND hListView,int iItem,char *buffer){
+	int i;
+	char temporary[255],temp2[255];
+
+	//エスケープシーケンスをセット
+	SetEscapeSequenceFormat(buffer);
+
+	//ブランクを除去
+	KillStringSpaces(buffer);
+
+	//カッコを相互チェック
+	if(!CheckParenthesis2(buffer)){
+		ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
+		return;
+	}
+
+	double dbl;
+	_int64 i64data;
+	i=StaticCalculation(true, buffer,0,&i64data,0,1);
+	if(IsRealNumberType(i)){
+		memcpy(&dbl,&i64data,sizeof(double));
+	}
+
+	if(i==0){
+		ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
+	}
+	else if(i==-1){
+		ListView_SetItemText(hListView,iItem,1,STRING_CANNOTACCESS);
+	}
+	else{
+		if(IsRealNumberType(i))
+			sprintf(temporary,"%.15g (&H%08X)",dbl,(int)dbl);
+		else if(Is64Type(i)){
+			_i64toa(i64data,temporary,10);
+			_i64toa(i64data,temp2,16);
+			CharUpper(temp2);
+			sprintf(temporary+lstrlen(temporary)," (&H%s)",temp2);
+		}
+		else sprintf(temporary,"%d (&H%08X)",(long)i64data,(long)i64data);
+
+		ListView_SetItemText(hListView,iItem,1,temporary);
+	}
+}
+void RefreshWatchList(void){
+	extern HWND hDebugWnd;
+	HWND hListView;
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	hListView=GetDlgItem(hDebugWnd,IDC_WATCHLIST);
+	i2=ListView_GetItemCount(hListView);
+	for(i=0;i<i2-1;i++){
+		ListView_GetItemText(hListView,i,0,temporary,VN_SIZE);
+
+		//演算結果を表示
+		SetCalcToWatchList(hListView,i,temporary);
+	}
+}
+
+BOOL SetDebugProcCombo(HWND hProcCombo){
+	int i2,i3;
+	char temporary[255];
+
+	extern DWORD ImageBase;
+	extern int MemPos_CodeSection;
+
+	//行番号情報
+	extern int MaxLineInfoNum;
+	extern LINEINFO *pLineInfo;
+	for(i3=0;i3<(int)pobj_dti->iProcLevel+1;i3++){
+		for(i2=0;i2<MaxLineInfoNum-1;i2++){
+			if((pLineInfo[i2].TopObp+ImageBase+MemPos_CodeSection)<=pobj_dti->lplpObp[i3]&&
+				pobj_dti->lplpObp[i3]<=(pLineInfo[i2+1].TopObp+ImageBase+MemPos_CodeSection)) break;
+		}
+		if(i2==MaxLineInfoNum) pobj_dti->lpdwCp[i3]=-1;
+		else{
+			pobj_dti->lpdwCp[i3]=pLineInfo[i2].TopCp;
+		}
+	}
+	for(i3=0;i3<(int)pobj_dti->iProcLevel+1;i3++){
+		if(pobj_dti->lpdwCp[i3]==-1){
+			pobj_dti->iProcLevel--;
+			for(i2=i3;i2<(int)pobj_dti->iProcLevel+1;i2++){
+				pobj_dti->lplpObp[i2]=pobj_dti->lplpObp[i2+1];
+				pobj_dti->lplpSpBase[i2]=pobj_dti->lplpSpBase[i2+1];
+				pobj_dti->lpdwCp[i2]=pobj_dti->lpdwCp[i2+1];
+			}
+			i3--;
+			continue;
+		}
+	}
+
+	if(!GetLineNum(pobj_dti->lpdwCp[pobj_dti->iProcLevel],&i2,temporary)){
+		extern HWND hMainDlg;
+		//"デバッグ情報の取得に失敗"
+		MessageBox(hMainDlg,STRING_DEBUG_FAILED,"ActiveBasic error",MB_OK);
+		return 0;
+	}
+	ShowErrorLine(i2,temporary);
+
+	//プロシージャ コンボボックス
+	extern SUBINFO **ppSubHash;
+	SUBINFO *psi;
+	int sw;
+	SendMessage(hProcCombo,CB_RESETCONTENT,0,0);
+	for(i2=pobj_dti->iProcLevel;i2>=0;i2--){
+		for(i3=0,sw=0;i3<MAX_HASH;i3++){
+			psi=ppSubHash[i3];
+			while(psi){
+				if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
+					pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
+					lstrcpy(temporary,psi->name);
+					sw=1;
+					break;
+				}
+				psi=psi->pNextData;
+			}
+			if(sw) break;
+		}
+		if(!psi){
+			if(i2==0){
+				lstrcpy(temporary,"Global");
+				pobj_dti->lplpSpBase[i2]=0;
+			}
+			else lstrcpy(temporary,"error");
+		}
+		SendMessage(hProcCombo,CB_ADDSTRING,0,(long)temporary);
+	}
+	SendMessage(hProcCombo,CB_SETCURSEL,0,0);
+
+	return pobj_dti->iProcLevel;
+}
+
+//IDC_THREADCOMBOプロシージャ
+LRESULT CALLBACK ThreadComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern WNDPROC OldThreadComboProc;
+	int i2;
+	DWORD dwThreadID;
+	char temporary[255];
+
+	switch(message){
+		case WM_COMMAND:
+			if(HIWORD(wParam)==CBN_SELCHANGE){
+				SendMessage(hwnd,CB_GETLBTEXT,SendMessage(hwnd,CB_GETCURSEL,0,0),(long)temporary);
+				sscanf(temporary+2,"%X",&dwThreadID);
+
+				i2=0;
+				while(_DebugSys_dwThreadID[i2]!=dwThreadID) i2++;
+
+				//次回のステップ実行対象を指定
+				extern int NextStepThreadNum;
+				NextStepThreadNum=i2;
+
+				//スレッド情報をリフレッシュ
+				pobj_dti->Reflesh(i2);
+
+				SetDebugProcCombo(GetDlgItem(GetParent(hwnd),IDC_PROCCOMBO));
+
+				SendDlgItemMessage(GetParent(hwnd),IDC_PROCCOMBO,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
+			}
+			break;
+	}
+	return CallWindowProc(OldThreadComboProc,hwnd,message,wParam,lParam);
+}
+//IDC_PROCCOMBOプロシージャ
+LRESULT CALLBACK ProcComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern WNDPROC OldProcComboProc;
+	int i2,i3;
+	char temporary[MAX_PATH];
+
+	switch(message){
+		case WM_COMMAND:
+			if(HIWORD(wParam)==CBN_SELCHANGE){
+				i2=SendMessage(hwnd,CB_GETCURSEL,0,0);
+				GetLineNum(pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2],&i3,temporary);
+				ShowErrorLine(i3,temporary);
+
+				RefreshLocalVar_with_WindowLock();
+			}
+			break;
+	}
+	return CallWindowProc(OldProcComboProc,hwnd,message,wParam,lParam);
+}
+void InitVarList(DWORD dwThreadId){
+	extern HWND hDebugWnd;
+	int i2,i3,i5;
+	char temporary[255];
+
+
+	//スレッド
+	SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_RESETCONTENT,0,0);
+	extern DWORD _DebugSys_dwThreadID[256];
+	for(i2=0;i2<256;i2++){
+		if(_DebugSys_dwThreadID[i2]){
+			sprintf(temporary,"&H%08X",_DebugSys_dwThreadID[i2]);
+			SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_ADDSTRING,0,(LPARAM)temporary);
+			if(_DebugSys_dwThreadID[i2]==dwThreadId){
+				extern int NextStepThreadNum;
+				NextStepThreadNum=i2;
+			}
+		}
+	}
+	sprintf(temporary,"&H%08X",dwThreadId);
+	i5=(int)SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_FINDSTRING,0,(LPARAM)temporary);
+	SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_SETCURSEL,i5,0);
+
+	i2=SetDebugProcCombo(GetDlgItem(hDebugWnd,IDC_PROCCOMBO));
+
+
+	///////////////////////////////////////////////
+	// 実行中のプロシージャのローカル変数をセット
+	///////////////////////////////////////////////
+
+	extern VARIABLE *LocalVar;
+	extern int MaxLocalVarNum;
+	int sw;
+
+	MaxLocalVarNum=0;
+	pobj_CompilingClass=0;
+
+	i2=SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+	i2=pobj_dti->iProcLevel-i2;
+
+	if(pobj_dti->lplpSpBase[i2]){
+		extern SUBINFO **ppSubHash;
+		SUBINFO *psi;
+		for(i3=0,sw=0;i3<MAX_HASH;i3++){
+			psi=ppSubHash[i3];
+			while(psi){
+				if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
+					pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
+					sw=1;
+					break;
+				}
+
+				psi=psi->pNextData;
+			}
+			if(sw) break;
+		}
+
+
+		if(psi){
+			LocalVar=psi->pVar;
+			MaxLocalVarNum=psi->VarNum;
+
+			pobj_CompilingClass=psi->pobj_ParentClass;
+		}
+	}
+
+
+	////////////////////////
+	// 変数リストを再表示
+	////////////////////////
+
+	//処理時間を短くするため、一時的に非表示にする
+	LockWindowUpdate(hDebugWnd);
+	ShowWindow(GetParent(hVarTree_Global),SW_HIDE);
+	ShowWindow(GetDlgItem(hDebugWnd,IDC_WATCHLIST),SW_HIDE);
+
+	//リフレッシュ
+	RefreshLocalVar();
+	RefreshGlobalVar();
+	RefreshWatchList();
+
+	LockWindowUpdate(NULL);
+	ShowWindow(GetParent(hVarTree_Global),SW_SHOW);
+	ShowWindow(GetDlgItem(hDebugWnd,IDC_WATCHLIST),SW_SHOW);
+}
+
+
+
+
+//////////////////////////////////////
+// エディタに埋め込み表示のデバッガ
+//////////////////////////////////////
+
+BOOL CALLBACK DebuggerButtonsProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HINSTANCE hInst;
+	extern DWORD dwStepRun;
+
+	//デバッガ用ツールバー
+#define BMPNUM_DEBUGGERTOOLBAR 3
+#define BTNNUM_DEBUGGERTOOLBAR 4
+	TBBUTTON DebuggerToolBar[]={
+		{0,IDC_DEBUG_START,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
+		{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},
+		{1,IDC_DEBUG_STEPOVER,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
+		{2,IDC_DEBUG_STEPIN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
+	};
+	TOOLTIPTEXT *pTipText;
+
+	static HIMAGELIST hImageList,hImageList_Disabled;
+
+	switch(message){
+		case WM_INITDIALOG:
+			//ツールバーを生成
+			extern HWND hDebuggerToolbar;
+			hDebuggerToolbar=CreateToolbarEx(hwnd,WS_CHILD|WS_VISIBLE|CCS_NODIVIDER|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS|WS_CLIPSIBLINGS,
+				NULL,
+				0,0,0,
+				DebuggerToolBar,
+				BTNNUM_DEBUGGERTOOLBAR,	/*アイテムの個数*/
+				0,0,16,15,sizeof(TBBUTTON));
+
+			hImageList = ImageList_LoadImage(hInst, MAKEINTRESOURCE(IDR_DEBUGGERTOOLBAR),
+				16, 0, RGB(192,192,192),IMAGE_BITMAP, LR_CREATEDIBSECTION);
+			SendMessage(hDebuggerToolbar, TB_SETIMAGELIST, 0, (LPARAM)hImageList);
+			hImageList_Disabled = ImageList_LoadImage(hInst, MAKEINTRESOURCE(IDR_DEBUGGERTOOLBAR_DISABLED),
+				16, 0, RGB(192,192,192),IMAGE_BITMAP, LR_CREATEDIBSECTION);
+			SendMessage(hDebuggerToolbar, TB_SETDISABLEDIMAGELIST, 0, (LPARAM)hImageList_Disabled);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_DEBUG_START:
+					DestroyWindow(GetParent(hwnd));
+					return 1;
+				case IDC_DEBUG_STEPIN:
+					Debugger_StepIn();
+					return 1;
+				case IDC_DEBUG_STEPOVER:
+					Debugger_StepOver();
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			pTipText=(TOOLTIPTEXT *)lParam;
+			if(pTipText->hdr.code==TTN_NEEDTEXT){
+				//ツールチップを表示
+				switch(pTipText->hdr.idFrom){
+					case IDC_DEBUG_START:
+						pTipText->lpszText="実行";
+						break;
+					case IDC_DEBUG_STEPOVER:
+						pTipText->lpszText="ステップ アウト";
+						break;
+					case IDC_DEBUG_STEPIN:
+						pTipText->lpszText="ステップ イン";
+						break;
+				}
+			}
+			break;
+		case WM_SIZE:
+			MoveWindow(hDebuggerToolbar,0,0,LOWORD(lParam),HIWORD(lParam),1);
+			return 1;
+
+		case WM_DESTROY:
+			ImageList_Destroy(hImageList);
+			ImageList_Destroy(hImageList_Disabled);
+			return 1;
+	}
+	return 0;
+}
+
+WNDPROC OldTabProc;
+LRESULT CALLBACK TabProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HINSTANCE hInst;
+
+	static HMENU hDummyMenu,hMenu=0;
+
+	switch(message){
+		case WM_CONTEXTMENU:
+			if(hMenu==0){
+				hDummyMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_DEBUGGER_VARLIST_MENU));
+				hMenu=GetSubMenu(hDummyMenu,0);
+			}
+
+			MENUITEMINFO mi;
+			mi.cbSize=sizeof(MENUITEMINFO);
+			mi.fMask=MIIM_STATE;
+			mi.fState=MFS_CHECKED;
+
+			if(pobj_nv->bShow_DefaultSystem_Var)
+				SetMenuItemInfo(hMenu,IDM_SHOW_DEFAULTSYSTEM_VAR,0,&mi);
+			if(pobj_nv->bShow_Rad_Var)
+				SetMenuItemInfo(hMenu,IDM_SHOW_RAD_VAR,0,&mi);
+			if(pobj_nv->bShow_GUID_Var)
+				SetMenuItemInfo(hMenu,IDM_SHOW_GUID_VAR,0,&mi);
+
+			TrackPopupMenu(hMenu,TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+
+			break;
+		case WM_COMMAND:
+			mi.cbSize=sizeof(MENUITEMINFO);
+			mi.fMask=MIIM_STATE;
+			switch(LOWORD(wParam)){
+				case IDM_SHOW_DEFAULTSYSTEM_VAR:
+					if(pobj_nv->bShow_DefaultSystem_Var){
+						pobj_nv->bShow_DefaultSystem_Var=0;
+						mi.fState=MFS_UNCHECKED;
+					}
+					else{
+						pobj_nv->bShow_DefaultSystem_Var=1;
+						mi.fState=MFS_CHECKED;
+					}
+					SetMenuItemInfo(hMenu,IDM_SHOW_DEFAULTSYSTEM_VAR,0,&mi);
+					RefreshGlobalVar_with_WindowLock();
+					break;
+				case IDM_SHOW_RAD_VAR:
+					if(pobj_nv->bShow_Rad_Var){
+						pobj_nv->bShow_Rad_Var=0;
+						mi.fState=MFS_UNCHECKED;
+					}
+					else{
+						pobj_nv->bShow_Rad_Var=1;
+						mi.fState=MFS_CHECKED;
+					}
+					SetMenuItemInfo(hMenu,IDM_SHOW_RAD_VAR,0,&mi);
+					RefreshGlobalVar_with_WindowLock();
+					break;
+				case IDM_SHOW_GUID_VAR:
+					if(pobj_nv->bShow_GUID_Var){
+						pobj_nv->bShow_GUID_Var=0;
+						mi.fState=MFS_UNCHECKED;
+					}
+					else{
+						pobj_nv->bShow_GUID_Var=1;
+						mi.fState=MFS_CHECKED;
+					}
+					SetMenuItemInfo(hMenu,IDM_SHOW_GUID_VAR,0,&mi);
+					RefreshGlobalVar_with_WindowLock();
+					break;
+			}
+			break;
+		case WM_DESTROY:
+			DestroyMenu(hMenu);
+			hMenu=0;
+			break;
+	}
+	return CallWindowProc(OldTabProc,hwnd,message,wParam,lParam);
+}
+
+BOOL CALLBACK DlgDebugger(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HINSTANCE hInst;
+	extern DWORD dwStepRun;
+	extern double width_ratio_VarList;
+	RECT rect;
+	int i,i2,i3;
+	char temporary[VN_SIZE];
+	LV_DISPINFO *lvinfo;
+	LVITEM ListView_Item;
+
+	static POINT pos_VarList;
+	static POINT pos_WatchList;
+
+	switch(message){
+		case WM_INITDIALOG:
+			extern HWND hDebugWnd;
+			hDebugWnd=hwnd;
+
+			//変数リストの初期位置を取得
+			GetWindowRect(GetDlgItem(hwnd,IDC_VARPOS),&rect);
+			pos_VarList.x=rect.left;
+			pos_VarList.y=rect.top;
+			ScreenToClient(hwnd,&pos_VarList);
+
+			//ウォッチリストの初期位置を取得
+			pos_WatchList.x=pos_VarList.x+(rect.right-rect.left)+LEVER_THICK;
+			pos_WatchList.y=0;
+
+			//ツールバーのベースウィンドウを生成
+			static HWND hBase_ToolBar;
+			hBase_ToolBar=CreateDialog(hInst,MAKEINTRESOURCE(IDD_DEBUGGER_TOOLBARBASE),hwnd,DebuggerButtonsProc);
+			MoveWindow(hBase_ToolBar,50,0,20*BTNNUM_DEBUGGERTOOLBAR,22,1);
+
+			extern WNDPROC OldThreadComboProc;
+			OldThreadComboProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_THREADCOMBO),GWL_WNDPROC);
+			SetWindowLong(GetDlgItem(hwnd,IDC_THREADCOMBO),GWL_WNDPROC,(long)ThreadComboProc);
+
+			extern WNDPROC OldProcComboProc;
+			OldProcComboProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_PROCCOMBO),GWL_WNDPROC);
+			SetWindowLong(GetDlgItem(hwnd,IDC_PROCCOMBO),GWL_WNDPROC,(long)ProcComboProc);
+
+
+			///////////////////////////
+			// タブコントロールを生成
+			///////////////////////////
+
+			static HWND hTab;
+			HFONT hFont;
+			hFont=(HFONT)SendMessage(hwnd,WM_GETFONT,0,0);
+			hTab=CreateWindow(WC_TABCONTROL,NULL,
+				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
+				0,0,0,0,hwnd,0,hInst,0);
+			SendMessage(hTab,WM_SETFONT,(long)hFont,0);
+			OldTabProc=(WNDPROC)GetWindowLong(hTab,GWL_WNDPROC);
+			SetWindowLong(hTab,GWL_WNDPROC,(long)TabProc);
+
+			//タブを設定
+			TC_ITEM tcItem;
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="グローバル";
+			SendMessage(hTab,TCM_INSERTITEM,0,(LPARAM)&tcItem);
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="ローカル";
+			SendMessage(hTab,TCM_INSERTITEM,1,(LPARAM)&tcItem);
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="This";
+			SendMessage(hTab,TCM_INSERTITEM,2,(LPARAM)&tcItem);
+
+			//グローバル変数リストのツリーを作成
+			hVarTree_Global=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+				WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hTab,0,hInst,0);
+
+			//ローカル変数リストのツリーを作成
+			hVarTree_Local=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+				WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hTab,0,hInst,0);
+
+			//This変数リストのツリーを作成
+			hVarTree_This=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+				WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hTab,0,hInst,0);
+
+			ShowWindow(hVarTree_Global,SW_SHOW);
+
+
+			//イメージリスト読み込み、設定
+			static HIMAGELIST hVariOrderImageList;
+			hVariOrderImageList=ImageList_Create(16,16,ILC_COLOR4|ILC_MASK,4,0);
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARARRAY)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTRUCT)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARDATA)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTR)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARPTRSTRUCT)));
+			TreeView_SetImageList(hVarTree_Global,hVariOrderImageList,TVSIL_NORMAL);
+			TreeView_SetImageList(hVarTree_Local,hVariOrderImageList,TVSIL_NORMAL);
+			TreeView_SetImageList(hVarTree_This,hVariOrderImageList,TVSIL_NORMAL);
+
+
+			/////////////////////////
+			// ウォッチリスト
+			/////////////////////////
+
+			//コラムの設定
+			static HWND hListView;
+			LV_COLUMN ListView_Column;
+			DWORD dwStyle;
+
+			hListView=GetDlgItem(hwnd,IDC_WATCHLIST);
+			GetClientRect(hListView,&rect);
+			dwStyle=ListView_GetExtendedListViewStyle(hListView);
+			dwStyle|=LVS_EX_FULLROWSELECT;
+			ListView_SetExtendedListViewStyle(hListView,dwStyle);
+
+			ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+			ListView_Column.fmt=LVCFMT_LEFT;
+
+			extern int width_WatchColumn_Expression;
+			ListView_Column.cx=width_WatchColumn_Expression;
+			ListView_Column.pszText="ウォッチ式";
+			ListView_Column.iSubItem=0;
+			ListView_InsertColumn(hListView,0,&ListView_Column);
+
+			extern int width_WatchColumn_Value;
+			ListView_Column.cx=width_WatchColumn_Value;
+			ListView_Column.pszText="値";
+			ListView_Column.iSubItem=1;
+			ListView_InsertColumn(hListView,1,&ListView_Column);
+
+			//アイテムの設定
+			ListView_Item.mask=LVIF_TEXT;
+			ListView_Item.iSubItem=0;
+			for(i=0;i<pobj_nv->WatchNum;i++){
+				ListView_Item.pszText=pobj_nv->ppWatchStr[i];
+				ListView_Item.iItem=i;
+				ListView_InsertItem(hListView,&ListView_Item);
+			}
+			ListView_Item.pszText="...";
+			ListView_Item.iItem=i;
+			ListView_InsertItem(hListView,&ListView_Item);
+
+
+			///////////////////////
+			// 変数リストの初期化
+			///////////////////////
+			InitVarList((DWORD)lParam);
+
+			break;
+		case WM_NOTIFY:
+			NMHDR *hdr;
+			hdr=(NMHDR *)lParam;
+			if(hdr->hwndFrom==hTab&&hdr->code==TCN_SELCHANGE){
+				i=TabCtrl_GetCurSel(hTab);
+
+				if(i==0){
+					//グローバル変数を表示
+					ShowWindow(hVarTree_Global,SW_SHOW);
+					ShowWindow(hVarTree_Local,SW_HIDE);
+					ShowWindow(hVarTree_This,SW_HIDE);
+				}
+				else if(i==1){
+					//ローカル変数を表示
+					ShowWindow(hVarTree_Global,SW_HIDE);
+					ShowWindow(hVarTree_Local,SW_SHOW);
+					ShowWindow(hVarTree_This,SW_HIDE);
+				}
+				else if(i==2){
+					//This変数を表示
+					ShowWindow(hVarTree_Global,SW_HIDE);
+					ShowWindow(hVarTree_Local,SW_HIDE);
+					ShowWindow(hVarTree_This,SW_SHOW);
+				}
+			}
+
+			if(hdr->hwndFrom==hListView){
+				lvinfo=(LV_DISPINFO *)hdr;
+				if(hdr->code==NM_DBLCLK){
+					i2=ListView_GetItemCount(hListView);
+					for(i=0;i<i2;i++){
+						if(ListView_GetItemState(hListView,i,LVIS_SELECTED)) break;
+					}
+					if(i==i2) break;
+
+					ListView_EditLabel(hListView,i);
+				}
+
+				static HWND hEdit;
+				if(hdr->code==LVN_BEGINLABELEDIT){
+					hEdit=ListView_GetEditControl(hListView);
+
+					GetWindowText(hEdit,temporary,VN_SIZE);
+					if(lstrcmp(temporary,"...")==0) SetWindowText(hEdit,"");
+				}
+				if(hdr->code==LVN_ENDLABELEDIT){
+					GetWindowText(hEdit,temporary,VN_SIZE);
+					if(temporary[0]=='\0'){
+						if(ListView_GetItemCount(hListView)-1==lvinfo->item.iItem) break;
+
+						//空白入力の場合はそのアイテムを削除する
+						ListView_DeleteItem(hListView,lvinfo->item.iItem);
+						break;
+					}
+					ListView_SetItemText(hListView,lvinfo->item.iItem,0,temporary);
+
+					//演算結果を表示
+					SetCalcToWatchList(hListView,lvinfo->item.iItem,temporary);
+
+					if(lvinfo->item.iItem==ListView_GetItemCount(hListView)-1){
+						//リストアイテムを追加
+						ListView_Item.mask=LVIF_TEXT;
+						ListView_Item.pszText="...";
+						ListView_Item.iItem=lvinfo->item.iItem+1;
+						ListView_Item.iSubItem=0;
+						ListView_InsertItem(hListView,&ListView_Item);
+					}
+				}
+
+				if(hdr->code==LVN_KEYDOWN){
+					LV_KEYDOWN *plvKeydown;
+					plvKeydown=(LV_KEYDOWN *)hdr;
+					if(plvKeydown->wVKey==VK_DELETE){
+						i2=ListView_GetItemCount(hListView);
+						for(i=i2-2;i>=0;i--){
+							if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+								ListView_DeleteItem(hListView,i);
+								i3=i;
+							}
+						}
+
+						ListView_SetItemState(hListView,i3,LVIS_SELECTED,LVIS_SELECTED);
+					}
+				}
+			}
+			break;
+
+		case WM_SIZE:
+			//変数リストの位置
+			int width_VarList;
+			width_VarList=
+				(int)((double)(LOWORD(lParam)-pos_VarList.x)*width_ratio_VarList);
+
+			MoveWindow(hTab,
+				pos_VarList.x,
+				pos_VarList.y,
+				width_VarList,
+				HIWORD(lParam)-pos_VarList.y,
+				1);
+
+			GetClientRect(hTab,&rect);
+			TabCtrl_AdjustRect(hTab,FALSE,&rect);
+			rect.left-=2;
+			rect.right++;
+			rect.bottom++;
+
+			MoveWindow(hVarTree_Global,
+				rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+			MoveWindow(hVarTree_Local,
+				rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+			MoveWindow(hVarTree_This,
+				rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+
+			pos_WatchList.x=pos_VarList.x+width_VarList+LEVER_THICK;
+			pos_WatchList.y=0;
+
+			//ウォッチリストの位置
+			MoveWindow(GetDlgItem(hwnd,IDC_WATCHLIST),
+				pos_WatchList.x,
+				pos_WatchList.y,
+				LOWORD(lParam)-pos_WatchList.x,
+				HIWORD(lParam)-pos_WatchList.y,
+				1);
+
+			return 1;
+
+		case WM_VARLIST_CLOSE:
+			DestroyWindow(hwnd);
+			return 1;
+		case WM_DESTROY:
+			ImageList_Destroy(hVariOrderImageList);
+
+
+			//////////////////////////////////////////////////////////////
+			// ウォッチリストの以前の内容を破棄し、新しい内容に書き換える
+			//////////////////////////////////////////////////////////////
+
+			for(i=0;i<pobj_nv->WatchNum;i++){
+				HeapDefaultFree(pobj_nv->ppWatchStr[i]);
+			}
+			HeapDefaultFree(pobj_nv->ppWatchStr);
+
+			pobj_nv->WatchNum=ListView_GetItemCount(hListView)-1;
+			pobj_nv->ppWatchStr=(char **)HeapAlloc(hHeap,0,pobj_nv->WatchNum*sizeof(char *)+1);
+			for(i=0;i<pobj_nv->WatchNum;i++){
+				ListView_GetItemText(hListView,i,0,temporary,VN_SIZE);
+				pobj_nv->ppWatchStr[i]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+				lstrcpy(pobj_nv->ppWatchStr[i],temporary);
+			}
+
+
+			//////////////////////////////
+			// デバッグダイアログを破棄
+			//////////////////////////////
+
+			hDebugWnd=0;
+
+			extern BOOL bClipCompileView;
+			if(bClipCompileView){
+				extern HWND hOwnerEditor;
+				SendMessage(hOwnerEditor,WM_DESTROYDEBUGGERVIEW,0,0);
+			}
+
+			return 1;
+
+
+
+		///////////////////////
+		// デバッグコマンド
+		///////////////////////
+
+		case WM_DEBUG_CONTINUE:
+			DestroyWindow(hwnd);
+			return 1;
+		case WM_STEP_IN:
+			Debugger_StepIn();
+			return 1;
+		case WM_STEP_OVER:
+			Debugger_StepOver();
+			return 1;
+		case WM_STEP_CURSOR:
+			Debugger_StepCursor();
+			return 1;
+	}
+	return 0;
+}
+
+
+
+
+//////////////////////////////////
+// ポップアップ表示の変数リスト
+//////////////////////////////////
+
+BOOL CALLBACK DlgVarList(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HINSTANCE hInst;
+	extern DWORD dwStepRun;
+	RECT rect;
+	POINT pos;
+	SIZE size;
+
+	switch(message){
+		case WM_INITDIALOG:
+			extern HWND hDebugWnd;
+			hDebugWnd=hwnd;
+
+			pos.x=pobj_nv->VarDlgRect.left;
+			pos.y=pobj_nv->VarDlgRect.top;
+			size.cx=pobj_nv->VarDlgRect.right-pobj_nv->VarDlgRect.left;
+			size.cy=pobj_nv->VarDlgRect.bottom-pobj_nv->VarDlgRect.top;
+			MoveWindow(hwnd,pos.x,pos.y,size.cx,size.cy,1);
+
+			extern WNDPROC OldThreadComboProc;
+			OldThreadComboProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_THREADCOMBO),GWL_WNDPROC);
+			SetWindowLong(GetDlgItem(hwnd,IDC_THREADCOMBO),GWL_WNDPROC,(long)ThreadComboProc);
+
+			extern WNDPROC OldProcComboProc;
+			OldProcComboProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_PROCCOMBO),GWL_WNDPROC);
+			SetWindowLong(GetDlgItem(hwnd,IDC_PROCCOMBO),GWL_WNDPROC,(long)ProcComboProc);
+
+			//イメージリスト読み込み、設定
+			static HIMAGELIST hVariOrderImageList;
+			hVariOrderImageList=ImageList_Create(16,16,ILC_COLOR4|ILC_MASK,4,0);
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARARRAY)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTRUCT)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARDATA)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTR)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARPTRSTRUCT)));
+			TreeView_SetImageList(GetDlgItem(hwnd,IDC_VARTREE),hVariOrderImageList,TVSIL_NORMAL);
+
+			InitVarList((DWORD)lParam);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDCANCEL:
+					DestroyWindow(hwnd);
+					return 1;
+				case IDC_STEPIN:
+					Debugger_StepIn();
+					return 1;
+				case IDC_STEPOVER:
+					Debugger_StepOver();
+					return 1;
+			}
+			break;
+		case WM_SIZE:
+			GetWindowRect(GetDlgItem(hwnd,IDC_VARTREE),&rect);
+			pos.x=rect.left;
+			pos.y=rect.top;
+			ScreenToClient(hwnd,&pos);
+			MoveWindow(GetDlgItem(hwnd,IDC_VARTREE),0,pos.y,LOWORD(lParam),HIWORD(lParam)-pos.y,TRUE);
+			SetWindowPos(GetDlgItem(hwnd,IDCANCEL),0,LOWORD(lParam)-91,9,0,0,SWP_NOSIZE);
+			return 1;
+		case WM_VARLIST_CLOSE:
+			DestroyWindow(hwnd);
+			return 1;
+		case WM_DESTROY:
+			ImageList_Destroy(hVariOrderImageList);
+
+			GetWindowRect(hwnd,&pobj_nv->VarDlgRect);
+
+			hDebugWnd=0;
+
+			return 1;
+	}
+	return 0;
+}
Index: /BasicCompiler32/WatchList.cpp
===================================================================
--- /BasicCompiler32/WatchList.cpp	(revision 3)
+++ /BasicCompiler32/WatchList.cpp	(revision 3)
@@ -0,0 +1,530 @@
+#include "../BasicCompiler_Common/common.h"
+#include "opcode.h"
+
+//デバッグ用
+#include "../BasicCompiler_Common/debug.h"
+
+int Debugging_GetArray(int *SubScripts,char *array,int type,LONG_PTR lpIndex,LONG_PTR *plpOffset);
+
+ULONG_PTR Debugging_GetVarPtr(RELATIVE_VAR *pRelativeVar){
+	extern DWORD ImageBase;
+	extern int MemPos_RWSection;
+	int i2;
+
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		return ImageBase+MemPos_RWSection+pRelativeVar->offset;
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		extern HWND hDebugWnd;
+		i2=SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+		i2=pobj_dti->iProcLevel-i2;
+
+		if(pobj_dti->lplpSpBase[i2]==0) return 0;
+
+		return pobj_dti->lplpSpBase[i2]+pRelativeVar->offset;
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		extern HWND hDebugWnd;
+		i2=SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+		i2=pobj_dti->iProcLevel-i2;
+
+		if(pobj_dti->lplpSpBase[i2]==0) return 0;
+
+		extern HANDLE hDebugProcess;
+		ULONG_PTR lpData;
+		ULONG_PTR lpAccBytes;
+		ReadProcessMemory(hDebugProcess,
+			(void *)(pobj_dti->lplpSpBase[i2]+pRelativeVar->offset),
+			&lpData,
+			sizeof(ULONG_PTR),
+			&lpAccBytes);
+
+		return lpData;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		return pRelativeVar->offset;
+	}
+
+	return 0;
+}
+
+BOOL Debugging_SetRelativeOffset(int *pType,LONG_PTR lpIndex,RELATIVE_VAR *pRelativeVar,char *lpPtrOffset){
+	int array_num;
+
+	_int64 i64data;
+	int type;
+	type=StaticCalculation(true, lpPtrOffset,0,&i64data,0,1);
+	if(!type) return 0;
+	if(IsRealNumberType(type)){
+		double dbl;
+		memcpy(&dbl,&i64data,sizeof(double));
+		i64data=(_int64)dbl;
+	}
+
+	array_num=(int)i64data;
+
+	if(PTR_LEVEL(*pType)){
+		*pType=MAKE_PTR_TYPE(NATURAL_TYPE(*pType),PTR_LEVEL(*pType)-1);
+		if((*pType)==DEF_OBJECT)
+			array_num*=GetSizeOfClass((CClass *)lpIndex);
+		else
+			array_num*=GetTypeSize(*pType,-1);
+	}
+	else{
+		//エラー
+		return 0;
+	}
+
+	extern HANDLE hDebugProcess;
+	ULONG_PTR lpData;
+	ULONG_PTR lpAccBytes;
+	lpData=Debugging_GetVarPtr(pRelativeVar);
+	if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(LONG_PTR),&lpAccBytes)) return 0;
+	pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+	pRelativeVar->offset+=array_num;
+	return 1;
+}
+
+BOOL Debugging_GetMember(CClass *pobj_c,char *member,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpNestIndex,BOOL bPrivateAccess){
+	int i,i2,offset;
+
+	//直接参照に切り替え
+	pRelativeVar->offset=Debugging_GetVarPtr(pRelativeVar);
+	pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+	//クラス、配列の構成要素を解析する
+	char VarName[VN_SIZE];		//変数名
+	char array[VN_SIZE];		//第1次配列
+	char lpPtrOffset[VN_SIZE];	//第2次配列
+	char NestMember[VN_SIZE];	//入れ子メンバ
+	int RefType;				//"."参照のときは0、"->"参照のときは1
+	lstrcpy(VarName,member);
+	if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)) return 0;
+
+
+	////////////////////////////
+	// メンバオフセットを取得
+	////////////////////////////
+
+	offset=GetSizeOfClassMember(pobj_c,VarName,&i);
+	if(i==pobj_c->iMemberNum) return 0;
+
+
+	//アクセシビリティをチェック
+	if((bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
+		pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
+		return 0;
+	}
+	else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED)
+		return 0;
+
+	*pType=pobj_c->ppobj_Member[i]->TypeInfo.type;
+	*plpNestIndex=pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex;
+
+	//ポインタ変数の場合
+	if(IsPtrType(*pType)){
+		if(pobj_c->ppobj_Member[i]->SubScripts[0]==-1){
+			lstrcpy(lpPtrOffset,array);
+			array[0]=0;
+		}
+	}
+	else{
+		if(lpPtrOffset[0]) return 0;
+	}
+
+	pRelativeVar->offset+=offset;
+
+	if(array[0]){
+		//配列オフセット
+		i2=Debugging_GetArray(
+			pobj_c->ppobj_Member[i]->SubScripts,
+			array,
+			*pType,
+			pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex,
+			&pRelativeVar->offset);
+		if(i2==0){
+			//式エラー
+			return 0;
+		}
+		if(i2==-1){
+			//アクセスエラー
+			return -1;
+		}
+	}
+	else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
+		*pType|=FLAG_PTR;
+	}
+
+	if(NestMember[0]){
+		//入れ子構造の場合
+
+		if(*pType==DEF_OBJECT){
+			if(RefType!=DEF_OBJECT) return 0;
+		}
+		else if(*pType==DEF_PTR_OBJECT){
+			//構造体ポインタ型メンバ変数
+
+			if(lpPtrOffset[0]){
+				if(RefType!=DEF_OBJECT) return 0;
+
+				//直接参照に切り替え
+				Debugging_SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+
+				lpPtrOffset[0]=0;
+			}
+			else{
+				if(RefType!=DEF_PTR_OBJECT) return 0;
+
+				extern HANDLE hDebugProcess;
+				ULONG_PTR lpData;
+				ULONG_PTR lpAccBytes;
+				lpData=Debugging_GetVarPtr(pRelativeVar);
+				if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(LONG_PTR),&lpAccBytes)) return -1;
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+			}
+		}
+
+		i2=Debugging_GetMember(pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
+			NestMember,
+			pType,
+			pRelativeVar,
+			plpNestIndex,
+			0);
+		if(i2==0){
+			//式エラー
+			return 0;
+		}
+		if(i2==-1){
+			//アクセスエラー
+			return -1;
+		}
+	}
+
+	if(lpPtrOffset[0]){
+		Debugging_SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+	}
+
+	return 1;
+}
+int Debugging_GetArray(int *SubScripts,char *array,int type,LONG_PTR lpIndex,LONG_PTR *plpOffset){
+	extern HANDLE hHeap;
+	int i,i2,i3,i4,i5,array_offset,TypeSize;
+	char temporary[VN_SIZE],*pParm[MAX_PARMS];
+
+	for(i=0,i2=0,i3=0;;i++,i2++){
+		if(array[i]=='('){
+			i4=GetStringInPare(temporary+i2,array+i);
+			i+=i4-1;
+			i2+=i4-1;
+			continue;
+		}
+		if(array[i]=='['){
+			i4=GetStringInBracket(temporary+i2,array+i);
+			i+=i4-1;
+			i2+=i4-1;
+			continue;
+		}
+		if(array[i]==','||array[i]=='\0'){
+			if(SubScripts[i3]==-1){
+				for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
+				return 0;
+			}
+
+			temporary[i2]=0;
+
+			pParm[i3]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(pParm[i3],temporary);
+
+			i3++;
+
+			if(array[i]=='\0'){
+				if(SubScripts[i3]!=-1){
+					for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
+					return 0;
+				}
+				break;
+			}
+
+			i2=-1;
+			continue;
+		}
+		temporary[i2]=array[i];
+	}
+
+	array_offset=0;
+
+	for(i=i3-1;i>=0;i--){
+		_int64 i64data;
+		i2=StaticCalculation(true, pParm[i],0,&i64data,0,1);
+		if(i2==0){
+			//式エラー
+			return 0;
+		}
+		if(i2==-1){
+			//アクセスエラー
+			return -1;
+		}
+		if(IsRealNumberType(i2)){
+			double dbl;
+			memcpy(&dbl,&i64data,sizeof(double));
+			i64data=(_int64)dbl;
+		}
+		i5=(int)i64data;
+
+		for(i2=i+1,i4=1;i2<i3;i2++) i4*=SubScripts[i2]+1;
+
+		array_offset+=i5*i4;
+
+		HeapDefaultFree(pParm[i]);
+	}
+
+	TypeSize=GetTypeSize(type,lpIndex);
+
+	array_offset*=TypeSize;
+
+	*plpOffset+=array_offset;
+
+	return 1;
+}
+ULONG_PTR Debugging_GetThisPtrOffset(LONG_PTR obp_Rip){
+	int i;
+	SUBINFO *psi;
+
+	//ripからプロシージャを取得
+	psi=GetSubFromObp(obp_Rip);
+
+	for(i=0;i<psi->VarNum;i++){
+		if(lstrcmp(psi->pVar[i].name,"_System_LocalThis")==0) break;
+	}
+	if(i==psi->VarNum) return 0;
+
+	return psi->pVar[i].offset;
+}
+int Debugging_GetVarOffset(char *variable,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
+	extern HANDLE hDebugProcess;
+	int i,i2,i3,RefType;
+	char member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+	ULONG_PTR lpData;
+	ULONG_PTR lpAccBytes;
+
+	lstrcpy(VarName,variable);
+	GetVarFormatString(VarName,array,lpPtrOffset,member,&RefType);
+
+	LONG_PTR lpIndex;
+	int *pSubScripts;
+	BOOL bArray;
+
+
+	/////////////////
+	// ローカル変数
+	/////////////////
+	extern VARIABLE *LocalVar;
+	extern int MaxLocalVarNum;
+	for(i=0;i<MaxLocalVarNum;i++){
+		if(lstrcmp(VarName,LocalVar[i].name)==0) break;
+	}
+	if(i!=MaxLocalVarNum){
+		//ポインタ変数の場合
+		if(IsPtrType(LocalVar[i].type)){
+			if(!LocalVar[i].bArray){
+				lstrcpy(lpPtrOffset,array);
+				array[0]=0;
+			}
+		}
+		else{
+			if(lpPtrOffset[0]) return 0;
+		}
+
+		pRelativeVar->offset=LocalVar[i].offset;
+		if(LocalVar[i].fRef) pRelativeVar->dwKind=VAR_REFLOCAL;
+		else pRelativeVar->dwKind=VAR_LOCAL;
+		*pType=LocalVar[i].type;
+		lpIndex=LocalVar[i].u.index;
+		*plpIndex=lpIndex;
+		bArray=LocalVar[i].bArray;
+		pSubScripts=LocalVar[i].SubScripts;
+	}
+	else{
+		if(pobj_CompilingClass){
+			///////////////////////
+			// クラスメンバの参照
+			///////////////////////
+
+			if(_memicmp(variable,"This.",5)==0){
+				//Thisオブジェクトのメンバを参照するとき
+				SlideString(variable+5,-5);
+				lstrcpy(VarName,variable);
+			}
+			else{
+				//クラス内メンバを参照するとき（通常）
+
+				for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
+					if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
+				}
+				if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
+			}
+
+			/////////////////////////////
+			// thisポインタを取得
+
+			extern HWND hDebugWnd;
+			i2=SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+			i2=pobj_dti->iProcLevel-i2;
+
+			lpData=Debugging_GetThisPtrOffset(pobj_dti->lplpObp[i2]);
+			lpData+=pobj_dti->lplpSpBase[i2];
+			if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(ULONG_PTR),&lpAccBytes)){
+				//メモリにアクセスできないとき
+				return -1;
+			}
+
+			pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+			LONG_PTR lp2;
+			i3=Debugging_GetMember(pobj_CompilingClass,variable,pType,pRelativeVar,&lp2,1);
+			if(i3==0){
+				//式エラー
+				return 0;
+			}
+			if(i3==-1){
+				//アクセスエラー
+				return -1;
+			}
+
+			*plpIndex=lp2;
+			return 1;
+		}
+
+NonClassMember:
+
+
+		///////////////////
+		// グローバル変数
+		///////////////////
+		extern VARIABLE *GlobalVar;
+		extern int MaxGlobalVarNum;
+
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
+		}
+		if(i==MaxGlobalVarNum){
+			//一致しないとき
+			return 0;
+		}
+
+		//ポインタ変数の場合
+		if(IsPtrType(GlobalVar[i].type)){
+			if(!GlobalVar[i].bArray){
+				lstrcpy(lpPtrOffset,array);
+				array[0]=0;
+			}
+		}
+		else{
+			if(lpPtrOffset[0]) return 0;
+		}
+
+		pRelativeVar->offset=GlobalVar[i].offset;
+		pRelativeVar->dwKind=VAR_GLOBAL;
+		*pType=GlobalVar[i].type;
+		lpIndex=GlobalVar[i].u.index;
+		*plpIndex=lpIndex;
+		bArray=GlobalVar[i].bArray;
+		pSubScripts=GlobalVar[i].SubScripts;
+	}
+
+
+	if(array[0]==0&&bArray){
+		//配列の先頭ポインタを示す場合
+		*pType|=FLAG_PTR;
+		if(pss) memcpy(pss,pSubScripts,MAX_ARRAYDIM);
+		return 1;
+	}
+
+	if(array[0]){
+		i3=Debugging_GetArray(pSubScripts,array,*pType,lpIndex,&pRelativeVar->offset);
+		if(i3==0){
+			//式エラー
+			return 0;
+		}
+		if(i3==-1){
+			//アクセスエラー
+			return -1;
+		}
+	}
+	if(member[0]){
+		if(*pType==DEF_OBJECT){
+			//実態オブジェクトのメンバを参照（obj.member）
+			if(RefType!=DEF_OBJECT){
+				return 0;
+			}
+
+			LONG_PTR lp2;
+			i3=Debugging_GetMember((CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0);
+			if(i3==0){
+				//式エラー
+				return 0;
+			}
+			if(i3==-1){
+				//アクセスエラー
+				return -1;
+			}
+
+			*plpIndex=lp2;
+		}
+		else if(*pType==DEF_PTR_OBJECT){
+			//ポインタオブジェクトが示すメンバを参照
+			if(lpPtrOffset[0]){
+				//pObj[n].member
+				if(RefType!=DEF_OBJECT) return 0;
+				Debugging_SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
+
+				LONG_PTR lp2;
+				i3=Debugging_GetMember((CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0);
+				if(i3==0){
+					//式エラー
+					return 0;
+				}
+				if(i3==-1){
+					//アクセスエラー
+					return -1;
+				}
+
+				*plpIndex=lp2;
+			}
+			else{
+				//pObj->member
+				if(RefType!=DEF_PTR_OBJECT) return 0;
+
+				pRelativeVar->offset=Debugging_GetVarPtr(pRelativeVar);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				if(!ReadProcessMemory(hDebugProcess,(void *)pRelativeVar->offset,&lpData,sizeof(ULONG_PTR),&lpAccBytes)) return -1;
+				pRelativeVar->offset=lpData;
+
+				LONG_PTR lp2;
+				i3=Debugging_GetMember((CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0);
+				if(i3==0){
+					//式エラー
+					return 0;
+				}
+				if(i3==-1){
+					//アクセスエラー
+					return -1;
+				}
+
+				*plpIndex=lp2;
+			}
+		}
+		else{
+			return 0;
+		}
+		return 1;
+	}
+
+	if(lpPtrOffset[0]){
+		if(!Debugging_SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset)) return 0;
+	}
+
+	return 1;
+}
Index: /BasicCompiler32/commandvalue.h
===================================================================
--- /BasicCompiler32/commandvalue.h	(revision 3)
+++ /BasicCompiler32/commandvalue.h	(revision 3)
@@ -0,0 +1,98 @@
+/* 命令語定数 */
+
+//条件、分岐、繰り返し
+#define COM_DO		0x1021
+/* 0x22は「"」なので使用不可 */
+#define COM_GOTO	0x1023
+#define COM_GOSUB	0x1024
+#define COM_LOOP	0x1026
+#define COM_RETURN	0x1027
+/* 0x28は「(」なので使用不可 */
+/* 0x29は「)」なので使用不可 */
+#define COM_FOR		0x1031
+#define COM_NEXT	0x1032
+#define COM_WHILE	0x1036
+#define COM_WEND	0x1037
+
+//データ操作
+#define COM_DIM		0x1062
+#define COM_LET		0x1066
+#define COM_DELETE	0x1068
+
+//その他
+#define COM_DEBUG		0x1073
+
+//ポインタ
+#define COM_SETDOUBLE		0x10C1
+#define COM_SETSINGLE		0x10C2
+#define COM_SETQWORD		0x10C3
+#define COM_SETDWORD		0x10C4
+#define COM_SETWORD			0x10C5
+#define COM_SETBYTE			0x10C6
+
+
+
+///////////////////////////////////
+// 以下はProjectEditorで使用される
+
+//入出力コマンド
+#define COM_PRINT		0x1150
+#define COM_INPUT		0x1151
+#define COM_OPEN		0x1152
+#define COM_CLOSE		0x1153
+#define COM_FIELD		0x1154
+#define COM_WRITE		0x1155
+
+//条件、分岐、繰り返し
+#define COM_IF			0x1160
+#define COM_SELECT		0x1161
+
+//ファイル操作
+#define COM_CHDIR		0x1170
+#define COM_KILL		0x1171
+#define COM_MKDIR		0x1172
+#define COM_GET			0x1173
+#define COM_PUT			0x1174
+
+//グラフィックス
+#define COM_CIRCLE		0x1180
+#define COM_LINE		0x1181
+#define COM_PAINT		0x1182
+#define COM_PSET		0x1183
+
+//データ操作
+#define COM_CONST		0x1190
+#define COM_TYPEDEF		0x1191
+
+//クラス関連
+#define COM_CLASS		0x1195
+#define COM_PRIVATE		0x1196
+#define COM_PUBLIC		0x1197
+#define COM_INHERITS	0x1198
+#define COM_PROTECTED	0x1199
+#define COM_INTERFACE	0x119A
+
+//その他
+#define COM_BEEP		0x11A0
+#define COM_CLS			0x11A1
+#define COM_COLOR		0x11A2
+#define COM_DECLARE		0x11A4
+#define COM_DEF			0x11A5
+#define COM_END			0x11A6
+#define COM_FUNCTION	0x11A7
+#define COM_LOCATE		0x11A8
+#define COM_RANDOMIZE	0x11A9
+#define COM_REM			0x11AA
+#define COM_SLEEP		0x11AB
+#define COM_SUB			0x11AC
+#define COM_TYPE		0x11AD
+#define COM_VIRTUAL		0x11AE
+#define COM_OVERRIDE	0x11AF
+#define COM_WITH		0x11B0
+#define COM_ENUM		0x11B1
+#define COM_ABSTRACT	0x11B2
+
+//ウィンドウ制御
+#define COM_DELWND		0x11C0
+#define COM_MSGBOX		0x11C1
+#define COM_WINDOW		0x11C2
Index: /BasicCompiler32/increment.cpp
===================================================================
--- /BasicCompiler32/increment.cpp	(revision 3)
+++ /BasicCompiler32/increment.cpp	(revision 3)
@@ -0,0 +1,427 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+
+void SetRealVariable(int type,RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//fstp ptr[ecx+offset]
+			op_fstp_base_offset(type,REG_ECX,(int)pRelativeVar->offset);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,offset
+			op_mov_RV(REG_ECX,(int)pRelativeVar->offset);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//fstp ptr[ecx]
+			op_fstp_basereg(type,REG_ECX);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//fstp ptr[ebp+ecx+offset]
+			op_fstp_base_offset_ex(type,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//fstp ptr[ebp+offset]
+			op_fstp_base_offset(type,REG_EBP,(int)pRelativeVar->offset);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add ecx,qword ptr[ebp+offset]
+			op_add_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,qword ptr[ebp+offset]
+			op_mov_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+directmem:
+		//fstp ptr[ecx]
+		op_fstp_basereg(type,REG_ECX);
+	}
+}
+
+void ExtendTypeTo32(int type,int reg);
+void ExtendTypeTo64(int type){
+	if(Is64Type(type)) return;
+
+	ExtendTypeTo32(type,REG_EAX);
+
+	if(IsSignedType(type)){
+		//cdq
+		op_cdq();
+	}
+	else{
+		//xor edx,edx
+		op_zero_reg(REG_EDX);
+	}
+}
+void ExtendTypeTo32(int type,int reg){
+	if(type==DEF_INTEGER){
+		//movsx reg32,reg16
+		op_movsx_R32R16(reg,reg);
+	}
+	else if(type==DEF_WORD){
+		//and reg,0000FFFFh
+		op_and_RV(reg,(int)0x0000FFFF);
+	}
+	else if(type==DEF_CHAR){
+		//movsx reg32,reg8
+		op_movsx_R32R8(reg,reg);
+	}
+	else if(type==DEF_BYTE){
+		//and reg,000000FFh
+		op_and_RV(reg,(int)0xFF);
+	}
+}
+void ExtendTypeTo16(int type,int reg){
+	if(type==DEF_CHAR){
+		//movsx reg16,reg8
+		op_movsx_R16R8(reg,reg);
+	}
+	else if(type==DEF_BYTE){
+		//and reg,000000FFh
+		op_and_RV(reg,(int)0xFF);
+	}
+}
+
+void SetWholeVariable(int var_size,int type,RELATIVE_VAR *pRelative,int reg){
+	if(type==DEF_DOUBLE){
+		//Double型
+
+	}
+	else if(type==DEF_SINGLE){
+		//Single型
+
+	}
+	else{
+		//その他の整数
+
+		if(var_size==sizeof(_int64)){
+			//eaxの値を64ビット（edx:eax）に拡張する
+			ExtendTypeTo64(type);
+		}
+		else if(var_size==sizeof(long)){
+			//レジスタの値を32ビット（eax）に拡張する
+			ExtendTypeTo32(type,reg);
+		}
+		else if(var_size==sizeof(short)){
+			//レジスタの値を16ビット（ax）に拡張する
+			ExtendTypeTo16(type,reg);
+		}
+		//8ビットは拡張なし
+	}
+
+	if(var_size==sizeof(_int64)){
+		//下位32ビット
+		SetWholeVariable(sizeof(long),DEF_LONG,pRelative,REG_EAX);
+
+		//上位32ビット
+		pRelative->offset+=sizeof(long);
+		SetWholeVariable(sizeof(long),DEF_LONG,pRelative,REG_EDX);
+		pRelative->offset-=sizeof(long);
+
+		return;
+	}
+
+	if(pRelative->dwKind==VAR_GLOBAL){
+		if(pRelative->bOffsetOffset){
+			//mov ptr[ecx+offset],eax/ax/al
+			op_mov_MR(var_size,reg,REG_ECX,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ptr[offset],eax/ax/al
+			op_mov_MR(var_size,reg,0,(int)pRelative->offset,MOD_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_LOCAL){
+		if(pRelative->bOffsetOffset){
+			//mov ptr[ebp+ecx+offset],eax/ax/al
+			op_mov_MR_ex(var_size,reg,REG_EBP,REG_ECX,(int)pRelative->offset,USE_OFFSET);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ptr[ebp+offset],eax/ax/al
+			op_mov_MR(var_size,reg,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_REFLOCAL){
+		if(pRelative->bOffsetOffset){
+			//add ecx,qword ptr[ebp+offset]
+			op_add_RM(var_size,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ecx,qword ptr[ebp+offset]
+			op_mov_RM(var_size,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelative->dwKind==VAR_DIRECTMEM){
+directmem:
+
+		//mov ptr[ecx],eax/ax/al
+		op_mov_MR(var_size,reg,REG_ECX,0,MOD_BASE);
+	}
+}
+
+void SetVariableFromReg(int VarType,int CalcType,RELATIVE_VAR *pRelativeVar){
+	/////////////////////////////////////////////////
+	// raxの内容を変数にコピーするコードを抽出
+	/////////////////////////////////////////////////
+
+	if(VarType==DEF_DOUBLE){
+		//Double型変数へスタックの内容を格納する
+		SetRealVariable(VarType,pRelativeVar);
+	}
+	else if(VarType==DEF_SINGLE){
+		//Single型変数へスタックの内容を格納する
+		SetRealVariable(VarType,pRelativeVar);
+	}
+	else{
+		//整数型
+		SetWholeVariable(GetTypeSize(VarType,-1),CalcType,pRelativeVar,REG_EAX);
+	}
+}
+
+
+void IncDec(int idCalc, char *lpszLeft, char *lpszRight){
+	int VarType;
+	LONG_PTR lpVarIndex;
+	RELATIVE_VAR VarRelativeVar;
+
+
+	///////////////////////////
+	// 変数アドレスを取得
+	///////////////////////////
+
+	if(!GetVarOffset(
+		1,
+		lpszLeft,
+		&VarType,
+		&VarRelativeVar,
+		&lpVarIndex)) return;
+
+	if(IsUse_ecx(&VarRelativeVar)){
+		//push ecx
+		op_push(REG_ECX);
+	}
+
+
+	///////////////////////////////////
+	// レジスタへ変数の内容をコピー
+	///////////////////////////////////
+
+	if(IsRealNumberType(VarType)){
+		//実数
+		SetReg_RealVariable(VarType,&VarRelativeVar);
+	}
+	else{
+		//整数
+		SetReg_WholeVariable(VarType,&VarRelativeVar,REG_EAX);
+	}
+
+	
+	if(IsWholeNumberType(VarType)&&lstrcmp(lpszRight,"1")==0&&
+		(idCalc==CALC_ADDITION||idCalc==CALC_SUBTRACTION)){
+		////////////////////////////////////////////
+		// 整数型のインクリメント・デクリメント
+		////////////////////////////////////////////
+
+		if(Is64Type(VarType)){
+			if(idCalc==CALC_ADDITION){
+				//64ビット インクリメント
+
+				//add eax,1
+				op_add_RV8(REG_EAX,1);
+
+				//adc edx,0
+				op_adc_RV8(REG_EDX,0);
+			}
+			else if(idCalc==CALC_SUBTRACTION){
+				//64ビット デクリメント
+
+				//sub eax,1
+				op_sub_RV8(REG_EAX,1);
+
+				//sbb edx,0
+				op_sbb_RV8(REG_EDX,0);
+			}
+		}
+		else{
+			if(idCalc==CALC_ADDITION){
+				//インクリメント
+				op_inc(REG_EAX);
+			}
+			else if(idCalc==CALC_SUBTRACTION){
+				//デクリメント
+				op_dec(REG_EAX);
+			}
+		}
+	}
+	else{
+		//変数オフセットを一時退避
+		//push ecx
+		op_push(REG_ECX);
+
+
+		if(VarType==DEF_DOUBLE){
+			//sub esp,8
+			op_sub_esp(8);
+
+			//fstp qword ptr[esp]
+			op_fstp_basereg(VarType,REG_ESP);
+		}
+		else if(VarType==DEF_SINGLE){
+			//sub esp,4
+			op_sub_esp(4);
+
+			//fstp dword ptr[esp]
+			op_fstp_basereg(VarType,REG_ESP);
+		}
+		else if(Is64Type(VarType)){
+			//push edx
+			op_push(REG_EDX);
+
+			//push eax
+			op_push(REG_EAX);
+		}
+		else{
+			//push eax
+			op_push(REG_EAX);
+		}
+
+		int CalcType;
+		CalcType=NumOpe(lpszRight,VarType,lpVarIndex,0);
+
+		if(VarType==DEF_DOUBLE)			ChangeTypeToDouble(CalcType);
+		else if(VarType==DEF_SINGLE)	ChangeTypeToSingle(CalcType);
+		else ChangeTypeToWhole(CalcType,VarType);
+
+		int type[255],sp;
+		LONG_PTR index_stack[255];
+		type[0]=VarType;
+		type[1]=VarType;
+		index_stack[0]=lpVarIndex;
+		index_stack[1]=lpVarIndex;
+		sp=2;
+
+		switch(idCalc){
+			case CALC_XOR:
+				Calc_Xor(type,index_stack,&sp);
+				break;
+			case CALC_OR:
+				Calc_Or(type,index_stack,&sp);
+				break;
+			case CALC_AND:
+				Calc_And(type,index_stack,&sp);
+				break;
+			case CALC_SHL:
+				Calc_SHL(type,&sp);
+				break;
+			case CALC_SHR:
+				Calc_SHR(type,&sp);
+				break;
+			case CALC_ADDITION:
+			case CALC_SUBTRACTION:
+			case CALC_PRODUCT:
+				CalcTwoTerm_Arithmetic(idCalc,type,index_stack,&sp);
+				break;
+			case CALC_MOD:
+				Calc_Mod(type,&sp);
+				break;
+			case CALC_QUOTIENT:
+				Calc_Divide(type,&sp,VarType);
+				break;
+			case CALC_INTQUOTIENT:
+				Calc_IntDivide(type,index_stack,&sp);
+				break;
+			case CALC_POWER:
+				Calc_Power(type,&sp);
+				break;
+		}
+
+
+		if(VarType==DEF_DOUBLE){
+			//fld qword ptr[esp]
+			op_fld_basereg(VarType,REG_ESP);
+
+			//add esp,8
+			op_add_esp(8);
+		}
+		else if(VarType==DEF_SINGLE){
+			//fld dword ptr[esp]
+			op_fld_basereg(VarType,REG_ESP);
+
+			//add esp,4
+			op_add_esp(4);
+		}
+		else if(Is64Type(VarType)){
+			//pop eax
+			op_pop(REG_EAX);
+
+			//pop edx
+			op_pop(REG_EDX);
+		}
+		else{
+			//pop eax
+			op_pop(REG_EAX);
+		}
+
+
+		//変数オフセットを復元
+		//pop ecx
+		op_pop(REG_ECX);
+	}
+
+
+	/////////////////////////////////////////////////
+	// レジスタの内容を変数にコピー
+	/////////////////////////////////////////////////
+
+	if(IsUse_ecx(&VarRelativeVar)){
+		//pop ecx
+		op_pop(REG_ECX);
+	}
+
+	SetVariableFromReg(VarType,VarType,&VarRelativeVar);
+}
Index: /BasicCompiler32/manifest.xml
===================================================================
--- /BasicCompiler32/manifest.xml	(revision 3)
+++ /BasicCompiler32/manifest.xml	(revision 3)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assemblyIdentity
+version="1.0.0.0"
+processorArchitecture="x86"
+name="Microsoft.Winweb.BasicCompiler.exe"
+type="win32"
+/>
+<description>Description</description>
+<dependency>
+<dependentAssembly>
+<assemblyIdentity
+type="win32"
+name="Microsoft.Windows.Common-Controls"
+version="6.0.0.0"
+processorArchitecture="x86"
+publicKeyToken="6595b64144ccf1df"
+language="*"
+/>
+</dependentAssembly>
+</dependency>
+</assembly>
Index: /BasicCompiler32/op32_main.cpp
===================================================================
--- /BasicCompiler32/op32_main.cpp	(revision 3)
+++ /BasicCompiler32/op32_main.cpp	(revision 3)
@@ -0,0 +1,813 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+
+
+BOOL IsSafeReg(int reg){
+	if(reg==REG_EBX||reg==REG_ESI||reg==REG_EDI) return 1;
+	return 0;
+}
+
+
+
+/////////////////////////////////////////////////
+// ModR/Mバイト、SIBバイト、ディスプレースメント
+/////////////////////////////////////////////////
+
+//スケール
+#define SCALE_NON	(char)0x00
+#define SCALE_2		(char)0x40
+#define SCALE_4		(char)0x80
+#define SCALE_8		(char)0xC0
+
+//インデックスなし
+#define INDEX_NON	0x04
+
+void set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,int disp){
+	if(mod==MOD_DISP32){
+		//ModR/Mバイト
+		OpBuffer[obp++]=(char)(      REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(0x04));
+
+		base_reg=0x05;
+		index_reg=INDEX_NON;
+	}
+	else{
+		//ModR/Mバイト
+		OpBuffer[obp++]=(char)(mod | REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(base_reg));
+	}
+
+
+	//レジスタモードの場合は、ここで終了
+	if(mod==MOD_REG) return;
+
+
+	if(REGISTER_OPERAND(base_reg)==0x04||mod==MOD_DISP32){
+		//////////////////////
+		// SIBバイトを使う
+		//////////////////////
+
+		OpBuffer[obp++]=(char)(scale| REGISTER_OPERAND(index_reg)<<3 | REGISTER_OPERAND(base_reg));
+	}
+
+	//ディスプレースメントを必要としない場合は、ここで終了
+	if(mod==MOD_BASE) return;
+
+
+	//////////////////////////
+	// ディスプレースメント
+	//////////////////////////
+
+	if(mod==MOD_BASE_DISP8) OpBuffer[obp++]=(char)disp;
+	else{
+		*((long *)(OpBuffer+obp))=disp;
+		obp+=sizeof(long);
+	}
+}
+
+
+
+void __op_format(char op_prefix,char opcode,int reg){
+	//命令プリフィックス
+	if(op_prefix) OpBuffer[obp++]=op_prefix;
+
+	//オペコード、レジスタ
+	OpBuffer[obp++]=(char)(opcode|REGISTER_OPERAND(reg));
+}
+void __op_format(char op_prefix,char opcode1,char opcode2,int reg,int base_reg,int offset,char mod){
+	//命令プリフィックス
+	if(op_prefix) OpBuffer[obp++]=op_prefix;
+
+	//オペコード
+	OpBuffer[obp++]=opcode1;
+	if(opcode2) OpBuffer[obp++]=opcode2;
+
+	//ModR/M, SIB, disp
+	set_mod_rm_sib_disp(mod,reg,SCALE_NON,INDEX_NON,base_reg,offset);
+}
+
+
+
+///////////////////
+// mov関連
+///////////////////
+
+void op_mov_RV(int reg,int offset){
+	//mov reg,value
+
+	//オペコード、レジスタ
+	OpBuffer[obp++]=(char)(0xB8|REGISTER_OPERAND(reg));
+
+	//DISP32
+	*((long *)(OpBuffer+obp))=offset;
+	obp+=sizeof(long);
+}
+void op_mov_RV(int op_size,int reg,int offset){
+	if(op_size==PTR_SIZE) op_mov_RV(reg,offset);
+	else SetError(300,NULL,cp);
+}
+void op_mov_RR(int reg1,int reg2){
+	//mov reg1,reg2
+
+	if(reg1==reg2) return;
+
+	//1000 1011 11xx xbbb
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+void op_mov_RM(int op_size,int reg,int base_reg,int offset,char mod){
+	//mov reg32,dword ptr[base_reg+offset]
+	//mov reg16,word ptr[base_reg+offset]
+	//mov reg8,byte ptr[base_reg+offset]
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+	if(op_size==sizeof(short)) op_prefix=(char)0x66;
+
+	//オペコード
+	char opcode;
+	if(op_size==sizeof(char)) opcode=(char)0x8A;
+	else opcode=(char)0x8B;
+
+	__op_format(op_prefix,opcode,0,reg,base_reg,offset,mod);
+}
+void op_mov_RM_ex(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset){
+	//mov reg32,dword ptr[base_reg1+base_reg2+offset]
+	//mov reg16,word ptr[base_reg1+base_reg2+offset]
+	//mov reg8,byte ptr[base_reg1+base_reg2+offset]
+
+	if(base_reg1==REG_ESP){
+		//SIBバイトのindex部にespは指定できない
+		base_reg1=base_reg2;
+		base_reg2=REG_ESP;
+	}
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0x8A;
+	else OpBuffer[obp++]=(char)0x8B;
+
+	if(bUseOffset){
+		///////////////////////////
+		// オフセット値を使う
+		///////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+
+		//オフセット値
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		///////////////////////////
+		// オフセット値を使わない
+		///////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x04| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+	}
+}
+void op_mov_MR(int op_size,int reg,int base_reg,int offset,char mod){
+	//mov dword ptr[base_reg+offset],reg32
+	//mov word ptr[base_reg+offset],reg16
+	//mov byte ptr[base_reg+offset],reg8
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+	if(op_size==sizeof(short)) op_prefix=(char)0x66;
+
+	//オペコード
+	char opcode;
+	if(op_size==sizeof(char)) opcode=(char)0x88;
+	else opcode=(char)0x89;
+
+	__op_format(op_prefix,opcode,0,reg,base_reg,offset,mod);
+}
+void op_mov_MR_ex(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset){
+	//mov dword ptr[base_reg1+base_reg2+offset],reg32
+	//mov word ptr[base_reg1+base_reg2+offset],reg16
+	//mov byte ptr[base_reg1+base_reg2+offset],reg8
+
+	if(base_reg1==REG_ESP){
+		//SIBバイトのindex部にrspは指定できない
+		base_reg1=base_reg2;
+		base_reg2=REG_ESP;
+	}
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0x88;
+	else OpBuffer[obp++]=(char)0x89;
+
+	if(bUseOffset==USE_OFFSET){
+		//////////////////////////
+		//オフセット値を使う
+		//////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+
+		//オフセット値
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		//////////////////////////
+		//オフセット値を使わない
+		//////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x04| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+	}
+}
+
+
+
+
+////////////////////////////////
+// movsx関連
+////////////////////////////////
+
+void op_movsx_R32R16(int reg32,int reg16){
+	//movsx reg32,reg16
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+
+	//オペコード
+	char opcode=(char)0x0F;
+	char opcode2=(char)0xBF;
+
+	__op_format(op_prefix,opcode,opcode2,reg32,reg16,0,MOD_REG);
+}
+void op_movsx_R32R8(int reg32,int reg8){
+	//movsx reg32,reg8
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+
+	//オペコード
+	char opcode=(char)0x0F;
+	char opcode2=(char)0xBE;
+
+	__op_format(op_prefix,opcode,opcode2,reg32,reg8,0,MOD_REG);
+}
+void op_movsx_R16R8(int reg16,int reg8){
+	//movsx reg16,reg8
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=(char)0x66;
+
+	//オペコード
+	char opcode=(char)0x0F;
+	char opcode2=(char)0xBE;
+
+	__op_format(op_prefix,opcode,opcode2,reg16,reg8,0,MOD_REG);
+}
+
+
+
+//////////////////////////////////
+// インクリメント・デクリメント
+//////////////////////////////////
+
+void op_inc(int reg){
+	//inc reg
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+
+	//オペコード
+	char opcode=(char)0xFF;
+
+	__op_format(op_prefix,opcode,0,0,reg,0,MOD_REG);
+}
+void op_dec(int reg){
+	op_inc(reg);
+	OpBuffer[obp-1]=OpBuffer[obp-1]|0x08;
+}
+
+
+
+/////////////////////
+// add関連
+/////////////////////
+
+void op_add_RV8(int reg,char cValue){
+	//add reg,value8
+
+	OpBuffer[obp++]=(char)0x83;
+	OpBuffer[obp++]=(char)(0xC0|REGISTER_OPERAND(reg));
+	OpBuffer[obp++]=cValue;
+}
+void op_add_RM(int op_size,int reg,int base_reg,int offset,char mod){
+	//add reg32,dword ptr[base_reg+offset]
+	//add reg16,word ptr[base_reg+offset]
+	//add reg8,byte ptr[base_reg+offset]
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+	if(op_size==sizeof(short)) op_prefix=(char)0x66;
+
+	//オペコード
+	char opcode;
+	if(op_size==sizeof(char)) opcode=(char)0x02;
+	else opcode=(char)0x03;
+
+	__op_format(op_prefix,opcode,0,reg,base_reg,offset,mod);
+}
+void op_adc_RV8(int reg,char cValue){
+	//adc reg,value8
+
+	OpBuffer[obp++]=(char)0x83;
+	OpBuffer[obp++]=(char)(0xD0|REGISTER_OPERAND(reg));
+	OpBuffer[obp++]=cValue;
+}
+
+
+/////////////////////
+// sub関連
+/////////////////////
+
+void op_sub_RV8(int reg,char cValue){
+	//sub reg,value8
+
+	OpBuffer[obp++]=(char)0x83;
+	OpBuffer[obp++]=(char)(0xE8|REGISTER_OPERAND(reg));
+	OpBuffer[obp++]=cValue;
+}
+void op_sbb_RV8(int reg,char cValue){
+	//sbb reg,value8
+
+	OpBuffer[obp++]=(char)0x83;
+	OpBuffer[obp++]=(char)(0xD8|REGISTER_OPERAND(reg));
+	OpBuffer[obp++]=cValue;
+}
+
+
+
+//////////////////////
+// and関連
+//////////////////////
+
+void op_and_RV(int reg,int value){
+	//and reg,value
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+
+	//オペコード
+	char opcode=(char)0x81;
+
+	__op_format(op_prefix,opcode,0,0,reg,value,MOD_REG);
+}
+
+
+
+///////////////////////
+// 64ビット関連
+///////////////////////
+
+void op_cdq(){
+	//cdq
+	OpBuffer[obp++]=(char)0x99;
+}
+
+
+
+/////////////////////
+// ストリング関係
+/////////////////////
+
+void op_rep_movs(int op_size){
+	if(op_size==sizeof(BYTE)){
+		//rep movs byte ptr[edi],byte ptr[esi]
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0xA4;
+	}
+	else if(op_size==sizeof(short)){
+		//rep movs word ptr[edi],word ptr[esi]
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0xA5;
+	}
+	else if(op_size==sizeof(long)){
+		//rep movs dword ptr[edi],dword ptr[esi]
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0xA5;
+	}
+}
+
+
+
+
+//////////////////////////
+// スタック関連
+//////////////////////////
+
+void op_push(int reg){
+	//push reg
+
+	//オペコード、レジスタ
+	__op_format(0,(char)0x50,reg);
+}
+void op_push_value(long data){
+	//スタックにリテラル値をプッシュ
+	if(-128<=data&&data<=127){
+		//push 8ビット値
+		OpBuffer[obp++]=(char)0x6A;
+		OpBuffer[obp++]=(char)data;
+	}
+	else{
+		//push 32ビット値
+		OpBuffer[obp++]=(char)0x68;
+		*((long *)(OpBuffer+obp))=data;
+		obp+=sizeof(long);
+	}
+}
+void op_pop(int reg){
+	//pop reg
+
+	//オペコード、レジスタ
+	__op_format(0,(char)0x58,reg);
+}
+void op_add_esp(int num){
+	//スタックポインタの加算（pop方向）
+
+	//add esp,num
+	if(0xFFFFFF80&num){
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)0xC4;
+		*((long *)(OpBuffer+obp))=num;
+		obp+=sizeof(long);
+	}
+	else{
+		//「128 > num > -127」の場合
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)num;
+	}
+}
+void op_sub_esp(int num){
+	//スタックポインタの減算（push方向）
+
+	//sub esp,num
+	if(0xFFFFFF80&num){
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)0xEC;
+		*((long *)(OpBuffer+obp))=num;
+		obp+=sizeof(long);
+	}
+	else{
+		//「128 > num > -127」の場合
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xEC;
+		OpBuffer[obp++]=(char)num;
+	}
+}
+
+
+
+////////////////////
+// test関連
+////////////////////
+
+void op_test(int reg1,int reg2){
+	//test reg1,reg2
+
+	//1000 0101 11rr rbbb
+	OpBuffer[obp++]=(char)0x85;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+
+
+
+//////////////////////////////
+// 浮動小数点関連
+//////////////////////////////
+
+void op_fld_ptr_esp(int type){
+	//スタックポインタが示すバッファのデータを浮動小数点レジスタへロード
+
+	if(type==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type==DEF_SINGLE){
+		//fld dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type==DEF_INT64){
+		//fild qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type==DEF_LONG){
+		//fild dword ptr[esp]
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+}
+void op_fld_basereg(int type,int base_reg){
+	//fld ptr[reg]
+
+	//オペコード
+	if(type==DEF_DOUBLE)		OpBuffer[obp++]=(char)0xDD;
+	else if(type==DEF_SINGLE)	OpBuffer[obp++]=(char)0xD9;
+	else SetError(300,NULL,cp);
+
+	if(base_reg==REG_ESP){
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(base_reg==REG_EBP){
+		OpBuffer[obp++]=(char)0x45;
+		OpBuffer[obp++]=(char)0x00;
+	}
+	else{
+		OpBuffer[obp++]=(char)REGISTER_OPERAND(base_reg);
+	}
+}
+void op_fld_base_offset(int type,int base_reg,int offset){
+	//fld ptr[reg+offset]
+
+	//オペコード
+	if(type==DEF_DOUBLE)		OpBuffer[obp++]=(char)0xDD;
+	else if(type==DEF_SINGLE)	OpBuffer[obp++]=(char)0xD9;
+	else SetError(300,NULL,cp);
+
+	//オペコード、レジスタ
+	if(base_reg==REG_ESP){
+		OpBuffer[obp++]=(char)0x84;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else{
+		OpBuffer[obp++]=(char)(0x80|REGISTER_OPERAND(base_reg));
+	}
+
+	//オフセット値
+	*((long *)(OpBuffer+obp))=offset;
+	obp+=sizeof(long);
+}
+void op_fld_base_offset_ex(int type,int base_reg1,int base_reg2,int offset,BOOL bUseOffset){
+	//fld ptr[base_reg1+base_reg2+offset]
+
+	if(base_reg1==REG_ESP){
+		//SIBバイトのindex部にespは指定できない
+		base_reg1=base_reg2;
+		base_reg2=REG_ESP;
+	}
+
+	//オペコード
+	if(type==DEF_DOUBLE)		OpBuffer[obp++]=(char)0xDD;
+	else if(type==DEF_SINGLE)	OpBuffer[obp++]=(char)0xD9;
+	else SetError(300,NULL,cp);
+
+	int reg=0;
+	if(bUseOffset){
+		///////////////////////////
+		// オフセット値を使う
+		///////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+
+		//オフセット値
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		///////////////////////////
+		// オフセット値を使わない
+		///////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x04| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+	}
+}
+void op_fstp_basereg(int type,int base_reg){
+	//fstp ptr[reg]
+
+	//オペコード
+	if(type==DEF_DOUBLE)		OpBuffer[obp++]=(char)0xDD;
+	else if(type==DEF_SINGLE)	OpBuffer[obp++]=(char)0xD9;
+	else SetError(300,NULL,cp);
+
+	if(base_reg==REG_ESP){
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(base_reg==REG_EBP){
+		OpBuffer[obp++]=(char)0x5D;
+		OpBuffer[obp++]=(char)0x00;
+	}
+	else{
+		OpBuffer[obp++]=(char)(0x18|REGISTER_OPERAND(base_reg));
+	}
+}
+void op_fstp_base_offset(int type,int base_reg,int offset){
+	//fstp ptr[reg+offset]
+
+	//オペコード
+	if(type==DEF_DOUBLE)		OpBuffer[obp++]=(char)0xDD;
+	else if(type==DEF_SINGLE)	OpBuffer[obp++]=(char)0xD9;
+	else SetError(300,NULL,cp);
+
+	//オペコード、レジスタ
+	if(base_reg==REG_ESP){
+		OpBuffer[obp++]=(char)0x9C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else{
+		OpBuffer[obp++]=(char)(0x98|REGISTER_OPERAND(base_reg));
+	}
+
+	//オフセット値
+	*((long *)(OpBuffer+obp))=offset;
+	obp+=sizeof(long);
+}
+void op_fstp_base_offset_ex(int type,int base_reg1,int base_reg2,int offset,BOOL bUseOffset){
+	//fstp ptr[base_reg1+base_reg2+offset]
+
+	if(base_reg1==REG_ESP){
+		//SIBバイトのindex部にespは指定できない
+		base_reg1=base_reg2;
+		base_reg2=REG_ESP;
+	}
+
+	//オペコード
+	if(type==DEF_DOUBLE)		OpBuffer[obp++]=(char)0xDD;
+	else if(type==DEF_SINGLE)	OpBuffer[obp++]=(char)0xD9;
+	else SetError(300,NULL,cp);
+
+	int reg=0;
+	if(bUseOffset){
+		///////////////////////////
+		// オフセット値を使う
+		///////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x9C| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+
+		//オフセット値
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		///////////////////////////
+		// オフセット値を使わない
+		///////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x1C| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+	}
+}
+
+
+
+//////////////////////////////
+// レジスタ関連
+//////////////////////////////
+
+void op_zero_reg(int reg){
+	//レジスタに0をセット
+
+	switch(reg){
+		case REG_EAX:
+			//xor eax,eax
+			OpBuffer[obp++]=(char)0x33;
+			OpBuffer[obp++]=(char)0xC0;
+			break;
+		case REG_EBX:
+			//xor ebx,ebx
+			OpBuffer[obp++]=(char)0x33;
+			OpBuffer[obp++]=(char)0xDB;
+			break;
+		case REG_ECX:
+			//xor ecx,ecx
+			OpBuffer[obp++]=(char)0x33;
+			OpBuffer[obp++]=(char)0xC9;
+			break;
+		case REG_EDX:
+			//xor edx,edx
+			OpBuffer[obp++]=(char)0x33;
+			OpBuffer[obp++]=(char)0xD2;
+			break;
+		case REG_EBP:
+			//xor ebp,ebp
+			OpBuffer[obp++]=(char)0x33;
+			OpBuffer[obp++]=(char)0xED;
+			break;
+	}
+}
+
+void fpu_cast(){
+	///////////////////////
+	// FPUの切り捨て設定
+	///////////////////////
+
+	//sub esp,16
+	op_sub_esp(16);
+
+	//mov dword ptr[esp+4],eax
+	OpBuffer[obp++]=(char)0x89;
+	OpBuffer[obp++]=(char)0x44;
+	OpBuffer[obp++]=(char)0x24;
+	OpBuffer[obp++]=(char)0x04;
+
+	//fnstcw word ptr[esp]
+	OpBuffer[obp++]=(char)0xD9;
+	OpBuffer[obp++]=(char)0x3C;
+	OpBuffer[obp++]=(char)0x24;
+
+	//mov ax,word ptr[esp]
+	OpBuffer[obp++]=(char)0x66;
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0x04;
+	OpBuffer[obp++]=(char)0x24;
+
+	//or ah,0Ch
+	OpBuffer[obp++]=(char)0x80;
+	OpBuffer[obp++]=(char)0xCC;
+	OpBuffer[obp++]=(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)0x02;
+
+	//fldcw word ptr[esp+2]
+	OpBuffer[obp++]=(char)0xD9;
+	OpBuffer[obp++]=(char)0x6C;
+	OpBuffer[obp++]=(char)0x24;
+	OpBuffer[obp++]=(char)0x02;
+
+	//mov eax,dword ptr[esp+4]
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)0x44;
+	OpBuffer[obp++]=(char)0x24;
+	OpBuffer[obp++]=(char)0x04;
+
+	//add esp,16
+	op_add_esp(16);
+}
+void fpu_cast_end(){
+	//sub esp,16
+	op_sub_esp(16);
+
+	//fldcw word ptr[esp]
+	OpBuffer[obp++]=(char)0xD9;
+	OpBuffer[obp++]=(char)0x2C;
+	OpBuffer[obp++]=(char)0x24;
+
+	//add esp,16
+	op_add_esp(16);
+}
+
+
+/////////////////////////////
+// 関数呼び出し
+/////////////////////////////
+
+void op_call(SUBINFO *psi){
+	OpBuffer[obp++]=(char)0xE8;
+	pobj_SubAddrSchedule->add(psi,1);
+	psi->bUse=1;
+	obp+=sizeof(long);
+}
Index: /BasicCompiler32/resource.h
===================================================================
--- /BasicCompiler32/resource.h	(revision 3)
+++ /BasicCompiler32/resource.h	(revision 3)
@@ -0,0 +1,56 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by BasicCompiler.rc
+//
+#define IDD_MAIN                        101
+#define IDD_VARLIST                     103
+#define IDI_MAIN                        108
+#define IDI_VARSTRUCT                   109
+#define IDI_VARDATA                     110
+#define IDI_VARSTR                      111
+#define IDI_VARARRAY                    112
+#define IDI_VARPTRSTRUCT                113
+#define IDD_CLIPMAIN                    114
+#define IDD_DEBUGGER                    115
+#define IDR_DEBUGGERTOOLBAR             117
+#define IDD_DEBUGGER_TOOLBARBASE        120
+#define IDR_DEBUGGER_VARLIST_MENU       122
+#define IDR_DEBUGGERTOOLBAR_DISABLED    125
+#define IDC_EXEPATH                     1000
+#define IDC_PROGRESS                    1001
+#define IDC_ERRORLIST                   1002
+#define IDC_MESSAGE                     1003
+#define IDC_DEBUGLIST                   1005
+#define IDC_SHOWERROR                   1006
+#define IDC_SHOWDEBUG                   1007
+#define IDC_THREADCOMBO                 1014
+#define IDC_VARTREE                     1015
+#define IDC_GLOBAL                      1016
+#define IDC_LOCAL                       1017
+#define IDC_PROCCOMBO                   1018
+#define IDC_HIDESYSVAR                  1019
+#define IDC_STEPIN                      1021
+#define IDC_STEPOVER                    1022
+#define IDC_ESP                         1023
+#define IDC_DUMMYCANCEL                 1024
+#define IDC_TAB1                        1025
+#define IDC_VARPOS                      1029
+#define IDC_WATCHLIST                   1033
+#define IDC_STATIC_VERSION              1034
+#define IDC_DEBUG_START                 40003
+#define IDC_DEBUG_STEPOVER              40004
+#define IDC_DEBUG_STEPIN                40005
+#define IDM_SHOW_DEFAULTSYSTEM_VAR      40007
+#define IDM_SHOW_RAD_VAR                40008
+#define IDM_SHOW_GUID_VAR               40009
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        126
+#define _APS_NEXT_COMMAND_VALUE         40010
+#define _APS_NEXT_CONTROL_VALUE         1035
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
Index: /BasicCompiler64/BasicCompiler.h
===================================================================
--- /BasicCompiler64/BasicCompiler.h	(revision 3)
+++ /BasicCompiler64/BasicCompiler.h	(revision 3)
@@ -0,0 +1,93 @@
+#include "../BasicCompiler_Common/common.h"
+
+LPSTR BasicFileFilter="プログラム ファイル(*.ab;*.bas;*.abp;*.sbp)\0*.ab;*.bas;*.abp;*sbp\0テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0";
+LPSTR ExeFileFilter="実行可能ファイル(*.exe)\0*.exe\0すべてのファイル(*.*)\0*\0\0";
+
+HINSTANCE hInst;
+HWND hOwnerEditor;
+HWND hMainDlg;
+HWND hDebugWnd;
+HANDLE hHeap;
+int ScreenX,ScreenY;
+WNDPROC OldErrorListProc,OldDebugListProc,OldProgressProc;
+WNDPROC OldThreadComboProc;
+WNDPROC OldProcComboProc;
+unsigned short TypeOfSubSystem;
+BOOL bClipCompileView;
+
+//不揮発性データ（レジストリに保存される）
+CNonVolatile *pobj_nv;
+
+//プログラム情報
+BOOL bCompilingGlobal;
+BOOL bStrict;
+DWORD ImageBase;
+INCLUDEFILEINFO IncludeFileInfo;
+SUBINFO **ppSubHash;
+int SubNum;
+char **ppMacroNames;
+int MacroNum;
+DECLAREINFO **ppDeclareHash;
+CONSTINFO **ppConstHash;
+PROCPTRINFO *pProcPtrInfo;
+int ProcPtrInfoNum;
+
+ERRORINFO *pErrorInfo;
+int ErrorNum;
+int CompileMsgNum;
+int WarningNum;
+BOOL bError;
+char **SynonymErrorWords;
+int SynonymErrorNum;
+BOOL bStopCompile;
+
+//リソース情報
+char ResourceFileName[MAX_PATH];
+RESOURCEDATAINFO *pCursorResourceInfo;
+int CursorResourceNum;
+RESOURCEDATAINFO *pBitmapResourceInfo;
+int BitmapResourceNum;
+RESOURCEDATAINFO *pIconResourceInfo;
+int IconResourceNum;
+char szManifestPath[MAX_PATH];
+int XPManiResourceNum;
+
+//デバッグ
+BOOL bDebugCompile=0;
+BOOL bDebugRun=0;
+BOOL bAttach=0;
+DWORD dwAttachProcessId;
+BOOL bDebugSupportProc;
+BOOL bSystemProc;
+DWORD dwStepRun;
+double width_ratio_VarList=0.3;
+HWND hDebuggerToolbar;
+char szDebugCmdLine[1024];
+char szDebugExeForDll[1024];
+
+//デバッグ用行番号情報
+LINEINFO *pLineInfo;
+int MaxLineInfoNum;
+
+//ウォッチリスト
+int width_WatchColumn_Expression=200;
+int width_WatchColumn_Value=400;
+
+
+//関数ポインタのベース タイプ インデックス（左辺の関数ポインタのパラメータを参考に、オーバーロードを解決）
+LONG_PTR ProcPtr_BaseIndex;
+
+
+int cp;
+
+BOOL bDll;
+
+char *basbuf;
+char *pBaseBuffer;
+
+char BasicSystemDir[MAX_PATH];	//BasicCompiler.exeが存在するディレクトリ
+char BasicCurDir[MAX_PATH];		//コンパイルするファイルが存在するディレクトリ
+char SourceFileName[MAX_PATH]="";
+char OutputFileName[MAX_PATH];
+char szDllName[MAX_PATH];
+char szIncludeDir[MAX_PATH]="";
Index: /BasicCompiler64/BasicCompiler.rc
===================================================================
--- /BasicCompiler64/BasicCompiler.rc	(revision 3)
+++ /BasicCompiler64/BasicCompiler.rc	(revision 3)
@@ -0,0 +1,412 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// 日本語 resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
+#ifdef _WIN32
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+#pragma code_page(932)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+#if defined(APSTUDIO_INVOKED) || defined(JPN)
+#if defined(APSTUDIO_INVOKED)
+IDD_MAIN$(JPN) DIALOG DISCARDABLE  0, 0, 205, 229
+#else
+IDD_MAIN DIALOG DISCARDABLE  0, 0, 205, 229
+#endif
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "ActiveBasic Compiler&Debugger"
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    DEFPUSHBUTTON   "コンパイル",IDOK,148,208,50,14
+    LTEXT           "出力先:",IDC_STATIC,7,10,23,8
+    EDITTEXT        IDC_EXEPATH,34,7,164,14,ES_AUTOHSCROLL
+    CONTROL         "Progress1",IDC_PROGRESS,"msctls_progress32",0x0,13,56,
+                    179,14
+    GROUPBOX        "進行状況",IDC_STATIC,7,31,191,45
+    LTEXT           "準備中...",IDC_MESSAGE,13,44,161,8
+    GROUPBOX        "メッセージ リスト",IDC_STATIC,7,83,191,117
+    EDITTEXT        IDC_ERRORLIST,13,113,179,80,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_DISABLED | 
+                    WS_VSCROLL | WS_HSCROLL
+    CONTROL         "エラー",IDC_SHOWERROR,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,13,97,35,10
+    CONTROL         "デバッグ",IDC_SHOWDEBUG,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,50,97,35,10
+    EDITTEXT        IDC_DEBUGLIST,13,113,179,80,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | NOT WS_VISIBLE | 
+                    WS_DISABLED | WS_VSCROLL | WS_HSCROLL
+    LTEXT           "Version",IDC_STATIC_VERSION,7,214,140,8
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(JPN)
+#if defined(APSTUDIO_INVOKED)
+IDD_VARLIST$(JPN) DIALOG DISCARDABLE  0, 0, 215, 199
+#else
+IDD_VARLIST DIALOG DISCARDABLE  0, 0, 215, 199
+#endif
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+CAPTION "ブレーク ポイント"
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    PUSHBUTTON      "閉じる",IDCANCEL,165,6,50,14
+    LTEXT           "対象領域:",IDC_STATIC,2,9,30,8
+    LTEXT           "対象スレッド:",IDC_STATIC,2,26,38,8
+    COMBOBOX        IDC_THREADCOMBO,43,24,69,100,CBS_DROPDOWNLIST | CBS_SORT | 
+                    WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Tree1",IDC_VARTREE,"SysTreeView32",TVS_HASBUTTONS | 
+                    TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP,
+                    0,88,215,111
+    CONTROL         "グローバル",IDC_GLOBAL,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,43,6,47,14
+    CONTROL         "ローカル",IDC_LOCAL,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,92,6,47,14
+    LTEXT           "プロシージャ:",IDC_STATIC,2,43,39,8
+    COMBOBOX        IDC_PROCCOMBO,43,40,69,116,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    CONTROL         "システム変数を表示しない",IDC_HIDESYSVAR,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,44,93,10
+    PUSHBUTTON      "ステップ(IN)",IDC_STEPIN,4,64,50,14
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,59,215,1
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,81,215,1
+    PUSHBUTTON      "ステップ(OVER)",IDC_STEPOVER,57,64,50,14
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(JPN)
+#if defined(APSTUDIO_INVOKED)
+IDD_CLIPMAIN$(JPN) DIALOGEX 0, 0, 332, 88
+#else
+IDD_CLIPMAIN DIALOGEX 0, 0, 332, 88
+#endif
+STYLE WS_CHILD
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    PUSHBUTTON      "コンパイル",IDOK,0,0,37,13
+    EDITTEXT        IDC_EXEPATH,285,57,24,12,ES_AUTOHSCROLL | ES_READONLY | 
+                    NOT WS_VISIBLE
+    EDITTEXT        IDC_ERRORLIST,38,14,129,74,ES_MULTILINE | ES_AUTOVSCROLL | 
+                    ES_AUTOHSCROLL | WS_DISABLED | WS_VSCROLL | WS_HSCROLL
+    CONTROL         "ビルド",IDC_SHOWERROR,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,0,20,37,12
+    CONTROL         "デバッグ",IDC_SHOWDEBUG,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,0,34,37,12
+    EDITTEXT        IDC_DEBUGLIST,38,15,179,73,ES_MULTILINE | ES_AUTOVSCROLL | 
+                    ES_AUTOHSCROLL | NOT WS_VISIBLE | WS_DISABLED | 
+                    WS_VSCROLL | WS_HSCROLL
+    CONTROL         "Progress1",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH,
+                    38,1,293,12
+    LTEXT           "準備中...",IDC_MESSAGE,286,47,24,8,NOT WS_VISIBLE,
+                    WS_EX_TRANSPARENT
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,16,39,1
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(ENG)
+#if defined(APSTUDIO_INVOKED)
+IDD_CLIPMAIN$(ENG) DIALOGEX 0, 0, 332, 88
+#else
+IDD_CLIPMAIN DIALOGEX 0, 0, 332, 88
+#endif
+STYLE WS_CHILD
+FONT 9, "ＭＳ Ｐゴシック", 0, 0, 0x1
+BEGIN
+    PUSHBUTTON      "Compile",IDOK,0,0,37,11
+    EDITTEXT        IDC_EXEPATH,285,57,24,12,ES_AUTOHSCROLL | ES_READONLY | 
+                    NOT WS_VISIBLE
+    EDITTEXT        IDC_ERRORLIST,38,13,129,75,ES_MULTILINE | ES_AUTOVSCROLL | 
+                    ES_AUTOHSCROLL | WS_DISABLED | WS_VSCROLL | WS_HSCROLL
+    CONTROL         "Error",IDC_SHOWERROR,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,0,17,37,10
+    CONTROL         "Debug",IDC_SHOWDEBUG,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,0,28,37,10
+    EDITTEXT        IDC_DEBUGLIST,38,14,179,74,ES_MULTILINE | ES_AUTOVSCROLL | 
+                    ES_AUTOHSCROLL | NOT WS_VISIBLE | WS_DISABLED | 
+                    WS_VSCROLL | WS_HSCROLL
+    CONTROL         "Progress1",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH,
+                    38,0,293,12
+    LTEXT           "Waiting...",IDC_MESSAGE,286,47,24,8,NOT WS_VISIBLE,
+                    WS_EX_TRANSPARENT
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,13,39,1
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(ENG)
+#if defined(APSTUDIO_INVOKED)
+IDD_MAIN$(ENG) DIALOG DISCARDABLE  0, 0, 205, 229
+#else
+IDD_MAIN DIALOG DISCARDABLE  0, 0, 205, 229
+#endif
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "ActiveBasic Compiler&Debugger"
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    DEFPUSHBUTTON   "Compile",IDOK,148,208,50,14
+    LTEXT           "Output:",IDC_STATIC,7,10,22,8
+    EDITTEXT        IDC_EXEPATH,34,7,164,14,ES_AUTOHSCROLL
+    CONTROL         "Progress1",IDC_PROGRESS,"msctls_progress32",0x0,13,56,
+                    179,14
+    GROUPBOX        "Advance situation",IDC_STATIC,7,31,191,45
+    LTEXT           "ready...",IDC_MESSAGE,13,44,161,8
+    GROUPBOX        "Message list",IDC_STATIC,7,83,191,117
+    EDITTEXT        IDC_ERRORLIST,13,113,179,80,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_DISABLED | 
+                    WS_VSCROLL | WS_HSCROLL
+    CONTROL         "Error",IDC_SHOWERROR,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,13,97,30,10
+    CONTROL         "Debug",IDC_SHOWDEBUG,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,50,97,35,10
+    EDITTEXT        IDC_DEBUGLIST,13,113,179,80,ES_MULTILINE | 
+                    ES_AUTOVSCROLL | ES_AUTOHSCROLL | NOT WS_VISIBLE | 
+                    WS_DISABLED | WS_VSCROLL | WS_HSCROLL
+    LTEXT           "Version 4.00 Global Edition beta1",IDC_STATIC,7,214,98,
+                    8
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(ENG)
+#if defined(APSTUDIO_INVOKED)
+IDD_VARLIST$(ENG) DIALOG DISCARDABLE  0, 0, 215, 199
+#else
+IDD_VARLIST DIALOG DISCARDABLE  0, 0, 215, 199
+#endif
+STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+CAPTION "Breakpoint"
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+    PUSHBUTTON      "Close",IDCANCEL,165,6,50,14
+    LTEXT           "Level:",IDC_STATIC,2,9,18,8
+    LTEXT           "Thread:",IDC_STATIC,2,26,22,8
+    COMBOBOX        IDC_THREADCOMBO,43,24,69,100,CBS_DROPDOWNLIST | CBS_SORT | 
+                    WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Tree1",IDC_VARTREE,"SysTreeView32",TVS_HASBUTTONS | 
+                    TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP,
+                    0,88,215,111
+    CONTROL         "Global",IDC_GLOBAL,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,43,6,47,14
+    CONTROL         "Local",IDC_LOCAL,"Button",BS_AUTORADIOBUTTON | 
+                    BS_PUSHLIKE,92,6,47,14
+    LTEXT           "Procedure:",IDC_STATIC,2,43,31,8
+    COMBOBOX        IDC_PROCCOMBO,43,40,69,116,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    CONTROL         "Hide system variables",IDC_HIDESYSVAR,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,117,44,81,10
+    PUSHBUTTON      "Step In",IDC_STEPIN,4,64,50,14
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,59,215,1
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,81,215,1
+    PUSHBUTTON      "Step Over",IDC_STEPOVER,57,64,50,14
+END
+#endif
+
+#if defined(APSTUDIO_INVOKED) || defined(JPN)
+#if defined(APSTUDIO_INVOKED)
+IDD_DEBUGGER$(JPN) DIALOGEX 0, 0, 291, 148
+#else
+IDD_DEBUGGER DIALOGEX 0, 0, 291, 148
+#endif
+STYLE WS_CHILD
+FONT 9, "ＭＳ Ｐゴシック", 0, 0, 0x1
+BEGIN
+    LTEXT           "対象スレッド:",IDC_STATIC,5,21,38,8
+    COMBOBOX        IDC_THREADCOMBO,5,30,69,100,CBS_DROPDOWNLIST | CBS_SORT | 
+                    WS_VSCROLL | WS_TABSTOP
+    LTEXT           "プロシージャ:",IDC_STATIC,5,49,39,8
+    COMBOBOX        IDC_PROCCOMBO,5,58,69,116,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,15,99,1
+    LTEXT           "dummy",IDC_VARPOS,98,0,35,41,NOT WS_VISIBLE,
+                    WS_EX_STATICEDGE
+    CONTROL         "List2",IDC_WATCHLIST,"SysListView32",LVS_REPORT | 
+                    LVS_EDITLABELS | WS_BORDER | WS_TABSTOP,171,9,60,50,
+                    WS_EX_ACCEPTFILES
+    LTEXT           "コマンド",IDC_STATIC,3,3,23,8
+END
+#endif
+
+IDD_DEBUGGER_TOOLBARBASE DIALOG DISCARDABLE  0, 0, 62, 15
+STYLE WS_CHILD | WS_VISIBLE
+FONT 9, "ＭＳ Ｐゴシック"
+BEGIN
+END
+
+#if defined(APSTUDIO_INVOKED) || defined(ENG)
+#if defined(APSTUDIO_INVOKED)
+IDD_DEBUGGER$(ENG) DIALOGEX 0, 0, 291, 148
+#else
+IDD_DEBUGGER DIALOGEX 0, 0, 291, 148
+#endif
+STYLE WS_CHILD
+FONT 9, "ＭＳ Ｐゴシック", 0, 0, 0x1
+BEGIN
+    LTEXT           "Thread:",IDC_STATIC,5,21,22,8
+    COMBOBOX        IDC_THREADCOMBO,5,30,69,100,CBS_DROPDOWNLIST | CBS_SORT | 
+                    WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Procedure:",IDC_STATIC,5,49,31,8
+    COMBOBOX        IDC_PROCCOMBO,5,58,69,116,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,15,99,1
+    LTEXT           "dummy",IDC_VARPOS,98,0,35,41,NOT WS_VISIBLE,
+                    WS_EX_STATICEDGE
+    CONTROL         "List2",IDC_WATCHLIST,"SysListView32",LVS_REPORT | 
+                    LVS_EDITLABELS | WS_BORDER | WS_TABSTOP,171,9,60,50,
+                    WS_EX_ACCEPTFILES
+    LTEXT           "コマンド",IDC_STATIC,3,3,23,8
+END
+#endif
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO DISCARDABLE 
+BEGIN
+    "IDD_MAIN$(JPN)", DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 198
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 222
+    END
+
+    "IDD_VARLIST$(JPN)", DIALOG
+    BEGIN
+        BOTTOMMARGIN, 161
+    END
+
+    "IDD_MAIN$(ENG)", DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 198
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 222
+    END
+
+    "IDD_VARLIST$(ENG)", DIALOG
+    BEGIN
+        BOTTOMMARGIN, 161
+    END
+
+    IDD_DEBUGGER_TOOLBARBASE, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 55
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 8
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_MAIN                ICON    DISCARDABLE     "icon1.ico"
+IDI_VARSTRUCT           ICON    DISCARDABLE     "VarStruct.ico"
+IDI_VARDATA             ICON    DISCARDABLE     "VarData.ico"
+IDI_VARSTR              ICON    DISCARDABLE     "VarStr.ico"
+IDI_VARARRAY            ICON    DISCARDABLE     "VarArray.ico"
+IDI_VARPTRSTRUCT        ICON    DISCARDABLE     "VarPtrStruct.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Toolbar
+//
+
+IDR_DEBUGGERTOOLBAR TOOLBAR DISCARDABLE  16, 15
+BEGIN
+    BUTTON      IDC_DEBUG_START
+    BUTTON      IDC_DEBUG_STEPOVER
+    BUTTON      IDC_DEBUG_STEPIN
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDR_DEBUGGERTOOLBAR     BITMAP  DISCARDABLE     "toolbar_debugger.bmp"
+IDR_DEBUGGERTOOLBAR_DISABLED BITMAP  DISCARDABLE     "toolbar_debugger_disable.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_DEBUGGER_VARLIST_MENU MENU DISCARDABLE 
+BEGIN
+    POPUP "dummy"
+    BEGIN
+        MENUITEM "一般システム変数を表示する",  IDM_SHOW_DEFAULTSYSTEM_VAR
+        MENUITEM "RADシステム変数を表示する",   IDM_SHOW_RAD_VAR
+        MENUITEM "GUID変数を表示する",          IDM_SHOW_GUID_VAR
+    END
+END
+
+#endif    // 日本語 resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
Index: /BasicCompiler64/BasicCompiler.vcproj
===================================================================
--- /BasicCompiler64/BasicCompiler.vcproj	(revision 3)
+++ /BasicCompiler64/BasicCompiler.vcproj	(revision 3)
@@ -0,0 +1,1521 @@
+<?xml version="1.0" encoding="shift_jis"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="BasicCompiler"
+	ProjectGUID="{864B921B-423B-4F9E-9E6B-31B15968EDF9}"
+	RootNamespace="BasicCompiler"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug/BasicCompiler.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;JPN;_AMD64_;_WIN64"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\Debug/BasicCompiler.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				BrowseInformation="0"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+				CallingConvention="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG,JPN"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/MACHINE:AMD64"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib bufferoverflowu.lib"
+				OutputFile="../ActiveBasic/BasicCompiler64.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\Debug/BasicCompiler64.pdb"
+				SubSystem="2"
+				TargetMachine="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+				EmbedManifest="true"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile="$(OutDir)/$(ProjectName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release/BasicCompiler.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN;_AMD64_;_WIN64"
+				StringPooling="true"
+				MinimalRebuild="false"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\Release/BasicCompiler.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				BrowseInformation="0"
+				BrowseInformationFile=""
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				Detect64BitPortabilityProblems="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG,JPN"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/MACHINE:AMD64"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib bufferoverflowu.lib"
+				OutputFile="../ActiveBasic/BasicCompiler64.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\Release/BasicCompiler64.pdb"
+				SubSystem="2"
+				TargetMachine="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Release/BasicCompiler.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="English_Rel|Win32"
+			OutputDirectory=".\English_Rel"
+			IntermediateDirectory=".\English_Rel"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\English_Rel/BasicCompiler.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;ENG"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\English_Rel/BasicCompiler.pch"
+				AssemblerListingLocation=".\English_Rel/"
+				ObjectFile=".\English_Rel/"
+				ProgramDataBaseFileName=".\English_Rel/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG,ENG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib"
+				OutputFile="../ActiveBasic/BasicCompiler64.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\English_Rel/BasicCompiler64.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\English_Rel/BasicCompiler.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release2|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug/BasicCompiler.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN;_AMD64_;_WIN64"
+				MinimalRebuild="false"
+				BasicRuntimeChecks="0"
+				RuntimeLibrary="0"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\Release/BasicCompiler.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				BrowseInformation="0"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="0"
+				CallingConvention="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG,JPN"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/MACHINE:AMD64"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib bufferoverflowu.lib"
+				OutputFile="../ActiveBasic/BasicCompiler64.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="false"
+				ProgramDatabaseFile=".\Release/BasicCompiler64.pdb"
+				SubSystem="2"
+				TargetMachine="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile="$(OutDir)/$(ProjectName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="BasicCompiler.h"
+				>
+			</File>
+			<File
+				RelativePath="..\BasicCompiler_Common\BasicFixed.h"
+				>
+			</File>
+			<File
+				RelativePath="CommandValue.h"
+				>
+			</File>
+			<File
+				RelativePath="..\BasicCompiler_Common\common.h"
+				>
+			</File>
+			<File
+				RelativePath="Opcode.h"
+				>
+			</File>
+			<Filter
+				Name="言語対応文字列"
+				>
+				<File
+					RelativePath="..\BasicCompiler_Common\common_msg_eng.h"
+					>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\common_msg_jpn.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="Parts_h"
+				>
+				<File
+					RelativePath="..\BasicCompiler_Common\NonVolatile.h"
+					>
+				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\TypeDef.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="Source Files"
+				Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+				>
+				<File
+					RelativePath="BasicCompiler.rc"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCResourceCompilerTool"
+							PreprocessorDefinitions="_DEBUG;JPN;$(NoInherit)"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCResourceCompilerTool"
+							PreprocessorDefinitions="NDEBUG;JPN;$(NoInherit)"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCResourceCompilerTool"
+							PreprocessorDefinitions="NDEBUG;ENG;$(NoInherit)"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release2|Win32"
+						>
+						<Tool
+							Name="VCResourceCompilerTool"
+							PreprocessorDefinitions="_DEBUG;JPN;$(NoInherit)"
+						/>
+					</FileConfiguration>
+				</File>
+				<Filter
+					Name="Compile"
+					>
+					<File
+						RelativePath="Compile_Statement.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="1"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+								UsePrecompiledHeader="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release2|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="Compile_Var.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="1"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+								UsePrecompiledHeader="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release2|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath=".\InsertOpcode.cpp"
+						>
+					</File>
+					<File
+						RelativePath="MakePeHdr.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="1"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+								UsePrecompiledHeader="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release2|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="Register.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="1"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+								UsePrecompiledHeader="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release2|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+					</File>
+					<Filter
+						Name="Calculation"
+						>
+						<File
+							RelativePath="Compile_Calc.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath="Compile_Calc_PushVar.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath="Compile_Set_Var.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath=".\increment.cpp"
+							>
+						</File>
+						<File
+							RelativePath="NumOpe.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath="NumOpe_Arithmetic.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath="NumOpe_Logical.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath="NumOpe_Relation.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath="NumOpe_TypeOperation.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+					</Filter>
+					<Filter
+						Name="Object"
+						>
+						<File
+							RelativePath=".\Compile_Object.cpp"
+							>
+						</File>
+					</Filter>
+					<Filter
+						Name="Opcode"
+						>
+						<File
+							RelativePath="amd64_main.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath=".\stack_frame.cpp"
+							>
+						</File>
+					</Filter>
+					<Filter
+						Name="Procedure"
+						>
+						<File
+							RelativePath=".\CLockParameter.cpp"
+							>
+						</File>
+						<File
+							RelativePath=".\Compile_CallProc.cpp"
+							>
+						</File>
+						<File
+							RelativePath="Compile_Func.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath="Compile_ProcOp.cpp"
+							>
+							<FileConfiguration
+								Name="Debug|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="1"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="English_Rel|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+									UsePrecompiledHeader="0"
+								/>
+							</FileConfiguration>
+							<FileConfiguration
+								Name="Release2|Win32"
+								>
+								<Tool
+									Name="VCCLCompilerTool"
+									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+									UsePrecompiledHeader="0"
+									BrowseInformation="0"
+								/>
+							</FileConfiguration>
+						</File>
+						<File
+							RelativePath=".\CParameter.cpp"
+							>
+						</File>
+						<File
+							RelativePath=".\OperatorProc.cpp"
+							>
+						</File>
+					</Filter>
+				</Filter>
+				<Filter
+					Name="Debug"
+					>
+					<File
+						RelativePath="VarList.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="1"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+								UsePrecompiledHeader="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release2|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="WatchList.cpp"
+						>
+						<FileConfiguration
+							Name="Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="1"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;ENG;$(NoInherit)"
+								UsePrecompiledHeader="0"
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="Release2|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
+								UsePrecompiledHeader="0"
+								BrowseInformation="0"
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="32及び64共通"
+					>
+					<File
+						RelativePath="..\BasicCompiler_Common\BasicCompiler.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\calculation.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Compile.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\error.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\gc.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\hash.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\MakeExe.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\NumOpe_GetType.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Object.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Overload.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\preprocessor.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\RSrcSection.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\StrOperation.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Subroutine.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\Variable.cpp"
+						>
+					</File>
+					<Filter
+						Name="Intermediate"
+						>
+						<File
+							RelativePath="..\BasicCompiler_Common\CommandFormat.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\Intermediate_Step1.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\Intermediate_Step2.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\Resource.cpp"
+							>
+						</File>
+					</Filter>
+					<Filter
+						Name="Parts"
+						>
+						<File
+							RelativePath="..\BasicCompiler_Common\LoopRefCheck.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\NonVolatile.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\TypeDef.cpp"
+							>
+						</File>
+					</Filter>
+					<Filter
+						Name="Debug（共通）"
+						>
+						<File
+							RelativePath="..\BasicCompiler_Common\BreakPoint.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\BreakPoint.h"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\CDebugThreadInfo.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\Debug.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\debug.h"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\DebugMiddleFile.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\DebugSection.h"
+							>
+						</File>
+					</Filter>
+					<Filter
+						Name="Class"
+						>
+						<File
+							RelativePath="..\BasicCompiler_Common\Class.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\Class.h"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\Enum.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\Enum.h"
+							>
+						</File>
+					</Filter>
+					<Filter
+						Name="Schedule"
+						>
+						<File
+							RelativePath="..\BasicCompiler_Common\PESchedule.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\schedule.h"
+							>
+						</File>
+					</Filter>
+					<Filter
+						Name="LexicalScoping"
+						>
+						<File
+							RelativePath="..\BasicCompiler_Common\LexicalScoping.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\LexicalScoping.h"
+							>
+						</File>
+					</Filter>
+					<Filter
+						Name="Constant"
+						>
+						<File
+							RelativePath="..\BasicCompiler_Common\Const.cpp"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\Const.h"
+							>
+						</File>
+					</Filter>
+				</Filter>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="icon1.ico"
+				>
+			</File>
+			<File
+				RelativePath="toolbar_debugger.bmp"
+				>
+			</File>
+			<File
+				RelativePath="VarArray.ico"
+				>
+			</File>
+			<File
+				RelativePath="VarData.ico"
+				>
+			</File>
+			<File
+				RelativePath="VarPtrStruct.ico"
+				>
+			</File>
+			<File
+				RelativePath="VarStr.ico"
+				>
+			</File>
+			<File
+				RelativePath="VarStruct.ico"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /BasicCompiler64/BasicCompiler64.sln
===================================================================
--- /BasicCompiler64/BasicCompiler64.sln	(revision 3)
+++ /BasicCompiler64/BasicCompiler64.sln	(revision 3)
@@ -0,0 +1,23 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BasicCompiler", "BasicCompiler.vcproj", "{864B921B-423B-4F9E-9E6B-31B15968EDF9}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		English_Rel|Win32 = English_Rel|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{864B921B-423B-4F9E-9E6B-31B15968EDF9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{864B921B-423B-4F9E-9E6B-31B15968EDF9}.Debug|Win32.Build.0 = Debug|Win32
+		{864B921B-423B-4F9E-9E6B-31B15968EDF9}.English_Rel|Win32.ActiveCfg = English_Rel|Win32
+		{864B921B-423B-4F9E-9E6B-31B15968EDF9}.English_Rel|Win32.Build.0 = English_Rel|Win32
+		{864B921B-423B-4F9E-9E6B-31B15968EDF9}.Release|Win32.ActiveCfg = Release2|Win32
+		{864B921B-423B-4F9E-9E6B-31B15968EDF9}.Release|Win32.Build.0 = Release2|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /BasicCompiler64/CLockParameter.cpp
===================================================================
--- /BasicCompiler64/CLockParameter.cpp	(revision 3)
+++ /BasicCompiler64/CLockParameter.cpp	(revision 3)
@@ -0,0 +1,15 @@
+#include "../BasicCompiler_Common/common.h"
+#include "opcode.h"
+
+CDBLockParms::CDBLockParms(){
+}
+CDBLockParms::~CDBLockParms(){
+}
+void CDBLockParms::lock(int level){
+	array_LevelCount[level]++;
+}
+void CDBLockParms::unlock(int level){
+	array_LevelCount[level]--;
+}
+
+CDBLockParms obj_DBLockParms;
Index: /BasicCompiler64/CParameter.cpp
===================================================================
--- /BasicCompiler64/CParameter.cpp	(revision 3)
+++ /BasicCompiler64/CParameter.cpp	(revision 3)
@@ -0,0 +1,721 @@
+#include "../BasicCompiler_Common/common.h"
+#include "opcode.h"
+
+CParameter::CParameter(char *buffer){
+	///////////////////////////
+	// パラメータ文字列を整理
+	///////////////////////////
+
+	extern HANDLE hHeap;
+	int i,i2,i3;
+	char temporary[VN_SIZE];
+
+	i=0;
+	ParmsNum=0;
+	while(1){
+		if(buffer[i]=='\0') break;
+
+		for(i2=0;;i2++,i++){
+			if(buffer[i]=='\"'){
+				temporary[i2]=buffer[i];
+				for(i++,i2++;;i++,i2++){
+					temporary[i2]=buffer[i];
+					if(buffer[i]=='\"') break;
+				}
+				continue;
+			}
+
+			if(buffer[i]=='('){
+				i3=GetStringInPare(temporary+i2,buffer+i);
+				i2+=i3-1;
+				i+=i3-1;
+				continue;
+			}
+			if(buffer[i]=='['){
+				i3=GetStringInBracket(temporary+i2,buffer+i);
+				i2+=i3-1;
+				i+=i3-1;
+				continue;
+			}
+
+			if(buffer[i]==','||buffer[i]=='\0'){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=buffer[i];
+		}
+
+		Parms[ParmsNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+		lstrcpy(Parms[ParmsNum],temporary);
+		ParmsNum++;
+
+		if(buffer[i]==',') i++;
+	}
+
+	ReturnTypeInfo.type=0;
+	ReturnTypeInfo.u.lpIndex=0;
+}
+CParameter::CParameter(PARAMETER_INFO *pParamInfo,int ParmNum){
+	int i;
+	for(i=0;i<ParmNum;i++){
+		Parms[i]=0;
+		types[i].type=pParamInfo[i].type;
+		types[i].u.lpIndex=pParamInfo[i].u.index;
+	}
+	this->ParmsNum=ParmNum;
+
+	ReturnTypeInfo.type=0;
+	ReturnTypeInfo.u.lpIndex=0;
+}
+CParameter::~CParameter(){
+	int i2;
+
+	//パラメータ文字列を解放
+	for(i2=0;i2<ParmsNum;i2++){
+		if(Parms[i2]==(char *)-1) continue;
+
+		if(Parms[i2]) HeapDefaultFree(Parms[i2]);
+	}
+}
+
+void CParameter::SetReturnType(TYPEINFO *pTypeInfo){
+	ReturnTypeInfo=*pTypeInfo;
+}
+
+BOOL CParameter::_overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level){
+	//パラメータを識別してオーバーロードを解決
+
+	//パラメータの個数が不一致の場合
+	if(pi_num!=ParmsNum) return 0;
+
+	int i,type;
+	LONG_PTR lpIndex;
+	for(i=0;i<pi_num;i++){
+		if(Parms[i]){
+			TYPEINFO BaseType={ppi[i].type,ppi[i].u.index};
+			if(Parms[i][0]==1&&Parms[i][1]==ESC_BYVAL){
+				type=NumOpe_GetType(Parms[i]+2,&BaseType,&lpIndex);
+				type=MAKE_PTR_TYPE(NATURAL_TYPE(type),PTR_LEVEL(type)-1);
+			}
+			else{
+				type=NumOpe_GetType(Parms[i],&BaseType,&lpIndex);
+			}
+		}
+		else{
+			type=types[i].type;
+			lpIndex=types[i].u.lpIndex;
+		}
+
+		if(type!=ppi[i].type){
+			if(overload_level==OVERLOAD_LEVEL1){
+				return 0;
+			}
+			else if(overload_level==OVERLOAD_LEVEL2){
+				if(!(
+					IsWholeNumberType(type)&&IsWholeNumberType(ppi[i].type)||
+					IsRealNumberType(type)&&IsRealNumberType(ppi[i].type)
+					)) return 0;
+			}
+			else if(overload_level==OVERLOAD_LEVEL3){
+				if(type==DEF_OBJECT||ppi[i].type==DEF_OBJECT) return 0;
+			}
+		}
+		else{
+			if(NATURAL_TYPE(type)==DEF_OBJECT){
+				if(lpIndex!=ppi[i].u.index) return 0;
+			}
+		}
+	}
+
+	if(pReturnTypeInfo){
+		//戻り値も比較対象にする
+		if(ReturnTypeInfo.type==pReturnTypeInfo->type){
+			if(NATURAL_TYPE(ReturnTypeInfo.type)==DEF_OBJECT){
+				if(ReturnTypeInfo.u.lpIndex != pReturnTypeInfo->u.lpIndex) return 0;
+			}
+		}
+		else return 0;
+	}
+
+	return 1;
+}
+SUBINFO *CParameter::OverloadSolutionWithReturnType(char *name,SUBINFO **ppsi,int num){
+	int i,sw=0;
+	SUBINFO *psi;
+	psi=0;
+	for(i=0;i<num;i++){
+		psi=ppsi[i];
+
+		TYPEINFO ReturnTypeInfo;
+		ReturnTypeInfo.type=psi->ReturnType;
+		ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+		//エラーチェック
+		if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL1)){
+			if(sw){
+				SetError(52,name,cp);
+				return 0;
+			}
+			sw=1;
+			break;
+		}
+	}
+
+	if(!sw){
+		for(i=0;i<num;i++){
+			psi=ppsi[i];
+
+			TYPEINFO ReturnTypeInfo;
+			ReturnTypeInfo.type=psi->ReturnType;
+			ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL2)){
+				if(sw){
+					SetError(52,name,cp);
+					return 0;
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		for(i=0;i<num;i++){
+			psi=ppsi[i];
+
+			TYPEINFO ReturnTypeInfo;
+			ReturnTypeInfo.type=psi->ReturnType;
+			ReturnTypeInfo.u.lpIndex=psi->u.ReturnIndex;
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,&ReturnTypeInfo,OVERLOAD_LEVEL3)){
+				if(sw){
+					SetError(52,name,cp);
+					return 0;
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		SetError(52,name,cp);
+		return 0;
+	}
+
+	return psi;
+}
+
+SUBINFO *CParameter::OverloadSolution(char *name,SUBINFO **ppsi,int num){
+	int i,sw=0;
+	SUBINFO *psi;
+	psi=0;
+	for(i=0;i<num;i++){
+		psi=ppsi[i];
+
+		//エラーチェック
+		if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL1)){
+			if(sw){
+				return OverloadSolutionWithReturnType(name,ppsi,num);
+			}
+			sw=1;
+			break;
+		}
+	}
+
+	if(!sw){
+		for(i=0;i<num;i++){
+			psi=ppsi[i];
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL2)){
+				if(sw){
+					return OverloadSolutionWithReturnType(name,ppsi,num);
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		for(i=0;i<num;i++){
+			psi=ppsi[i];
+
+			//エラーチェック
+			if(_overload_check(psi->pParmInfo,psi->ParmNum,NULL,OVERLOAD_LEVEL3)){
+				if(sw){
+					return OverloadSolutionWithReturnType(name,ppsi,num);
+				}
+				sw=1;
+				break;
+			}
+		}
+	}
+
+	if(!sw){
+		SUBINFO *temp_psi;
+		for(i=0;i<num;i++){
+			temp_psi=ppsi[i];
+
+			//エラーチェック
+			if(temp_psi->ParmNum==this->ParmsNum){
+				if(sw){
+					sw=0;
+					break;
+				}
+				sw=1;
+
+				psi=temp_psi;
+			}
+		}
+	}
+
+	if(!sw){
+		SetError(52,name,cp);
+		return 0;
+	}
+
+	return psi;
+}
+
+BOOL CParameter::ErrorCheck(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
+	if(ParmsNum>pi_num){
+		if(ppi[pi_num-1].type!=DEF_ELLIPSE){
+			//パラメータが多すぎるとき
+			SetError(10,FuncName,cp);
+			return 0;
+		}
+	}
+	else if(ParmsNum<pi_num){
+		if(ParmsNum<SecondParmNum){
+			if(ppi[ParmsNum].type==DEF_ELLIPSE){
+				return 1;
+			}
+
+			//パラメータが少なすぎるとき
+			SetError(10,FuncName,cp);
+			return 0;
+		}
+
+		//省略パラメータに "0" を指定する
+		for(;ParmsNum < pi_num;ParmsNum++){
+			extern HANDLE hHeap;
+			char temporary[64];
+			if(ppi[ParmsNum].bByVal) lstrcpy(temporary,"0");
+			else sprintf(temporary,"%c%c0",1,ESC_BYVAL);
+			Parms[ParmsNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(Parms[ParmsNum],temporary);
+		}
+	}
+
+	return 1;
+}
+void CParameter::MacroParameterSupport(PARAMETER_INFO *ppi){
+	int i;
+	for(i=0;i<ParmsNum;i++){
+		if(Parms[i][0]=='\0'){
+			extern HANDLE hHeap;
+			char temporary[64];
+			if(ppi[i].bByVal) lstrcpy(temporary,"0");
+			else sprintf(temporary,"%c%c0",1,ESC_BYVAL);
+			HeapDefaultFree(Parms[i]);
+			Parms[i]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(Parms[i],temporary);
+		}
+	}
+}
+void CParameter::SetObjectParameter(int reg,CClass *pobj_Class,LPSTR Parameter){
+	//////////////////////////////////////////////////////
+	/////    レジスタ資源のバックアップ
+	{	BACKUP_REGISTER_RESOURCE
+	//////////////////////////////////////////////////////
+
+		int object_size;
+		object_size=GetSizeOfClass(pobj_Class);
+
+		//mov rcx,object_size
+		op_mov_RV(sizeof(_int64),REG_RCX,object_size);
+
+		//call calloc
+		extern SUBINFO *pSub_calloc;
+		op_call(pSub_calloc);
+
+		//mov r11,rax
+		op_mov_RR(REG_R11,REG_RAX);
+
+		//mov qword ptr[rsp+offset],r11     ※スタックフレームを利用
+		pobj_sf->push(REG_R11);
+
+		TYPEINFO BaseType={DEF_OBJECT,(LONG_PTR)pobj_Class};
+		TYPEINFO CalcType;
+		CalcType.type=NumOpe_GetType(Parameter,&BaseType,&CalcType.u.lpIndex);
+
+		if(pobj_Class->CopyConstructorMemberSubIndex!=-1&&
+			CalcType.type==DEF_OBJECT&&CalcType.u.pobj_Class==pobj_Class){
+			////////////////////////////////////
+			// コピーコンストラクタを呼び出す
+			////////////////////////////////////
+
+			BOOL bUseHeap;
+			int temp_reg=REG_RDX;
+			CalcType.type=NumOpe(&temp_reg,Parameter,DEF_OBJECT,(LONG_PTR)pobj_Class,&CalcType.u.lpIndex,&bUseHeap);
+
+			if(bUseHeap){
+				//mov r14,rdx
+				op_mov_RR(REG_R14,REG_RDX);
+			}
+
+			//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
+			pobj_sf->ref(REG_R11);
+
+			//mov rcx,this
+			op_mov_RR(REG_RCX,REG_R11);
+
+			//call constructor
+			op_call(pobj_Class->ppobj_Method[pobj_Class->CopyConstructorMemberSubIndex]->psi);
+
+
+			if(bUseHeap){
+				FreeTempObject(REG_R14,pobj_Class);
+			}
+		}
+		else{
+			if(pobj_Class->ConstructorMemberSubIndex!=-1){
+				////////////////////////////////
+				// コンストラクタを呼び出す
+				////////////////////////////////
+
+				//mov rcx,this
+				op_mov_RR(REG_RCX,REG_R11);
+
+				//call constructor
+				op_call(pobj_Class->ppobj_Method[pobj_Class->ConstructorMemberSubIndex]->psi);
+			}
+
+
+			BOOL bUseHeap;
+			int temp_reg=REG_RAX;
+			CalcType.type=NumOpe(&temp_reg,Parameter,DEF_OBJECT,(LONG_PTR)pobj_Class,&CalcType.u.lpIndex,&bUseHeap);
+
+
+			//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
+			pobj_sf->ref(REG_R11);
+
+
+			RELATIVE_VAR RelativeVar;
+			RelativeVar.bOffsetOffset=0;
+			RelativeVar.offset=0;
+			RelativeVar.dwKind=VAR_DIRECTMEM;
+
+			SetObjectVariableFromRax((LONG_PTR)pobj_Class,CalcType.type,CalcType.u.lpIndex,&RelativeVar,bUseHeap);
+
+		}
+
+		//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R11);
+
+	/////////////////////////////////////////////
+	//////   レジスタ資源を復元
+		RESTORE_REGISTER_RESOURCE
+	}////////////////////////////////////////////
+
+	//mov reg,r11
+	op_mov_RR(reg,REG_R11);
+}
+void CParameter::SetParameter(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum){
+	///////////////////////////////////////////////////////////
+	// パラメータをレジスタ及びスタックフレームにセット
+	///////////////////////////////////////////////////////////
+	int i2,i3;
+
+	BOOL bEllipse;
+	if(pi_num){
+		if(ppi[pi_num-1].type==DEF_ELLIPSE) bEllipse=1;
+		else bEllipse=0;
+	}
+	else bEllipse=0;
+
+	BOOL bHas_System_LocalThis=0;
+	if(ParmsNum>=1){
+		if(lstrcmp(ppi[0].name,"_System_LocalThis")==0)
+			bHas_System_LocalThis=1;
+	}
+
+	//パラメータをレジスタとスタックに格納
+	int CalcType;
+	LONG_PTR lpCalcIndex;
+	BOOL bCalcUseHeap;
+	int ParmSize=0;
+	int reg,temp_reg;
+	RELATIVE_VAR RelativeVar;
+	for(i2=ParmsNum-1;i2>=0;i2--){
+		if(bEllipse&&i2<=pi_num-2) bEllipse=0;
+
+		if(i2==0&&ppi[i2].name){
+			if(lstrcmp(ppi[i2].name,"_System_LocalThis")==0){
+				//オブジェクトメンバの第一パラメータのThisポインタ
+				continue;
+			}
+		}
+		if((i2==0||i2==1)&&ppi[i2].name){
+			if(lstrcmp(ppi[i2].name,FuncName)==0){
+				//オブジェクトメンバの第一または第二パラメータの戻り値用オブジェクト
+				continue;
+			}
+		}
+
+		TYPEINFO DummyTypeInfo;
+		BOOL bByVal;
+		if(bEllipse){
+			DummyTypeInfo.type=NumOpe_GetType(Parms[i2],NULL,&DummyTypeInfo.u.lpIndex);
+			bByVal=1;
+		}
+		else{
+			DummyTypeInfo.type=ppi[i2].type;
+			DummyTypeInfo.u.lpIndex=ppi[i2].u.index;
+			bByVal=ppi[i2].bByVal;
+		}
+
+		int xmm_temp_sw=0;
+		if(IsRealNumberType(DummyTypeInfo.type)&&bByVal){
+			//実数型
+			if(i2==0) reg=REG_XMM0;
+			else if(i2==1) reg=REG_XMM1;
+			else if(i2==2) reg=REG_XMM2;
+			else if(i2==3) reg=REG_XMM3;
+			else{
+				reg=REG_XMM0;
+				xmm_temp_sw=1;
+			}
+		}
+		else{
+			//整数型
+			if(i2==0) reg=REG_RCX;
+			else if(i2==1) reg=REG_RDX;
+			else if(i2==2) reg=REG_R8;
+			else if(i2==3) reg=REG_R9;
+			else reg=REG_RAX;
+		}
+
+		if(bByVal==1){
+			//値参照
+
+			if(Parms[i2][0]==1&&Parms[i2][1]==ESC_BYVAL){
+				char temp2[255];
+				sprintf(temp2,"%s関数の第%dパラメータ",FuncName,i2+1);
+				SetError(19,temp2,cp);
+				continue;
+			}
+
+			if(DummyTypeInfo.type==DEF_OBJECT){
+				SetObjectParameter(reg,DummyTypeInfo.u.pobj_Class,Parms[i2]);
+				goto next;
+			}
+
+			temp_reg=reg;
+
+			extern LONG_PTR ProcPtr_BaseIndex;
+			LONG_PTR back_ProcPtr_BaseIndex;
+			back_ProcPtr_BaseIndex=ProcPtr_BaseIndex;
+			if(DummyTypeInfo.type==DEF_PTR_PROC) ProcPtr_BaseIndex=DummyTypeInfo.u.lpIndex;
+			else ProcPtr_BaseIndex=-1;
+
+			CalcType=NumOpe(&temp_reg,Parms[i2],DummyTypeInfo.type,DummyTypeInfo.u.lpIndex,&lpCalcIndex,&bCalcUseHeap);
+
+			ProcPtr_BaseIndex=back_ProcPtr_BaseIndex;
+
+			if(CalcType==-1) break;
+
+			if(CalcType==DEF_OBJECT){
+				//キャスト演算子のオーバーロードに対応する
+				CallCastOperatorProc(reg,CalcType,lpCalcIndex,bCalcUseHeap,DummyTypeInfo.type,DummyTypeInfo.u.lpIndex);
+			}
+
+
+			if(bEllipse){
+				if(IsRealNumberType(CalcType)){
+					//整数レジスタへコピー
+					//※cdeclの拡張パラメータは実数の場合も汎用レジスタで引渡し
+
+					if(0<=i2&&i2<=3){
+						if(i2==0) reg=REG_RCX;
+						else if(i2==1) reg=REG_RDX;
+						else if(i2==2) reg=REG_R8;
+						else if(i2==3) reg=REG_R9;
+
+						//movd reg,temp_reg
+						op_movd_RX(reg,temp_reg);
+					}
+				}
+				else if(IsWholeNumberType(CalcType)){
+					//整数型の場合は、64ビットへ拡張する
+					ExtendTypeTo64(CalcType,temp_reg);
+				}
+			}
+			else{
+				//型チェック
+				if(bHas_System_LocalThis) i3=i2-1;
+				else i3=i2;
+				CheckDifferentType(
+					DummyTypeInfo.type,
+					DummyTypeInfo.u.lpIndex,
+					CalcType,
+					lpCalcIndex,
+					FuncName,
+					i3);
+
+
+				if(DummyTypeInfo.type==DEF_DOUBLE){
+					//Double型へ変換
+					ChangeTypeToXmm_Double(CalcType,reg,temp_reg);
+				}
+				else if(DummyTypeInfo.type==DEF_SINGLE){
+					//Single型へ変換
+					ChangeTypeToXmm_Single(CalcType,reg,temp_reg);
+				}
+				else if(IsWholeNumberType(DummyTypeInfo.type)){
+					//実数型 → 整数型
+					ChangeTypeToWhole(CalcType,DummyTypeInfo.type,reg,temp_reg);
+				}
+			}
+		}
+		else{
+			//ポインタ参照
+			if(Parms[i2][0]==1&&Parms[i2][1]==ESC_BYVAL){
+				//ポインタ指定
+
+				temp_reg=reg;
+				CalcType=NumOpe(&temp_reg,Parms[i2]+2,0,0,&lpCalcIndex);
+				if(CalcType==-1) break;
+
+				int ptr_type;
+				ptr_type=GetPtrType(DummyTypeInfo.type,DummyTypeInfo.u.lpIndex);
+
+				//型チェック
+				if(bHas_System_LocalThis) i3=i2-1;
+				else i3=i2;
+				CheckDifferentType(
+					ptr_type,
+					DummyTypeInfo.u.lpIndex,
+					CalcType,
+					lpCalcIndex,
+					FuncName,
+					i3);
+
+				if(IsRealNumberType(CalcType)){
+					//実数型 → 整数型
+					ChangeTypeToWhole(CalcType,DEF_QWORD,reg,temp_reg);
+				}
+			}
+			else{
+				//変数のアドレスを取得
+				int VarType;
+				LONG_PTR lpVarIndex;
+				if(!GetVarOffset(1,Parms[i2],&VarType,&RelativeVar,&lpVarIndex)) continue;
+
+				if(DummyTypeInfo.type!=DEF_ANY){
+					//型チェックを行う
+					if(DummyTypeInfo.type==VarType){
+						if(DummyTypeInfo.type==DEF_OBJECT){
+							if(DummyTypeInfo.u.lpIndex!=lpVarIndex){
+								SetError(11,Parms[i2],cp);
+							}
+						}
+					}
+					else if((VarType&FLAG_PTR)&&((VarType^FLAG_PTR)==DummyTypeInfo.type)){
+						//仮引数がポインタ参照で、実引数が配列の先頭ポインタのとき
+					}
+					else{
+						SetError(11,Parms[i2],cp);
+					}
+				}
+
+				//変数アドレスをレジスタにセット
+				SetVarPtrToReg(reg,&RelativeVar);
+			}
+		}
+next:
+		if(reg==REG_RAX){
+			//スタックフレームへコピー
+			//mov qword ptr[rsp+offset],rax
+			op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,i2*sizeof(_int64),MOD_BASE_DISP32);
+		}
+		else if(xmm_temp_sw){
+			//スタックフレームへコピー
+
+			//movlpd qword ptr[rsp+offset],xmm0
+			op_movlpd_MR(REG_XMM0,REG_RSP,i2*sizeof(_int64),MOD_BASE_DISP32);
+		}
+
+
+		/////////////////////
+		// レジスタをロック
+		/////////////////////
+
+		if(0<=i2&&i2<=3){
+			//	※rcx, rdx, r8, r9の場合のみ
+			pobj_BlockReg->lock(reg);
+		}
+	}
+
+	//パラメータが収まるだけのスタックフレームを確保
+	pobj_sf->parameter_allocate(pi_num*sizeof(_int64)+   sizeof(_int64)/*ret用*/  );
+}
+void CParameter::BackupParameter(int pi_num){
+	///////////////////////////////////////////////////////////
+	// スタックフレームに存在する既存のパラメータをバックアップ
+	///////////////////////////////////////////////////////////
+	int i2;
+
+	for(i2=0;i2<ParmsNum;i2++){
+		/////////////////////
+		// バックアップ
+		/////////////////////
+
+		extern CDBLockParms obj_DBLockParms;
+		if(obj_DBLockParms.array_LevelCount[i2]){
+			//mov r14,qword ptr[rsp+offset]
+			op_mov_RM(sizeof(_int64),REG_R14,REG_RSP,i2*sizeof(_int64),MOD_BASE_DISP32);
+
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+
+		if(3<i2){
+			//スタックフレームをロック
+			extern CDBLockParms obj_DBLockParms;
+			obj_DBLockParms.lock(i2);
+		}
+	}
+}
+void CParameter::RestoreParameter(int pi_num){
+	///////////////////////////////////////////////////////////
+	// スタックフレームに存在する既存のパラメータを復元
+	///////////////////////////////////////////////////////////
+	int i2;
+
+	for(i2=ParmsNum-1;i2>=0;i2--){
+		/////////////////////
+		// 復元
+		/////////////////////
+
+		if(3<i2){
+			//スタックフレームをアンロック
+			extern CDBLockParms obj_DBLockParms;
+			obj_DBLockParms.unlock(i2);
+		}
+
+		extern CDBLockParms obj_DBLockParms;
+		if(obj_DBLockParms.array_LevelCount[i2]){
+			//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+			pobj_sf->pop(REG_R14);
+
+			//mov qword ptr[rsp+offset],r14
+			op_mov_MR(sizeof(_int64),REG_R14,REG_RSP,i2*sizeof(_int64),MOD_BASE_DISP32);
+		}
+	}
+}
Index: /BasicCompiler64/CommandValue.h
===================================================================
--- /BasicCompiler64/CommandValue.h	(revision 3)
+++ /BasicCompiler64/CommandValue.h	(revision 3)
@@ -0,0 +1,95 @@
+/* 命令語定数 */
+
+//条件、分岐、繰り返し
+#define COM_DO		0x1021
+/* 0x22は「"」なので使用不可 */
+#define COM_GOTO	0x1023
+#define COM_GOSUB	0x1024
+#define COM_LOOP	0x1026
+#define COM_RETURN	0x1027
+/* 0x28は「(」なので使用不可 */
+/* 0x29は「)」なので使用不可 */
+#define COM_FOR		0x1031
+#define COM_NEXT	0x1032
+#define COM_WHILE	0x1036
+#define COM_WEND	0x1037
+
+//データ操作
+#define COM_DIM		0x1062
+#define COM_LET		0x1066
+#define COM_DELETE	0x1068
+
+//その他
+#define COM_DEBUG		0x1073
+
+//ポインタ
+#define COM_SETDOUBLE		0x10C1
+#define COM_SETSINGLE		0x10C2
+#define COM_SETQWORD		0x10C3
+#define COM_SETDWORD		0x10C4
+#define COM_SETWORD			0x10C5
+#define COM_SETBYTE			0x10C6
+
+
+
+///////////////////////////////////
+// 以下はProjectEditorで使用される
+
+//入出力コマンド
+#define COM_PRINT		0x1150
+#define COM_INPUT		0x1151
+#define COM_OPEN		0x1152
+#define COM_CLOSE		0x1153
+#define COM_FIELD		0x1154
+#define COM_WRITE		0x1155
+
+//条件、分岐、繰り返し
+#define COM_IF			0x1160
+#define COM_SELECT		0x1161
+
+//ファイル操作
+#define COM_CHDIR		0x1170
+#define COM_KILL		0x1171
+#define COM_MKDIR		0x1172
+#define COM_GET			0x1173
+#define COM_PUT			0x1174
+
+//グラフィックス
+#define COM_CIRCLE		0x1180
+#define COM_LINE		0x1181
+#define COM_PAINT		0x1182
+#define COM_PSET		0x1183
+
+//データ操作
+#define COM_CONST		0x1190
+#define COM_TYPEDEF		0x1191
+
+//クラス関連
+#define COM_CLASS		0x1195
+#define COM_PRIVATE		0x1196
+#define COM_PUBLIC		0x1197
+#define COM_INHERITS	0x1198
+#define COM_PROTECTED	0x1199
+
+//その他
+#define COM_BEEP		0x11A0
+#define COM_CLS			0x11A1
+#define COM_COLOR		0x11A2
+#define COM_DECLARE		0x11A4
+#define COM_DEF			0x11A5
+#define COM_END			0x11A6
+#define COM_FUNCTION	0x11A7
+#define COM_LOCATE		0x11A8
+#define COM_RANDOMIZE	0x11A9
+#define COM_REM			0x11AA
+#define COM_SLEEP		0x11AB
+#define COM_SUB			0x11AC
+#define COM_TYPE		0x11AD
+#define COM_VIRTUAL		0x11AE
+#define COM_WITH		0x11AF
+#define COM_ENUM		0x11B0
+
+//ウィンドウ制御
+#define COM_DELWND		0x11C0
+#define COM_MSGBOX		0x11C1
+#define COM_WINDOW		0x11C2
Index: /BasicCompiler64/Compile_Calc.cpp
===================================================================
--- /BasicCompiler64/Compile_Calc.cpp	(revision 3)
+++ /BasicCompiler64/Compile_Calc.cpp	(revision 3)
@@ -0,0 +1,575 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void ChangeTypeToDouble_ToFpuReg(int OldType){
+	//現在のスタックの内容を実数レジスタに保存する
+	//NumOpeの直後専用
+	if(OldType==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,8
+		op_add_esp(8);
+	}
+	else if(OldType==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(OldType==DEF_LONG){
+		//fild dword ptr[esp]
+		op_fld_ptr_esp(DEF_LONG);
+
+		//add esp,4
+		op_add_esp(4);
+	}
+	else if(OldType==DEF_DWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//push 0
+		op_push_value(0);
+
+		//push eax
+		op_push(REG_EAX);
+
+		//fild qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//add esp,8
+		op_add_esp(8);
+	}
+}
+void ChangeTypeToDouble(int OldType){
+	//現在のスタックの内容をdouble型に変換する
+	//NumOpeの直後専用
+	if(OldType==DEF_DOUBLE) return;
+	else if(OldType==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
+		//64ビット整数型
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(IsWholeNumberType(OldType)){
+		//その他整数型
+
+		if(IsSignedType(OldType)){
+			//符号あり
+
+			if(OldType==DEF_INTEGER){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//movsx eax,ax
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0xBF;
+				OpBuffer[obp++]=(char)0xC0;
+
+				//push eax
+				op_push(REG_EAX);
+			}
+			else if(OldType==DEF_CHAR){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//movsx eax,al
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0xBE;
+				OpBuffer[obp++]=(char)0xC0;
+
+				//push eax
+				op_push(REG_EAX);
+			}
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+
+			//sub esp,4
+			op_sub_esp(4);
+		}
+		else{
+			//符号なし
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//push 0
+			op_push_value(0);
+
+			//push eax
+			op_push(REG_EAX);
+
+			//fild qword ptr[esp]
+			OpBuffer[obp++]=(char)0xDF;
+			OpBuffer[obp++]=(char)0x2C;
+			OpBuffer[obp++]=(char)0x24;
+		}
+
+		//fstp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else SetError(9,NULL,cp);
+}
+void ChangeTypeToSingle(int OldType){
+	//現在のスタックの内容をfloat型に変換する
+	//NumOpeの直後専用
+	if(OldType==DEF_SINGLE) return;
+	else if(OldType==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
+		//64ビット整数型
+
+		//fild qword ptr[esp]
+		op_fld_ptr_esp(DEF_INT64);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(IsWholeNumberType(OldType)){
+		//その他整数型
+
+		if(IsSignedType(OldType)){
+			//符号あり
+
+			if(OldType==DEF_INTEGER){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//movsx eax,ax
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0xBF;
+				OpBuffer[obp++]=(char)0xC0;
+
+				//push eax
+				op_push(REG_EAX);
+			}
+			else if(OldType==DEF_CHAR){
+				//pop eax
+				op_pop(REG_EAX);
+
+				//movsx eax,al
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0xBE;
+				OpBuffer[obp++]=(char)0xC0;
+
+				//push eax
+				op_push(REG_EAX);
+			}
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+		else{
+			//符号なし
+
+			//fild dword ptr[esp]
+			op_fld_ptr_esp(DEF_LONG);
+		}
+
+		//fstp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else SetError(9,NULL,cp);
+}
+void ChangeTypeToInt64(int OldType){
+	//現在のスタックの内容をInt64型に変換する
+	//NumOpeの直後専用
+	if(Is64Type(OldType)) return;
+
+	else if(OldType==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//fistp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(OldType==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fistp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(IsWholeNumberType(OldType)){
+		//その他整数
+
+		if(IsSignedType(OldType)){
+			//符号あり
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//cdq
+			OpBuffer[obp++]=(char)0x99;
+
+			//push edx
+			op_push(REG_EDX);
+
+			//push eax
+			op_push(REG_EAX);
+		}
+		else{
+			//符号なし
+
+			//pop eax
+			op_pop(REG_EAX);
+
+			//push 0
+			op_push_value(0);
+
+			//push eax
+			op_push(REG_EAX);
+		}
+	}
+	else SetError(9,NULL,cp);
+}
+void ChangeTypeToLong(int OldType){
+	//現在のスタックの内容をLong型に変換する
+	//NumOpeの直後専用
+	if(OldType==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//fistp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(OldType==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//fistp dword ptr[esp]
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x1C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(OldType==DEF_INT64||OldType==DEF_QWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//add esp,4
+		op_add_esp(4);
+
+		//push eax
+		op_push(REG_EAX);
+	}
+}
+void ChangeTypeToInteger(int OldType){
+	//現在のスタックの内容をInteger型に変換する
+	if(OldType==DEF_BYTE||OldType==DEF_CHAR||
+		OldType==DEF_WORD||OldType==DEF_INTEGER) return;
+
+	ChangeTypeToLong(OldType);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//and eax,0000FFFFh
+	OpBuffer[obp++]=(char)0x25;
+	*((long *)(OpBuffer+obp))=0x0000FFFF;
+	obp+=sizeof(long);
+
+	//push eax
+	op_push(REG_EAX);
+}
+void ChangeTypeToByte(int OldType){
+	//現在のスタックの内容をbyte型に変換する
+	if(OldType==DEF_BYTE||OldType==DEF_CHAR) return;
+
+	ChangeTypeToLong(OldType);
+
+	//pop eax
+	op_pop(REG_EAX);
+
+	//and eax,000000FFh
+	OpBuffer[obp++]=(char)0x25;
+	*((long *)(OpBuffer+obp))=0x000000FF;
+	obp+=sizeof(long);
+
+	//push eax
+	op_push(REG_EAX);
+}
+
+void SetVariableFromRax(int VarType,int CalcType,RELATIVE_VAR *pRelativeVar){
+	/////////////////////////////////////////////////
+	// raxの内容を変数にコピーするコードを抽出
+	/////////////////////////////////////////////////
+
+	if(VarType==DEF_CHAR||VarType==DEF_BYTE){
+		//8ビット変数へalレジスタの内容を格納する
+		SetWholeVariable(sizeof(char),CalcType,pRelativeVar);
+	}
+	else if(VarType==DEF_INTEGER||VarType==DEF_WORD){
+		//16ビット変数へaxレジスタの内容を格納する
+		SetWholeVariable(sizeof(short),CalcType,pRelativeVar);
+	}
+	else if(VarType==DEF_LONG||VarType==DEF_DWORD){
+		//32ビット変数へeaxレジスタの内容を格納する
+		SetWholeVariable(sizeof(long),CalcType,pRelativeVar);
+	}
+	else if(VarType==DEF_INT64||VarType==DEF_QWORD||IsPtrType(VarType)){
+		//64ビット変数へraxレジスタの内容を格納する
+		SetWholeVariable(sizeof(_int64),CalcType,pRelativeVar);
+	}
+	else if(VarType==DEF_DOUBLE){
+		//Double型変数へスタックの内容を格納する
+		SetDoubleVariable(CalcType,pRelativeVar);
+	}
+	else if(VarType==DEF_SINGLE){
+		//Single型変数へスタックの内容を格納する
+		SetSingleVariable(CalcType,pRelativeVar);
+	}
+}
+void OpcodeCalc(char *Command){
+	int i,i2,i3;
+	char variable[VN_SIZE];
+
+
+
+	//////////////////////////////////////
+	// インクリメント・デクリメント
+	//////////////////////////////////////
+
+	for(i=0;;i++){
+		if(Command[i]=='\"'){
+			//ダブルクォートは不正なのでエラー扱い
+			variable[i]=0;
+			SetError(3,variable,cp);
+			return;
+		}
+
+		if(Command[i]=='('){
+			i2=GetStringInPare(variable+i,Command+i);
+			i+=i2-1;
+			continue;
+		}
+		if(Command[i]=='['){
+			i2=GetStringInBracket(variable+i,Command+i);
+			i+=i2-1;
+			continue;
+		}
+		if(Command[i]=='\0'){
+
+			///////////////////////////////////
+			// インクリメント・デクリメント
+			///////////////////////////////////
+
+			if(i>2){
+				if(Command[i-2]=='+'&&Command[i-1]=='+'){
+					//インクリメント
+					variable[i-2]=0;
+					IncDec(CALC_ADDITION,variable,"1");
+					return;
+				}
+				else if(Command[i-2]=='-'&&Command[i-1]=='-'){
+					//デクリメント
+					variable[i-2]=0;
+					IncDec(CALC_SUBTRACTION,variable,"1");
+					return;
+				}
+			}
+
+
+			//先端部分の識別子をエラーキーワードにする
+			for(i=0;;i++){
+				if(!IsVariableChar(Command[i])){
+					variable[i]=0;
+					break;
+				}
+				variable[i]=Command[i];
+			}
+
+			LONG_PTR lp;
+			if(GetVarType(variable,&lp,0)!=-1){
+				//変数リストに該当したとき
+				SetError(1,NULL,cp);
+			}
+			else{
+				if(GetConstHash(variable)){
+					//定数リストに該当したとき
+					SetError(1,NULL,cp);
+				}
+				else{
+					//変数リスト、定数リストに該当しないとき
+					SetError(3,variable,cp);
+				}
+			}
+			return;
+		}
+
+		i2=GetCalcId(Command+i,&i3);
+		if(i2){
+			variable[i]=0;
+
+			if(Command[i]=='=') break;
+
+			if(Command[i+1+i3]=='='){
+				IncDec(i2,variable,Command+i+1+i3+1);
+				return;
+			}
+		}
+
+		variable[i]=Command[i];
+	}
+
+	if(Command[i+1]=='\0'){
+		SetError(1,NULL,cp);
+		return;
+	}
+
+
+
+	///////////////////////////////////////////////////////////////
+	// インデクサのsetアクセサ（[]=演算子のオーバーロードに対応）
+	///////////////////////////////////////////////////////////////
+
+	char ObjName[VN_SIZE],array_element[VN_SIZE];
+	CClass *pobj_c;
+	GetArrayElement(variable,ObjName,array_element);
+	if(array_element[0]){
+		i2=GetVarType(ObjName,(LONG_PTR *)&pobj_c,0);
+		if(i2==DEF_OBJECT){
+			char temporary[VN_SIZE];
+			sprintf(temporary,"%s.%c%c%c",ObjName,1,ESC_OPERATOR,CALC_ARRAY_SET);
+
+			char temp2[VN_SIZE];
+			sprintf(temp2,"%s,%s",array_element,Command+i+1);
+
+			int idProc;
+			void *pInfo;
+			idProc=GetProc(temporary,&pInfo);
+			if(idProc){
+				CallProc(idProc,pInfo,temporary,temp2,NULL);
+				return;
+			}
+		}
+	}
+
+
+
+	////////////////////////////////////////
+	// 変数のタイプ型を識別して、演算を行う
+	////////////////////////////////////////
+
+	int VarType,CalcType;
+	LONG_PTR lpVarIndex,lpCalcIndex;
+	BOOL bCalcUseHeap;
+
+	//型を識別
+	VarType=GetVarType(variable,&lpVarIndex,0);
+	if(VarType==-1){
+
+		// プロパティ用のメソッドを呼び出す
+		if(!CallPropertyMethod(variable,Command+i+1,NULL)){
+			//エラーを表示
+			GetVarType(variable,&lpVarIndex,1);
+		}
+
+		return;
+	}
+
+	extern LONG_PTR ProcPtr_BaseIndex;
+	if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex;
+	else ProcPtr_BaseIndex=-1;
+
+	//NumOpe...（rax、またはxmm0に答えが格納される）
+	int reg=REG_RAX;
+	CalcType=NumOpe(&reg,Command+i+1,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap);
+
+	//結果を格納しているレジスタをブロッキング
+	pobj_BlockReg->lock(reg);
+
+	if(VarType==-1||CalcType==-1) return;
+
+	//変数アドレスを取得
+	RELATIVE_VAR VarRelativeVar;
+	if(!GetVarOffset(
+		1,
+		variable,
+		&VarType,
+		&VarRelativeVar,
+		&lpVarIndex)) return;
+
+	//レジスタのブロッキングを解除
+	pobj_BlockReg->clear();
+
+	if(VarType&FLAG_PTR){
+		SetError(14,variable,cp);
+		return;
+	}
+
+	if(VarType==DEF_OBJECT){
+		//オブジェクトインスタンスへの代入
+		SetObjectVariableFromRax(lpVarIndex,CalcType,lpCalcIndex,&VarRelativeVar,bCalcUseHeap);
+		return;
+	}
+
+	if(CalcType==DEF_OBJECT){
+		//キャスト演算子のオーバーロードに対応する
+		CallCastOperatorProc(REG_RAX,CalcType,lpCalcIndex,bCalcUseHeap,VarType,lpVarIndex);
+	}
+
+
+	/////////////////////////////////
+	// 右辺、左辺の型チェックを行う
+	/////////////////////////////////
+
+	CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
+
+
+	/////////////////////////////////////////////////
+	// rax（実数はxmm0）の内容を変数にコピー
+	/////////////////////////////////////////////////
+	SetVariableFromRax(VarType,CalcType,&VarRelativeVar);
+}
Index: /BasicCompiler64/Compile_Calc_PushVar.cpp
===================================================================
--- /BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 3)
+++ /BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 3)
@@ -0,0 +1,229 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+
+void SetXmmReg_DoubleVariable(RELATIVE_VAR *pRelativeVar,int xmm_reg){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//movlpd xmm_reg,qword ptr[r11+offset]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x41;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x12;
+			OpBuffer[obp++]=(char)(0x83 | REGISTER_OPERAND(xmm_reg)<<3);
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//movlpd xmm_reg,qword ptr[offset]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x12;
+			OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
+			OpBuffer[obp++]=(char)0x25;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//movlpd xmm_reg,qword ptr[rsp+r11+offset]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x42;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x12;
+			OpBuffer[obp++]=(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3);
+			OpBuffer[obp++]=(char)0x1C;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//movlpd xmm_reg,qword ptr[rsp+offset]
+			OpBuffer[obp++]=(char)0x66;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x12;
+			OpBuffer[obp++]=(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3);
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add r11,qword ptr[rsp+offset]
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x9C;
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov r11,qword ptr[rsp+offset]
+			op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+directmem:
+		//movlpd xmm_reg,qword ptr[r11]
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x41;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x12;
+		OpBuffer[obp++]=(char)(0x03 | REGISTER_OPERAND(xmm_reg)<<3);
+	}
+}
+void SetXmmReg_SingleVariable(RELATIVE_VAR *pRelativeVar,int xmm_reg){
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//movss xmm_reg,dword ptr[r11+offset]
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x41;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x10;
+			OpBuffer[obp++]=(char)(0x83 | REGISTER_OPERAND(xmm_reg)<<3);
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//movss xmm_reg,dword ptr[offset]
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x10;
+			OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
+			OpBuffer[obp++]=(char)0x25;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//movss xmm_reg,dword ptr[rsp+r11+offset]
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x42;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x10;
+			OpBuffer[obp++]=(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3);
+			OpBuffer[obp++]=(char)0x1C;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//movss xmm_reg,dword ptr[rsp+offset]
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x10;
+			OpBuffer[obp++]=(char)(0x84 | REGISTER_OPERAND(xmm_reg)<<3);
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add r11,qword ptr[rsp+offset]
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x9C;
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov r11,qword ptr[rsp+offset]
+			op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+directmem:
+		//movss xmm_reg,dword ptr[r11]
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0x41;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x10;
+		OpBuffer[obp++]=(char)(0x03 | REGISTER_OPERAND(xmm_reg)<<3);
+	}
+}
+
+
+void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg){
+	int var_size;
+
+	var_size=GetTypeSize(type,-1);
+
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//mov reg, ptr[r11+offset]
+			op_mov_RM(var_size,reg,REG_R11,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov reg, ptr[offset]
+			op_mov_RM(var_size,reg,0,(int)pRelativeVar->offset,MOD_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//mov reg, ptr[rsp+r11+offset]
+			op_mov_RM_ex(var_size,reg,REG_RSP,REG_R11,(int)pRelativeVar->offset,USE_OFFSET);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov reg, ptr[rsp+offset]
+			op_mov_RM(var_size,reg,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add r11,qword ptr[rsp+offset]
+			op_add_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov r11,qword ptr[rsp+offset]
+			op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+directmem:
+		//mov reg, ptr[r11]
+		op_mov_RM(var_size,reg,REG_R11,0,MOD_BASE);
+	}
+}
Index: /BasicCompiler64/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler64/Compile_CallProc.cpp	(revision 3)
+++ /BasicCompiler64/Compile_CallProc.cpp	(revision 3)
@@ -0,0 +1,552 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+//ローカル変数アドレススケジュール
+DWORD *pLocalVarAddrSchedule;
+int LocalVarAddrScheduleNum;
+
+void Call_DebugSys_SaveContext(){
+	//call _System_GetEip
+	extern SUBINFO *pSub_System_GetEip;
+	op_call(pSub_System_GetEip);
+
+	//mov rdx,rax
+	op_mov64_ToReg_FromReg(REG_RDX,REG_RAX);
+
+	//mov rcx,rsp
+	op_mov64_ToReg_FromReg(REG_RCX,REG_RSP);
+
+	//call _DebugSys_SaveContext
+	extern SUBINFO *pSub_DebugSys_SaveContext;
+	op_call(pSub_DebugSys_SaveContext);
+}
+
+void AddLocalVarAddrSchedule(){
+	extern HANDLE hHeap;
+
+	//ローカル変数アドレススケジュールに追加する
+	pLocalVarAddrSchedule=(DWORD *)HeapReAlloc(hHeap,0,pLocalVarAddrSchedule,(LocalVarAddrScheduleNum+1)*sizeof(DWORD));
+	pLocalVarAddrSchedule[LocalVarAddrScheduleNum]=obp;
+	LocalVarAddrScheduleNum++;
+}
+
+int CallProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex){
+	int ret_type;
+
+	if(idProc==PROC_DEFAULT){
+		/////////////////////
+		// ユーザー定義関数
+		/////////////////////
+
+		SUBINFO *psi;
+		psi=(SUBINFO *)pInfo;
+
+		//GetSubHash内でエラー提示が行われた場合
+		if(psi==(SUBINFO *)-1) return -1;
+
+
+		//オブジェクト名を取得
+		char ObjectName[VN_SIZE];
+		int RefType;
+		GetObjectName(name,ObjectName,&RefType);
+
+
+		////////////////////////
+		// オーバーロードを解決
+		////////////////////////
+
+		SUBINFO **ppsi;
+		int num;
+		ppsi=GetOverloadSubHash(name,&num);
+		if(num){
+			//オーバーロードを解決
+			psi=OverloadSolutionWithStrParam(name,ppsi,num,Parameter,ObjectName,NULL);
+			HeapDefaultFree(ppsi);
+
+			if(!psi) return 0;
+		}
+
+
+		ret_type=Opcode_CallProc(Parameter,psi,plpRetIndex,0,ObjectName,RefType);
+	}
+	else if(idProc==PROC_DLL){
+		/////////////////////////
+		// DLL関数
+		/////////////////////////
+		DECLAREINFO *pdi;
+		pdi=(DECLAREINFO *)pInfo;
+
+		ret_type=Opcode_CallDllProc(Parameter,pdi,plpRetIndex);
+	}
+	else if(idProc==PROC_BUILTIN){
+		/////////////////////////
+		// 組み込み関数
+		/////////////////////////
+		int FuncId;
+		FuncId=(int)(_int64)pInfo;
+
+		ret_type=Opcode_CallFunc(Parameter,FuncId);
+	}
+	else if(idProc==PROC_PTR){
+		/////////////////
+		// 関数ポインタ
+		/////////////////
+
+		LONG_PTR lpIndex;
+		GetVarType(name,&lpIndex,0);
+
+		extern PROCPTRINFO *pProcPtrInfo;
+		ret_type=Opcode_CallProcPtr(name,Parameter,&pProcPtrInfo[lpIndex],plpRetIndex);
+	}
+
+	return ret_type;
+}
+
+BOOL CallPropertyMethod(char *variable,char *RightSide,TYPEINFO *pRetTypeInfo){
+	//プロパティ用のメソッドを呼び出す
+
+	//配列要素を取得
+	char VarName[VN_SIZE],ArrayElements[VN_SIZE];
+	GetArrayElement(variable,VarName,ArrayElements);
+
+	//オブジェクト名を取得
+	char ObjectName[VN_SIZE];
+	int RefType;
+	GetObjectName(VarName,ObjectName,&RefType);
+
+	//オーバーロード用の関数リストを作成
+	SUBINFO **ppsi;
+	int num;
+	ppsi=GetOverloadSubHash(VarName,&num);
+	if(num==0){
+		return 0;
+	}
+
+	//パラメータを整備
+	char *Parameter;
+	Parameter=(char *)HeapAlloc(hHeap,0,lstrlen(ArrayElements)+lstrlen(RightSide)+32);
+	lstrcpy(Parameter,ArrayElements);
+	if(RightSide){
+		if(Parameter[0]&&RightSide[0]) lstrcat(Parameter,",");
+		lstrcat(Parameter,RightSide);
+	}
+
+	//オーバーロードを解決
+	SUBINFO *psi;
+	psi=OverloadSolutionWithStrParam(VarName,ppsi,num,Parameter,ObjectName,NULL);
+	HeapDefaultFree(ppsi);
+
+	if(psi){
+		//呼び出し
+		int type;
+		LONG_PTR lpIndex;
+		type=Opcode_CallProc(Parameter,psi,&lpIndex,0,ObjectName,RefType);
+
+		if(pRetTypeInfo){
+			pRetTypeInfo->type=type;
+			pRetTypeInfo->u.lpIndex=lpIndex;
+		}
+	}
+
+	HeapDefaultFree(Parameter);
+
+	return 1;
+}
+
+
+int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex){
+	extern HANDLE hHeap;
+	int i;
+
+
+	extern BOOL bDebugCompile;
+	extern BOOL bDebugSupportProc;
+	if(bDebugCompile&&bDebugSupportProc==0)
+		Call_DebugSys_SaveContext();
+
+
+	////////////////////////
+	// パラメータのセット
+	////////////////////////
+
+	//パラメータオブジェクトを生成
+	CParameter *pobj_parameter=0;
+	pobj_parameter=new CParameter(Parameter);
+
+	//エラーチェック
+	pobj_parameter->ErrorCheck(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum);
+
+	//スタックフレームに存在する既存のパラメータをバックアップ
+	pobj_parameter->BackupParameter(pi->ParmNum);
+
+	//レジスタ、スタックフレームにセット
+	pobj_parameter->SetParameter(variable,pi->pParmInfo,pi->ParmNum,pi->ParmNum);
+
+
+
+	RELATIVE_VAR RelativeVar;
+	LONG_PTR lp;
+	GetVarOffset(1,variable,&i,&RelativeVar,&lp);
+	SetVarPtrToReg(REG_RAX,&RelativeVar);
+
+	//mov rax,qword ptr[rax]
+	op_mov_RM(sizeof(_int64),REG_RAX,REG_RAX,0,MOD_BASE);
+
+	//call rax
+	OpBuffer[obp++]=(char)0xFF;
+	OpBuffer[obp++]=(char)0xD0;
+
+
+	//レジスタのブロッキングを解除		※パラメータセット時にロックされたレジスタ
+	pobj_BlockReg->clear();
+
+	//スタックフレームに存在する既存のパラメータを復元
+	pobj_parameter->RestoreParameter(pi->ParmNum);
+
+	//パラメータオブジェクトを破棄
+	delete pobj_parameter;
+
+	if(plpIndex) *plpIndex=pi->u.ReturnIndex;
+
+	return pi->ReturnType;
+}
+
+int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType){
+	int i,i2;
+
+	if(psi->dwType==SUBTYPE_MACRO){
+		if(lstrcmpi(psi->name,"Print")==0){
+			Opcode_Print(Parameter,0);
+			return -1;
+		}
+		if(lstrcmpi(psi->name,"Input")==0){
+			Opcode_Input(Parameter);
+			return -1;
+		}
+		if(lstrcmpi(psi->name,"Write")==0){
+			Opcode_Print(Parameter,1);
+			return -1;
+		}
+	}
+
+	psi->bUse=1;
+
+	BOOL bStatic=0;
+	CClass *pobj_c;
+	if(psi->pobj_ParentClass){
+		//クラスのメンバ関数を呼び出す場合はアクセスチェックを行う
+		if(ObjectName[0]){
+			if(lstrcmpi(ObjectName,"Super")==0){
+				//クラスメンバ関数内からスーパークラスの呼び出し
+				pobj_c=pobj_CompilingClass;
+			}
+			else{
+				pobj_c=pobj_DBClass->check(ObjectName);
+				if(pobj_c){
+					//静的メンバ
+					bStatic=1;
+				}
+				else{
+					//"->"によってオブジェクトを指定する通常のメンバ関数呼び出し
+					GetVarType(ObjectName,(LONG_PTR *)&pobj_c,1);
+				}
+			}
+		}
+		else{
+			if(dwFlags&PROCFLAG_NEW){
+				//New演算子によるコンストラクタ呼び出し
+				pobj_c=psi->pobj_ParentClass;
+			}
+			else{
+				//クラスメンバ関数内から同一クラスのメンバ関数の呼び出し
+				pobj_c=pobj_CompilingClass;
+			}
+		}
+
+		DWORD dwAccess;
+		for(i=0;i<pobj_c->iMethodNum;i++){
+			if(psi==pobj_c->ppobj_Method[i]->psi) break;
+		}
+		if(i==pobj_c->iMethodNum){
+			for(i=0;i<pobj_c->iStaticMethodNum;i++){
+				if(psi==pobj_c->ppobj_StaticMethod[i]->psi) break;
+			}
+			dwAccess=pobj_c->ppobj_StaticMethod[i]->dwAccess;
+
+			bStatic=1;
+		}
+		else dwAccess=pobj_c->ppobj_Method[i]->dwAccess;
+
+
+		//////////////////////////////
+		// アクセスエラーチェック
+		//////////////////////////////
+
+		if(ObjectName[0]){
+			//外部からの呼び出し
+			if(pobj_c==pobj_CompilingClass){
+				//同一クラスオブジェクトの場合はプライベートアクセスを容認する
+				if(dwAccess==ACCESS_NON){
+					SetError(109,psi->name,cp);
+					return -1;
+				}
+			}
+			else{
+				if(dwAccess==ACCESS_PRIVATE||
+					dwAccess==ACCESS_NON){
+					SetError(109,psi->name,cp);
+					return -1;
+				}
+				if(dwAccess==ACCESS_PROTECTED){
+					SetError(110,psi->name,cp);
+					return -1;
+				}
+			}
+		}
+		else{
+			//クラス内部からの呼び出し（継承によるACCESS_NONのみをエラーとする）
+			if(dwAccess==ACCESS_NON){
+				SetError(109,psi->name,cp);
+				return -1;
+			}
+		}
+	}
+
+
+	///////////////////////////////////////////////////////////////
+	// _System_LocalThis、_System_ReturnObjectのダミーをセット
+	///////////////////////////////////////////////////////////////
+
+	char temporary[VN_SIZE]={0};
+	if(psi->pobj_ParentClass&&bStatic==0){
+		//_System_LocalThis（第一パラメータ）のダミーを作成
+		lstrcpy(temporary,"0,");
+	}
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//_System_ReturnObject（第一または第二パラメータのダミーを作成）
+		sprintf(temporary+lstrlen(temporary),"%c%c0,",1,ESC_BYVAL);
+	}
+
+	if(Parameter[0]=='\0'&&temporary[0])
+		temporary[lstrlen(temporary)-1]=0;
+	else lstrcat(temporary,Parameter);
+
+
+	////////////////////////
+	// パラメータをセット
+	////////////////////////
+
+	//パラメータオブジェクトを生成
+	CParameter *pobj_parameter=0;
+	pobj_parameter=new CParameter(temporary);
+
+	//エラーチェック
+	pobj_parameter->ErrorCheck(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->SecondParmNum);
+
+	if(psi->dwType==SUBTYPE_MACRO){
+		//マクロ関数の場合は、パラメータ省略を考慮する
+		pobj_parameter->MacroParameterSupport(psi->pRealParmInfo);
+	}
+
+	//スタックフレームに存在する既存のパラメータをバックアップ
+	pobj_parameter->BackupParameter(psi->RealParmNum);
+
+	//レジスタ、スタックフレームにセット
+	pobj_parameter->SetParameter(psi->name,psi->pRealParmInfo,psi->RealParmNum,psi->RealSecondParmNum);
+
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//////////////////////////////////////////////////////
+		// 戻り値にオブジェクト インスタンスを持つ場合
+		// ※ByRef _System_ReturnObject パラメータをセット
+		//////////////////////////////////////////////////////
+
+
+		//////////////////////////////////////////////////////
+		/////    レジスタ資源のバックアップ
+		{	BACKUP_REGISTER_RESOURCE
+		//////////////////////////////////////////////////////
+
+			int object_size;
+			object_size=GetSizeOfClass(psi->u.Return_pobj_c);
+
+			//mov rcx,object_size
+			op_mov_RV(sizeof(_int64),REG_RCX,object_size);
+
+			//call calloc
+			extern SUBINFO *pSub_calloc;
+			op_call(pSub_calloc);
+
+			//mov r13,rax
+			op_mov_RR(REG_R13,REG_RAX);
+
+		/////////////////////////////////////////////
+		//////   レジスタ資源を復元
+			RESTORE_REGISTER_RESOURCE
+		}////////////////////////////////////////////
+
+		if(psi->pobj_ParentClass&&bStatic==0){
+			//mov rdx,r13
+			op_mov_RR(REG_RDX,REG_R13);
+		}
+		else{
+			//mov rcx,r13
+			op_mov_RR(REG_RCX,REG_R13);
+		}
+	}
+
+
+	if(psi->pobj_ParentClass&&bStatic==0){
+		///////////////////////////////
+		// メンバ関数の場合
+		// thisポインタをrcxで受け渡す
+		///////////////////////////////
+
+		if(ObjectName[0]){
+			if(lstrcmpi(ObjectName,"Super")==0) goto InClassMember;
+			else{
+				RELATIVE_VAR RelativeVar;
+				if(!GetVarOffset(1,ObjectName,&i2,&RelativeVar,0)) return -1;
+				SetVarPtrToReg(REG_RCX,&RelativeVar);
+
+				//参照タイプが整合しているかをチェック
+				if(i2!=RefType) SetError(104,ObjectName,cp);
+
+				if(i2==DEF_PTR_OBJECT){
+					//mov rcx,qword ptr[rcx]
+					op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE);
+				}
+			}
+		}
+		else{
+InClassMember:
+			if(dwFlags&PROCFLAG_NEW){
+				//New演算子によるコンストラクタ呼び出しの場合
+
+				//mov rcx,qword ptr[rsp+offset]     ※スタックフレームを利用
+				pobj_sf->ref(REG_RCX);
+			}
+			else{
+				//自身のオブジェクトのThisポインタをrcxにコピー
+				SetThisPtrToReg(REG_RCX);
+			}
+		}
+	}
+
+	if(psi->bVirtual){
+		//仮想関数（オブジェクトメソッド）呼び出し
+		//pObj->func_table->func1
+		//                ->func2
+		//                ->func3
+
+		//mov r11,qword ptr[rcx]
+		op_mov_RM(sizeof(_int64),REG_R11,REG_RCX,0,MOD_BASE);
+
+		for(i=0,i2=0;i<pobj_c->iMethodNum;i++){
+			if(pobj_c->ppobj_Method[i]->psi==psi) break;
+			if(pobj_c->ppobj_Method[i]->psi->bVirtual) i2++;
+		}
+
+		//call qword ptr[r11+func_index]
+		if(i2*PTR_SIZE<=0x7F){
+			OpBuffer[obp++]=(char)0x41;
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x53;
+			OpBuffer[obp++]=(char)(i2*PTR_SIZE);
+		}
+		else{
+			OpBuffer[obp++]=(char)0x41;
+			OpBuffer[obp++]=(char)0xFF;
+			OpBuffer[obp++]=(char)0x93;
+			*((long *)(OpBuffer+obp))=i2*PTR_SIZE;
+			obp+=sizeof(long);
+		}
+	}
+	else{
+		//通常呼び出し
+
+		//call ProcAddr
+		op_call(psi);
+	}
+
+	/* 64コンパイラでは不要
+	if(pdi->bCdecl){
+		//add esp,ParmSize
+	}*/
+
+
+	//レジスタのブロッキングを解除		※パラメータセット時にロックされたレジスタ
+	pobj_BlockReg->clear();
+
+	//スタックフレームに存在する既存のパラメータを復元
+	pobj_parameter->RestoreParameter(psi->RealParmNum);
+
+	//パラメータオブジェクトを破棄
+	delete pobj_parameter;
+
+	if(plpIndex) *plpIndex=psi->u.ReturnIndex;
+
+	return psi->ReturnType;
+}
+
+int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex){
+	char *temporary;
+
+	temporary=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter)+1);
+
+	extern BOOL bDebugCompile;
+	extern BOOL bDebugSupportProc;
+	if(bDebugCompile&&bDebugSupportProc==0&&lstrcmp(pdi->name,"DebugBreak")!=0)
+		Call_DebugSys_SaveContext();
+
+	pdi->bUse=1;
+
+
+	////////////////////////
+	// パラメータのセット
+	////////////////////////
+
+	//パラメータオブジェクトを生成
+	CParameter *pobj_parameter=0;
+	pobj_parameter=new CParameter(Parameter);
+
+	//エラーチェック
+	pobj_parameter->ErrorCheck(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum);
+
+	//スタックフレームに存在する既存のパラメータをバックアップ
+	pobj_parameter->BackupParameter(pdi->ParmNum);
+
+	//レジスタ、スタックフレームにセット
+	pobj_parameter->SetParameter(pdi->name,pdi->pParmInfo,pdi->ParmNum,pdi->ParmNum);
+
+
+	//レジスタのブロッキングを解除		※パラメータセット時にロックされたレジスタ
+	pobj_BlockReg->clear();
+
+
+	//動的リンクされたプロシージャの呼び出し
+
+	//call dword ptr[ImportTable]
+	OpBuffer[obp++]=(char)0xFF;
+	OpBuffer[obp++]=(char)0x15;
+	pobj_ImportAddrSchedule->add(pdi);
+	obp+=sizeof(long);
+
+	/* 64コンパイラでは不要
+	if(pdi->bCdecl){
+		//add esp,ParmSize
+	}*/
+
+	//スタックフレームに存在する既存のパラメータを復元
+	pobj_parameter->RestoreParameter(pdi->ParmNum);
+
+	//パラメータオブジェクトを破棄
+	delete pobj_parameter;
+
+	if(plpIndex) *plpIndex=pdi->u.ReturnIndex;
+
+	HeapDefaultFree(temporary);
+
+	return pdi->ReturnType;
+}
Index: /BasicCompiler64/Compile_Func.cpp
===================================================================
--- /BasicCompiler64/Compile_Func.cpp	(revision 3)
+++ /BasicCompiler64/Compile_Func.cpp	(revision 3)
@@ -0,0 +1,283 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+int GetFunctionType(int FuncNum){
+	switch(FuncNum){
+		case FUNC_LEN:
+			return DEF_LONG;
+		case FUNC_SIZEOF:
+			return DEF_LONG;
+		case FUNC_ADDRESSOF:
+		case FUNC_VARPTR:
+			return DEF_PTR_VOID;
+		case FUNC_GETDOUBLE:
+			return DEF_DOUBLE;
+		case FUNC_GETSINGLE:
+			return DEF_SINGLE;
+		case FUNC_GETQWORD:
+			return DEF_QWORD;
+		case FUNC_GETDWORD:
+			return DEF_DWORD;
+		case FUNC_GETWORD:
+			return DEF_WORD;
+		case FUNC_GETBYTE:
+			return DEF_BYTE;
+	}
+	return 0;
+}
+int GetFunctionFromName(char *FuncName){
+	if(lstrcmpi(FuncName,"Len")==0)			return FUNC_LEN;
+	if(lstrcmpi(FuncName,"AddressOf")==0)	return FUNC_ADDRESSOF;
+	if(lstrcmpi(FuncName,"SizeOf")==0)		return FUNC_SIZEOF;
+	if(lstrcmpi(FuncName,"VarPtr")==0)		return FUNC_VARPTR;
+	if(lstrcmpi(FuncName,"GetDouble")==0)	return FUNC_GETDOUBLE;
+	if(lstrcmpi(FuncName,"GetSingle")==0)	return FUNC_GETSINGLE;
+	if(lstrcmpi(FuncName,"GetQWord")==0)	return FUNC_GETQWORD;
+	if(lstrcmpi(FuncName,"GetDWord")==0)	return FUNC_GETDWORD;
+	if(lstrcmpi(FuncName,"GetWord")==0)		return FUNC_GETWORD;
+	if(lstrcmpi(FuncName,"GetByte")==0)		return FUNC_GETBYTE;
+	return 0;
+}
+void Opcode_Func_Len(char *Parameter){
+	int type,TypeSize;
+	LONG_PTR lpIndex;
+	BOOL bArrayHead;
+
+	type=GetVarType(Parameter,&lpIndex,0);
+
+	char *tempParm=Parameter;
+	char temporary[VN_SIZE];
+	char temp2[32];
+	if(type==-1){
+		sprintf(temporary,"_System_DummyStr2=%s",Parameter);
+		OpcodeCalc(temporary);
+
+		lstrcpy(temp2,"_System_DummyStr2");
+		tempParm=temp2;
+
+		extern CClass *pobj_StringClass;
+		type=DEF_OBJECT;
+		lpIndex=(LONG_PTR)pobj_StringClass;
+	}
+
+	TYPEINFO TypeInfo={type,lpIndex};
+	if(IsStringObjectType(&TypeInfo)){
+		//Stringオブジェクトの場合
+		sprintf(temporary,"%s.Length",tempParm);
+
+		int reg=REG_RAX;
+		NumOpe(&reg,temporary,0,0,NULL,NULL);
+		return;
+	}
+
+
+	int SubScripts[MAX_ARRAYDIM];
+	RELATIVE_VAR RelativeVar;
+	if(!GetVarOffset(1,tempParm,&type,&RelativeVar,&lpIndex,SubScripts)) return;
+
+
+	if(type&FLAG_PTR){
+		type&=~FLAG_PTR;
+
+		bArrayHead=1;
+	}
+	else bArrayHead=0;
+
+	TypeSize=GetTypeSize(type,lpIndex);
+
+	if(bArrayHead) TypeSize*=JumpSubScripts(SubScripts);
+
+	//mov rax,TypeSize
+	op_mov_RV(sizeof(_int64),REG_RAX,TypeSize);
+
+	return;
+}
+void Opcode_Func_AddressOf(char *name){
+	extern int cp;
+	SUBINFO *psi;
+
+	extern LONG_PTR ProcPtr_BaseIndex;
+	if(ProcPtr_BaseIndex!=-1){
+		//左辺の型にのっとり、オーバーロードを解決
+
+		SUBINFO **ppsi;
+		int num;
+		ppsi=GetOverloadSubHash(name,&num);
+		if(!num){
+			HeapDefaultFree(ppsi);
+
+			SetError(27,name,cp);
+			return;
+		}
+
+		//オーバーロードを解決
+		extern PROCPTRINFO *pProcPtrInfo;
+		psi=OverloadSolution(name,ppsi,num,pProcPtrInfo[ProcPtr_BaseIndex].pParmInfo,pProcPtrInfo[ProcPtr_BaseIndex].ParmNum,NULL);
+		HeapDefaultFree(ppsi);
+
+		if(!psi){
+			SetError(27,name,cp);
+			return;
+		}
+	}
+	else{
+		psi=GetSubHash(name);
+		if(!psi){
+			SetError(27,name,cp);
+			return;
+		}
+	}
+
+
+	if(psi->bVirtual){
+		///////////////////////////////
+		// 仮想関数の場合
+		// thisポインタをrcxにコピー
+		///////////////////////////////
+
+		CClass *pobj_c;
+
+		char ObjectName[VN_SIZE];
+		int RefType;
+		GetObjectName(name,ObjectName,&RefType);
+
+		if(ObjectName[0]){
+			if(lstrcmpi(ObjectName,"Super")==0) goto InClassMember;
+			else{
+				RELATIVE_VAR RelativeVar;
+				int type;
+				if(!GetVarOffset(1,ObjectName,&type,&RelativeVar,(LONG_PTR *)&pobj_c)) return;
+				SetVarPtrToReg(REG_RCX,&RelativeVar);
+
+				//参照タイプが整合しているかをチェック
+				if(type!=RefType) SetError(104,ObjectName,cp);
+
+				if(type==DEF_PTR_OBJECT){
+					//mov rcx,qword ptr[rcx]
+					op_mov_RM(sizeof(_int64),REG_RCX,REG_RCX,0,MOD_BASE);
+				}
+			}
+		}
+		else{
+InClassMember:
+			//自身のオブジェクトのThisポインタをrcxにコピー
+			SetThisPtrToReg(REG_RCX);
+
+			pobj_c=pobj_CompilingClass;
+		}
+
+
+		//仮想関数（オブジェクトメソッド）
+		//pObj->func_table->func1
+		//                ->func2
+		//                ->func3
+
+		//mov r11,qword ptr[rcx]
+		op_mov_RM(sizeof(_int64),REG_R11,REG_RCX,0,MOD_BASE);
+
+		int i,i2;
+		for(i=0,i2=0;i<pobj_c->iMethodNum;i++){
+			if(pobj_c->ppobj_Method[i]->psi==psi) break;
+			if(pobj_c->ppobj_Method[i]->psi->bVirtual) i2++;
+		}
+
+		//mov rax,qword ptr[r11+func_index]
+		if(i2*PTR_SIZE<=0x7F){
+			op_mov_RM(sizeof(_int64),REG_RAX,REG_R11,i2*PTR_SIZE,MOD_BASE_DISP8);
+		}
+		else{
+			op_mov_RM(sizeof(_int64),REG_RAX,REG_R11,i2*PTR_SIZE,MOD_BASE_DISP32);
+		}
+	}
+	else{
+		//一般の関数
+
+		//mov rax,ProcAddr
+		op_mov_RV(sizeof(_int64),REG_RAX,0);
+		obp-=sizeof(long);
+		pobj_SubAddrSchedule->add(psi,0);
+		obp+=sizeof(long);
+	}
+
+	psi->bUse=1;
+}
+void Opcode_Func_SizeOf(char *Parameter){
+	int type,size;
+	LONG_PTR lpIndex;
+
+	type=GetTypeFixed(Parameter,&lpIndex);
+	size=GetTypeSize(type,lpIndex);
+
+	//mov rax,size
+	op_mov_RV(sizeof(_int64),REG_RAX,size);
+}
+void Opcode_Func_VarPtr(char *Parameter){
+	int type;
+	RELATIVE_VAR RelativeVar;
+
+	//変数のアドレスを取得
+	if(!GetVarOffset(1,Parameter,&type,&RelativeVar,0)) return;
+
+	SetVarPtrToReg(REG_RAX,&RelativeVar);
+}
+void Opcode_Func_GetPtrData(char *Parameter,int type){
+	int i2;
+
+	int reg=REG_RAX;
+	i2=NumOpe(&reg,Parameter,0,0,0);
+	if(!IsWholeNumberType(i2)){
+		extern int cp;
+		SetError(11,Parameter,cp);
+		return;
+	}
+
+	if(type==DEF_DOUBLE){
+		//movlpd xmm0,qword ptr[rax]
+		op_movlpd_RM(REG_XMM0,REG_RAX,0,MOD_BASE);
+	}
+	else if(type==DEF_SINGLE){
+		//movss xmm0,dword ptr[rax]
+		op_movss_RM(REG_XMM0,REG_RAX,0,MOD_BASE);
+	}
+	else{
+		//mov rax,ptr[rax]
+		op_mov_RM(GetTypeSize(type,-1),REG_RAX,REG_RAX,0,MOD_BASE);
+	}
+}
+
+int Opcode_CallFunc(char *Parameter,int FuncNum){
+	switch(FuncNum){
+		case FUNC_LEN:
+			Opcode_Func_Len(Parameter);
+			return DEF_LONG;
+		case FUNC_ADDRESSOF:
+			Opcode_Func_AddressOf(Parameter);
+			return DEF_PTR_VOID;
+		case FUNC_SIZEOF:
+			Opcode_Func_SizeOf(Parameter);
+			return DEF_LONG;
+		case FUNC_VARPTR:
+			Opcode_Func_VarPtr(Parameter);
+			return DEF_PTR_VOID;
+
+		case FUNC_GETDOUBLE:
+			Opcode_Func_GetPtrData(Parameter,DEF_DOUBLE);
+			return DEF_DOUBLE;
+		case FUNC_GETSINGLE:
+			Opcode_Func_GetPtrData(Parameter,DEF_SINGLE);
+			return DEF_SINGLE;
+		case FUNC_GETQWORD:
+			Opcode_Func_GetPtrData(Parameter,DEF_QWORD);
+			return DEF_QWORD;
+		case FUNC_GETDWORD:
+			Opcode_Func_GetPtrData(Parameter,DEF_DWORD);
+			return DEF_DWORD;
+		case FUNC_GETWORD:
+			Opcode_Func_GetPtrData(Parameter,DEF_WORD);
+			return DEF_WORD;
+		case FUNC_GETBYTE:
+			Opcode_Func_GetPtrData(Parameter,DEF_BYTE);
+			return DEF_BYTE;
+	}
+	return 0;
+}
Index: /BasicCompiler64/Compile_Object.cpp
===================================================================
--- /BasicCompiler64/Compile_Object.cpp	(revision 3)
+++ /BasicCompiler64/Compile_Object.cpp	(revision 3)
@@ -0,0 +1,316 @@
+#include "../BasicCompiler_Common/common.h"
+#include "opcode.h"
+
+void CallConstructor(CClass *pobj_c,char *CreateParameter,int ObjectSize,BOOL bSomeObjects){
+	////////////////////////////
+	// コンストラクタの呼び出し
+	////////////////////////////
+	
+	//この関数を使用する場合は、
+	//・ebxにオブジェクトの個数（複数個の場合のみ）
+	//・スタックフレームの先頭参照位置に先頭Thisポインタ
+	//をセットしておかなければならない
+
+	int jnz_back;
+
+
+	//jnzの番地
+	jnz_back=obp;
+
+	if(bSomeObjects){
+		//mov qword ptr[rsp+offset],rbx     ※スタックフレームを利用
+		pobj_sf->push(REG_RBX);
+
+		// ※ここでプッシュされた値はコンストラクタのthisポインタとなる
+		//mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
+		pobj_sf->push(REG_RAX);
+	}
+
+
+	////////////////////////
+	// オーバーロードを解決
+	////////////////////////
+
+	SUBINFO **ppsi;
+	SUBINFO *psi;
+	int num;
+	ppsi=GetOverloadObjectSubHash(pobj_c->name,pobj_c,&num);
+	if(num){
+		//オーバーロードを解決
+		psi=OverloadSolutionWithStrParam(pobj_c->name,
+			ppsi,num,CreateParameter,"",NULL);
+		HeapDefaultFree(ppsi);
+
+		if(!psi) return;
+	}
+
+	//コンストラクタを呼び出す
+	Opcode_CallProc(CreateParameter,
+		psi,
+		0,
+		PROCFLAG_NEW,"",0);
+
+	if(bSomeObjects){
+		//mov rax,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_RAX);
+
+		//mov rbx,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_RBX);
+
+		//add eax,TypeSize
+		OpBuffer[obp++]=(char)0x05;
+		*((long *)(OpBuffer+obp))=ObjectSize;
+		obp+=sizeof(long);
+
+		//sub ebx,1
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xEB;
+		OpBuffer[obp++]=(char)0x01;
+
+		//jnz ↑
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x85;
+		*((long *)(OpBuffer+obp))=jnz_back-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+}
+int Operator_New(char *Parameter,LONG_PTR *plpIndex){
+	char TypeName[VN_SIZE],CreateParameter[VN_SIZE],ObjectSize[VN_SIZE];
+	int i,i2;
+	int reg;
+
+	i=0;
+
+	if(Parameter[0]=='['){
+		i=GetStringInBracket(ObjectSize,Parameter);
+
+		SlideString(ObjectSize+1,-1);
+		ObjectSize[i-2]=0;
+	}
+	else ObjectSize[0]=0;
+
+	for(i2=0;;i++,i2++){
+		if(Parameter[i]=='('){
+			TypeName[i2]=0;
+
+			//コンストラクタに渡すパラメータを取得
+			i2=GetStringInPare(CreateParameter,Parameter+i);
+			RemoveStringPare(CreateParameter);
+			i+=i2;
+			if(Parameter[i]!='\0'){
+				SetError(42,NULL,cp);
+				return 0;
+			}
+			break;
+		}
+		TypeName[i2]=Parameter[i];
+		if(Parameter[i]=='\0'){
+			CreateParameter[0]=0;
+			break;
+		}
+	}
+
+	int type,TypeSize;
+	type=GetTypeFixed(TypeName,plpIndex);
+	if(type==-1){
+		SetError(3,TypeName,cp);
+		return 0;
+	}
+	TypeSize=GetTypeSize(type,*plpIndex);
+
+	if(type!=DEF_OBJECT){
+		////////////////////////
+		// 通常のデータ型の場合
+		////////////////////////
+
+		SetError(121,NULL,cp);
+		return 0;
+	}
+
+	CClass *pobj_c;
+	pobj_c=(CClass *)*plpIndex;
+
+	if(pobj_c->IsHoldAbstractFunction()){
+		//抽象クラスだったとき
+		SetError(125,pobj_c->name,cp);
+	}
+
+	BOOL bSomeObjects=0;
+	if(ObjectSize[0]){
+		bSomeObjects=1;
+
+		reg=REG_RAX;
+		i2=NumOpe(&reg,ObjectSize,0,0,0);
+		if(!IsWholeNumberType(i2)) SetError(49,NULL,cp);
+
+		//※添え字上限値であることを考慮
+		//add rax,1
+		op_add64_value(REG_RAX,1);
+
+		//オブジェクトの個数をrbxに一時保持
+		//※rbxは関数が呼ばれても不変
+		//mov rbx,rax
+		op_mov64_ToReg_FromReg(REG_RBX,REG_RAX);
+
+		//imul rax,size
+		op_imul_value(sizeof(_int64),REG_RAX,TypeSize);
+
+		//add rax,PTR_SIZE*3
+		op_add64_value(REG_RAX,PTR_SIZE*3);
+
+		//mov rcx,rax
+		op_mov64_ToReg_FromReg(REG_RCX,REG_RAX);
+	}
+	else{
+		//オブジェクトの個数をrbxに一時保持
+		//※rbxは関数が呼ばれても不変
+		//mov rbx,1
+		op_mov_RV(sizeof(_int64),REG_RBX,1);
+
+		//mov rcx,TypeSize+PTR_SIZE*3
+		op_mov_RV(sizeof(_int64),REG_RCX,TypeSize+PTR_SIZE*3);
+	}
+
+	//call calloc
+	extern SUBINFO *pSub_calloc;
+	op_call(pSub_calloc);
+
+
+	/*
+	確保されたヒープ領域のポインタ（callocの戻り値eax）をpPtrとすると、
+	pPtr-=sizeof(DWORD)*3
+	pPtr[0]=オブジェクトの個数
+	pPtr[1]=オブジェクトのサイズ
+	pPtr[2]=デストラクタの関数ポインタ
+	*/
+
+
+	//mov qword ptr[rax],rbx（オブジェクトの個数）
+	op_mov_MR(sizeof(_int64),REG_RBX,REG_RAX,0,MOD_BASE);
+
+	//add rax,PTR_SIZE
+	op_add64_value(REG_RAX,PTR_SIZE);
+
+
+	//mov qword ptr[rax],TypeSize（オブジェクトのサイズ）
+	op_mov_MV(sizeof(_int64),REG_RAX,0,NON_OFFSET,TypeSize);
+
+	//add rax,PTR_SIZE
+	op_add64_value(REG_RAX,PTR_SIZE);
+
+
+	i2=pobj_c->DestructorMemberSubIndex;
+	if(i2==-1) return 0;
+
+	//mov rcx,DestructorProcAddr
+	op_mov_RV(sizeof(_int64),REG_RCX,0);
+	obp-=sizeof(long);
+	pobj_SubAddrSchedule->add(pobj_c->ppobj_Method[i2]->psi,0);
+	pobj_c->ppobj_Method[i2]->psi->bUse=1;
+	obp+=sizeof(long);
+
+	//mov qword ptr[rax],rcx
+	op_mov_MR(sizeof(_int64),REG_RCX,REG_RAX,0,MOD_BASE);
+
+	//add rax,PTR_SIZE
+	op_add64_value(REG_RAX,PTR_SIZE);
+
+
+	// ※ここでプッシュされた値はNew演算子の戻り値となる
+	//mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
+	pobj_sf->push(REG_RAX);
+
+
+	/////////////////////////////////////////////////////////////////////
+
+	////////////////////////////
+	// コンストラクタの呼び出し
+	////////////////////////////
+
+	CallConstructor(pobj_c,CreateParameter,TypeSize,bSomeObjects);
+
+
+	//mov rax,qword ptr[rsp+offset]     ※スタックフレームを利用
+	pobj_sf->pop(REG_RAX);
+
+	return DEF_PTR_OBJECT;
+}
+
+void OpcodeDelete(char *Parameter){
+	int type;
+
+	int reg=REG_RAX;
+	type=NumOpe(&reg,Parameter,0,0,0);
+	if(type==-1) return;
+	if(!(type==DEF_PTR_OBJECT||type==DEF_PTR_VOID)) SetError(122,NULL,cp);
+
+	//sub rax,PTR_SIZE*3
+	op_sub_RV(sizeof(_int64),REG_RAX,PTR_SIZE*3);
+
+	//mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
+	pobj_sf->push(REG_RAX);
+
+
+	//mov rbx,qword ptr[rax]（オブジェクトの個数）
+	op_mov_RM(sizeof(_int64),REG_RBX,REG_RAX,0,MOD_BASE);
+
+	//add rax,PTR_SIZE
+	op_add64_value(REG_RAX,PTR_SIZE);
+
+
+	//mov rsi,qword ptr[rax]（オブジェクトのサイズ）
+	op_mov_RM(sizeof(_int64),REG_RSI,REG_RAX,0,MOD_BASE);
+
+	//add rax,PTR_SIZE
+	op_add64_value(REG_RAX,PTR_SIZE);
+
+
+	//mov rdi,qword ptr[rax]（デストラクタの関数ポインタ）
+	op_mov_RM(sizeof(_int64),REG_RDI,REG_RAX,0,MOD_BASE);
+
+	//add rax,PTR_SIZE
+	op_add64_value(REG_RAX,PTR_SIZE);
+
+
+	//mov rcx,rax
+	op_mov64_ToReg_FromReg(REG_RCX,REG_RAX);
+
+
+	//jnzの番地
+	int jnz_back;
+	jnz_back=obp;
+
+	//mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
+	pobj_sf->push(REG_RAX);
+
+	//call rdi
+	OpBuffer[obp++]=(char)0xFF;
+	OpBuffer[obp++]=(char)0xD7;
+
+	//mov rcx,qword ptr[rsp+offset]     ※スタックフレームを利用
+	pobj_sf->pop(REG_RCX);
+
+	//add rcx,rsi
+	op_add64_reg(REG_RCX,REG_RSI);
+
+	//sub rbx,1
+	op_sub_RV(sizeof(_int64),REG_RBX,1);
+
+	//jnz ↑
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x85;
+	*((long *)(OpBuffer+obp))=jnz_back-(obp+sizeof(long));
+	obp+=sizeof(long);
+
+
+	//////////////////////////////////////////
+	// オブジェクトメンバ変数用のメモリを解放
+	//////////////////////////////////////////
+
+	//mov rcx,qword ptr[rsp+offset]     ※スタックフレームを利用
+	pobj_sf->pop(REG_RCX);
+
+	//call free
+	extern SUBINFO *pSub_free;
+	op_call(pSub_free);
+}
Index: /BasicCompiler64/Compile_ProcOp.cpp
===================================================================
--- /BasicCompiler64/Compile_ProcOp.cpp	(revision 3)
+++ /BasicCompiler64/Compile_ProcOp.cpp	(revision 3)
@@ -0,0 +1,868 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void SystemProc(char *name){
+	if(lstrcmp(name,"_System_GetEip")==0){
+		//mov rax,qword ptr[rsp]
+		op_mov_RM(sizeof(_int64),REG_RAX,REG_RSP,0,MOD_BASE);
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_System_InitDllGlobalVariables")==0){
+		////////////////////////////////////////
+		// DLLのグローバル領域をコンパイル
+		////////////////////////////////////////
+		extern BOOL bDll;
+		if(!bDll){
+			//ret
+			OpBuffer[obp++]=(char)0xC3;
+
+			return;
+		}
+
+		extern BOOL bCompilingGlobal;
+		BOOL bBackCompilingGlobal;
+		bBackCompilingGlobal=bCompilingGlobal;
+		bCompilingGlobal=1;
+
+		int BackCp;
+		BackCp=cp;
+		cp=-1;
+
+		//sub rsp,スタックフレームサイズ
+		int StackFrameSchedule;
+		op_sub_rsp(0xFFFFFFFF);
+		StackFrameSchedule=obp-sizeof(long);
+
+		extern BOOL bDebugCompile;
+		if(bDebugCompile){
+			//デバッグ用の変数を定義
+			DebugVariable();
+		}
+
+		//GC用の変数を定義
+		InitGCVariables();
+
+		GetGlobalDataForDll();
+
+		//add rsp,スタックフレームサイズ
+		op_add64_value(REG_RSP,pobj_sf->GetFrameSize());
+
+		//スタックフレームスケジュール（subコマンドに渡す値）
+		*((long *)(OpBuffer+StackFrameSchedule))=pobj_sf->GetFrameSize();
+
+		bCompilingGlobal=bBackCompilingGlobal;
+		cp=BackCp;
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_System_InitStaticLocalVariables")==0){
+		//静的ローカルオブジェクトのコンストラクタ呼び出し
+
+		//sub rsp,スタックフレームサイズ
+		int StackFrameSchedule;
+		op_sub_rsp(0xFFFFFFFF);
+		StackFrameSchedule=obp-sizeof(long);
+
+		extern int MaxGlobalVarNum;
+		extern VARIABLE *GlobalVar;
+		int i;
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(memicmp(GlobalVar[i].name,"Static%",7)==0){
+				//コンストラクタ呼び出し
+				if(GlobalVar[i].type==DEF_OBJECT){
+
+					//エラー用
+					cp=GlobalVar[i].source_code_address;
+
+					TYPEINFO TypeInfo;
+					TypeInfo.type=GlobalVar[i].type;
+					TypeInfo.u.lpIndex=GlobalVar[i].u.index;
+					CallConstractor(
+						GlobalVar[i].name,
+						GlobalVar[i].SubScripts,
+						TypeInfo,
+						GlobalVar[i].ConstractParameter);
+				}
+			}
+		}
+
+		//add rsp,スタックフレームサイズ
+		op_add64_value(REG_RSP,pobj_sf->GetFrameSize());
+
+		//スタックフレームスケジュール（subコマンドに渡す値）
+		*((long *)(OpBuffer+StackFrameSchedule))=pobj_sf->GetFrameSize();
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_System_Call_Destructor_of_GlobalObject")==0){
+		//sub rsp,8（※RSPを16バイト境界にあわせるため）
+		op_sub_rsp(0x8);
+
+
+		extern BOOL bCompilingGlobal;
+		BOOL bBackCompilingGlobal;
+		bBackCompilingGlobal=bCompilingGlobal;
+		bCompilingGlobal=1;
+
+		CallDestrouctorsOfScope();
+
+		bCompilingGlobal=bBackCompilingGlobal;
+
+
+		//add rsp,8
+		op_add64_value(REG_RSP,0x8);
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_System_GetSp")==0){
+		//mov rax,rsp
+		op_mov_RR(REG_RAX,REG_RSP);
+
+		//add rax,PTR_SIZE
+		op_add64_value(REG_RAX,PTR_SIZE);
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+	}
+	else if(lstrcmp(name,"_allrem")==0){
+		//乗除演算用の特殊関数（64ビット整数対応）
+		BYTE Buffer_allrem[]={
+			0x53,0x57,0x33,0xFF,0x8B,0x44,0x24,0x10,0x0B,0xC0,0x7D,0x14,0x47,0x8B,0x54,0x24,0x0C,0xF7,0xD8,0xF7,0xDA,0x83,0xD8,0x00,0x89,0x44,0x24,0x10,0x89,0x54,0x24,0x0C,0x8B,0x44,0x24,0x18,0x0B,0xC0,0x7D,0x13,0x8B,0x54,0x24,0x14,0xF7,0xD8,0xF7,0xDA,0x83,0xD8,0x00,0x89,0x44,0x24,0x18,0x89,0x54,0x24,0x14,0x0B,0xC0,0x75,0x1B,0x8B,0x4C,0x24,0x14,0x8B,0x44,0x24,0x10,0x33,0xD2,0xF7,0xF1,0x8B,0x44,0x24,0x0C,0xF7,0xF1,0x8B,0xC2,0x33,0xD2,0x4F,0x79,0x4E,0xEB,0x53,0x8B,0xD8,0x8B,0x4C,0x24,0x14,0x8B,0x54,0x24,0x10,0x8B,0x44,0x24,0x0C,0xD1,0xEB,0xD1,0xD9,0xD1,0xEA,0xD1,0xD8,0x0B,0xDB,0x75,0xF4,0xF7,0xF1,0x8B,0xC8,0xF7,0x64,0x24,0x18,0x91,0xF7,0x64,0x24,0x14,0x03,0xD1,0x72,0x0E,0x3B,0x54,0x24,0x10,0x77,0x08,0x72,0x0E,0x3B,0x44,0x24,0x0C,0x76,0x08,0x2B,0x44,0x24,0x14,0x1B,0x54,0x24,0x18,0x2B,0x44,0x24,0x0C,0x1B,0x54,0x24,0x10,0x4F,0x79,0x07,0xF7,0xDA,0xF7,0xD8,0x83,0xDA,0x00,0x5F,0x5B,0xC2,0x10,0x00
+		};
+
+		memcpy(OpBuffer+obp,Buffer_allrem,178);
+		obp+=178;
+	}
+	else if(lstrcmp(name,"_allmul")==0){
+		//乗算用の特殊関数（64ビット整数対応）
+		BYTE Buffer_allmul[]={
+			0x8B,0x44,0x24,0x08,0x8B,0x4C,0x24,0x10,0x0B,0xC8,0x8B,0x4C,0x24,0x0C,0x75,0x09,0x8B,0x44,0x24,0x04,0xF7,0xE1,0xC2,0x10,0x00,0x53,0xF7,0xE1,0x8B,0xD8,0x8B,0x44,0x24,0x08,0xF7,0x64,0x24,0x14,0x03,0xD8,0x8B,0x44,0x24,0x08,0xF7,0xE1,0x03,0xD3,0x5B,0xC2,0x10,0x00
+		};
+
+		memcpy(OpBuffer+obp,Buffer_allmul,52);
+		obp+=52;
+	}
+	else if(lstrcmp(name,"_alldiv")==0){
+		//除算用の特殊関数（64ビット整数対応）
+		BYTE Buffer_alldiv[]={
+			0x57,0x56,0x53,0x33,0xFF,0x8B,0x44,0x24,0x14,0x0B,0xC0,0x7D,0x14,0x47,0x8B,0x54,0x24,0x10,0xF7,0xD8,0xF7,0xDA,0x83,0xD8,0x00,0x89,0x44,0x24,0x14,0x89,0x54,0x24,0x10,0x8B,0x44,0x24,0x1C,0x0B,0xC0,0x7D,0x14,0x47,0x8B,0x54,0x24,0x18,0xF7,0xD8,0xF7,0xDA,0x83,0xD8,0x00,0x89,0x44,0x24,0x1C,0x89,0x54,0x24,0x18,0x0B,0xC0,0x75,0x18,0x8B,0x4C,0x24,0x18,0x8B,0x44,0x24,0x14,0x33,0xD2,0xF7,0xF1,0x8B,0xD8,0x8B,0x44,0x24,0x10,0xF7,0xF1,0x8B,0xD3,0xEB,0x41,0x8B,0xD8,0x8B,0x4C,0x24,0x18,0x8B,0x54,0x24,0x14,0x8B,0x44,0x24,0x10,0xD1,0xEB,0xD1,0xD9,0xD1,0xEA,0xD1,0xD8,0x0B,0xDB,0x75,0xF4,0xF7,0xF1,0x8B,0xF0,0xF7,0x64,0x24,0x1C,0x8B,0xC8,0x8B,0x44,0x24,0x18,0xF7,0xE6,0x03,0xD1,0x72,0x0E,0x3B,0x54,0x24,0x14,0x77,0x08,0x72,0x07,0x3B,0x44,0x24,0x10,0x76,0x01,0x4E,0x33,0xD2,0x8B,0xC6,0x4F,0x75,0x07,0xF7,0xDA,0xF7,0xD8,0x83,0xDA,0x00,0x5B,0x5E,0x5F,0xC2,0x10,0x00
+		};
+
+		memcpy(OpBuffer+obp,Buffer_alldiv,170);
+		obp+=170;
+	}
+	else if(lstrcmp(name,"_allshl")==0){
+		//符号あり左ビットシフト用の特殊関数（64ビット整数対応）
+		BYTE Buffer_allshl[]={
+			0x80,0xF9,0x40,0x73,0x15,0x80,0xF9,0x20,0x73,0x06,0x0F,0xA5,0xC2,0xD3,0xE0,0xC3,0x8B,0xD0,0x33,0xC0,0x80,0xE1,0x1F,0xD3,0xE2,0xC3,0x33,0xC0,0x33,0xD2,0xC3
+		};
+
+		memcpy(OpBuffer+obp,Buffer_allshl,31);
+		obp+=31;
+	}
+	else if(lstrcmp(name,"_allshr")==0){
+		//符号あり右ビットシフト用の特殊関数（64ビット整数対応）
+		BYTE Buffer_allshr[]={
+			0x80,0xF9,0x40,0x73,0x16,0x80,0xF9,0x20,0x73,0x06,0x0F,0xAD,0xD0,0xD3,0xFA,0xC3,0x8B,0xC2,0xC1,0xFA,0x1F,0x80,0xE1,0x1F,0xD3,0xF8,0xC3,0xC1,0xFA,0x1F,0x8B,0xC2,0xC3
+		};
+
+		memcpy(OpBuffer+obp,Buffer_allshr,33);
+		obp+=33;
+	}
+	else if(lstrcmp(name,"_aullshr")==0){
+		//符号なし右ビットシフト用の特殊関数（64ビット整数対応）
+		BYTE Buffer_aullshr[]={
+			0x80,0xF9,0x40,         //cmp         cl,40h
+			0x73,0x15,              //jae         RETZERO (0040d71a)
+			0x80,0xF9,0x20,         //cmp         cl,20h
+			0x73,0x06,              //jae         MORE32 (0040d710)
+			0x0F,0xAD,0xD0,         //shrd        eax,edx,cl
+			0xD3,0xEA,              //shr         edx,cl
+			0xC3,                   //ret
+			//MORE32:
+			0x8B,0xC2,              //mov         eax,edx
+			0x33,0xD2,              //xor         edx,edx
+			0x80,0xE1,0x1F,         //and         cl,1Fh
+			0xD3,0xE8,              //shr         eax,cl
+			0xC3,                   //ret
+			//RETZERO:
+			0x33,0xC0,              //xor         eax,eax
+			0x33,0xD2,              //xor         edx,edx
+			0xC3                    //ret
+		};
+
+		memcpy(OpBuffer+obp,Buffer_aullshr,31);
+		obp+=31;
+	}
+}
+void CompileBufferInProcedure(SUBINFO *psi){
+	extern char *basbuf;
+	extern HANDLE hHeap;
+	extern SUBINFO **ppSubHash;
+	extern BOOL bDebugCompile;
+	int i3,i4,i5,VarSize,BufferSize;
+	char temporary[VN_SIZE];
+
+	BufferSize=128;
+
+	if(psi->bUse==0||psi->bCompile) return;
+
+
+	psi->bCompile=1;
+
+	extern BOOL bSystemProc;
+	if(memcmp(psi->name,"_System_",8)==0) bSystemProc=1;
+	else bSystemProc=0;
+
+	extern BOOL bDebugSupportProc;
+	if(memcmp(psi->name,"_DebugSys_",10)==0){
+		if(!bDebugCompile){
+			psi->pVar=(VARIABLE *)HeapAlloc(hHeap,0,1);
+			psi->VarNum=0;
+			return;
+		}
+		bDebugSupportProc=1;
+	}
+	else bDebugSupportProc=0;
+
+	psi->CompileAddress=obp;
+
+	if(psi->bSystem){
+		////////////////////
+		// 特殊関数
+		////////////////////
+
+		extern int MaxLocalVarNum;
+		extern int AllLocalVarSize;
+		MaxLocalVarNum=0;
+		AllLocalVarSize=0;
+
+		//スタックフレーム管理用オブジェクトを初期化
+		extern CStackFrame *pobj_sf;
+		pobj_sf=new CStackFrame();
+
+		SystemProc(psi->name);
+
+		//スタックフレーム管理用オブジェクトを破棄
+		delete pobj_sf;
+		pobj_sf=0;
+
+		psi->EndOpAddr=obp;
+		psi->pVar=(VARIABLE *)HeapAlloc(hHeap,0,1);
+		psi->VarNum=0;
+		return;
+	}
+
+	cp=psi->address;
+	for(;;cp++){
+		if(IsCommandDelimitation(basbuf[cp])) break;
+	}
+	cp--;
+
+	//プロシージャ抜け出しスケジュール（Exit Sub/Function）
+	extern DWORD *pExitSubSchedule;
+	extern int ExitSubScheduleNum;
+	pExitSubSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	ExitSubScheduleNum=0;
+
+	//ラベル用のメモリを確保
+	extern LABEL *pLabelNames;
+	extern int MaxLabelNum;
+	pLabelNames=(LABEL *)HeapAlloc(hHeap,0,1);
+	MaxLabelNum=0;
+
+	//Gotoラベルスケジュール
+	extern GOTOLABELSCHEDULE *pGotoLabelSchedule;
+	extern int GotoLabelScheduleNum;
+	pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapAlloc(hHeap,0,1);
+	GotoLabelScheduleNum=0;
+
+	//With情報のメモリを確保
+	extern WITHINFO WithInfo;
+	WithInfo.ppName=(char **)HeapAlloc(hHeap,0,1);
+	WithInfo.pWithCp=(int *)HeapAlloc(hHeap,0,1);
+	WithInfo.num=0;
+
+	//重複エラー情報管理のメモリを確保
+	extern char **SynonymErrorWords;
+	extern int SynonymErrorNum;
+	SynonymErrorNum=0;
+	SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
+
+	//Continueアドレスを初期化
+	extern DWORD dwContinueAddress;
+	dwContinueAddress=-1;
+
+	//ローカル変数に関する情報
+	extern VARIABLE *LocalVar;
+	extern int MaxLocalVarNum;
+	extern int AllLocalVarSize;
+	LocalVar=(VARIABLE *)HeapAlloc(hHeap,0,sizeof(VARIABLE));
+	MaxLocalVarNum=0;
+	AllLocalVarSize=0;
+
+	//ローカル変数アドレススケジュール
+	extern DWORD *pLocalVarAddrSchedule;
+	extern int LocalVarAddrScheduleNum;
+	pLocalVarAddrSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	LocalVarAddrScheduleNum=0;
+
+	//レキシカルスコープ情報を初期化
+	obj_LexScopes.Init(obp);
+
+
+	/////////////////////////////////////
+	// パラメータ用の変数データを考慮
+	/////////////////////////////////////
+
+	for(i3=psi->RealParmNum-1;i3>=0;i3--){
+		//変数データを追加
+		LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE));
+
+		lstrcpy(LocalVar[MaxLocalVarNum].name,psi->pRealParmInfo[i3].name);
+
+		LocalVar[MaxLocalVarNum].bArray=psi->pRealParmInfo[i3].bArray;
+		memcpy(LocalVar[MaxLocalVarNum].SubScripts,psi->pRealParmInfo[i3].SubScripts,MAX_ARRAYDIM*sizeof(int));
+
+		LocalVar[MaxLocalVarNum].type=psi->pRealParmInfo[i3].type;
+		if(LocalVar[MaxLocalVarNum].type==DEF_OBJECT){
+			if(psi->bExport)
+				SetError(24,NULL,cp);
+		}
+
+		LocalVar[MaxLocalVarNum].u.index=psi->pRealParmInfo[i3].u.index;
+
+		if(psi->pRealParmInfo[i3].bByVal&&psi->pRealParmInfo[i3].type==DEF_OBJECT){
+			//実態オブジェクトのByValパラメータ
+			LocalVar[MaxLocalVarNum].fRef=REF_PARAMETER | OBJECT_PARAMETER;
+			VarSize=PTR_SIZE;
+		}
+		else{
+			if(psi->pRealParmInfo[i3].bByVal&&psi->pRealParmInfo[i3].bArray==0){
+				LocalVar[MaxLocalVarNum].fRef=0;
+				VarSize=GetTypeSize(LocalVar[MaxLocalVarNum].type,LocalVar[MaxLocalVarNum].u.index);
+				if(VarSize%PTR_SIZE) VarSize+=PTR_SIZE-(VarSize%PTR_SIZE);
+			}
+			else{
+				LocalVar[MaxLocalVarNum].fRef=REF_PARAMETER;
+				VarSize=PTR_SIZE;
+			}
+		}
+		AllLocalVarSize+=VarSize;
+		LocalVar[MaxLocalVarNum].offset=AllLocalVarSize;
+
+		//レキシカルスコープ情報
+		LocalVar[MaxLocalVarNum].ScopeLevel=obj_LexScopes.GetNowLevel();
+		LocalVar[MaxLocalVarNum].ScopeStartAddress=obj_LexScopes.GetStartAddress();
+		LocalVar[MaxLocalVarNum].bLiving=TRUE;
+
+		MaxLocalVarNum++;
+	}
+
+	//Thisポインタを示すローカルオフセット値をセット
+	extern int LocalVar_ThisPtrOffset;
+	LocalVar_ThisPtrOffset=AllLocalVarSize;
+
+	//コンパイル中の関数が属するクラス
+	pobj_CompilingClass=psi->pobj_ParentClass;
+
+	//コンパイル中の関数
+	extern SUBINFO *pCompilingSubInfo;
+	pCompilingSubInfo=psi;
+
+	//スタックフレーム管理用クラスを初期化
+	extern CStackFrame *pobj_sf;
+	pobj_sf=new CStackFrame();
+
+
+	///////////////////////
+	// ここからコード生成
+
+	for(i3=psi->RealParmNum-1;i3>=0;i3--){
+		if(i3==3){
+			if(IsRealNumberType(psi->pRealParmInfo[i3].type)&&psi->pRealParmInfo[i3].bByVal){
+				//movsd qword ptr[rsp+0x20],xmm3
+				op_movsd_MR(REG_XMM3,REG_RSP,0x20,MOD_BASE_DISP32);
+			}
+			else{
+				//mov qword ptr[rsp+0x20],r9
+				op_mov_MR(sizeof(_int64),REG_R9,REG_RSP,0x20,MOD_BASE_DISP32);
+			}
+		}
+		if(i3==2){
+			if(IsRealNumberType(psi->pRealParmInfo[i3].type)&&psi->pRealParmInfo[i3].bByVal){
+				//movsd qword ptr[rsp+0x18],xmm2
+				op_movsd_MR(REG_XMM2,REG_RSP,0x18,MOD_BASE_DISP32);
+			}
+			else{
+				//mov qword ptr[rsp+0x18],r8
+				op_mov_MR(sizeof(_int64),REG_R8,REG_RSP,0x18,MOD_BASE_DISP32);
+			}
+		}
+		if(i3==1){
+			if(IsRealNumberType(psi->pRealParmInfo[i3].type)&&psi->pRealParmInfo[i3].bByVal){
+				//movsd qword ptr[rsp+0x10],xmm1
+				op_movsd_MR(REG_XMM1,REG_RSP,0x10,MOD_BASE_DISP32);
+			}
+			else{
+				//mov qword ptr[rsp+0x10],rdx
+				op_mov_MR(sizeof(_int64),REG_RDX,REG_RSP,0x10,MOD_BASE_DISP32);
+			}
+		}
+		if(i3==0){
+			if(IsRealNumberType(psi->pRealParmInfo[i3].type)&&psi->pRealParmInfo[i3].bByVal){
+				//movsd qword ptr[rsp+0x8],xmm0
+				op_movsd_MR(REG_XMM0,REG_RSP,0x8,MOD_BASE_DISP32);
+			}
+			else{
+				//mov qword ptr[rsp+0x8],rcx
+				op_mov_MR(sizeof(_int64),REG_RCX,REG_RSP,0x8,MOD_BASE_DISP32);
+			}
+		}
+	}
+
+	//ret用のアドレスを考慮
+	AllLocalVarSize+=sizeof(_int64);
+
+	//sub rsp,スタックフレームサイズ
+	int StackFrameSchedule;
+	op_sub_rsp(0xFFFFFFFF);
+	StackFrameSchedule=obp-sizeof(long);
+
+	//mov qword ptr[rsp+offset],reg     ※スタックフレームを利用
+	pobj_sf->push(REG_RBX);
+	pobj_sf->push(REG_RSI);
+	pobj_sf->push(REG_RDI);
+	pobj_sf->push(REG_R12);
+	pobj_sf->push(REG_R13);
+	pobj_sf->push(REG_R14);
+	pobj_sf->push(REG_R15);
+
+	//ローカル変数のベース値
+	int BaseLocalVar;
+	BaseLocalVar=AllLocalVarSize;
+
+	if(psi->ReturnType!=-1){
+		//戻り値が存在するとき
+
+		char *temp;
+		if(psi->name[0]==1&&psi->name[1]==ESC_OPERATOR) temp="_System_ReturnValue";
+		else temp=psi->name;
+
+		if(psi->ReturnType==DEF_OBJECT){
+			//戻り値用オブジェクトのコンストラクタを呼び出す
+			if(psi->u.Return_pobj_c->ConstructorMemberSubIndex!=-1){
+				sprintf(temporary,"%s.%s()",temp,psi->u.Return_pobj_c->name);
+				OpcodeOthers(temporary);
+			}
+		}
+		else{
+			//戻り値用の変数の定義
+			sprintf(temporary,"%s%c%c",temp,1,ESC_AS);
+			GetTypeName(psi->ReturnType,psi->u.ReturnIndex,temporary+lstrlen(temporary));
+			OpcodeDim(temporary,0);
+		}
+	}
+
+	int RspOffsetSchedule=0;
+	int RspOffsetSchedule2;
+	if(bDebugCompile&&bDebugSupportProc==0){
+		//mov rdx, qword ptr[rsp+スタックフレームサイズ]
+		op_mov_RM(sizeof(_int64),REG_RDX,REG_RSP,0,MOD_BASE_DISP32);
+		RspOffsetSchedule=obp-sizeof(long);
+
+		//mov rcx,rsp
+		op_mov64_ToReg_FromReg(REG_RCX,REG_RSP);
+
+		//add rcx,スタックフレームサイズ+sizeof(_int64) ※ret用のサイズを考慮
+		op_add64_value(REG_RCX,0);
+		RspOffsetSchedule2=obp-sizeof(long);
+
+		//call _DebugSys_StartProc
+		extern SUBINFO *pSub_DebugSys_StartProc;
+		op_call(pSub_DebugSys_StartProc);
+	}
+
+	if(pobj_CompilingClass){
+		if(lstrcmp(psi->name,pobj_CompilingClass->name)==0){
+			////////////////////////////////////
+			// コンストラクタをコンパイルするとき
+			////////////////////////////////////
+
+			//スーパークラスかどうかの識別
+			//（継承元がインターフェイスの場合もスーパークラスと見なす）
+			BOOL bThisIsSuperClass;
+			if(pobj_CompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1;
+			else if(pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex==-1){
+				//インターフェイスを継承したときはコンストラクタを持たない
+				bThisIsSuperClass=1;
+			}
+			else bThisIsSuperClass=0;
+
+			if(!bThisIsSuperClass){
+				/* サブクラスコンストラクタをコンパイルしているときは、
+					スーパークラスのコンストラクタを呼び出す */
+
+				i3=cp+1;
+				while(IsCommandDelimitation(basbuf[i3])) i3++;
+				for(i4=0;;i3++,i4++){
+					if(!IsVariableChar(basbuf[i3])){
+						temporary[i4]=0;
+						break;
+					}
+					temporary[i4]=basbuf[i3];
+				}
+				if(lstrcmp(temporary,
+					pobj_CompilingClass->pobj_InheritsClass->name)==0){
+					//スーパークラスのコンストラクタを呼び出す
+					cp=i3;
+					for(i4=0;;cp++,i4++){
+						if(IsCommandDelimitation(basbuf[cp])){
+							temporary[i4]=0;
+							break;
+						}
+						temporary[i4]=basbuf[cp];
+					}
+					if(!(temporary[0]=='('&&temporary[lstrlen(temporary)-1]==')')){
+						SetError(1,NULL,cp);
+					}
+					RemoveStringPare(temporary);
+
+					i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex;
+					Opcode_CallProc(temporary,
+						pobj_CompilingClass->ppobj_Method[i3]->psi,
+						0,
+						0,
+						"",
+						0);
+				}
+				else{
+					//スーパークラスのコンストラクタを暗黙的に呼び出す
+					i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex;
+					Opcode_CallProc("",
+						pobj_CompilingClass->ppobj_Method[i3]->psi,
+						0,
+						0,
+						"",
+						0);
+				}
+			}
+
+			//実体クラスを持つメンバのコンストラクタ（引数有りを除く）を呼び出す
+			int offset;
+			int MemberTypeSize;
+			int MemberObjectNum;
+			if(pobj_CompilingClass->vtbl_num) offset=PTR_SIZE;
+			else offset=0;
+			for(i3=0;i3<pobj_CompilingClass->iMemberNum;i3++){
+				MemberTypeSize=
+					GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
+						pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
+
+				MemberObjectNum=
+					JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
+
+				offset=GetSizeOfClassMember(pobj_CompilingClass,pobj_CompilingClass->ppobj_Member[i3]->name,NULL);
+
+				if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
+					if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex!=-1){
+						i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ConstructorMemberSubIndex;
+						if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi->RealParmNum==1){	//Thisポインタを第一引数に持ち合わせるため、引数なしの場合はこの値が1になる
+							for(i4=0;i4<MemberObjectNum;i4++){
+								//Thisポインタをrcxにコピー
+								SetThisPtrToReg(REG_RCX);
+
+								//add rcx,offset
+								op_add64_value(REG_RCX,offset+i4*MemberTypeSize);
+
+								//call constructor
+								op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
+							}
+						}
+					}
+				}
+			}
+
+			//仮想関数テーブルを初期化
+			if(pobj_CompilingClass->vtbl_num&&
+				pobj_CompilingClass->IsHoldAbstractFunction()==0){
+				//関数テーブルに値をセット
+				offset=(int)pobj_CompilingClass->GetVtblGlobalOffset();
+
+				//mov rax,offset
+				op_mov_RV(sizeof(_int64),REG_RAX,offset);
+				obp-=sizeof(long);
+				pobj_DataTableSchedule->add();
+				obp+=sizeof(long);
+
+				//Thisポインタをrcxにコピー
+				SetThisPtrToReg(REG_RCX);
+
+				//mov qword ptr[rcx],rax
+				op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
+			}
+		}
+	}
+
+	//コード生成中に関数の先頭領域にDimステートメントを再配置できるようにする
+	extern int DimStatementInsertPoint;
+	DimStatementInsertPoint=obp;
+
+	//////////////////////////////////////////
+	//////////////////////////////////////////
+	////// プロシージャ内をコンパイル ////////
+	if(psi->dwType==SUBTYPE_SUB) CompileBuffer(ESC_ENDSUB,0);
+	else if(psi->dwType==SUBTYPE_FUNCTION) CompileBuffer(ESC_ENDFUNCTION,0);
+	else if(psi->dwType==SUBTYPE_MACRO) CompileBuffer(ESC_ENDMACRO,0);
+	//////////////////////////////////////////
+	//////////////////////////////////////////
+
+	if(pobj_CompilingClass){
+		if(psi->name[0]=='~'){
+			////////////////////////////////////
+			//デストラクタをコンパイルしたとき
+			////////////////////////////////////
+
+			if(pobj_CompilingClass->pobj_InheritsClass){
+				/* サブクラスのデストラクタをコンパイルしているときは、
+					スーパークラスのデストラクタを呼び出す */
+
+				i3=pobj_CompilingClass->pobj_InheritsClass->DestructorMemberSubIndex;
+				if(i3!=-1){
+					Opcode_CallProc("",
+						pobj_CompilingClass->ppobj_Method[i3]->psi,
+						0,
+						0,
+						"",
+						0);
+				}
+			}
+
+			//実体クラスを持つメンバのデストラクタを呼び出す
+			//※コンストラクタと逆順序で呼び出す
+			int offset;
+			int MemberTypeSize;
+			int MemberObjectNum;
+			for(i3=pobj_CompilingClass->iMemberNum-1;i3>=0;i3--){
+				MemberTypeSize=
+					GetTypeSize(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type,
+						pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.lpIndex);
+
+				MemberObjectNum=
+					JumpSubScripts(pobj_CompilingClass->ppobj_Member[i3]->SubScripts);
+
+				offset=GetSizeOfClassMember(pobj_CompilingClass,pobj_CompilingClass->ppobj_Member[i3]->name,NULL);
+
+				if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.type==DEF_OBJECT){
+					if(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex!=-1){
+						for(i4=MemberObjectNum-1;i4>=0;i4--){
+							//Thisポインタをrcxにコピー
+							SetThisPtrToReg(REG_RCX);
+
+							//add rcx,offset
+							op_add64_value(REG_RCX,offset+i4*MemberTypeSize);
+
+							//call destructor
+							i5=pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->DestructorMemberSubIndex;
+							op_call(pobj_CompilingClass->ppobj_Member[i3]->TypeInfo.u.pobj_Class->ppobj_Method[i5]->psi);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	//プロシージャ抜け出しスケジュール（Exit Sub/Function）
+	for(i3=0;i3<ExitSubScheduleNum;i3++){
+		*((long *)(OpBuffer+pExitSubSchedule[i3]))=obp-(pExitSubSchedule[i3]+sizeof(long));
+	}
+	HeapDefaultFree(pExitSubSchedule);
+
+	if(bDebugCompile&&bDebugSupportProc==0){
+		//call _DebugSys_EndProc
+		extern SUBINFO *pSub_DebugSys_EndProc;
+		op_call(pSub_DebugSys_EndProc);
+	}
+
+	//ラベル用のメモリを解放
+	for(i3=0;i3<MaxLabelNum;i3++){
+		if(pLabelNames[i3].pName) HeapDefaultFree(pLabelNames[i3].pName);
+	}
+	HeapDefaultFree(pLabelNames);
+
+	//Goto未知ラベルスケジュールを解放
+	for(i3=0;i3<GotoLabelScheduleNum;i3++){
+		if(pGotoLabelSchedule[i3].pName){
+			SetError(6,pGotoLabelSchedule[i3].pName,pGotoLabelSchedule[i3].now_cp);
+			HeapDefaultFree(pGotoLabelSchedule[i3].pName);
+		}
+		else{
+			sprintf(temporary,"%d",pGotoLabelSchedule[i3].line);
+			SetError(6,temporary,pGotoLabelSchedule[i3].now_cp);
+		}
+	}
+	HeapDefaultFree(pGotoLabelSchedule);
+
+	//With情報のメモリを解放
+	for(i3=0;i3<WithInfo.num;i3++){
+		SetError(22,"With",WithInfo.pWithCp[i3]);
+		HeapDefaultFree(WithInfo.ppName[i3]);
+	}
+	HeapDefaultFree(WithInfo.ppName);
+	HeapDefaultFree(WithInfo.pWithCp);
+
+	//重複エラー情報管理のメモリを解放
+	for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]);
+	HeapDefaultFree(SynonymErrorWords);
+
+	//ローカルオブジェクト（レキシカルスコープレベル=0）の解放処理
+	CallDestrouctorsOfScope();
+
+	if(psi->ReturnType!=-1){
+		//////////////////////////////////
+		// 戻り値をraxまたはxmm0に設定
+		//////////////////////////////////
+
+		RELATIVE_VAR RelativeVar;
+		LONG_PTR lpIndex;
+
+		char *temp;
+		if(psi->name[0]==1&&psi->name[1]==ESC_OPERATOR)
+			temp="_System_ReturnValue";
+		else temp=psi->name;
+		GetVarOffset(1,temp,&i3,&RelativeVar,&lpIndex);
+
+		i3=psi->ReturnType;
+
+		if(i3==DEF_OBJECT){
+			SetVarPtrToReg(REG_RAX,&RelativeVar);
+		}
+		else if(i3==DEF_DOUBLE){
+			//64ビット実数型
+			SetXmmReg_DoubleVariable(&RelativeVar,REG_XMM0);
+		}
+		else if(i3==DEF_SINGLE){
+			//32ビット実数型
+			SetXmmReg_SingleVariable(&RelativeVar,REG_XMM0);
+		}
+		else if(IsWholeNumberType(i3)){
+			//整数型
+			SetReg_WholeVariable(i3,&RelativeVar,REG_RAX);
+		}
+		else SetError(300,NULL,cp);
+	}
+
+	//ローカル変数領域のサイズをスタックフレームに通知
+	int iLocalParmSize;
+	iLocalParmSize=AllLocalVarSize-BaseLocalVar;
+	pobj_sf->SetLocalParmSize(iLocalParmSize);
+
+	//ローカル変数アドレススケジュール
+	for(i3=0;i3<LocalVarAddrScheduleNum;i3++){
+		*((long *)(OpBuffer+pLocalVarAddrSchedule[i3]))+=AllLocalVarSize+pobj_sf->GetFrameSize();
+	}
+	HeapDefaultFree(pLocalVarAddrSchedule);
+	for(i3=0;i3<MaxLocalVarNum;i3++){
+		//後にデバッグで利用する
+		LocalVar[i3].offset=AllLocalVarSize+pobj_sf->GetFrameSize()-LocalVar[i3].offset;
+	}
+
+	//mov reg,qword ptr[rsp+offset]     ※スタックフレームを利用
+	pobj_sf->pop(REG_R15);
+	pobj_sf->pop(REG_R14);
+	pobj_sf->pop(REG_R13);
+	pobj_sf->pop(REG_R12);
+	pobj_sf->pop(REG_RDI);
+	pobj_sf->pop(REG_RSI);
+	pobj_sf->pop(REG_RBX);
+
+	int iStackFrameSize;
+	iStackFrameSize=iLocalParmSize + pobj_sf->GetFrameSize();
+
+	//add rsp,スタックフレームサイズ
+	op_add_rsp(iStackFrameSize);
+
+	//ret 0
+	OpBuffer[obp++]=(char)0xC3;
+
+
+	//デバッグ用
+	if(RspOffsetSchedule){
+		*((long *)(OpBuffer+RspOffsetSchedule))=iStackFrameSize;
+		*((long *)(OpBuffer+RspOffsetSchedule2))=iStackFrameSize+sizeof(_int64);
+	}
+
+
+	//スタックフレームスケジュール（subコマンド）
+	*((long *)(OpBuffer+StackFrameSchedule))=iStackFrameSize;
+
+	//スタックフレームスケジュールを実行
+	pobj_sf->RunningSchedule();
+	delete pobj_sf;
+	pobj_sf=0;
+
+
+	psi->EndOpAddr=obp;
+	psi->pVar=LocalVar;
+	psi->VarNum=MaxLocalVarNum;
+
+	//ローカル変数のネーム情報は後に解放する
+}
+void CompileLocal(){
+	extern SUBINFO **ppSubHash;
+	int i2;
+	SUBINFO *psi;
+
+	extern BOOL bDll;
+	if(bDll){
+		//DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする
+		psi=GetSubHash("_System_InitDllGlobalVariables");
+		if(psi){
+			CompileBufferInProcedure(psi);
+		}
+		else SetError(300,NULL,cp);
+	}
+
+	//_System_InitStaticLocalVariablesは一番最後にコンパイル
+	//※一般関数内の静的変数オブジェクトをすべて収集しなければならない
+	extern SUBINFO *pSub_System_InitStaticLocalVariables;
+	pSub_System_InitStaticLocalVariables->bCompile=1;
+
+	//_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
+	extern SUBINFO *pSub_System_Call_Destructor_of_GlobalObject;
+	pSub_System_Call_Destructor_of_GlobalObject->bCompile=1;
+
+Repeat:
+	for(i2=0;i2<MAX_HASH;i2++){
+		psi=ppSubHash[i2];
+		while(psi){
+			CompileBufferInProcedure(psi);
+			psi=psi->pNextData;
+		}
+	}
+
+	//プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合
+	for(i2=0;i2<MAX_HASH;i2++){
+		psi=ppSubHash[i2];
+		while(psi){
+			if(psi->bUse&&psi->bCompile==0&&psi->bVirtual==0){
+				goto Repeat;
+			}
+
+			psi=psi->pNextData;
+		}
+	}
+
+	//_System_InitStaticLocalVariablesは一番最後にコンパイル
+	pSub_System_InitStaticLocalVariables->bCompile=0;
+	CompileBufferInProcedure(pSub_System_InitStaticLocalVariables);
+
+	//_System_Call_Destructor_of_GlobalObjectは一番最後にコンパイル
+	pSub_System_Call_Destructor_of_GlobalObject->bCompile=0;
+	CompileBufferInProcedure(pSub_System_Call_Destructor_of_GlobalObject);
+}
Index: /BasicCompiler64/Compile_Set_Var.cpp
===================================================================
--- /BasicCompiler64/Compile_Set_Var.cpp	(revision 3)
+++ /BasicCompiler64/Compile_Set_Var.cpp	(revision 3)
@@ -0,0 +1,386 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+BOOL IsUse_r11(RELATIVE_VAR *pRelativeVar){
+	if(pRelativeVar->bOffsetOffset||pRelativeVar->dwKind==VAR_DIRECTMEM) return 1;
+	return 0;
+}
+
+void SetObjectVariableFromRax(LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,RELATIVE_VAR *pRelativeVar,BOOL bUseHeap){
+	int RightTermReg;
+	pobj_reg=new CRegister(REG_RCX);
+
+	//VarRegにオブジェクトポインタをコピー
+	int VarReg;
+	VarReg=pobj_reg->LockReg();
+	SetVarPtrToReg(VarReg,pRelativeVar);
+
+	//右辺
+	if(IsRealNumberType(CalcType)){
+		RightTermReg=pobj_reg->LockXmmReg();
+
+		if(CalcType==DEF_DOUBLE){
+			//movlsd RightTermReg,xmm0
+			op_movsd_RR(RightTermReg,REG_XMM0);
+		}
+		else if(CalcType==DEF_SINGLE){
+			//movlss RightTermReg,xmm0
+			op_movss_RR(RightTermReg,REG_XMM0);
+		}
+	}
+	else{
+		RightTermReg=pobj_reg->LockReg();
+
+		//mov RightTermReg,rax
+		op_mov_RR(RightTermReg,REG_RAX);
+	}
+
+
+	///////////////////////////////////////////////////////////////////
+	// オペレータ '=' のオーバーロード関数を呼ぶ
+	///////////////////////////////////////////////////////////////////
+
+	int type[10];
+	LONG_PTR index_stack[10];
+	BOOL array_bUseHeap[10];
+	int sp=2;
+
+	//左辺
+	type[0]=DEF_OBJECT;
+	index_stack[0]=lpVarIndex;
+	array_bUseHeap[0]=0;
+
+	//右辺
+	type[1]=CalcType;
+	index_stack[1]=lpCalcIndex;
+	array_bUseHeap[1]=bUseHeap;
+
+
+	int iRet;
+	iRet=CallOperatorProc(CALC_SUBSITUATION,NULL,type,index_stack,array_bUseHeap,sp);
+
+	//右辺用レジスタを解除
+	if(IsRealNumberType(CalcType)) pobj_reg->UnlockXmmReg();
+	else pobj_reg->UnlockReg();
+
+	//左辺用レジスタを解除
+	pobj_reg->UnlockReg();
+
+	//レジスタ管理オブジェクトを破棄
+	delete pobj_reg;
+	pobj_reg=0;
+
+	if(iRet==-1||iRet==1){
+		//成功したとき、またはエラーが発行されたとき
+		return;
+	}
+
+
+
+	if(CalcType==DEF_OBJECT&&lpVarIndex==lpCalcIndex){
+		//双方のオブジェクト型が完全に一致したとき
+		//※コピーを行う
+
+		//mov rsi,RightTermReg
+		op_mov_RR(REG_RSI,RightTermReg);
+
+		//mov rdi,VarReg
+		op_mov_RR(REG_RDI,VarReg);
+
+		int object_size;
+		object_size=GetSizeOfClass((CClass *)lpVarIndex);
+
+		//mov rcx,object_size
+		op_mov_RV(sizeof(_int64),REG_RCX,object_size);
+
+		if(bUseHeap){
+			//mov rax,rsi
+			op_mov_RR(REG_RAX,REG_RSI);
+		}
+
+		//rep movs byte ptr[rdi],byte ptr[rsi]
+		op_rep_movs(sizeof(BYTE));
+
+		if(bUseHeap){
+			//mov rcx,rax
+			op_mov_RR(REG_RCX,REG_RAX);
+
+			//call free
+			extern SUBINFO *pSub_free;
+			op_call(pSub_free);
+		}
+
+		return;
+	}
+	else{
+		SetError(1,NULL,cp);
+	}
+}
+
+void SetDoubleVariable(int type,RELATIVE_VAR *pRelative){
+	//////////////////////////
+	// Double型変数に書き込む
+	//////////////////////////
+
+	//xmm0に型変換
+	ChangeTypeToXmm_Double(type,REG_XMM0,REG_RAX);
+
+	if(pRelative->dwKind==VAR_GLOBAL){
+		if(pRelative->bOffsetOffset){
+			//movsd qword ptr[r11+offset],xmm0
+			OpBuffer[obp++]=(char)0xF2;
+			OpBuffer[obp++]=(char)0x41;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x11;
+			OpBuffer[obp++]=(char)0x83;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//movsd qword ptr[offset],xmm0
+			OpBuffer[obp++]=(char)0xF2;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x11;
+			OpBuffer[obp++]=(char)0x04;
+			OpBuffer[obp++]=(char)0x25;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_LOCAL){
+		if(pRelative->bOffsetOffset){
+			//movsd qword ptr[rsp+r11+offset],xmm0
+			OpBuffer[obp++]=(char)0xF2;
+			OpBuffer[obp++]=(char)0x42;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x11;
+			OpBuffer[obp++]=(char)0x84;
+			OpBuffer[obp++]=(char)0x1C;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//movsd qword ptr[rsp+offset],xmm0
+			OpBuffer[obp++]=(char)0xF2;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x11;
+			OpBuffer[obp++]=(char)0x84;
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_REFLOCAL){
+		if(pRelative->bOffsetOffset){
+			//add r11,qword ptr[rsp+offset]
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x9C;
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov r11,qword ptr[rsp+offset]
+			op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelative->dwKind==VAR_DIRECTMEM){
+directmem:
+		//movsd qword ptr[r11],xmm0
+		OpBuffer[obp++]=(char)0xF2;
+		OpBuffer[obp++]=(char)0x41;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x11;
+		OpBuffer[obp++]=(char)0x03;
+	}
+}
+void SetSingleVariable(int type,RELATIVE_VAR *pRelative){
+	//////////////////////////
+	// Single型変数に書き込む
+	//////////////////////////
+
+	//xmm0に型変換
+	ChangeTypeToXmm_Single(type,REG_XMM0,REG_RAX);
+
+	if(pRelative->dwKind==VAR_GLOBAL){
+		if(pRelative->bOffsetOffset){
+			//movss dword ptr[r11+offset],xmm0
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x41;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x11;
+			OpBuffer[obp++]=(char)0x83;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//movss dword ptr[offset],xmm0
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x11;
+			OpBuffer[obp++]=(char)0x04;
+			OpBuffer[obp++]=(char)0x25;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_LOCAL){
+		if(pRelative->bOffsetOffset){
+			//movss dword ptr[rsp+r11+offset],xmm0
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x42;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x11;
+			OpBuffer[obp++]=(char)0x84;
+			OpBuffer[obp++]=(char)0x1C;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//movss dword ptr[rsp+offset],xmm0
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x11;
+			OpBuffer[obp++]=(char)0x84;
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_REFLOCAL){
+		if(pRelative->bOffsetOffset){
+			//add r11,qword ptr[rsp+offset]
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x9C;
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov r11,qword ptr[rsp+offset]
+			op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelative->dwKind==VAR_DIRECTMEM){
+directmem:
+		//movss dword ptr[r11],xmm0
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0x41;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x11;
+		OpBuffer[obp++]=(char)0x03;
+	}
+}
+void SetWholeVariable(int var_size,int type,RELATIVE_VAR *pRelative){
+	if(type==DEF_DOUBLE){
+		//Double型
+
+		//cvttsd2si rax,xmm0
+		op_cvttsd2si_xmm(sizeof(_int64),REG_RAX,REG_XMM0);
+	}
+	else if(type==DEF_SINGLE){
+		//Single型
+
+		//cvttss2si rax,xmm0
+		op_cvttss2si_xmm(sizeof(_int64),REG_RAX,REG_XMM0);
+	}
+	else{
+		//その他の整数
+
+		if(var_size==sizeof(_int64)){
+			//レジスタの値を64ビット（rax）に拡張する
+			ExtendTypeTo64(type,REG_RAX);
+		}
+		else if(var_size==sizeof(long)){
+			//レジスタの値を32ビット（eax）に拡張する
+			ExtendTypeTo32(type,REG_RAX);
+		}
+		else if(var_size==sizeof(short)){
+			//レジスタの値を16ビット（ax）に拡張する
+			ExtendTypeTo16(type,REG_RAX);
+		}
+		//8ビットは拡張なし
+	}
+
+	if(pRelative->dwKind==VAR_GLOBAL){
+		if(pRelative->bOffsetOffset){
+			//mov ptr[r11+offset],rax/eax/ax/al
+			op_mov_MR(var_size,REG_RAX,REG_R11,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ptr[offset],rax/eax/ax/al
+			op_mov_MR(var_size,REG_RAX,0,(int)pRelative->offset,MOD_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_LOCAL){
+		if(pRelative->bOffsetOffset){
+			//mov ptr[rsp+r11+offset],rax/eax/ax/al
+			op_mov_MR_ex(var_size,REG_RAX,REG_RSP,REG_R11,(int)pRelative->offset,USE_OFFSET);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov ptr[rsp+offset],rax/eax/ax/al
+			op_mov_MR(var_size,REG_RAX,REG_RSP,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelative->dwKind==VAR_REFLOCAL){
+		if(pRelative->bOffsetOffset){
+			//add r11,qword ptr[rsp+offset]
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x9C;
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelative->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov r11,qword ptr[rsp+offset]
+			op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelative->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelative->dwKind==VAR_DIRECTMEM){
+directmem:
+
+		//mov ptr[r11],rax/eax/ax/al
+		op_mov_MR(var_size,REG_RAX,REG_R11,0,MOD_BASE);
+	}
+}
Index: /BasicCompiler64/Compile_Statement.cpp
===================================================================
--- /BasicCompiler64/Compile_Statement.cpp	(revision 3)
+++ /BasicCompiler64/Compile_Statement.cpp	(revision 3)
@@ -0,0 +1,1487 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void OpcodeOthers(char *Command){
+	int i,i2;
+	char buffer[8192];
+	SUBINFO *psi;
+
+	for(i=0;;i++){
+		if(Command[i]=='['){
+			i2=GetStringInBracket(buffer+i,Command+i);
+			i+=i2-1;
+			continue;
+		}
+		if(Command[i]==1&&Command[i+1]==ESC_PSMEM){
+			buffer[i]=Command[i];
+			i++;
+			buffer[i]=Command[i];
+			continue;
+		}
+		if(!IsVariableChar(Command[i])){
+			buffer[i]=0;
+			break;
+		}
+		buffer[i]=Command[i];
+	}
+
+	if(!(
+		IsVariableTopChar(buffer[0])||
+		buffer[0]=='.'||
+		(buffer[0]==1&&buffer[1]==ESC_PSMEM)
+		)){
+		SetError(1,NULL,cp);
+		return;
+	}
+
+
+	if(Command[i]=='\0'){
+		//////////////////////////////
+		// パラメータ無しのマクロ検索
+		//////////////////////////////
+
+		psi=GetSubHash(Command);
+
+		//GetSubHash内でエラー提示が行われた場合
+		if(psi==(SUBINFO *)-1) return;
+
+		if(psi==0){
+			char temporary[VN_SIZE];
+			lstrcpy(temporary,Command);
+
+			CharUpper(temporary);
+			psi=GetSubHash(temporary);
+
+			//GetSubHash内でエラー提示が行われた場合
+			if(psi==(SUBINFO *)-1) return;
+		}
+
+		if(psi){
+			if(psi->dwType!=SUBTYPE_MACRO) SetError(10,Command,cp);
+
+			Opcode_CallProc("",psi,0,0,"",0);
+
+			return;
+		}
+	}
+	else if(IsNumCalcMark(Command,i)){
+		//代入演算
+		OpcodeCalc(Command);
+		return;
+	}
+
+
+	int idProc;
+	void *pInfo;
+	idProc=GetProc(buffer,&pInfo);
+
+	int i4;
+	char temp2[VN_SIZE];
+	if(idProc){
+		if(Command[i]!='('){
+			SetError(10,buffer,cp);
+			return;
+		}
+		i4=GetStringInPare_RemovePare(temp2,Command+i+1);
+
+		//閉じカッコ")"に続く文字がNULLでないときはエラーにする
+		if(Command[i+1+i4+1]!='\0') SetError(42,NULL,cp);
+
+		////////////////
+		// 呼び出し
+		////////////////
+
+		LONG_PTR lp;
+		i2=CallProc(idProc,pInfo,buffer,temp2,&lp);
+
+
+		/////////////////////
+		// 戻り値の処理
+		/////////////////////
+
+		if(i2==DEF_OBJECT){
+			CClass *pobj_Class;
+			pobj_Class=(CClass *)lp;
+
+			//mov r14,rax
+			op_mov_RR(REG_R14,REG_RAX);
+
+			FreeTempObject(REG_R14,pobj_Class);
+		}
+		return;
+	}
+
+
+	//////////////////////////
+	// その他は代入演算を行う
+	//////////////////////////
+	OpcodeCalc(Command);
+}
+
+void Judgment(char *buffer){
+	int reg=REG_RAX,type;
+	type=NumOpe(&reg,buffer,0,0,0);
+
+	int offset;
+
+	if(type==DEF_DOUBLE){
+		double dbl=0;
+		offset=AddDataTable((char *)&dbl,sizeof(double));
+
+		//comisd xmm0,qword ptr[data table offset]
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x2F;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=offset;
+		pobj_DataTableSchedule->add();
+		obp+=sizeof(long);
+	}
+	else if(type==DEF_SINGLE){
+		float flt=0;
+		offset=AddDataTable((char *)&flt,sizeof(float));
+
+		//comiss xmm0,dword ptr[data table offset]
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x2F;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=offset;
+		pobj_DataTableSchedule->add();
+		obp+=sizeof(long);
+	}
+	else{
+		//整数型
+
+		//cmp rax,0
+		op_cmp_value(GetTypeSize(type,-1),REG_RAX,0);
+	}
+}
+
+void OpcodeIf(char *Parameter){
+	int i,i2,i3;
+
+	for(i=0;;i++){
+		if(Parameter[i]=='\0'){
+			SetError(21,NULL,cp);
+			return;
+		}
+		if(Parameter[i]==1&&Parameter[i+1]==ESC_THEN){
+			Parameter[i]=0;
+			break;
+		}
+	}
+
+	//条件式を実行してフラグをセット
+	Judgment(Parameter);
+
+	//je (endif、または else まで条件ジャンプ)
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x84;
+	obp+=sizeof(long);
+
+	//jeの番地
+	i3=obp;
+
+
+	/////////////////////////
+	// If内をコード化
+	/////////////////////////
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	i2=CompileBuffer(ESC_ENDIF,0);
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+
+	extern char *basbuf;
+	if(i2==ESC_ELSE){
+		//jmp (endifまで)
+		OpBuffer[obp++]=(char)0xE9;
+		obp+=sizeof(long);
+
+		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//ifからelseへのジャンプ先のオフセット値
+
+		i3=obp;
+
+
+		/////////////////////////
+		// Else内をコード化
+		/////////////////////////
+
+		//レキシカルスコープをレベルアップ
+		obj_LexScopes.LevelUp(obp);
+
+		CompileBuffer(ESC_ENDIF,0);
+
+		//レキシカルスコープをレベルダウン
+		obj_LexScopes.LevelDown();
+
+
+		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//jmpジャンプ先のオフセット値
+	}
+	else{
+		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//jeジャンプ先のオフセット値
+	}
+}
+
+int GetLabelAddress(char *LabelName,int LineNum){
+	extern int MaxLabelNum;
+	extern LABEL *pLabelNames;
+	int i;
+
+	if(LabelName){
+		for(i=0;i<MaxLabelNum;i++){
+			if(pLabelNames[i].pName){
+				if(lstrcmp(LabelName,pLabelNames[i].pName)==0) return pLabelNames[i].address;
+			}
+		}
+	}
+	else{
+		for(i=0;i<MaxLabelNum;i++){
+			if(pLabelNames[i].pName==0){
+				if(LineNum==pLabelNames[i].line) return pLabelNames[i].address;
+			}
+		}
+	}
+	return -1;
+}
+void OpcodeGoto(char *Parameter){
+	extern HANDLE hHeap;
+	extern GOTOLABELSCHEDULE *pGotoLabelSchedule;
+	extern int GotoLabelScheduleNum;
+	int i,LineNum;
+
+	if(Parameter[0]=='*'){
+		i=GetLabelAddress(Parameter+1,0);
+
+		//jmp ...
+		OpBuffer[obp++]=(char)0xE9;
+		if(i==-1){
+			pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapReAlloc(hHeap,0,pGotoLabelSchedule,(GotoLabelScheduleNum+1)*sizeof(GOTOLABELSCHEDULE));
+			pGotoLabelSchedule[GotoLabelScheduleNum].pName=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter+1)+1);
+			lstrcpy(pGotoLabelSchedule[GotoLabelScheduleNum].pName,Parameter+1);
+			pGotoLabelSchedule[GotoLabelScheduleNum].pos=obp;
+			pGotoLabelSchedule[GotoLabelScheduleNum].now_cp=cp;
+			GotoLabelScheduleNum++;
+		}
+		*((long *)(OpBuffer+obp))=i-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+	else{
+		LineNum=atoi(Parameter);
+		i=GetLabelAddress(0,LineNum);
+
+		//jmp ...
+		OpBuffer[obp++]=(char)0xE9;
+		if(i==-1){
+			pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapReAlloc(hHeap,0,pGotoLabelSchedule,(GotoLabelScheduleNum+1)*sizeof(GOTOLABELSCHEDULE));
+			pGotoLabelSchedule[GotoLabelScheduleNum].pName=0;
+			pGotoLabelSchedule[GotoLabelScheduleNum].line=LineNum;
+			pGotoLabelSchedule[GotoLabelScheduleNum].pos=obp;
+			pGotoLabelSchedule[GotoLabelScheduleNum].now_cp=cp;
+			GotoLabelScheduleNum++;
+		}
+		*((long *)(OpBuffer+obp))=i-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+}
+void OpcodeWhile(char *Parameter){
+	extern DWORD *pExitWhileSchedule;
+	extern int ExitWhileScheduleNum;
+	extern HANDLE hHeap;
+	int i2;
+	DWORD *lpdwTemp;
+	int TempNum;
+
+	//Continueアドレスのバックアップとセット
+	extern DWORD dwContinueAddress;
+	DWORD dwTempContinue;
+	dwTempContinue=dwContinueAddress;
+	dwContinueAddress=obp;
+	pobj_TempSchedule->lock((int *)&dwTempContinue);
+	pobj_TempSchedule->lock((int *)&dwContinueAddress);
+
+	if(!Parameter[0]) SetError(10,"While",cp);
+
+	//条件式を実行してフラグをセット
+	Judgment(Parameter);
+
+	//je (Wend まで)
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x84;
+	obp+=sizeof(long);
+
+	//実行中の番地
+	int je_schedule=obp;
+	pobj_TempSchedule->lock(&je_schedule);
+
+	//ExitWhileスケジュールの準備
+	lpdwTemp=pExitWhileSchedule;
+	TempNum=ExitWhileScheduleNum;
+	pExitWhileSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	ExitWhileScheduleNum=0;
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	//While内をコンパイル
+	CompileBuffer(0,COM_WEND);
+
+	CallDestrouctorsOfScope();
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
+	obp+=sizeof(long);
+	pobj_TempSchedule->unlock();
+	pobj_TempSchedule->unlock();
+
+	//ExitWhileスケジュール
+	for(i2=0;i2<ExitWhileScheduleNum;i2++){
+		*((long *)(OpBuffer+pExitWhileSchedule[i2]))=obp-(pExitWhileSchedule[i2]+sizeof(long));
+	}
+	HeapDefaultFree(pExitWhileSchedule);
+	pExitWhileSchedule=lpdwTemp;
+	ExitWhileScheduleNum=TempNum;
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+	*((long *)(OpBuffer+je_schedule-sizeof(long)))=obp-je_schedule;	//jeジャンプ先のオフセット値
+	pobj_TempSchedule->unlock();
+
+	//Continueアドレスを復元
+	dwContinueAddress=dwTempContinue;
+}
+void OpcodeExitWhile(void){
+	extern DWORD *pExitWhileSchedule;
+	extern int ExitWhileScheduleNum;
+	extern HANDLE hHeap;
+
+	if(!pExitWhileSchedule){
+		SetError(12,"Exit While",cp);
+		return;
+	}
+
+	//jmp ...(Wend addr)
+	OpBuffer[obp++]=(char)0xE9;
+
+	pExitWhileSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitWhileSchedule,(ExitWhileScheduleNum+1)*sizeof(DWORD));
+	pExitWhileSchedule[ExitWhileScheduleNum]=obp;
+	ExitWhileScheduleNum++;
+
+	obp+=sizeof(long);
+}
+char szNextVariable[VN_SIZE];
+void OpcodeFor(char *Parameter){
+	extern DWORD *pExitForSchedule;
+	extern int ExitForScheduleNum;
+	extern HANDLE hHeap;
+	DWORD *lpdwTemp;
+	int TempNum;
+	int i,i2,i3;
+	char temporary[VN_SIZE],variable[VN_SIZE],JudgeNum[VN_SIZE],StepNum[VN_SIZE];
+
+	//第１パラメータを取得
+	i=GetOneParameter(Parameter,0,temporary);
+	if(!Parameter[i]){
+		SetError(12,"For",cp);
+		goto ErrorStep;
+	}
+
+	for(i2=0;;i2++){
+		if(temporary[i2]=='='){
+			variable[i2]=0;
+
+			//カウンタ初期化
+			OpcodeCalc(temporary);
+			break;
+		}
+		if(temporary[i2]=='\0'){
+			SetError(12,"For",cp);
+			goto ErrorStep;
+		}
+		variable[i2]=temporary[i2];
+	}
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	i2=obp;
+	obp+=sizeof(long);
+
+	//Continueアドレスのバックアップとセット
+	extern DWORD dwContinueAddress;
+	DWORD dwTempContinue;
+	dwTempContinue=dwContinueAddress;
+	dwContinueAddress=obp;
+	pobj_TempSchedule->lock((int *)&dwTempContinue);
+	pobj_TempSchedule->lock((int *)&dwContinueAddress);
+
+	//第２パラメータを取得（to～）
+	i=GetOneParameter(Parameter,i,JudgeNum);
+
+	//第３パラメータを取得（step～）
+	if(Parameter[i]){
+		i=GetOneParameter(Parameter,i,StepNum);
+		if(Parameter[i]) SetError(12,"For",cp);
+	}
+	else lstrcpy(StepNum,"1");
+
+	//カウンタを増加させる
+	sprintf(temporary,"%s=(%s)+(%s)",variable,variable,StepNum);
+	OpcodeCalc(temporary);
+
+	*((long *)(OpBuffer+i2))=obp-(i2+sizeof(long));
+
+	//増加か減少かを区別する
+	sprintf(temporary,"(%s)>=0",StepNum);
+
+	int reg,type;
+	reg=REG_RAX;
+	type=NumOpe(&reg,temporary,0,0,0);
+
+	//cmp rax,0
+	op_cmp_value(GetTypeSize(type,-1),REG_RAX,0);
+
+	//je [カウンタ減少の場合の判定]
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x84;
+	i2=obp;
+	obp+=sizeof(long);
+
+	//判定（カウンタ増加の場合）
+	sprintf(temporary,"%s<=(%s)",variable,JudgeNum);
+
+	reg=REG_RAX;
+	type=NumOpe(&reg,temporary,0,0,0);
+
+	//jmp [カウンタ減少の場合の判定を飛び越す]
+	OpBuffer[obp++]=(char)0xE9;
+	i3=obp;
+	obp+=sizeof(long);
+
+	*((long *)(OpBuffer+i2))=obp-(i2+sizeof(long)); //jeジャンプ先のオフセット値
+
+	//判定（カウンタ減少の場合）
+	sprintf(temporary,"%s>=(%s)",variable,JudgeNum);
+
+	reg=REG_RAX;
+	type=NumOpe(&reg,temporary,0,0,0);
+
+	*((long *)(OpBuffer+i3))=obp-(i3+sizeof(long)); //jmpジャンプ先のオフセット値
+
+	//cmp rax,0
+	op_cmp_value(GetTypeSize(type,-1),REG_RAX,0);
+
+ErrorStep:
+
+	//je ...
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x84;
+	int je_schedule=obp;
+	obp+=sizeof(long);
+	pobj_TempSchedule->lock(&je_schedule);
+
+	//ExitForスケジュールの準備
+	lpdwTemp=pExitForSchedule;
+	TempNum=ExitForScheduleNum;
+	pExitForSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	ExitForScheduleNum=0;
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	//For内をコンパイル
+	CompileBuffer(0,COM_NEXT);
+
+	CallDestrouctorsOfScope();
+
+	if(szNextVariable[0]){
+		if(lstrcmp(szNextVariable,variable)!=0){
+			SetError(55,szNextVariable,cp);
+		}
+	}
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
+	obp+=sizeof(long);
+	pobj_TempSchedule->unlock();
+	pobj_TempSchedule->unlock();
+
+	//ExitForスケジュール
+	for(i=0;i<ExitForScheduleNum;i++){
+		*((long *)(OpBuffer+pExitForSchedule[i]))=obp-(pExitForSchedule[i]+sizeof(long));
+	}
+	HeapDefaultFree(pExitForSchedule);
+	pExitForSchedule=lpdwTemp;
+	ExitForScheduleNum=TempNum;
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+	*((long *)(OpBuffer+je_schedule))=obp-(je_schedule+sizeof(long)); //jeジャンプ先のオフセット値
+	pobj_TempSchedule->unlock();
+
+	//Continueアドレスを復元
+	dwContinueAddress=dwTempContinue;
+}
+void OpcodeExitFor(void){
+	extern DWORD *pExitForSchedule;
+	extern int ExitForScheduleNum;
+	extern HANDLE hHeap;
+
+	if(!pExitForSchedule){
+		SetError(12,"Exit For",cp);
+		return;
+	}
+
+	//jmp ...(Next addr)
+	OpBuffer[obp++]=(char)0xE9;
+
+	pExitForSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitForSchedule,(ExitForScheduleNum+1)*sizeof(DWORD));
+	pExitForSchedule[ExitForScheduleNum]=obp;
+	ExitForScheduleNum++;
+
+	obp+=sizeof(long);
+}
+
+void OpcodeDo(char *Parameter){
+	extern DWORD *pExitDoSchedule;
+	extern int ExitDoScheduleNum;
+	extern HANDLE hHeap;
+	int i,i2,i3;
+	DWORD *lpdwTemp;
+	int TempNum;
+
+	if(Parameter[0]) SetError(10,"Do",cp);
+
+	//ExitDoスケジュールの準備
+	lpdwTemp=pExitDoSchedule;
+	TempNum=ExitDoScheduleNum;
+	pExitDoSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	ExitDoScheduleNum=0;
+
+	//Continueアドレスのバックアップとセット
+	extern DWORD dwContinueAddress;
+	DWORD dwTempContinue;
+	dwTempContinue=dwContinueAddress;
+	dwContinueAddress=obp;
+	pobj_TempSchedule->lock((int *)&dwTempContinue);
+	pobj_TempSchedule->lock((int *)&dwContinueAddress);
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	//Do内をコンパイル
+	CompileBuffer(0,COM_LOOP);
+
+	CallDestrouctorsOfScope();
+
+	extern char *basbuf;
+	char temporary[VN_SIZE];
+	for(i=cp-1;;i--){
+		if(IsCommandDelimitation(basbuf[i])){
+			i+=3;
+			if(!(basbuf[i]=='0'||basbuf[i]=='1')){
+				//無条件ループ
+				break;
+			}
+			i3=i;
+
+			for(i+=2,i2=0;;i++,i2++){
+				if(IsCommandDelimitation(basbuf[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=basbuf[i];
+			}
+
+			//条件式を実行してフラグをセット
+			Judgment(temporary);
+
+			if(basbuf[i3]=='0'){
+				//While
+
+				//je 5（ループ終了）
+				OpBuffer[obp++]=(char)0x74;
+				OpBuffer[obp++]=(char)0x05;
+			}
+			else if(basbuf[i3]=='1'){
+				//Until
+
+				//jne 5（ループ終了）
+				OpBuffer[obp++]=(char)0x75;
+				OpBuffer[obp++]=(char)0x05;
+			}
+			break;
+		}
+	}
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
+	obp+=sizeof(long);
+	pobj_TempSchedule->unlock();
+	pobj_TempSchedule->unlock();
+
+	//jmp ...
+	OpBuffer[obp++]=(char)0xE9;
+	int je_schedule=obp;
+	obp+=sizeof(long);
+	pobj_TempSchedule->lock(&je_schedule);
+
+	//ExitDoスケジュール
+	for(i=0;i<ExitDoScheduleNum;i++){
+		*((long *)(OpBuffer+pExitDoSchedule[i]))=obp-(pExitDoSchedule[i]+sizeof(long));
+	}
+	HeapDefaultFree(pExitDoSchedule);
+	pExitDoSchedule=lpdwTemp;
+	ExitDoScheduleNum=TempNum;
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+	*((long *)(OpBuffer+je_schedule))=obp-(je_schedule+sizeof(long)); //jmpジャンプ先のオフセット値
+	pobj_TempSchedule->unlock();
+
+	//Continueアドレスを復元
+	dwContinueAddress=dwTempContinue;
+}
+void OpcodeExitDo(void){
+	extern HANDLE hHeap;
+	extern DWORD *pExitDoSchedule;
+	extern int ExitDoScheduleNum;
+
+	if(!pExitDoSchedule){
+		SetError(12,"Exit Do",cp);
+		return;
+	}
+
+	//jmp ...(Loop addr)
+	OpBuffer[obp++]=(char)0xE9;
+
+	pExitDoSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitDoSchedule,(ExitDoScheduleNum+1)*sizeof(DWORD));
+	pExitDoSchedule[ExitDoScheduleNum]=obp;
+	ExitDoScheduleNum++;
+
+	obp+=sizeof(long);
+}
+void OpcodeContinue(void){
+	extern DWORD dwContinueAddress;
+
+	if(dwContinueAddress==-1){
+		SetError(12,"Continue",cp);
+		return;
+	}
+
+	//jmp ...(Continue addr)
+	OpBuffer[obp++]=(char)0xE9;
+
+	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
+	obp+=sizeof(long);
+}
+
+void OpcodeExitSub(void){
+	extern DWORD *pExitSubSchedule;
+	extern int ExitSubScheduleNum;
+	extern HANDLE hHeap;
+
+	extern BOOL bCompilingGlobal;
+	if(bCompilingGlobal){
+		SetError(12,"Exit Sub/Function",cp);
+		return;
+	}
+
+	//jmp ...(End Sub/Function)
+	OpBuffer[obp++]=(char)0xE9;
+
+	pExitSubSchedule=(DWORD *)HeapReAlloc(hHeap,0,pExitSubSchedule,(ExitSubScheduleNum+1)*sizeof(DWORD));
+	pExitSubSchedule[ExitSubScheduleNum]=obp;
+	ExitSubScheduleNum++;
+
+	obp+=sizeof(long);
+}
+
+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++;
+}
+void OpcodeSelect(char *Parameter){
+	extern DWORD *pCaseSchedule;
+	extern int CaseScheduleNum;
+	extern int NowCaseSchedule;
+	extern HANDLE hHeap;
+	extern char *basbuf;
+	int i,i2,i3,NowCaseCp;
+	char temporary[VN_SIZE];
+
+	DWORD *temp_pCaseSchedule;
+	int temp_CaseScheduleNum;
+	int temp_NowCaseSchedule;
+
+	temp_pCaseSchedule=pCaseSchedule;
+	temp_CaseScheduleNum=CaseScheduleNum;
+	temp_NowCaseSchedule=NowCaseSchedule;
+	pCaseSchedule=(DWORD *)HeapAlloc(hHeap,0,1);
+	CaseScheduleNum=0;
+	NowCaseSchedule=0;
+
+	int reg1=REG_RAX,type1;
+	LONG_PTR lpIndex;
+	type1=NumOpe(&reg1,Parameter,0,0,&lpIndex);
+
+	if(type1==DEF_DOUBLE){
+		//movsd qword ptr[rsp+offset],xmm_reg		※スタックフレームを利用
+		pobj_sf->push(reg1,sizeof(double));
+	}
+	else if(type1==DEF_SINGLE){
+		//movss dword ptr[rsp+offset],xmm_reg		※スタックフレームを利用
+		pobj_sf->push(reg1,sizeof(float));
+	}
+	else{
+		ExtendTypeTo64(type1,reg1);
+
+		//mov qword ptr[rsp+offset],reg     ※スタックフレームを利用
+		pobj_sf->push(reg1);
+	}
+
+	for(i=cp;;i++){
+		if(basbuf[i]=='\0'){
+			HeapDefaultFree(pCaseSchedule);
+			pCaseSchedule=temp_pCaseSchedule;
+			CaseScheduleNum=temp_CaseScheduleNum;
+			NowCaseSchedule=temp_NowCaseSchedule;
+			SetError(22,"Select",cp);
+			return;
+		}
+		if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE){
+			for(i2=0;;i++){
+				if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE) i2++;
+				if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
+					i2--;
+					if(i2==0) break;
+				}
+			}
+			continue;
+		}
+		if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT) break;
+
+		if(basbuf[i]==1&&basbuf[i+1]==ESC_CASE){
+			NowCaseCp=i;
+
+			i++;
+			while(1){
+				for(i++,i2=0;;i++,i2++){
+					if(basbuf[i]=='\"'){
+						i3=GetStringInQuotation(temporary+i2,basbuf+i);
+						i+=i3-1;
+						i2+=i3-1;
+						continue;
+					}
+					if(basbuf[i]=='('){
+						i3=GetStringInPare(temporary+i2,basbuf+i);
+						i+=i3-1;
+						i2+=i3-1;
+						continue;
+					}
+					if(basbuf[i]=='['){
+						i3=GetStringInBracket(temporary+i2,basbuf+i);
+						i+=i3-1;
+						i2+=i3-1;
+						continue;
+					}
+
+					if(IsCommandDelimitation(basbuf[i])){
+						temporary[i2]=0;
+						break;
+					}
+					if(basbuf[i]==','){
+						temporary[i2]=0;
+						break;
+					}
+
+					temporary[i2]=basbuf[i];
+				}
+
+				//エラー用
+				i2=cp;
+				cp=NowCaseCp;
+
+				int reg2=REG_RDX,type2;
+				LONG_PTR lpIndex2;
+				type2=NumOpe(&reg2,temporary,type1,lpIndex,&lpIndex2);
+
+				cp=i2;
+
+				if(type1==DEF_OBJECT){
+					CClass *pobj_c;
+					pobj_c=(CClass *)lpIndex;
+
+					SUBINFO **ppsi;
+					int num;
+					ppsi=pobj_c->GetOperatorSubInfo(CALC_EQUAL,num);
+					if(num==0){
+						HeapDefaultFree(ppsi);
+
+						return;
+					}
+
+					PARAMETER_INFO *ppi;
+					int iParmNum=0;
+
+					//_System_LocalThis
+					ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);
+					ppi[iParmNum].bArray=0;
+					ppi[iParmNum].bByVal=0;
+					ppi[iParmNum].name=0;
+					ppi[iParmNum].type=DEF_PTR_VOID;
+					ppi[iParmNum].u.index=-1;
+					ppi[iParmNum].SubScripts[0]=-1;
+					iParmNum++;
+
+					ppi[iParmNum].bArray=0;
+					ppi[iParmNum].bByVal=0;
+					ppi[iParmNum].name=0;
+					ppi[iParmNum].type=type2;
+					ppi[iParmNum].u.index=lpIndex2;
+					ppi[iParmNum].SubScripts[0]=-1;
+					iParmNum++;
+
+					//オーバーロードを解決
+					SUBINFO *psi;
+					psi=OverloadSolution("==",ppsi,num,ppi,iParmNum,NULL);
+					HeapDefaultFree(ppsi);
+					HeapDefaultFree(ppi);
+
+					if(!psi){
+						//エラー
+						return;
+					}
+
+
+					//実体オブジェクト
+					if(reg2!=REG_RDX){
+						//mov rdx,reg2
+						op_mov_RR(REG_RDX,reg2);
+					}
+
+					//mov rcx,qword ptr[rsp+offset]		※スタックフレームから参照
+					pobj_sf->ref(REG_RCX);
+
+					//call operator_proc	※ ==演算子
+					op_call(psi);
+
+					//test rax,rax
+					op_test(REG_RAX,REG_RAX);
+
+					//jne ...
+					OpBuffer[obp++]=(char)0x0F;
+					OpBuffer[obp++]=(char)0x85;
+				}
+				else{
+					if(type1==DEF_DOUBLE){
+						int xmm_reg;
+						if(IsXmmReg(reg2)) xmm_reg=reg2;
+						else xmm_reg=REG_XMM5;
+						ChangeTypeToXmm_Double(type2,xmm_reg,reg2);
+
+						//movsd xmm4,qword ptr[rsp+offset]	※スタックフレームから参照
+						pobj_sf->ref(REG_XMM4,sizeof(double));
+
+						//comiss xmm_reg1,xmm_reg2
+						op_comisd(xmm_reg,REG_XMM4);
+					}
+					else if(type1==DEF_SINGLE){
+						int xmm_reg;
+						if(IsXmmReg(reg2)) xmm_reg=reg2;
+						else xmm_reg=REG_XMM5;
+						ChangeTypeToXmm_Single(type2,xmm_reg,reg2);
+
+						//movss xmm4,dword ptr[rsp+offset]	※スタックフレームから参照
+						pobj_sf->ref(REG_XMM4,sizeof(float));
+
+						//comiss xmm_reg1,xmm_reg2
+						op_comiss(xmm_reg,REG_XMM4);
+					}
+					else{
+						//その他整数型
+
+						i2=NeutralizationType(type1,-1,type2,-1);
+
+						//mov r14,qword ptr[rsp+offset]		※スタックフレームから参照
+						pobj_sf->ref(REG_R14);
+
+						//cmp reg2,r14
+						op_cmp_reg(GetTypeSize(i2,-1),reg2,REG_R14);
+					}
+
+					//je ...
+					OpBuffer[obp++]=(char)0x0F;
+					OpBuffer[obp++]=(char)0x84;
+				}
+				AddCaseSchedule();
+				obp+=sizeof(long);
+
+				if(basbuf[i]!=',') break;
+			}
+		}
+		if(basbuf[i]==1&&basbuf[i+1]==ESC_CASEELSE){
+			//jmp ...
+			OpBuffer[obp++]=(char)0xE9;
+			AddCaseSchedule();
+			obp+=sizeof(long);
+		}
+	}
+
+	//スタックフレームを1スペースだけ解除
+	pobj_sf->pop(REG_NON);
+
+	//レキシカルスコープをレベルアップ
+	obj_LexScopes.LevelUp(obp);
+
+	//Select Case内をコンパイル
+	CompileBuffer(ESC_ENDSELECT,0);
+
+	//jmp EndSelect
+	OpBuffer[obp++]=(char)0xE9;
+	AddCaseSchedule();
+	obp+=sizeof(long);
+
+	//最終スケジュール
+	for(i=NowCaseSchedule;i<CaseScheduleNum;i++){
+		*(long *)(OpBuffer+pCaseSchedule[i])=obp-(pCaseSchedule[i]+sizeof(long));
+	}
+	HeapDefaultFree(pCaseSchedule);
+
+	//レキシカルスコープをレベルダウン
+	obj_LexScopes.LevelDown();
+
+	pCaseSchedule=temp_pCaseSchedule;
+	CaseScheduleNum=temp_CaseScheduleNum;
+	NowCaseSchedule=temp_NowCaseSchedule;
+}
+void OpcodeCase(char *Parameter){
+	extern DWORD *pCaseSchedule;
+	extern int NowCaseSchedule;
+	int i;
+
+	if(!pCaseSchedule){
+		SetError(30,"Case",cp);
+		return;
+	}
+
+	//jmp EndSelect
+	OpBuffer[obp++]=(char)0xE9;
+	AddCaseSchedule();
+	obp+=sizeof(long);
+
+	i=0;
+	while(1){
+		//Caseスケジュール
+		*(long *)(OpBuffer+pCaseSchedule[NowCaseSchedule])=obp-(pCaseSchedule[NowCaseSchedule]+sizeof(long));
+		NowCaseSchedule++;
+
+		i=JumpOneParameter(Parameter,i);
+		if(Parameter[i]=='\0') break;
+	}
+}
+
+void OpcodeGosub(char *Parameter){
+	extern HANDLE hHeap;
+	extern GOTOLABELSCHEDULE *pGotoLabelSchedule;
+	extern int GotoLabelScheduleNum;
+	int i,LineNum;
+
+	//call _System_GetEip
+	extern SUBINFO *pSub_System_GetEip;
+	op_call(pSub_System_GetEip);
+
+	//add rax,offset（Gosubステートメントの最終ポイント）
+	int schedule=obp,schedule2;
+	op_add64_value(REG_RAX,0);
+	schedule2=obp-sizeof(long);
+
+	//※戻り先用のrip
+	//mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
+	pobj_sf->push(REG_RAX);
+
+
+	if(Parameter[0]=='*'){
+		i=GetLabelAddress(Parameter+1,0);
+
+		//jmp ...
+		OpBuffer[obp++]=(char)0xE9;
+		if(i==-1){
+			pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapReAlloc(hHeap,0,pGotoLabelSchedule,(GotoLabelScheduleNum+1)*sizeof(GOTOLABELSCHEDULE));
+			pGotoLabelSchedule[GotoLabelScheduleNum].pName=(char *)HeapAlloc(hHeap,0,lstrlen(Parameter+1)+1);
+			lstrcpy(pGotoLabelSchedule[GotoLabelScheduleNum].pName,Parameter+1);
+			pGotoLabelSchedule[GotoLabelScheduleNum].pos=obp;
+			pGotoLabelSchedule[GotoLabelScheduleNum].now_cp=cp;
+			GotoLabelScheduleNum++;
+		}
+		*((long *)(OpBuffer+obp))=i-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+	else{
+		LineNum=atoi(Parameter);
+		i=GetLabelAddress(0,LineNum);
+
+		//jmp ...
+		OpBuffer[obp++]=(char)0xE9;
+		if(i==-1){
+			pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapReAlloc(hHeap,0,pGotoLabelSchedule,(GotoLabelScheduleNum+1)*sizeof(GOTOLABELSCHEDULE));
+			pGotoLabelSchedule[GotoLabelScheduleNum].pName=0;
+			pGotoLabelSchedule[GotoLabelScheduleNum].line=LineNum;
+			pGotoLabelSchedule[GotoLabelScheduleNum].pos=obp;
+			pGotoLabelSchedule[GotoLabelScheduleNum].now_cp=cp;
+			GotoLabelScheduleNum++;
+		}
+		*((long *)(OpBuffer+obp))=i-(obp+sizeof(long));
+		obp+=sizeof(long);
+	}
+
+	*((long *)(OpBuffer+schedule2))=obp-schedule;
+
+	//※スタックフレームを元に戻す
+	pobj_sf->pop(REG_NON);
+
+	SetError(-1,"Gosub ～ Returnステートメントは64ビットコンパイラで利用することはできません。",cp);
+}
+void OpcodeReturn(char *Parameter){
+	extern BOOL bCompilingGlobal;
+	if(bCompilingGlobal){
+		//Gosub～Returnとして扱う
+
+		//mov rax,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->push(REG_NON);
+		pobj_sf->ref(REG_RAX);
+		pobj_sf->pop(REG_NON);
+
+		//jmp rax
+		OpBuffer[obp++]=(char)0xFF;
+		OpBuffer[obp++]=(char)0xE0;
+	}
+	else{
+		//戻り値をセット
+		if(Parameter[0]){
+			extern SUBINFO *pCompilingSubInfo;
+			char *temp;
+			if(pCompilingSubInfo->name[0]==1&&pCompilingSubInfo->name[1]==ESC_OPERATOR)
+				temp="_System_ReturnValue";
+			else temp=pCompilingSubInfo->name;
+
+			char temporary[VN_SIZE];
+			sprintf(temporary,"%s=%s",temp,Parameter);
+			OpcodeCalc(temporary);
+		}
+
+		//プロシージャを抜け出す（C言語のreturnと同様の処理を行う）
+		OpcodeExitSub();
+	}
+}
+
+void Opcode_Input(char *Parameter){
+	extern int cp;
+	int i2,i3,i4,i5,type;
+	BOOL bFile;
+	char temporary[VN_SIZE],temp2[VN_SIZE],buffer[VN_SIZE];
+
+	KillStringSpaces(Parameter);
+
+	if(Parameter[0]=='#'){
+		bFile=1;
+		for(i2=0,i3=1;;i2++,i3++){
+			buffer[i2]=Parameter[i3];
+			if(Parameter[i3]==','||Parameter[i3]=='\0') break;
+		}
+		buffer[i2+1]=0;
+		i2=i3+1;
+	}
+	else{
+		bFile=0;
+		i2=0;
+		buffer[0]=0;
+
+		//表示用文字列パラメータをセット
+		if(Parameter[0]=='\"'){
+			buffer[0]='\"';
+			for(i2=1;;i2++){
+				if(Parameter[i2]=='\"'){
+					buffer[i2]=0;
+					break;
+				}
+				buffer[i2]=Parameter[i2];
+			}
+			if(Parameter[i2+1]==';') lstrcpy(buffer+i2,"? \"");
+			else if(Parameter[i2+1]==',') lstrcpy(buffer+i2,"\"");
+			else SetError(10,"Input",cp);
+			i2+=2;
+		}
+		else if((Parameter[0]=='e'||Parameter[0]=='E')&&
+			(Parameter[1]=='x'||Parameter[1]=='X')&&
+			Parameter[2]=='\"'){
+			memcpy(buffer,Parameter,3);
+			for(i2=3;;i2++){
+				if(Parameter[i2]=='\"'){
+					buffer[i2]=0;
+					break;
+				}
+				buffer[i2]=Parameter[i2];
+			}
+			if(Parameter[i2+1]==';') lstrcpy(buffer+i2,"? \"");
+			else if(Parameter[i2+1]==',') lstrcpy(buffer+i2,"\"");
+			else SetError(10,"Input",cp);
+			i2+=2;
+		}
+		else{
+			lstrcpy(buffer,"\"? \"");
+			i2=0;
+		}
+	}
+
+	//変数ポインタ、変数のタイプをセット
+	i4=0;
+	while(1){
+		for(i3=0;;i2++,i3++){
+			if(Parameter[i2]=='('){
+				i5=GetStringInPare(temporary+i3,Parameter+i2);
+				i2+=i5-1;
+				i3+=i5-1;
+			}
+			if(Parameter[i2]=='['){
+				i5=GetStringInBracket(temporary+i3,Parameter+i2);
+				i2+=i5-1;
+				i3+=i5-1;
+			}
+			if(Parameter[i2]==','){
+				temporary[i3]=0;
+				i2++;
+				break;
+			}
+			temporary[i3]=Parameter[i2];
+			if(Parameter[i2]=='\0') break;
+		}
+		if(temporary[0]=='\0'){
+			SetError(10,"Input",cp);
+			return;
+		}
+
+		LONG_PTR lpIndex;
+		RELATIVE_VAR RelativeVar;
+		GetVarOffset(1,temporary,&type,&RelativeVar,&lpIndex);
+
+		sprintf(temp2,"_System_InputDataPtr[%d]=VarPtr(%s)",i4,temporary);
+		OpcodeCalc(temp2);
+
+		if(type==DEF_LONG) type=DEF_DWORD;
+		else if(type==DEF_INTEGER) type=DEF_WORD;
+		else if(type==DEF_OBJECT){
+			CClass *pobj_Class=(CClass *)lpIndex;
+			if(lstrcmp(pobj_Class->name,"String")==0) type=DEF_STRING;
+		}
+		sprintf(temp2,"_System_InputDataType[%d]=%d",i4,type);
+		OpcodeCalc(temp2);
+
+		i4++;
+		if(Parameter[i2]=='\0') break;
+	}
+	sprintf(temp2,"_System_InputDataPtr[%d]=0",i4);
+	OpcodeCalc(temp2);
+
+	SUBINFO *psi;
+	if(bFile) psi=GetSubHash("INPUT_FromFile");
+	else psi=GetSubHash("INPUT_FromPrompt");
+	if(!psi){
+		SetError(3,"Input",cp);
+		return;
+	}
+	Opcode_CallProc(buffer,psi,0,0,"",0);
+}
+void Opcode_PrintUsing(char *Parameter,char *buffer,BOOL bFile){
+	extern int cp;
+	int i2,i3,i4,i5;
+	char temporary[VN_SIZE],temp2[8192];
+	BOOL bReturnLine;
+
+	i2=lstrlen(Parameter);
+	if(Parameter[i2-1]==';'){
+		bReturnLine=0;
+		Parameter[i2-1]=0;
+	}
+	else bReturnLine=1;
+
+	i3=lstrlen(buffer);
+	for(i2=0;;i2++,i3++){
+		if(Parameter[i2]==';'){
+			buffer[i3]=0;
+			break;
+		}
+		buffer[i3]=Parameter[i2];
+		if(Parameter[i2]=='\0') break;
+	}
+	if(Parameter[i2]==';') i2++;
+
+	if(bReturnLine) lstrcat(buffer,"+Ex\"\\r\\n\"");
+
+	//データポインタ、データのタイプをセット
+	i4=0;
+	while(1){
+		for(i3=0;;i2++,i3++){
+			if(Parameter[i2]=='\"'){
+				temporary[i3]=Parameter[i2];
+				for(i2++,i3++;;i2++,i3++){
+					temporary[i3]=Parameter[i2];
+					if(Parameter[i2]=='\"') break;
+				}
+				continue;
+			}
+			if(Parameter[i2]=='('){
+				i5=GetStringInPare(temporary+i3,Parameter+i2);
+				i2+=i5-1;
+				i3+=i5-1;
+				continue;
+			}
+			if(Parameter[i2]=='['){
+				i5=GetStringInBracket(temporary+i3,Parameter+i2);
+				i2+=i5-1;
+				i3+=i5-1;
+				continue;
+			}
+			if(Parameter[i2]==','){
+				temporary[i3]=0;
+				i2++;
+				break;
+			}
+			temporary[i3]=Parameter[i2];
+			if(Parameter[i2]=='\0') break;
+		}
+		if(temporary[0]=='\0'){
+			SetError(10,"Print",cp);
+			return;
+		}
+
+		int iResult;
+		iResult=IsStrCalculation(temporary);
+
+		if(iResult==1){
+			//文字列
+			sprintf(temp2,"_System_UsingStrData[%d]=%s",i4,temporary);
+			OpcodeCalc(temp2);
+
+			sprintf(temp2,"_System_UsingDataType[%d]=%d",i4,DEF_STRING);
+			OpcodeCalc(temp2);
+		}
+		else if(iResult==0){
+			//数値
+			sprintf(temp2,"_System_UsingDblData[%d]=%s",i4,temporary);
+			OpcodeCalc(temp2);
+
+			sprintf(temp2,"_System_UsingDataType[%d]=%d",i4,DEF_DOUBLE);
+			OpcodeCalc(temp2);
+		}
+		//else if(iResult==-1) エラー
+
+		i4++;
+		if(Parameter[i2]=='\0') break;
+	}
+	sprintf(temp2,"_System_UsingDataType[%d]=-1",i4);
+	OpcodeCalc(temp2);
+
+	SUBINFO *psi;
+	if(bFile) psi=GetSubHash("PRINTUSING_ToFile");
+	else psi=GetSubHash("PRINTUSING_ToPrompt");
+	if(!psi){
+		SetError(3,"Print",cp);
+		return;
+	}
+	Opcode_CallProc(buffer,psi,0,0,"",0);
+}
+void Opcode_Print(char *Parameter,BOOL bWrite){
+	int i2,i3,i4,sw;
+	char temporary[VN_SIZE],buffer[VN_SIZE];
+	BOOL bFile;
+
+	KillStringSpaces(Parameter);
+
+	if(Parameter[0]=='#'){
+		bFile=1;
+		for(i2=0,i3=1;;i2++,i3++){
+			buffer[i2]=Parameter[i3];
+			if(Parameter[i3]==','||Parameter[i3]=='\0') break;
+		}
+		buffer[i2+1]=0;
+		if(Parameter[i3]==',') i3++;
+		i2=i3;
+	}
+	else{
+		bFile=0;
+		i2=0;
+		buffer[0]=0;
+	}
+	if(Parameter[i2]==1&&Parameter[i2+1]==ESC_USING){
+		Opcode_PrintUsing(Parameter+i2+2,buffer,bFile);
+		return;
+	}
+
+	lstrcat(buffer,"_System_DummyStr+");
+
+	sw=1;
+	while(1){
+		for(i3=0;;i2++,i3++){
+			if(Parameter[i2]=='\"'){
+				temporary[i3]=Parameter[i2];
+				for(i2++,i3++;;i2++,i3++){
+					temporary[i3]=Parameter[i2];
+					if(Parameter[i2]=='\"') break;
+				}
+				continue;
+			}
+			if(Parameter[i2]=='('){
+				i4=GetStringInPare(temporary+i3,Parameter+i2);
+				i2+=i4-1;
+				i3+=i4-1;
+				continue;
+			}
+			if(Parameter[i2]=='['){
+				i4=GetStringInBracket(temporary+i3,Parameter+i2);
+				i2+=i4-1;
+				i3+=i4-1;
+				continue;
+			}
+			if(Parameter[i2]==','||Parameter[i2]==';'){
+				temporary[i3]=0;
+				break;
+			}
+			temporary[i3]=Parameter[i2];
+			if(Parameter[i2]=='\0') break;
+		}
+
+		if(temporary[0]=='\0') lstrcat(buffer,"\"\"");
+		else{
+			int iResult;
+			iResult=IsStrCalculation(temporary);
+			if(iResult==-1){
+				//エラー
+				lstrcat(buffer,"\"\"");
+			}
+			else if(iResult){
+				//文字列
+				lstrcat(buffer,temporary);
+			}
+			else{
+				//数値
+				sprintf(buffer+lstrlen(buffer),"Str$(%s)",temporary);
+			}
+		}
+
+		if(Parameter[i2]==','){
+			if(bWrite) lstrcat(buffer,"+\",\"+");
+			else lstrcat(buffer,"+\"\t\"+");
+		}
+		else if(Parameter[i2]==';'){
+			if(Parameter[i2+1]=='\0'){
+				sw=0;
+				break;
+			}
+			if(bWrite) lstrcat(buffer,"+\",\"+");
+			else lstrcat(buffer,"+\" \"+");
+		}
+		else if(Parameter[i2]=='\0') break;
+
+		i2++;
+	}
+
+	if(sw) lstrcat(buffer,"+Ex\"\\r\\n\"");
+
+	SUBINFO *psi;
+	if(bFile) psi=GetSubHash("PRINT_ToFile");
+	else psi=GetSubHash("PRINT_ToPrompt");
+	if(!psi){
+		SetError(3,"Print",cp);
+		return;
+	}
+	Opcode_CallProc(buffer,psi,0,0,"",0);
+}
+
+
+
+
+////////////
+// ポインタ
+////////////
+
+void OpcodeSetPtrData(char *Parameter,int type){
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	if(Parameter[0]=='('){
+		i=JumpStringInPare(Parameter,1);
+		if(Parameter[i+1]=='\0'){
+			for(i=0;;i++){
+				Parameter[i]=Parameter[i+1];
+				if(Parameter[i]=='\0') break;
+			}
+			Parameter[i-1]=0;
+		}
+	}
+
+	//第１パラメータを取得
+	i=GetOneParameter(Parameter,0,temporary);
+	if(!Parameter[i]){
+		SetError(1,NULL,cp);
+		return;
+	}
+
+	int reg_ptr=REG_RAX;
+	i2=NumOpe(&reg_ptr,temporary,0,0,0);
+	if(!IsWholeNumberType(i2)){
+		SetError(11,Parameter,cp);
+		return;
+	}
+
+	//結果を格納しているレジスタをブロッキング
+	pobj_BlockReg->lock(reg_ptr);
+
+	//第２パラメータを取得
+	i=GetOneParameter(Parameter,i,temporary);
+	if(Parameter[i]){
+		SetError(1,NULL,cp);
+		return;
+	}
+
+	int temp_reg=REG_NON;
+	i2=NumOpe(&temp_reg,temporary,0,0,0);
+
+	//レジスタのブロッキングを解除
+	pobj_BlockReg->clear();
+
+	if(type==DEF_DOUBLE){
+		ChangeTypeToXmm_Double(i2,REG_XMM0,temp_reg);
+
+		//movsd qword ptr[reg_ptr],xmm0
+		op_movsd_MR(REG_XMM0,reg_ptr,0,MOD_BASE);
+	}
+	else if(type==DEF_SINGLE){
+		ChangeTypeToXmm_Single(i2,REG_XMM0,temp_reg);
+
+		//movss dword ptr[reg_ptr],xmm0
+		op_movss_MR(REG_XMM0,reg_ptr,0,MOD_BASE);
+	}
+	else{
+		ChangeTypeToWhole(i2,type,REG_RCX,temp_reg);
+
+		//mov ptr[reg_ptr],rcx
+		op_mov_MR(GetTypeSize(type,-1),REG_RCX,reg_ptr,0,MOD_BASE);
+	}
+}
Index: /BasicCompiler64/Compile_Var.cpp
===================================================================
--- /BasicCompiler64/Compile_Var.cpp	(revision 3)
+++ /BasicCompiler64/Compile_Var.cpp	(revision 3)
@@ -0,0 +1,1212 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+//変数
+VARIABLE *GlobalVar;
+int MaxGlobalVarNum;
+int AllGlobalVarSize;
+int AllInitGlobalVarSize;
+VARIABLE *LocalVar;
+int MaxLocalVarNum;
+int AllLocalVarSize;
+
+
+void SetRelativeOffset(int *pType,LONG_PTR lpIndex,RELATIVE_VAR *pRelativeVar,char *lpPtrOffset){
+	int i2;
+
+
+	/////////////////////////////////////////////
+	// 先頭ポインタをr12に取得してメモリへ退避
+	/////////////////////////////////////////////
+
+	SetReg_WholeVariable(DEF_INT64,pRelativeVar,REG_R11);
+
+	//mov qword ptr[rsp+offset],r11     ※スタックフレームを利用
+	pobj_sf->push(REG_R11);
+
+
+	////////////////////////////////
+	// 添え字を計算する
+	////////////////////////////////
+
+	int reg=REG_NON;
+	i2=NumOpe(&reg,lpPtrOffset,0,0,0);
+	if(!IsWholeNumberType(i2)) SetError(46,NULL,cp);
+	ExtendTypeTo64(i2,reg);
+
+	if(reg==REG_R14){
+		//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R14);
+	}
+
+	if(PTR_LEVEL(*pType)){
+		*pType=MAKE_PTR_TYPE(NATURAL_TYPE(*pType),PTR_LEVEL(*pType)-1);
+		if((*pType)==DEF_OBJECT){
+			//imul reg,objsize
+			op_imul_value(sizeof(_int64),reg,GetSizeOfClassMember((CClass *)lpIndex,NULL,NULL));
+		}
+		else{
+			i2=GetTypeSize(*pType,-1);
+			if(i2>=2){
+				//imul reg,i2
+				op_imul_value(sizeof(_int64),reg,i2);
+			}
+		}
+	}
+	else{
+		//エラー
+		SetError(1,NULL,cp);
+		return;
+	}
+
+
+	//////////////////////////////
+	// 先頭ポインタに添え字を加算
+	//////////////////////////////
+
+	//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
+	pobj_sf->pop(REG_R11);
+
+	//add r11,reg
+	op_add64_reg(REG_R11,reg);
+}
+BOOL GetArrayOffset(int *SubScripts,char *array,int type,LONG_PTR lpIndex){
+	extern HANDLE hHeap;
+	int i,i2,i3,i4,TypeSize;
+	char temporary[VN_SIZE],*pParm[MAX_PARMS];
+
+	for(i=0,i2=0,i3=0;;i++,i2++){
+		if(array[i]=='('){
+			i4=GetStringInPare(temporary+i2,array+i);
+			i+=i4-1;
+			i2+=i4-1;
+			continue;
+		}
+		if(array[i]=='['){
+			i4=GetStringInBracket(temporary+i2,array+i);
+			i+=i4-1;
+			i2+=i4-1;
+			continue;
+		}
+		if(array[i]==','||array[i]=='\0'){
+			if(SubScripts[i3]==-1){
+				for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
+				return 0;
+			}
+
+			temporary[i2]=0;
+
+			pParm[i3]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(pParm[i3],temporary);
+
+			i3++;
+
+			if(array[i]=='\0'){
+				if(SubScripts[i3]!=-1){
+					for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
+					return 0;
+				}
+				break;
+			}
+
+			i2=-1;
+			continue;
+		}
+		temporary[i2]=array[i];
+	}
+
+	//mov qword ptr[rsp+offset],r11     ※スタックフレームを利用
+	pobj_sf->push(REG_R11);
+
+	//xor r12,r12
+	op_zero_reg(REG_R12);
+
+	for(i=i3-1;i>=0;i--){
+		//mov qword ptr[rsp+offset],r12     ※スタックフレームを利用
+		pobj_sf->push(REG_R12);
+
+		int reg=REG_NON;
+		TYPEINFO TypeInfo;
+		BOOL bUseHeap;
+		TypeInfo.type=NumOpe(&reg,pParm[i],DEF_LONG,-1,&TypeInfo.u.lpIndex,&bUseHeap);
+		if(TypeInfo.type==DEF_OBJECT){
+			//キャスト演算子のオーバーロードに対応する
+			CallCastOperatorProc(reg,
+				TypeInfo.type,TypeInfo.u.lpIndex,
+				bUseHeap,DEF_LONG,-1);
+			TypeInfo.type=DEF_LONG;
+		}
+
+		if(!IsWholeNumberType(TypeInfo.type)) SetError(46,NULL,cp);
+		ExtendTypeTo64(TypeInfo.type,reg);
+
+		if(reg==REG_R14){
+			//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+			pobj_sf->pop(REG_R14);
+		}
+
+		//mov r12,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R12);
+
+		for(i2=i+1,i4=1;i2<i3;i2++) i4*=SubScripts[i2]+1;
+
+		//imul reg,i4
+		op_imul_value(sizeof(_int64),reg,i4);
+
+		//add r12,reg
+		op_add64_reg(REG_R12,reg);
+
+		HeapDefaultFree(pParm[i]);
+	}
+
+	TypeSize=GetTypeSize(type,lpIndex);
+
+	//imul r12,TypeSize
+	OpBuffer[obp++]=(char)0x4D;
+	OpBuffer[obp++]=(char)0x69;
+	OpBuffer[obp++]=(char)0xE4;
+	*((long *)(OpBuffer+obp))=TypeSize;
+	obp+=sizeof(long);
+
+	//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
+	pobj_sf->pop(REG_R11);
+
+	//add r11,r12
+	OpBuffer[obp++]=(char)0x4D;
+	OpBuffer[obp++]=(char)0x03;
+	OpBuffer[obp++]=(char)0xDC;
+
+	return 1;
+}
+BOOL GetMemberOffset(BOOL bError,CClass *pobj_c,char *member,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpNestIndex,BOOL bPrivateAccess){
+	int i,offset;
+
+
+	//////////////////////////////////////
+	// クラス、配列の構成要素を解析する
+	//////////////////////////////////////
+
+	char VarName[VN_SIZE];		//変数名
+	char array[VN_SIZE];		//第1次配列
+	char lpPtrOffset[VN_SIZE];	//第2次配列
+	char NestMember[VN_SIZE];	//入れ子メンバ
+	int RefType;				//"."参照のときは0、"->"参照のときは1
+	lstrcpy(VarName,member);
+	if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)) return 0;
+
+
+	////////////////////////////
+	// メンバオフセットを取得
+	////////////////////////////
+
+	offset=GetSizeOfClassMember(pobj_c,VarName,&i);
+	if(i==pobj_c->iMemberNum){
+		if(bError) SetError(103,VarName,cp);
+		return 0;
+	}
+
+
+	//アクセシビリティをチェック
+	if(pobj_c==pobj_CompilingClass){
+		//同一クラスオブジェクトの場合はプライベートアクセスを容認する
+		if(pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
+			if(bError) SetError(107,VarName,cp);
+			return 0;
+		}
+	}
+	else{
+		if((bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
+			pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
+			if(bError) SetError(107,VarName,cp);
+			return 0;
+		}
+		else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED){
+			if(bError) SetError(108,VarName,cp);
+			return 0;
+		}
+	}
+
+	*pType=pobj_c->ppobj_Member[i]->TypeInfo.type;
+	*plpNestIndex=pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex;
+
+	//ポインタ変数の場合
+	if(IsPtrType(*pType)){
+		if(pobj_c->ppobj_Member[i]->SubScripts[0]==-1){
+			lstrcpy(lpPtrOffset,array);
+			array[0]=0;
+		}
+	}
+	else{
+		if(lpPtrOffset[0]){
+			if(bError) SetError(16,member,cp);
+			return 0;
+		}
+	}
+
+	if(offset){
+		//add r11,offset
+		OpBuffer[obp++]=(char)0x49;
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)0xC3;
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+
+	if(array[0]){
+		//配列オフセット
+		if(!GetArrayOffset(pobj_c->ppobj_Member[i]->SubScripts,array,*pType,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex)){
+			if(bError) SetError(14,member,cp);
+		}
+	}
+	else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
+		*pType|=FLAG_PTR;
+	}
+
+	if(NestMember[0]){
+		//入れ子構造の場合
+
+		if(*pType==DEF_OBJECT){
+			if(RefType!=DEF_OBJECT){
+				if(bError) SetError(104,member,cp);
+				return 0;
+			}
+		}
+		else if(*pType==DEF_PTR_OBJECT){
+			//構造体ポインタ型メンバ変数
+
+			if(lpPtrOffset[0]){
+				//pObj[n].member
+				if(RefType!=DEF_OBJECT){
+					if(bError) SetError(104,member,cp);
+					return 0;
+				}
+
+				//直接参照に切り替え
+				SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				lpPtrOffset[0]=0;
+			}
+			else{
+				//pObj->member
+				if(RefType!=DEF_PTR_OBJECT){
+					if(bError) SetError(104,member,cp);
+					return 0;
+				}
+
+				if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+					//mov r11,qword ptr[r11]
+					op_mov_RM(sizeof(_int64),REG_R11,REG_R11,0,MOD_BASE);
+				}
+				else{
+					//直接参照に切り替え
+					SetVarPtrToReg(REG_R12,pRelativeVar);
+					pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+					//mov r11,qword ptr[r12]
+					op_mov_RM(sizeof(_int64),REG_R11,REG_R12,0,MOD_BASE);
+				}
+			}
+		}
+		else if(*pType==MAKE_PTR_TYPE(DEF_OBJECT,2)){
+			//構造体ポインタのポインタ型メンバ変数
+
+			if(lpPtrOffset[0]){
+				//ppObj[n]->member
+				if(RefType!=DEF_PTR_OBJECT){
+					if(bError) SetError(104,member,cp);
+					return 0;
+				}
+
+				//直接参照に切り替え
+				SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				lpPtrOffset[0]=0;
+
+				//mov r11,qword ptr[r11]
+				op_mov_RM(sizeof(_int64),REG_R11,REG_R11,0,MOD_BASE);
+			}
+			else{
+				if(bError) SetError(104,member,cp);
+				return 0;
+			}
+		}
+
+		if(!GetMemberOffset(bError,
+			pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
+			NestMember,
+			pType,
+			pRelativeVar,
+			plpNestIndex,
+			0)) return 0;
+	}
+
+	if(lpPtrOffset[0]){
+		SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+		pRelativeVar->dwKind=VAR_DIRECTMEM;
+	}
+
+	return 1;
+}
+void GetWithName(char *buffer){
+	extern WITHINFO WithInfo;
+	int i;
+
+	buffer[0]=0;
+	for(i=0;i<WithInfo.num;i++)
+		lstrcat(buffer,WithInfo.ppName[i]);
+}
+
+int LocalVar_ThisPtrOffset;
+void SetThisPtrToReg(int reg){
+	//自身のオブジェクトのThisポインタをregにコピー
+
+	extern VARIABLE *LocalVar;
+	RELATIVE_VAR RelativeVar;
+	RelativeVar.dwKind=VAR_LOCAL;
+	RelativeVar.bOffsetOffset=0;
+	RelativeVar.offset=-LocalVar_ThisPtrOffset;
+
+	SetReg_WholeVariable(DEF_PTR_VOID,&RelativeVar,reg);
+}
+BOOL GetVarOffset(BOOL bError,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
+	extern BOOL bCompilingGlobal;
+	int i,RefType;
+	char variable[VN_SIZE],member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+
+	if(NameBuffer[0]=='.'){
+		GetWithName(variable);
+		lstrcat(variable,NameBuffer);
+	}
+	else lstrcpy(variable,NameBuffer);
+
+	lstrcpy(VarName,variable);
+	GetVarFormatString(VarName,array,lpPtrOffset,member,&RefType);
+
+	LONG_PTR lpIndex;
+	int *pSubScripts;
+
+
+	if(bCompilingGlobal==0){
+		//////////////////
+		// ローカル変数
+		//////////////////
+
+		for(i=MaxLocalVarNum-1;i>=0;i--){	//レキシカルスコープを考慮してバックサーチ
+			if(LocalVar[i].bLiving){
+				if(lstrcmp(VarName,LocalVar[i].name)==0) break;
+			}
+		}
+		if(i>=0){
+			//ポインタ変数の場合
+			if(IsPtrType(LocalVar[i].type)){
+				if(LocalVar[i].SubScripts[0]==-1){
+					lstrcpy(lpPtrOffset,array);
+					array[0]=0;
+				}
+			}
+			else{
+				if(lpPtrOffset[0]){
+					SetError(16,variable,cp);
+					pRelativeVar->dwKind=NON_VAR;
+					return 0;
+				}
+			}
+
+			pRelativeVar->offset=-LocalVar[i].offset;
+			pRelativeVar->bOffsetOffset=0;
+			if(LocalVar[i].fRef) pRelativeVar->dwKind=VAR_REFLOCAL;
+			else pRelativeVar->dwKind=VAR_LOCAL;
+			*pType=LocalVar[i].type;
+			lpIndex=LocalVar[i].u.index;
+			if(plpIndex) *plpIndex=lpIndex;
+			pSubScripts=LocalVar[i].SubScripts;
+
+			goto ok;
+		}
+	}
+
+
+	if(pobj_CompilingClass){
+		//////////////////////
+		// クラスメンバの参照
+		//////////////////////
+
+		if(lstrcmpi(variable,"This")==0){
+			//自身のオブジェクトのThisポインタをr11にコピー
+			SetThisPtrToReg(REG_R11);
+
+			*pType=DEF_OBJECT;
+			pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+			if(plpIndex) *plpIndex=(LONG_PTR)pobj_CompilingClass;
+			return 1;
+		}
+
+		if(memicmp(variable,"This.",5)==0){
+			//Thisオブジェクトのメンバを参照するとき
+			SlideString(variable+5,-5);
+			lstrcpy(VarName,variable);
+		}
+		else{
+			//クラス内メンバを参照するとき（通常）
+
+			for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
+				if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
+			}
+			if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
+		}
+
+		//自身のオブジェクトのThisポインタをr11にコピー
+		SetThisPtrToReg(REG_R11);
+
+		pRelativeVar->dwKind=VAR_DIRECTMEM;
+		if(!GetMemberOffset(bError,pobj_CompilingClass,variable,pType,pRelativeVar,&lpIndex,1)) return 0;
+		if(plpIndex) *plpIndex=lpIndex;
+		return 1;
+	}
+
+NonClassMember:
+
+	//////////////////////////
+	// 静的ローカル変数
+	// ※"Static.Object.Method.Variable"
+	//////////////////////////
+
+	char temporary[VN_SIZE];
+	extern SUBINFO *pCompilingSubInfo;
+	if(pCompilingSubInfo){
+		GetNowStaticVarFullName(VarName,temporary);
+
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(lstrcmp(temporary,GlobalVar[i].name)==0) break;
+		}
+		if(i!=MaxGlobalVarNum){
+			goto GlobalOk;
+		}
+	}
+
+	/////////////////////
+	// グローバル変数
+	/////////////////////
+
+	for(i=MaxGlobalVarNum-1;i>=0;i--){	//レキシカルスコープを考慮してバックサーチ
+		if(GlobalVar[i].bLiving){
+			if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
+		}
+	}
+	if(i>=0){
+		goto GlobalOk;
+	}
+
+
+	//////////////////////////
+	// クラスの静的メンバ
+	//////////////////////////
+
+	if(member[0]){
+		lstrcpy(temporary,member);
+		GetVarFormatString(temporary,array,lpPtrOffset,member,&i);
+
+		char temp2[VN_SIZE];
+		sprintf(temp2,"%s.%s",VarName,temporary);
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(lstrcmp(temp2,GlobalVar[i].name)==0) break;
+		}
+
+		if(i!=MaxGlobalVarNum){
+			goto GlobalOk;
+		}
+	}
+
+	if(pobj_CompilingClass){
+		//自身のクラスから静的メンバを参照する場合
+		char temp2[VN_SIZE];
+		sprintf(temp2,"%s.%s",pobj_CompilingClass->name,VarName);
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(lstrcmp(temp2,GlobalVar[i].name)==0) break;
+		}
+
+		if(i!=MaxGlobalVarNum){
+			goto GlobalOk;
+		}
+	}
+
+	if(bError) SetError(3,variable,cp);
+	pRelativeVar->dwKind=NON_VAR;
+	return 0;
+
+
+
+GlobalOk:
+	//ポインタ変数の場合
+	if(IsPtrType(GlobalVar[i].type)){
+		if(GlobalVar[i].SubScripts[0]==-1){
+			lstrcpy(lpPtrOffset,array);
+			array[0]=0;
+		}
+	}
+	else{
+		if(lpPtrOffset[0]){
+			SetError(16,variable,cp);
+			pRelativeVar->dwKind=NON_VAR;
+			return 0;
+		}
+	}
+
+	pRelativeVar->offset=GlobalVar[i].offset;
+	pRelativeVar->bOffsetOffset=0;
+	pRelativeVar->dwKind=VAR_GLOBAL;
+	*pType=GlobalVar[i].type;
+	lpIndex=GlobalVar[i].u.index;
+	if(plpIndex) *plpIndex=lpIndex;
+	pSubScripts=GlobalVar[i].SubScripts;
+
+
+
+ok:
+
+
+	if(array[0]==0&&pSubScripts[0]!=-1){
+		//配列の先頭ポインタを示す場合
+		*pType|=FLAG_PTR;
+		if(pss) memcpy(pss,pSubScripts,MAX_ARRAYDIM);
+		return 1;
+	}
+
+	if(array[0]||member[0]){
+		//xor r11,r11（r11を0に初期化する）
+		//※r11は変数ベースアドレスからの相対オフセットを示す
+		op_zero_reg(REG_R11);
+
+		pRelativeVar->bOffsetOffset=1;
+	}
+	if(array[0]){
+		if(!GetArrayOffset(pSubScripts,array,*pType,lpIndex)){
+			SetError(14,variable,cp);
+			pRelativeVar->dwKind=NON_VAR;
+			return 0;
+		}
+	}
+	if(member[0]){
+		if(*pType==DEF_OBJECT){
+			//実態オブジェクトのメンバを参照（obj.member）
+			if(RefType!=DEF_OBJECT){
+				SetError(104,VarName,cp);
+				pRelativeVar->dwKind=NON_VAR;
+				return 0;
+			}
+
+			LONG_PTR lp2;
+			if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
+			if(plpIndex) *plpIndex=lp2;
+		}
+		else if(*pType==DEF_PTR_OBJECT){
+			//ポインタオブジェクトが示すメンバを参照
+			if(lpPtrOffset[0]){
+				//pObj[n].member
+				if(RefType!=DEF_OBJECT){
+					SetError(104,VarName,cp);
+					pRelativeVar->dwKind=NON_VAR;
+					return 0;
+				}
+				SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				LONG_PTR lp2;
+				if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
+				if(plpIndex) *plpIndex=lp2;
+			}
+			else{
+				//pObj->member
+				if(RefType!=DEF_PTR_OBJECT){
+					SetError(104,VarName,cp);
+					pRelativeVar->dwKind=NON_VAR;
+					return 0;
+				}
+
+				SetVarPtrToReg(REG_R12,pRelativeVar);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				//mov r11,qword ptr[r12]
+				op_mov_RM(sizeof(_int64),REG_R11,REG_R12,0,MOD_BASE);
+
+				LONG_PTR lp2;
+				if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
+				if(plpIndex) *plpIndex=lp2;
+			}
+		}
+		else if(*pType==MAKE_PTR_TYPE(DEF_OBJECT,2)){
+			//ポインタオブジェクトが示すメンバを参照
+			if(lpPtrOffset[0]){
+				//ppObj[n]->member
+				if(RefType!=DEF_PTR_OBJECT){
+					SetError(104,VarName,cp);
+					pRelativeVar->dwKind=NON_VAR;
+					return 0;
+				}
+
+				SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+
+				SetVarPtrToReg(REG_R12,pRelativeVar);
+
+				//mov r11,qword ptr[r12]
+				op_mov_RM(sizeof(_int64),REG_R11,REG_R12,0,MOD_BASE);
+
+				LONG_PTR lp2;
+				if(!GetMemberOffset(bError,(CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0)) return 0;
+				if(plpIndex) *plpIndex=lp2;
+			}
+			else{
+				SetError(104,VarName,cp);
+				pRelativeVar->dwKind=NON_VAR;
+				return 0;
+			}
+		}
+		else{
+			SetError(102,VarName,cp);
+			pRelativeVar->dwKind=NON_VAR;
+			return 0;
+		}
+		return 1;
+	}
+
+	if(lpPtrOffset[0]){
+		SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
+		pRelativeVar->dwKind=VAR_DIRECTMEM;
+	}
+
+	return 1;
+}
+
+BOOL SetInitGlobalData(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf){
+	extern BYTE *initGlobalBuf;
+	int i,i2,i3,TypeSize;
+	char temporary[VN_SIZE];
+
+	if(InitBuf[0]=='['){
+		SlideString(InitBuf+1,-1);
+		InitBuf[lstrlen(InitBuf)-1]=0;
+
+		TypeSize=GetTypeSize(type,lpIndex);
+
+		if(SubScripts[0]!=-1){
+			TypeSize*=JumpSubScripts(SubScripts+1);
+			i=0;
+			i2=0;
+			while(1){
+				if(SubScripts[0]<i2){
+					SetError(41,0,cp);
+					return 0;
+				}
+				i=GetOneParameter(InitBuf,i,temporary);
+				if(!SetInitGlobalData(
+					offset+i2*TypeSize,
+					type,
+					lpIndex,
+					SubScripts+1,
+					temporary)) return 0;
+				i2++;
+				if(InitBuf[i]=='\0') break;
+			}
+			return -1;
+		}
+
+		if(type==DEF_OBJECT){
+			CClass *pobj_c;
+			pobj_c=(CClass *)lpIndex;
+
+			for(i=0,i2=0;i2<pobj_c->iMemberNum;i2++){
+				i=GetOneParameter(InitBuf,i,temporary);
+
+				i3=GetSizeOfClassMember(pobj_c,pobj_c->ppobj_Member[i2]->name,NULL);
+
+				if(!SetInitGlobalData(offset+i3,
+					pobj_c->ppobj_Member[i2]->TypeInfo.type,
+					pobj_c->ppobj_Member[i2]->TypeInfo.u.lpIndex,
+					pobj_c->ppobj_Member[i2]->SubScripts,
+					temporary)) return 0;
+
+				if(InitBuf[i]=='\0') break;
+			}
+			if(i2+1!=pobj_c->iMemberNum){
+				SetError(41,0,cp);
+				return 0;
+			}
+			return 1;
+		}
+
+		SetError(41,0,cp);
+		return 0;
+	}
+
+	if(SubScripts[0]!=-1){
+		SetError(41,0,cp);
+		return 0;
+	}
+
+	double dbl;
+	_int64 i64data;
+	int CalcType;
+	LONG_PTR lpCalcIndex;
+
+	CalcType=StaticCalculation(true, InitBuf,type,&i64data,&lpCalcIndex);
+	if(IsRealNumberType(CalcType)){
+		memcpy(&dbl,&i64data,sizeof(double));
+		i64data=(_int64)dbl;
+	}
+	else dbl=(double)i64data;
+
+	//型チェック
+	CheckDifferentType(
+		type,
+		lpIndex,
+		CalcType,
+		lpCalcIndex,
+		0,0);
+
+	if(type==DEF_DOUBLE)
+		*(double *)(initGlobalBuf+offset)=(double)dbl;
+	else if(type==DEF_SINGLE)
+			*(float *)(initGlobalBuf+offset)=(float)dbl;
+	else if(type==DEF_INT64||type==DEF_QWORD||IsPtrType(type)){
+		if(type==DEF_PTR_BYTE&&lpCalcIndex==LITERAL_STRING){
+			//文字列定数のとき
+
+			char *temp;
+			temp=(char *)i64data;
+			i2=AddDataTable(temp,lstrlen(temp));
+			HeapDefaultFree(temp);
+
+			//mov rax,DataPos
+			op_mov_RV(sizeof(_int64),REG_RAX,i2);
+			obp-=sizeof(long);
+			pobj_DataTableSchedule->add();
+			obp+=sizeof(long);
+
+			//mov qword ptr[offset],rax
+			op_mov_MR(sizeof(_int64),REG_RAX,0,offset,MOD_DISP32);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+		else{
+			*(_int64 *)(initGlobalBuf+offset)=i64data;
+		}
+	}
+	else if(type==DEF_LONG||type==DEF_DWORD)
+		*(DWORD *)(initGlobalBuf+offset)=(DWORD)i64data;
+	else if(type==DEF_INTEGER||type==DEF_WORD)
+		*(WORD *)(initGlobalBuf+offset)=(WORD)i64data;
+	else if(type==DEF_CHAR||type==DEF_BYTE)
+		*(BYTE *)(initGlobalBuf+offset)=(BYTE)i64data;
+
+	return 1;
+}
+BOOL InitLocalVar(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf){
+	int i,i2,i3,TypeSize;
+	char temporary[VN_SIZE];
+
+	if(InitBuf[0]=='['){
+		SlideString(InitBuf+1,-1);
+		InitBuf[lstrlen(InitBuf)-1]=0;
+
+		TypeSize=GetTypeSize(type,lpIndex);
+
+		if(SubScripts[0]!=-1){
+			TypeSize*=JumpSubScripts(SubScripts+1);
+			i=0;
+			i2=0;
+			while(1){
+				if(SubScripts[0]<i2){
+					SetError(41,0,cp);
+					return 0;
+				}
+				i=GetOneParameter(InitBuf,i,temporary);
+				if(!InitLocalVar(
+					offset+i2*TypeSize,
+					type,
+					lpIndex,
+					SubScripts+1,
+					temporary)) return 0;
+				i2++;
+				if(InitBuf[i]=='\0') break;
+			}
+			return -1;
+		}
+
+		if(type==DEF_OBJECT){
+			CClass *pobj_c;
+			pobj_c=(CClass *)lpIndex;
+
+			for(i=0,i2=0;i2<pobj_c->iMemberNum;i2++){
+				i=GetOneParameter(InitBuf,i,temporary);
+
+				i3=GetSizeOfClassMember(pobj_c,pobj_c->ppobj_Member[i2]->name,NULL);
+
+				if(!InitLocalVar(offset+i3,
+					pobj_c->ppobj_Member[i2]->TypeInfo.type,
+					pobj_c->ppobj_Member[i2]->TypeInfo.u.lpIndex,
+					pobj_c->ppobj_Member[i2]->SubScripts,
+					temporary)) return 0;
+
+				if(InitBuf[i]=='\0') break;
+			}
+			if(i2+1!=pobj_c->iMemberNum){
+				SetError(41,0,cp);
+				return 0;
+			}
+			return 1;
+		}
+
+		SetError(41,0,cp);
+		return 0;
+	}
+
+	if(SubScripts[0]!=-1){
+		SetError(41,0,cp);
+		return 0;
+	}
+
+	double dbl;
+	_int64 i64data;
+	int CalcType;
+	LONG_PTR lpCalcIndex;
+	CalcType=StaticCalculation(true, InitBuf,type,&i64data,&lpCalcIndex);
+	if(IsRealNumberType(CalcType)){
+		memcpy(&dbl,&i64data,sizeof(double));
+		i64data=(_int64)dbl;
+	}
+	else dbl=(double)i64data;
+
+	//型チェック
+	CheckDifferentType(
+		type,
+		lpIndex,
+		CalcType,
+		lpCalcIndex,
+		0,0);
+
+	if(type==DEF_DOUBLE){
+		memcpy(&i64data,&dbl,sizeof(double));
+
+		//mov rax,i64data
+		op_mov64_ToReg(REG_RAX,i64data);
+
+		//mov qword ptr[rsp+offset],rax
+		op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32);
+		obp-=sizeof(long);
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long);
+	}
+	else if(type==DEF_SINGLE){
+		float flt;
+		flt=(float)dbl;
+
+		//mov dword ptr[rsp+offset],value
+		op_mov_MV(sizeof(long),REG_RSP,offset,USE_OFFSET,*(int *)&flt);
+		obp-=sizeof(long)+sizeof(long);
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long)+sizeof(long);
+	}
+	else if(type==DEF_INT64||type==DEF_QWORD||IsPtrType(type)){
+		if(type==DEF_PTR_BYTE&&lpCalcIndex==LITERAL_STRING){
+			//文字列定数のとき
+
+			char *temp;
+			temp=(char *)i64data;
+			i2=AddDataTable(temp,lstrlen(temp));
+			HeapDefaultFree(temp);
+
+			//mov rax,i2
+			op_mov_RV(sizeof(_int64),REG_RAX,i2);
+			obp-=sizeof(long);
+			pobj_DataTableSchedule->add();
+			obp+=sizeof(long);
+
+			//mov qword ptr[rsp+offset],rax
+			op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			if(i64data&0xFFFFFFFF00000000){
+				//mov rax,i64data
+				op_mov64_ToReg(REG_RAX,i64data);
+
+				//mov qword ptr[rsp+offset],rax
+				op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32);
+				obp-=sizeof(long);
+				AddLocalVarAddrSchedule();
+				obp+=sizeof(long);
+			}
+			else{
+				//mov qword ptr[rsp+offset],value
+				op_mov_MV(sizeof(_int64),REG_RSP,offset,USE_OFFSET,(int)i64data);
+				obp-=sizeof(long)+sizeof(long);
+				AddLocalVarAddrSchedule();
+				obp+=sizeof(long)+sizeof(long);
+			}
+		}
+	}
+	else if(type==DEF_LONG||type==DEF_DWORD){
+		//mov dword ptr[rsp+offset],value
+		op_mov_MV(sizeof(long),REG_RSP,offset,USE_OFFSET,(int)i64data);
+		obp-=sizeof(long)+sizeof(long);
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long)+sizeof(long);
+	}
+	else if(type==DEF_INTEGER||type==DEF_WORD){
+		//mov word ptr[rsp+offset],value
+		op_mov_MV(sizeof(short),REG_RSP,offset,USE_OFFSET,(int)i64data);
+		obp-=sizeof(long)+sizeof(short);
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long)+sizeof(short);
+	}
+	else if(type==DEF_CHAR||type==DEF_BYTE){
+		//mov byte ptr[rsp+offset],value
+		op_mov_MV(sizeof(char),REG_RSP,offset,USE_OFFSET,(int)i64data);
+		obp-=sizeof(long)+sizeof(char);
+		AddLocalVarAddrSchedule();
+		obp+=sizeof(long)+sizeof(char);
+	}
+	return 1;
+}
+
+
+void dim(char *Parameter,DWORD dwFlag){
+	extern BOOL bCompilingGlobal;
+	extern HANDLE hHeap;
+	int i2,i3,VarSize;
+
+	//構文を解析
+	char VarName[VN_SIZE];
+	int SubScripts[MAX_ARRAYDIM];
+	TYPEINFO TypeInfo;
+	char InitBuf[8192];
+	char ConstractParameter[VN_SIZE];
+	if(!GetDimentionFormat(Parameter,VarName,SubScripts,&TypeInfo,InitBuf,ConstractParameter))
+		return;
+
+	//タイプサイズを取得
+	int TypeSize;
+	TypeSize=GetTypeSize(TypeInfo.type,TypeInfo.u.lpIndex);
+
+	//定数と２重定義されていないかを調べる
+	if(GetConstHash(VarName)){
+		SetError(15,VarName,cp);
+		return;
+	}
+
+	if(dwFlag&DIMFLAG_STATIC){
+		if(bCompilingGlobal){
+			SetError(60,NULL,cp);
+			return;
+		}
+
+		/////////////////////
+		// Static変数
+		// ※"Static.Object.Method.Variable"
+		/////////////////////
+
+		char temporary[VN_SIZE];
+		GetNowStaticVarFullName(VarName,temporary);
+
+		AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
+
+		/*
+		Note: 静的変数のコンストラクタ呼び出しは
+			_System_InitStaticLocalVariables関数内で一括して行う
+		*/
+	}
+	else{
+		if(bCompilingGlobal){
+			/////////////////////////
+			// グローバル変数
+			/////////////////////////
+
+			AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlag);
+		}
+		else{
+			/////////////////
+			// ローカル変数
+			/////////////////
+
+			for(i2=0;i2<MaxLocalVarNum;i2++){
+				if(LocalVar[i2].bLiving&&obj_LexScopes.GetNowLevel()==LocalVar[i2].ScopeLevel){
+					if(lstrcmp(LocalVar[i2].name,VarName)==0){
+						//２重定義のエラー
+						SetError(15,VarName,cp);
+						return;
+					}
+				}
+			}
+
+			LocalVar=(VARIABLE *)HeapReAlloc(hHeap,0,LocalVar,(MaxLocalVarNum+1)*sizeof(VARIABLE));
+
+			for(i2=1,i3=0;i3<255;i3++){
+				//配列要素数
+				LocalVar[MaxLocalVarNum].SubScripts[i3]=SubScripts[i3];
+
+				if(SubScripts[i3]==-1) break;
+				i2*=SubScripts[i3]+1;
+			}
+			VarSize=TypeSize*i2;
+			if(VarSize%8) VarSize+=8-(VarSize%8);
+
+			//変数データを追加
+			lstrcpy(LocalVar[MaxLocalVarNum].name,VarName);
+			LocalVar[MaxLocalVarNum].fRef=0;
+			if(SubScripts[0]==-1) LocalVar[MaxLocalVarNum].bArray=0;
+			else LocalVar[MaxLocalVarNum].bArray=1;
+			LocalVar[MaxLocalVarNum].type=TypeInfo.type;
+			LocalVar[MaxLocalVarNum].u.index=TypeInfo.u.lpIndex;
+			AllLocalVarSize+=VarSize;
+			LocalVar[MaxLocalVarNum].offset=AllLocalVarSize;
+
+			//レキシカルスコープ
+			LocalVar[MaxLocalVarNum].ScopeLevel=obj_LexScopes.GetNowLevel();
+			LocalVar[MaxLocalVarNum].ScopeStartAddress=obj_LexScopes.GetStartAddress();
+			LocalVar[MaxLocalVarNum].bLiving=TRUE;
+
+			if(InitBuf[0]){
+				InitLocalVar(-LocalVar[MaxLocalVarNum].offset,
+					LocalVar[MaxLocalVarNum].type,
+					LocalVar[MaxLocalVarNum].u.index,
+					LocalVar[MaxLocalVarNum].SubScripts,
+					InitBuf);
+			}
+			else{
+				//0初期化未完成
+			}
+
+			MaxLocalVarNum++;
+		}
+
+		//コンストラクタ呼び出し
+		if(TypeInfo.type==DEF_OBJECT&&(dwFlag&DIMFLAG_NONCALL_CONSTRACTOR)==0){
+			CallConstractor(VarName,SubScripts,TypeInfo,ConstractParameter);
+		}
+	}
+
+	if(TypeInfo.type==DEF_OBJECT){
+		if(TypeInfo.u.pobj_Class->IsHoldAbstractFunction()){
+			//抽象クラスだったとき
+			SetError(125,TypeInfo.u.pobj_Class->name,cp);
+		}
+	}
+}
+void OpcodeDim(char *Parameter,DWORD dwFlag){
+	int i,i2,i3,IsStr=0;
+	char temporary[8192];
+
+	for(i=0,i2=0;;i++,i2++){
+		if(Parameter[i]=='\"') IsStr^=1;
+		if(Parameter[i]=='('&&IsStr==0){
+			i3=GetStringInPare(temporary+i2,Parameter+i);
+			i+=i3-1;
+			i2+=i3-1;
+			continue;
+		}
+		if(Parameter[i]=='['&&IsStr==0){
+			i3=GetStringInBracket(temporary+i2,Parameter+i);
+			i+=i3-1;
+			i2+=i3-1;
+			continue;
+		}
+		if((Parameter[i]==','&&IsStr==0)||
+			Parameter[i]=='\0'){
+			temporary[i2]=0;
+
+			dim(temporary,dwFlag);
+
+			if(Parameter[i]=='\0') break;
+			i2=-1;
+			continue;
+		}
+		temporary[i2]=Parameter[i];
+	}
+}
+
+void SetVarPtrToReg(int reg,RELATIVE_VAR *pRelativeVar){
+	if(!IsGeneralReg(reg)) SetError(300,NULL,cp);
+
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add r11,offset
+			OpBuffer[obp++]=(char)0x49;
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC3;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+
+			//mov reg,r11
+			op_mov64_ToReg_FromReg(reg,REG_R11);
+		}
+		else{
+			//mov reg,offset
+			op_mov64_ToReg(reg,(int)pRelativeVar->offset);
+			obp-=sizeof(long);
+			pobj_GlobalVarSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add r11,offset
+			OpBuffer[obp++]=(char)0x49;
+			OpBuffer[obp++]=(char)0x81;
+			OpBuffer[obp++]=(char)0xC3;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+
+			//add r11,rsp
+			op_add64_reg(REG_R11,REG_RSP);
+
+			//mov reg,r11
+			op_mov64_ToReg_FromReg(reg,REG_R11);
+		}
+		else{
+			//mov reg,rsp
+			op_mov64_ToReg_FromReg(reg,REG_RSP);
+
+			//add reg,offset
+			op_add64_value(reg,(int)pRelativeVar->offset);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		if(pRelativeVar->bOffsetOffset){
+			//add r11,qword ptr[rsp+offset]
+			OpBuffer[obp++]=(char)0x4C;
+			OpBuffer[obp++]=(char)0x03;
+			OpBuffer[obp++]=(char)0x9C;
+			OpBuffer[obp++]=(char)0x24;
+			*((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+		else{
+			//mov r11,qword ptr[rsp+offset]
+			op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
+			obp-=sizeof(long);
+			AddLocalVarAddrSchedule();
+			obp+=sizeof(long);
+		}
+
+		goto directmem;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+directmem:
+		//mov reg,r11
+		op_mov64_ToReg_FromReg(reg,REG_R11);
+	}
+}
Index: /BasicCompiler64/Debug.cpp
===================================================================
--- /BasicCompiler64/Debug.cpp	(revision 3)
+++ /BasicCompiler64/Debug.cpp	(revision 3)
@@ -0,0 +1,677 @@
+#include "../BasicCompiler_Common/common.h"
+#include "opcode.h"
+
+ULONG_PTR rva_to_real(DWORD p){
+	extern DWORD ImageBase;
+	extern int MemPos_CodeSection;
+	return p+ImageBase+MemPos_CodeSection;
+}
+
+void ShowVarList(DEBUG_EVENT *pde,BOOL bExit){
+	extern DWORD ImageBase;
+	extern DWORD _DebugSys_dwThreadID[256];
+	extern HANDLE hDebugProcess;
+	extern int MemPos_RWSection;
+	SIZE_T stAccBytes;
+	ReadProcessMemory(hDebugProcess,
+		(void *)(LONG_PTR)(ImageBase+MemPos_RWSection),
+		_DebugSys_dwThreadID,sizeof(DWORD)*256,&stAccBytes);
+
+	//デバッグダイアログを表示
+	extern HINSTANCE hInst;
+	extern HWND hMainDlg;
+	extern HWND hDebugWnd;
+	extern DWORD dwStepRun;
+	dwStepRun=0;
+	if(!hDebugWnd) SendMessage(hMainDlg,WM_SHOWVARLIST,0,pde->dwThreadId);
+	else InitVarList(pde->dwThreadId);
+
+	if(bExit){
+		//"中断"
+		SetDlgItemText(hMainDlg,IDOK,STRING_CLOSE);
+
+		extern HWND hDebuggerToolbar;
+		SendMessage(hDebuggerToolbar,TB_SETSTATE,IDC_DEBUG_START,TBSTATE_INDETERMINATE);
+		SendMessage(hDebuggerToolbar,TB_SETSTATE,IDC_DEBUG_STEPOVER,TBSTATE_INDETERMINATE);
+		SendMessage(hDebuggerToolbar,TB_SETSTATE,IDC_DEBUG_STEPIN,TBSTATE_INDETERMINATE);
+	}
+	else{
+		//"継続"
+		SetDlgItemText(hDebugWnd,IDCANCEL,STRING_CONTINUE);
+	}
+	while(hDebugWnd&&dwStepRun==0) Sleep(1);
+}
+void DebugMessage(char *buffer){
+	extern HWND hMainDlg;
+	int pos;
+
+	if(!IsWindowEnabled(GetDlgItem(hMainDlg,IDC_DEBUGLIST))){
+		SetDlgItemText(hMainDlg,IDC_DEBUGLIST,"");
+		EnableWindow(GetDlgItem(hMainDlg,IDC_DEBUGLIST),1);
+	}
+
+	pos=GetWindowTextLength(GetDlgItem(hMainDlg,IDC_DEBUGLIST));
+	SendDlgItemMessage(hMainDlg,IDC_DEBUGLIST,EM_SETSEL,pos,pos);
+	SendDlgItemMessage(hMainDlg,IDC_DEBUGLIST,EM_REPLACESEL,0,(LPARAM)buffer);
+}
+SUBINFO *GetSubFromObp(ULONG_PTR pos){
+	extern SUBINFO **ppSubHash;
+	SUBINFO *psi;
+	int i2;
+
+	for(i2=0;i2<MAX_HASH;i2++){
+		psi=ppSubHash[i2];
+		while(psi){
+			if(rva_to_real(psi->CompileAddress) <= pos  &&
+				pos < rva_to_real(psi->EndOpAddr))
+				return psi;
+
+			psi=psi->pNextData;
+		}
+	}
+	return 0;
+}
+void ReleaseSingleStep(HANDLE hThread,CONTEXT *pContext){
+	//以前にシングルステップ実行をした場合
+	extern HANDLE hDebugProcess;
+	extern DWORD *lpdwDebugThreadID;
+	extern HANDLE *lphDebugThread;
+	extern int DebugThreadNum;
+	extern DWORD ImageBase;
+	extern int MemPos_CodeSection;
+	extern int FileSize_CodeSection;
+	extern char *OpBuffer;
+	int i2;
+	SIZE_T stAccBytes;
+
+	//シングルステップOFF
+	WriteProcessMemory(hDebugProcess,
+		(void *)(LONG_PTR)(ImageBase+MemPos_CodeSection),
+		OpBuffer,FileSize_CodeSection,&stAccBytes);
+
+	if(ImageBase+MemPos_CodeSection <= pContext->Rip &&
+		pContext->Rip < ImageBase+MemPos_CodeSection+FileSize_CodeSection){
+		//オリジナルコード内のみ、シングルステップ用の"int 3"を考慮
+		pContext->Rip--;
+		SetThreadContext(hThread,pContext);
+	}
+
+	//他のスレッドのサスペンドを解除
+	for(i2=0;i2<DebugThreadNum;i2++){
+		if(hThread!=lphDebugThread[i2])
+			ResumeThread(lphDebugThread[i2]);
+	}
+}
+void SetThreadId_ToProcessMemory(DWORD dwThreadId,BOOL bReset){
+	extern DWORD ImageBase;
+	extern int MemPos_RWSection;
+	extern HANDLE hDebugProcess;
+
+	DWORD array_dwData[256];
+	SIZE_T stAccBytes;
+
+	ReadProcessMemory(hDebugProcess,
+		(void *)(LONG_PTR)(ImageBase+MemPos_RWSection),
+		array_dwData,sizeof(DWORD)*256,&stAccBytes);
+
+	int i2;
+	for(i2=0;i2<256;i2++){
+		if(bReset==0){
+			if(array_dwData[i2]==0){
+				array_dwData[i2]=dwThreadId;
+				break;
+			}
+		}
+		else{
+			if(array_dwData[i2]==dwThreadId){
+				array_dwData[i2]=0;
+				break;
+			}
+		}
+	}
+
+	WriteProcessMemory(hDebugProcess,
+		(void *)(LONG_PTR)(ImageBase+MemPos_RWSection),
+		array_dwData,sizeof(DWORD)*256,&stAccBytes);
+}
+void AddThread(DWORD dwThreadId, HANDLE hThread){
+	extern HANDLE hDebugProcess;
+	extern DWORD ImageBase;
+	extern int MemPos_RWSection;
+
+	//プロセスIDをターゲットアプリのメモリに書き込む
+	SetThreadId_ToProcessMemory(dwThreadId,0);
+
+	extern int DebugThreadNum;
+
+	//デバッグID
+	extern DWORD *lpdwDebugThreadID;
+	lpdwDebugThreadID=(DWORD *)HeapReAlloc(hHeap,0,lpdwDebugThreadID,(DebugThreadNum+1)*sizeof(DWORD));
+	lpdwDebugThreadID[DebugThreadNum]=dwThreadId;
+
+	//デバッグハンドル
+	extern HANDLE *lphDebugThread;
+	lphDebugThread=(HANDLE *)HeapReAlloc(hHeap,0,lphDebugThread,(DebugThreadNum+1)*sizeof(HANDLE));
+	lphDebugThread[DebugThreadNum]=hThread;
+
+	//カウンタ
+	DebugThreadNum++;
+}
+void ReadOpBuffer(){
+	extern int FileSize_CodeSection;
+
+	extern char *OpBuffer;
+	if(OpBuffer) HeapDefaultFree(OpBuffer);
+	OpBuffer=(char *)HeapAlloc(hHeap,0,FileSize_CodeSection);
+
+	extern HANDLE hDebugProcess;
+	extern DWORD ImageBase;
+	extern int MemPos_CodeSection;
+	SIZE_T stAccByte;
+	ReadProcessMemory(hDebugProcess,(void *)(LONG_PTR)(ImageBase+MemPos_CodeSection),OpBuffer,FileSize_CodeSection,&stAccByte);
+}
+char *MakeSingleStepCode(){
+	extern DWORD ImageBase;
+	extern int MemPos_CodeSection;
+
+	extern int FileSize_CodeSection;
+	char *buffer;
+	buffer=(char *)HeapAlloc(hHeap,0,FileSize_CodeSection);
+
+	extern char *OpBuffer;
+	memcpy(buffer,OpBuffer,FileSize_CodeSection);
+
+	extern int MaxLineInfoNum;
+	extern LINEINFO *pLineInfo;
+	int i2;
+	for(i2=0;i2<MaxLineInfoNum;i2++){
+		if(!(
+			pLineInfo[i2].dwCodeType&CODETYPE_SYSTEMPROC||
+			pLineInfo[i2].dwCodeType&CODETYPE_DEBUGPROC
+			)){
+			//int 3
+			buffer[pLineInfo[i2].TopObp]=(char)0xCC;
+		}
+	}
+
+	return buffer;
+}
+void DeleteDebugInfo(void);
+void DebugProgram(void){
+	extern HWND hMainDlg;
+	extern char OutputFileName[MAX_PATH];
+	extern DWORD ImageBase;
+	extern int MemPos_CodeSection;
+	extern int MemPos_RWSection;
+	extern int FileSize_CodeSection;
+	extern char *OpBuffer;
+	int i2,i3,i4;
+	char temporary[VN_SIZE];
+	DWORD dwData[256];
+	SIZE_T stAccBytes;
+
+	extern BOOL bDll;
+	char ExeFilePathForDll[MAX_PATH];
+	if(bDll){
+		//DLLをデバッグする場合
+		extern char szDebugExeForDll[1024];
+		if(szDebugExeForDll[0]){
+			//指定済み
+			lstrcpy(ExeFilePathForDll,szDebugExeForDll);
+		}
+		else{
+			//ユーザーに実行ファイルを選択させる
+			extern HWND hOwnerEditor;
+			extern LPSTR ExeFileFilter;
+			if(!GetFilePathDialog(hOwnerEditor,ExeFilePathForDll,ExeFileFilter,"デバッグ用の実行可能ファイルを指定してください。",1)) return;
+		}
+	}
+
+	//"中断"
+	SetDlgItemText(hMainDlg,IDOK,STRING_STOP);
+
+	//スレッド情報
+	extern DWORD *lpdwDebugThreadID;
+	extern HANDLE *lphDebugThread;
+	extern int DebugThreadNum;
+	lpdwDebugThreadID=(DWORD *)HeapAlloc(hHeap,0,1);
+	lphDebugThread=(HANDLE *)HeapAlloc(hHeap,0,1);
+	DebugThreadNum=0;
+
+	//カレントディレクトリを設定
+	extern char BasicCurDir[MAX_PATH];
+	SetCurrentDirectory(BasicCurDir);
+
+	SendDlgItemMessage(hMainDlg,IDC_SHOWERROR,BM_SETCHECK,BST_UNCHECKED,0);
+	SendDlgItemMessage(hMainDlg,IDC_SHOWDEBUG,BM_SETCHECK,BST_CHECKED,0);
+	SendMessage(hMainDlg,WM_COMMAND,IDC_SHOWDEBUG,0);
+
+
+
+	extern BOOL bAttach;
+	if(bAttach){
+		extern DWORD dwAttachProcessId;
+
+		//プロセスIDを元にハンドルを取得
+		HANDLE hProcess;
+		hProcess=OpenProcess(PROCESS_ALL_ACCESS,0,dwAttachProcessId);
+		if(!hProcess) goto AttachError;
+
+		//そのプロセスにおける実行モジュールのインスタンスハンドルを取得
+		HINSTANCE hModule;
+		DWORD cbReturned;
+		if(!EnumProcessModules( hProcess, &hModule, sizeof(HINSTANCE), &cbReturned )) goto AttachError;
+
+		//実行ファイル名を取得
+		GetModuleFileNameEx(hProcess,hModule,OutputFileName,MAX_PATH);
+
+		CloseHandle(hProcess);
+
+
+		//デバッグ用の拡張情報を取得
+		ReadDebugFile();
+
+		if(!DebugActiveProcess(dwAttachProcessId)){
+AttachError:
+			DebugMessage("アタッチに失敗しました。");
+			return;
+		}
+	}
+	else{
+		if(!ReadDebugFile()){
+			extern BOOL bDebugCompile;
+			bDebugCompile=1;
+			OutputExe();
+			ReadDebugFile();
+		}
+
+		//スレッドを生成
+		STARTUPINFO si;
+		PROCESS_INFORMATION pi;
+		memset(&si,0,sizeof(STARTUPINFO));
+		si.cb=sizeof(STARTUPINFO);
+		if(!bDll){
+			//EXEファイルをデバッグ
+			CreateProcess(OutputFileName,"",NULL,NULL,0,NORMAL_PRIORITY_CLASS|DEBUG_ONLY_THIS_PROCESS,NULL,NULL,&si,&pi);
+		}
+		else{
+			//DLLファイルをデバッグ
+			CreateProcess(ExeFilePathForDll,"",NULL,NULL,0,NORMAL_PRIORITY_CLASS|DEBUG_ONLY_THIS_PROCESS,NULL,NULL,&si,&pi);
+		}
+
+		CloseHandle(pi.hProcess);
+		CloseHandle(pi.hThread);
+	}
+
+
+
+	extern BOOL bClipCompileView;
+	//"プログラムを実行しています（デバッグ中）"
+	MakeMessageText(temporary,STRING_DEBUGGING,0);
+	SetDlgItemText(hMainDlg,IDC_MESSAGE,temporary);
+	if(bClipCompileView) InvalidateRect(GetDlgItem(hMainDlg,IDC_PROGRESS),NULL,1);
+
+	char *SingleStepCodeBuffer;
+	SingleStepCodeBuffer=0;
+
+	SUBINFO *psi;
+
+	extern DWORD dwStepRun;
+	BOOL bFirstBreak=1;
+	CONTEXT Context;
+	HANDLE hMainThread;
+	extern HANDLE hDebugProcess;
+
+	DEBUG_EVENT de;
+	memset(&de,0,sizeof(DEBUG_EVENT));
+
+	while(WaitForDebugEvent(&de,INFINITE)){
+		if(de.dwDebugEventCode==LOAD_DLL_DEBUG_EVENT){
+			WCHAR wcBuf[MAX_PATH];
+			LONG_PTR lpData;
+
+			wcBuf[0]=0;
+			temporary[0]=0;
+
+			if(de.u.LoadDll.lpImageName){
+				if(!ReadProcessMemory(hDebugProcess,de.u.LoadDll.lpImageName,&lpData,sizeof(LONG_PTR),&stAccBytes)){
+					sprintf(temporary,"ロードされたDLLの名前取得（アドレス:&H%08x）に失敗しました。\r\n",(DWORD)(LONG_PTR)de.u.LoadDll.lpImageName);
+					DebugMessage(temporary);
+					goto NextContinue;
+				}
+				if(!ReadProcessMemory(hDebugProcess,(void *)lpData,wcBuf,sizeof(WCHAR)*MAX_PATH,&stAccBytes)){
+					sprintf(temporary,"ロードされたDLLの名前取得（アドレス:&H%08x）に失敗しました。\r\n",lpData);
+					DebugMessage(temporary);
+					goto NextContinue;
+				}
+
+				if(de.dwThreadId,de.u.LoadDll.fUnicode)
+					WideCharToMultiByte(CP_ACP,0,wcBuf,-1,temporary,255,NULL,NULL);
+				else lstrcpy(temporary,(char *)wcBuf);
+			}
+			else{
+				//アタッチした場合
+				GetModuleFileNameEx(hDebugProcess,(HINSTANCE)de.u.LoadDll.lpBaseOfDll,temporary,MAX_PATH);
+			}
+
+			char temp2[1024];
+			sprintf(temp2,"\"%s\" をロードしました。\r\n",temporary);
+			DebugMessage(temp2);
+
+			if(lstrcmpi(temporary, OutputFileName)==0){
+				ImageBase=(DWORD)(LONG_PTR)de.u.LoadDll.lpBaseOfDll;
+				AddThread(de.dwThreadId,hMainThread);
+
+				//実行用コードバッファを読み取る
+				ReadOpBuffer();
+
+				//シングルステップ用のコードバッファを作成
+				SingleStepCodeBuffer=MakeSingleStepCode();
+			}
+		}
+
+		else if(de.dwDebugEventCode==CREATE_PROCESS_DEBUG_EVENT){
+			hDebugProcess=de.u.CreateProcessInfo.hProcess;
+			hMainThread=de.u.CreateProcessInfo.hThread;
+			if(bDll) goto NextContinue;
+
+			//実行用コードバッファを読み取る
+			ReadOpBuffer();
+
+			//シングルステップ用のコードバッファを作成
+			SingleStepCodeBuffer=MakeSingleStepCode();
+
+			AddThread(de.dwThreadId,de.u.CreateProcessInfo.hThread);
+		}
+		else if(de.dwDebugEventCode==CREATE_THREAD_DEBUG_EVENT){
+			AddThread(de.dwThreadId,de.u.CreateThread.hThread);
+		}
+		else if(de.dwDebugEventCode==EXIT_PROCESS_DEBUG_EVENT){
+			//プロセスIDをターゲットアプリのメモリから消去
+			SetThreadId_ToProcessMemory(de.dwThreadId,1);
+
+			//"スレッド(&H%X)はコード &H%X で終了しました。\r\n"
+			sprintf(temporary,STRING_DEBUG_THREADFINISH,de.dwThreadId,de.u.ExitProcess.dwExitCode);
+			DebugMessage(temporary);
+
+			//"デバッグは正常に終了しました。"
+			MakeMessageText(temporary,STRING_DEBUG_FINISH,0);
+			SetDlgItemText(hMainDlg,IDC_MESSAGE,temporary);
+			if(bClipCompileView) InvalidateRect(GetDlgItem(hMainDlg,IDC_PROGRESS),NULL,1);
+
+			//"プログラムはコード &H%X で終了しました。\r\n"
+			sprintf(temporary,STRING_DEBUG_PROCESSFINISH,de.u.ExitProcess.dwExitCode);
+			DebugMessage(temporary);
+			break;
+		}
+		else if(de.dwDebugEventCode==EXIT_THREAD_DEBUG_EVENT){
+			//プロセスIDをターゲットアプリのメモリから消去
+			SetThreadId_ToProcessMemory(de.dwThreadId,1);
+
+			//"スレッド(&H%X)はコード &H%X で終了しました。\r\n"
+			sprintf(temporary,STRING_DEBUG_THREADFINISH,de.dwThreadId,de.u.ExitThread.dwExitCode);
+			DebugMessage(temporary);
+
+			//以前にシングルステップ実行をした場合
+			//ステップ実行を解除
+			if(dwStepRun){
+				extern HWND hDebugWnd;
+				if(hDebugWnd) SendMessage(hDebugWnd,WM_VARLIST_CLOSE,0,0);
+
+				for(i4=0;i4<DebugThreadNum;i4++){
+					if(de.dwThreadId==lpdwDebugThreadID[i4]) break;
+				}
+				Context.ContextFlags=CONTEXT_CONTROL;
+				GetThreadContext(lphDebugThread[i4],&Context);
+
+				ReleaseSingleStep(lphDebugThread[i4],&Context);
+			}
+
+			for(i2=0;i2<DebugThreadNum;i2++){
+				if(lpdwDebugThreadID[i2]==de.dwThreadId){
+					DebugThreadNum--;
+					for(;i2<DebugThreadNum;i2++){
+						lpdwDebugThreadID[i2]=lpdwDebugThreadID[i2+1];
+						lphDebugThread[i2]=lphDebugThread[i2+1];
+					}
+					break;
+				}
+			}
+		}
+		else if(de.dwDebugEventCode==OUTPUT_DEBUG_STRING_EVENT){
+			ReadProcessMemory(hDebugProcess,(void *)de.u.DebugString.lpDebugStringData,temporary,de.u.DebugString.nDebugStringLength,&stAccBytes);
+			DebugMessage(temporary);
+		}
+		else if(de.dwDebugEventCode==EXCEPTION_DEBUG_EVENT){
+
+			//初回例外は無視
+			if(bFirstBreak){
+				bFirstBreak=0;
+				goto NextContinue;
+			}
+
+			if(de.u.Exception.ExceptionRecord.ExceptionCode==STATUS_INVALID_HANDLE){
+
+				//"スレッド(&H%X)でハンドル違反がありました(EPI=&H%08X)。\r\n"
+				sprintf(temporary,STRING_DEBUG_THREAD_INVALID_HANDLE,de.dwThreadId,(LONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress);
+				DebugMessage(temporary);
+
+				MessageBeep(MB_ICONEXCLAMATION);
+				ShowVarList(&de,1);
+				break;
+			}
+			if(de.u.Exception.ExceptionRecord.ExceptionCode==EXCEPTION_ACCESS_VIOLATION){
+
+				//"スレッド(&H%X)でアクセス違反がありました(EPI=&H%08X)。\r\n"
+				sprintf(temporary,STRING_DEBUG_THREAD_ACCESSVIOLATION,de.dwThreadId,(LONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress);
+				DebugMessage(temporary);
+
+				MessageBeep(MB_ICONEXCLAMATION);
+				ShowVarList(&de,1);
+				break;
+			}
+			else if(de.u.Exception.ExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT){
+				i3=dwStepRun;
+
+				for(i4=0;i4<DebugThreadNum;i4++){
+					if(de.dwThreadId==lpdwDebugThreadID[i4]) break;
+				}
+				Context.ContextFlags=CONTEXT_CONTROL;
+				GetThreadContext(lphDebugThread[i4],&Context);
+
+				if(i3==0||
+					i3&&(!(ImageBase+MemPos_CodeSection<=Context.Rip&&Context.Rip<ImageBase+MemPos_CodeSection+FileSize_CodeSection))
+					){
+					//"スレッド(&H%X)のブレーク ポイント(EPI=&H%08X)。\r\n"
+					sprintf(temporary,STRING_DEBUG_BREAKPOINT,de.dwThreadId,(LONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress);
+					DebugMessage(temporary);
+				}
+
+				ShowVarList(&de,0);
+
+				//以前にシングルステップ実行をした場合
+				//ステップ実行を解除
+				if(i3) ReleaseSingleStep(lphDebugThread[i4],&Context);
+
+				if(dwStepRun){
+					//新たにシングルステップを行う場合
+
+					if(ImageBase+MemPos_CodeSection <= Context.Rip &&
+						Context.Rip < ImageBase+MemPos_CodeSection+FileSize_CodeSection){
+						//Debug命令語が続く場合はシングルステップは不要になるので、無効にする
+						//（オリジナルコード内のみ）
+						if(OpBuffer[Context.Rip-ImageBase-MemPos_CodeSection]==(char)0xCC)
+							dwStepRun=0;
+					}
+					if(dwStepRun==1){
+						//ステップイン
+StepIn:
+						//シングルステップON
+						WriteProcessMemory(hDebugProcess,
+							(void *)(LONG_PTR)(ImageBase+MemPos_CodeSection),
+							SingleStepCodeBuffer,FileSize_CodeSection,&stAccBytes);
+
+						//次の命令語のブレーク命令は解除しておく（シングルステップ実行後のみ）
+						//（オリジナルコード内のみ）
+						if(i3&&ImageBase+MemPos_CodeSection<=Context.Rip&&Context.Rip<ImageBase+MemPos_CodeSection+FileSize_CodeSection)
+							WriteProcessMemory(hDebugProcess,(void *)Context.Rip,&OpBuffer[Context.Rip-ImageBase-MemPos_CodeSection],1,&stAccBytes);
+
+						//他のスレッドを一時中断
+						for(i4=0;i4<DebugThreadNum;i4++){
+							if(de.dwThreadId!=lpdwDebugThreadID[i4])
+								SuspendThread(lphDebugThread[i4]);
+						}
+					}
+					else if(dwStepRun==2){
+						//ステップオーバー
+
+						BOOL bRet;
+						bRet=ReadProcessMemory(hDebugProcess,
+							(void *)Context.Rip,
+							temporary,
+							5,
+							&stAccBytes);
+						if(!bRet) MessageBox(hMainDlg,"プロセスメモリーの読み込みに失敗","error",MB_OK);
+
+						extern SUBINFO *pSub_DebugSys_EndProc;
+						if((BYTE)temporary[0]==0xE8&&
+							*((long *)(temporary+1))+5==(long)rva_to_real(pSub_DebugSys_EndProc->CompileAddress)-(long)Context.Rip){
+							//プロシージャの終端位置の場合はステップインを行う
+							goto StepIn;
+						}
+
+						//スレッドのプロシージャ実行状況を取得
+						bRet=ReadProcessMemory(hDebugProcess,
+							(void *)(LONG_PTR)(ImageBase+MemPos_RWSection),
+							dwData,sizeof(DWORD)*256,&stAccBytes);
+						if(!bRet) MessageBox(hMainDlg,"プロセスメモリーの読み込みに失敗","error",MB_OK);
+						for(i2=0;;i2++){
+							if(dwData[i2]==de.dwThreadId) break;
+						}
+						GetDebugThreadInfo(i2);
+
+						extern int GlobalOpBufferSize;
+						extern DEBUG_PROCINFO dpi;
+						if(ImageBase+MemPos_CodeSection<=dpi.lpqwObp[dpi.num]&&
+							dpi.lpqwObp[dpi.num]<ImageBase+MemPos_CodeSection+GlobalOpBufferSize){
+							//シングルステップON
+							WriteProcessMemory(hDebugProcess,
+								(void *)(LONG_PTR)(ImageBase+MemPos_CodeSection),
+								SingleStepCodeBuffer,
+								GlobalOpBufferSize,
+								&stAccBytes);
+						}
+						else{
+							//プロシージャを識別
+							psi=GetSubFromObp(dpi.lpqwObp[dpi.num]);
+
+							//シングルステップON
+							WriteProcessMemory(hDebugProcess,
+								(void *)(LONG_PTR)rva_to_real(psi->CompileAddress),
+								SingleStepCodeBuffer+psi->CompileAddress,
+								psi->EndOpAddr-psi->CompileAddress,
+								&stAccBytes);
+						}
+						DeleteDebugThreadInfo();
+
+						//次の命令語のブレーク命令は解除しておく（シングルステップ実行後のみ）
+						//（オリジナルコード内のみ）
+						if(i3&&ImageBase+MemPos_CodeSection<=Context.Rip&&Context.Rip<ImageBase+MemPos_CodeSection+FileSize_CodeSection)
+							WriteProcessMemory(hDebugProcess,(void *)Context.Rip,&OpBuffer[Context.Rip-ImageBase-MemPos_CodeSection],1,&stAccBytes);
+
+						//他のスレッドを一時中断
+						for(i4=0;i4<DebugThreadNum;i4++){
+							if(de.dwThreadId!=lpdwDebugThreadID[i4])
+								SuspendThread(lphDebugThread[i4]);
+						}
+					}
+				}
+			}
+			else if(de.u.Exception.ExceptionRecord.ExceptionCode==STATUS_INTEGER_DIVIDE_BY_ZERO){
+				//"0による除算が行われました。スレッド(&H%X) ブレーク ポイント(EPI=&H%08X)。\r\n"
+				sprintf(temporary,STRING_DEBUG_DIVIDE_BY_ZERO,de.dwThreadId,(LONG_PTR)de.u.Exception.ExceptionRecord.ExceptionAddress);
+				DebugMessage(temporary);
+
+				ShowVarList(&de,1);
+				break;
+			}
+			else{
+				//"例外処理\ncode:%X"
+				sprintf(temporary,STRING_DEBUG_ERROR,de.u.Exception.ExceptionRecord.ExceptionCode);
+				MessageBox(0,temporary,"ActiveBasic Debug",0);
+			}
+		}
+NextContinue:
+		ContinueDebugEvent(de.dwProcessId,de.dwThreadId,DBG_CONTINUE);
+	}
+
+	//シングルステップ用のコードバッファを解放
+	if(SingleStepCodeBuffer) HeapDefaultFree(SingleStepCodeBuffer);
+
+	extern HWND hDebugWnd;
+	if(hDebugWnd) SendMessage(hDebugWnd,WM_COMMAND,IDCANCEL,0);
+
+	//スレッド情報を解放
+	HeapDefaultFree(lpdwDebugThreadID);
+	HeapDefaultFree(lphDebugThread);
+
+	//デバッグに利用した情報を解放（ReadDebugで確保した情報）
+	DeleteDebugInfo();
+
+	//"閉じる"
+	SetDlgItemText(hMainDlg,IDOK,STRING_CLOSE);
+}
+void DeleteDebugInfo(void){
+	int i2;
+
+	//インクルード情報を解放
+	extern INCLUDEFILEINFO IncludeFileInfo;
+	for(i2=0;i2<IncludeFileInfo.FilesNum;i2++)
+		HeapDefaultFree(IncludeFileInfo.ppFileNames[i2]);
+	HeapDefaultFree(IncludeFileInfo.ppFileNames);
+
+	//グローバル変数に関する情報を解放
+	extern VARIABLE *GlobalVar;
+	HeapDefaultFree(GlobalVar);
+
+	//ローカル変数に関する情報を解放
+	extern SUBINFO **ppSubHash;
+	SUBINFO *psi;
+	for(i2=0;i2<MAX_HASH;i2++){
+		psi=ppSubHash[i2];
+		while(psi){
+			if(psi->bCompile)
+				HeapDefaultFree(psi->pVar);
+
+			psi=psi->pNextData;
+		}
+	}
+
+	//列挙型に関するメモリを解放
+	DeleteEnumInfo();
+
+	//クラスに関するメモリを解放
+	delete pobj_DBClass;
+	pobj_DBClass=0;
+
+	//サブルーチン情報のメモリ解放
+	DeleteSubInfo();
+
+	//定数に関する情報を解放
+	DeleteConstInfo();
+
+	//ソースコードを解放
+	extern char *pBaseBuffer;
+	HeapDefaultFree(pBaseBuffer);
+
+	//コードと行番号の関係を解放
+	extern LINEINFO *pLineInfo;
+	HeapDefaultFree(pLineInfo);
+
+	//コードバッファを解放
+	extern char *OpBuffer;
+	if(OpBuffer){
+		HeapDefaultFree(OpBuffer);
+		OpBuffer=0;
+	}
+}
Index: /BasicCompiler64/FunctionValue.h
===================================================================
--- /BasicCompiler64/FunctionValue.h	(revision 3)
+++ /BasicCompiler64/FunctionValue.h	(revision 3)
@@ -0,0 +1,22 @@
+/* 関数定数 */
+
+//データ型変換
+#define FUNC_CUDBL	0x0210
+
+//文字列
+#define FUNC_LEN	0x031D
+
+//メモリ操作
+#define FUNC_VARPTR		0x0591
+
+//その他
+#define FUNC_ADDRESSOF	0x0619
+#define FUNC_SIZEOF		0x0620
+
+//ポインタ
+#define FUNC_GETDOUBLE	0x0630
+#define FUNC_GETSINGLE	0x0631
+#define FUNC_GETQWORD	0x0632
+#define FUNC_GETDWORD	0x0634
+#define FUNC_GETWORD	0x0635
+#define FUNC_GETBYTE	0x0636
Index: /BasicCompiler64/InsertOpcode.cpp
===================================================================
--- /BasicCompiler64/InsertOpcode.cpp	(revision 3)
+++ /BasicCompiler64/InsertOpcode.cpp	(revision 3)
@@ -0,0 +1,43 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+////////////////////////////////////
+// 再配置が必要なステートメント
+////////////////////////////////////
+
+
+
+int DimStatementInsertPoint;
+
+void InsertDimStatement_ToProcHead(char *lpszCommand){
+	char *temp_buffer;
+	int temp_size;
+
+	temp_size=obp-DimStatementInsertPoint;
+	temp_buffer=(char *)HeapAlloc(hHeap,0,temp_size);
+	memcpy(temp_buffer,OpBuffer+DimStatementInsertPoint,temp_size);
+
+	//各種スケジューリング情報を再配置
+	NativeBuffer_StaticRelocation(DimStatementInsertPoint,temp_size,0x10000000);
+
+	int back_obp;
+	back_obp=obp;
+	obp=DimStatementInsertPoint;
+
+	//OpcodeDim(lpszCommand,0);
+	OpBuffer[obp++]=(char)0xcc;
+	OpcodeDim(lpszCommand,DIMFLAG_NONCALL_CONSTRACTOR);
+
+	int obp_offset;
+	obp_offset=obp-DimStatementInsertPoint;
+
+	memcpy(OpBuffer+obp,temp_buffer,temp_size);
+
+	HeapDefaultFree(temp_buffer);
+
+	obp+=temp_size;
+
+
+	//各種スケジューリング情報を再配置
+	NativeBuffer_StaticRelocation(DimStatementInsertPoint+0x10000000,temp_size,obp_offset-0x10000000);
+}
Index: /BasicCompiler64/MakePeHdr.cpp
===================================================================
--- /BasicCompiler64/MakePeHdr.cpp	(revision 3)
+++ /BasicCompiler64/MakePeHdr.cpp	(revision 3)
@@ -0,0 +1,1691 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+
+////////////////////////////
+// 特殊関数の構造体ポインタ
+////////////////////////////
+SUBINFO
+	*pSub_System_StartupProgram,
+	*pSub_DebugSys_StartProc,
+	*pSub_DebugSys_EndProc,
+	*pSub_DebugSys_SaveContext,
+	*pSub_System_GetEip,
+	*pSub_System_InitDllGlobalVariables,
+	*pSub_System_InitStaticLocalVariables,
+	*pSub_System_Call_Destructor_of_GlobalObject,
+	*pSub_System_GetSp,
+	*pSub_pow,
+	*pSub_calloc,
+	*pSub_realloc,
+	*pSub_free;
+
+
+//////////////////////////////
+// 各セクションの位置とサイズ
+int FileSize_CodeSection,
+	FileSize_ExportSection,
+	FileSize_ImportSection,
+	FileSize_DataSection,
+	FileSize_RWSection,
+	FileSize_RSrcSection,
+	FileSize_RelocSection,
+	FileSize_DebugSection;
+int FilePos_CodeSection,
+	FilePos_ExportSection,
+	FilePos_ImportSection,
+	FilePos_DataSection,
+	FilePos_RWSection,
+	FilePos_RSrcSection,
+	FilePos_RelocSection,
+	FilePos_DebugSection;
+int MemSize_CodeSection,
+	MemSize_ExportSection,
+	MemSize_ImportSection,
+	MemSize_DataSection,
+	MemSize_RWSection,
+	MemSize_RSrcSection,
+	MemSize_RelocSection,
+	MemSize_DebugSection;
+int MemPos_CodeSection,
+	MemPos_ExportSection,
+	MemPos_ImportSection,
+	MemPos_DataSection,
+	MemPos_RWSection,
+	MemPos_RSrcSection,
+	MemPos_RelocSection,
+	MemPos_DebugSection;
+int bUse_CodeSection,
+	bUse_ExportSection,
+	bUse_ImportSection,
+	bUse_DataSection,
+	bUse_RWSection,
+	bUse_RSrcSection,
+	bUse_RelocSection,
+	bUse_DebugSection;
+
+int AddDataTable(char *buffer,int length){
+	extern HANDLE hHeap;
+	extern char *DataTable;
+	extern int DataTableSize;
+	int RetNum;
+
+	DataTable=(char *)HeapReAlloc(hHeap,0,DataTable,DataTableSize+length+1);
+	memcpy(DataTable+DataTableSize,buffer,length);
+	DataTable[DataTableSize+length]=0;
+
+	RetNum=DataTableSize; //ImageBase+MemPos_DataSectionが後に足される
+
+	DataTableSize+=length+1;
+
+	return RetNum;
+}
+
+
+void DebugVariable(void){
+	char temporary[255];
+	sprintf(temporary,"_DebugSys_dwThreadID[255]%c%cDWord",1,ESC_AS);
+	OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
+	sprintf(temporary,"_DebugSys_ProcNum[255]%c%cDWord",1,ESC_AS);
+	OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
+	sprintf(temporary,"_DebugSys_lplpObp[255]%c%c*ULONG_PTR",1,ESC_AS);
+	OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
+	sprintf(temporary,"_DebugSys_lplpSpBase[255]%c%c*ULONG_PTR",1,ESC_AS);
+	OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);
+}
+
+void Compile(void){
+	extern HWND hMainDlg;
+	extern HWND hOwnerEditor;
+	extern HANDLE hHeap;
+	extern BOOL bDebugCompile;
+	extern BOOL bDll;
+	extern DWORD ImageBase;
+	extern int obp_AllocSize;
+	extern char *basbuf;
+	extern char OutputFileName[MAX_PATH];
+	int i,i2,i3,i4,i5;
+	char temporary[MAX_PATH],*temp2;
+	HANDLE hFile;
+
+
+	//コードセクションのメモリ上の位置
+	MemPos_CodeSection=		0x1000;
+
+	//データセクションのメモリ上の位置（仮定）
+	MemPos_DataSection=		0x10000000;
+
+
+	//エクスポート セクションを利用するかどうか
+	if(bDll) bUse_ExportSection=1;
+	else bUse_ExportSection=0;
+
+
+	//////////////////
+	// データテーブル
+	extern char *DataTable;
+	extern int DataTableSize;
+	if(bDebugCompile){
+		DataTable=(char *)HeapAlloc(hHeap,0,2);
+		DataTable[0]=2;
+		DataTable[1]=0;
+		DataTableSize=2;
+	}
+	else{
+		DataTable=(char *)HeapAlloc(hHeap,0,1);
+		DataTableSize=0;
+	}
+
+
+	//////////////////////
+	// コード生成前の準備
+	//////////////////////
+
+	//重複エラー情報管理のメモリを確保（グローバル領域コンパイル用）
+	extern char **SynonymErrorWords;
+	extern int SynonymErrorNum;
+	SynonymErrorNum=0;
+	SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
+
+	//列挙体に関する情報の初期化
+	CEnumParent::InitEnum();
+
+	//列挙体からクラスコードを生成
+	char *temp;
+	temp=CEnumParent::GenerateCodes();
+	AddSourceCode(temp);
+	HeapDefaultFree(temp);
+
+	//関数ポインタ情報を初期化
+	extern PROCPTRINFO *pProcPtrInfo;
+	extern int ProcPtrInfoNum;
+	pProcPtrInfo=(PROCPTRINFO *)HeapAlloc(hHeap,0,1);
+	ProcPtrInfoNum=0;
+
+	//クラス名を取得（詳細情報はGetObjectClassInfoで取得）
+	//   GetSubInfo関数の中で参照されるオブジェクト名を事前に取得する。
+	//     ※オブジェクトの内容までは取得しない
+	pobj_DBClass=new CDBClass();
+	pobj_DBClass->InitNames();
+
+	//定数情報を取得
+	GetConstInfo();
+
+	//サブルーチン（ユーザー定義、DLL関数）の識別子、アドレスを取得
+	pobj_CompilingClass=0;
+	GetSubInfo();
+
+	//クラス情報を取得（※注 - GetSubInfoの後に呼び出す）
+	pobj_DBClass->GetObjectClassInfo();
+
+	//コードと行番号の関係
+	extern LINEINFO *pLineInfo;
+	extern int MaxLineInfoNum;
+	pLineInfo=(LINEINFO *)HeapAlloc(hHeap,0,1);
+	MaxLineInfoNum=0;
+
+
+	///////////////////////////
+	// 最低限必要な関数を取得
+	///////////////////////////
+	cp=-1;
+
+	if(pSub_System_StartupProgram=GetSubHash("_System_StartupProgram",1))
+		pSub_System_StartupProgram->bUse=1;
+
+	if(pSub_DebugSys_StartProc=GetSubHash("_DebugSys_StartProc",1))
+		pSub_DebugSys_StartProc->bUse=1;
+
+	if(pSub_DebugSys_EndProc=GetSubHash("_DebugSys_EndProc",1))
+		pSub_DebugSys_EndProc->bUse=1;
+
+	if(pSub_DebugSys_SaveContext=GetSubHash("_DebugSys_SaveContext",1))
+		pSub_DebugSys_SaveContext->bUse=1;
+
+	if(pSub_System_GetEip=GetSubHash("_System_GetEip",1)){
+		pSub_System_GetEip->bUse=1;
+		pSub_System_GetEip->bSystem=1;
+	}
+
+	if(pSub_System_InitDllGlobalVariables=GetSubHash("_System_InitDllGlobalVariables",1)){
+		pSub_System_InitDllGlobalVariables->bUse=1;
+		pSub_System_InitDllGlobalVariables->bSystem=1;
+	}
+
+	if(pSub_System_InitStaticLocalVariables=GetSubHash("_System_InitStaticLocalVariables",1)){
+		pSub_System_InitStaticLocalVariables->bUse=1;
+		pSub_System_InitStaticLocalVariables->bSystem=1;
+	}
+
+	if(pSub_System_Call_Destructor_of_GlobalObject=GetSubHash("_System_Call_Destructor_of_GlobalObject",1)){
+		pSub_System_Call_Destructor_of_GlobalObject->bUse=1;
+		pSub_System_Call_Destructor_of_GlobalObject->bSystem=1;
+	}
+
+	if(pSub_System_GetSp=GetSubHash("_System_GetSp",1)){
+		pSub_System_GetSp->bUse=1;
+		pSub_System_GetSp->bSystem=1;
+	}
+
+	if(pSub_pow=GetSubHash("pow",1))
+		pSub_pow->bUse=1;
+
+	if(pSub_calloc=GetSubHash("calloc",1))
+		pSub_calloc->bUse=1;
+
+	if(pSub_realloc=GetSubHash("realloc",1))
+		pSub_realloc->bUse=1;
+
+	if(pSub_free=GetSubHash("free",1))
+		pSub_free->bUse=1;
+
+
+
+	//データテーブルスケジュール
+	pobj_DataTableSchedule=new CSchedule();
+	pobj_DataTableSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
+
+	//インポートテーブルスケジュール
+	//※x64はRPI（実行中アドレス）からのオフセットになるため、再配置が不要
+	pobj_ImportAddrSchedule=new CImportAddrSchedule();
+
+	//プロシージャポインタスケジュール
+	pobj_SubAddrSchedule=new CSubAddrSchedule();
+
+	//グローバル変数アドレススケジュール
+	pobj_GlobalVarSchedule=new CSchedule();
+	pobj_GlobalVarSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
+
+	//グローバル変数の初期バッファ
+	extern BYTE *initGlobalBuf;
+	initGlobalBuf=(BYTE *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+
+	//リロケーション情報
+	pobj_Reloc=new CReloc();
+
+	//一時スケジューリングポインタ
+	pobj_TempSchedule=new CTempSchedule();
+
+	obp_AllocSize=8192*2;
+	OpBuffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,obp_AllocSize);
+	obp=0;
+
+	//レジスタのブロッキングを管理するためのオブジェクトを生成
+	pobj_BlockReg=new CBlockReg;
+
+
+
+	//////////////////////
+	// グローバル実行領域
+	//////////////////////
+
+	cp=-1;
+	extern BOOL bCompilingGlobal;
+	bCompilingGlobal=1;
+
+	if(!bDll){
+		//ラベル用のメモリを確保
+		extern LABEL *pLabelNames;
+		extern int MaxLabelNum;
+		pLabelNames=(LABEL *)HeapAlloc(hHeap,0,1);
+		MaxLabelNum=0;
+
+		//Gotoラベルスケジュール
+		extern GOTOLABELSCHEDULE *pGotoLabelSchedule;
+		extern int GotoLabelScheduleNum;
+		pGotoLabelSchedule=(GOTOLABELSCHEDULE *)HeapAlloc(hHeap,0,1);
+		GotoLabelScheduleNum=0;
+
+		//With情報のメモリを確保
+		extern WITHINFO WithInfo;
+		WithInfo.ppName=(char **)HeapAlloc(hHeap,0,1);
+		WithInfo.pWithCp=(int *)HeapAlloc(hHeap,0,1);
+		WithInfo.num=0;
+
+		//Continueアドレスを初期化
+		extern DWORD dwContinueAddress;
+		dwContinueAddress=-1;
+
+		//スタックフレーム管理用クラスを初期化
+		extern CStackFrame *pobj_sf;
+		pobj_sf=new CStackFrame();
+
+
+		//未完成
+		//OpBuffer[obp++]=(char)0xCC;
+
+		//レキシカルスコープ情報を初期化
+		obj_LexScopes.Init(obp);
+
+		//sub rsp,スタックフレームサイズ
+		int StackFrameSchedule;
+		op_sub_rsp(0xFFFFFFFF);
+		StackFrameSchedule=obp-sizeof(long);
+
+		if(bDebugCompile){
+			//デバッグ用の変数を定義
+			DebugVariable();
+		}
+
+		//GC用の変数を定義
+		InitGCVariables();
+
+		//_System_StartupProgramの呼び出し
+		op_call(pSub_System_StartupProgram);
+
+		//クラスに属する静的メンバを定義
+		CMember::InitStaticMember();
+
+		//グローバル実行領域をコンパイル開始
+		CompileBuffer(0,0);
+
+		//ラベル用のメモリを解放
+		for(i=0;i<MaxLabelNum;i++){
+			if(pLabelNames[i].pName) HeapDefaultFree(pLabelNames[i].pName);
+		}
+		HeapDefaultFree(pLabelNames);
+
+		//Goto未知ラベルスケジュールを解放
+		for(i=0;i<GotoLabelScheduleNum;i++){
+			if(pGotoLabelSchedule[i].pName){
+				SetError(6,pGotoLabelSchedule[i].pName,pGotoLabelSchedule[i].now_cp);
+				HeapDefaultFree(pGotoLabelSchedule[i].pName);
+			}
+			else{
+				sprintf(temporary,"%d",pGotoLabelSchedule[i].line);
+				SetError(6,temporary,pGotoLabelSchedule[i].now_cp);
+			}
+		}
+		HeapDefaultFree(pGotoLabelSchedule);
+
+
+		///////////////////////////////////////
+		// グローバル文字列変数の解放処理
+		///////////////////////////////////////
+
+		//call _System_Call_Destructor_of_GlobalObject
+		extern SUBINFO *pSub_System_Call_Destructor_of_GlobalObject;
+		op_call(pSub_System_Call_Destructor_of_GlobalObject);
+
+
+		//add rsp,スタックフレームサイズ
+		op_add64_value(REG_RSP,pobj_sf->GetFrameSize());
+
+		//xor rax,rax（raxを0に初期化する）
+		op_zero_reg(REG_RAX);
+
+		//ret
+		OpBuffer[obp++]=(char)0xC3;
+
+		//グローバル実行領域のコードサイズ
+		extern int GlobalOpBufferSize;
+		GlobalOpBufferSize=obp;
+
+		//スタックフレームスケジュール（subコマンドに渡す値）
+		*((long *)(OpBuffer+StackFrameSchedule))=pobj_sf->GetFrameSize();
+
+		//スタックフレームスケジュールを実行
+		pobj_sf->RunningSchedule();
+		delete pobj_sf;
+		pobj_sf=0;
+
+		//With情報のメモリを解放
+		for(i=0;i<WithInfo.num;i++){
+			SetError(22,"With",WithInfo.pWithCp[i]);
+			HeapDefaultFree(WithInfo.ppName[i]);
+		}
+		HeapDefaultFree(WithInfo.ppName);
+		HeapDefaultFree(WithInfo.pWithCp);
+	}
+	else{
+		////////////////
+		// DLLの場合
+		////////////////
+
+
+	}
+
+	//重複エラー情報管理のメモリを解放（グローバル領域用）
+	for(i=0;i<SynonymErrorNum;i++) HeapDefaultFree(SynonymErrorWords[i]);
+	HeapDefaultFree(SynonymErrorWords);
+
+
+	StepCompileProgress();
+
+
+	/////////////////////
+	// ローカル実行領域
+	/////////////////////
+
+	bCompilingGlobal=0;
+
+	//プロシージャをコンパイル開始
+	cp=0;
+	CompileLocal();
+
+	// 終了
+	///////////////////////
+
+	StepCompileProgress();
+
+
+	//レジスタのブロッキングを管理するためのオブジェクトを破棄
+	delete pobj_BlockReg;
+
+	//ネイティブコード生成はここまで
+	//////////////////////////////////////////////////////////
+
+
+
+	////////////////////////////////
+	// 使用するDLL関数のチェック
+	////////////////////////////////
+	for(i=0;i<MAX_HASH;i++){
+		extern DECLAREINFO **ppDeclareHash;
+		DECLAREINFO *pdi;
+		pdi=ppDeclareHash[i];
+		while(pdi){
+			if(pdi->bUse==0){
+				pdi=pdi->pNextData;
+				continue;
+			}
+
+			//エラーチェック
+			HINSTANCE hLib;
+			hLib=LoadLibrary(pdi->file);
+			if(!hLib){
+				extern char OutputFileName[MAX_PATH];
+				char temp2[MAX_PATH],temp3[MAX_PATH];
+				_splitpath(OutputFileName,temp2,temp3,NULL,NULL);
+				lstrcat(temp2,temp3);
+				lstrcpy(temp3,pdi->file);
+				GetFullPath(temp3,temp2);
+				hLib=LoadLibrary(temp3);
+
+				if(!hLib){
+					SetError(-106,pdi->file,pdi->pos);
+				}
+			}
+
+			if(hLib){
+				if(!GetProcAddress(hLib,pdi->alias)){
+					FreeLibrary(hLib);
+					SetError(-107,pdi->alias,pdi->pos);
+				}
+				FreeLibrary(hLib);
+			}
+
+			pdi=pdi->pNextData;
+		}
+	}
+
+
+
+	/////////////////////////////
+	// リソースデータを読み込む
+	/////////////////////////////
+	extern char ResourceFileName[MAX_PATH];
+	GetResourceData(ResourceFileName);
+
+
+	//////////////////////////////
+	// エクスポート情報（DLLのみ）
+	//////////////////////////////
+	IMAGE_EXPORT_DIRECTORY ImageExportDirectory;
+	DWORD *lpdwExportAddressTable;
+	DWORD *lpdwExportNamePointerTable;
+	WORD *lpwExportOrdinalTable;
+	char lpExportNames[8192];
+	int ExportNamesLength;
+	int ExportNum;
+	int DllMain_EntryPoint;
+
+	DllMain_EntryPoint=-1;
+	ExportNum=0;
+	ExportNamesLength=0;
+	lpdwExportAddressTable=(DWORD *)HeapAlloc(hHeap,0,1);
+	lpdwExportNamePointerTable=(DWORD *)HeapAlloc(hHeap,0,1);
+	lpwExportOrdinalTable=(WORD *)HeapAlloc(hHeap,0,1);
+
+	if(bUse_ExportSection){
+		_splitpath(OutputFileName,NULL,NULL,lpExportNames,temporary);
+		lstrcat(lpExportNames,temporary);
+		ExportNamesLength=lstrlen(lpExportNames)+1;
+
+		extern SUBINFO **ppSubHash;
+		SUBINFO *psi,*psi2;
+		while(1){
+			//辞書順にサーチ
+			temporary[0]=0;
+			for(i=0,psi2=0;i<MAX_HASH;i++){
+				psi=ppSubHash[i];
+				while(psi){
+					if(psi->bExport){
+						if(temporary[0]=='\0'){
+							lstrcpy(temporary,psi->name);
+							psi2=psi;
+						}
+						else{
+							i3=lstrlen(temporary);
+							i4=lstrlen(psi->name);
+							if(i3<i4) i3=i4;
+							if(memcmp(temporary,psi->name,i3)>0){
+								lstrcpy(temporary,psi->name);
+								psi2=psi;
+							}
+						}
+					}
+					psi=psi->pNextData;
+				}
+			}
+			if(psi2==0) break;
+			psi=psi2;
+
+			psi->bExport=0;
+
+			if(lstrcmpi(psi->name,"DllMain")==0)
+				DllMain_EntryPoint=psi->CompileAddress;
+
+			lpdwExportAddressTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportAddressTable,(ExportNum+1)*sizeof(DWORD));
+			lpdwExportAddressTable[ExportNum]=psi->CompileAddress;
+
+			lpdwExportNamePointerTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportNamePointerTable,(ExportNum+1)*sizeof(DWORD));
+			lpdwExportNamePointerTable[ExportNum]=ExportNamesLength;
+
+			lpwExportOrdinalTable=(WORD *)HeapReAlloc(hHeap,0,lpwExportOrdinalTable,(ExportNum+1)*sizeof(WORD));
+			lpwExportOrdinalTable[ExportNum]=ExportNum;
+
+			lstrcpy(lpExportNames+ExportNamesLength,psi->name);
+			ExportNamesLength+=lstrlen(lpExportNames+ExportNamesLength)+1;
+
+			ExportNum++;
+		}
+		for(i=0;i<ExportNum;i++){
+			lpdwExportNamePointerTable[i]+=
+				sizeof(IMAGE_EXPORT_DIRECTORY)+	//エクスポートディレクトリテーブルを飛び越す
+				ExportNum*sizeof(DWORD)+		//エクスポート アドレス テーブルを飛び越す
+				ExportNum*sizeof(DWORD)+		//エクスポート名ポインタ テーブルを飛び越す
+				ExportNum*sizeof(WORD);			//エクスポート序数テーブルを飛び越す
+		}
+
+		ImageExportDirectory.Characteristics=0;
+		ImageExportDirectory.TimeDateStamp=(DWORD)time(NULL);
+		ImageExportDirectory.MajorVersion=0;
+		ImageExportDirectory.MinorVersion=0;
+		ImageExportDirectory.Name=sizeof(IMAGE_EXPORT_DIRECTORY)+
+			ExportNum*sizeof(DWORD)+	//エクスポート アドレス テーブルを飛び越す
+			ExportNum*sizeof(DWORD)+	//エクスポート名ポインタ テーブルを飛び越す
+			ExportNum*sizeof(WORD);		//エクスポート序数テーブルを飛び越す
+		ImageExportDirectory.Base=1;
+		ImageExportDirectory.NumberOfFunctions=ExportNum;
+		ImageExportDirectory.NumberOfNames=ExportNum;
+		ImageExportDirectory.AddressOfFunctions=sizeof(IMAGE_EXPORT_DIRECTORY);
+		ImageExportDirectory.AddressOfNames=ImageExportDirectory.AddressOfFunctions+ExportNum*sizeof(DWORD);
+		ImageExportDirectory.AddressOfNameOrdinals=ImageExportDirectory.AddressOfNames+ExportNum*sizeof(DWORD);
+	}
+
+
+	/////////////////////
+	//インポートDLL情報
+	/////////////////////
+	extern DECLAREINFO **ppDeclareHash;
+	DECLAREINFO *pdi;
+	char **ppDllNames;
+	int ImportDllNum;
+
+	/*
+	インポート アドレス テーブル（ルックアップと同じ内容だが、プログラム実行時に実行アドレスに書き換えられる）
+	ルックアップ テーブル（ヒントを示すRVA）
+	IMAGE_IMPORT_DESCRIPTOR1[size=0x14]	インポートヘッダ
+	IMAGE_IMPORT_DESCRIPTOR2[size=0x14]
+	IMAGE_IMPORT_DESCRIPTOR3[size=0x14]
+	...
+	Dll名1[size=0x10]
+	Dll名2[size=0x10]
+	Dll名3[size=0x10]
+	...
+	ヒントテーブル（関数名を羅列したもの）
+	*/
+
+	/*
+	IMAGE_IMPORT_DESCRIPTOR1[size=0x14]	インポートヘッダ
+	IMAGE_IMPORT_DESCRIPTOR2[size=0x14]
+	IMAGE_IMPORT_DESCRIPTOR3[size=0x14]
+	...
+	Dll名1[size=0x10]
+	Dll名2[size=0x10]
+	Dll名3[size=0x10]
+	...
+	ルックアップ テーブル（ヒントを示すRVA）
+	ヒントテーブル
+	インポート アドレス テーブル（ルックアップと同じ内容だが、プログラム実行時に実行アドレスに書き換えられる）
+	*/
+
+	ppDllNames=(char **)HeapAlloc(hHeap,0,1);
+
+	ImportDllNum=0;
+	for(i=0;i<MAX_HASH;i++){
+		pdi=ppDeclareHash[i];
+		while(pdi){
+			if(pdi->dwType==DECLARE_STATIC||
+				pdi->bUse==0){
+				pdi=pdi->pNextData;
+				continue;
+			}
+
+			if(lstrlen(pdi->file)>16){
+				SetError(7,NULL,cp);
+				break;
+			}
+			for(i2=0;i2<ImportDllNum;i2++){
+				if(lstrcmp(ppDllNames[i2],pdi->file)==0) break;
+			}
+			if(i2==ImportDllNum){
+				ppDllNames=(char **)HeapReAlloc(hHeap,0,ppDllNames,(ImportDllNum+1)*sizeof(char **));
+				ppDllNames[ImportDllNum]=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,16);
+				lstrcpy(ppDllNames[ImportDllNum],pdi->file);
+				ImportDllNum++;
+			}
+
+			pdi=pdi->pNextData;
+		}
+	}
+
+	//IMAGE_IMPORT_DESCRIPTOR、及びルックアップ テーブル サイズの計算
+	IMAGE_IMPORT_DESCRIPTOR *pImportDescriptor;
+	int LookupSize;
+	LookupSize=0;
+	pImportDescriptor=(IMAGE_IMPORT_DESCRIPTOR *)HeapAlloc(hHeap,0,(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR));
+	for(i=0;i<ImportDllNum;i++){
+		//IMAGE_IMPORT_DESCRIPTOR
+		pImportDescriptor[i].OriginalFirstThunk=LookupSize;	//※すぐ下で再計算
+		pImportDescriptor[i].TimeDateStamp=0;
+		pImportDescriptor[i].ForwarderChain=0;
+		pImportDescriptor[i].Name=i*0x10;	//※すぐ下で再計算
+		for(i2=0;i2<MAX_HASH;i2++){
+			pdi=ppDeclareHash[i2];
+			while(pdi){
+				if(pdi->dwType==DECLARE_STATIC||
+					pdi->bUse==0){
+					pdi=pdi->pNextData;
+					continue;
+				}
+
+				if(lstrcmp(ppDllNames[i],pdi->file)==0){
+					//ルックアップデータのサイズを追加
+					LookupSize+=sizeof(_int64);
+				}
+
+				pdi=pdi->pNextData;
+			}
+		}
+		LookupSize+=sizeof(_int64);	//NULL用
+	}
+	memset(&pImportDescriptor[i],0,sizeof(IMAGE_IMPORT_DESCRIPTOR));
+	for(i=0;i<ImportDllNum;i++){
+		//インポートアドレステーブル分の差分を追加
+		pImportDescriptor[i].OriginalFirstThunk+=LookupSize;
+
+		//DLL名への差分を追加
+		pImportDescriptor[i].Name+=
+			LookupSize+			//インポート アドレス テーブル
+			LookupSize+			//ルックアップテーブル
+			(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR);	//IMAGE_IMPORT_DESCRIPTOR
+	}
+
+	//ルックアップ テーブル、ヒント テーブル
+	unsigned _int64 *pLookupTable;
+	pLookupTable=(unsigned _int64 *)HeapAlloc(hHeap,0,LookupSize*sizeof(_int64)+1);
+	char *pHintTable;
+	int HintSize,HintAllocSize;
+	HintSize=0;
+	HintAllocSize=128*2;
+	pHintTable=(char *)HeapAlloc(hHeap,0,HintAllocSize);
+	for(i=0,i5=0;i<ImportDllNum;i++){
+		for(i2=0;i2<MAX_HASH;i2++){
+			pdi=ppDeclareHash[i2];
+			while(pdi){
+				if(pdi->dwType==DECLARE_STATIC||
+					pdi->bUse==0){
+					pdi=pdi->pNextData;
+					continue;
+				}
+
+				if(lstrcmp(ppDllNames[i],pdi->file)==0){
+					//ルックアップの位置をセット（後にインポート アドレス テーブルにセットしなおされる）
+					pdi->LookupAddress=i5*sizeof(_int64);
+
+					//ルックアップ テーブルの値をセット
+					pLookupTable[i5++]=
+						LookupSize+			//インポート アドレス テーブル
+						LookupSize+			//ルックアップテーブル
+						(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR)+	//IMAGE_IMPORT_DESCRIPTOR
+						ImportDllNum*0x10+	//DLL名の羅列
+						HintSize;			//ヒント名へのオフセット
+
+					//ヒント テーブル
+					pHintTable[HintSize++]=0;
+					pHintTable[HintSize++]=0;
+					lstrcpy(pHintTable+HintSize,pdi->alias);
+					i4=lstrlen(pdi->alias);
+					HintSize+=i4+1;
+					if(i4%2==0) pHintTable[HintSize++]=0;
+
+					if(HintAllocSize<HintSize+128){
+						HintAllocSize+=128;
+						pHintTable=(char *)HeapReAlloc(hHeap,0,pHintTable,HintAllocSize);
+					}
+				}
+
+				pdi=pdi->pNextData;
+			}
+		}
+		pLookupTable[i5++]=0;
+	}
+
+
+	if(bDll){
+		//DLLの場合はリロケーション情報を仮生成
+		//※正式な生成は各セクションのメモリ上のサイズが決定してから再度行う。
+		pobj_Reloc->ResetRelocBuffer();
+	}
+
+
+
+	//グローバル変数情報を扱う構造体も初期バッファの有無による配置を行う
+	//（デバッグ情報で利用される）
+	extern int MaxGlobalVarNum;
+	extern VARIABLE *GlobalVar;
+	extern int AllInitGlobalVarSize;
+	for(i=0;i<MaxGlobalVarNum;i++){
+		if(GlobalVar[i].offset&0x80000000){
+			GlobalVar[i].offset=(GlobalVar[i].offset&0x7FFFFFFF)+AllInitGlobalVarSize;
+		}
+	}
+
+
+
+	////////////////////////////////////
+	// デバッグセクションを生成
+	////////////////////////////////////
+
+	//機械語コードとBasicコードの関係を整理
+	extern LINEINFO *pLineInfo;
+	extern int MaxLineInfoNum;
+	int MinObp,MaxObp;
+	LINEINFO *pTempLineInfo;
+	pTempLineInfo=(LINEINFO *)HeapAlloc(hHeap,0,MaxLineInfoNum*sizeof(LINEINFO));
+	i2=0;
+	MaxObp=0;
+	while(1){
+		for(i3=0,MinObp=0x0FFFFFFF;i3<MaxLineInfoNum;i3++){
+			if(pLineInfo[i3].TopObp<MinObp&&MaxObp<pLineInfo[i3].TopObp){
+				MinObp=pLineInfo[i3].TopObp;
+				i4=i3;
+			}
+		}
+		if(MinObp==0x0FFFFFFF) break;
+		pTempLineInfo[i2]=pLineInfo[i4];
+		MaxObp=pTempLineInfo[i2].TopObp;
+		i2++;
+	}
+	HeapDefaultFree(pLineInfo);
+	pLineInfo=(LINEINFO *)HeapAlloc(hHeap,0,i2*sizeof(LINEINFO));
+	memcpy(pLineInfo,pTempLineInfo,i2*sizeof(LINEINFO));
+	MaxLineInfoNum=i2;
+	HeapDefaultFree(pTempLineInfo);
+
+	//デバッグセクションを生成
+	CDebugSection *pobj_DebugSection;
+	pobj_DebugSection=new CDebugSection();
+	extern BOOL bDebugCompile;
+	extern BOOL bError;
+	if(bDebugCompile&&bError==0){
+		pobj_DebugSection->make();
+	}
+
+
+
+	/////////////////////////////////////
+	// 各セクションの位置とサイズを計算
+	/////////////////////////////////////
+
+	//コードセッションのファイル上のサイズ
+	if(obp%FILE_ALIGNMENT) FileSize_CodeSection=obp+(FILE_ALIGNMENT-obp%FILE_ALIGNMENT);
+	else FileSize_CodeSection=obp;
+	if(FileSize_CodeSection) bUse_CodeSection=1;
+	else bUse_CodeSection=0;
+
+	//エクスポートセクションのファイル上のサイズ
+	i=	sizeof(IMAGE_EXPORT_DIRECTORY)+	//エクスポートディレクトリテーブルを飛び越す
+		ExportNum*sizeof(DWORD)+		//エクスポート アドレス テーブルを飛び越す
+		ExportNum*sizeof(DWORD)+		//エクスポート名ポインタ テーブルを飛び越す
+		ExportNum*sizeof(WORD)+			//エクスポート序数テーブルを飛び越す
+		ExportNamesLength;				//シンボル名バッファ
+	if(bUse_ExportSection){
+		if(i%FILE_ALIGNMENT) FileSize_ExportSection=i+(FILE_ALIGNMENT-i%FILE_ALIGNMENT);
+		else FileSize_ExportSection=i;
+	}
+	else FileSize_ExportSection=0;
+
+	//インポートセクションのファイル上のサイズ
+	i=
+		LookupSize+			//インポート アドレス テーブル
+		LookupSize+			//ルックアップテーブル
+		(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR)+	//IMAGE_IMPORT_DESCRIPTOR
+		ImportDllNum*0x10+	//DLL名の羅列
+		HintSize;			//ヒント名
+	if(i%FILE_ALIGNMENT) FileSize_ImportSection=i+(FILE_ALIGNMENT-i%FILE_ALIGNMENT);
+	else FileSize_ImportSection=i;
+	bUse_ImportSection=1;	//インポートセクションは必ず存在する
+
+	//データセクションのファイル上のサイズ
+	if(DataTableSize%FILE_ALIGNMENT) FileSize_DataSection=DataTableSize+(FILE_ALIGNMENT-DataTableSize%FILE_ALIGNMENT);
+	else FileSize_DataSection=DataTableSize;
+	if(FileSize_DataSection) bUse_DataSection=1;
+	else bUse_DataSection=0;
+
+	//リライタブルセクションのファイル上のサイズ（グローバル変数の初期情報のみを格納）
+	extern int AllInitGlobalVarSize;
+	if(AllInitGlobalVarSize%FILE_ALIGNMENT) FileSize_RWSection=AllInitGlobalVarSize+(FILE_ALIGNMENT-AllInitGlobalVarSize%FILE_ALIGNMENT);
+	else{
+		if(AllInitGlobalVarSize) FileSize_RWSection=AllInitGlobalVarSize;
+		else FileSize_RWSection=FILE_ALIGNMENT;
+	}
+	bUse_RWSection=1;
+
+	//リソースセクションのファイル上のサイズ
+	char *RSrcSectionBuffer;
+	int RSrcSectionSize;
+	RSrcSectionBuffer=GetRSrcSectionBuffer(&RSrcSectionSize);
+	if(RSrcSectionSize%FILE_ALIGNMENT) FileSize_RSrcSection=RSrcSectionSize+(FILE_ALIGNMENT-RSrcSectionSize%FILE_ALIGNMENT);
+	else FileSize_RSrcSection=RSrcSectionSize;
+	if(FileSize_RSrcSection) bUse_RSrcSection=1;
+	else bUse_RSrcSection=0;
+
+	//リロケーションセクションのファイル上のサイズ
+	if(pobj_Reloc->length%FILE_ALIGNMENT) FileSize_RelocSection=pobj_Reloc->length+(FILE_ALIGNMENT-pobj_Reloc->length%FILE_ALIGNMENT);
+	else FileSize_RelocSection=pobj_Reloc->length;
+	if(FileSize_RelocSection) bUse_RelocSection=1;
+	else bUse_RelocSection=0;
+
+	//デバッグセクションのファイル上のサイズ
+	if(pobj_DebugSection->length%FILE_ALIGNMENT) FileSize_DebugSection=pobj_DebugSection->length+(FILE_ALIGNMENT-pobj_DebugSection->length%FILE_ALIGNMENT);
+	else FileSize_DebugSection=pobj_DebugSection->length;
+	if(FileSize_DebugSection) bUse_DebugSection=1;
+	else bUse_DebugSection=0;
+
+
+	//各セッションのファイル上の位置
+	FilePos_CodeSection=	EXE_HEADER_SIZE;
+	FilePos_ExportSection=	FilePos_CodeSection+
+							FileSize_CodeSection;
+	FilePos_ImportSection=	FilePos_ExportSection+
+							FileSize_ExportSection;
+	FilePos_DataSection=	FilePos_ImportSection+
+							FileSize_ImportSection;
+	FilePos_RWSection=		FilePos_DataSection+
+							FileSize_DataSection;
+	FilePos_RSrcSection=	FilePos_RWSection+
+							FileSize_RWSection;
+	FilePos_RelocSection=	FilePos_RSrcSection+
+							FileSize_RSrcSection;
+	FilePos_DebugSection=	FilePos_RelocSection+
+							FileSize_RelocSection;
+
+	//コードセッションのメモリ上のサイズ
+	if(FileSize_CodeSection%MEM_ALIGNMENT) MemSize_CodeSection=FileSize_CodeSection+(MEM_ALIGNMENT-FileSize_CodeSection%MEM_ALIGNMENT);
+	else MemSize_CodeSection=FileSize_CodeSection;
+
+	//エクスポートセクションのメモリ上のサイズ
+	if(FileSize_ExportSection%MEM_ALIGNMENT) MemSize_ExportSection=FileSize_ExportSection+(MEM_ALIGNMENT-FileSize_ExportSection%MEM_ALIGNMENT);
+	else MemSize_ExportSection=FileSize_ExportSection;
+
+	//インポートセクションのメモリ上のサイズ
+	if(FileSize_ImportSection%MEM_ALIGNMENT) MemSize_ImportSection=FileSize_ImportSection+(MEM_ALIGNMENT-FileSize_ImportSection%MEM_ALIGNMENT);
+	else MemSize_ImportSection=FileSize_ImportSection;
+
+	//データセクションのメモリ上のサイズ
+	if(FileSize_DataSection%MEM_ALIGNMENT) MemSize_DataSection=FileSize_DataSection+(MEM_ALIGNMENT-FileSize_DataSection%MEM_ALIGNMENT);
+	else MemSize_DataSection=FileSize_DataSection;
+
+	//リライタブルセクションのメモリ上のサイズ
+	extern int AllGlobalVarSize;
+	i=AllInitGlobalVarSize+AllGlobalVarSize;
+	if(i%MEM_ALIGNMENT) MemSize_RWSection=i+(MEM_ALIGNMENT-i%MEM_ALIGNMENT);
+	else MemSize_RWSection=i;
+
+	//リソースセクションのメモリ上のサイズ
+	if(FileSize_RSrcSection%MEM_ALIGNMENT) MemSize_RSrcSection=FileSize_RSrcSection+(MEM_ALIGNMENT-FileSize_RSrcSection%MEM_ALIGNMENT);
+	else MemSize_RSrcSection=FileSize_RSrcSection;
+
+	//リロケーションセクションのメモリ上のサイズ
+	if(FileSize_RelocSection%MEM_ALIGNMENT) MemSize_RelocSection=FileSize_RelocSection+(MEM_ALIGNMENT-FileSize_RelocSection%MEM_ALIGNMENT);
+	else MemSize_RelocSection=FileSize_RelocSection;
+
+	//デバッグセクションのメモリ上のサイズ
+	if(FileSize_DebugSection%MEM_ALIGNMENT) MemSize_DebugSection=FileSize_DebugSection+(MEM_ALIGNMENT-FileSize_DebugSection%MEM_ALIGNMENT);
+	else MemSize_DebugSection=FileSize_DebugSection;
+
+
+	//各セッションのメモリ上の位置
+	if(bUse_ExportSection)	MemPos_ExportSection=	0x1000+
+													MemSize_CodeSection;
+	else					MemPos_ExportSection=0;
+	if(bUse_ImportSection)	MemPos_ImportSection=	0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection;
+	else					MemPos_ImportSection=0;
+	if(bUse_DataSection)	MemPos_DataSection=		0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection;
+	else					MemPos_DataSection=0;
+	if(bUse_RWSection)		MemPos_RWSection=		0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection;
+	else					MemPos_RWSection=0;
+	if(bUse_RSrcSection)	MemPos_RSrcSection=		0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection+
+													MemSize_RWSection;
+	else					MemPos_RSrcSection=0;
+	if(bUse_RelocSection)	MemPos_RelocSection=	0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection+
+													MemSize_RWSection+
+													MemSize_RSrcSection;
+	else					MemPos_RelocSection=0;
+	if(bUse_DebugSection)	MemPos_DebugSection=	0x1000+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection+
+													MemSize_RWSection+
+													MemSize_RSrcSection+
+													MemSize_RelocSection;
+	else					MemPos_DebugSection=0;
+
+
+
+	/////////////////////////////
+	// GC用の変数スケジュール
+	/////////////////////////////
+	PerformedGcVarSchedule();
+
+
+	////////////////////////////
+	// エクスポート情報の再配置
+	////////////////////////////
+	if(bUse_ExportSection){
+		for(i=0;i<ExportNum;i++){
+			lpdwExportAddressTable[i]+=MemPos_CodeSection;
+			lpdwExportNamePointerTable[i]+=MemPos_ExportSection;
+		}
+
+		ImageExportDirectory.Name+=						MemPos_ExportSection;
+		ImageExportDirectory.AddressOfFunctions+=		MemPos_ExportSection;
+		ImageExportDirectory.AddressOfNames+=			MemPos_ExportSection;
+		ImageExportDirectory.AddressOfNameOrdinals+=	MemPos_ExportSection;
+	}
+
+
+	////////////////////////////
+	// インポート情報の再配置
+	////////////////////////////
+	for(i=0,i5=0;i<ImportDllNum;i++){
+		//IMAGE_IMPORT_DESCRIPTOR
+		pImportDescriptor[i].OriginalFirstThunk+=MemPos_ImportSection;
+		pImportDescriptor[i].Name+=MemPos_ImportSection;
+
+		//インポート アドレス テーブル（ルックアップ テーブルを差し引く）
+		pImportDescriptor[i].FirstThunk=pImportDescriptor[i].OriginalFirstThunk-
+			LookupSize;			//ルックアップテーブル
+
+		for(i2=0;i2<MAX_HASH;i2++){
+			pdi=ppDeclareHash[i2];
+			while(pdi){
+				if(pdi->bUse==0){
+					pdi=pdi->pNextData;
+					continue;
+				}
+
+				if(lstrcmp(ppDllNames[i],pdi->file)==0){
+					//ルックアップ テーブル
+					pLookupTable[i5++]+=MemPos_ImportSection;
+				}
+
+				pdi=pdi->pNextData;
+			}
+		}
+		i5++;
+	}
+
+
+	////////////////////////////////////////
+	//仮想関数データテーブルスケジュール
+	pobj_DBClass->ActionVtblSchedule(ImageBase,MemPos_CodeSection);
+
+
+	//////////////////////////////
+	// データテーブルスケジュール
+	for(i=0;i<pobj_DataTableSchedule->num;i++){
+		*((long *)(OpBuffer+pobj_DataTableSchedule->pObpValues[i]))+=ImageBase+MemPos_DataSection;
+	}
+	delete pobj_DataTableSchedule;
+
+
+	//////////////////////////////////
+	// インポートテーブルスケジュール（インポート アドレス テーブルを指し示させる）
+	// ※x86はRVAからのオフセット。x64はRPI（実行中アドレス）からのオフセット
+	for(i=0;i<pobj_ImportAddrSchedule->num;i++){
+		DECLAREINFO *pdi;
+		pdi=pobj_ImportAddrSchedule->ppdi[i];
+		*((long *)(OpBuffer+pobj_ImportAddrSchedule->pObpValues[i]))=
+			MemPos_ImportSection+
+			pdi->LookupAddress
+			-(MemPos_CodeSection+pobj_ImportAddrSchedule->pObpValues[i]+sizeof(long));
+	}
+	delete pobj_ImportAddrSchedule;
+
+
+	////////////////////////////////////
+	// プロシージャポインタスケジュール
+	for(i=0;i<pobj_SubAddrSchedule->num;i++){
+		if(pobj_SubAddrSchedule->pbCall[i]){
+			*((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
+				pobj_SubAddrSchedule->ppsi[i]->CompileAddress-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));
+		}
+		else{
+			*((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
+				pobj_SubAddrSchedule->ppsi[i]->CompileAddress+ImageBase+MemPos_CodeSection;
+		}
+	}
+	delete pobj_SubAddrSchedule;
+
+
+	if(bDll){
+		//DLLの場合はリロケーション情報を生成
+		pobj_Reloc->ResetRelocBuffer();
+	}
+
+	delete pobj_TempSchedule;
+
+
+
+	//////////////////////////////////////
+	// グローバル変数アドレススケジュール
+	//////////////////////////////////////
+
+	/*
+	GlobalArea1 - 初期バッファあり
+	GlobalArea2 - 初期バッファなし
+	*/
+	for(i=0;i<pobj_GlobalVarSchedule->num;i++){
+		if(*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x80000000){
+			//初期バッファなし
+			*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))=
+				AllInitGlobalVarSize+
+				(*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x7FFFFFFF)+
+				ImageBase+MemPos_RWSection;
+		}
+		else{
+			//初期バッファあり
+			*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))+=
+				ImageBase+MemPos_RWSection;
+		}
+	}
+	delete pobj_GlobalVarSchedule;
+
+	//グローバル変数情報を扱う構造体も初期バッファの有無による配置を行う
+	//（デバッグ情報で利用される）
+	extern int MaxGlobalVarNum;
+	extern VARIABLE *GlobalVar;
+	for(i=0;i<MaxGlobalVarNum;i++){
+		if(GlobalVar[i].offset&0x80000000){
+			GlobalVar[i].offset=(GlobalVar[i].offset&0x7FFFFFFF)+AllInitGlobalVarSize;
+		}
+	}
+
+
+	////////////////////////////////
+	// リソースアドレススケジュール
+	extern DWORD *lpdwRSrcAddrSchedule;
+	extern int RSrcAddrScheduleNum;
+	for(i=0;i<RSrcAddrScheduleNum;i++){
+		*(DWORD *)(RSrcSectionBuffer+lpdwRSrcAddrSchedule[i])+=MemPos_RSrcSection;
+	}
+	HeapDefaultFree(lpdwRSrcAddrSchedule);
+
+
+	//Dosスタブ
+	char *DosStubBuffer;
+	int DosStubSize;
+	extern char BasicSystemDir[MAX_PATH];
+	sprintf(temporary,"%sSubOperation\\dosstub.pgm",BasicSystemDir);
+	hFile=CreateFile(temporary,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		MessageBox(hOwnerEditor,"dosstub.pgmの読み込みに失敗","error",MB_OK);
+		goto EndWriteOpcode;
+	}
+	DosStubSize=GetFileSize(hFile,NULL);
+	DosStubBuffer=(char *)HeapAlloc(hHeap,0,DosStubSize);
+	ReadFile(hFile,DosStubBuffer,DosStubSize,(DWORD *)&i2,NULL);
+	CloseHandle(hFile);
+
+
+	extern BOOL bError;
+	if(bError) goto EndWriteOpcode;
+
+
+	////////////////////////////
+	// EXEファイルのヘッダ情報
+	////////////////////////////
+
+	IMAGE_DOS_HEADER ImageDosHeader;
+	ImageDosHeader.e_magic=	0x5A4D;
+	ImageDosHeader.e_cblp=	0x0090;
+	ImageDosHeader.e_cp=	0x0003;
+	ImageDosHeader.e_crlc=	0;
+	ImageDosHeader.e_cparhdr=4;
+	ImageDosHeader.e_minalloc=0x0000;
+	ImageDosHeader.e_maxalloc=0xFFFF;
+	ImageDosHeader.e_ss=	0x0000;
+	ImageDosHeader.e_sp=	0x00B8;
+	ImageDosHeader.e_csum=	0x0000;
+	ImageDosHeader.e_ip=	0x0000;
+	ImageDosHeader.e_cs=	0x0000;
+	ImageDosHeader.e_lfarlc=0x0040;
+	ImageDosHeader.e_ovno=	0x0000;
+	ImageDosHeader.e_res[0]=0;
+	ImageDosHeader.e_res[1]=0;
+	ImageDosHeader.e_res[2]=0;
+	ImageDosHeader.e_res[3]=0;
+	ImageDosHeader.e_oemid=	0x0000;
+	ImageDosHeader.e_oeminfo=0x0000;
+	ImageDosHeader.e_res2[0]=0;
+	ImageDosHeader.e_res2[1]=0;
+	ImageDosHeader.e_res2[2]=0;
+	ImageDosHeader.e_res2[3]=0;
+	ImageDosHeader.e_res2[4]=0;
+	ImageDosHeader.e_res2[5]=0;
+	ImageDosHeader.e_res2[6]=0;
+	ImageDosHeader.e_res2[7]=0;
+	ImageDosHeader.e_res2[8]=0;
+	ImageDosHeader.e_res2[9]=0;
+	ImageDosHeader.e_lfanew=0x0100;	//PEヘッダの位置
+
+
+	/////////////////////////////////////////////
+	// PEヘッダ
+	/////////////////////////////////////////////
+
+	IMAGE_NT_HEADERS64 ImagePeHdr;
+	ImagePeHdr.Signature=IMAGE_NT_SIGNATURE;
+
+	//マシンタイプ
+	ImagePeHdr.FileHeader.Machine=				IMAGE_FILE_MACHINE_AMD64;
+
+	ImagePeHdr.FileHeader.NumberOfSections=		bUse_CodeSection+
+												bUse_ExportSection+
+												bUse_ImportSection+
+												bUse_DataSection+
+												bUse_RWSection+
+												bUse_RSrcSection+
+												bUse_RelocSection+
+												bUse_DebugSection;	//セクション数
+	ImagePeHdr.FileHeader.TimeDateStamp=		(DWORD)time(NULL);
+	ImagePeHdr.FileHeader.PointerToSymbolTable=	0x00000000;
+	ImagePeHdr.FileHeader.NumberOfSymbols=		0x00000000;
+	ImagePeHdr.FileHeader.SizeOfOptionalHeader=	IMAGE_SIZEOF_NT_OPTIONAL64_HEADER;
+	if(bDll){
+		ImagePeHdr.FileHeader.Characteristics=	IMAGE_FILE_EXECUTABLE_IMAGE|
+												IMAGE_FILE_DLL|
+												IMAGE_FILE_LARGE_ADDRESS_AWARE;
+	}
+	else{
+		ImagePeHdr.FileHeader.Characteristics=	IMAGE_FILE_RELOCS_STRIPPED|
+												IMAGE_FILE_EXECUTABLE_IMAGE|
+												IMAGE_FILE_LARGE_ADDRESS_AWARE;
+	}
+
+	ImagePeHdr.OptionalHeader.Magic=				IMAGE_NT_OPTIONAL_HDR64_MAGIC;
+	ImagePeHdr.OptionalHeader.MajorLinkerVersion=	5;
+	ImagePeHdr.OptionalHeader.MinorLinkerVersion=	0;
+	ImagePeHdr.OptionalHeader.SizeOfCode=			FileSize_CodeSection;	//コードサイズ（.textのセッションサイズ）
+	ImagePeHdr.OptionalHeader.SizeOfInitializedData=FileSize_DataSection;	//データサイズ（.dataのセッションサイズ）
+	ImagePeHdr.OptionalHeader.SizeOfUninitializedData=0;					//未初期化データのサイズ（なし）
+	if(bDll){
+		if(DllMain_EntryPoint==-1)
+			ImagePeHdr.OptionalHeader.AddressOfEntryPoint=0;
+		else
+			ImagePeHdr.OptionalHeader.AddressOfEntryPoint=MemPos_CodeSection+DllMain_EntryPoint;
+	}
+	else ImagePeHdr.OptionalHeader.AddressOfEntryPoint=	MemPos_CodeSection;
+	ImagePeHdr.OptionalHeader.BaseOfCode=			MemPos_CodeSection;	//.textのアドレス
+
+	ImagePeHdr.OptionalHeader.ImageBase=			ImageBase;		//イメージベース
+	ImagePeHdr.OptionalHeader.SectionAlignment=		MEM_ALIGNMENT;		//セクションアラインメント
+	ImagePeHdr.OptionalHeader.FileAlignment=		FILE_ALIGNMENT;
+	ImagePeHdr.OptionalHeader.MajorOperatingSystemVersion=4;
+	ImagePeHdr.OptionalHeader.MinorOperatingSystemVersion=0;
+	ImagePeHdr.OptionalHeader.MajorImageVersion=	0;
+	ImagePeHdr.OptionalHeader.MinorImageVersion=	0;
+	ImagePeHdr.OptionalHeader.MajorSubsystemVersion=4;
+	ImagePeHdr.OptionalHeader.MinorSubsystemVersion=0;
+	ImagePeHdr.OptionalHeader.Win32VersionValue=	0;
+	ImagePeHdr.OptionalHeader.SizeOfImage=			EXE_HEADER_SIZE+
+													MemSize_CodeSection+
+													MemSize_ExportSection+
+													MemSize_ImportSection+
+													MemSize_DataSection+
+													MemSize_RWSection+
+													MemSize_RSrcSection+
+													MemSize_RelocSection+
+													MemSize_DebugSection;//すべてのイメージサイズ
+	ImagePeHdr.OptionalHeader.SizeOfHeaders=		EXE_HEADER_SIZE;//ヘッダサイズ
+	ImagePeHdr.OptionalHeader.CheckSum=				0;
+	extern unsigned short TypeOfSubSystem;
+	ImagePeHdr.OptionalHeader.Subsystem=			TypeOfSubSystem;
+	ImagePeHdr.OptionalHeader.DllCharacteristics=	0;
+	ImagePeHdr.OptionalHeader.SizeOfStackReserve=	0x00100000;
+	ImagePeHdr.OptionalHeader.SizeOfStackCommit=	0x00001000;
+	ImagePeHdr.OptionalHeader.SizeOfHeapReserve=	0x00100000;
+	ImagePeHdr.OptionalHeader.SizeOfHeapCommit=		0x00001000;
+	ImagePeHdr.OptionalHeader.LoaderFlags=			0;
+	ImagePeHdr.OptionalHeader.NumberOfRvaAndSizes=	IMAGE_NUMBEROF_DIRECTORY_ENTRIES;
+
+	//データ ディクショナリ
+	ImagePeHdr.OptionalHeader.DataDirectory[0].VirtualAddress=MemPos_ExportSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[0].Size=FileSize_ExportSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[1].VirtualAddress=	//IMAGE_IMPORT_DESCRIPTORを指す
+		MemPos_ImportSection+
+		LookupSize+	//インポート アドレス テーブル
+		LookupSize;	//ルックアップ テーブル
+	ImagePeHdr.OptionalHeader.DataDirectory[1].Size=(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR);
+	ImagePeHdr.OptionalHeader.DataDirectory[2].VirtualAddress=MemPos_RSrcSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[2].Size=RSrcSectionSize;
+	ImagePeHdr.OptionalHeader.DataDirectory[3].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[3].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[4].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[4].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[5].VirtualAddress=MemPos_RelocSection;
+	ImagePeHdr.OptionalHeader.DataDirectory[5].Size=pobj_Reloc->length;
+	ImagePeHdr.OptionalHeader.DataDirectory[6].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[6].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[7].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[7].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[8].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[8].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[9].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[9].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[10].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[10].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[11].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[11].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[12].VirtualAddress=MemPos_ImportSection;//インポート アドレス テーブル
+	ImagePeHdr.OptionalHeader.DataDirectory[12].Size=LookupSize;
+	ImagePeHdr.OptionalHeader.DataDirectory[13].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[13].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[14].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[14].Size=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[15].VirtualAddress=0;
+	ImagePeHdr.OptionalHeader.DataDirectory[15].Size=0;
+
+
+	//コードセクションヘッダ
+	IMAGE_SECTION_HEADER CodeSectionHeader;
+	memset((char *)CodeSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)CodeSectionHeader.Name,".text");
+	CodeSectionHeader.Misc.VirtualSize=			obp;
+	CodeSectionHeader.VirtualAddress=			MemPos_CodeSection;	//開始アドレス
+	CodeSectionHeader.SizeOfRawData=			FileSize_CodeSection;
+	CodeSectionHeader.PointerToRawData=			FilePos_CodeSection;	//ファイル上の開始アドレス
+	CodeSectionHeader.PointerToRelocations=		0;
+	CodeSectionHeader.PointerToLinenumbers=		0;
+	CodeSectionHeader.NumberOfRelocations=		0;
+	CodeSectionHeader.NumberOfLinenumbers=		0;
+	CodeSectionHeader.Characteristics=			IMAGE_SCN_MEM_EXECUTE|
+												IMAGE_SCN_MEM_READ|
+												IMAGE_SCN_CNT_CODE;
+
+	//エクスポートセクションヘッダ
+	IMAGE_SECTION_HEADER ExportSectionHeader;
+	memset((char *)ExportSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)ExportSectionHeader.Name,".edata");
+	ExportSectionHeader.Misc.VirtualSize=		MemSize_ExportSection;
+	ExportSectionHeader.VirtualAddress=			MemPos_ExportSection;	//開始アドレス
+	ExportSectionHeader.SizeOfRawData=			FileSize_ExportSection;	//サイズ
+	ExportSectionHeader.PointerToRawData=		FilePos_ExportSection;	//ファイル上の開始アドレス
+	ExportSectionHeader.PointerToRelocations=	0;
+	ExportSectionHeader.PointerToLinenumbers=	0;
+	ExportSectionHeader.NumberOfRelocations=	0;
+	ExportSectionHeader.NumberOfLinenumbers=	0;
+	ExportSectionHeader.Characteristics=		IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ;
+
+	//インポートセクションヘッダ
+	IMAGE_SECTION_HEADER ImportSectionHeader;
+	memset((char *)ImportSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)ImportSectionHeader.Name,".idata");
+	ImportSectionHeader.Misc.VirtualSize=
+		LookupSize+			//インポートアドレステーブル
+		LookupSize+			//ルックアップテーブル
+		(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR)+
+		16*ImportDllNum+	//DLL名
+		HintSize;			//ヒント名（関数名）テーブル
+	ImportSectionHeader.VirtualAddress=			MemPos_ImportSection;	//開始アドレス
+	ImportSectionHeader.SizeOfRawData=			FileSize_ImportSection;	//サイズ
+	ImportSectionHeader.PointerToRawData=		FilePos_ImportSection;	//ファイル上の開始アドレス
+	ImportSectionHeader.PointerToRelocations=	0;
+	ImportSectionHeader.PointerToLinenumbers=	0;
+	ImportSectionHeader.NumberOfRelocations=	0;
+	ImportSectionHeader.NumberOfLinenumbers=	0;
+	ImportSectionHeader.Characteristics=		IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ;
+
+	//データセクションヘッダ
+	IMAGE_SECTION_HEADER DataSectionHeader;
+	memset((char *)DataSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)DataSectionHeader.Name,".sdata");
+	DataSectionHeader.Misc.VirtualSize=			MemSize_DataSection;
+	DataSectionHeader.VirtualAddress=			MemPos_DataSection;
+	DataSectionHeader.SizeOfRawData=			FileSize_DataSection;
+	DataSectionHeader.PointerToRawData=			FilePos_DataSection;
+	DataSectionHeader.PointerToRelocations=		0;
+	DataSectionHeader.PointerToLinenumbers=		0;
+	DataSectionHeader.NumberOfRelocations=		0;
+	DataSectionHeader.NumberOfLinenumbers=		0;
+	DataSectionHeader.Characteristics=			IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ|
+												IMAGE_SCN_MEM_WRITE;
+
+	//リライタブルセクションヘッダ
+	IMAGE_SECTION_HEADER RWSectionHeader;
+	memset((char *)RWSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)RWSectionHeader.Name,".data");
+	RWSectionHeader.Misc.VirtualSize=			AllInitGlobalVarSize+AllGlobalVarSize;
+	RWSectionHeader.VirtualAddress=				MemPos_RWSection;
+	RWSectionHeader.SizeOfRawData=				FileSize_RWSection;
+	RWSectionHeader.PointerToRawData=			FilePos_RWSection;
+	RWSectionHeader.PointerToRelocations=		0;
+	RWSectionHeader.PointerToLinenumbers=		0;
+	RWSectionHeader.NumberOfRelocations=		0;
+	RWSectionHeader.NumberOfLinenumbers=		0;
+	RWSectionHeader.Characteristics=			IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ|
+												IMAGE_SCN_MEM_WRITE;
+
+	//リソースセクションヘッダ
+	IMAGE_SECTION_HEADER RSrcSectionHeader;
+	memset((char *)RSrcSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)RSrcSectionHeader.Name,".rsrc");
+	RSrcSectionHeader.Misc.VirtualSize=			RSrcSectionSize;
+	RSrcSectionHeader.VirtualAddress=			MemPos_RSrcSection;
+	RSrcSectionHeader.SizeOfRawData=			FileSize_RSrcSection;
+	RSrcSectionHeader.PointerToRawData=			FilePos_RSrcSection;
+	RSrcSectionHeader.PointerToRelocations=		0;
+	RSrcSectionHeader.PointerToLinenumbers=		0;
+	RSrcSectionHeader.NumberOfRelocations=		0;
+	RSrcSectionHeader.NumberOfLinenumbers=		0;
+	RSrcSectionHeader.Characteristics=			IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_READ;
+
+	//リロケーションセクションヘッダ
+	IMAGE_SECTION_HEADER RelocSectionHeader;
+	memset((char *)RelocSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)RelocSectionHeader.Name,".reloc");
+	RelocSectionHeader.Misc.VirtualSize=		pobj_Reloc->length;
+	RelocSectionHeader.VirtualAddress=			MemPos_RelocSection;	//開始アドレス
+	RelocSectionHeader.SizeOfRawData=			FileSize_RelocSection;	//サイズ
+	RelocSectionHeader.PointerToRawData=		FilePos_RelocSection;	//ファイル上の開始アドレス
+	RelocSectionHeader.PointerToRelocations=	0;
+	RelocSectionHeader.PointerToLinenumbers=	0;
+	RelocSectionHeader.NumberOfRelocations=		0;
+	RelocSectionHeader.NumberOfLinenumbers=		0;
+	RelocSectionHeader.Characteristics=			IMAGE_SCN_CNT_INITIALIZED_DATA|
+												IMAGE_SCN_MEM_DISCARDABLE|
+												IMAGE_SCN_MEM_READ;
+
+	//デバッグセクションヘッダ
+	IMAGE_SECTION_HEADER DebugSectionHeader;
+	memset((char *)DebugSectionHeader.Name,0,IMAGE_SIZEOF_SHORT_NAME);
+	lstrcpy((char *)DebugSectionHeader.Name,".debug");
+	DebugSectionHeader.Misc.VirtualSize=		pobj_DebugSection->length;
+	DebugSectionHeader.VirtualAddress=			MemPos_DebugSection;	//開始アドレス
+	DebugSectionHeader.SizeOfRawData=			FileSize_DebugSection;	//サイズ
+	DebugSectionHeader.PointerToRawData=		FilePos_DebugSection;	//ファイル上の開始アドレス
+	DebugSectionHeader.PointerToRelocations=	0;
+	DebugSectionHeader.PointerToLinenumbers=	0;
+	DebugSectionHeader.NumberOfRelocations=		0;
+	DebugSectionHeader.NumberOfLinenumbers=		0;
+	DebugSectionHeader.Characteristics=			IMAGE_SCN_MEM_DISCARDABLE|
+												IMAGE_SCN_MEM_READ;
+
+
+	hFile=CreateFile(OutputFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		SetError(53,OutputFileName,-1);
+		goto EndWriteOpcode;
+	}
+
+	//ヘッダ
+	WriteFile(hFile,(void *)&ImageDosHeader,sizeof(IMAGE_DOS_HEADER),(DWORD *)&i2,NULL);
+	i=i2;
+
+	//Dosスタブ
+	WriteFile(hFile,DosStubBuffer,DosStubSize,(DWORD *)&i2,NULL);
+	i+=i2;
+
+	//0x0100までNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,0x0100-i);
+	WriteFile(hFile,temp2,0x0100-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	//PEヘッダ
+	WriteFile(hFile,&ImagePeHdr,sizeof(IMAGE_NT_HEADERS64),(DWORD *)&i2,NULL);
+	i+=i2;
+
+	//コード セクション ヘッダ
+	WriteFile(hFile,&CodeSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+	i+=i2;
+
+	if(bUse_ExportSection){
+		//エクスポート セクション ヘッダ
+		WriteFile(hFile,&ExportSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_ImportSection){
+		//インポート セクション ヘッダ
+		WriteFile(hFile,&ImportSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_DataSection){
+		//データ セクション ヘッダ
+		WriteFile(hFile,&DataSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_RWSection){
+		//リライタブルセクションヘッダ
+		WriteFile(hFile,&RWSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_RSrcSection){
+		//リソースセクションヘッダ
+		WriteFile(hFile,&RSrcSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_RelocSection){
+		//リロケーションセクションヘッダ
+		WriteFile(hFile,&RelocSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+	if(bUse_DebugSection){
+		//デバッグセクションヘッダ
+		WriteFile(hFile,&DebugSectionHeader,sizeof(IMAGE_SECTION_HEADER),(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//EXE_HEADER_SIZEまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,EXE_HEADER_SIZE-i);
+	WriteFile(hFile,temp2,EXE_HEADER_SIZE-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	//コード
+	WriteFile(hFile,OpBuffer,obp,(DWORD *)&i2,NULL);
+	i+=i2;
+
+	//FilePos_ExportSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_ExportSection-i);
+	WriteFile(hFile,temp2,FilePos_ExportSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_ExportSection){
+		//エクスポート ディレクトリ テーブル
+		WriteFile(hFile,&ImageExportDirectory,sizeof(IMAGE_EXPORT_DIRECTORY),(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//エクスポート アドレス テーブル
+		WriteFile(hFile,lpdwExportAddressTable,ExportNum*sizeof(DWORD),(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//エクスポート名ポインタ テーブル
+		WriteFile(hFile,lpdwExportNamePointerTable,ExportNum*sizeof(DWORD),(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//エクスポート序数テーブル
+		WriteFile(hFile,lpwExportOrdinalTable,ExportNum*sizeof(WORD),(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//シンボル名
+		WriteFile(hFile,lpExportNames,ExportNamesLength,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_ImportSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_ImportSection-i);
+	WriteFile(hFile,temp2,FilePos_ImportSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_ImportSection){
+		//インポート アドレス テーブル
+		WriteFile(hFile,pLookupTable,LookupSize,(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//ルックアップ テーブル
+		WriteFile(hFile,pLookupTable,LookupSize,(DWORD *)&i2,NULL);
+		i+=i2;
+
+		//インポート ディレクトリ テーブル（Nullディレクトリ テーブルを含む）
+		for(i3=0;i3<(ImportDllNum+1);i3++){
+			WriteFile(hFile,&pImportDescriptor[i3],sizeof(IMAGE_IMPORT_DESCRIPTOR),(DWORD *)&i2,NULL);
+			i+=i2;
+		}
+
+		//DLL名
+		for(i3=0;i3<ImportDllNum;i3++){
+			WriteFile(hFile,ppDllNames[i3],16,(DWORD *)&i2,NULL);
+			i+=i2;
+		}
+
+		//ヒント テーブル
+		WriteFile(hFile,pHintTable,HintSize,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_DataSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_DataSection-i);
+	WriteFile(hFile,temp2,FilePos_DataSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_DataSection){
+		//データ テーブル
+		WriteFile(hFile,DataTable,DataTableSize,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_RWSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_RWSection-i);
+	WriteFile(hFile,temp2,FilePos_RWSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_RWSection){
+		//リライタブル データ テーブル（グローバル変数の初期バッファ）
+		initGlobalBuf=(BYTE *)HeapReAlloc(hHeap,
+			HEAP_ZERO_MEMORY,
+			initGlobalBuf,
+			FileSize_RWSection);
+		WriteFile(hFile,initGlobalBuf,FileSize_RWSection,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_RSrcSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_RSrcSection-i);
+	WriteFile(hFile,temp2,FilePos_RSrcSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_RSrcSection){
+		//リソースバッファ
+		WriteFile(hFile,RSrcSectionBuffer,RSrcSectionSize,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//FilePos_RelocSectionまでNULLを並べる
+	temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FilePos_RelocSection-i);
+	WriteFile(hFile,temp2,FilePos_RelocSection-i,(DWORD *)&i2,NULL);
+	HeapDefaultFree(temp2);
+	i+=i2;
+
+	if(bUse_RelocSection){
+		//リロケーション情報
+		WriteFile(hFile,pobj_Reloc->buffer,pobj_Reloc->length,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//ファイルアラインメントを考慮
+	if(i%FILE_ALIGNMENT){
+		temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FILE_ALIGNMENT-i%FILE_ALIGNMENT);
+		WriteFile(hFile,temp2,FILE_ALIGNMENT-i%FILE_ALIGNMENT,(DWORD *)&i2,NULL);
+		HeapDefaultFree(temp2);
+		i+=i2;
+	}
+
+	if(bUse_DebugSection){
+		//デバッグセクション
+		WriteFile(hFile,pobj_DebugSection->buffer,pobj_DebugSection->length,(DWORD *)&i2,NULL);
+		i+=i2;
+	}
+
+	//ファイルアラインメントを考慮
+	if(i%FILE_ALIGNMENT){
+		temp2=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,FILE_ALIGNMENT-i%FILE_ALIGNMENT);
+		WriteFile(hFile,temp2,FILE_ALIGNMENT-i%FILE_ALIGNMENT,(DWORD *)&i2,NULL);
+		HeapDefaultFree(temp2);
+		i+=i2;
+	}
+
+	//書き込み終了
+	CloseHandle(hFile);
+
+
+EndWriteOpcode:
+
+	//Dosスタブ用のメモリを解放
+	HeapDefaultFree(DosStubBuffer);
+
+	//エクスポート テーブル情報を解放
+	HeapDefaultFree(lpdwExportAddressTable);
+	HeapDefaultFree(lpdwExportNamePointerTable);
+	HeapDefaultFree(lpwExportOrdinalTable);
+
+	//インポートDLL情報を解放
+	HeapDefaultFree(pImportDescriptor);
+	for(i=0;i<ImportDllNum;i++)
+		HeapDefaultFree(ppDllNames[i]);
+	HeapDefaultFree(ppDllNames);
+
+	//ルックアップテーブルに関する情報を解放
+	HeapDefaultFree(pLookupTable);
+
+	//ヒントテーブルに関する情報を解放
+	HeapDefaultFree(pHintTable);
+
+	//データテーブルに関する情報を解放
+	HeapDefaultFree(DataTable);
+
+	//グローバル変数の初期バッファを解放
+	HeapDefaultFree(initGlobalBuf);
+
+	//コードバッファを解放
+	HeapDefaultFree(OpBuffer);
+	OpBuffer=0;
+
+	//リソースセクションバッファを解放
+	HeapDefaultFree(RSrcSectionBuffer);
+
+	//デバッグセクションを開放
+	delete pobj_DebugSection;
+
+	//リロケーション情報を解放
+	delete pobj_Reloc;
+
+	//列挙体に関する情報の破棄
+	CEnumParent::DestroyEnum();
+
+	//クラスに関するメモリを解放
+	delete pobj_DBClass;
+	pobj_DBClass=0;
+}
Index: /BasicCompiler64/NumOpe.cpp
===================================================================
--- /BasicCompiler64/NumOpe.cpp	(revision 3)
+++ /BasicCompiler64/NumOpe.cpp	(revision 3)
@@ -0,0 +1,880 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void NewStringObject(int reg,LPSTR lpszText){
+	///////////////////////////////////////////////////////
+	// lpszTextを元にStringオブジェクトを生成し、
+	// オブジェクトポインタをregに格納する
+	///////////////////////////////////////////////////////
+
+
+	//////////////////////////////////////////////////////
+	/////    レジスタ資源のバックアップ
+	{	BACKUP_REGISTER_RESOURCE
+	//////////////////////////////////////////////////////
+
+		extern CClass *pobj_StringClass;
+		int object_size;
+		object_size=GetSizeOfClass(pobj_StringClass);
+
+		//mov rcx,object_size
+		op_mov_RV(sizeof(_int64),REG_RCX,object_size);
+
+		//call calloc
+		extern SUBINFO *pSub_calloc;
+		op_call(pSub_calloc);
+
+		//mov r11,rax
+		op_mov_RR(REG_R11,REG_RAX);
+
+		//mov qword ptr[rsp+offset],r11     ※スタックフレームを利用
+		pobj_sf->push(REG_R11);
+
+		//mov rcx,rax
+		op_mov_RR(REG_RCX,REG_RAX);
+
+		//call constructor
+		op_call(pobj_StringClass->ppobj_Method[pobj_StringClass->ConstructorMemberSubIndex]->psi);
+
+		int i2;
+		i2=AddDataTable(lpszText,lstrlen(lpszText));
+
+		//mov rax,i2
+		op_mov_RV(sizeof(_int64),REG_RAX,i2);
+		obp-=sizeof(long);
+		pobj_DataTableSchedule->add();
+		obp+=sizeof(long);
+
+
+		//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->ref(REG_R11);
+
+
+		RELATIVE_VAR RelativeVar;
+		RelativeVar.bOffsetOffset=0;
+		RelativeVar.offset=0;
+		RelativeVar.dwKind=VAR_DIRECTMEM;
+
+		SetObjectVariableFromRax((LONG_PTR)pobj_StringClass,DEF_PTR_BYTE,-1,&RelativeVar,0);
+
+		//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R11);
+
+
+	/////////////////////////////////////////////
+	//////   レジスタ資源を復元
+		RESTORE_REGISTER_RESOURCE
+	}////////////////////////////////////////////
+
+	//mov reg,r11
+	op_mov_RR(reg,REG_R11);
+}
+
+void SetUseRegFromRax(int type,int UseReg,int XmmReg){
+	if(IsRealNumberType(type)){
+		//実数型
+		if(XmmReg==REG_XMM4){
+			if(type==DEF_DOUBLE){
+				//movsd qword ptr[rsp+offset],xmm0	※スタックフレームを利用
+				pobj_sf->push(REG_XMM0,sizeof(double));
+			}
+			if(type==DEF_SINGLE){
+				//movss dword ptr[rsp+offset],xmm0	※スタックフレームを利用
+				pobj_sf->push(REG_XMM0,sizeof(float));
+			}
+		}
+		else{
+			if(type==DEF_DOUBLE){
+				//movsd xmm_reg,xmm0
+				op_movsd_RR(XmmReg,REG_XMM0);
+			}
+			else if(type==DEF_SINGLE){
+				//movss xmm_reg,xmm0
+				op_movss_RR(XmmReg,REG_XMM0);
+			}
+		}
+	}
+	else{
+		//整数型
+		if(UseReg==REG_R14){
+			//mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
+			pobj_sf->push(REG_RAX);
+		}
+		else{
+			//mov reg,rax
+			op_mov64_ToReg_FromReg(UseReg,REG_RAX);
+		}
+	}
+}
+
+int NumOpe(int *pReg,char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap){
+	extern HANDLE hHeap;
+	int i,i2,i3,i4;
+	char temporary[1024],temp2[1024],temp3[1024];
+
+	if(Command[0]=='\0'){
+		SetError(1,NULL,cp);
+		return 0;
+	}
+
+	if(Command[0]==1&&Command[1]==ESC_NEW){
+		//New演算子（オブジェクト生成）
+		return Operator_New(Command+2,plpIndex);
+	}
+
+
+	/////////////////////////////////
+	// 式要素を逆ポーランド式で取得
+	/////////////////////////////////
+
+	char *values[255];
+	long calc[255];
+	long stack[255];
+	int pnum;
+	if(!GetNumOpeElements(Command,&pnum,values,calc,stack)){
+		for(i=0;i<pnum;i++){
+			if(values[i]) HeapDefaultFree(values[i]);
+		}
+		return 0;
+	}
+
+
+	BOOL bInitRegSwitch=0;
+	if(!pobj_reg){
+		bInitRegSwitch=1;
+
+		//作業用レジスタを取得
+		pobj_reg=new CRegister(*pReg);
+	}
+
+	//エラー時の復旧用
+	CRegister objReg_Backup;
+	objReg_Backup=*pobj_reg;
+
+
+
+	////////////////////////////////
+	// 演算部分のコード生成を開始
+	////////////////////////////////
+
+	BOOL bError;
+	bError=0;
+
+	//リテラル値のみの計算かどうかを判別するためのフラグ
+	BOOL bLiteralCalculation=1;
+
+	//リテラル演算の場合を考慮した演算前のバッファ位置
+	int BeforeObp;
+	BeforeObp=obp;
+
+	//リテラル演算の場合を考慮した演算前のプロシージャスケジュール位置
+	//※64ビットの掛け算、除算などで特殊関数が呼ばれるため
+	int Before_ProcAddrScheduleNum;
+	Before_ProcAddrScheduleNum=pobj_SubAddrSchedule->num;
+
+	//リテラル演算の場合を考慮した演算前のデータテーブルスケジュール位置
+	int Before_DataTableScheduleNum;
+	Before_DataTableScheduleNum=pobj_DataTableSchedule->num;
+
+	//リテラル演算の場合を考慮した演算前の再配置スケジュール
+	CReloc *pobj_BackReloc;
+	pobj_BackReloc=new CReloc();
+	pobj_BackReloc->copy(pobj_Reloc);
+
+	//リテラル演算の場合を考慮した演算前のスタックフレームスケジュール位置
+	int Before_StackFrameScheduleNum;
+	Before_StackFrameScheduleNum=pobj_sf->num;
+
+	double dbl;
+	int sp;
+	int type[255];
+	LONG_PTR index_stack[255];
+	BOOL bUseHeap[255];
+	_int64 i64data;
+	int UseReg,XmmReg;
+	BOOL bXmm;
+	for(i=0,sp=0;i<pnum;i++){
+		int idCalc;
+		idCalc=calc[i]%100;
+
+		if(idCalc){
+			if(type[sp-2]==DEF_OBJECT){
+				//オーバーロードされたオペレータを呼び出す
+				TYPEINFO BaseTypeInfo={BaseType,lpBaseIndex};
+				i2=CallOperatorProc(idCalc,&BaseTypeInfo,type,index_stack,bUseHeap,sp);
+				if(i2==0){
+					if(idCalc==CALC_EQUAL) lstrcpy(temp2,"==");
+					else GetCalcName(idCalc,temp2);
+					sprintf(temporary,"Operator %s",temp2);
+					SetError(27,temporary,cp);
+					goto error;
+				}
+				else if(i2==-1) goto error;
+
+				continue;
+			}
+
+			if(!CheckCalcType(idCalc,type,sp)) goto error;
+		}
+
+		switch(idCalc){
+			//数値
+			case 0:
+				index_stack[sp]=-1;
+				bUseHeap[sp]=0;
+
+				UseReg=pobj_reg->GetNextReg();
+				XmmReg=pobj_reg->GetNextXmmReg();
+
+				bXmm=0;
+
+				char *term;
+				term=values[i];
+
+				if(term[0]=='\"'){
+					//リテラル文字列
+					if(!RemoveStringQuotes(term)){
+						SetError(43,NULL,cp);
+						goto error;
+					}
+					i3=lstrlen(term);
+StrLiteral:
+					
+					if(BaseType==DEF_OBJECT){
+						CClass *pobj_Class;
+						pobj_Class=(CClass *)lpBaseIndex;
+						if(IsStringSubsituation(pobj_Class)){
+							//要求タイプがオブジェクトであり、Stringの受け入れが可能な場合
+
+							//String型オブジェクトを生成
+							NewStringObject(UseReg,term);
+
+							extern CClass *pobj_StringClass;
+							type[sp]=DEF_OBJECT;
+							index_stack[sp]=(LONG_PTR)pobj_StringClass;
+							bUseHeap[sp]=1;
+							bLiteralCalculation=0;
+
+							if(bXmm) pobj_reg->LockXmmReg();
+							else pobj_reg->LockReg();
+
+							sp++;
+							break;
+						}
+					}
+
+					type[sp]=DEF_PTR_BYTE;
+					bLiteralCalculation=0;
+
+					i2=AddDataTable(term,i3);
+
+					//mov reg,i2
+					op_mov_RV(sizeof(_int64),UseReg,i2);
+					obp-=sizeof(long);
+					pobj_DataTableSchedule->add();
+					obp+=sizeof(long);
+
+					if(UseReg==REG_R14){
+						//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+						pobj_sf->push(REG_R14);
+					}
+				}
+				else if((term[0]=='e'||term[0]=='E')&&
+					(term[1]=='x'||term[1]=='X')&&
+					term[2]=='\"'){
+					//拡張版リテラル文字列（エスケープシーケンス可能）
+					if(!RemoveStringQuotes(term+2)){
+						SetError(43,NULL,cp);
+						goto error;
+					}
+					i3=FormatString_EscapeSequence(term+2);
+					term+=2;
+
+					goto StrLiteral;
+				}
+				else if(IsVariableTopChar(term[0])||
+					term[0]=='*'||
+					(term[0]=='.'&&IsVariableTopChar(term[1]))){
+					//////////////////
+					// 何らかの識別子
+
+					//////////////////////////////////////
+					// 関数（DLL、ユーザー定義、組み込み）
+					//////////////////////////////////////
+
+					i2=GetCallProcName(term,temporary);
+					if(term[i2]=='('){
+						i4=GetStringInPare_RemovePare(temp2,term+i2+1);
+
+						int idProc;
+						void *pInfo;
+						idProc=GetProc(temporary,&pInfo);
+
+						if(idProc){
+							//閉じカッコ")"に続く文字がNULLでないときはエラーにする
+							if(term[i2+1+i4+1]!='\0') SetError(42,NULL,cp);
+
+
+							//////////////////////////////////////////////////////
+							/////    レジスタ資源のバックアップ
+							{	BACKUP_REGISTER_RESOURCE
+							//////////////////////////////////////////////////////
+
+
+								////////////////
+								// 呼び出し
+								////////////////
+
+								i2=CallProc(idProc,pInfo,temporary,temp2,&index_stack[sp]);
+								if(i2==-1){
+									//戻り値が存在しないとき
+									for(i2=2;;i2++){
+										if(term[i2]=='('||term[i2]=='\0'){
+											term[i2]=0;
+											break;
+										}
+									}
+									SetError(38,term,cp);
+
+									//レジスタ資源を復元
+									RESTORE_REGISTER_RESOURCE
+
+									goto error;
+								}
+
+
+								/////////////////////
+								// 戻り値の処理
+								/////////////////////
+
+								//大きな型への暗黙の変換
+								type[sp]=AutoBigCast(BaseType,i2);
+								bLiteralCalculation=0;
+
+								SetUseRegFromRax(i2,UseReg,XmmReg);
+
+								if(IsRealNumberType(i2)) bXmm=1;
+								else bXmm=0;
+
+							/////////////////////////////////////////////
+							//////   レジスタ資源を復元
+								RESTORE_REGISTER_RESOURCE
+							}////////////////////////////////////////////
+
+
+							if(bXmm) pobj_reg->LockXmmReg();
+							else pobj_reg->LockReg();
+
+							if(i2==DEF_OBJECT){
+								//Object型が戻ったときはヒープ領域にインスタンスが格納されている
+								//※後にfreeする必要あり
+								bUseHeap[sp]=1;
+							}
+
+							sp++;
+							break;
+						}
+						else if(GetConstCalcBuffer(temporary,temp2,temp3)){
+							/////////////////////////
+							// マクロ関数
+							/////////////////////////
+
+							//閉じカッコ")"に続く文字がNULLでないときはエラーにする
+							if(term[i2+1+i4+1]!='\0') SetError(42,NULL,cp);
+
+							//マクロ関数の場合
+							i2=NumOpe(&UseReg,temp3,0,0,&index_stack[sp]);
+
+							if(!IS_LITERAL(index_stack[sp])){
+								//リテラル値ではなかったとき
+								bLiteralCalculation=0;
+							}
+
+							type[sp]=i2;
+
+							if(IsRealNumberType(i2)) pobj_reg->LockXmmReg();
+							else pobj_reg->LockReg();
+
+							sp++;
+							break;
+						}
+					}
+
+
+					char variable[VN_SIZE],array_element[VN_SIZE];
+					CClass *pobj_c;
+					GetArrayElement(term,variable,array_element);
+					if(array_element[0]){
+						i2=GetVarType(variable,(LONG_PTR *)&pobj_c,0);
+						if(i2==DEF_OBJECT){
+							TYPEINFO RetTypeInfo;
+							CallArrayOperatorProc(UseReg,pobj_c,variable,array_element,RetTypeInfo);
+							type[sp]=RetTypeInfo.type;
+							index_stack[sp]=RetTypeInfo.u.lpIndex;
+							bLiteralCalculation=0;
+
+							if(IsRealNumberType(RetTypeInfo.type)) pobj_reg->LockXmmReg();
+							else pobj_reg->LockReg();
+							sp++;
+							break;
+						}
+					}
+
+
+					RELATIVE_VAR RelativeVar;
+					if(GetVarOffset(0,term,&i2,&RelativeVar,&index_stack[sp])){
+						//////////
+						// 変数
+						//////////
+
+						//大きな型への暗黙の変換
+						type[sp]=AutoBigCast(BaseType,i2);
+						bLiteralCalculation=0;
+
+						if(type[sp]!=i2){
+							//大きな型へ変換された場合（レジスタを0に初期化する）
+
+							//xor reg,reg
+							op_zero_reg(UseReg);
+						}
+
+						if(i2&FLAG_PTR){
+							//配列ポインタ
+							type[sp]=GetPtrType(i2^FLAG_PTR,index_stack[sp]);
+
+							SetVarPtrToReg(UseReg,&RelativeVar);
+						}
+						else if(IsRealNumberType(i2)){
+							//実数型
+							bXmm=1;
+
+							if(i2==DEF_DOUBLE)
+								SetXmmReg_DoubleVariable(&RelativeVar,XmmReg);
+							if(i2==DEF_SINGLE)
+								SetXmmReg_SingleVariable(&RelativeVar,XmmReg);
+						}
+						else if(IsWholeNumberType(i2)){
+							//整数型
+							SetReg_WholeVariable(i2,&RelativeVar,UseReg);
+						}
+						else if(i2==DEF_OBJECT){
+							//オブジェクト ポインタをUseRegへ格納
+							SetVarPtrToReg(UseReg,&RelativeVar);
+						}
+						else SetError(11,term,cp);
+
+						if(bXmm==0&&UseReg==REG_R14){
+							//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+							pobj_sf->push(REG_R14);
+						}
+						if(bXmm&&XmmReg==REG_XMM4){
+							if(i2==DEF_DOUBLE){
+								//movsd qword ptr[rsp+offset],xmm4	※スタックフレームを利用
+								pobj_sf->push(REG_XMM4,sizeof(double));
+							}
+							if(i2==DEF_SINGLE){
+								//movss dword ptr[rsp+offset],xmm4	※スタックフレームを利用
+								pobj_sf->push(REG_XMM4,sizeof(float));
+							}
+						}
+
+						if(bXmm) pobj_reg->LockXmmReg();
+						else pobj_reg->LockReg();
+						sp++;
+						break;
+					}
+
+
+					//////////////
+					// 定数の場合
+					//////////////
+
+					i3=GetConstValue(term,&dbl,temporary,&index_stack[sp]);
+					if(i3!=-1){
+						type[sp]=i3;
+						if(IsRealNumberType(i3)){
+							//実数
+							memcpy(&i64data,&dbl,sizeof(double));
+							goto Literal;
+						}
+						else if(IsWholeNumberType(i3)){
+							//整数
+							i64data=(_int64)dbl;
+							goto Literal;
+						}
+						else if(Is64Type(i3)){
+							//64ビット整数値
+							memcpy(&i64data,&dbl,sizeof(_int64));
+							goto Literal;
+						}
+						else if(i3==DEF_STRING){
+							//リテラル文字列
+
+							//バイト数
+							i3=(int)dbl;
+
+							memcpy(term,temporary,i3);
+							goto StrLiteral;
+						}
+						else{
+							SetError(1,NULL,0);
+							goto error;
+						}
+					}
+
+
+					//////////////
+					// 型名の場合
+					//////////////
+
+					LONG_PTR lp;
+					i3=GetTypeFixed(term,&lp);
+					if(i3!=-1){
+						type[sp]=i3|FLAG_CAST;
+						index_stack[sp]=lp;
+						sp++;
+						break;
+					}
+
+
+
+					/////////////////////////////////
+					// プロパティ用のメソッド
+					/////////////////////////////////
+
+					//配列要素を排除
+					char VarName[VN_SIZE],ArrayElements[VN_SIZE];
+					GetArrayElement(term,VarName,ArrayElements);
+
+					if(GetSubHash(VarName,0)){
+
+						//////////////////////////////////////////////////////
+						/////    レジスタ資源のバックアップ
+						{	BACKUP_REGISTER_RESOURCE
+						//////////////////////////////////////////////////////
+
+							TYPEINFO RetTypeInfo;
+							CallPropertyMethod(term,NULL,&RetTypeInfo);
+
+							//大きな型への暗黙の変換
+							type[sp]=AutoBigCast(BaseType,RetTypeInfo.type);
+
+							index_stack[sp]=RetTypeInfo.u.lpIndex;
+							bLiteralCalculation=0;
+
+							SetUseRegFromRax(RetTypeInfo.type,UseReg,XmmReg);
+
+							if(IsRealNumberType(i2)) bXmm=1;
+							else bXmm=0;
+
+						/////////////////////////////////////////////
+						//////   レジスタ資源を復元
+							RESTORE_REGISTER_RESOURCE
+						}////////////////////////////////////////////
+
+						if(type[sp]==DEF_OBJECT){
+							//Object型が戻ったときはヒープ領域にインスタンスが格納されている
+							//※後にfreeする必要あり
+							bUseHeap[sp]=1;
+						}
+
+						if(bXmm) pobj_reg->LockXmmReg();
+						else pobj_reg->LockReg();
+						sp++;
+						break;
+					}
+
+
+
+					//該当する識別子が見当たらないときはエラー扱いにする
+					bError=1;
+					SetError(3,term,cp);
+					type[sp]=DEF_DOUBLE;
+				}
+				else{
+					//リテラル値
+					type[sp]=GetLiteralValue(term,&i64data,BaseType);
+Literal:
+					if(type[sp]==DEF_DOUBLE){
+						//64ビット浮動小数型
+						bXmm=1;
+
+						if(XmmReg==REG_XMM4){
+							//mov r14,i64data
+							op_mov64_ToReg(REG_R14,i64data);
+
+
+							//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+							pobj_sf->push(REG_R14);
+						}
+						else{
+							i3=AddDataTable((char *)&i64data,sizeof(_int64));
+
+							//movlpd xmm_reg,qword ptr[data table offset]
+							OpBuffer[obp++]=(char)0x66;
+							OpBuffer[obp++]=(char)0x0F;
+							OpBuffer[obp++]=(char)0x12;
+							OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(XmmReg)<<3);
+							OpBuffer[obp++]=(char)0x25;
+							*((long *)(OpBuffer+obp))=i3;
+							pobj_DataTableSchedule->add();
+							obp+=sizeof(long);
+						}
+					}
+					else if(type[sp]==DEF_SINGLE){
+						//32ビット浮動小数型
+						bXmm=1;
+
+						float flt;
+						int i32data;
+						memcpy(&dbl,&i64data,sizeof(double));
+						flt=(float)dbl;
+						memcpy(&i32data,&flt,sizeof(long));
+
+						if(XmmReg==REG_XMM4){
+							//push term
+							op_push_value(i32data);
+						}
+						else{
+							i3=AddDataTable((char *)&i32data,sizeof(long));
+
+							//movss xmm_reg,dword ptr[data table offset]
+							OpBuffer[obp++]=(char)0xF3;
+							OpBuffer[obp++]=(char)0x0F;
+							OpBuffer[obp++]=(char)0x10;
+							OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(XmmReg)<<3);
+							OpBuffer[obp++]=(char)0x25;
+							*((long *)(OpBuffer+obp))=i3;
+							pobj_DataTableSchedule->add();
+							obp+=sizeof(long);
+						}
+					}
+					else{
+						//整数
+
+						index_stack[sp]=GetLiteralIndex(i64data);
+
+						//mov reg,i64data
+						op_mov64_ToReg(UseReg,i64data);
+
+						if(UseReg==REG_R14){
+							//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+							pobj_sf->push(REG_R14);
+						}
+					}
+				}
+
+				if(bXmm) pobj_reg->LockXmmReg();
+				else pobj_reg->LockReg();
+
+				sp++;
+				break;
+
+			//論理演算子
+			case CALC_XOR:
+			case CALC_OR:
+			case CALC_AND:
+				if(!CalcTwoTerm_Logical(idCalc,type,index_stack,&sp)) goto error;
+				break;
+			case CALC_NOT:
+				//value[sp-1]=Not value[sp-1]
+				//NOT演算子
+				if(!Calc_Not(type,sp)) goto error;
+				break;
+
+			//比較演算子
+			case CALC_PE:		//value[sp-2] <= value[sp-1]
+			case CALC_QE:		//value[sp-2] >= value[sp-1]
+			case CALC_P:		//value[sp-2] <  value[sp-1]
+			case CALC_Q:		//value[sp-2] >  value[sp-1]
+			case CALC_NOTEQUAL:	//value[sp-2] <> value[sp-1]
+			case CALC_EQUAL:	//value[sp-2] =  value[sp-1]				
+				if(!CalcTwoTerm_Relational(idCalc,type,index_stack,&sp)) goto error;
+				break;
+
+			//ビットシフト
+			case CALC_SHL:	//value[sp-2] << value[sp-1]
+			case CALC_SHR:	//value[sp-2] >> value[sp-1]
+				if(!Calc_Shift(idCalc,type,&sp)) goto error;
+				break;
+
+			//算術演算
+			case CALC_ADDITION:
+			case CALC_SUBTRACTION:
+			case CALC_PRODUCT:
+				if(!CalcTwoTerm_Arithmetic(idCalc,type,index_stack,&sp)) goto error;
+				break;
+			case CALC_MOD:
+				//value[sp-2]%=value[sp-1]
+				//剰余演算
+				if(!Calc_Mod(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_QUOTIENT:
+				//value[sp-2]/=value[sp-1];
+				//除算
+				if(!Calc_Divide(type,&sp,BaseType)) goto error;
+				break;
+			case CALC_INTQUOTIENT:
+				//value[sp-2]/=value[sp-1]
+				//整数除算
+				if(!Calc_IntDivide(type,index_stack,&sp)) goto error;
+				break;
+			case CALC_MINUSMARK:
+				//value[sp-1]=-value[sp-1]
+				//符号反転
+				if(!Calc_MinusMark(type,sp)) goto error;
+				break;
+			case CALC_POWER:
+				//べき乗演算（浮動小数点演算のみ）
+				if(!Calc_Power(type,&sp)) goto error;
+				break;
+			case CALC_AS:
+				//キャスト
+				if(!Calc_Cast(type,index_stack,&sp)) goto error;
+				break;
+
+			default:
+				SetError(300,NULL,cp);
+				break;
+		}
+	}
+
+	if(bError) goto error;
+
+	if(sp!=1){
+		SetError(1,NULL,cp);
+		goto error;
+	}
+
+	if(bLiteralCalculation){
+		//右辺値が数値の定数式の場合
+		LONG_PTR lpClassIndex;
+		i2=StaticCalculation(true, Command,BaseType,&i64data,&lpClassIndex);
+
+		obp=BeforeObp;
+		pobj_SubAddrSchedule->num=Before_ProcAddrScheduleNum;
+		pobj_DataTableSchedule->num=Before_DataTableScheduleNum;
+		pobj_Reloc->copy(pobj_BackReloc);
+		pobj_sf->num=Before_StackFrameScheduleNum;
+		*pobj_reg=objReg_Backup;
+
+		if(IsRealNumberType(i2)){
+			if(IsRealNumberType(BaseType)) i2=BaseType;
+
+			XmmReg=pobj_reg->LockXmmReg();
+
+			if(i2==DEF_DOUBLE){
+				i3=AddDataTable((char *)&i64data,sizeof(_int64));
+
+				//movlpd xmm_reg,qword ptr[data table offset]
+				OpBuffer[obp++]=(char)0x66;
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x12;
+				OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(XmmReg)<<3);
+				OpBuffer[obp++]=(char)0x25;
+				*((long *)(OpBuffer+obp))=i3;
+				pobj_DataTableSchedule->add();
+				obp+=sizeof(long);
+			}
+			if(i2==DEF_SINGLE){
+				memcpy(&dbl,&i64data,sizeof(_int64));
+
+				float flt;
+				int i32data;
+				flt=(float)dbl;
+				memcpy(&i32data,&flt,sizeof(long));
+
+				i3=AddDataTable((char *)&i32data,sizeof(long));
+
+				//movss xmm_reg,dword ptr[data table offset]
+				OpBuffer[obp++]=(char)0xF3;
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x10;
+				OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(XmmReg)<<3);
+				OpBuffer[obp++]=(char)0x25;
+				*((long *)(OpBuffer+obp))=i3;
+				pobj_DataTableSchedule->add();
+				obp+=sizeof(long);
+			}
+		}
+		else{
+			if(!Is64Type(i2)){
+				//整数（符号有り/無し）
+
+				i3=(long)i64data;
+
+				if(GetTypeSize(i2,-1)==sizeof(char)) i3=i3&0x000000FF;
+				if(GetTypeSize(i2,-1)==sizeof(short)) i3=i3&0x0000FFFF;
+
+				i64data=(_int64)i3;
+			}
+
+			UseReg=pobj_reg->LockReg();
+
+			//mov reg,i64data
+			op_mov64_ToReg(UseReg,i64data);
+		}
+
+		type[0]=i2;
+		index_stack[0]=lpClassIndex;
+	}
+	else{
+		//右辺値が数値の定数式ではないとき
+		if(IS_LITERAL(index_stack[0])) index_stack[0]=-1;
+	}
+
+	if(plpIndex) *plpIndex=index_stack[0];
+	if(pbUseHeap) *pbUseHeap=bUseHeap[0];
+
+	if(IsRealNumberType(type[0]))
+		*pReg=pobj_reg->UnlockXmmReg();
+	else
+		*pReg=pobj_reg->UnlockReg();
+
+
+	if(bInitRegSwitch){
+		//整合性をチェック（バグ回避）
+		pobj_reg->bug_check();
+
+		//作業レジスタを解放
+		delete pobj_reg;
+		pobj_reg=0;
+	}
+
+	int RetType;
+	RetType=type[0];
+	goto finish;
+
+
+
+	//////////////////
+	// エラー処理
+	//////////////////
+
+error:
+
+	*pobj_reg=objReg_Backup;
+
+	if(bInitRegSwitch){
+		//作業レジスタを解放
+		delete pobj_reg;
+		pobj_reg=0;
+	}
+
+	RetType=-1;
+	goto finish;
+
+
+
+
+finish:
+
+	for(i=0;i<pnum;i++){
+		if(values[i]) HeapDefaultFree(values[i]);
+	}
+
+	//再配置スケジュールバックアップ情報を解放
+	delete pobj_BackReloc;
+
+	return RetType;
+}
Index: /BasicCompiler64/NumOpe_Arithmetic.cpp
===================================================================
--- /BasicCompiler64/NumOpe_Arithmetic.cpp	(revision 3)
+++ /BasicCompiler64/NumOpe_Arithmetic.cpp	(revision 3)
@@ -0,0 +1,774 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void GetStackData_ToRegister(int *type,int sp){
+	/*NumOpeポーランドのスタック蓄積による演算内容（2つのデータ）を
+		レジスタedx:eax、ecx:ebxに取得する*/
+
+	if(type[sp-1]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//fistp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop ecx
+		op_pop(REG_ECX);
+	}
+	else if(type[sp-1]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fistp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop ecx
+		op_pop(REG_ECX);
+	}
+	else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		//pop ebx
+		op_pop(REG_EBX);
+
+		//pop ecx
+		op_pop(REG_ECX);
+	}
+	else{
+		//pop eax
+		op_pop(REG_EAX);
+
+		if(IsSignedType(type[sp-1])){
+			//符号拡張
+			//edx:eax ← eax
+				
+			//cdq
+			OpBuffer[obp++]=(char)0x99;
+		}
+		else{
+			//ビット拡張
+			//edx:eax ← eax
+
+			//xor rdx,rdx
+			op_zero_reg(REG_RDX);
+		}
+
+		//mov ebx,eax
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0xD8;
+
+		//mov ecx,edx
+		OpBuffer[obp++]=(char)0x8B;
+		OpBuffer[obp++]=(char)0xCA;
+	}
+
+	//第1項を64ビットに対応させる
+	if(type[sp-2]==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		op_fld_ptr_esp(DEF_DOUBLE);
+
+		//fistp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else if(type[sp-2]==DEF_SINGLE){
+		//fld dword ptr[esp]
+		op_fld_ptr_esp(DEF_SINGLE);
+
+		//sub esp,4
+		op_sub_esp(4);
+
+		//fistp qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x3C;
+		OpBuffer[obp++]=(char)0x24;
+
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
+		//pop eax
+		op_pop(REG_EAX);
+
+		//pop edx
+		op_pop(REG_EDX);
+	}
+	else{
+		//pop eax
+		op_pop(REG_EAX);
+
+		if(IsSignedType(type[sp-2])){
+			//符号拡張
+			//edx:eax ← eax
+				
+			//cdq
+			OpBuffer[obp++]=(char)0x99;
+		}
+		else{
+			//ビット拡張
+			//edx:eax ← eax
+
+			//xor rdx,rdx
+			op_zero_reg(REG_RDX);
+		}
+	}
+}
+
+BOOL CalcTwoTerm_Arithmetic(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer){
+	/*	value[sp-2] = value[sp-2] + value[sp-1]
+		value[sp-2] = value[sp-2] - value[sp-1]
+		value[sp-2] = value[sp-2] * value[sp-1]		*/
+
+	int reg1,reg2;
+
+	int sp;
+	sp=*pStackPointer;
+
+	int AnswerType;
+	AnswerType=NeutralizationType(type[sp-2],index_stack[sp-2],type[sp-1],index_stack[sp-1]);
+
+	if(type[sp-2]==DEF_DOUBLE||type[sp-2]==DEF_SINGLE||
+		type[sp-1]==DEF_DOUBLE||type[sp-1]==DEF_SINGLE){
+		/////////////
+		// 実数演算
+		/////////////
+
+		int xmm_reg1,xmm_reg2;
+
+		//2つの項を適切なレジスタにセット
+		SetTowTermToReg_RealCalc(AnswerType,type,sp,&xmm_reg1,&xmm_reg2);
+
+		if(AnswerType==DEF_DOUBLE){
+			///////////////////////
+			// Double演算
+			///////////////////////
+
+			if(idCalc==CALC_ADDITION){
+				//addsd xmm_reg1,xmm_reg2
+				OpBuffer[obp++]=(char)0xF2;
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x58;
+				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+			}
+			else if(idCalc==CALC_SUBTRACTION){
+				//subsd xmm_reg1,xmm_reg2
+				OpBuffer[obp++]=(char)0xF2;
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x5C;
+				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+			}
+			else if(idCalc==CALC_PRODUCT){
+				//mulsd xmm_reg1,xmm_reg2
+				OpBuffer[obp++]=(char)0xF2;
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x59;
+				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+			}
+
+			if(xmm_reg1==REG_XMM4){
+				//movsd qword ptr[rsp+offset],xmm4		※スタックフレームを利用
+				pobj_sf->push(REG_XMM4,sizeof(double));
+			}
+		}
+		if(AnswerType==DEF_SINGLE){
+			///////////////////////
+			// Single演算
+			///////////////////////
+
+			if(idCalc==CALC_ADDITION){
+				//addss xmm_reg1,xmm_reg2
+				OpBuffer[obp++]=(char)0xF3;
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x58;
+				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+			}
+			else if(idCalc==CALC_SUBTRACTION){
+				//subss xmm_reg1,xmm_reg2
+				OpBuffer[obp++]=(char)0xF3;
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x5C;
+				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+			}
+			else if(idCalc==CALC_PRODUCT){
+				//mulss xmm_reg1,xmm_reg2
+				OpBuffer[obp++]=(char)0xF3;
+				OpBuffer[obp++]=(char)0x0F;
+				OpBuffer[obp++]=(char)0x59;
+				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+			}
+
+			if(xmm_reg1==REG_XMM4){
+				//movss dword ptr[rsp+offset],xmm4		※スタックフレームを利用
+				pobj_sf->push(REG_XMM4,sizeof(float));
+			}
+		}
+	}
+	else if(Is64Type(type[sp-2])||Is64Type(type[sp-1])){
+		//////////////////////
+		// 64ビット整数演算
+		//////////////////////
+
+		SetTowTermToReg_Whole64Calc(type,sp,&reg1,&reg2);
+
+		if(idCalc==CALC_ADDITION){
+			//add reg1,reg2
+			op_add64_reg(reg1,reg2);
+		}
+		else if(idCalc==CALC_SUBTRACTION){
+			//sub reg1,reg2
+			op_sub64_reg(reg1,reg2);
+		}
+		else if(idCalc==CALC_PRODUCT){
+			//mul reg1,reg2
+			op_imul_reg(sizeof(_int64),reg1,reg2);
+		}
+
+		if(reg1==REG_R14){
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+	}
+	else{
+		//32ビット以下の整数演算
+
+		SetTowTermToReg_Whole32Calc(type,sp,&reg1,&reg2);
+
+		if(idCalc==CALC_ADDITION){
+			//add reg1,reg2
+			op_add32_reg(reg1,reg2);
+		}
+		else if(idCalc==CALC_SUBTRACTION){
+			//sub reg1,reg2
+			op_sub32_reg(reg1,reg2);
+		}
+		else if(idCalc==CALC_PRODUCT){
+			//mul reg1,reg2
+			op_imul_reg(sizeof(long),reg1,reg2);
+		}
+
+		if(reg1==REG_R14){
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+	}
+
+	sp--;
+	type[sp-1]=AnswerType;
+
+	*pStackPointer=sp;
+
+	return 1;
+}
+
+
+
+BOOL Calc_Mod(int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2]%=value[sp-1]
+	//剰余演算
+
+	int reg1,reg2;
+	int AnswerType;
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
+		//実数演算は行えないため、エラー扱い
+		SetError(45,"mod",cp);
+		return 0;
+	}
+
+	/////////////////////////
+	// 64ビット整数演算のみ
+	/////////////////////////
+
+	AnswerType=NeutralizationType(type[sp-2],index_stack[sp-2],type[sp-1],index_stack[sp-1]);
+
+	//2つの項を適切なレジスタにセット
+	SetTowTermToReg_Whole64Calc(type,sp,&reg1,&reg2);
+
+	if(reg2==REG_RAX||reg2==REG_RDX){
+		//mov r15,reg2
+		op_mov64_ToReg_FromReg(REG_R15,reg2);
+
+		reg2=REG_R15;
+	}
+
+	//mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
+	pobj_sf->push(REG_RAX);
+
+	if(reg1!=REG_RDX){
+		//mov qword ptr[rsp+offset],rdx     ※スタックフレームを利用
+		pobj_sf->push(REG_RDX);
+	}
+
+	//mov rax,reg1
+	op_mov64_ToReg_FromReg(REG_RAX,reg1);
+
+	if(IsSignedType(type[sp-2])){
+		//符号拡張
+		//rdx:rax ← rax
+
+		//cqo
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)0x99;
+	}
+	else{
+		//ビット拡張
+		//rdx:rax ← rax
+
+		//xor rdx,rdx
+		op_zero_reg(REG_RDX);
+	}
+
+	if(IsSignedType(AnswerType)){
+		//idiv reg2
+		op_idiv64_reg(reg2);
+	}
+	else{
+		//div reg2
+		op_div64_reg(reg2);
+	}
+
+	//mov rax,qword ptr[rsp+offset]     ※スタックフレームを利用
+	pobj_sf->pop(REG_RAX);
+
+	//mov reg1,rdx
+	op_mov64_ToReg_FromReg(reg1,REG_RDX);
+
+	if(reg1!=REG_RDX){
+		//mov rdx,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_RDX);
+	}
+
+	if(reg1==REG_R14){
+		//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+		pobj_sf->push(REG_R14);
+	}
+
+	sp--;
+	type[sp-1]=AnswerType;
+
+
+	*pStackPointer=sp;
+
+	return 1;
+}
+
+BOOL Calc_Divide(int *type,int *pStackPointer,int BaseType){
+	//value[sp-2]/=value[sp-1];
+	//除算
+
+	int sp;
+	sp=*pStackPointer;
+
+	///////////////////////
+	// 実数演算のみ
+	///////////////////////
+
+	int AnswerType;
+	if(type[sp-2]==DEF_SINGLE&&type[sp-1]==DEF_SINGLE&&BaseType==DEF_SINGLE) AnswerType=DEF_SINGLE;
+	else AnswerType=DEF_DOUBLE;
+
+	int xmm_reg1,xmm_reg2;
+
+	//2つの項を適切なレジスタにセット
+	SetTowTermToReg_RealCalc(AnswerType,type,sp,&xmm_reg1,&xmm_reg2);
+
+	if(AnswerType==DEF_DOUBLE){
+		///////////////////////
+		// Double演算
+		///////////////////////
+
+		//divsd xmm_reg1,xmm_reg2
+		OpBuffer[obp++]=(char)0xF2;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x5E;
+		OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+
+		if(xmm_reg1==REG_XMM4){
+			//movsd qword ptr[rsp+offset],xmm4		※スタックフレームを利用
+			pobj_sf->push(REG_XMM4,sizeof(double));
+		}
+	}
+	if(AnswerType==DEF_SINGLE){
+		///////////////////////
+		// Single演算
+		///////////////////////
+
+		//divss xmm_reg1,xmm_reg2
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x5E;
+		OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+
+		if(xmm_reg1==REG_XMM4){
+			//movss dword ptr[rsp+offset],xmm4		※スタックフレームを利用
+			pobj_sf->push(REG_XMM4,sizeof(float));
+		}
+	}
+
+	sp--;
+	type[sp-1]=AnswerType;
+
+
+	*pStackPointer=sp;
+
+	return 1;
+}
+
+BOOL Calc_IntDivide(int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2]/=value[sp-1]
+	//除算（整数）
+
+	int reg1,reg2;
+	int AnswerType;
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
+		//実数演算は行えないため、エラー扱い
+		SetError(45,"mod",cp);
+		return 0;
+	}
+
+	/////////////////////////
+	// 64ビット整数演算のみ
+	/////////////////////////
+
+	AnswerType=NeutralizationType(type[sp-2],index_stack[sp-2],type[sp-1],index_stack[sp-1]);
+
+	//2つの項を適切なレジスタにセット
+	SetTowTermToReg_Whole64Calc(type,sp,&reg1,&reg2);
+
+	if(reg2==REG_RAX||reg2==REG_RDX){
+		//mov r15,reg2
+		op_mov64_ToReg_FromReg(REG_R15,reg2);
+
+		reg2=REG_R15;
+	}
+
+	//mov qword ptr[rsp+offset],rdx     ※スタックフレームを利用
+	pobj_sf->push(REG_RDX);
+
+	if(reg1!=REG_RAX){
+		//mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
+		pobj_sf->push(REG_RAX);
+	}
+
+	//mov rax,reg1
+	op_mov64_ToReg_FromReg(REG_RAX,reg1);
+
+	if(IsSignedType(type[sp-2])){
+		//符号拡張
+		//rdx:rax ← rax
+
+		//cqo
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)0x99;
+	}
+	else{
+		//ビット拡張
+		//rdx:rax ← rax
+
+		//xor rdx,rdx
+		op_zero_reg(REG_RDX);
+	}
+
+	if(IsSignedType(AnswerType)){
+		//idiv reg2
+		op_idiv64_reg(reg2);
+	}
+	else{
+		//div reg2
+		op_div64_reg(reg2);
+	}
+
+	//mov reg1,rax
+	op_mov64_ToReg_FromReg(reg1,REG_RAX);
+
+	if(reg1!=REG_RAX){
+		//mov rax,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_RAX);
+	}
+
+	//mov rdx,qword ptr[rsp+offset]     ※スタックフレームを利用
+	pobj_sf->pop(REG_RDX);
+
+
+	if(reg1==REG_R14){
+		//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+		pobj_sf->push(REG_R14);
+	}
+
+	sp--;
+	type[sp-1]=AnswerType;
+
+
+	*pStackPointer=sp;
+
+	return 1;
+}
+
+BOOL Calc_MinusMark(int *type,int sp){
+	//value[sp-1]=-value[sp-1]
+	//符号反転
+
+	int xmm_reg;
+	int reg;
+	int i32data;
+
+	if(type[sp-1]==DEF_DOUBLE){
+		SetOneTermToReg_RealCalc(type[sp-1],&xmm_reg);
+
+		double dbl;
+		dbl=-1;
+		i32data=AddDataTable((char *)&dbl,sizeof(double));
+
+		//mulsd xmm_reg,qword ptr[data table offset]   ※data = -1
+		OpBuffer[obp++]=(char)0xF2;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x59;
+		OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=i32data;
+		pobj_DataTableSchedule->add();
+		obp+=sizeof(long);
+
+		if(xmm_reg==REG_XMM4){
+			//movsd qword ptr[rsp+offset],xmm4		※スタックフレームを利用
+			pobj_sf->push(REG_XMM4,sizeof(double));
+		}
+	}
+	else if(type[sp-1]==DEF_SINGLE){
+		SetOneTermToReg_RealCalc(type[sp-1],&xmm_reg);
+
+		float flt;
+		flt=-1;
+		i32data=AddDataTable((char *)&flt,sizeof(float));
+
+		//mulss xmm_reg,dword ptr[data table offset]   ※data = -1
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x59;
+		OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=i32data;
+		pobj_DataTableSchedule->add();
+		obp+=sizeof(long);
+
+		if(xmm_reg==REG_XMM4){
+			//movss dword ptr[rsp+offset],xmm4		※スタックフレームを利用
+			pobj_sf->push(REG_XMM4,sizeof(float));
+		}
+	}
+	else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		SetOneTermToReg_Whole64Calc(type[sp-1],&reg);
+
+		//imul reg,-1
+		op_imul_value(sizeof(_int64),reg,-1);
+
+		if(reg==REG_R14){
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+
+		type[sp-1]=DEF_INT64;	//QWordはInt64へ
+	}
+	else if(IsWholeNumberType(type[sp-1])){
+		SetOneTermToReg_Whole32Calc(type[sp-1],&reg);
+
+		//imul reg,-1
+		op_imul_value(sizeof(long),reg,-1);
+
+		if(reg==REG_R14){
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+
+		type[sp-1]=GetSignedType(type[sp-1]);
+	}
+
+	return 1;
+}
+
+BOOL Calc_Power(int *type,int *pStackPointer){
+	//べき乗（実数演算のみ）
+
+	int sp;
+	sp=*pStackPointer;
+
+
+	//2つの項を適切なレジスタにセット
+	int xmm_reg1,xmm_reg2;
+	SetTowTermToReg_RealCalc(DEF_DOUBLE,type,sp,&xmm_reg1,&xmm_reg2);
+
+
+	//////////////////////////////////////////////////////
+	/////    レジスタ資源のバックアップ
+	{	BACKUP_REGISTER_RESOURCE
+	//////////////////////////////////////////////////////
+
+
+		////////////////
+		// 呼び出し
+		////////////////
+
+		if(xmm_reg1==REG_XMM1){
+			//movsd xmm0,xmm_reg1
+			op_movsd_RR(REG_XMM0,xmm_reg1);
+
+			//movsd xmm1,xmm_reg2
+			op_movsd_RR(REG_XMM1,xmm_reg2);
+		}
+		else{
+			//movsd xmm1,xmm_reg2
+			op_movsd_RR(REG_XMM1,xmm_reg2);
+
+			//movsd xmm0,xmm_reg1
+			op_movsd_RR(REG_XMM0,xmm_reg1);
+		}
+
+		//call pow
+		extern SUBINFO *pSub_pow;
+		op_call(pSub_pow);
+
+		//movsd xmm4,xmm0
+		op_movsd_RR(REG_XMM4,REG_XMM0);
+
+
+	/////////////////////////////////////////////
+	//////   レジスタ資源を復元
+		RESTORE_REGISTER_RESOURCE
+	}////////////////////////////////////////////
+
+
+	//////////////////////////////////
+	// 戻り値を所定のレジスタへ格納
+	//////////////////////////////////
+
+	if(xmm_reg1==REG_XMM4){
+		//movsd qword ptr[rsp+offset],xmm4		※スタックフレームを利用
+		pobj_sf->push(REG_XMM0,sizeof(double));
+	}
+	else{
+		//movsd xmm_reg1,xmm4
+		op_movsd_RR(xmm_reg1,REG_XMM4);
+	}
+
+
+	sp--;
+	type[sp-1]=DEF_DOUBLE;
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Shift(int idCalc,int *type,int *pStackPointer){
+	//ビットシフト
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
+		//いずれかの項が実数のとき
+		SetError(45,"<<",cp);
+		return 0;
+	}
+
+
+	/////////////////////////
+	// 64ビット整数演算のみ
+	/////////////////////////
+	int reg1,reg2;
+
+	//2つの項を適切なレジスタにセット
+	SetTowTermToReg_Whole64Calc(type,sp,&reg1,&reg2);
+
+	int sw=0;
+	if(reg1==REG_RCX){
+		//mov r15,rcx
+		op_mov64_ToReg_FromReg(REG_R15,REG_RCX);
+
+		reg1=REG_R15;
+	}
+	else if(reg2!=REG_RCX){
+		sw=1;
+
+		//mov qword ptr[rsp+offset],rcx     ※スタックフレームを利用
+		pobj_sf->push(REG_RCX);
+	}
+
+	//mov rcx,reg2
+	op_mov64_ToReg_FromReg(REG_RCX,reg2);
+
+	if(idCalc==CALC_SHL){
+		//左シフトは符号あり、なしは同様の動きをする
+
+		//32ビット型にする
+		if(!Is64Type(type[sp-2])){
+			ExtendTypeTo32(type[sp-2],reg1);
+
+			if(IsSignedType(type[sp-2])) type[sp-2]=DEF_LONG;
+			else type[sp-2]=DEF_DWORD;
+		}
+
+		//shl reg1,cl
+		op_shl_reg(GetTypeSize(type[sp-2],-1),reg1);
+	}
+	else if(idCalc==CALC_SHR){
+		if(IsSignedType(type[sp-2])){
+			//符号あり
+
+			//sar
+			op_sar_reg(GetTypeSize(type[sp-2],-1),reg1);
+		}
+		else{
+			//符号なし
+
+			//shr
+			op_shr_reg(GetTypeSize(type[sp-2],-1),reg1);
+		}
+	}
+
+	if(sw==0){
+		//mov rcx,r15
+		op_mov64_ToReg_FromReg(REG_RCX,REG_R15);
+	}
+	else{
+		//mov rcx,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_RCX);
+	}
+
+	if(reg1==REG_R14){
+		//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+		pobj_sf->push(REG_R14);
+	}
+
+	sp--;
+
+	*pStackPointer=sp;
+	return 1;
+}
Index: /BasicCompiler64/NumOpe_Logical.cpp
===================================================================
--- /BasicCompiler64/NumOpe_Logical.cpp	(revision 3)
+++ /BasicCompiler64/NumOpe_Logical.cpp	(revision 3)
@@ -0,0 +1,114 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+BOOL CalcTwoTerm_Logical(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//value[sp-2] xor= value[sp-1]
+	//xor演算
+
+	int sp;
+	sp=*pStackPointer;
+
+	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
+		//いずれかの項が実数のとき
+		SetError(45,"xor",cp);
+		return 0;
+	}
+
+	int reg1,reg2;
+
+	if(Is64Type(type[sp-2])||Is64Type(type[sp-1])){
+		//////////////////////
+		// 64ビット整数演算
+		//////////////////////
+
+		SetTowTermToReg_Whole64Calc(type,sp,&reg1,&reg2);
+
+		if(idCalc==CALC_XOR){
+			//xor reg1,reg2
+			op_xor_reg(sizeof(_int64),reg1,reg2);
+		}
+		else if(idCalc==CALC_OR){
+			//or reg1,reg2
+			op_or_reg(sizeof(_int64),reg1,reg2);
+		}
+		else if(idCalc==CALC_AND){
+			//and reg1,reg2
+			op_and_reg(sizeof(_int64),reg1,reg2);
+		}
+
+		if(reg1==REG_R14){
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+
+		sp--;
+		type[sp-1]=NeutralizationType(type[sp-1],index_stack[sp-1],type[sp],index_stack[sp]);
+	}
+	else{
+		//32ビット以下の整数演算
+
+		SetTowTermToReg_Whole32Calc(type,sp,&reg1,&reg2);
+
+		if(idCalc==CALC_ADDITION){
+			//add reg1,reg2
+			op_xor_reg(sizeof(long),reg1,reg2);
+		}
+		else if(idCalc==CALC_OR){
+			//or reg1,reg2
+			op_or_reg(sizeof(long),reg1,reg2);
+		}
+		else if(idCalc==CALC_AND){
+			//and reg1,reg2
+			op_and_reg(sizeof(long),reg1,reg2);
+		}
+
+		if(reg1==REG_R14){
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+
+		sp--;
+		type[sp-1]=NeutralizationType(type[sp-1],index_stack[sp-1],type[sp],index_stack[sp]);
+	}
+
+	*pStackPointer=sp;
+	return 1;
+}
+
+BOOL Calc_Not(int *type,int sp){
+	//value[sp-1]=Not value[sp-1]
+	//NOT演算子
+
+	if(IsRealNumberType(type[sp-1])){
+		//実数のとき
+		SetError(45,"Not",cp);
+		return 0;
+	}
+
+	int reg;
+
+	if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
+		SetOneTermToReg_Whole64Calc(type[sp-1],&reg);
+
+		//not reg
+		op_not_reg(sizeof(_int64),reg);
+
+		if(reg==REG_R14){
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+	}
+	else if(IsWholeNumberType(type[sp-1])){
+		SetOneTermToReg_Whole32Calc(type[sp-1],&reg);
+
+		//not reg
+		op_not_reg(sizeof(long),reg);
+
+		if(reg==REG_R14){
+			//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+			pobj_sf->push(REG_R14);
+		}
+	}
+
+	return 1;
+}
Index: /BasicCompiler64/NumOpe_Relation.cpp
===================================================================
--- /BasicCompiler64/NumOpe_Relation.cpp	(revision 3)
+++ /BasicCompiler64/NumOpe_Relation.cpp	(revision 3)
@@ -0,0 +1,164 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+BOOL CalcTwoTerm_Relational(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer){
+	int reg1,reg2;
+	int AnswerType;
+
+	int sp;
+	sp=*pStackPointer;
+
+	AnswerType=NeutralizationType(type[sp-2],index_stack[sp-2],type[sp-1],index_stack[sp-1]);
+
+	if(IsRealNumberType(AnswerType)){
+		////////////////
+		// 実数演算
+		////////////////
+		int xmm_reg1,xmm_reg2;
+
+		//2つの項を適切なレジスタにセット
+		SetTowTermToReg_RealCalc(AnswerType,type,sp,&xmm_reg1,&xmm_reg2);
+
+		if(AnswerType==DEF_DOUBLE){
+			//comisd xmm_reg1,xmm_reg2
+			op_comisd(xmm_reg1,xmm_reg2);
+		}
+		else if(AnswerType==DEF_SINGLE){
+			//comiss xmm_reg1,xmm_reg2
+			op_comiss(xmm_reg1,xmm_reg2);
+		}
+
+		//Xmmレジスタを解放
+		pobj_reg->UnlockXmmReg();
+
+		//汎用レジスタを確保
+		reg1=pobj_reg->LockReg();
+	}
+	else if(Is64Type(AnswerType)){
+		//////////////////////
+		// 64ビット整数演算
+		//////////////////////
+
+		//2つの項を適切なレジスタにセット
+		SetTowTermToReg_Whole64Calc(type,sp,&reg1,&reg2);
+
+		//cmp reg1,reg2
+		op_cmp_reg(sizeof(_int64),reg1,reg2);
+	}
+	else{
+		//////////////////////
+		// 32ビット整数演算
+		//////////////////////
+
+		//2つの項を適切なレジスタにセット
+		SetTowTermToReg_Whole32Calc(type,sp,&reg1,&reg2);
+
+		//cmp reg1,reg2
+		op_cmp_reg(sizeof(long),reg1,reg2);
+	}
+
+
+	////////////////////
+	// 条件分岐
+	////////////////////
+
+	if(idCalc==CALC_PE){
+		//	reg1 <= reg2
+		if(IsSignedType(AnswerType)&&IsWholeNumberType(AnswerType)){
+			//符号あり演算
+			//jle
+			OpBuffer[obp++]=(char)0x7E;
+		}
+		else{
+			//符号なし演算
+			//jbe
+			OpBuffer[obp++]=(char)0x76;
+		}
+	}
+	else if(idCalc==CALC_QE){
+		//  reg1 >= reg2
+		if(IsSignedType(AnswerType)&&IsWholeNumberType(AnswerType)){
+			//符号あり演算
+			//jge
+			OpBuffer[obp++]=(char)0x7D;
+		}
+		else{
+			//符号なし演算
+			//jae
+			OpBuffer[obp++]=(char)0x73;
+		}
+	}
+	else if(idCalc==CALC_P){
+		//	reg1 < reg2
+		if(IsSignedType(AnswerType)&&IsWholeNumberType(AnswerType)){
+			//符号あり演算
+			//jl
+			OpBuffer[obp++]=(char)0x7C;
+		}
+		else{
+			//符号なし演算
+			//jb
+			OpBuffer[obp++]=(char)0x72;
+		}
+	}
+	else if(idCalc==CALC_Q){
+		//  reg1 > reg2
+		if(IsSignedType(AnswerType)&&IsWholeNumberType(AnswerType)){
+			//符号あり演算
+			//jg
+			OpBuffer[obp++]=(char)0x7F;
+		}
+		else{
+			//符号なし演算
+			//ja
+			OpBuffer[obp++]=(char)0x77;
+		}
+	}
+	else if(idCalc==CALC_NOTEQUAL){
+		//  reg1 <> reg2
+
+		//jne
+		OpBuffer[obp++]=(char)0x75;
+	}
+	else if(idCalc==CALC_EQUAL){
+		//  reg1 = reg2
+
+		//je
+		OpBuffer[obp++]=(char)0x74;
+	}
+	OpBuffer[obp++]=(char)0x05;
+
+
+	//////////////////////
+	// FALSEをセット
+	//////////////////////
+
+	//xor reg1,reg1
+	op_zero_reg(reg1);
+
+	//jmp 7（xorを飛び越す）
+	OpBuffer[obp++]=(char)0xEB;
+	OpBuffer[obp++]=(char)0x07;
+
+
+	///////////////////
+	// TRUEをセット
+	///////////////////
+
+	//mov reg1,-1
+	op_mov_RV(sizeof(_int64),reg1,-1);
+
+
+	if(reg1==REG_R14){
+		//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+		pobj_sf->push(REG_R14);
+	}
+
+	sp--;
+
+	*pStackPointer=sp;
+
+	type[sp-1]=DEF_LONG;
+
+	return 1;
+}
Index: /BasicCompiler64/NumOpe_TypeOperation.cpp
===================================================================
--- /BasicCompiler64/NumOpe_TypeOperation.cpp	(revision 3)
+++ /BasicCompiler64/NumOpe_TypeOperation.cpp	(revision 3)
@@ -0,0 +1,561 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void ExtendTypeTo64(int type,int reg){
+	if(type==DEF_LONG){
+		//movsxd reg64,reg32
+		op_movsxd(reg,reg);
+	}
+	else if(type==DEF_DWORD){
+		//and reg,00000000FFFFFFFFh
+	}
+	else if(type==DEF_INTEGER){
+		//movsx reg64,reg16
+		op_movsx64_FromReg16(reg,reg);
+	}
+	else if(type==DEF_WORD){
+		//and reg,000000000000FFFFh
+		op_and64_value(reg,(int)0xFFFF);
+	}
+	else if(type==DEF_CHAR){
+		//movsx reg64,reg8
+		op_movsx64_FromReg8(reg,reg);
+	}
+	else if(type==DEF_BYTE){
+		//and reg,00000000000000FFh
+		op_and64_value(reg,(int)0x00FF);
+	}
+}
+void ExtendTypeTo32(int type,int reg){
+	if(type==DEF_INTEGER){
+		//movsx reg32,reg16
+		op_movsx32_FromReg16(reg,reg);
+	}
+	else if(type==DEF_WORD){
+		//and reg,0000FFFFh
+		op_and32_value(reg,(int)0xFFFF);
+	}
+	else if(type==DEF_CHAR){
+		//movsx reg32,reg8
+		op_movsx32_FromReg8(reg,reg);
+	}
+	else if(type==DEF_BYTE){
+		//and reg,000000FFh
+		op_and32_value(reg,(int)0xFF);
+	}
+}
+void ExtendTypeTo16(int type,int reg){
+	if(type==DEF_CHAR){
+		//movsx reg16,reg8
+		op_movsx16_FromReg8(reg,reg);
+	}
+	else if(type==DEF_BYTE){
+		//and reg,000000FFh
+		op_and32_value(reg,(int)0xFF);
+	}
+}
+
+void ChangeTypeToXmm_Double(int type,int xmm_reg,int general_reg){
+	if(type==DEF_DOUBLE){
+		//なにもしない
+	}
+	else if(type==DEF_SINGLE){
+		//Single型
+
+		//cvtss2sd
+		op_cvtss2sd(xmm_reg,xmm_reg);
+	}
+	else if(Is64Type(type)){
+		//64ビット整数型
+
+		//cvtsi2sd xmm_reg,reg
+		op_cvtsi2sd_reg(sizeof(_int64),xmm_reg,general_reg);
+
+		if(type==DEF_QWORD){
+			//符号なし
+
+			//test reg,reg
+			op_test(general_reg,general_reg);
+
+			//jge 9
+			OpBuffer[obp++]=(char)0x7D;
+			OpBuffer[obp++]=(char)0x09;
+
+			//addsd xmm_reg,qword ptr[offset]	※offset value:43f0000000000000
+			int temp;
+			_int64 i64data=0x43f0000000000000;
+			temp=AddDataTable((char *)&i64data,sizeof(_int64));
+			OpBuffer[obp++]=(char)0xF2;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x58;
+			OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
+			OpBuffer[obp++]=(char)0x25;
+			*((long *)(OpBuffer+obp))=temp;
+			pobj_DataTableSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(type==DEF_DWORD){
+		//符号なし32ビット値
+
+		//64ビットにレジスタ値を拡張
+		ExtendTypeTo64(type,general_reg);
+
+		//cvtsi2sd xmm_reg,reg
+		op_cvtsi2sd_reg(sizeof(_int64),xmm_reg,general_reg);
+	}
+	else{
+		//その他整数
+
+		//32ビットにレジスタ値を拡張
+		ExtendTypeTo32(type,general_reg);
+
+		//cvtsi2sd xmm_reg,reg
+		op_cvtsi2sd_reg(sizeof(long),xmm_reg,general_reg);
+	}
+}
+void ChangeTypeToXmm_Single(int type,int xmm_reg,int general_reg){
+	if(type==DEF_DOUBLE){
+		//Double型
+
+		//cvtsd2ss
+		op_cvtsd2ss(xmm_reg,xmm_reg);
+	}
+	else if(type==DEF_SINGLE){
+		//なにもしない
+	}
+	else if(Is64Type(type)){
+		//64ビット整数型
+
+		//cvtsi2ss xmm_reg,reg
+		op_cvtsi2ss_reg(sizeof(_int64),xmm_reg,general_reg);
+
+		if(type==DEF_QWORD){
+			//符号なし
+
+			//test reg,reg
+			op_test(general_reg,general_reg);
+
+			//jge 9
+			OpBuffer[obp++]=(char)0x7D;
+			OpBuffer[obp++]=(char)0x09;
+
+			//addss xmm_reg,dword ptr[offset]	※offset value:5f800000
+			int temp;
+			long i32data=0x5f800000;
+			temp=AddDataTable((char *)&i32data,sizeof(long));
+			OpBuffer[obp++]=(char)0xF3;
+			OpBuffer[obp++]=(char)0x0F;
+			OpBuffer[obp++]=(char)0x58;
+			OpBuffer[obp++]=(char)(0x04 | REGISTER_OPERAND(xmm_reg)<<3);
+			OpBuffer[obp++]=(char)0x25;
+			*((long *)(OpBuffer+obp))=temp;
+			pobj_DataTableSchedule->add();
+			obp+=sizeof(long);
+		}
+	}
+	else if(type==DEF_DWORD){
+		//符号なし32ビット値
+
+		//64ビットにレジスタ値を拡張
+		ExtendTypeTo64(type,general_reg);
+
+		//cvtsi2ss xmm_reg,reg
+		op_cvtsi2ss_reg(sizeof(_int64),xmm_reg,general_reg);
+	}
+	else{
+		//その他整数
+
+		//32ビットにレジスタ値を拡張
+		ExtendTypeTo32(type,general_reg);
+
+		//cvtsi2ss xmm_reg,reg
+		op_cvtsi2ss_reg(sizeof(long),xmm_reg,general_reg);
+	}
+}
+
+void ChangeTypeToWhole(int OldType,int NewType,int reg,int xmm_reg){
+	if(OldType==DEF_DOUBLE){
+		if(Is64Type(NewType)){
+			//cvttsd2si reg,xmm_reg
+			op_cvttsd2si_xmm(sizeof(_int64),reg,xmm_reg);
+		}
+		else{
+			//cvttsd2si reg,xmm_reg
+			op_cvttsd2si_xmm(sizeof(long),reg,xmm_reg);
+		}
+	}
+	else if(OldType==DEF_SINGLE){
+		if(Is64Type(NewType)){
+			//cvttss2si reg,xmm_reg
+			op_cvttss2si_xmm(sizeof(_int64),reg,xmm_reg);
+		}
+		else{
+			//cvttss2si reg,xmm_reg
+			op_cvttss2si_xmm(sizeof(long),reg,xmm_reg);
+		}
+	}
+	else{
+		//整数から整数へ変換
+
+		if(Is64Type(NewType)){
+			ExtendTypeTo64(OldType,reg);
+		}
+		else if(GetTypeSize(NewType,-1)==sizeof(long)){
+			ExtendTypeTo32(OldType,reg);
+		}
+		else if(GetTypeSize(NewType,-1)==sizeof(short)){
+			ExtendTypeTo16(OldType,reg);
+		}
+	}
+}
+
+
+
+/////////////////////////////////////////
+// 1つの項を適切なレジスタへセット
+/////////////////////////////////////////
+
+void SetOneTermToReg_RealCalc(int TermType,int *pXmmReg){
+	int xmm_reg;
+
+	if(IsRealNumberType(TermType)){
+		//実数型
+		xmm_reg=pobj_reg->GetLockingXmmReg();
+
+		if(xmm_reg==REG_XMM4){
+			if(TermType==DEF_DOUBLE){
+				//movlpd xmm4,qword ptr[rsp+offset]		※スタックフレームを利用
+				pobj_sf->pop(xmm_reg,sizeof(double));
+			}
+			if(TermType==DEF_SINGLE){
+				//movss xmm4,dword ptr[rsp+offset]		※スタックフレームを利用
+				pobj_sf->pop(xmm_reg,sizeof(float));
+			}
+		}
+	}
+	else{
+		SetError(300,NULL,cp);
+	}
+
+	*pXmmReg=xmm_reg;
+}
+void SetOneTermToReg_Whole64Calc(int TermType,int *pReg){
+	//1つの項を適切なレジスタへセット（64ビット整数演算用）
+	int reg;
+
+	reg=pobj_reg->GetLockingReg();
+
+	if(reg==REG_R14){
+		//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R14);
+	}
+
+	//レジスタ値を64ビットに拡張
+	ExtendTypeTo64(TermType,reg);
+
+	*pReg=reg;
+}
+void SetOneTermToReg_Whole32Calc(int TermType,int *pReg){
+	//1つの項を適切なレジスタへセット（32ビット整数演算用）
+	int reg;
+
+	reg=pobj_reg->GetLockingReg();
+
+	if(reg==REG_R14){
+		//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R14);
+	}
+
+	//レジスタ値を32ビットに拡張
+	ExtendTypeTo32(TermType,reg);
+
+	*pReg=reg;
+}
+
+
+
+/////////////////////////////////////////
+// 2つの項を適切なレジスタへセット
+/////////////////////////////////////////
+
+void SetTowTermToReg_RealCalc(int AnswerType,int *type,int sp,int *pXmmReg1,int *pXmmReg2){
+	//2つの項を適切なレジスタへセット（Double演算用）
+	int xmm_reg1,xmm_reg2,temp_reg;
+
+
+	///////////////////
+	// 第2項
+	///////////////////
+
+	if(IsRealNumberType(type[sp-1])){
+		//実数型
+		xmm_reg2=pobj_reg->UnlockXmmReg();
+
+		if(xmm_reg2==REG_XMM4){
+			xmm_reg2=REG_XMM5;
+
+			if(type[sp-1]==DEF_DOUBLE){
+				//movlpd xmm5,qword ptr[rsp+offset]		※スタックフレームを利用
+				pobj_sf->pop(xmm_reg2,sizeof(double));
+			}
+			if(type[sp-1]==DEF_SINGLE){
+				//movss xmm5,dword ptr[rsp+offset]		※スタックフレームを利用
+				pobj_sf->pop(xmm_reg2,sizeof(float));
+			}
+		}
+		else{
+			if(!IsRealNumberType(type[sp-2])){
+				if(type[sp-1]==DEF_DOUBLE){
+					//movsd xmm5,xmm_reg
+					OpBuffer[obp++]=(char)0xF2;
+					OpBuffer[obp++]=(char)0x0F;
+					OpBuffer[obp++]=(char)0x10;
+					OpBuffer[obp++]=(char)(0xE8 | REGISTER_OPERAND(xmm_reg2));
+				}
+				if(type[sp-1]==DEF_SINGLE){
+					//movss xmm5,xmm_reg
+					OpBuffer[obp++]=(char)0xF3;
+					OpBuffer[obp++]=(char)0x0F;
+					OpBuffer[obp++]=(char)0x10;
+					OpBuffer[obp++]=(char)(0xE8 | REGISTER_OPERAND(xmm_reg2));
+				}
+
+				xmm_reg2=REG_XMM5;
+			}
+		}
+	}
+	else{
+		//整数値
+
+		temp_reg=pobj_reg->UnlockReg();
+
+		if(temp_reg==REG_R14){
+			//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+			pobj_sf->pop(REG_R14);
+		}
+
+		xmm_reg2=REG_XMM5;
+	}
+
+	//汎用レジスタ（temp_reg）をXMMレジスタ（xmm_reg2）にコピー
+	if(AnswerType==DEF_DOUBLE)
+		ChangeTypeToXmm_Double(type[sp-1],xmm_reg2,temp_reg);
+	if(AnswerType==DEF_SINGLE)
+		ChangeTypeToXmm_Single(type[sp-1],xmm_reg2,temp_reg);
+
+
+	///////////////////
+	// 第1項
+	///////////////////
+
+	if(IsRealNumberType(type[sp-2])){
+		//実数
+		xmm_reg1=pobj_reg->GetLockingXmmReg();
+
+		if(xmm_reg1==REG_XMM4){
+			if(type[sp-2]==DEF_DOUBLE){
+				//movlpd xmm4,qword ptr[rsp+offset]		※スタックフレームを利用
+				pobj_sf->pop(xmm_reg1,sizeof(double));
+			}
+			if(type[sp-2]==DEF_SINGLE){
+				//movss xmm4,dword ptr[rsp+offset]		※スタックフレームを利用
+				pobj_sf->pop(xmm_reg1,sizeof(float));
+			}
+		}
+	}
+	else{
+		//整数
+
+		temp_reg=pobj_reg->UnlockReg();
+
+		if(temp_reg==REG_R14){
+			//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+			pobj_sf->pop(REG_R14);
+		}
+
+		xmm_reg1=pobj_reg->LockXmmReg();
+	}
+
+	//汎用レジスタ（temp_reg）をXMMレジスタ（xmm_reg1）にコピー
+	if(AnswerType==DEF_DOUBLE)
+		ChangeTypeToXmm_Double(type[sp-2],xmm_reg1,temp_reg);
+	if(AnswerType==DEF_SINGLE)
+		ChangeTypeToXmm_Single(type[sp-2],xmm_reg1,temp_reg);
+
+
+	*pXmmReg1=xmm_reg1;
+	*pXmmReg2=xmm_reg2;
+}
+void SetTowTermToReg_Whole64Calc(int *type,int sp,int *pReg1,int *pReg2){
+	//2つの項を適切なレジスタへセット（64ビット整数演算用）
+	int reg1,reg2;
+
+	//////////////////
+	// 第2項
+	//////////////////
+	reg2=pobj_reg->UnlockReg();
+
+	if(reg2==REG_R14){
+		//mov r15,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R15);
+
+		reg2=REG_R15;
+	}
+
+	//レジスタ値を64ビットに拡張
+	ExtendTypeTo64(type[sp-1],reg2);
+
+
+	//////////////////
+	// 第1項
+	//////////////////
+	reg1=pobj_reg->GetLockingReg();
+
+	if(reg1==REG_R14){
+		//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R14);
+	}
+
+	//レジスタ値を64ビットに拡張
+	ExtendTypeTo64(type[sp-2],reg1);
+
+
+	*pReg1=reg1;
+	*pReg2=reg2;
+}
+void SetTowTermToReg_Whole32Calc(int *type,int sp,int *pReg1,int *pReg2){
+	//2つの項を適切なレジスタへセット（32ビット整数演算用）
+	int reg1,reg2;
+
+	//////////////////
+	// 第2項
+	//////////////////
+	reg2=pobj_reg->UnlockReg();
+
+	if(reg2==REG_R14){
+		//mov r15,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R15);
+
+		reg2=REG_R15;
+	}
+
+	//レジスタ値を32ビットに拡張
+	ExtendTypeTo32(type[sp-1],reg2);
+
+
+	//////////////////
+	// 第1項
+	//////////////////
+	reg1=pobj_reg->GetLockingReg();
+
+	if(reg1==REG_R14){
+		//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R14);
+	}
+
+	//レジスタ値を32ビットに拡張
+	ExtendTypeTo32(type[sp-2],reg1);
+
+
+	*pReg1=reg1;
+	*pReg2=reg2;
+}
+
+
+
+////////////////////////////
+// As 演算子によるキャスト
+////////////////////////////
+
+BOOL Calc_Cast(int *type,LONG_PTR *index_stack,int *pStackPointer){
+	//キャスト
+
+	int sp;
+	sp=*pStackPointer;
+
+	int CastType;
+	CastType=type[sp-1];
+	if((CastType&FLAG_CAST)==0){
+		SetError(47,NULL,cp);
+		return 0;
+	}
+	CastType=CastType&(~FLAG_CAST);
+
+	int xmm_reg,reg;
+
+	if(IsRealNumberType(CastType)){
+		//実数型へキャスト
+
+		if(IsRealNumberType(type[sp-2])){
+			SetOneTermToReg_RealCalc(type[sp-2],&xmm_reg);
+		}
+		else{
+			if(Is64Type(type[sp-2]))
+				SetOneTermToReg_Whole64Calc(type[sp-2],&reg);
+			else if(IsWholeNumberType(type[sp-2]))
+				SetOneTermToReg_Whole32Calc(type[sp-2],&reg);
+
+			pobj_reg->UnlockReg();
+
+			xmm_reg=pobj_reg->LockXmmReg();
+		}
+
+		if(CastType==DEF_DOUBLE){
+			//Double型にデータ変換
+			ChangeTypeToXmm_Double(type[sp-2],xmm_reg,reg);
+		}
+		else if(CastType==DEF_SINGLE){
+			//Single型にデータ変換
+			ChangeTypeToXmm_Single(type[sp-2],xmm_reg,reg);
+		}
+
+		if(xmm_reg==REG_XMM4){
+			//movsd qword ptr[rsp+offset],xmm4		※スタックフレームを利用
+			pobj_sf->push(REG_XMM4,sizeof(double));
+		}
+	}
+	else{
+		//その他整数型へ変換
+
+		if(IsRealNumberType(type[sp-2])){
+			SetOneTermToReg_RealCalc(type[sp-2],&xmm_reg);
+
+			pobj_reg->UnlockXmmReg();
+
+			reg=pobj_reg->LockReg();
+
+			//整数型へデータ変換
+			ChangeTypeToWhole(type[sp-2],CastType,reg,xmm_reg);
+
+			if(reg==REG_R14){
+				//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+				pobj_sf->push(REG_R14);
+			}
+		}
+		else{
+			reg=pobj_reg->GetLockingReg();
+
+			if(reg==REG_R14){
+				//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+				pobj_sf->pop(REG_R14);
+			}
+
+			//整数型へデータ変換
+			ChangeTypeToWhole(type[sp-2],CastType,reg,0);
+
+			if(reg==REG_R14){
+				//mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
+				pobj_sf->push(REG_R14);
+			}
+		}
+	}
+
+	type[sp-2]=CastType;
+	index_stack[sp-2]=index_stack[sp-1];
+
+	sp--;
+
+	*pStackPointer=sp;
+	return 1;
+}
Index: /BasicCompiler64/Opcode.h
===================================================================
--- /BasicCompiler64/Opcode.h	(revision 3)
+++ /BasicCompiler64/Opcode.h	(revision 3)
@@ -0,0 +1,504 @@
+//Opcode.h
+
+
+//レジスタを示す定数
+#define REG_EAX 1
+#define REG_EBX 2
+#define REG_ECX 3
+#define REG_EDX 4
+#define REG_ESP 5
+#define REG_EBP 6
+
+#define REGISTER_OPERAND(reg) (reg&0x07)
+
+#define REG_NON		-1
+#define REG_RAX		0x00	//reg:000
+#define REG_RCX		0x01	//reg:001
+#define REG_RDX		0x02	//reg:010
+#define REG_RBX		0x03	//reg:011
+#define REG_RSP		0x04	//reg:100
+#define REG_RBP		0x05	//reg:101
+#define REG_RSI		0x06	//reg:110
+#define REG_RDI		0x07	//reg:111
+#define REG_R8		0x08	//reg:000（REXプリフィックス）
+#define REG_R9		0x09	//reg:001（REXプリフィックス）
+#define REG_R10		0x0A	//reg:010（REXプリフィックス）
+#define REG_R11		0x0B	//reg:011（REXプリフィックス）
+#define REG_R12		0x0C	//reg:100（REXプリフィックス）
+#define REG_R13		0x0D	//reg:101（REXプリフィックス）
+#define REG_R14		0x0E	//reg:110（REXプリフィックス）
+#define REG_R15		0x0F	//reg:111（REXプリフィックス）
+
+#define REG_XMM0	0x10	//reg:000
+#define REG_XMM1	0x11	//reg:001
+#define REG_XMM2	0x12	//reg:010
+#define REG_XMM3	0x13	//reg:011
+#define REG_XMM4	0x14	//reg:100
+#define REG_XMM5	0x15	//reg:101
+#define REG_XMM6	0x16	//reg:110
+#define REG_XMM7	0x17	//reg:111
+#define REG_XMM8	0x18	//reg:000
+#define REG_XMM9	0x19	//reg:001
+#define REG_XMM10	0x1A	//reg:010
+#define REG_XMM11	0x1B	//reg:011
+#define REG_XMM12	0x1C	//reg:100
+#define REG_XMM13	0x1D	//reg:101
+#define REG_XMM14	0x1E	//reg:110
+#define REG_XMM15	0x1F	//reg:111
+
+#define IS_XMM_REG(reg) (reg&0x10)
+
+
+
+//変数の種類
+#define NON_VAR			0
+#define VAR_GLOBAL		1	//Global Variable
+#define VAR_LOCAL		2	//Local Variable
+#define VAR_REFLOCAL	3	//Local Refference Variable
+#define VAR_DIRECTMEM	4	//Direct memory
+
+extern int cp;
+extern int obp;
+extern char *OpBuffer;
+
+//ラベルアドレス
+struct LABEL{
+	char *pName;
+	int line;
+	DWORD address;
+};
+
+//Goto未知ラベル
+struct GOTOLABELSCHEDULE{
+	char *pName;
+	int line;
+	DWORD pos;
+	DWORD now_cp;
+};
+
+
+//プロシージャの種類
+#define PROC_DEFAULT	1	//ユーザー定義関数
+#define PROC_DLL		2	//DLL関数
+#define PROC_BUILTIN	3	//コンパイラ埋め込み型
+#define PROC_PTR		4	//関数ポインタ
+
+//プロシージャ
+struct PROCEDURE{
+	char name[255];
+	int address;
+	int types[MAX_PARMS];
+	_int8 ByVal[MAX_PARMS];
+	BOOL ReturnType;
+};
+
+//With情報
+struct WITHINFO{
+	char **ppName;
+	int *pWithCp;
+	int num;
+};
+
+
+class CStackFrame:public CSchedule{
+	///////////////////////////
+	// スタックフレーム管理
+	///////////////////////////
+
+	int lowest_sp;			//スタックポインタの最下位位置
+	int now_sp;				//スタックポインタ
+	int max_parm_size;		//パラメータの最大サイズ
+	int local_parm_size;	//ローカル領域のパラメータサイズ
+
+public:
+	//コンストラクタ
+	CStackFrame();
+
+	//デストラクタ
+	~CStackFrame();
+
+	void SetLocalParmSize(int size);
+	int GetFrameSize();
+	void push(int reg);
+	void push(int xmm_reg,int var_size);
+	void ref(int reg);
+	void ref(int xmm_reg,int var_size);
+	void pop(int reg);
+	void pop(int xmm_reg,int var_size);
+	void parameter_allocate(int size);
+	void RunningSchedule(void);
+
+	void error_check(void);
+};
+extern CStackFrame *pobj_sf;
+
+
+class CBlockReg{
+	int array_BlockReg[256];
+	int num;
+
+public:
+	CBlockReg();
+	void lock(int reg);
+	void unlock(int reg);
+	BOOL check(int reg);
+	void clear(void);
+
+	//レジスタのバックアップと復旧
+	void backup();
+	void restore();
+};
+extern CBlockReg *pobj_BlockReg;
+class CRegister{
+	////////////////////
+	// レジスタ管理
+	////////////////////
+
+	//利用可能なレジスタを列挙する関数
+	void EnumRegister(int *pRegList,int nMaxList,int *array_reg,int *sp,int AnswerReg);
+
+	int array_UseReg[16],sp_UseReg;
+
+	int array_XmmReg[16];
+	int sp_XmmReg;
+
+	int init_sp_reg,init_sp_xmm_reg;
+
+public:
+	CRegister(){};
+	CRegister(int AnswerReg);
+	~CRegister(){};
+
+	//コンパイラにバグがないかをチェックする機構
+	void bug_check();
+
+	//汎用レジスタ
+	int GetNextReg();
+	int GetLockingReg();
+	int LockReg();
+	int UnlockReg();
+
+	//XMMレジスタ
+	int GetNextXmmReg();
+	int GetLockingXmmReg();
+	int LockXmmReg();
+	int UnlockXmmReg();
+
+	//レジスタのバックアップと復旧
+	void backup();
+	void restore();
+};
+extern CRegister *pobj_reg;
+
+
+#define BACKUP_REGISTER_RESOURCE								\
+	/* レジスタをスタックフレームにバックアップ */				\
+	pobj_BlockReg->backup();									\
+	if(pobj_reg) pobj_reg->backup();							\
+																\
+	/* レジスタブロッキングオブジェクトを退避して再生成 */		\
+	CBlockReg *pobj_BlockReg_back;								\
+	pobj_BlockReg_back=pobj_BlockReg;							\
+	pobj_BlockReg=new CBlockReg;								\
+																\
+	/* レジスタ管理オブジェクトポインタを退避して0をセット */	\
+	CRegister *pobj_reg_back;									\
+	pobj_reg_back=pobj_reg;										\
+	pobj_reg=0;
+
+#define RESTORE_REGISTER_RESOURCE								\
+	/* レジスタブロッキングオブジェクトポインタを復元 */		\
+	delete pobj_BlockReg;										\
+	pobj_BlockReg=pobj_BlockReg_back;							\
+																\
+	/* レジスタ管理オブジェクトポインタを復元 */				\
+	delete pobj_reg;											\
+	pobj_reg=pobj_reg_back;										\
+																\
+	/* レジスタをスタックフレームから復元 */					\
+	if(pobj_reg) pobj_reg->restore();							\
+	pobj_BlockReg->restore();
+
+
+
+//MakePeHdr.cpp
+int AddDataTable(char *buffer,int length);
+
+//RSrcSection.cpp
+char *GetRSrcSectionBuffer(int *pLen);
+
+//Compile.cpp
+void ChangeOpcode(char *Command);
+void GetGlobalDataForDll(void);
+DWORD CompileBuffer(char Return_Sequence,WORD Return_Command);
+
+//Register.cpp
+BOOL IsGeneralReg(int reg);
+BOOL IsXmmReg(int reg);
+BOOL IsVolatileReg(int reg);
+
+//Compile_Calc.cpp
+void ChangeTypeToDouble_ToFpuReg(int OldType);
+void ChangeTypeToDouble(int OldType);
+void ChangeTypeToSingle(int OldType);
+void ChangeTypeToInt64(int OldType);
+void ChangeTypeToLong(int OldType);
+void ChangeTypeToInteger(int OldType);
+void ChangeTypeToByte(int OldType);
+void SetVariableFromRax(int VarType,int CalcType,RELATIVE_VAR *pRelativeVar);
+void OpcodeCalc(char *Command);
+
+//NumOpe.cpp
+int NumOpe(int *pReg,char *Command,int BaseType,LONG_PTR lpBaseIndex,LONG_PTR *plpIndex,BOOL *pbUseHeap=0);
+
+//NumOpe_Arithmetic.cpp
+void GetStackData_ToRegister(int *type,int sp);
+BOOL CalcTwoTerm_Arithmetic(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Mod(int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Divide(int *type,int *pStackPointer,int BaseType);
+BOOL Calc_IntDivide(int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_MinusMark(int *type,int sp);
+BOOL Calc_Power(int *type,int *pStackPointer);
+BOOL Calc_Shift(int idCalc,int *type,int *pStackPointer);
+
+//NumOpe_Logical.cpp
+BOOL CalcTwoTerm_Logical(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer);
+BOOL Calc_Not(int *type,int sp);
+
+//NumOpe_Relation.cpp
+BOOL CalcTwoTerm_Relational(int idCalc,int *type,LONG_PTR *index_stack,int *pStackPointer);
+
+//NumOpe_TypeOperation.cpp
+void ExtendTypeTo64(int type,int reg);
+void ExtendTypeTo32(int type,int reg);
+void ExtendTypeTo16(int type,int reg);
+void ChangeTypeToXmm_Double(int type,int xmm_reg,int general_reg);
+void ChangeTypeToXmm_Single(int type,int xmm_reg,int general_reg);
+void ChangeTypeToWhole(int OldType,int NewType,int reg,int xmm_reg);
+void SetOneTermToReg_RealCalc(int TermType,int *pXmmReg);
+void SetOneTermToReg_Whole64Calc(int TermType,int *pReg);
+void SetOneTermToReg_Whole32Calc(int TermType,int *pReg);
+void SetTowTermToReg_RealCalc(int AnswerType,int *type,int sp,int *pXmmReg1,int *pXmmReg2);
+void SetTowTermToReg_Whole64Calc(int *type,int sp,int *pReg1,int *pReg2);
+void SetTowTermToReg_Whole32Calc(int *type,int sp,int *pReg1,int *pReg2);
+BOOL Calc_Cast(int *type,LONG_PTR *index_stack,int *pStackPointer);
+
+//Compile_Set_Var.cpp
+BOOL IsUse_r11(RELATIVE_VAR *pRelativeVar);
+void SetObjectVariableFromRax(LONG_PTR lpVarIndex,int CalcType,LONG_PTR lpCalcIndex,RELATIVE_VAR *pRelativeVar,BOOL bUseHeap);
+void SetDoubleVariable(int type,RELATIVE_VAR *pRelative);
+void SetSingleVariable(int type,RELATIVE_VAR *pRelative);
+void SetWholeVariable(int var_size,int type,RELATIVE_VAR *pRelative);
+
+//increment.cpp
+void IncDec(int idCalc, char *lpszLeft, char *lpszRight);
+
+//calc2.cpp
+#define EXP_TYPE_NUMBER	1
+#define EXP_TYPE_EAX	2
+#define EXP_TYPE_FPU	3
+#define EXP_TYPE_VAR	4
+int NumOpEx(char *Command,double *pDbl,DWORD *pdwType,RELATIVE_VAR *pRelativeVar);
+
+//SetVar.cpp
+BOOL SetVariable(DWORD dwVarType,RELATIVE_VAR *pVarRelativeVar,
+				 DWORD dwExpType,DWORD dwType,void *data);
+
+//Compile_Calc_PushVar.cpp
+void SetXmmReg_DoubleVariable(RELATIVE_VAR *pRelativeVar,int xmm_reg);
+void SetXmmReg_SingleVariable(RELATIVE_VAR *pRelativeVar,int xmm_reg);
+void SetReg_WholeVariable(int type,RELATIVE_VAR *pRelativeVar,int reg);
+
+//Compile_Object.cpp
+int Operator_New(char *Parameter,LONG_PTR *plpIndex);
+void OpcodeDelete(char *Parameter);
+
+//Compile_Var.cpp
+void GetWithName(char *buffer);
+void SetThisPtrToReg(int reg);
+BOOL GetVarOffset(BOOL bError,char *NameBuffer,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss=0);
+BOOL SetInitGlobalData(int offset,int type,LONG_PTR lpIndex,int *SubScripts,char *InitBuf);
+#define DIMFLAG_INITDEBUGVAR 1
+#define DIMFLAG_NONCALL_CONSTRACTOR 2
+#define DIMFLAG_STATIC 4
+void OpcodeDim(char *Parameter,DWORD dwFlag);
+void SetVarPtrToReg(int reg,RELATIVE_VAR *pRelativeVar);
+
+//CParameter.cpp
+#define OVERLOAD_LEVEL1 1
+#define OVERLOAD_LEVEL2 2
+#define OVERLOAD_LEVEL3 3
+class CParameter{
+	char *Parms[255];
+	TYPEINFO types[255];
+	int ParmsNum;
+
+	TYPEINFO ReturnTypeInfo;
+
+public:
+	CParameter(char *buffer);
+	CParameter(PARAMETER_INFO *pParamInfo,int ParmNum);
+	~CParameter();
+	void SetReturnType(TYPEINFO *pTypeInfo);
+
+private:
+	BOOL _overload_check(PARAMETER_INFO *ppi,int pi_num,TYPEINFO *pReturnTypeInfo,int overload_level);
+	SUBINFO *OverloadSolutionWithReturnType(char *name,SUBINFO **ppsi,int num);
+public:
+	SUBINFO *OverloadSolution(char *name,SUBINFO **ppsi,int num);
+
+	BOOL ErrorCheck(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
+	void MacroParameterSupport(PARAMETER_INFO *ppi);
+	void SetObjectParameter(int reg,CClass *pobj_Class,LPSTR Parameter);
+	void SetParameter(char *FuncName,PARAMETER_INFO *ppi,int pi_num,int SecondParmNum);
+	void BackupParameter(int pi_num);
+	void RestoreParameter(int pi_num);
+};
+
+//CLockParameter.cpp
+#define MAX_LOCKPARMS 255
+class CDBLockParms{
+public:
+	int array_LevelCount[MAX_LOCKPARMS];
+	CDBLockParms();
+	~CDBLockParms();
+
+	void lock(int level);
+	void unlock(int level);
+};
+
+//Compile_CallProc.cpp
+void AddLocalVarAddrSchedule();
+int CallProc(int idProc,void *pInfo,char *name,char *Parameter,LONG_PTR *plpRetIndex);
+BOOL CallPropertyMethod(char *variable,char *RightSide,TYPEINFO *pRetTypeInfo);
+#define PROCFLAG_NEW	1
+int Opcode_CallProcPtr(char *variable,char *Parameter,PROCPTRINFO *pi,LONG_PTR *plpIndex);
+int Opcode_CallProc(char *Parameter,SUBINFO *psi,LONG_PTR *plpIndex,DWORD dwFlags,char *ObjectName,int RefType);
+int Opcode_CallDllProc(char *Parameter,DECLAREINFO *pdi,LONG_PTR *plpIndex);
+
+//Compile_ProcOp.cpp
+void CompileLocal();
+
+//Compile_Func.cpp
+int GetFunctionType(int FuncNum);
+int GetFunctionFromName(char *FuncName);
+int Opcode_CallFunc(char *Parameter,int FuncNum);
+
+//OperatorProc.cpp
+void FreeTempObject(int reg,CClass *pobj_c);
+int CallOperatorProc(int idCalc,TYPEINFO *pBaseTypeInfo,int *type,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp);
+void CallCastOperatorProc(int reg,int &CalcType,LONG_PTR &lpCalcIndex,BOOL bCalcUseHeap,int ToType,LONG_PTR lpToIndex);
+void CallArrayOperatorProc(int reg,CClass *pobj_Class,char *ObjectName,char *Parameter,TYPEINFO &RetTypeInfo);
+
+//Compile_Statement.cpp
+void OpcodeOthers(char *Command);
+void OpcodeIf(char *Parameter);
+void OpcodeGoto(char *Parameter);
+void OpcodeWhile(char *Parameter);
+void OpcodeExitWhile(void);
+void OpcodeFor(char *Parameter);
+void OpcodeExitFor(void);
+void OpcodeDo(char *Parameter);
+void OpcodeExitDo(void);
+void OpcodeContinue(void);
+void OpcodeExitSub(void);
+void OpcodeSelect(char *Parameter);
+void OpcodeCase(char *Parameter);
+void OpcodeGosub(char *Parameter);
+void OpcodeReturn(char *Parameter);
+void Opcode_Input(char *Parameter);
+void Opcode_Print(char *Parameter,BOOL bWrite);
+void OpcodeCallPtr(char *Parameter);
+void OpcodeSetPtrData(char *Parameter,int type);
+
+
+//InsertOpcode.cpp
+void InsertDimStatement_ToProcHead(char *lpszCommand);
+
+
+
+////////////////////////////////
+// AMD64機械語生成に利用する関数郡
+////////////////////////////////
+
+//Mod（モード）
+#define MOD_BASE		(char)0x00
+#define MOD_DISP32		(char)0xFF
+#define MOD_BASE_DISP8	(char)0x40
+#define MOD_BASE_DISP32	(char)0x80
+#define MOD_REG				(char)0xC0
+
+#define USE_OFFSET 1
+#define NON_OFFSET 0
+
+//amd64_main.cpp
+BOOL IsSafeReg(int reg);
+void op_push(int reg);
+void op_push_value(long data);
+void op_pop(int reg);
+void op_mov_RV					(int op_size,int reg,int i32data);
+void op_mov_RV64				(int reg,_int64 i64data);
+void op_mov_RM					(int op_size,int reg,int base_reg,int offset,char mod);
+void op_mov_RM_ex				(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
+void op_mov_MR					(int op_size,int reg,int base_reg,int offset,char mod);
+void op_mov_MR_ex				(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
+void op_mov_MV					(int op_size,int base_reg,int offset,BOOL bUseOffset,int i32data);
+void op_mov_RR					(int reg1,int reg2);
+void op_mov64_ToReg				(int reg,_int64 i64data);
+void op_mov64_ToReg				(int reg,int i32data);
+void op_mov64_ToReg_FromReg		(int reg1,int reg2);
+void op_movsxd					(int reg64,int reg32);
+void op_movsx64_FromReg16		(int reg64,int reg16);
+void op_movsx64_FromReg8		(int reg64,int reg8);
+void op_movsx32_FromReg16		(int reg32,int reg16);
+void op_movsx32_FromReg8		(int reg32,int reg8);
+void op_movsx16_FromReg8		(int reg32,int reg8);
+void op_inc						(int reg);
+void op_dec						(int reg);
+void op_add_RM					(int op_size,int reg,int base_reg,int offset,char mod);
+void op_add64_value				(int reg,int offset);
+void op_add64_reg				(int reg1,int reg2);
+void op_add32_reg				(int reg1,int reg2);
+void op_sub_RV					(int op_size,int reg,int i32data);
+void op_sub64_reg				(int reg1,int reg2);
+void op_sub32_reg				(int reg1,int reg2);
+void op_imul_reg				(int op_size,int reg1,int reg2);
+void op_imul_value				(int op_size,int reg,int i32data);
+void op_div64_reg				(int reg);
+void op_idiv64_reg				(int reg);
+void op_shl_reg					(int op_size,int reg);
+void op_sar_reg					(int op_size,int reg);
+void op_shr_reg					(int op_size,int reg);
+void op_and_reg					(int op_size,int reg1,int reg2);
+void op_and64_value				(int reg,int offset);
+void op_and32_value				(int reg,int offset);
+void op_or_reg					(int op_size,int reg1,int reg2);
+void op_xor_reg					(int op_size,int reg1,int reg2);
+void op_not_reg					(int op_size,int reg);
+void op_test					(int reg1,int reg2);
+void op_cmp_reg					(int op_size,int reg1,int reg2);
+void op_cmp_value				(int op_size,int reg,char byte_data);
+void op_movlpd_MR				(int xmm_reg,int base_reg,int offset,char mod);
+void op_movlpd_RM				(int xmm_reg,int base_reg,int offset,char mod);
+void op_movsd_RR				(int xmm_reg1,int xmm_reg2);
+void op_movsd_MR				(int xmm_reg,int base_reg,int offset,char mod);
+void op_movss_RR				(int xmm_reg1,int xmm_reg2);
+void op_movss_RM				(int xmm_reg,int base_reg,int offset,char mod);
+void op_movss_MR				(int xmm_reg,int base_reg,int offset,char mod);
+void op_movd_RX					(int reg,int xmm_reg);
+void op_cvtsd2ss				(int xmm_reg1,int xmm_reg2);
+void op_cvtss2sd				(int xmm_reg1,int xmm_reg2);
+void op_cvttsd2si_xmm			(int op_size,int reg,int xmm_reg);
+void op_cvttss2si_xmm			(int op_size,int reg,int xmm_reg);
+void op_cvtsi2sd_reg			(int op_size,int xmm_reg,int reg);
+void op_cvtsi2ss_reg			(int op_size,int xmm_reg,int reg);
+void op_comisd					(int xmm_reg1,int xmm_reg2);
+void op_comiss					(int xmm_reg1,int xmm_reg2);
+void op_rep_movs				(int op_size);
+void op_add_rsp(int num);
+void op_sub_rsp(int num);
+void op_add_esp(int num);
+void op_sub_esp(int num);
+void op_fld_ptr_esp(int type);
+void op_zero_reg(int reg);
+void op_call(SUBINFO *psi);
Index: /BasicCompiler64/OperatorProc.cpp
===================================================================
--- /BasicCompiler64/OperatorProc.cpp	(revision 3)
+++ /BasicCompiler64/OperatorProc.cpp	(revision 3)
@@ -0,0 +1,475 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void FreeTempObject(int reg,CClass *pobj_c){
+	if(!IsSafeReg(reg)) SetError(300,NULL,cp);
+
+	////////////////////////////////////////////////
+	// 演算過程で利用した一時オブジェクトを破棄
+	// Thisポインタをr14レジスタを介して渡す
+	////////////////////////////////////////////////
+
+	if(pobj_c->DestructorMemberSubIndex!=-1){
+		//mov rcx,reg
+		op_mov_RR(REG_RCX,reg);
+
+		//call DestructorProcAddr
+		op_call(pobj_c->ppobj_Method[pobj_c->DestructorMemberSubIndex]->psi);
+	}
+
+	//mov rcx,reg
+	op_mov_RR(REG_RCX,reg);
+
+	//call free
+	extern SUBINFO *pSub_free;
+	op_call(pSub_free);
+}
+
+int CallOperatorProc(int idCalc,TYPEINFO *pBaseTypeInfo,int *type,LONG_PTR *index_stack,BOOL *bUseHeap,int &sp){
+	//オーバーロードされたオペレータ関数を呼び出す
+	CClass *pobj_c;
+	pobj_c=(CClass *)index_stack[sp-2];
+
+	SUBINFO **ppsi;
+	int num;
+	ppsi=pobj_c->GetOperatorSubInfo(idCalc,num);
+	if(num==0){
+		HeapDefaultFree(ppsi);
+
+		return 0;
+	}
+
+
+	//項の数
+	BOOL bTwoTerm=1;
+	if(idCalc==CALC_AS) bTwoTerm=0;
+
+
+	int i;
+	BOOL bReturnTypeIsObject=1;
+	TYPEINFO ReturnType={DEF_OBJECT,ppsi[0]->u.ReturnIndex};
+	for(i=0;i<num;i++){
+		if(ppsi[i]->ReturnType!=DEF_OBJECT)
+			bReturnTypeIsObject=0;
+	}
+
+	if(bReturnTypeIsObject==0){
+		if(pBaseTypeInfo){
+			if(pBaseTypeInfo->type==DEF_OBJECT){
+				bReturnTypeIsObject=1;
+				ReturnType.u.lpIndex=pBaseTypeInfo->u.lpIndex;
+			}
+		}
+	}
+
+
+
+	/////////////////////////////////////////////
+	// オーバーロード解決用のパラメータを設定
+	/////////////////////////////////////////////
+
+	PARAMETER_INFO *ppi;
+	int iParmNum=0;
+
+	//_System_LocalThis
+	ppi=(PARAMETER_INFO *)HeapAlloc(hHeap,0,sizeof(PARAMETER_INFO)*3);
+	ppi[iParmNum].bArray=0;
+	ppi[iParmNum].bByVal=0;
+	ppi[iParmNum].name=0;
+	ppi[iParmNum].type=DEF_PTR_VOID;
+	ppi[iParmNum].u.index=-1;
+	ppi[iParmNum].SubScripts[0]=-1;
+	iParmNum++;
+
+	if(bTwoTerm){
+		ppi[iParmNum].bArray=0;
+		ppi[iParmNum].bByVal=0;
+		ppi[iParmNum].name=0;
+		ppi[iParmNum].type=type[sp-1];
+		ppi[iParmNum].u.index=index_stack[sp-1];
+		ppi[iParmNum].SubScripts[0]=-1;
+		iParmNum++;
+	}
+
+
+	//オーバーロードを解決
+	char temporary[255];
+	if(idCalc==CALC_EQUAL) lstrcpy(temporary,"==");
+	else GetCalcName(idCalc,temporary);
+	SUBINFO *psi;
+	psi=OverloadSolution(temporary,ppsi,num,ppi,iParmNum,pBaseTypeInfo);
+	HeapDefaultFree(ppsi);
+
+	if(!psi){
+		HeapDefaultFree(ppi);
+		return -1;
+	}
+	else{
+		//オーバーロードされていないが、パラメータ個数が一致しないとき
+		if(iParmNum!=psi->ParmNum){
+			HeapDefaultFree(ppi);
+			return -1;
+		}
+	}
+
+	for(i=0;i<iParmNum;i++){
+		CheckDifferentType(
+			psi->pParmInfo[i].type,
+			psi->pParmInfo[i].u.index,
+			ppi[i].type,
+			ppi[i].u.index,
+			"",
+			i);
+	}
+
+	HeapDefaultFree(ppi);
+
+	int right_side_size;
+	if(type[sp-1]==DEF_OBJECT) right_side_size=PTR_SIZE;
+	else right_side_size=GetTypeSize(type[sp-1],index_stack[sp-1]);
+
+	if(bTwoTerm){
+		if(psi->pParmInfo[1].type==DEF_OBJECT&&psi->pParmInfo[1].bByVal){
+			//一時オブジェクトはメソッド内で破棄される
+			bUseHeap[sp-1]=0;
+		}
+	}
+
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//////////////////////////////////////////////////////
+		// 戻り値にオブジェクト インスタンスを持つ場合
+		// ※ByRef _System_ReturnObject パラメータ用領域を取得
+		//////////////////////////////////////////////////////
+
+
+		//////////////////////////////////////////////////////
+		/////    レジスタ資源のバックアップ
+		{	BACKUP_REGISTER_RESOURCE
+		//////////////////////////////////////////////////////
+
+			int object_size;
+			object_size=GetSizeOfClass(psi->u.Return_pobj_c);
+
+			//mov rcx,object_size
+			op_mov_RV(sizeof(_int64),REG_RCX,object_size);
+
+			//call calloc
+			extern SUBINFO *pSub_calloc;
+			op_call(pSub_calloc);
+
+			//mov r13,rax
+			op_mov_RR(REG_R13,REG_RAX);
+
+		/////////////////////////////////////////////
+		//////   レジスタ資源を復元
+			RESTORE_REGISTER_RESOURCE
+		}////////////////////////////////////////////
+	}
+
+
+	int reg1,reg2;
+	if(bTwoTerm){
+		//右の項（実数の場合が未完成）
+		SetOneTermToReg_Whole64Calc(type[sp-1],&reg2);
+		pobj_reg->UnlockReg();
+	}
+
+	//左の項
+	SetOneTermToReg_Whole64Calc(DEF_INT64,&reg1);
+	pobj_reg->UnlockReg();
+
+	//ヒープ解放用に退避
+	if(bUseHeap[sp-1]){
+		//mov qword ptr[rsp+offset],reg2     ※スタックフレームを利用
+		pobj_sf->push(reg2);
+	}
+	if(bUseHeap[sp-2]){
+		//mov qword ptr[rsp+offset],reg1     ※スタックフレームを利用
+		pobj_sf->push(reg1);
+	}
+
+
+
+	//////////////////////////////////////////////////////
+	/////    レジスタ資源のバックアップ
+	{	BACKUP_REGISTER_RESOURCE
+	//////////////////////////////////////////////////////
+
+		if(reg1==REG_RDX||reg1==REG_R8){
+			//mov r14,reg1
+			op_mov_RR(REG_R14,reg1);
+			reg1=REG_R14;
+		}
+
+
+		if(bTwoTerm){
+			if(psi->ReturnType==DEF_OBJECT){
+				//mov r8,reg2
+				op_mov_RR(REG_R8,reg2);
+			}
+			else{
+				//mov rdx,reg2
+				op_mov_RR(REG_RDX,reg2);
+			}
+		}
+
+		if(psi->ReturnType==DEF_OBJECT){
+			//mov rdx,r13
+			op_mov_RR(REG_RDX,REG_R13);
+		}
+
+		//mov rcx,reg1
+		op_mov_RR(REG_RCX,reg1);
+
+		//call operator_proc
+		op_call(psi);
+
+		if(psi->ReturnType!=-1){
+			//戻り値を一時的に退避
+
+			//mov r13,rax
+			op_mov_RR(REG_R13,REG_RAX);
+		}
+
+
+	/////////////////////////////////////////////
+	//////   レジスタ資源を復元
+		RESTORE_REGISTER_RESOURCE
+	}////////////////////////////////////////////
+
+
+
+	if(bUseHeap[sp-2]||bUseHeap[sp-1]){
+
+		//////////////////////////////////////////////////////
+		/////    レジスタ資源のバックアップ
+		{	BACKUP_REGISTER_RESOURCE
+		//////////////////////////////////////////////////////
+
+			if(bUseHeap[sp-2]){
+				//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+				pobj_sf->pop(REG_R14);
+
+				FreeTempObject(REG_R14,(CClass *)index_stack[sp-2]);
+			}
+			if(bUseHeap[sp-1]){
+				//mov r14,qword ptr[rsp+offset]     ※スタックフレームを利用
+				pobj_sf->pop(REG_R14);
+
+				FreeTempObject(REG_R14,(CClass *)index_stack[sp-1]);
+			}
+
+		/////////////////////////////////////////////
+		//////   レジスタ資源を復元
+			RESTORE_REGISTER_RESOURCE
+		}////////////////////////////////////////////
+	}
+
+	if(psi->ReturnType!=-1){
+		//戻り値をreg1にセット
+		reg1=pobj_reg->LockReg();
+
+		//mov reg1,r13
+		op_mov_RR(reg1,REG_R13);
+	}
+
+	sp--;
+	type[sp-1]=psi->ReturnType;
+	index_stack[sp-1]=psi->u.ReturnIndex;
+
+	if(psi->ReturnType==DEF_OBJECT){
+		//Object型が戻ったときはヒープ領域にインスタンスが格納されている
+		//※後にfreeする必要あり
+		bUseHeap[sp-1]=1;
+	}
+	else bUseHeap[sp-1]=0;
+
+	return 1;
+}
+
+void CallCastOperatorProc(int reg,int &CalcType,LONG_PTR &lpCalcIndex,BOOL bCalcUseHeap,int ToType,LONG_PTR lpToIndex){
+	int type[10];
+	LONG_PTR index_stack[10];
+	BOOL array_bUseHeap[10];
+	int sp=2;
+	int iRet;
+
+
+	//////////////////////////////////////////////////////
+	/////    レジスタ資源のバックアップ
+	{	BACKUP_REGISTER_RESOURCE
+	//////////////////////////////////////////////////////
+
+		//regを第一項目としてロック
+		pobj_reg=new CRegister(reg);
+		pobj_reg->LockReg();
+
+		if(bCalcUseHeap){
+			/*
+			//未解放のインスタンスが存在する場合
+			//※専用のローカル変数を用意し、メモリリークを回避
+			char temporary[VN_SIZE],temp2[VN_SIZE];
+
+
+			////////////////////////////////
+			// 一時オブジェクト変数を用意
+			////////////////////////////////
+			char szTempVarName[255];
+			GetTypeName(CalcType,lpCalcIndex,temp2);
+			sprintf(szTempVarName,"_System_strDummy%d",obp);
+			wsprintf(temporary,"%s%c%c%s",szTempVarName,1,ESC_AS,temp2);
+			InsertDimStatement_ToProcHead(temporary);
+
+			RELATIVE_VAR VarRelativeVar;
+			int VarType;
+			LONG_PTR lpVarIndex;
+			if(!GetVarOffset(
+				1,
+				szTempVarName,
+				&VarType,
+				&VarRelativeVar,
+				&lpVarIndex)) return;
+
+
+			CClass *pobj_c;
+			pobj_c=(CClass *)lpCalcIndex;
+			if(pobj_c->DestructorMemberSubIndex!=-1){
+
+				//////////////////////////////////////////////////////
+				/////    レジスタ資源のバックアップ
+				{	BACKUP_REGISTER_RESOURCE
+				//////////////////////////////////////////////////////
+
+					//ループの場合、古い一時オブジェクトのデストラクタを呼ぶ
+
+					//rcxに変数アドレスをコピー
+					SetVarPtrToReg(REG_RCX,&VarRelativeVar);
+
+					//call destructor
+					OpBuffer[obp++]=(char)0xE8;
+					pobj_SubAddrSchedule->add(pobj_c->ppobj_Method[pobj_c->DestructorMemberSubIndex]->psi,1);
+					obp+=sizeof(long);
+
+				/////////////////////////////////////////////
+				//////   レジスタ資源を復元
+					RESTORE_REGISTER_RESOURCE
+				}////////////////////////////////////////////
+			}
+
+			//mov r15,reg
+			op_mov_RR(REG_R15,reg);
+
+
+			int object_size;
+			object_size=GetSizeOfClass((CClass *)lpVarIndex);
+
+			//mov rcx,object_size
+			op_mov_RV(sizeof(_int64),REG_RCX,object_size);
+
+			//rdiに変数アドレスをコピー
+			SetVarPtrToReg(REG_RDI,&VarRelativeVar);
+
+			//mov rsi,reg
+			op_mov_RR(REG_RSI,reg);
+
+			//mov r14,rdi
+			op_mov_RR(REG_R14,REG_RDI);
+			pobj_BlockReg->lock(REG_R14);
+
+			//rep movs byte ptr[rdi],byte ptr[rsi]
+			op_rep_movs(sizeof(BYTE));
+
+			//////////////////////////////////////////////////////
+			/////    レジスタ資源のバックアップ
+			{	BACKUP_REGISTER_RESOURCE
+			//////////////////////////////////////////////////////
+
+				//mov rcx,r15
+				op_mov_RR(REG_RCX,REG_R15);
+
+				//call free
+				extern SUBINFO *pSub_free;
+				OpBuffer[obp++]=(char)0xE8;
+				pobj_SubAddrSchedule->add(pSub_free,1);
+				obp+=sizeof(long);
+
+			/////////////////////////////////////////////
+			//////   レジスタ資源を復元
+				RESTORE_REGISTER_RESOURCE
+			}////////////////////////////////////////////
+
+
+			//mov reg,r14
+			op_mov_RR(reg,REG_R14);
+
+			pobj_BlockReg->unlock(REG_R14);
+			*/
+
+			//未解放のインスタンスが存在する旨を示す警告
+			SetError(-105,NULL,cp);
+
+		}
+
+		//左辺
+		type[0]=CalcType;
+		index_stack[0]=lpCalcIndex;
+		array_bUseHeap[0]=0;
+		type[1]=ToType;
+		index_stack[1]=lpToIndex;
+		array_bUseHeap[1]=0;
+
+		TYPEINFO BaseTypeInfo={ToType,lpToIndex};
+
+		iRet=CallOperatorProc(CALC_AS,&BaseTypeInfo,type,index_stack,array_bUseHeap,sp);
+
+		pobj_reg->UnlockReg();
+
+	/////////////////////////////////////////////
+	//////   レジスタ資源を復元
+		RESTORE_REGISTER_RESOURCE
+	}////////////////////////////////////////////
+
+
+	if(iRet==1){
+		//成功したとき
+		CalcType=type[0];
+		lpCalcIndex=index_stack[0];
+		return;
+	}
+	else if(iRet==-1){
+		//エラーが発行されたとき
+		return;
+	}
+
+	//エラーを発行
+	SetError(-1,"キャスト演算子がオーバーロードされていません。",cp);
+}
+
+void CallArrayOperatorProc(int reg,CClass *pobj_Class,char *ObjectName,char *Parameter,TYPEINFO &RetTypeInfo){
+	SUBINFO **ppsi;
+	int num;
+	ppsi=pobj_Class->GetOperatorSubInfo(CALC_ARRAY_GET,num);
+	if(num==0){
+		HeapDefaultFree(ppsi);
+
+		return;
+	}
+
+	//////////////////////////////////////////////////////
+	/////    レジスタ資源のバックアップ
+	{	BACKUP_REGISTER_RESOURCE
+	//////////////////////////////////////////////////////
+
+		RetTypeInfo.type=Opcode_CallProc(Parameter,ppsi[0],&RetTypeInfo.u.lpIndex,0,ObjectName,DEF_OBJECT);
+
+		//mov reg,rax
+		op_mov_RR(reg,REG_RAX);
+
+	/////////////////////////////////////////////
+	//////   レジスタ資源を復元
+		RESTORE_REGISTER_RESOURCE
+	}////////////////////////////////////////////
+
+	HeapDefaultFree(ppsi);
+}
Index: /BasicCompiler64/Register.cpp
===================================================================
--- /BasicCompiler64/Register.cpp	(revision 3)
+++ /BasicCompiler64/Register.cpp	(revision 3)
@@ -0,0 +1,290 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+
+//エラー用
+extern int cp;
+
+
+////////////////////////////
+// レジスタのブロッキング
+////////////////////////////
+
+CBlockReg *pobj_BlockReg;
+
+CBlockReg::CBlockReg(){
+	num=0;
+}
+void CBlockReg::lock(int reg){
+	if(check(reg)){
+		SetError(300,NULL,cp);
+	}
+	array_BlockReg[num++]=reg;
+}
+void CBlockReg::unlock(int reg){
+	int i;
+	for(i=0;i<num;i++){
+		if(array_BlockReg[i]==reg) break;
+	}
+	if(i==num) return;
+
+	num--;
+	for(;i<num;i++){
+		array_BlockReg[i]=array_BlockReg[i+1];
+	}
+}
+BOOL CBlockReg::check(int reg){
+	int i;
+	for(i=0;i<num;i++){
+		if(array_BlockReg[i]==reg) return 1;
+	}
+	return 0;
+}
+void CBlockReg::clear(void){
+	num=0;
+}
+void CBlockReg::backup(){
+	int i;
+
+	for(i=num-1;i>=0;i--){
+		if(IS_XMM_REG(array_BlockReg[i])){
+			//movlpd qword ptr[rsp+offset],xmm_reg	※スタックフレームを利用
+			pobj_sf->push(array_BlockReg[i],sizeof(double));
+		}
+		else{
+			//mov qword ptr[rsp+offset],reg     ※スタックフレームを利用
+			pobj_sf->push(array_BlockReg[i]);
+		}
+	}
+}
+void CBlockReg::restore(){
+	int i;
+
+	for(i=0;i<num;i++){
+		if(IS_XMM_REG(array_BlockReg[i])){
+			//movlpd xmm_reg,qword ptr[rsp+offset]	※スタックフレームを利用
+			pobj_sf->pop(array_BlockReg[i],sizeof(double));
+		}
+		else{
+			//mov reg,qword ptr[rsp+offset]     ※スタックフレームを利用
+			pobj_sf->pop(array_BlockReg[i]);
+		}
+	}
+}
+
+
+///////////////////
+// レジスタ管理
+///////////////////
+
+const int CalculationRegister[]={
+	REG_RAX,
+	REG_RCX,
+	REG_RDX,
+	REG_RBX,
+	REG_RSI,
+	REG_RDI,
+	REG_R8,
+	REG_R9,
+	REG_R10
+};
+
+const int CalculationXmmRegister[]={
+	REG_XMM0,
+	REG_XMM1,
+	REG_XMM2,
+	REG_XMM3,
+	/*XMM4、XMM5は演算時に一時的に利用*/
+/*	REG_XMM6,
+	REG_XMM7,
+	REG_XMM8,
+	REG_XMM9,
+	REG_XMM10,
+	REG_XMM11,
+	REG_XMM12,
+	REG_XMM13,
+	REG_XMM14,
+	REG_XMM15		関数呼び出し時のレジスタ保持を未搭載のため、保留*/
+};
+
+CRegister *pobj_reg;
+
+void CRegister::EnumRegister(int *pRegList,int nMaxList,int *array_reg,int *sp,int AnswerReg){
+	int i,i2,sw=0;
+
+	i2=nMaxList-1;
+	for(i=0;i2>=0;i++,i2--){
+		if(AnswerReg==pRegList[i2]){
+			sw=1;
+			i--;
+			continue;
+		}
+
+		if(pobj_BlockReg->check(pRegList[i2])){
+			//レジスタがブロッキングされているとき
+			i--;
+			continue;
+		}
+
+		array_reg[i]=pRegList[i2];
+	}
+
+	if(sw){
+		array_reg[i++]=AnswerReg;
+
+		//エラーチェック
+		if(pobj_BlockReg->check(AnswerReg)) SetError(300,NULL,cp);
+	}
+
+	*sp=i-1;
+}
+
+CRegister::CRegister(int AnswerReg){
+	/* 例： AnswerReg=REG_RCX	※REG_RCXをスタックの最後尾へセット
+								※r15、r14は一時保存用として利用する
+								※r13は同一関数内の単発処理用の一時保存レジスタとして利用する
+								※r12、r11は配列計算用として利用する
+	array_UseReg[0]=REG_R10
+	array_UseReg[1]=REG_R9
+	array_UseReg[2]=REG_R8
+	array_UseReg[3]=REG_RBX
+	array_UseReg[4]=REG_RDX
+	array_UseReg[5]=REG_RAX
+	array_UseReg[6]=REG_RCX	*/
+
+
+	///////////////////////////////////////////////////////////
+	//array_UseRegに、計算に利用するレジスタリストを作成
+	///////////////////////////////////////////////////////////
+
+	EnumRegister(
+		(int *)CalculationRegister,
+		sizeof(CalculationRegister)/sizeof(int),
+		array_UseReg,
+		&sp_UseReg,
+		AnswerReg);
+
+
+
+	///////////////////////////////////////////////////////////
+	//array_XmmRegに、計算に利用するレジスタリストを作成
+	///////////////////////////////////////////////////////////
+
+	EnumRegister(
+		(int *)CalculationXmmRegister,
+		sizeof(CalculationXmmRegister)/sizeof(int),
+		array_XmmReg,
+		&sp_XmmReg,
+		AnswerReg);
+
+
+	init_sp_reg=sp_UseReg;
+	init_sp_xmm_reg=sp_XmmReg;
+}
+void CRegister::bug_check(){
+	if(init_sp_reg!=sp_UseReg||
+		init_sp_xmm_reg!=sp_XmmReg) SetError(300,NULL,cp);
+}
+int CRegister::GetNextReg(){
+	if(sp_UseReg<0) return REG_R14;
+	return array_UseReg[sp_UseReg];
+}
+int CRegister::GetLockingReg(){
+	UnlockReg();
+	return LockReg();
+}
+int CRegister::LockReg(){
+	int reg;
+	reg=GetNextReg();
+
+	sp_UseReg--;
+
+	return reg;
+}
+int CRegister::UnlockReg(){
+	sp_UseReg++;
+	return GetNextReg();
+}
+int CRegister::GetNextXmmReg(){
+	if(sp_XmmReg<0) return REG_XMM4;
+	return array_XmmReg[sp_XmmReg];
+}
+int CRegister::GetLockingXmmReg(){
+	UnlockXmmReg();
+	return LockXmmReg();
+}
+int CRegister::LockXmmReg(){
+	int xmm_reg;
+	xmm_reg=GetNextXmmReg();
+
+	sp_XmmReg--;
+
+	return xmm_reg;
+}
+int CRegister::UnlockXmmReg(){
+	sp_XmmReg++;
+	return GetNextXmmReg();
+}
+void CRegister::backup(){
+	int i;
+
+	//汎用レジスタを退避
+	for(i=init_sp_reg;i>sp_UseReg;i--){
+		//mov qword ptr[rsp+offset],reg     ※スタックフレームを利用
+		pobj_sf->push(array_UseReg[i]);
+	}
+
+	//XMMレジスタを退避
+	for(i=init_sp_xmm_reg;i>sp_XmmReg;i--){
+		//mov qword ptr[rsp+offset],reg     ※スタックフレームを利用
+		pobj_sf->push(array_XmmReg[i],sizeof(_int64));
+	}
+}
+void CRegister::restore(){
+	int i;
+
+	//XMMレジスタを復元
+	if(sp_XmmReg<0) i=0;
+	else i=sp_XmmReg+1;
+	for(;i<=init_sp_xmm_reg;i++){
+		//mov reg,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(array_XmmReg[i],sizeof(_int64));
+	}
+
+	//汎用レジスタを復元
+	if(sp_UseReg<0) i=0;
+	else i=sp_UseReg+1;
+	for(;i<=init_sp_reg;i++){
+		//mov reg,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(array_UseReg[i]);
+	}
+}
+
+
+
+////////////////////////
+// その他
+////////////////////////
+
+BOOL IsGeneralReg(int reg){
+	if(REG_RAX<=reg&&reg<=REG_R15) return 1;
+	return 0;
+}
+BOOL IsXmmReg(int reg){
+	if(REG_XMM0<=reg&&reg<=REG_XMM15) return 1;
+	return 0;
+}
+BOOL IsVolatileReg(int reg){
+	if(reg==REG_RAX||
+		reg==REG_RCX||
+		reg==REG_RDX||
+		REG_R8<=reg&&reg<=REG_R11||
+		REG_XMM0<=reg&&reg<=REG_XMM5){
+		//値を保持する必要なし
+		return 1;
+	}
+	else{
+		//値を保持する必要あり
+		return 0;
+	}
+}
Index: /BasicCompiler64/WatchList.cpp
===================================================================
--- /BasicCompiler64/WatchList.cpp	(revision 3)
+++ /BasicCompiler64/WatchList.cpp	(revision 3)
@@ -0,0 +1,534 @@
+#include "../BasicCompiler_Common/common.h"
+#include "opcode.h"
+
+//デバッグ用
+#include "../BasicCompiler_Common/debug.h"
+
+int Debugging_GetArray(int *SubScripts,char *array,int type,LONG_PTR lpIndex,LONG_PTR *plpOffset);
+
+ULONG_PTR Debugging_GetVarPtr(RELATIVE_VAR *pRelativeVar){
+	extern DWORD ImageBase;
+	extern int MemPos_RWSection;
+	int i2;
+
+	if(pRelativeVar->dwKind==VAR_GLOBAL){
+		return ImageBase+MemPos_RWSection+pRelativeVar->offset;
+	}
+	else if(pRelativeVar->dwKind==VAR_LOCAL){
+		extern HWND hDebugWnd;
+		i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+		i2=pobj_dti->iProcLevel-i2;
+
+		if(pobj_dti->lplpSpBase[i2]==0) return 0;
+
+		return pobj_dti->lplpSpBase[i2]+pRelativeVar->offset;
+	}
+	else if(pRelativeVar->dwKind==VAR_REFLOCAL){
+		extern HWND hDebugWnd;
+		i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+		i2=pobj_dti->iProcLevel-i2;
+
+		if(pobj_dti->lplpSpBase[i2]==0) return 0;
+
+		extern HANDLE hDebugProcess;
+		LONG_PTR lpData;
+		SIZE_T stAccBytes;
+		ReadProcessMemory(hDebugProcess,
+			(void *)(pobj_dti->lplpSpBase[i2]+(int)pRelativeVar->offset),
+			&lpData,
+			sizeof(LONG_PTR),
+			&stAccBytes);
+
+		return lpData;
+	}
+	else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
+		return pRelativeVar->offset;
+	}
+
+	return 0;
+}
+
+BOOL Debugging_SetRelativeOffset(int *pType,LONG_PTR lpIndex,RELATIVE_VAR *pRelativeVar,char *lpPtrOffset){
+	int array_num;
+
+	_int64 i64data;
+	int type;
+	type=StaticCalculation(true, lpPtrOffset,0,&i64data,0,1);
+	if(!type) return 0;
+	if(IsRealNumberType(type)){
+		double dbl;
+		memcpy(&dbl,&i64data,sizeof(double));
+		i64data=(_int64)dbl;
+	}
+
+	array_num=(int)i64data;
+
+	if(PTR_LEVEL(*pType)){
+		*pType=MAKE_PTR_TYPE(NATURAL_TYPE(*pType),PTR_LEVEL(*pType)-1);
+		if((*pType)==DEF_OBJECT)
+			array_num*=GetSizeOfClassMember((CClass *)lpIndex,NULL,NULL);
+		else
+			array_num*=GetTypeSize(*pType,-1);
+	}
+	else{
+		//エラー
+		return 0;
+	}
+
+	extern HANDLE hDebugProcess;
+	LONG_PTR lpData;
+	SIZE_T stAccBytes;
+	lpData=Debugging_GetVarPtr(pRelativeVar);
+	if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(LONG_PTR),&stAccBytes)) return 0;
+	pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+	pRelativeVar->offset+=array_num;
+	return 1;
+}
+
+BOOL Debugging_GetMember(CClass *pobj_c,char *member,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpNestIndex,BOOL bPrivateAccess){
+	int i,i2,offset;
+
+	//直接参照に切り替え
+	pRelativeVar->offset=(LONG_PTR)Debugging_GetVarPtr(pRelativeVar);
+	pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+	//クラス、配列の構成要素を解析する
+	char VarName[VN_SIZE];		//変数名
+	char array[VN_SIZE];		//第1次配列
+	char lpPtrOffset[VN_SIZE];	//第2次配列
+	char NestMember[VN_SIZE];	//入れ子メンバ
+	int RefType;				//"."参照のときは0、"->"参照のときは1
+	lstrcpy(VarName,member);
+	if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)) return 0;
+
+
+	////////////////////////////
+	// メンバオフセットを取得
+	////////////////////////////
+
+	offset=GetSizeOfClassMember(pobj_c,VarName,&i);
+	if(i==pobj_c->iMemberNum) return 0;
+
+
+	//アクセシビリティをチェック
+	if((bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PRIVATE)||
+		pobj_c->ppobj_Member[i]->dwAccess==ACCESS_NON){
+		return 0;
+	}
+	else if(bPrivateAccess==0&&pobj_c->ppobj_Member[i]->dwAccess==ACCESS_PROTECTED)
+		return 0;
+
+	*pType=pobj_c->ppobj_Member[i]->TypeInfo.type;
+	*plpNestIndex=pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex;
+
+	//ポインタ変数の場合
+	if(IsPtrType(*pType)){
+		if(pobj_c->ppobj_Member[i]->SubScripts[0]==-1){
+			lstrcpy(lpPtrOffset,array);
+			array[0]=0;
+		}
+	}
+	else{
+		if(lpPtrOffset[0]) return 0;
+	}
+
+	pRelativeVar->offset+=offset;
+
+	if(array[0]){
+		//配列オフセット
+		i2=Debugging_GetArray(
+			pobj_c->ppobj_Member[i]->SubScripts,
+			array,
+			*pType,
+			pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex,
+			&pRelativeVar->offset);
+		if(i2==0){
+			//式エラー
+			return 0;
+		}
+		if(i2==-1){
+			//アクセスエラー
+			return -1;
+		}
+	}
+	else if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
+		*pType|=FLAG_PTR;
+	}
+
+	if(NestMember[0]){
+		//入れ子構造の場合
+
+		if(*pType==DEF_OBJECT){
+			if(RefType!=DEF_OBJECT) return 0;
+		}
+		else if(*pType==DEF_PTR_OBJECT){
+			//構造体ポインタ型メンバ変数
+
+			if(lpPtrOffset[0]){
+				if(RefType!=DEF_OBJECT) return 0;
+
+				//直接参照に切り替え
+				Debugging_SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+
+				lpPtrOffset[0]=0;
+			}
+			else{
+				if(RefType!=DEF_PTR_OBJECT) return 0;
+
+				extern HANDLE hDebugProcess;
+				LONG_PTR lpData;
+				SIZE_T stAccBytes;
+				lpData=Debugging_GetVarPtr(pRelativeVar);
+				if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(LONG_PTR),&stAccBytes)) return -1;
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+			}
+		}
+
+		i2=Debugging_GetMember(pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class,
+			NestMember,
+			pType,
+			pRelativeVar,
+			plpNestIndex,
+			0);
+		if(i2==0){
+			//式エラー
+			return 0;
+		}
+		if(i2==-1){
+			//アクセスエラー
+			return -1;
+		}
+	}
+
+	if(lpPtrOffset[0]){
+		Debugging_SetRelativeOffset(pType,*plpNestIndex,pRelativeVar,lpPtrOffset);
+	}
+
+	return 1;
+}
+int Debugging_GetArray(int *SubScripts,char *array,int type,LONG_PTR lpIndex,LONG_PTR *plpOffset){
+	extern HANDLE hHeap;
+	int i,i2,i3,i4,i5,array_offset,TypeSize;
+	char temporary[VN_SIZE],*pParm[MAX_PARMS];
+
+	for(i=0,i2=0,i3=0;;i++,i2++){
+		if(array[i]=='('){
+			i4=GetStringInPare(temporary+i2,array+i);
+			i+=i4-1;
+			i2+=i4-1;
+			continue;
+		}
+		if(array[i]=='['){
+			i4=GetStringInBracket(temporary+i2,array+i);
+			i+=i4-1;
+			i2+=i4-1;
+			continue;
+		}
+		if(array[i]==','||array[i]=='\0'){
+			if(SubScripts[i3]==-1){
+				for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
+				return 0;
+			}
+
+			temporary[i2]=0;
+
+			pParm[i3]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(pParm[i3],temporary);
+
+			i3++;
+
+			if(array[i]=='\0'){
+				if(SubScripts[i3]!=-1){
+					for(i3--;i3>=0;i3--) HeapDefaultFree(pParm[i3]);
+					return 0;
+				}
+				break;
+			}
+
+			i2=-1;
+			continue;
+		}
+		temporary[i2]=array[i];
+	}
+
+	array_offset=0;
+
+	for(i=i3-1;i>=0;i--){
+		_int64 i64data;
+		i2=StaticCalculation(true, pParm[i],0,&i64data,0,1);
+		if(i2==0){
+			//式エラー
+			return 0;
+		}
+		if(i2==-1){
+			//アクセスエラー
+			return -1;
+		}
+
+		if(IsRealNumberType(i2)){
+			double dbl;
+			memcpy(&dbl,&i64data,sizeof(double));
+			i64data=(_int64)dbl;
+		}
+		i5=(int)i64data;
+
+		for(i2=i+1,i4=1;i2<i3;i2++) i4*=SubScripts[i2]+1;
+
+		array_offset+=i5*i4;
+
+		HeapDefaultFree(pParm[i]);
+	}
+
+	TypeSize=GetTypeSize(type,lpIndex);
+
+	array_offset*=TypeSize;
+
+	*plpOffset+=array_offset;
+
+	return 1;
+}
+ULONG_PTR Debugging_GetThisPtrOffset(LONG_PTR obp_Rip){
+	int i;
+	SUBINFO *psi;
+
+	//ripからプロシージャを取得
+	psi=GetSubFromObp(obp_Rip);
+
+	for(i=0;i<psi->VarNum;i++){
+		if(lstrcmp(psi->pVar[i].name,"_System_LocalThis")==0) break;
+	}
+	if(i==psi->VarNum) return 0;
+
+	return psi->pVar[i].offset;
+}
+int Debugging_GetVarOffset(char *variable,int *pType,RELATIVE_VAR *pRelativeVar,LONG_PTR *plpIndex,int *pss){
+	extern HANDLE hDebugProcess;
+	int i,i2,i3,RefType;
+	char member[VN_SIZE],VarName[VN_SIZE],array[VN_SIZE],lpPtrOffset[VN_SIZE];
+	LONG_PTR lpData;
+	SIZE_T stAccBytes;
+
+	lstrcpy(VarName,variable);
+	GetVarFormatString(VarName,array,lpPtrOffset,member,&RefType);
+
+	LONG_PTR lpIndex;
+	int *pSubScripts;
+	BOOL bArray;
+
+
+	/////////////////
+	// ローカル変数
+	/////////////////
+	extern VARIABLE *LocalVar;
+	extern int MaxLocalVarNum;
+	for(i=0;i<MaxLocalVarNum;i++){
+		if(lstrcmp(VarName,LocalVar[i].name)==0) break;
+	}
+	if(i!=MaxLocalVarNum){
+		//ポインタ変数の場合
+		if(IsPtrType(LocalVar[i].type)){
+			if(!LocalVar[i].bArray){
+				lstrcpy(lpPtrOffset,array);
+				array[0]=0;
+			}
+		}
+		else{
+			if(lpPtrOffset[0]) return 0;
+		}
+
+		pRelativeVar->offset=LocalVar[i].offset;
+		if(LocalVar[i].fRef) pRelativeVar->dwKind=VAR_REFLOCAL;
+		else pRelativeVar->dwKind=VAR_LOCAL;
+		*pType=LocalVar[i].type;
+		lpIndex=LocalVar[i].u.index;
+		*plpIndex=lpIndex;
+		bArray=LocalVar[i].bArray;
+		pSubScripts=LocalVar[i].SubScripts;
+	}
+	else{
+		if(pobj_CompilingClass){
+			///////////////////////
+			// クラスメンバの参照
+			///////////////////////
+
+			if(memicmp(variable,"This.",5)==0){
+				//Thisオブジェクトのメンバを参照するとき
+				SlideString(variable+5,-5);
+				lstrcpy(VarName,variable);
+			}
+			else{
+				//クラス内メンバを参照するとき（通常）
+
+				for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
+					if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
+				}
+				if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
+			}
+
+			/////////////////////////////
+			// thisポインタを取得
+
+			extern HWND hDebugWnd;
+			i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+			i2=pobj_dti->iProcLevel-i2;
+
+			lpData=Debugging_GetThisPtrOffset(pobj_dti->lplpObp[i2]);
+			if(!lpData){
+				//式エラー
+				return 0;
+			}
+			lpData+=pobj_dti->lplpSpBase[i2];
+			if(!ReadProcessMemory(hDebugProcess,(void *)lpData,&pRelativeVar->offset,sizeof(LONG_PTR),&stAccBytes)){
+				//メモリにアクセスできないとき
+				return -1;
+			}
+
+			pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+			LONG_PTR lp2;
+			i3=Debugging_GetMember(pobj_CompilingClass,variable,pType,pRelativeVar,&lp2,1);
+			if(i3==0){
+				//式エラー
+				return 0;
+			}
+			if(i3==-1){
+				//アクセスエラー
+				return -1;
+			}
+
+			*plpIndex=lp2;
+			return 1;
+		}
+
+NonClassMember:
+
+		///////////////////
+		// グローバル変数
+		///////////////////
+		extern VARIABLE *GlobalVar;
+		extern int MaxGlobalVarNum;
+
+		for(i=0;i<MaxGlobalVarNum;i++){
+			if(lstrcmp(VarName,GlobalVar[i].name)==0) break;
+		}
+		if(i==MaxGlobalVarNum){
+			//一致しないとき
+			return 0;
+		}
+
+		//ポインタ変数の場合
+		if(IsPtrType(GlobalVar[i].type)){
+			if(!GlobalVar[i].bArray){
+				lstrcpy(lpPtrOffset,array);
+				array[0]=0;
+			}
+		}
+		else{
+			if(lpPtrOffset[0]) return 0;
+		}
+
+		pRelativeVar->offset=GlobalVar[i].offset;
+		pRelativeVar->dwKind=VAR_GLOBAL;
+		*pType=GlobalVar[i].type;
+		lpIndex=GlobalVar[i].u.index;
+		*plpIndex=lpIndex;
+		bArray=GlobalVar[i].bArray;
+		pSubScripts=GlobalVar[i].SubScripts;
+	}
+
+
+	if(array[0]==0&&bArray){
+		//配列の先頭ポインタを示す場合
+		*pType|=FLAG_PTR;
+		if(pss) memcpy(pss,pSubScripts,MAX_ARRAYDIM);
+		return 1;
+	}
+
+	if(array[0]){
+		i3=Debugging_GetArray(pSubScripts,array,*pType,lpIndex,&pRelativeVar->offset);
+		if(i3==0){
+			//式エラー
+			return 0;
+		}
+		if(i3==-1){
+			//アクセスエラー
+			return -1;
+		}
+	}
+	if(member[0]){
+		if(*pType==DEF_OBJECT){
+			//実態オブジェクトのメンバを参照（obj.member）
+			if(RefType!=DEF_OBJECT){
+				return 0;
+			}
+
+			LONG_PTR lp2;
+			i3=Debugging_GetMember((CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0);
+			if(i3==0){
+				//式エラー
+				return 0;
+			}
+			if(i3==-1){
+				//アクセスエラー
+				return -1;
+			}
+
+			*plpIndex=lp2;
+		}
+		else if(*pType==DEF_PTR_OBJECT){
+			//ポインタオブジェクトが示すメンバを参照
+			if(lpPtrOffset[0]){
+				//pObj[n].member
+				if(RefType!=DEF_OBJECT) return 0;
+				Debugging_SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset);
+
+				LONG_PTR lp2;
+				i3=Debugging_GetMember((CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0);
+				if(i3==0){
+					//式エラー
+					return 0;
+				}
+				if(i3==-1){
+					//アクセスエラー
+					return -1;
+				}
+
+				*plpIndex=lp2;
+			}
+			else{
+				//pObj->member
+				if(RefType!=DEF_PTR_OBJECT) return 0;
+
+				pRelativeVar->offset=Debugging_GetVarPtr(pRelativeVar);
+				pRelativeVar->dwKind=VAR_DIRECTMEM;
+
+				if(!ReadProcessMemory(hDebugProcess,(void *)pRelativeVar->offset,&lpData,sizeof(LONG_PTR),&stAccBytes)) return -1;
+				pRelativeVar->offset=lpData;
+
+				LONG_PTR lp2;
+				i3=Debugging_GetMember((CClass *)lpIndex,member,pType,pRelativeVar,&lp2,0);
+				if(i3==0){
+					//式エラー
+					return 0;
+				}
+				if(i3==-1){
+					//アクセスエラー
+					return -1;
+				}
+
+				*plpIndex=lp2;
+			}
+		}
+		else{
+			return 0;
+		}
+		return 1;
+	}
+
+	if(lpPtrOffset[0]){
+		if(!Debugging_SetRelativeOffset(pType,lpIndex,pRelativeVar,lpPtrOffset)) return 0;
+	}
+
+	return 1;
+}
Index: /BasicCompiler64/amd64_main.cpp
===================================================================
--- /BasicCompiler64/amd64_main.cpp	(revision 3)
+++ /BasicCompiler64/amd64_main.cpp	(revision 3)
@@ -0,0 +1,1772 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+
+BOOL IsSafeReg(int reg){
+	switch(reg){
+		case REG_RBX:
+		case REG_RSI:
+		case REG_RDI:
+		case REG_R12:
+		case REG_R13:
+		case REG_R14:
+		case REG_R15:
+			return 1;
+		default:
+			break;
+	}
+	return 0;
+}
+
+
+
+//////////////////////
+// rexプリフィックス
+//////////////////////
+void set_rex(int op_size,int reg,int index_reg,int base_reg){
+	char RexByte;
+
+	if(reg==REG_NON&&index_reg==REG_NON){
+		/////////////////////////////////////
+		// レジスタをr/mのみに指定するとき
+		/////////////////////////////////////
+
+		if((base_reg&0x08)==0){
+			if(op_size==sizeof(char)&&(base_reg&0x04)){
+				// r/m に spl,bpl,sil,dilを指定するとき
+				RexByte=0x40;
+			}
+			else RexByte=0;
+		}
+		else RexByte=(char)0x41;
+	}
+	else{
+		/////////////////
+		// 通常
+		/////////////////
+
+		if((reg&0x08)==0){
+			//reg … rax～rdi
+
+			if((index_reg&0x08)==0){
+				if((base_reg&0x08)==0) RexByte=0;
+				else RexByte=(char)0x41;
+			}
+			else{
+				if((base_reg&0x08)==0) RexByte=(char)0x42;
+				else RexByte=(char)0x43;
+			}
+		}
+		else{
+			//reg … r8～r15
+
+			if((index_reg&0x08)==0){
+				if((base_reg&0x08)==0) RexByte=(char)0x44;
+				else RexByte=(char)0x45;
+			}
+			else{
+				if((base_reg&0x08)==0) RexByte=(char)0x46;
+				else RexByte=(char)0x47;
+			}
+		}
+	}
+
+	if(op_size==sizeof(_int64)){
+		//64ビットオペランド
+		RexByte|=0x48;
+	}
+
+	if(RexByte) OpBuffer[obp++]=RexByte;
+}
+
+
+
+/////////////////////////////////////////////////
+// ModR/Mバイト、SIBバイト、ディスプレースメント
+/////////////////////////////////////////////////
+
+//スケール
+#define SCALE_NON	(char)0x00
+#define SCALE_2		(char)0x40
+#define SCALE_4		(char)0x80
+#define SCALE_8		(char)0xC0
+
+//インデックスなし
+#define INDEX_NON	0x04
+
+void set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,int disp){
+	if(mod==MOD_DISP32){
+		//ModR/Mバイト
+		OpBuffer[obp++]=(char)(      REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(0x04));
+
+		base_reg=0x05;
+		index_reg=INDEX_NON;
+	}
+	else{
+		//ModR/Mバイト
+		OpBuffer[obp++]=(char)(mod | REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(base_reg));
+	}
+
+
+	//レジスタモードの場合は、ここで終了
+	if(mod==MOD_REG) return;
+
+
+	if(REGISTER_OPERAND(base_reg)==0x04||mod==MOD_DISP32){
+		//////////////////////
+		// SIBバイトを使う
+		//////////////////////
+
+		OpBuffer[obp++]=(char)(scale| REGISTER_OPERAND(index_reg)<<3 | REGISTER_OPERAND(base_reg));
+	}
+
+	//ディスプレースメントを必要としない場合は、ここで終了
+	if(mod==MOD_BASE) return;
+
+
+	//////////////////////////
+	// ディスプレースメント
+	//////////////////////////
+
+	if(mod==MOD_BASE_DISP8) OpBuffer[obp++]=(char)disp;
+	else{
+		*((long *)(OpBuffer+obp))=disp;
+		obp+=sizeof(long);
+	}
+}
+
+
+
+void __op_format(int op_size,char op_prefix,char opcode1,char opcode2,int reg,int base_reg,int offset,char mod){
+	//命令プリフィックス
+	if(op_prefix) OpBuffer[obp++]=op_prefix;
+
+	//rexプリフィックス
+	set_rex(op_size,reg,0,base_reg);
+
+	//オペコード
+	OpBuffer[obp++]=opcode1;
+	if(opcode2) OpBuffer[obp++]=opcode2;
+
+	//ModR/M, SIB, disp
+	set_mod_rm_sib_disp(mod,reg,SCALE_NON,INDEX_NON,base_reg,offset);
+}
+
+
+
+
+//////////////////////////
+// スタック関連
+//////////////////////////
+
+void op_push(int reg){
+	//スタックにレジスタの値をプッシュ
+
+	if(REG_RAX<=reg&&reg<=REG_RDI){
+		/*	rax～rdi
+			0101 0xxx	*/
+		OpBuffer[obp++]=(char)(0x50| REGISTER_OPERAND(reg) );
+	}
+	if(REG_R8<=reg&&reg<=REG_R15){
+		/*	r8～r15
+			0100 0001 0101 0xxx	*/
+		OpBuffer[obp++]=(char)0x41;
+		OpBuffer[obp++]=(char)(0x50| REGISTER_OPERAND(reg) );
+	}
+}
+void op_push_value(long data){
+	//スタックにリテラル値をプッシュ
+	if(-128<=data&&data<=127){
+		//push 8ビット値
+		OpBuffer[obp++]=(char)0x6A;
+		OpBuffer[obp++]=(char)data;
+	}
+	else{
+		//push 32ビット値
+		OpBuffer[obp++]=(char)0x68;
+		*((long *)(OpBuffer+obp))=data;
+		obp+=sizeof(long);
+	}
+}
+void op_pop(int reg){
+	//スタックの内容をレジスタにポップ
+	if(REG_RAX<=reg&&reg<=REG_RDI){
+		/*	rax～rdi
+			0101 1xxx	*/
+		OpBuffer[obp++]=(char)(0x58| REGISTER_OPERAND(reg) );
+	}
+	if(REG_R8<=reg&&reg<=REG_R15){
+		/*	r8～r15
+			0100 0001 0101 1xxx	*/
+		OpBuffer[obp++]=(char)0x41;
+		OpBuffer[obp++]=(char)(0x58| REGISTER_OPERAND(reg) );
+	}
+}
+
+
+
+///////////////////
+// mov関連
+///////////////////
+
+void op_mov_RV(int op_size,int reg,int i32data){
+	//mov reg,i32data
+
+	//rexプリフィックス
+	set_rex(op_size,REG_NON,REG_NON,reg);
+
+	if(op_size==sizeof(_int64)){
+		//オペコード
+		OpBuffer[obp++]=(char)0xC7;
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg) );
+	}
+	else{
+		//レジスタ
+		OpBuffer[obp++]=(char)(0xB8| REGISTER_OPERAND(reg) );
+	}
+
+	//即値
+	*((long *)(OpBuffer+obp))=i32data;
+	obp+=sizeof(long);
+}
+void op_mov_RV64(int reg,_int64 i64data){
+	//mov reg,i64data
+
+	//rexプリフィックス
+	set_rex(sizeof(_int64),REG_NON,REG_NON,reg);
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xB8| REGISTER_OPERAND(reg) );
+
+	//即値
+	*((_int64 *)(OpBuffer+obp))=i64data;
+	obp+=sizeof(_int64);
+}
+void op_mov_RM(int op_size,int reg,int base_reg,int offset,char mod){
+	//mov reg64,qword ptr[base_reg+offset]
+	//mov reg32,dword ptr[base_reg+offset]
+	//mov reg16,word ptr[base_reg+offset]
+	//mov reg8,byte ptr[base_reg+offset]
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+	if(op_size==sizeof(short)) op_prefix=(char)0x66;
+
+	//オペコード
+	char opcode;
+	if(op_size==sizeof(char)) opcode=(char)0x8A;
+	else opcode=(char)0x8B;
+
+	__op_format(op_size,op_prefix,opcode,0,reg,base_reg,offset,mod);
+}
+void op_mov_RM_ex(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset){
+	//mov reg64,qword ptr[base_reg1+base_reg2+offset]
+	//mov reg32,dword ptr[base_reg1+base_reg2+offset]
+	//mov reg16,word ptr[base_reg1+base_reg2+offset]
+	//mov reg8,byte ptr[base_reg1+base_reg2+offset]
+
+	if(base_reg1==REG_RSP){
+		//SIBバイトのindex部にrspは指定できない
+		base_reg1=base_reg2;
+		base_reg2=REG_RSP;
+	}
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//rexプリフィックス
+	set_rex(op_size,reg,base_reg1,base_reg2);
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0x8A;
+	else OpBuffer[obp++]=(char)0x8B;
+
+	if(bUseOffset){
+		///////////////////////////
+		// オフセット値を使う
+		///////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+
+		//オフセット値
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		///////////////////////////
+		// オフセット値を使わない
+		///////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x04| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+	}
+}
+void op_mov_MR(int op_size,int reg,int base_reg,int offset,char mod){
+	//mov qword ptr[base_reg+offset],reg64
+	//mov dword ptr[base_reg+offset],reg32
+	//mov word ptr[base_reg+offset],reg16
+	//mov byte ptr[base_reg+offset],reg8
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+	if(op_size==sizeof(short)) op_prefix=(char)0x66;
+
+	//オペコード
+	char opcode;
+	if(op_size==sizeof(char)) opcode=(char)0x88;
+	else opcode=(char)0x89;
+
+	__op_format(op_size,op_prefix,opcode,0,reg,base_reg,offset,mod);
+}
+void op_mov_MR_ex(int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset){
+	//mov qword ptr[base_reg1+base_reg2+offset],reg64
+	//mov dword ptr[base_reg1+base_reg2+offset],reg32
+	//mov word ptr[base_reg1+base_reg2+offset],reg16
+	//mov byte ptr[base_reg1+base_reg2+offset],reg8
+
+	if(base_reg1==REG_RSP){
+		//SIBバイトのindex部にrspは指定できない
+		base_reg1=base_reg2;
+		base_reg2=REG_RSP;
+	}
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//rexプリフィックス
+	set_rex(op_size,reg,base_reg1,base_reg2);
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0x88;
+	else OpBuffer[obp++]=(char)0x89;
+
+	if(bUseOffset==USE_OFFSET){
+		//////////////////////////
+		//オフセット値を使う
+		//////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+
+		//オフセット値
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		//////////////////////////
+		//オフセット値を使わない
+		//////////////////////////
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0x04| REGISTER_OPERAND(reg)<<3);
+
+		//ベースレジスタ
+		OpBuffer[obp++]=(char)(REGISTER_OPERAND(base_reg1)<<3 | REGISTER_OPERAND(base_reg2));
+	}
+}
+
+void op_mov_MV(int op_size,int base_reg,int offset,BOOL bUseOffset,int i32data){
+	//mov ptr[base_reg+offset],i32data
+	//mov ptr[base_reg       ],i32data
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//rexプリフィックス
+	set_rex(op_size,0,0,base_reg);
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0xC6;
+	else OpBuffer[obp++]=(char)0xC7;
+
+	if(bUseOffset==USE_OFFSET){
+		//////////////////////////
+		//オフセット値を使う
+		//////////////////////////
+
+		//ModR/M, SIB, disp
+		set_mod_rm_sib_disp(MOD_BASE_DISP32,0,SCALE_NON,INDEX_NON,base_reg,offset);
+	}
+	else{
+		//ModR/M, SIB, disp
+		set_mod_rm_sib_disp(MOD_BASE,0,SCALE_NON,INDEX_NON,base_reg,0);
+	}
+
+	//即値
+	if(op_size==sizeof(_int64)||op_size==sizeof(long)){
+		//32/64ビット
+		*((long *)(OpBuffer+obp))=i32data;
+		obp+=sizeof(long);
+	}
+	else if(op_size==sizeof(short)){
+		//16ビット
+		*((short *)(OpBuffer+obp))=(short)i32data;
+		obp+=sizeof(short);
+	}
+	else if(op_size==sizeof(char)){
+		//16ビット
+		*((char *)(OpBuffer+obp))=(char)i32data;
+		obp++;
+	}
+}
+
+void op_mov_RR(int reg1,int reg2){
+	op_mov64_ToReg_FromReg(reg1,reg2);
+}
+
+
+
+///////////////////
+// mov64関連
+///////////////////
+
+void op_mov64_ToReg(int reg,_int64 i64data){
+	//mov reg,i64data
+
+	if(REG_RAX<=reg&&reg<=REG_RDI){
+		/*	rax～rdi
+			0100 1000 1011 1xxx [64bit data]	*/
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)(0xB8| REGISTER_OPERAND(reg) );
+		*((_int64 *)(OpBuffer+obp))=i64data;
+		obp+=sizeof(_int64);
+	}
+	if(REG_R8<=reg&&reg<=REG_R15){
+		/*	r8～r15
+			0100 1001 1011 1xxx [64bit data]	*/
+		OpBuffer[obp++]=(char)0x49;
+		OpBuffer[obp++]=(char)(0xB8| REGISTER_OPERAND(reg) );
+		*((_int64 *)(OpBuffer+obp))=i64data;
+		obp+=sizeof(_int64);
+	}
+}
+void op_mov64_ToReg(int reg,int i32data){
+	//mov reg,i32data
+
+	if(REG_RAX<=reg&&reg<=REG_RDI){
+		/*	rax～rdi
+			0100 1000 1100 0111 1100 0xxx [32bit data]	*/
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)0xC7;
+		OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg) );
+		*((long *)(OpBuffer+obp))=i32data;
+		obp+=sizeof(long);
+	}
+	if(REG_R8<=reg&&reg<=REG_R15){
+		/*	r8～r15
+			0100 1001 1100 0111 1100 0xxx [32bit data]	*/
+		OpBuffer[obp++]=(char)0x49;
+		OpBuffer[obp++]=(char)0xC7;
+		OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg) );
+		*((long *)(OpBuffer+obp))=i32data;
+		obp+=sizeof(long);
+	}
+}
+void op_mov64_ToReg_FromReg(int reg1,int reg2){
+	//mov reg1,reg2
+	char RexByte=-1;
+
+	if(reg1==reg2) return;
+
+	if(REG_RAX<=reg1&&reg1<=REG_RDI){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+	}
+	if(REG_R8<=reg1&&reg1<=REG_R15){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	// [8bit rex] 1000 1011 11xx xbbb
+	OpBuffer[obp++]=RexByte;
+	OpBuffer[obp++]=(char)0x8B;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+void op_movsxd(int reg64,int reg32){
+	//movsxd reg64,reg32
+	char RexByte=-1;
+
+	if(REG_RAX<=reg64&&reg64<=REG_RDI){
+		if(REG_RAX<=reg32&&reg32<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg32&&reg32<=REG_R15) RexByte=(char)0x49;
+	}
+	if(REG_R8<=reg64&&reg64<=REG_R15){
+		if(REG_RAX<=reg32&&reg32<=REG_RDI) RexByte=(char)0x4C;
+		if(REG_R8<=reg32&&reg32<=REG_R15) RexByte=(char)0x4D;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0110 0011 11rr rbbb
+	OpBuffer[obp++]=RexByte;
+	OpBuffer[obp++]=(char)0x63;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg64)<<3 | REGISTER_OPERAND(reg32));
+}
+void op_movsx64_FromReg16(int reg64,int reg16){
+	//movsx reg64,reg16
+	char RexByte=-1;
+
+	if(REG_RAX<=reg64&&reg64<=REG_RDI){
+		if(REG_RAX<=reg16&&reg16<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg16&&reg16<=REG_R15) RexByte=(char)0x49;
+	}
+	if(REG_R8<=reg64&&reg64<=REG_R15){
+		if(REG_RAX<=reg16&&reg16<=REG_RDI) RexByte=(char)0x4C;
+		if(REG_R8<=reg16&&reg16<=REG_R15) RexByte=(char)0x4D;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0000 1111 1011 1111 11rr rbbb
+	OpBuffer[obp++]=RexByte;
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0xBF;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg64)<<3 | REGISTER_OPERAND(reg16));
+}
+void op_movsx64_FromReg8(int reg64,int reg8){
+	//movsx reg64,reg8
+	char RexByte=-1;
+
+	if(REG_RAX<=reg64&&reg64<=REG_RDI){
+		if(REG_RAX<=reg8&&reg8<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg8&&reg8<=REG_R15) RexByte=(char)0x49;
+	}
+	if(REG_R8<=reg64&&reg64<=REG_R15){
+		if(REG_RAX<=reg8&&reg8<=REG_RDI) RexByte=(char)0x4C;
+		if(REG_R8<=reg8&&reg8<=REG_R15) RexByte=(char)0x4D;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0000 1111 1011 1110 11rr rbbb
+	OpBuffer[obp++]=RexByte;
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0xBE;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg64)<<3 | REGISTER_OPERAND(reg8));
+}
+
+
+
+//////////////////
+// mov32関連
+//////////////////
+
+void op_movsx32_FromReg16(int reg32,int reg16){
+	//movsx reg32,reg16
+	char RexByte=-1;
+
+	if(REG_RAX<=reg32&&reg32<=REG_RDI){
+		if(REG_RAX<=reg16&&reg16<=REG_RDI) RexByte=0;
+		if(REG_R8<=reg16&&reg16<=REG_R15) RexByte=(char)0x41;
+	}
+	if(REG_R8<=reg32&&reg32<=REG_R15){
+		if(REG_RAX<=reg16&&reg16<=REG_RDI) RexByte=(char)0x44;
+		if(REG_R8<=reg16&&reg16<=REG_R15) RexByte=(char)0x45;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0000 1111 1011 1111 11rr rbbb
+	if(RexByte) OpBuffer[obp++]=RexByte;
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0xBF;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg32)<<3 | REGISTER_OPERAND(reg16));
+}
+void op_movsx32_FromReg8(int reg32,int reg8){
+	//movsx reg32,reg8
+	char RexByte=-1;
+
+	if(REG_RAX<=reg32&&reg32<=REG_RDI){
+		if(REG_RAX<=reg8&&reg8<=REG_RBX) RexByte=0;
+		if(REG_RSP<=reg8&&reg8<=REG_RDI) RexByte=(char)0x40;
+		if(REG_R8<=reg8&&reg8<=REG_R15) RexByte=(char)0x41;
+	}
+	if(REG_R8<=reg32&&reg32<=REG_R15){
+		if(REG_RAX<=reg8&&reg8<=REG_RDI) RexByte=(char)0x44;
+		if(REG_R8<=reg8&&reg8<=REG_R15) RexByte=(char)0x45;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0000 1111 1011 1110 11rr rbbb
+	if(RexByte) OpBuffer[obp++]=RexByte;
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0xBE;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg32)<<3 | REGISTER_OPERAND(reg8));
+}
+
+
+
+/////////////////////
+// mov16関連
+/////////////////////
+
+void op_movsx16_FromReg8(int reg32,int reg8){
+	//movsx reg16,reg8
+	char RexByte=-1;
+
+	if(REG_RAX<=reg32&&reg32<=REG_RDI){
+		if(REG_RAX<=reg8&&reg8<=REG_RBX) RexByte=0;
+		if(REG_RSP<=reg8&&reg8<=REG_RDI) RexByte=(char)0x40;
+		if(REG_R8<=reg8&&reg8<=REG_R15) RexByte=(char)0x41;
+	}
+	if(REG_R8<=reg32&&reg32<=REG_R15){
+		if(REG_RAX<=reg8&&reg8<=REG_RDI) RexByte=(char)0x44;
+		if(REG_R8<=reg8&&reg8<=REG_R15) RexByte=(char)0x45;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//0110 0110 [8bit rex] 0000 1111 1011 1110 11rr rbbb
+	OpBuffer[obp++]=(char)0x66;
+	if(RexByte) OpBuffer[obp++]=RexByte;
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0xBE;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg32)<<3 | REGISTER_OPERAND(reg8));
+}
+
+
+
+//////////////////////////////////
+// インクリメント・デクリメント
+//////////////////////////////////
+
+void op_inc(int reg){
+	//inc reg
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+
+	//オペコード
+	char opcode=(char)0xFF;
+
+	__op_format(sizeof(_int64),op_prefix,opcode,0,0,reg,0,MOD_REG);
+}
+void op_dec(int reg){
+	op_inc(reg);
+	OpBuffer[obp-1]=OpBuffer[obp-1]|0x08;
+}
+
+
+
+/////////////////////
+// add関連
+/////////////////////
+
+void op_add_RM(int op_size,int reg,int base_reg,int offset,char mod){
+	//add reg64,qword ptr[base_reg+offset]
+	//add reg32,dword ptr[base_reg+offset]
+	//add reg16,word ptr[base_reg+offset]
+	//add reg8,byte ptr[base_reg+offset]
+
+	//16ビット演算の命令プリフィックス
+	char op_prefix=0;
+	if(op_size==sizeof(short)) op_prefix=(char)0x66;
+
+	//オペコード
+	char opcode;
+	if(op_size==sizeof(char)) opcode=(char)0x02;
+	else opcode=(char)0x03;
+
+	__op_format(op_size,op_prefix,opcode,0,reg,base_reg,offset,mod);
+}
+
+void op_add64_value(int reg,int offset){
+	//add reg,offset
+	char RexByte=-1;
+
+	if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0x48;
+	if(REG_R8<=reg&&reg<=REG_R15) RexByte=0x49;
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	if(reg==REG_RAX){
+		//raxのみ特殊
+
+		// [8bit rex] 0000 0101 [32bit offset]
+		OpBuffer[obp++]=(char)RexByte;
+		OpBuffer[obp++]=(char)0x05;
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		//rax以外
+
+		//[8bit rex] 1000 0001 1100 0xxx [32bit offset]
+		OpBuffer[obp++]=(char)RexByte;
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg));
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+}
+void op_add64_reg(int reg1,int reg2){
+	//add reg1,reg2
+	char RexByte=-1;
+
+	if(REG_RAX<=reg1&&reg1<=REG_RDI){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+	}
+	if(REG_R8<=reg1&&reg1<=REG_R15){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0000 0011 11rr rbbb
+	OpBuffer[obp++]=(char)RexByte;
+	OpBuffer[obp++]=(char)0x03;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+void op_add32_reg(int reg1,int reg2){
+	//add reg1,reg2
+	char RexByte=-1;
+
+	if(REG_RAX<=reg1&&reg1<=REG_RDI){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=0;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x41;
+	}
+	if(REG_R8<=reg1&&reg1<=REG_R15){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x44;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x45;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0000 0011 11rr rbbb
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+	OpBuffer[obp++]=(char)0x03;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+
+
+
+////////////////////////
+// sub関連
+////////////////////////
+
+void op_sub_RV(int op_size,int reg,int i32data){
+	//sub reg,i32data
+
+	//rexプリフィックス
+	set_rex(op_size,REG_NON,REG_NON,reg);
+
+	if(reg==REG_RAX){
+		//raxのみ特殊
+		OpBuffer[obp++]=(char)0x2D;
+	}
+	else{
+		//オペコード
+		OpBuffer[obp++]=(char)0x81;
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0xE8| REGISTER_OPERAND(reg) );
+	}
+
+	//即値
+	*((long *)(OpBuffer+obp))=i32data;
+	obp+=sizeof(long);
+}
+void op_sub64_reg(int reg1,int reg2){
+	//sub reg1,reg2
+	char RexByte=-1;
+
+	if(REG_RAX<=reg1&&reg1<=REG_RDI){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+	}
+	if(REG_R8<=reg1&&reg1<=REG_R15){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0010 1011 11rr rbbb
+	OpBuffer[obp++]=(char)RexByte;
+	OpBuffer[obp++]=(char)0x2B;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+void op_sub32_reg(int reg1,int reg2){
+	//sub reg1,reg2
+	char RexByte=-1;
+
+	if(REG_RAX<=reg1&&reg1<=REG_RDI){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=0;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x41;
+	}
+	if(REG_R8<=reg1&&reg1<=REG_R15){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x44;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x45;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 0010 1011 11rr rbbb
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+	OpBuffer[obp++]=(char)0x2B;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+
+
+
+////////////////////////
+// imul関連
+////////////////////////
+
+void op_imul_reg(int op_size,int reg1,int reg2){
+	//imul reg1,reg2
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+		}
+	}
+	else{
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=0;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x41;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x44;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x45;
+		}
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0xAF;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+void op_imul_value(int op_size,int reg,int i32data){
+	//imul reg,i32data
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x4D;
+	}
+	else{
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x45;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	if(-128<=i32data&&i32data<=127){
+		//オペコード
+		OpBuffer[obp++]=(char)0x6B;
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(reg));
+
+		//値
+		OpBuffer[obp++]=(char)i32data;
+	}
+	else{
+		//オペコード
+		OpBuffer[obp++]=(char)0x69;
+
+		//レジスタ
+		OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(reg));
+
+		//値
+		*((long *)(OpBuffer+obp))=i32data;
+		obp+=sizeof(long);
+	}
+}
+
+
+
+////////////////////////
+// div、idiv関連
+////////////////////////
+
+void op_div64_reg(int reg){
+	//div reg
+	char RexByte=-1;
+
+	if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+	if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//rexプリフィックス
+	OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF7;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xF0| REGISTER_OPERAND(reg));
+}
+void op_idiv64_reg(int reg){
+	//idiv reg
+	char RexByte=-1;
+
+	if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+	if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//rexプリフィックス
+	OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF7;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xF8| REGISTER_OPERAND(reg));
+}
+
+
+
+////////////////////
+// ビットシフト関連
+////////////////////
+
+void op_shl_reg(int op_size,int reg){
+	//shl reg,cl
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
+	}
+	else if(op_size==sizeof(char)){
+		if(REG_RAX<=reg&&reg<=REG_RBX) RexByte=0;
+		if(REG_RSP<=reg&&reg<=REG_RDI) RexByte=(char)0x40;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+	}
+	else{
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0xD2;
+	else OpBuffer[obp++]=(char)0xD3;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xE0| REGISTER_OPERAND(reg));
+}
+void op_sar_reg(int op_size,int reg){
+	//sar reg,cl
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
+	}
+	else if(op_size==sizeof(char)){
+		if(REG_RAX<=reg&&reg<=REG_RBX) RexByte=0;
+		if(REG_RSP<=reg&&reg<=REG_RDI) RexByte=(char)0x40;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+	}
+	else{
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0xD2;
+	else OpBuffer[obp++]=(char)0xD3;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xF8| REGISTER_OPERAND(reg));
+}
+void op_shr_reg(int op_size,int reg){
+	//shr reg,cl
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
+	}
+	else if(op_size==sizeof(char)){
+		if(REG_RAX<=reg&&reg<=REG_RBX) RexByte=0;
+		if(REG_RSP<=reg&&reg<=REG_RDI) RexByte=(char)0x40;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+	}
+	else{
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0xD2;
+	else OpBuffer[obp++]=(char)0xD3;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xE8| REGISTER_OPERAND(reg));
+}
+
+
+
+////////////////////
+// and 関連
+////////////////////
+
+void op_and_reg(int op_size,int reg1,int reg2){
+	//and reg1,reg2
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+		}
+	}
+	else{
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=0;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x41;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x44;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x45;
+		}
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x23;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+void op_and64_value(int reg,int offset){
+	//and reg,offset
+	char RexByte=-1;
+
+	if(REG_RAX<=reg&&reg<=REG_RDI) (char)RexByte=0x48;
+	if(REG_R8<=reg&&reg<=REG_R15) (char)RexByte=0x49;
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	if(reg==REG_RAX){
+		//raxのみ特殊
+
+		// [8bit rex] 0010 0101 [32bit offset]
+		OpBuffer[obp++]=(char)RexByte;
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		//rax以外
+
+		//[8bit rex] 1000 0001 1100 0xxx [32bit offset]
+		OpBuffer[obp++]=(char)RexByte;
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)(0xE0| REGISTER_OPERAND(reg));
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+}
+void op_and32_value(int reg,int offset){
+	//and reg,offset
+	char RexByte=-1;
+
+	if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0;
+	if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	if(reg==REG_RAX){
+		//eaxのみ特殊
+
+		// [8bit rex] 0010 0101 [32bit offset]
+		OpBuffer[obp++]=(char)0x25;
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+	else{
+		//eax以外
+
+		//[8bit rex] 1000 0001 1100 0xxx [32bit offset]
+		if(RexByte) OpBuffer[obp++]=(char)RexByte;
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)(0xE0| REGISTER_OPERAND(reg));
+		*((long *)(OpBuffer+obp))=offset;
+		obp+=sizeof(long);
+	}
+}
+
+
+
+////////////////////////
+// or 関連
+////////////////////////
+
+void op_or_reg(int op_size,int reg1,int reg2){
+	//or reg1,reg2
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+		}
+	}
+	else{
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=0;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x41;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x44;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x45;
+		}
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0B;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+
+
+
+////////////////////////
+// xor 関連
+////////////////////////
+
+void op_xor_reg(int op_size,int reg1,int reg2){
+	//xor reg1,reg2
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+		}
+	}
+	else{
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=0;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x41;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x44;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x45;
+		}
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x33;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+
+
+
+///////////////////////
+// not 関連
+///////////////////////
+
+void op_not_reg(int op_size,int reg){
+	//not reg
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
+	}
+	else{
+		if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0;
+		if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF7;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xD0| REGISTER_OPERAND(reg));
+}
+
+
+
+////////////////////
+// test関連
+////////////////////
+
+void op_test(int reg1,int reg2){
+	//test reg1,reg2
+	char RexByte=-1;
+
+	if(REG_RAX<=reg1&&reg1<=REG_RDI){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+	}
+	if(REG_R8<=reg1&&reg1<=REG_R15){
+		if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+		if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+	//[8bit rex] 1000 0101 11rr rbbb
+	OpBuffer[obp++]=(char)RexByte;
+	OpBuffer[obp++]=(char)0x85;
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+
+
+
+/////////////////////
+// cmp 関連
+/////////////////////
+
+void op_cmp_reg(int op_size,int reg1,int reg2){
+	//cmp reg1,reg2
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x48;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x49;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x4C;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x4D;
+		}
+	}
+	else{
+		if(REG_RAX<=reg1&&reg1<=REG_RDI){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=0;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x41;
+		}
+		if(REG_R8<=reg1&&reg1<=REG_R15){
+			if(REG_RAX<=reg2&&reg2<=REG_RDI) RexByte=(char)0x44;
+			if(REG_R8<=reg2&&reg2<=REG_R15) RexByte=(char)0x45;
+		}
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x3B;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg1)<<3 | REGISTER_OPERAND(reg2));
+}
+void op_cmp_value(int op_size,int reg,char byte_data){
+	//cmp reg,byte_data
+
+	if(op_size==sizeof(char)&&reg==REG_RAX){
+		//alレジスタの場合は特殊
+		OpBuffer[obp++]=(char)0x3C;
+
+		//8ビット値
+		OpBuffer[obp++]=byte_data;
+
+		return;
+	}
+
+	//16ビット演算のプリフィックス
+	if(op_size==sizeof(short)) OpBuffer[obp++]=(char)0x66;
+
+	//rexプリフィックス
+	set_rex(op_size,REG_NON,REG_NON,reg);
+
+	//オペコード
+	if(op_size==sizeof(char)) OpBuffer[obp++]=(char)0x80;
+	else OpBuffer[obp++]=(char)0x83;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xF8| REGISTER_OPERAND(reg));
+
+	//8ビット値
+	OpBuffer[obp++]=byte_data;
+}
+
+
+////////////////////
+// SSE2関連
+////////////////////
+
+void op_movlpd_MR(int xmm_reg,int base_reg,int offset,char mod){
+	//movlpd qword ptr[base_reg+offset],xmm_reg
+	__op_format(0,(char)0x66,(char)0x0F,(char)0x13,xmm_reg,base_reg,offset,mod);
+}
+void op_movlpd_RM(int xmm_reg,int base_reg,int offset,char mod){
+	//movlpd xmm_reg,qword ptr[base_reg+offset]
+	__op_format(0,(char)0x66,(char)0x0F,(char)0x12,xmm_reg,base_reg,offset,mod);
+}
+void op_movsd_RR(int xmm_reg1,int xmm_reg2){
+	if(xmm_reg1==xmm_reg2) return;
+
+	//movsd xmm_reg1,xmm_reg2
+	__op_format(0,(char)0xF2,(char)0x0F,(char)0x10,xmm_reg1,xmm_reg2,0,MOD_REG);
+}
+void op_movsd_MR(int xmm_reg,int base_reg,int offset,char mod){
+	//movsd qword ptr[reg+offset],xmm_reg
+	//movsd qword ptr[reg],xmm_reg
+	__op_format(0,(char)0xF2,(char)0x0F,(char)0x11,xmm_reg,base_reg,offset,mod);
+}
+void op_movss_RR(int xmm_reg1,int xmm_reg2){
+	if(xmm_reg1==xmm_reg2) return;
+
+	//movss xmm_reg1,xmm_reg2
+	__op_format(0,(char)0xF3,(char)0x0F,(char)0x10,xmm_reg1,xmm_reg2,0,MOD_REG);
+}
+void op_movss_RM(int xmm_reg,int base_reg,int offset,char mod){
+	//movss xmm_reg,dword ptr[base_reg+offset]
+	__op_format(0,(char)0xF3,(char)0x0F,(char)0x10,xmm_reg,base_reg,offset,mod);
+}
+void op_movss_MR(int xmm_reg,int base_reg,int offset,char mod){
+	//movss dword ptr[reg+offset],xmm_reg
+	//movss dword ptr[reg],xmm_reg
+	__op_format(0,(char)0xF3,(char)0x0F,(char)0x11,xmm_reg,base_reg,offset,mod);
+}
+
+void op_movd_RX(int reg,int xmm_reg){
+	__op_format(sizeof(_int64),(char)0x66,(char)0x0F,(char)0x7E,xmm_reg,reg,0,MOD_REG);
+}
+
+void op_cvtsd2ss(int xmm_reg1,int xmm_reg2){
+	//cvtsd2ss xmm_reg1,xmm_reg2
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF2;
+
+	//rexプリフィックス
+	set_rex(sizeof(long),xmm_reg1,0,xmm_reg2);
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x5A;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+}
+void op_cvtss2sd(int xmm_reg1,int xmm_reg2){
+	//cvtss2sd xmm_reg1,xmm_reg2
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF3;
+
+	//rexプリフィックス
+	set_rex(0,xmm_reg1,0,xmm_reg2);
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x5A;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+}
+void op_cvttsd2si_xmm(int op_size,int reg,int xmm_reg){
+	//cvttsd2si reg,xmm_reg
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF2;
+
+	//rexプリフィックス
+	set_rex(op_size,reg,0,xmm_reg);
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x2C;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(xmm_reg));
+}
+void op_cvttss2si_xmm(int op_size,int reg,int xmm_reg){
+	//cvttss2si reg,xmm_reg
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF3;
+
+	//rexプリフィックス
+	set_rex(op_size,reg,0,xmm_reg);
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x2C;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(xmm_reg));
+}
+void op_cvtsi2sd_reg(int op_size,int xmm_reg,int reg){
+	//cvtsi2sd xmm_reg,reg
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_XMM0<=xmm_reg&&xmm_reg<=REG_XMM7){
+			if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+			if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
+		}
+		if(REG_XMM8<=xmm_reg&&xmm_reg<=REG_XMM15){
+			if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x4C;
+			if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x4D;
+		}
+	}
+	else{
+		if(REG_XMM0<=xmm_reg&&xmm_reg<=REG_XMM7){
+			if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0;
+			if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+		}
+		if(REG_XMM8<=xmm_reg&&xmm_reg<=REG_XMM15){
+			if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x44;
+			if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x45;
+		}
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF2;
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x2A;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(xmm_reg)<<3 | REGISTER_OPERAND(reg));
+}
+void op_cvtsi2ss_reg(int op_size,int xmm_reg,int reg){
+	//cvtsi2ss xmm_reg,reg
+	char RexByte=-1;
+
+	if(op_size==sizeof(_int64)){
+		if(REG_XMM0<=xmm_reg&&xmm_reg<=REG_XMM7){
+			if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x48;
+			if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
+		}
+		if(REG_XMM8<=xmm_reg&&xmm_reg<=REG_XMM15){
+			if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x4C;
+			if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x4D;
+		}
+	}
+	else{
+		if(REG_XMM0<=xmm_reg&&xmm_reg<=REG_XMM7){
+			if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=0;
+			if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
+		}
+		if(REG_XMM8<=xmm_reg&&xmm_reg<=REG_XMM15){
+			if(REG_RAX<=reg&&reg<=REG_RDI) RexByte=(char)0x44;
+			if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x45;
+		}
+	}
+
+	if(RexByte==-1) SetError(300,NULL,cp);
+
+
+	//オペコード
+	OpBuffer[obp++]=(char)0xF3;
+
+	//rexプリフィックス
+	if(RexByte) OpBuffer[obp++]=(char)RexByte;
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x2A;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(xmm_reg)<<3 | REGISTER_OPERAND(reg));
+}
+void op_comisd(int xmm_reg1,int xmm_reg2){
+	//comisd xmm_reg1,xmm_reg2
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x66;
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x2F;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+}
+void op_comiss(int xmm_reg1,int xmm_reg2){
+	//comiss xmm_reg1,xmm_reg2
+
+	//オペコード
+	OpBuffer[obp++]=(char)0x0F;
+	OpBuffer[obp++]=(char)0x2F;
+
+	//レジスタ
+	OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+}
+
+
+
+/////////////////////
+// ストリング関係
+/////////////////////
+
+void op_rep_movs(int op_size){
+	if(op_size==sizeof(BYTE)){
+		//rep movs byte ptr[edi],byte ptr[esi]
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0xA4;
+	}
+	else if(op_size==sizeof(short)){
+		//rep movs word ptr[edi],word ptr[esi]
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0x66;
+		OpBuffer[obp++]=(char)0xA5;
+	}
+	else if(op_size==sizeof(long)){
+		//rep movs dword ptr[edi],dword ptr[esi]
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0xA5;
+	}
+}
+
+
+
+
+void op_add_rsp(int num){
+	//スタックポインタの加算（pop方向）
+
+	//add rsp,num
+	if(0xFFFFFF80&num){
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)0xC4;
+		*((long *)(OpBuffer+obp))=num;
+		obp+=sizeof(long);
+	}
+	else{
+		//「-128 < num < 127」の場合
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)num;
+	}
+}
+void op_sub_rsp(int num){
+	//スタックポインタの減算（push方向）
+
+	//sub rsp,num
+	if(0xFFFFFF80&num){
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)0xEC;
+		*((long *)(OpBuffer+obp))=num;
+		obp+=sizeof(long);
+	}
+	else{
+		//「-128 < num < 127」の場合
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xEC;
+		OpBuffer[obp++]=(char)num;
+	}
+}
+
+
+void op_add_esp(int num){
+	//スタックポインタの加算（pop方向）
+
+	//add esp,num
+	if(0xFFFFFF80&num){
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)0xC4;
+		*((long *)(OpBuffer+obp))=num;
+		obp+=sizeof(long);
+	}
+	else{
+		//「-128 < num < 127」の場合
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xC4;
+		OpBuffer[obp++]=(char)num;
+	}
+}
+void op_sub_esp(int num){
+	//スタックポインタの減算（push方向）
+
+	//sub esp,num
+	if(0xFFFFFF80&num){
+		OpBuffer[obp++]=(char)0x81;
+		OpBuffer[obp++]=(char)0xEC;
+		*((long *)(OpBuffer+obp))=num;
+		obp+=sizeof(long);
+	}
+	else{
+		//「-128 < num < 127」の場合
+		OpBuffer[obp++]=(char)0x83;
+		OpBuffer[obp++]=(char)0xEC;
+		OpBuffer[obp++]=(char)num;
+	}
+}
+
+
+
+//////////////////////////////
+// 浮動小数点関連
+//////////////////////////////
+
+void op_fld_ptr_esp(int type){
+	//スタックポインタが示すバッファのデータを浮動小数点レジスタへロード
+
+	if(type==DEF_DOUBLE){
+		//fld qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDD;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type==DEF_SINGLE){
+		//fld dword ptr[esp]
+		OpBuffer[obp++]=(char)0xD9;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type==DEF_INT64){
+		//fild qword ptr[esp]
+		OpBuffer[obp++]=(char)0xDF;
+		OpBuffer[obp++]=(char)0x2C;
+		OpBuffer[obp++]=(char)0x24;
+	}
+	else if(type==DEF_LONG){
+		//fild dword ptr[esp]
+		OpBuffer[obp++]=(char)0xDB;
+		OpBuffer[obp++]=(char)0x04;
+		OpBuffer[obp++]=(char)0x24;
+	}
+}
+
+
+
+//////////////////////////////
+// レジスタ関連
+//////////////////////////////
+
+void op_zero_reg(int reg){
+	//レジスタに0をセット
+
+	if(REG_RAX<=reg&&reg<=REG_RDI){
+		/*	rax～rdi
+			0100 1000 0011 0011 11 xxx xxx	*/
+		OpBuffer[obp++]=(char)0x48;
+		OpBuffer[obp++]=(char)0x33;
+		OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(reg));
+	}
+	if(REG_R8<=reg&&reg<=REG_R15){
+		/*	r8～r15
+			0100 1101 0011 0011 11 xxx xxx	*/
+		OpBuffer[obp++]=(char)0x4D;
+		OpBuffer[obp++]=(char)0x33;
+		OpBuffer[obp++]=(char)(0xC0| REGISTER_OPERAND(reg)<<3 | REGISTER_OPERAND(reg));
+	}
+}
+
+
+
+/////////////////////////////
+// 関数呼び出し
+/////////////////////////////
+
+void op_call(SUBINFO *psi){
+	OpBuffer[obp++]=(char)0xE8;
+	pobj_SubAddrSchedule->add(psi,1);
+	psi->bUse=1;
+	obp+=sizeof(long);
+}
Index: /BasicCompiler64/increment.cpp
===================================================================
--- /BasicCompiler64/increment.cpp	(revision 3)
+++ /BasicCompiler64/increment.cpp	(revision 3)
@@ -0,0 +1,164 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+void IncDec(int idCalc, char *lpszLeft, char *lpszRight){
+	int VarType;
+	LONG_PTR lpVarIndex;
+	RELATIVE_VAR VarRelativeVar;
+
+
+	///////////////////////////
+	// 変数アドレスを取得
+	///////////////////////////
+
+	if(!GetVarOffset(
+		1,
+		lpszLeft,
+		&VarType,
+		&VarRelativeVar,
+		&lpVarIndex)) return;
+
+	//変数オフセットを一時退避
+	if(IsUse_r11(&VarRelativeVar)){
+		//mov qword ptr[rsp+offset],r11     ※スタックフレームを利用
+		pobj_sf->push(REG_R11);
+	}
+
+
+	///////////////////////////////////
+	// レジスタへ変数の内容をコピー
+	///////////////////////////////////
+
+	int reg;
+	if(VarType==DEF_DOUBLE){
+		reg=REG_XMM0;
+		SetXmmReg_DoubleVariable(&VarRelativeVar,reg);
+	}
+	else if(VarType==DEF_SINGLE){
+		reg=REG_XMM0;
+		SetXmmReg_SingleVariable(&VarRelativeVar,reg);
+	}
+	else{
+		reg=REG_RAX;
+		SetReg_WholeVariable(VarType,&VarRelativeVar,reg);
+	}
+
+
+	if(IsWholeNumberType(VarType)&&lstrcmp(lpszRight,"1")==0&&
+		(idCalc==CALC_ADDITION||idCalc==CALC_SUBTRACTION)){
+			if(idCalc==CALC_ADDITION){
+				//インクリメント
+				op_inc(REG_RAX);
+			}
+			else if(idCalc==CALC_SUBTRACTION){
+				//デクリメント
+				op_dec(REG_RAX);
+			}
+	}
+	else{
+		//結果を格納しているレジスタをブロッキング
+		pobj_BlockReg->lock(reg);
+
+		//右辺を計算
+		int CalcType;
+		LONG_PTR lpCalcIndex;
+		if(reg==REG_RAX) reg=REG_RCX;
+		else reg=REG_RAX;
+		CalcType=NumOpe(&reg,lpszRight,VarType,lpVarIndex,&lpCalcIndex);
+
+		//レジスタのブロッキングを解除
+		pobj_BlockReg->clear();
+
+
+		if(IsPtrType(VarType)&&IsWholeNumberType(CalcType)&&(!IsPtrType(CalcType))){
+			//左辺がポインタ型、右辺が整数型の場合は、エラーをださないようにする
+			CalcType=VarType;
+			lpCalcIndex=lpVarIndex;
+		}
+
+
+		/////////////////////////////////
+		// 右辺、左辺の型チェックを行う
+		/////////////////////////////////
+
+		CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
+
+
+		//レジスタ管理オブジェクトを生成
+		pobj_reg=new CRegister(REG_RAX);
+
+		//左辺用レジスタ
+		if(IsRealNumberType(VarType))
+			pobj_reg->LockXmmReg();
+		else
+			pobj_reg->LockReg();
+
+		//右辺値レジスタ
+		if(VarType==DEF_DOUBLE)
+			ChangeTypeToXmm_Double(CalcType,
+				pobj_reg->LockXmmReg(),
+				pobj_reg->GetNextReg());
+		else if(VarType==DEF_SINGLE)
+			ChangeTypeToXmm_Single(CalcType,
+				pobj_reg->LockXmmReg(),
+				pobj_reg->GetNextReg());
+		else
+			ChangeTypeToWhole(CalcType,VarType,
+				pobj_reg->LockReg(),
+				pobj_reg->GetNextXmmReg());
+
+		int type[255],sp;
+		LONG_PTR index_stack[255];
+		type[0]=VarType;
+		type[1]=VarType;
+		index_stack[0]=lpVarIndex;
+		index_stack[1]=lpVarIndex;
+		sp=2;
+
+		switch(idCalc){
+			case CALC_XOR:
+			case CALC_OR:
+			case CALC_AND:
+				CalcTwoTerm_Logical(idCalc,type,index_stack,&sp);
+				break;
+			case CALC_SHL:
+			case CALC_SHR:
+				Calc_Shift(idCalc,type,&sp);
+				break;
+			case CALC_ADDITION:
+			case CALC_SUBTRACTION:
+			case CALC_PRODUCT:
+				CalcTwoTerm_Arithmetic(idCalc,type,index_stack,&sp);
+				break;
+			case CALC_MOD:
+				Calc_Mod(type,index_stack,&sp);
+				break;
+			case CALC_QUOTIENT:
+				Calc_Divide(type,&sp,VarType);
+				break;
+			case CALC_INTQUOTIENT:
+				Calc_IntDivide(type,index_stack,&sp);
+				break;
+			case CALC_POWER:
+				Calc_Power(type,&sp);
+				break;
+		}
+
+		//レジスタ管理オブジェクトを解放
+		delete pobj_reg;
+		pobj_reg=0;
+	}
+
+
+	/////////////////////////////////////////////////
+	// rax（実数はxmm0）の内容を変数にコピー
+	/////////////////////////////////////////////////
+
+	//変数オフセットを復元
+	if(IsUse_r11(&VarRelativeVar)){
+		//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
+		pobj_sf->pop(REG_R11);
+	}
+
+	SetVariableFromRax(VarType,VarType,&VarRelativeVar);
+}
Index: /BasicCompiler64/manifest.xml
===================================================================
--- /BasicCompiler64/manifest.xml	(revision 3)
+++ /BasicCompiler64/manifest.xml	(revision 3)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assemblyIdentity
+version="1.0.0.0"
+processorArchitecture="amd64"
+name="BasicCompiler64.exe"
+type="win32"
+/>
+<description>Description</description>
+<dependency>
+<dependentAssembly>
+<assemblyIdentity
+type="win32"
+name="Microsoft.Windows.Common-Controls"
+version="6.0.0.0"
+processorArchitecture="amd64"
+publicKeyToken="6595b64144ccf1df"
+language="*"
+/>
+</dependentAssembly>
+</dependency>
+</assembly>
Index: /BasicCompiler64/resource.h
===================================================================
--- /BasicCompiler64/resource.h	(revision 3)
+++ /BasicCompiler64/resource.h	(revision 3)
@@ -0,0 +1,56 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by BasicCompiler.rc
+//
+#define IDD_MAIN                        101
+#define IDD_VARLIST                     103
+#define IDI_MAIN                        108
+#define IDI_VARSTRUCT                   109
+#define IDI_VARDATA                     110
+#define IDI_VARSTR                      111
+#define IDI_VARARRAY                    112
+#define IDI_VARPTRSTRUCT                113
+#define IDD_CLIPMAIN                    114
+#define IDD_DEBUGGER                    115
+#define IDR_DEBUGGERTOOLBAR             117
+#define IDD_DEBUGGER_TOOLBARBASE        120
+#define IDR_DEBUGGER_VARLIST_MENU       122
+#define IDR_DEBUGGERTOOLBAR_DISABLED    125
+#define IDC_EXEPATH                     1000
+#define IDC_PROGRESS                    1001
+#define IDC_ERRORLIST                   1002
+#define IDC_MESSAGE                     1003
+#define IDC_DEBUGLIST                   1005
+#define IDC_SHOWERROR                   1006
+#define IDC_SHOWDEBUG                   1007
+#define IDC_THREADCOMBO                 1014
+#define IDC_VARTREE                     1015
+#define IDC_GLOBAL                      1016
+#define IDC_LOCAL                       1017
+#define IDC_PROCCOMBO                   1018
+#define IDC_HIDESYSVAR                  1019
+#define IDC_STEPIN                      1021
+#define IDC_STEPOVER                    1022
+#define IDC_ESP                         1023
+#define IDC_DUMMYCANCEL                 1024
+#define IDC_TAB1                        1025
+#define IDC_VARPOS                      1029
+#define IDC_WATCHLIST                   1033
+#define IDC_STATIC_VERSION              1034
+#define IDC_DEBUG_START                 40003
+#define IDC_DEBUG_STEPOVER              40004
+#define IDC_DEBUG_STEPIN                40005
+#define IDM_SHOW_DEFAULTSYSTEM_VAR      40007
+#define IDM_SHOW_RAD_VAR                40008
+#define IDM_SHOW_GUID_VAR               40009
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        126
+#define _APS_NEXT_COMMAND_VALUE         40010
+#define _APS_NEXT_CONTROL_VALUE         1035
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
Index: /BasicCompiler64/resource_back.h
===================================================================
--- /BasicCompiler64/resource_back.h	(revision 3)
+++ /BasicCompiler64/resource_back.h	(revision 3)
@@ -0,0 +1,55 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by BasicCompiler.rc
+//
+#define IDD_MAIN                        101
+#define IDD_VARLIST                     103
+#define IDI_MAIN                        108
+#define IDI_VARSTRUCT                   109
+#define IDI_VARDATA                     110
+#define IDI_VARSTR                      111
+#define IDI_VARARRAY                    112
+#define IDI_VARPTRSTRUCT                113
+#define IDD_CLIPMAIN                    114
+#define IDD_DEBUGGER                    115
+#define IDR_DEBUGGERTOOLBAR             117
+#define IDD_DEBUGGER_TOOLBARBASE        120
+#define IDR_DEBUGGER_VARLIST_MENU       122
+#define IDC_EXEPATH                     1000
+#define IDC_PROGRESS                    1001
+#define IDC_ERRORLIST                   1002
+#define IDC_MESSAGE                     1003
+#define IDC_DEBUGLIST                   1005
+#define IDC_SHOWERROR                   1006
+#define IDC_SHOWDEBUG                   1007
+#define IDC_THREADCOMBO                 1014
+#define IDC_VARTREE                     1015
+#define IDC_GLOBAL                      1016
+#define IDC_LOCAL                       1017
+#define IDC_PROCCOMBO                   1018
+#define IDC_HIDESYSVAR                  1019
+#define IDC_STEPIN                      1021
+#define IDC_STEPOVER                    1022
+#define IDC_ESP                         1023
+#define IDC_DUMMYCANCEL                 1024
+#define IDC_TAB1                        1025
+#define IDC_VARPOS                      1029
+#define IDC_WATCHLIST                   1033
+#define IDC_STATIC_VERSION              1034
+#define IDC_DEBUG_START                 40003
+#define IDC_DEBUG_STEPOVER              40004
+#define IDC_DEBUG_STEPIN                40005
+#define IDM_SHOW_DEFAULTSYSTEM_VAR      40007
+#define IDM_SHOW_RAD_VAR                40008
+#define IDM_SHOW_GUID_VAR               40009
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        125
+#define _APS_NEXT_COMMAND_VALUE         40010
+#define _APS_NEXT_CONTROL_VALUE         1035
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
Index: /BasicCompiler64/stack_frame.cpp
===================================================================
--- /BasicCompiler64/stack_frame.cpp	(revision 3)
+++ /BasicCompiler64/stack_frame.cpp	(revision 3)
@@ -0,0 +1,138 @@
+#include "../BasicCompiler_Common/common.h"
+#include "Opcode.h"
+
+
+/////////////////////////
+// スタックフレーム管理
+/////////////////////////
+
+CStackFrame::CStackFrame(){
+	lowest_sp=0;
+	now_sp=0;
+	local_parm_size=0;
+	max_parm_size=0;
+}
+CStackFrame::~CStackFrame(){
+	//オブジェクト破棄時に不整合がないかをチェック（バグ回避）
+	error_check();
+}
+void CStackFrame::SetLocalParmSize(int size){
+	local_parm_size=size;
+}
+int CStackFrame::GetFrameSize(){
+	int answer_sp;
+
+	answer_sp=lowest_sp-max_parm_size;
+
+	if((local_parm_size%0x10)==0){
+		if((answer_sp%0x10)==0){
+			//関数のエントリポイントで128ビット境界ラインに合わせるため
+			return -(answer_sp-0x08);
+		}
+		return -(answer_sp-0x10);
+	}
+
+	if((answer_sp%0x10)==0){
+		//関数のエントリポイントで128ビット境界ラインに合わせるため
+		return -(answer_sp-0x10);
+	}
+	return -(answer_sp-0x08);
+}
+void CStackFrame::push(int reg){
+	now_sp-=sizeof(_int64);
+	if(lowest_sp>now_sp) lowest_sp=now_sp;
+
+	if(reg==REG_NON) return;
+
+	//mov qword ptr[rsp+offset],reg
+	op_mov_MR(sizeof(_int64),reg,REG_RSP,now_sp,MOD_BASE_DISP32);
+
+	//スケジュールをセット
+	obp-=sizeof(long);
+	add();
+	obp+=sizeof(long);
+}
+void CStackFrame::push(int xmm_reg,int var_size){
+	now_sp-=sizeof(_int64);
+	if(lowest_sp>now_sp) lowest_sp=now_sp;
+
+	if(var_size==sizeof(double)){
+		//movlpd qword ptr[rsp+offset],xmm_reg
+		op_movlpd_MR(xmm_reg,REG_RSP,now_sp,MOD_BASE_DISP32);
+	}
+	if(var_size==sizeof(float)){
+		//movss dword ptr[rsp+offset],xmm_reg
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x11;
+		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(xmm_reg)<<3 );
+		OpBuffer[obp++]=(char)0x24;
+		*((long *)(OpBuffer+obp))=now_sp;
+		obp+=sizeof(long);
+	}
+
+	//スケジュールをセット
+	obp-=sizeof(long);
+	add();
+	obp+=sizeof(long);
+}
+void CStackFrame::ref(int reg){
+	//mov reg,qword ptr[rsp+offset]     ※スタックフレームを利用
+	op_mov_RM(sizeof(_int64),reg,REG_RSP,now_sp,MOD_BASE_DISP32);
+
+	//スケジュールをセット
+	obp-=sizeof(long);
+	add();
+	obp+=sizeof(long);
+}
+void CStackFrame::ref(int xmm_reg,int var_size){
+	if(var_size==sizeof(double)){
+		//movlpd xmm_reg,qword ptr[rsp+offset]
+		op_movlpd_RM(xmm_reg,REG_RSP,now_sp,MOD_BASE_DISP32);
+	}
+	if(var_size==sizeof(float)){
+		//movss xmm_reg,dword ptr[rsp+offset]
+		OpBuffer[obp++]=(char)0xF3;
+		OpBuffer[obp++]=(char)0x0F;
+		OpBuffer[obp++]=(char)0x10;
+		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(xmm_reg)<<3 );
+		OpBuffer[obp++]=(char)0x24;
+		*((long *)(OpBuffer+obp))=now_sp;
+		obp+=sizeof(long);
+	}
+
+	//スケジュールをセット
+	obp-=sizeof(long);
+	add();
+	obp+=sizeof(long);
+}
+void CStackFrame::pop(int reg){
+	if(reg!=REG_NON) ref(reg);
+
+	now_sp+=sizeof(_int64);
+}
+void CStackFrame::pop(int xmm_reg,int var_size){
+	ref(xmm_reg,var_size);
+
+	now_sp+=sizeof(_int64);
+}
+void CStackFrame::parameter_allocate(int size){
+	if(max_parm_size<size) max_parm_size=size;
+}
+void CStackFrame::RunningSchedule(void){
+	int i;
+	int all_size;
+	all_size=GetFrameSize();
+	for(i=0;i<num;i++){
+		*((long *)(OpBuffer+pObpValues[i]))+=all_size;
+	}
+}
+
+void CStackFrame::error_check(){
+	if(now_sp){
+		SetError(300,NULL,cp);
+	}
+}
+
+//スタックフレーム管理用オブジェクトポインタ
+CStackFrame *pobj_sf;
Index: /BasicCompiler64/varlist.cpp
===================================================================
--- /BasicCompiler64/varlist.cpp	(revision 3)
+++ /BasicCompiler64/varlist.cpp	(revision 3)
@@ -0,0 +1,1323 @@
+#include "../BasicCompiler_Common/common.h"
+
+//デバッグ用
+#include "../BasicCompiler_Common/debug.h"
+
+//変数リストのツリーハンドル
+HWND hVarTree_Global,hVarTree_Local,hVarTree_This;
+
+int VarList_Array(HWND hVarTree,HTREEITEM hParent,LONG_PTR offset,int type,int *SubScripts,LONG_PTR lpIndex);
+void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset,CClass *pobj_c,BOOL bPtr);
+void VarList_Insert(HWND hVarTree,TV_INSERTSTRUCT *lptv,char *VarName,int type,LONG_PTR offset,LONG_PTR lpIndex){
+	extern HANDLE hDebugProcess;
+	int i2;
+	char temporary[255],temp2[255];
+	LONG_PTR pData;
+	SIZE_T stAccBytes;
+	double dbl;
+	float flt;
+	WORD wData;
+	BYTE byteData;
+	HTREEITEM hParent;
+	_int64 i64data;
+
+	if(type==DEF_OBJECT){
+		sprintf(lptv->item.pszText,"%s %s(&H%X)",VarName,STRING_OBJECT,(DWORD64)offset);
+		lptv->item.iImage=1;
+		lptv->item.iSelectedImage=1;
+		hParent=TreeView_InsertItem(hVarTree,lptv);
+
+		VarList_Member(hVarTree,hParent,offset,(CClass *)lpIndex,0);
+		return;
+	}
+	if(type==DEF_PTR_OBJECT){
+		i2=ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&stAccBytes);
+
+		sprintf(lptv->item.pszText,"%s %s(&H%X)",VarName,STRING_POINTEROFOBJECT,(DWORD64)pData);
+		lptv->item.iImage=4;
+		lptv->item.iSelectedImage=4;
+		hParent=TreeView_InsertItem(hVarTree,lptv);
+
+		if(i2) VarList_Member(hVarTree,hParent,pData,(CClass *)lpIndex,1);
+		return;
+	}
+	else{
+		if(type==DEF_PTR_BYTE){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&pData,sizeof(void *),&stAccBytes)){
+				for(i2=0;;i2++){
+					if(!ReadProcessMemory(hDebugProcess,(void *)(pData+i2),&temporary[i2],1,&stAccBytes)){
+						i2=-1;
+						break;
+					}
+					if(temporary[i2]=='\0') break;
+					if(i2==64){
+						lstrcpy(temporary+i2,"...");
+						break;
+					}
+				}
+				if(i2==-1) sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,(DWORD64)pData,(DWORD64)pData);
+				else sprintf(lptv->item.pszText,"%s %d(&H%X) \"%s\"",VarName,(DWORD64)pData,(DWORD64)pData,temporary);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_DOUBLE){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&dbl,sizeof(double),&stAccBytes)){
+				sprintf(lptv->item.pszText,"%s %.15g",VarName,dbl);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_SINGLE){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&flt,sizeof(float),&stAccBytes)){
+				sprintf(lptv->item.pszText,"%s %.6g",VarName,flt);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_INT64){
+			_int64 i64data;
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){
+				_i64toa(i64data,temporary,10);
+				_i64toa(i64data,temp2,16);
+				CharUpper(temp2);
+				sprintf(lptv->item.pszText,"%s %s(&H%s)",VarName,temporary,temp2);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_QWORD||IsPtrType(type)){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){
+				_ui64toa(i64data,temporary,10);
+				_ui64toa(i64data,temp2,16);
+				CharUpper(temp2);
+				sprintf(lptv->item.pszText,"%s %s(&H%s)",VarName,temporary,temp2);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_LONG){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){
+				sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,i64data,i64data);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_DWORD){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&i64data,sizeof(_int64),&stAccBytes)){
+				sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,i64data,i64data);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_INTEGER){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&stAccBytes)){
+				sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,(short)wData,(short)wData);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_WORD){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&stAccBytes)){
+				sprintf(lptv->item.pszText,"%s %u(&H%X)",VarName,wData,wData);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_CHAR){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){
+				temporary[0]=byteData;
+				temporary[1]=0;
+				sprintf(lptv->item.pszText,"%s %d(&H%X)'%s'",VarName,(char)byteData,byteData,temporary);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		else if(type==DEF_BYTE){
+			if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){
+				temporary[0]=byteData;
+				temporary[1]=0;
+				sprintf(lptv->item.pszText,"%s %d(&H%X)'%s'",VarName,byteData,byteData,temporary);
+			}
+			else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
+		}
+		lptv->item.iImage=2;
+		lptv->item.iSelectedImage=2;
+	}
+	TreeView_InsertItem(hVarTree,lptv);
+}
+void VarList_Member(HWND hVarTree,HTREEITEM hParent,LONG_PTR pTopOffset,CClass *pobj_c,BOOL bPtr){
+	int i,i2;
+	char VarData[VN_SIZE],VarName[VN_SIZE];
+	TV_INSERTSTRUCT tv;
+
+	memset(&tv,0,sizeof(TV_INSERTSTRUCT));
+	tv.hInsertAfter=TVI_LAST;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.hParent=hParent;
+	tv.item.pszText=VarData;
+
+	for(i=0;i<pobj_c->iMemberNum;i++){
+		if(bPtr){
+			lstrcpy(VarName,"->");
+			lstrcat(VarName,pobj_c->ppobj_Member[i]->name);
+		}
+		else{
+			lstrcpy(VarName,".");
+			lstrcat(VarName,pobj_c->ppobj_Member[i]->name);
+		}
+
+		LONG_PTR offset;
+		offset=GetSizeOfClassMember(pobj_c,pobj_c->ppobj_Member[i]->name,&i2);
+
+		if(pobj_c->ppobj_Member[i]->SubScripts[0]!=-1){
+			//構造体内の配列
+			sprintf(VarData,"%s %s(&H%X)",VarName,STRING_ARRAY,pTopOffset+offset);
+			tv.item.iImage=0;
+			tv.item.iSelectedImage=0;
+			hParent=TreeView_InsertItem(hVarTree,&tv);
+
+			i2=VarList_Array(hVarTree,hParent,
+				pTopOffset+offset,
+				pobj_c->ppobj_Member[i]->TypeInfo.type,
+				pobj_c->ppobj_Member[i]->SubScripts,
+				pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
+		}
+		else{
+			//メンバ変数
+			VarList_Insert(hVarTree,
+				&tv,
+				VarName,
+				pobj_c->ppobj_Member[i]->TypeInfo.type,
+				pTopOffset+offset,
+				pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
+		}
+	}
+}
+int VarList_Array(HWND hVarTree,HTREEITEM hParent,LONG_PTR offset,int type,int *SubScripts,LONG_PTR lpIndex){
+	int i,i2,i3,ElementNum,MemCounter,UseCount[255],TypeSize;
+	char temporary[VN_SIZE],temp2[DIGIT_SIZE];
+
+	TV_INSERTSTRUCT tv;
+	memset(&tv,0,sizeof(TV_INSERTSTRUCT));
+	tv.hInsertAfter=TVI_LAST;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.hParent=hParent;
+	tv.item.pszText=temporary;
+
+	TypeSize=GetTypeSize(type,lpIndex);
+
+	for(i=0;i<255;i++){
+		if(SubScripts[i]==-1) break;
+		UseCount[i]=0;
+	}
+	UseCount[i]=-2;
+	MemCounter=0;
+	while(1){
+		UseCount[i]++;
+		for(ElementNum=0;SubScripts[i-ElementNum]<UseCount[i-ElementNum];ElementNum++){
+			UseCount[i-ElementNum]=0;
+			if(i-ElementNum-1<0) return MemCounter;
+			UseCount[i-ElementNum-1]++;
+		}
+
+		if(MemCounter<50){
+			temporary[0]='[';
+			temporary[1]=0;
+			for(i2=0;i2<i;i2++){
+				sprintf(temp2,"%d",UseCount[i2]);
+				lstrcat(temporary,temp2);
+				lstrcat(temporary,",");
+			}
+			i3=lstrlen(temporary);
+			temporary[i3-1]=']';
+			temporary[i3]=0;
+
+			VarList_Insert(hVarTree,&tv,temporary,type,
+				offset+MemCounter*TypeSize,
+				lpIndex);
+		}
+
+		MemCounter++;
+		if(MemCounter==50){
+			lstrcpy(tv.item.pszText,"...");
+			TreeView_InsertItem(hVarTree,&tv);
+		}
+	}
+	return 0;
+}
+void RefreshGlobalVar(void){
+	extern DWORD ImageBase;
+	int i;
+	char temporary[VN_SIZE];
+	TV_INSERTSTRUCT tv;
+	HTREEITEM hParent;
+
+	TreeView_DeleteAllItems(hVarTree_Global);
+
+	memset(&tv,0,sizeof(TV_INSERTSTRUCT));
+	tv.hInsertAfter=TVI_LAST;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.hParent=TVI_ROOT;
+	tv.item.pszText=temporary;
+
+	extern HANDLE hDebugProcess;
+	extern int MemPos_RWSection;
+	extern int MaxGlobalVarNum;
+	extern VARIABLE *GlobalVar;
+
+	for(i=0;i<MaxGlobalVarNum;i++){
+		VARIABLE *pVar=&GlobalVar[i];
+
+		//スコープ外の場合は無視
+		if(pVar->ScopeLevel!=0){
+			if(rva_to_real(pVar->ScopeStartAddress) <= pobj_dti->lplpObp[0]  &&
+				pobj_dti->lplpObp[0] < rva_to_real(pVar->ScopeEndAddress)){
+				//範囲内
+			}
+			else{
+				//範囲外
+				continue;
+			}
+		}
+
+
+		if(!pobj_nv->bShow_DefaultSystem_Var){
+			if(memcmp(pVar->name,"_System_",8)==0||
+				memcmp(pVar->name,"_DebugSys_",10)==0||
+				memcmp(pVar->name,"_PromptSys_",11)==0) continue;
+		}
+		if(!pobj_nv->bShow_Rad_Var){
+			if(memcmp(pVar->name,"_RadSys_",8)==0) continue;
+		}
+		if(!pobj_nv->bShow_GUID_Var){
+			if(memcmp(pVar->name,"GUID_",5)==0||
+				memcmp(pVar->name,"IID_",4)==0||
+				memcmp(pVar->name,"CLSID_",6)==0) continue;
+		}
+
+		//静的メンバ
+		if(strstr(pVar->name,".")) continue;
+
+		if(pVar->bArray){
+			sprintf(temporary,"%s %s(&H%X)",
+				pVar->name,
+				STRING_ARRAY,
+				ImageBase+MemPos_RWSection+pVar->offset);
+			tv.item.iImage=0;
+			tv.item.iSelectedImage=0;
+			hParent=TreeView_InsertItem(hVarTree_Global,&tv);
+
+			VarList_Array(hVarTree_Global,hParent,
+				(LONG_PTR)(ImageBase+MemPos_RWSection+pVar->offset),
+				pVar->type,
+				pVar->SubScripts,
+				pVar->u.index);
+		}
+		else{
+			VarList_Insert(hVarTree_Global,
+				&tv,
+				pVar->name,
+				pVar->type,
+				(LONG_PTR)(ImageBase+MemPos_RWSection+pVar->offset),
+				pVar->u.index);
+		}
+	}
+}
+void RefreshLocalVar(void){
+	int i,i2,i3,sw;
+	char temporary[VN_SIZE];
+	TV_INSERTSTRUCT tv;
+	HTREEITEM hParent;
+	LONG_PTR offset;
+	SIZE_T stAccBytes;
+	LONG_PTR lpData;
+
+	TreeView_DeleteAllItems(hVarTree_Local);
+
+	memset(&tv,0,sizeof(TV_INSERTSTRUCT));
+	tv.hInsertAfter=TVI_LAST;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.hParent=TVI_ROOT;
+	tv.item.pszText=temporary;
+
+	extern HANDLE hDebugProcess;
+	extern HWND hDebugWnd;
+	i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+	i2=pobj_dti->iProcLevel-i2;
+
+	if(pobj_dti->lplpSpBase[i2]==0) return;
+
+	extern SUBINFO **ppSubHash;
+	SUBINFO *psi;
+	for(i3=0,sw=0;i3<MAX_HASH;i3++){
+		psi=ppSubHash[i3];
+		while(psi){
+			if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
+				pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
+				sw=1;
+				break;
+			}
+
+			psi=psi->pNextData;
+		}
+		if(sw) break;
+	}
+	if(!psi) return;
+
+	for(i=0;i<psi->VarNum;i++){
+		VARIABLE *pVar=&psi->pVar[i];
+
+		//スコープ外の場合は無視
+		if(pVar->ScopeLevel!=0){
+			if(rva_to_real(pVar->ScopeStartAddress) <= pobj_dti->lplpObp[i2]  &&
+				pobj_dti->lplpObp[i2] < rva_to_real(pVar->ScopeEndAddress)){
+				//範囲内
+			}
+			else{
+				//範囲外
+				continue;
+			}
+		}
+
+		if(pVar->bArray){
+			sprintf(temporary,"%s %s(&H%X)",
+				pVar->name,
+				STRING_ARRAY,
+				pobj_dti->lplpSpBase[i2]+pVar->offset);
+			tv.item.iImage=0;
+			tv.item.iSelectedImage=0;
+			hParent=TreeView_InsertItem(hVarTree_Local,&tv);
+
+			VarList_Array(hVarTree_Local,hParent,
+				pobj_dti->lplpSpBase[i2]+pVar->offset,
+				pVar->type,
+				pVar->SubScripts,
+				pVar->u.index);
+		}
+		else{
+			offset=pobj_dti->lplpSpBase[i2]+pVar->offset;
+			if(pVar->fRef){
+				ReadProcessMemory(hDebugProcess,(void *)offset,&lpData,sizeof(LONG_PTR),&stAccBytes);
+				offset=lpData;
+			}
+			VarList_Insert(hVarTree_Local,&tv,
+				pVar->name,
+				pVar->type,
+				offset,
+				pVar->u.index);
+		}
+	}
+
+
+
+	/////////////////////////////
+	// Thisオブジェクトのリスト
+	/////////////////////////////
+
+	TreeView_DeleteAllItems(hVarTree_This);
+	if(!psi->pobj_ParentClass) return;
+
+	//Thisポインタを取得
+	LONG_PTR pThis;
+	for(i=0;i<psi->VarNum;i++){
+		if(lstrcmp(psi->pVar[i].name,"_System_LocalThis")==0) break;
+	}
+	if(i==psi->VarNum) return;
+	lpData=pobj_dti->lplpSpBase[i2]+psi->pVar[i].offset;
+	ReadProcessMemory(hDebugProcess,(void *)lpData,&pThis,sizeof(LONG_PTR),&stAccBytes);
+
+	for(i=0;i<psi->pobj_ParentClass->iMemberNum;i++){
+		offset=GetSizeOfClassMember(psi->pobj_ParentClass,psi->pobj_ParentClass->ppobj_Member[i]->name,&i2);
+
+		if(psi->pobj_ParentClass->ppobj_Member[i]->SubScripts[0]!=-1){
+			//配列
+			sprintf(temporary,"%s %s(&H%X)",
+				psi->pobj_ParentClass->ppobj_Member[i]->name,
+				STRING_ARRAY,
+				(DWORD64)offset);
+			tv.item.iImage=0;
+			tv.item.iSelectedImage=0;
+			hParent=TreeView_InsertItem(hVarTree_This,&tv);
+
+			VarList_Array(hVarTree_This,hParent,
+				pThis+offset,
+				psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.type,
+				psi->pobj_ParentClass->ppobj_Member[i]->SubScripts,
+				psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.u.lpIndex);
+		}
+		else{
+			VarList_Insert(hVarTree_This,&tv,
+				psi->pobj_ParentClass->ppobj_Member[i]->name,
+				psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.type,
+				pThis+offset,
+				psi->pobj_ParentClass->ppobj_Member[i]->TypeInfo.u.lpIndex);
+		}
+	}
+}
+void RefreshGlobalVar_with_WindowLock(void){
+	extern HWND hDebugWnd;
+
+	//処理時間を短くするため、一時的に非表示にする
+	LockWindowUpdate(hDebugWnd);
+	ShowWindow(GetParent(hVarTree_Global),SW_HIDE);
+
+	//リフレッシュ
+	RefreshGlobalVar();
+
+	LockWindowUpdate(NULL);
+	ShowWindow(GetParent(hVarTree_Global),SW_SHOW);
+}
+void RefreshLocalVar_with_WindowLock(void){
+	extern HWND hDebugWnd;
+
+	//処理時間を短くするため、一時的に非表示にする
+	LockWindowUpdate(hDebugWnd);
+	ShowWindow(GetParent(hVarTree_Local),SW_HIDE);
+
+	//リフレッシュ
+	RefreshLocalVar();
+
+	LockWindowUpdate(NULL);
+	ShowWindow(GetParent(hVarTree_Local),SW_SHOW);
+}
+
+void SetCalcToWatchList(HWND hListView,int iItem,char *buffer){
+	int i;
+	char temporary[255],temp2[255];
+
+	//エスケープシーケンスをセット
+	SetEscapeSequenceFormat(buffer);
+
+	KillStringSpaces(buffer);
+
+	//カッコを相互チェック
+	if(!CheckParenthesis2(buffer)){
+		ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
+		return;
+	}
+
+	double dbl;
+	_int64 i64data;
+	i=StaticCalculation(true, buffer,0,&i64data,0,1);
+	if(IsRealNumberType(i)){
+		memcpy(&dbl,&i64data,sizeof(double));
+	}
+
+	if(i==0){
+		ListView_SetItemText(hListView,iItem,1,"式の解析に失敗");
+	}
+	else if(i==-1){
+		ListView_SetItemText(hListView,iItem,1,"アクセスできません");
+	}
+	else{
+		if(IsRealNumberType(i))
+			sprintf(temporary,"%.15g (&H%08X)",dbl,(int)dbl);
+		else if(Is64Type(i)){
+			_i64toa(i64data,temporary,10);
+			_i64toa(i64data,temp2,16);
+			CharUpper(temp2);
+			sprintf(temporary+lstrlen(temporary)," (&H%s)",temp2);
+		}
+		else sprintf(temporary,"%d (&H%08X)",(long)i64data,(long)i64data);
+
+		ListView_SetItemText(hListView,iItem,1,temporary);
+	}
+}
+void RefreshWatchList(void){
+	extern HWND hDebugWnd;
+	HWND hListView;
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	hListView=GetDlgItem(hDebugWnd,IDC_WATCHLIST);
+	i2=ListView_GetItemCount(hListView);
+	for(i=0;i<i2-1;i++){
+		ListView_GetItemText(hListView,i,0,temporary,VN_SIZE);
+
+		//演算結果を表示
+		SetCalcToWatchList(hListView,i,temporary);
+	}
+}
+
+BOOL SetDebugProcCombo(HWND hProcCombo){
+	int i2,i3;
+	char temporary[255];
+
+	extern DWORD ImageBase;
+	extern int MemPos_CodeSection;
+
+	//行番号情報
+	extern int MaxLineInfoNum;
+	extern LINEINFO *pLineInfo;
+	for(i3=0;i3<(int)pobj_dti->iProcLevel+1;i3++){
+		for(i2=0;i2<MaxLineInfoNum-1;i2++){
+			if((DWORD64)(pLineInfo[i2].TopObp+ImageBase+MemPos_CodeSection)<=pobj_dti->lplpObp[i3]&&
+				pobj_dti->lplpObp[i3]<=(DWORD64)(pLineInfo[i2+1].TopObp+ImageBase+MemPos_CodeSection)) break;
+		}
+		if(i2==MaxLineInfoNum) pobj_dti->lpdwCp[i3]=-1;
+		else pobj_dti->lpdwCp[i3]=pLineInfo[i2].TopCp;
+	}
+	for(i3=0;i3<(int)pobj_dti->iProcLevel+1;i3++){
+		if(pobj_dti->lpdwCp[i3]==-1){
+			pobj_dti->iProcLevel--;
+			for(i2=i3;i2<(int)pobj_dti->iProcLevel+1;i2++){
+				pobj_dti->lplpObp[i2]=pobj_dti->lplpObp[i2+1];
+				pobj_dti->lplpSpBase[i2]=pobj_dti->lplpSpBase[i2+1];
+				pobj_dti->lpdwCp[i2]=pobj_dti->lpdwCp[i2+1];
+			}
+			i3--;
+			continue;
+		}
+	}
+
+	if(!GetLineNum(pobj_dti->lpdwCp[pobj_dti->iProcLevel],&i2,temporary)){
+		extern HWND hMainDlg;
+		//"デバッグ情報の取得に失敗"
+		MessageBox(hMainDlg,STRING_DEBUG_FAILED,"ActiveBasic error",MB_OK);
+		return 0;
+	}
+	ShowErrorLine(i2,temporary);
+
+	//プロシージャ コンボボックス
+	extern SUBINFO **ppSubHash;
+	SUBINFO *psi;
+	int sw;
+	SendMessage(hProcCombo,CB_RESETCONTENT,0,0);
+	for(i2=pobj_dti->iProcLevel;i2>=0;i2--){
+		for(i3=0,sw=0;i3<MAX_HASH;i3++){
+			psi=ppSubHash[i3];
+			while(psi){
+				if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
+					pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
+					lstrcpy(temporary,psi->name);
+					sw=1;
+					break;
+				}
+				psi=psi->pNextData;
+			}
+			if(sw) break;
+		}
+		if(!psi){
+			if(i2==0){
+				lstrcpy(temporary,"Global");
+				pobj_dti->lplpSpBase[i2]=0;
+			}
+			else lstrcpy(temporary,"error");
+		}
+		SendMessage(hProcCombo,CB_ADDSTRING,0,(LPARAM)temporary);
+	}
+	SendMessage(hProcCombo,CB_SETCURSEL,0,0);
+
+	return pobj_dti->iProcLevel;
+}
+
+//IDC_THREADCOMBOプロシージャ
+LRESULT CALLBACK ThreadComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern WNDPROC OldThreadComboProc;
+	int i2;
+	DWORD dwThreadID;
+	char temporary[255];
+
+	switch(message){
+		case WM_COMMAND:
+			if(HIWORD(wParam)==CBN_SELCHANGE){
+				SendMessage(hwnd,CB_GETLBTEXT,SendMessage(hwnd,CB_GETCURSEL,0,0),(LPARAM)temporary);
+				sscanf(temporary+2,"%X",&dwThreadID);
+
+				extern DWORD _DebugSys_dwThreadID[256];
+				i2=0;
+				while(_DebugSys_dwThreadID[i2]!=dwThreadID) i2++;
+
+				//次回のステップ実行対象を指定
+				extern int NextStepThreadNum;
+				NextStepThreadNum=i2;
+
+				//スレッド情報をリフレッシュ
+				pobj_dti->Reflesh(i2);
+
+				SetDebugProcCombo(GetDlgItem(GetParent(hwnd),IDC_PROCCOMBO));
+
+				SendDlgItemMessage(GetParent(hwnd),IDC_PROCCOMBO,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
+			}
+			break;
+	}
+	return CallWindowProc(OldThreadComboProc,hwnd,message,wParam,lParam);
+}
+//IDC_PROCCOMBOプロシージャ
+LRESULT CALLBACK ProcComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern WNDPROC OldProcComboProc;
+	int i2,i3;
+	char temporary[MAX_PATH];
+
+	switch(message){
+		case WM_COMMAND:
+			if(HIWORD(wParam)==CBN_SELCHANGE){
+				i2=(int)SendMessage(hwnd,CB_GETCURSEL,0,0);
+				GetLineNum(pobj_dti->lpdwCp[pobj_dti->iProcLevel-i2],&i3,temporary);
+				ShowErrorLine(i3,temporary);
+
+				RefreshLocalVar_with_WindowLock();
+			}
+			break;
+	}
+	return CallWindowProc(OldProcComboProc,hwnd,message,wParam,lParam);
+}
+void InitVarList(DWORD dwThreadId){
+	extern HWND hDebugWnd;
+	int i2,i3,i5;
+	char temporary[255];
+
+
+	//スレッド
+	SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_RESETCONTENT,0,0);
+	extern DWORD _DebugSys_dwThreadID[256];
+	for(i2=0;i2<256;i2++){
+		if(_DebugSys_dwThreadID[i2]){
+			sprintf(temporary,"&H%08X",_DebugSys_dwThreadID[i2]);
+			SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_ADDSTRING,0,(LPARAM)temporary);
+			if(_DebugSys_dwThreadID[i2]==dwThreadId){
+				extern int NextStepThreadNum;
+				NextStepThreadNum=i2;
+			}
+		}
+	}
+	sprintf(temporary,"&H%08X",dwThreadId);
+	i5=(int)SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_FINDSTRING,0,(LPARAM)temporary);
+	SendDlgItemMessage(hDebugWnd,IDC_THREADCOMBO,CB_SETCURSEL,i5,0);
+
+	i2=SetDebugProcCombo(GetDlgItem(hDebugWnd,IDC_PROCCOMBO));
+
+
+	///////////////////////////////////////////////
+	// 実行中のプロシージャのローカル変数をセット
+	///////////////////////////////////////////////
+
+	extern VARIABLE *LocalVar;
+	extern int MaxLocalVarNum;
+	int sw;
+
+	MaxLocalVarNum=0;
+
+	i2=(int)SendDlgItemMessage(hDebugWnd,IDC_PROCCOMBO,CB_GETCURSEL,0,0);
+	i2=pobj_dti->iProcLevel-i2;
+
+	if(pobj_dti->lplpSpBase[i2]){
+		extern SUBINFO **ppSubHash;
+		SUBINFO *psi;
+		for(i3=0,sw=0;i3<MAX_HASH;i3++){
+			psi=ppSubHash[i3];
+			while(psi){
+				if(rva_to_real(psi->CompileAddress) <= pobj_dti->lplpObp[i2]  &&
+					pobj_dti->lplpObp[i2] < rva_to_real(psi->EndOpAddr)){
+					sw=1;
+					break;
+				}
+
+				psi=psi->pNextData;
+			}
+			if(sw) break;
+		}
+
+
+		if(psi){
+			LocalVar=psi->pVar;
+			MaxLocalVarNum=psi->VarNum;
+
+			pobj_CompilingClass=psi->pobj_ParentClass;
+		}
+	}
+
+
+	////////////////////////
+	// 変数リストを再表示
+	////////////////////////
+
+	//処理時間を短くするため、一時的に非表示にする
+	LockWindowUpdate(hDebugWnd);
+	ShowWindow(GetParent(hVarTree_Global),SW_HIDE);
+	ShowWindow(GetDlgItem(hDebugWnd,IDC_WATCHLIST),SW_HIDE);
+
+	//リフレッシュ
+	RefreshLocalVar();
+	RefreshGlobalVar();
+	RefreshWatchList();
+
+	LockWindowUpdate(NULL);
+	ShowWindow(GetParent(hVarTree_Global),SW_SHOW);
+	ShowWindow(GetDlgItem(hDebugWnd,IDC_WATCHLIST),SW_SHOW);
+}
+
+
+
+
+//////////////////////////////////////
+// エディタに埋め込み表示のデバッガ
+//////////////////////////////////////
+
+BOOL CALLBACK DebuggerButtonsProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HINSTANCE hInst;
+	extern DWORD dwStepRun;
+
+	//デバッガ用ツールバー
+#define BMPNUM_DEBUGGERTOOLBAR 3
+#define BTNNUM_DEBUGGERTOOLBAR 4
+	TBBUTTON DebuggerToolBar[]={
+		{0,IDC_DEBUG_START,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
+		{0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0},
+		{1,IDC_DEBUG_STEPOVER,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
+		{2,IDC_DEBUG_STEPIN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
+	};
+	TOOLTIPTEXT *pTipText;
+
+	static HIMAGELIST hImageList,hImageList_Disabled;
+
+	switch(message){
+		case WM_INITDIALOG:
+			//ツールバーを生成
+			extern HWND hDebuggerToolbar;
+			hDebuggerToolbar=CreateToolbarEx(hwnd,WS_CHILD|WS_VISIBLE|CCS_NODIVIDER|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS|WS_CLIPSIBLINGS,
+				NULL,
+				0,0,0,
+				DebuggerToolBar,
+				BTNNUM_DEBUGGERTOOLBAR,	/*アイテムの個数*/
+				0,0,16,15,sizeof(TBBUTTON));
+
+			hImageList = ImageList_LoadImage(hInst, MAKEINTRESOURCE(IDR_DEBUGGERTOOLBAR),
+				16, 0, RGB(192,192,192),IMAGE_BITMAP, LR_CREATEDIBSECTION);
+			SendMessage(hDebuggerToolbar, TB_SETIMAGELIST, 0, (LPARAM)hImageList);
+			hImageList_Disabled = ImageList_LoadImage(hInst, MAKEINTRESOURCE(IDR_DEBUGGERTOOLBAR_DISABLED),
+				16, 0, RGB(192,192,192),IMAGE_BITMAP, LR_CREATEDIBSECTION);
+			SendMessage(hDebuggerToolbar, TB_SETDISABLEDIMAGELIST, 0, (LPARAM)hImageList_Disabled);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_DEBUG_START:
+					DestroyWindow(GetParent(hwnd));
+					return 1;
+				case IDC_DEBUG_STEPIN:
+					dwStepRun=1;
+					return 1;
+				case IDC_DEBUG_STEPOVER:
+					dwStepRun=2;
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			pTipText=(TOOLTIPTEXT *)lParam;
+			if(pTipText->hdr.code==TTN_NEEDTEXT){
+				//ツールチップを表示
+				switch(pTipText->hdr.idFrom){
+					case IDC_DEBUG_START:
+						pTipText->lpszText="実行";
+						break;
+					case IDC_DEBUG_STEPOVER:
+						pTipText->lpszText="ステップ アウト";
+						break;
+					case IDC_DEBUG_STEPIN:
+						pTipText->lpszText="ステップ イン";
+						break;
+				}
+			}
+			break;
+		case WM_SIZE:
+			MoveWindow(hDebuggerToolbar,0,0,LOWORD(lParam),HIWORD(lParam),1);
+			return 1;
+
+		case WM_DESTROY:
+			ImageList_Destroy(hImageList);
+			ImageList_Destroy(hImageList_Disabled);
+			return 1;
+	}
+	return 0;
+}
+
+WNDPROC OldTabProc;
+LRESULT CALLBACK TabProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HINSTANCE hInst;
+
+	static HMENU hDummyMenu,hMenu=0;
+
+	switch(message){
+		case WM_CONTEXTMENU:
+			if(hMenu==0){
+				hDummyMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_DEBUGGER_VARLIST_MENU));
+				hMenu=GetSubMenu(hDummyMenu,0);
+			}
+
+			MENUITEMINFO mi;
+			mi.cbSize=sizeof(MENUITEMINFO);
+			mi.fMask=MIIM_STATE;
+			mi.fState=MFS_CHECKED;
+
+			if(pobj_nv->bShow_DefaultSystem_Var)
+				SetMenuItemInfo(hMenu,IDM_SHOW_DEFAULTSYSTEM_VAR,0,&mi);
+			if(pobj_nv->bShow_Rad_Var)
+				SetMenuItemInfo(hMenu,IDM_SHOW_RAD_VAR,0,&mi);
+			if(pobj_nv->bShow_GUID_Var)
+				SetMenuItemInfo(hMenu,IDM_SHOW_GUID_VAR,0,&mi);
+
+			TrackPopupMenu(hMenu,TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+
+			break;
+		case WM_COMMAND:
+			mi.cbSize=sizeof(MENUITEMINFO);
+			mi.fMask=MIIM_STATE;
+			switch(LOWORD(wParam)){
+				case IDM_SHOW_DEFAULTSYSTEM_VAR:
+					if(pobj_nv->bShow_DefaultSystem_Var){
+						pobj_nv->bShow_DefaultSystem_Var=0;
+						mi.fState=MFS_UNCHECKED;
+					}
+					else{
+						pobj_nv->bShow_DefaultSystem_Var=1;
+						mi.fState=MFS_CHECKED;
+					}
+					SetMenuItemInfo(hMenu,IDM_SHOW_DEFAULTSYSTEM_VAR,0,&mi);
+					RefreshGlobalVar_with_WindowLock();
+					break;
+				case IDM_SHOW_RAD_VAR:
+					if(pobj_nv->bShow_Rad_Var){
+						pobj_nv->bShow_Rad_Var=0;
+						mi.fState=MFS_UNCHECKED;
+					}
+					else{
+						pobj_nv->bShow_Rad_Var=1;
+						mi.fState=MFS_CHECKED;
+					}
+					SetMenuItemInfo(hMenu,IDM_SHOW_RAD_VAR,0,&mi);
+					RefreshGlobalVar_with_WindowLock();
+					break;
+				case IDM_SHOW_GUID_VAR:
+					if(pobj_nv->bShow_GUID_Var){
+						pobj_nv->bShow_GUID_Var=0;
+						mi.fState=MFS_UNCHECKED;
+					}
+					else{
+						pobj_nv->bShow_GUID_Var=1;
+						mi.fState=MFS_CHECKED;
+					}
+					SetMenuItemInfo(hMenu,IDM_SHOW_GUID_VAR,0,&mi);
+					RefreshGlobalVar_with_WindowLock();
+					break;
+			}
+			break;
+		case WM_DESTROY:
+			DestroyMenu(hMenu);
+			hMenu=0;
+			break;
+	}
+	return CallWindowProc(OldTabProc,hwnd,message,wParam,lParam);
+}
+
+BOOL CALLBACK DlgDebugger(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HINSTANCE hInst;
+	extern DWORD dwStepRun;
+	extern double width_ratio_VarList;
+	RECT rect;
+	int i,i2,i3;
+	char temporary[VN_SIZE];
+	LV_DISPINFO *lvinfo;
+	LVITEM ListView_Item;
+
+	static POINT pos_VarList;
+	static POINT pos_WatchList;
+
+	switch(message){
+		case WM_INITDIALOG:
+			extern HWND hDebugWnd;
+			hDebugWnd=hwnd;
+
+			//変数リストの初期位置を取得
+			GetWindowRect(GetDlgItem(hwnd,IDC_VARPOS),&rect);
+			pos_VarList.x=rect.left;
+			pos_VarList.y=rect.top;
+			ScreenToClient(hwnd,&pos_VarList);
+
+			//ウォッチリストの初期位置を取得
+			pos_WatchList.x=pos_VarList.x+(rect.right-rect.left)+LEVER_THICK;
+			pos_WatchList.y=0;
+
+			//ツールバーのベースウィンドウを生成
+			static HWND hBase_ToolBar;
+			hBase_ToolBar=CreateDialog(hInst,MAKEINTRESOURCE(IDD_DEBUGGER_TOOLBARBASE),hwnd,(DLGPROC)DebuggerButtonsProc);
+			MoveWindow(hBase_ToolBar,50,0,20*BTNNUM_DEBUGGERTOOLBAR,22,1);
+
+			extern WNDPROC OldThreadComboProc;
+			OldThreadComboProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hwnd,IDC_THREADCOMBO),GWLP_WNDPROC);
+			SetWindowLongPtr(GetDlgItem(hwnd,IDC_THREADCOMBO),GWLP_WNDPROC,(LONG_PTR)ThreadComboProc);
+
+			extern WNDPROC OldProcComboProc;
+			OldProcComboProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hwnd,IDC_PROCCOMBO),GWLP_WNDPROC);
+			SetWindowLongPtr(GetDlgItem(hwnd,IDC_PROCCOMBO),GWLP_WNDPROC,(LONG_PTR)ProcComboProc);
+
+
+			///////////////////////////
+			// タブコントロールを生成
+			///////////////////////////
+
+			static HWND hTab;
+			HFONT hFont;
+			hFont=(HFONT)SendMessage(hwnd,WM_GETFONT,0,0);
+			hTab=CreateWindow(WC_TABCONTROL,NULL,
+				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
+				0,0,0,0,hwnd,0,hInst,0);
+			SendMessage(hTab,WM_SETFONT,(WPARAM)hFont,0);
+			OldTabProc=(WNDPROC)GetWindowLongPtr(hTab,GWLP_WNDPROC);
+			SetWindowLongPtr(hTab,GWLP_WNDPROC,(LONG_PTR)TabProc);
+
+			//タブを設定
+			TC_ITEM tcItem;
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="グローバル";
+			SendMessage(hTab,TCM_INSERTITEM,0,(LPARAM)&tcItem);
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="ローカル";
+			SendMessage(hTab,TCM_INSERTITEM,1,(LPARAM)&tcItem);
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="This";
+			SendMessage(hTab,TCM_INSERTITEM,2,(LPARAM)&tcItem);
+
+			//グローバル変数リストのツリーを作成
+			hVarTree_Global=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+				WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hTab,0,hInst,0);
+
+			//ローカル変数リストのツリーを作成
+			hVarTree_Local=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+				WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hTab,0,hInst,0);
+
+			//This変数リストのツリーを作成
+			hVarTree_This=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+				WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hTab,0,hInst,0);
+
+			ShowWindow(hVarTree_Global,SW_SHOW);
+
+
+			//イメージリスト読み込み、設定
+			static HIMAGELIST hVariOrderImageList;
+			hVariOrderImageList=ImageList_Create(16,16,ILC_COLOR4|ILC_MASK,4,0);
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARARRAY)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTRUCT)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARDATA)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTR)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARPTRSTRUCT)));
+			TreeView_SetImageList(hVarTree_Global,hVariOrderImageList,TVSIL_NORMAL);
+			TreeView_SetImageList(hVarTree_Local,hVariOrderImageList,TVSIL_NORMAL);
+			TreeView_SetImageList(hVarTree_This,hVariOrderImageList,TVSIL_NORMAL);
+
+
+			/////////////////////////
+			// ウォッチリスト
+			/////////////////////////
+
+			//コラムの設定
+			static HWND hListView;
+			LV_COLUMN ListView_Column;
+			DWORD dwStyle;
+
+			hListView=GetDlgItem(hwnd,IDC_WATCHLIST);
+			GetClientRect(hListView,&rect);
+			dwStyle=ListView_GetExtendedListViewStyle(hListView);
+			dwStyle|=LVS_EX_FULLROWSELECT;
+			ListView_SetExtendedListViewStyle(hListView,dwStyle);
+
+			ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+			ListView_Column.fmt=LVCFMT_LEFT;
+
+			extern int width_WatchColumn_Expression;
+			ListView_Column.cx=width_WatchColumn_Expression;
+			ListView_Column.pszText="ウォッチ式";
+			ListView_Column.iSubItem=0;
+			ListView_InsertColumn(hListView,0,&ListView_Column);
+
+			extern int width_WatchColumn_Value;
+			ListView_Column.cx=width_WatchColumn_Value;
+			ListView_Column.pszText="値";
+			ListView_Column.iSubItem=1;
+			ListView_InsertColumn(hListView,1,&ListView_Column);
+
+			//アイテムの設定
+			ListView_Item.mask=LVIF_TEXT;
+			ListView_Item.iSubItem=0;
+			for(i=0;i<pobj_nv->WatchNum;i++){
+				ListView_Item.pszText=pobj_nv->ppWatchStr[i];
+				ListView_Item.iItem=i;
+				ListView_InsertItem(hListView,&ListView_Item);
+			}
+			ListView_Item.pszText="...";
+			ListView_Item.iItem=i;
+			ListView_InsertItem(hListView,&ListView_Item);
+
+
+			///////////////////////
+			// 変数リストの初期化
+			///////////////////////
+			InitVarList((DWORD)lParam);
+
+			break;
+		case WM_NOTIFY:
+			NMHDR *hdr;
+			hdr=(NMHDR *)lParam;
+			if(hdr->hwndFrom==hTab&&hdr->code==TCN_SELCHANGE){
+				i=TabCtrl_GetCurSel(hTab);
+
+				if(i==0){
+					//グローバル変数を表示
+					ShowWindow(hVarTree_Global,SW_SHOW);
+					ShowWindow(hVarTree_Local,SW_HIDE);
+					ShowWindow(hVarTree_This,SW_HIDE);
+				}
+				else if(i==1){
+					//ローカル変数を表示
+					ShowWindow(hVarTree_Global,SW_HIDE);
+					ShowWindow(hVarTree_Local,SW_SHOW);
+					ShowWindow(hVarTree_This,SW_HIDE);
+				}
+				else if(i==2){
+					//This変数を表示
+					ShowWindow(hVarTree_Global,SW_HIDE);
+					ShowWindow(hVarTree_Local,SW_HIDE);
+					ShowWindow(hVarTree_This,SW_SHOW);
+				}
+			}
+
+			if(hdr->hwndFrom==hListView){
+				lvinfo=(LV_DISPINFO *)hdr;
+				if(hdr->code==NM_DBLCLK){
+					i2=ListView_GetItemCount(hListView);
+					for(i=0;i<i2;i++){
+						if(ListView_GetItemState(hListView,i,LVIS_SELECTED)) break;
+					}
+					if(i==i2) break;
+
+					ListView_EditLabel(hListView,i);
+				}
+
+				static HWND hEdit;
+				if(hdr->code==LVN_BEGINLABELEDIT){
+					hEdit=ListView_GetEditControl(hListView);
+
+					GetWindowText(hEdit,temporary,VN_SIZE);
+					if(lstrcmp(temporary,"...")==0) SetWindowText(hEdit,"");
+				}
+				if(hdr->code==LVN_ENDLABELEDIT){
+					GetWindowText(hEdit,temporary,VN_SIZE);
+					if(temporary[0]=='\0'){
+						if(ListView_GetItemCount(hListView)-1==lvinfo->item.iItem) break;
+
+						//空白入力の場合はそのアイテムを削除する
+						ListView_DeleteItem(hListView,lvinfo->item.iItem);
+						break;
+					}
+					ListView_SetItemText(hListView,lvinfo->item.iItem,0,temporary);
+
+					//演算結果を表示
+					SetCalcToWatchList(hListView,lvinfo->item.iItem,temporary);
+
+					if(lvinfo->item.iItem==ListView_GetItemCount(hListView)-1){
+						//リストアイテムを追加
+						ListView_Item.mask=LVIF_TEXT;
+						ListView_Item.pszText="...";
+						ListView_Item.iItem=lvinfo->item.iItem+1;
+						ListView_Item.iSubItem=0;
+						ListView_InsertItem(hListView,&ListView_Item);
+					}
+				}
+
+				if(hdr->code==LVN_KEYDOWN){
+					LV_KEYDOWN *plvKeydown;
+					plvKeydown=(LV_KEYDOWN *)hdr;
+					if(plvKeydown->wVKey==VK_DELETE){
+						i2=ListView_GetItemCount(hListView);
+						for(i=i2-2;i>=0;i--){
+							if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+								ListView_DeleteItem(hListView,i);
+								i3=i;
+							}
+						}
+
+						ListView_SetItemState(hListView,i3,LVIS_SELECTED,LVIS_SELECTED);
+					}
+				}
+			}
+			break;
+
+		case WM_SIZE:
+			//変数リストの位置
+			int width_VarList;
+			width_VarList=
+				(int)((double)(LOWORD(lParam)-pos_VarList.x)*width_ratio_VarList);
+
+			MoveWindow(hTab,
+				pos_VarList.x,
+				pos_VarList.y,
+				width_VarList,
+				HIWORD(lParam)-pos_VarList.y,
+				1);
+
+			GetClientRect(hTab,&rect);
+			TabCtrl_AdjustRect(hTab,FALSE,&rect);
+			rect.left-=2;
+			rect.right++;
+			rect.bottom++;
+
+			MoveWindow(hVarTree_Global,
+				rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+			MoveWindow(hVarTree_Local,
+				rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+			MoveWindow(hVarTree_This,
+				rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+
+			pos_WatchList.x=pos_VarList.x+width_VarList+LEVER_THICK;
+			pos_WatchList.y=0;
+
+			//ウォッチリストの位置
+			MoveWindow(GetDlgItem(hwnd,IDC_WATCHLIST),
+				pos_WatchList.x,
+				pos_WatchList.y,
+				LOWORD(lParam)-pos_WatchList.x,
+				HIWORD(lParam)-pos_WatchList.y,
+				1);
+
+			return 1;
+
+		case WM_VARLIST_CLOSE:
+			DestroyWindow(hwnd);
+			return 1;
+		case WM_DESTROY:
+			ImageList_Destroy(hVariOrderImageList);
+
+
+			//////////////////////////////////////////////////////////////
+			// ウォッチリストの以前の内容を破棄し、新しい内容に書き換える
+			//////////////////////////////////////////////////////////////
+
+			for(i=0;i<pobj_nv->WatchNum;i++){
+				HeapDefaultFree(pobj_nv->ppWatchStr[i]);
+			}
+			HeapDefaultFree(pobj_nv->ppWatchStr);
+
+			pobj_nv->WatchNum=ListView_GetItemCount(hListView)-1;
+			pobj_nv->ppWatchStr=(char **)HeapAlloc(hHeap,0,pobj_nv->WatchNum*sizeof(char *)+1);
+			for(i=0;i<pobj_nv->WatchNum;i++){
+				ListView_GetItemText(hListView,i,0,temporary,VN_SIZE);
+				pobj_nv->ppWatchStr[i]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+				lstrcpy(pobj_nv->ppWatchStr[i],temporary);
+			}
+
+
+			//////////////////////////////
+			// デバッグダイアログを破棄
+			//////////////////////////////
+
+			hDebugWnd=0;
+
+			extern BOOL bClipCompileView;
+			if(bClipCompileView){
+				extern HWND hOwnerEditor;
+				SendMessage(hOwnerEditor,WM_DESTROYDEBUGGERVIEW,0,0);
+			}
+
+			return 1;
+
+
+
+		///////////////////////
+		// デバッグコマンド
+		///////////////////////
+
+		case WM_DEBUG_CONTINUE:
+			DestroyWindow(hwnd);
+			return 1;
+		case WM_STEP_IN:
+			Debugger_StepIn();
+			return 1;
+		case WM_STEP_OVER:
+			Debugger_StepOver();
+			return 1;
+		case WM_STEP_CURSOR:
+			Debugger_StepCursor();
+			return 1;
+	}
+	return 0;
+}
+
+
+
+
+//////////////////////////////////
+// ポップアップ表示の変数リスト
+//////////////////////////////////
+
+BOOL CALLBACK DlgVarList(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HINSTANCE hInst;
+	extern DWORD dwStepRun;
+	RECT rect;
+	POINT pos;
+	SIZE size;
+
+	switch(message){
+		case WM_INITDIALOG:
+			extern HWND hDebugWnd;
+			hDebugWnd=hwnd;
+
+			pos.x=pobj_nv->VarDlgRect.left;
+			pos.y=pobj_nv->VarDlgRect.top;
+			size.cx=pobj_nv->VarDlgRect.right-pobj_nv->VarDlgRect.left;
+			size.cy=pobj_nv->VarDlgRect.bottom-pobj_nv->VarDlgRect.top;
+			MoveWindow(hwnd,pos.x,pos.y,size.cx,size.cy,1);
+
+			extern WNDPROC OldThreadComboProc;
+			OldThreadComboProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hwnd,IDC_THREADCOMBO),GWLP_WNDPROC);
+			SetWindowLongPtr(GetDlgItem(hwnd,IDC_THREADCOMBO),GWLP_WNDPROC,(LONG_PTR)ThreadComboProc);
+
+			extern WNDPROC OldProcComboProc;
+			OldProcComboProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hwnd,IDC_PROCCOMBO),GWLP_WNDPROC);
+			SetWindowLongPtr(GetDlgItem(hwnd,IDC_PROCCOMBO),GWLP_WNDPROC,(LONG_PTR)ProcComboProc);
+
+			//イメージリスト読み込み、設定
+			static HIMAGELIST hVariOrderImageList;
+			hVariOrderImageList=ImageList_Create(16,16,ILC_COLOR4|ILC_MASK,4,0);
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARARRAY)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTRUCT)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARDATA)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARSTR)));
+			ImageList_AddIcon(hVariOrderImageList,LoadIcon(hInst,MAKEINTRESOURCE(IDI_VARPTRSTRUCT)));
+			TreeView_SetImageList(GetDlgItem(hwnd,IDC_VARTREE),hVariOrderImageList,TVSIL_NORMAL);
+
+			InitVarList((DWORD)lParam);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDCANCEL:
+					DestroyWindow(hwnd);
+					return 1;
+				case IDC_STEPIN:
+					dwStepRun=1;
+					return 1;
+				case IDC_STEPOVER:
+					dwStepRun=2;
+					return 1;
+			}
+			break;
+		case WM_SIZE:
+			GetWindowRect(GetDlgItem(hwnd,IDC_VARTREE),&rect);
+			pos.x=rect.left;
+			pos.y=rect.top;
+			ScreenToClient(hwnd,&pos);
+			MoveWindow(GetDlgItem(hwnd,IDC_VARTREE),0,pos.y,LOWORD(lParam),HIWORD(lParam)-pos.y,TRUE);
+			SetWindowPos(GetDlgItem(hwnd,IDCANCEL),0,LOWORD(lParam)-91,9,0,0,SWP_NOSIZE);
+			return 1;
+		case WM_VARLIST_CLOSE:
+			DestroyWindow(hwnd);
+			return 1;
+		case WM_DESTROY:
+			ImageList_Destroy(hVariOrderImageList);
+
+			GetWindowRect(hwnd,&pobj_nv->VarDlgRect);
+
+			hDebugWnd=0;
+
+			return 1;
+	}
+	return 0;
+}
Index: /ProjectEditor/Attach.cpp
===================================================================
--- /ProjectEditor/Attach.cpp	(revision 3)
+++ /ProjectEditor/Attach.cpp	(revision 3)
@@ -0,0 +1,328 @@
+#ifndef THETEXT
+
+#include "common.h"
+#include <psapi.h>
+#include <tlhelp32.h>
+
+#pragma comment(lib, "psapi.lib")
+
+
+int GetSelectingProcessId(HWND hListView,DWORD *lpdwPlatform){
+	int nCount;
+	nCount=ListView_GetItemCount(hListView);
+
+	char temporary[255];
+	DWORD dwProcessId;
+	int i;
+	for(i=0;i<nCount;i++){
+		if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+			ListView_GetItemText(hListView,i,1,temporary,255);
+			dwProcessId=atoi(temporary);
+
+			ListView_GetItemText(hListView,i,2,temporary,255);
+			if(lstrcmpi(temporary,"Win32")==0) *lpdwPlatform=IMAGE_FILE_MACHINE_I386;
+			else if(lstrcmpi(temporary,"Win64")==0) *lpdwPlatform=IMAGE_FILE_MACHINE_AMD64;
+			break;
+		}
+	}
+	if(i==nCount) return 0;
+
+	return dwProcessId;
+}
+
+void InsertProcess_ToListView(HWND hListView,char *lpszAppPath,int id,char *lpszPlatform,char *lpszTitle){
+	char szAppName[MAX_PATH],temp2[MAX_PATH];
+	_splitpath(lpszAppPath,NULL,NULL,szAppName,temp2);
+	lstrcat(szAppName,temp2);
+
+	//イメージリストを取得
+	HIMAGELIST hImageList;
+	hImageList=ListView_GetImageList(hListView,LVSIL_SMALL );
+
+	//アイコンを取得
+	int iImage;
+	SHFILEINFO shfi;
+	SHGetFileInfo(lpszAppPath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
+	if(shfi.hIcon){
+		iImage=ImageList_AddIcon(hImageList,shfi.hIcon);
+		DestroyIcon(shfi.hIcon);
+	}
+	else iImage=-1;
+
+	char szId[255];
+	sprintf(szId,"%d",id);
+
+	//リストビューに追加
+	LV_ITEM item;
+	if(iImage==-1) item.mask=LVIF_TEXT;
+	else item.mask=LVIF_TEXT|LVIF_IMAGE;
+	item.iItem=0;
+
+	item.pszText=szAppName;
+	item.iSubItem=0;
+	item.iImage=iImage;
+	ListView_InsertItem(hListView,&item);
+
+	item.mask=LVIF_TEXT ;
+	item.pszText=szId;
+	item.iSubItem++;
+	ListView_SetItem(hListView,&item);
+
+	item.pszText=lpszPlatform;
+	item.iSubItem++;
+	ListView_SetItem(hListView,&item);
+
+	item.pszText=lpszTitle;
+	item.iSubItem++;
+	ListView_SetItem(hListView,&item);
+}
+
+void ListupProcesses64(HWND hListView){
+	char temporary[MAX_PATH];
+
+	ListView_DeleteAllItems(hListView);
+
+
+	/////////////////////////////////////////////////////
+	// 64ビット版プロセス列挙モジュールを呼び出す
+	/////////////////////////////////////////////////////
+
+	sprintf(temporary,"%sSubOperation\\enum_process64\\enum_process64.exe",pj_editor_Dir);
+
+	STARTUPINFO si;
+	PROCESS_INFORMATION pi;
+	memset(&si,0,sizeof(STARTUPINFO));
+	si.cb=sizeof(STARTUPINFO);
+	CreateProcess(NULL,temporary,NULL,NULL,0,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
+
+	WaitForSingleObject(pi.hProcess,INFINITE);
+
+
+	//////////////////////////////////
+	// 生成されたファイルの読み込み
+	//////////////////////////////////
+
+	sprintf(temporary,"%sSubOperation\\enum_process64\\list.dat",pj_editor_Dir);
+
+	char *buffer;
+	buffer=ReadBuffer_NonErrMsg(temporary);
+	if(!buffer) return;
+
+	int i=0;
+	while(1){
+		//ファイルパス
+		char szAppPath[MAX_PATH];
+		i=GetOneParameter(buffer,i,szAppPath);
+		if(temporary[0]=='\0') break;
+		RemoveStringQuotes(szAppPath);
+
+		//プロセスID
+		DWORD dwProcessId;
+		i=GetOneParameter(buffer,i,temporary);
+		if(temporary[0]=='\0') break;
+		dwProcessId=(DWORD)atoi(temporary);
+
+		//プラットフォーム
+		char szPlatform[255];
+		i=GetOneParameter(buffer,i,szPlatform);
+		if(temporary[0]=='\0') break;
+
+		//タイトル
+		char szTitle[255];
+		int i2;
+		for(i2=0;;i++,i2++){
+			if(IS_RETURN(buffer,i)||buffer[i]=='\0'){
+				szTitle[i2]=0;
+				break;
+			}
+			szTitle[i2]=buffer[i];
+		}
+
+
+		//リストビューへ追加
+		InsertProcess_ToListView(hListView,szAppPath,dwProcessId,szPlatform,szTitle);
+
+		if(buffer[i]=='\r'&&buffer[i+1]=='\n') i+=2;
+		if(buffer[i]=='\0') break;
+	}
+
+	HeapDefaultFree(buffer);
+}
+
+// EnumWindowsProcコールバック関数
+BOOL CALLBACK FindWindowProc(HWND hwnd, LPARAM lParam)
+{
+    HWND* pphWnd = (HWND*)lParam;
+    *pphWnd = hwnd;
+    return FALSE; /* 列挙を中断 */
+}
+void ListupProcesses(HWND hListView){
+	char temporary[MAX_PATH];
+
+	ListView_DeleteAllItems(hListView);
+
+	DWORD *pdwProcessId;
+	pdwProcessId=(DWORD *)HeapAlloc(hHeap,0,8192*sizeof(DWORD));
+
+	//プロセスを列挙
+	DWORD cbNeeded;
+	EnumProcesses(pdwProcessId,8192*sizeof(DWORD),&cbNeeded);
+
+	char szMyAppPath[MAX_PATH];
+	GetModuleFileName(GetModuleHandle(0),szMyAppPath,MAX_PATH);
+
+	int i;
+	for(i=0;i<(int)(cbNeeded/sizeof(DWORD));i++){
+
+		//プロセスIDを元にハンドルを取得
+		HANDLE hProcess;
+		hProcess=OpenProcess(PROCESS_ALL_ACCESS,0,pdwProcessId[i]);
+		if(!hProcess) continue;
+
+		//そのプロセスにおける実行モジュールのインスタンスハンドルを取得
+		HINSTANCE hModule;
+		DWORD cbReturned;
+		if(!EnumProcessModules( hProcess, &hModule, sizeof(HINSTANCE), &cbReturned ))
+			continue;
+
+		//実行ファイル名を取得
+		GetModuleFileNameEx(hProcess,hModule,temporary,MAX_PATH);
+
+
+		//////////////////////////////
+		// ウィンドウタイトルを取得
+		//////////////////////////////
+
+		//スナップショットを取得
+		HANDLE hSnapshot;
+		hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
+
+		THREADENTRY32 te;
+		memset(&te,0,sizeof(THREADENTRY32));
+		te.dwSize=sizeof(THREADENTRY32);
+		if(Thread32First(hSnapshot,&te)){
+			do{
+				if(te.th32OwnerProcessID==pdwProcessId[i]){
+					break;
+				}
+			}while(Thread32Next(hSnapshot,&te));
+		}
+
+		HWND hwnd;
+		hwnd=0;
+		EnumThreadWindows(te.th32ThreadID,FindWindowProc,(LPARAM)&hwnd);
+
+		while(GetParent(hwnd)) hwnd=GetParent(hwnd);
+
+		char szWndTitle[1024];
+		szWndTitle[0]=0;
+		if(hwnd) GetWindowText(hwnd,szWndTitle,1024);
+
+		CloseHandle(hSnapshot);
+
+
+
+		CloseHandle(hProcess);
+
+		if(lstrcmpi(szMyAppPath,temporary)==0){
+			//自分自身（ProjectEditor.exe）は無視
+			continue;
+		}
+
+		//リストビューへ追加
+		InsertProcess_ToListView(hListView,temporary,pdwProcessId[i],"Win32",szWndTitle);
+	}
+
+	HeapDefaultFree(pdwProcessId);
+}
+
+BOOL CALLBACK DlgAttach(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	static HWND hListView;
+	static HIMAGELIST hImageList;
+	static DWORD *lpdwPlatform;
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+			lpdwPlatform=(DWORD *)lParam;
+
+			hListView=GetDlgItem(hwnd,IDC_PROCESSLIST);
+
+			//拡張スタイル
+			DWORD dwStyle;
+			dwStyle=ListView_GetExtendedListViewStyle(hListView);
+			dwStyle|=LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
+			ListView_SetExtendedListViewStyle(hListView,dwStyle);
+
+
+			//イメージリストの生成と設定
+			hImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,0,0);
+			ListView_SetImageList(hListView,hImageList,LVSIL_SMALL );
+
+
+			///////////////////////////
+			// カラムをセット
+			///////////////////////////
+
+			LV_COLUMN ListView_Column;
+			ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+			ListView_Column.fmt=LVCFMT_LEFT;
+
+			ListView_Column.cx=150;
+			ListView_Column.pszText="プロセス名";
+			ListView_Column.iSubItem=0;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+			ListView_Column.cx=70;
+			ListView_Column.pszText="ID";
+			ListView_Column.iSubItem++;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+			ListView_Column.cx=50;
+			ListView_Column.pszText="種別";
+			ListView_Column.iSubItem++;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+			ListView_Column.cx=200;
+			ListView_Column.pszText="タイトル";
+			ListView_Column.iSubItem++;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+
+			//リスビューを更新
+			if(IsWow64()) ListupProcesses64(hListView);
+			else ListupProcesses(hListView);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					EndDialog(hwnd,GetSelectingProcessId(hListView,lpdwPlatform));
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			return 0;
+
+		case WM_NOTIFY:
+			NMLISTVIEW *nmListView;
+			nmListView=(NMLISTVIEW *)lParam;
+			if(nmListView->hdr.hwndFrom==hListView){
+				if(nmListView->hdr.code==NM_DBLCLK){
+					if(nmListView->iItem==-1) return 1;
+					SendMessage(hwnd,WM_COMMAND,IDOK,0);
+					return 1;
+				}
+			}
+			break;
+
+		case WM_DESTROY:
+			ImageList_Destroy(hImageList);
+			return 1;
+	}
+	return 0;
+}
+
+
+#endif //THETEXT
Index: /ProjectEditor/Attach.h
===================================================================
--- /ProjectEditor/Attach.h	(revision 3)
+++ /ProjectEditor/Attach.h	(revision 3)
@@ -0,0 +1,2 @@
+
+BOOL CALLBACK DlgAttach(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
Index: /ProjectEditor/BREGEXP.H
===================================================================
--- /ProjectEditor/BREGEXP.H	(revision 3)
+++ /ProjectEditor/BREGEXP.H	(revision 3)
@@ -0,0 +1,77 @@
+/*
+Visual Basic からお使いのときは次のDeclare文を使ってください。
+Private Declare Function Match Lib "bregexp" _
+      (szRegstr As String, szTarget As String) As String
+
+
+Private Declare Function Replace Lib "bregexp" _
+      (szRegstr As String, szTarget As String) As String
+
+Private Declare Function Translate Lib "bregexp" _
+      (szRegstr As String, szTarget As String, ret As String) As Long
+
+Private Declare Function Split Lib "bregexp" _
+      (szRegstr As String, szTarget As String, limit As Long) As Variant
+
+Private Declare Function MatchEx Lib "bregexp" _
+      (szRegstr As String, szTarget As String, mode As Long) As Variant
+
+*/
+
+
+#ifdef _BREGEXP_
+#define BREGEXPAPI __declspec(dllexport) 
+#else
+#define BREGEXPAPI __declspec(dllimport) 
+#endif
+
+typedef struct bregexp {
+	const char *outp;			/* result string start ptr   */
+	const char *outendp;		/* result string end ptr     */ 
+	const int  splitctr;		/* split result counter     */ 
+	const char **splitp;		/* split result pointer ptr     */ 
+	int     rsv1;				/* reserved for external use    */ 
+} BREGEXP;
+
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+
+typedef BREGEXPAPI int (*PFUNC_BMatch)(char* str,char *target,char *targetendp,
+								BREGEXP **rxp,char *msg) ;
+typedef BREGEXPAPI int (*PFUNC_BSubst)(char* str,char *target,char *targetendp,
+								BREGEXP **rxp,char *msg) ;
+typedef BREGEXPAPI int (*PFUNC_BTrans)(char* str,char *target,char *targetendp,
+								BREGEXP **rxp,char *msg) ;
+typedef BREGEXPAPI int (*PFUNC_BSplit)(char* str,char *target,char *targetendp,
+						int limit,BREGEXP **rxp,char *msg);
+typedef BREGEXPAPI void (*PFUNC_BRegfree)(BREGEXP* rx);
+
+typedef BREGEXPAPI char *(*PFUNC_BRegexpVersion)(void);
+
+
+class CRegExp{
+	HINSTANCE hLib;
+public:
+	CRegExp();
+	~CRegExp();
+	PFUNC_BMatch BMatch;
+	PFUNC_BSubst BSubst;
+	PFUNC_BTrans BTrans;
+	PFUNC_BSplit BSplit;
+	PFUNC_BRegfree BRegfree;
+	PFUNC_BRegexpVersion BRegexpVersion;
+
+	char *compare(HWND hFindDlg,char *buffer,char *exp,BOOL IsBigSmall,int *pLength);
+	char *GetPermuStr(HWND hFindDlg,char *buffer,char *exp,char *szPermu,BOOL IsBigSmall);
+};
+extern CRegExp obj_RegExp;
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+
+#undef BREGEXPAPI
Index: /ProjectEditor/Backup.cpp
===================================================================
--- /ProjectEditor/Backup.cpp	(revision 3)
+++ /ProjectEditor/Backup.cpp	(revision 3)
@@ -0,0 +1,204 @@
+#include "common.h"
+
+
+char szBackupDirPath[MAX_PATH];
+
+void CreateBackupDir(void){
+	//自動バックアップ用のフォルダを取得
+	extern char szBackupDirPath[MAX_PATH];
+	GUID guid;
+	char *temp2;
+	CoCreateGuid(&guid);
+	UuidToString(&guid,(unsigned char **)&temp2);
+
+	char temporary[MAX_PATH];
+	GetTempPath(MAX_PATH,temporary);
+	ShortPathToLongPath(temporary,szBackupDirPath);
+	if(szBackupDirPath[lstrlen(szBackupDirPath)-1]!='\\') lstrcat(szBackupDirPath,"\\");
+
+#ifdef THETEXT
+	lstrcat(szBackupDirPath,"TheText_Temporary_");
+#else
+	lstrcat(szBackupDirPath,"ProjectEditor_Temporary_");
+#endif
+	lstrcat(szBackupDirPath,temp2);
+	RpcStringFree((unsigned char **)&temp2);
+
+	CreateDirectory(szBackupDirPath,NULL);
+	lstrcat(szBackupDirPath,"\\");
+}
+
+
+void backup(void *dummy){
+	extern char szBackupDirPath[MAX_PATH];
+	int i,iNum=0;
+	char temporary[MAX_PATH];
+
+	char *temp2;
+	temp2=(char *)malloc(8192);
+	sprintf(temp2,"%x\r\n",hOwner);
+
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd){
+			int WndNum;
+			WndNum=i;
+
+			if(!IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)) continue;
+
+			//ファイルを保存
+			sprintf(temporary,"%sdocument%02d.txt",szBackupDirPath,iNum);
+			WriteBuffer(temporary,MdiInfo[WndNum].pmti->buffer,lstrlen(MdiInfo[WndNum].pmti->buffer));
+
+			//情報を追加
+			sprintf(temp2+lstrlen(temp2),"%s\r\n",MdiInfo[WndNum].path);
+
+			iNum++;
+		}
+	}
+
+	//バックアップヘッダ
+	sprintf(temporary,"%sinfo.txt",szBackupDirPath);
+	WriteBuffer_NonErrMsg(temporary,temp2,lstrlen(temp2));
+
+	free(temp2);
+}
+
+
+void RestoreBeforeState(char *dir_path,char *pHeaderBuffer){
+	int i,i2;
+	for(i=0;;i++){
+		if(pHeaderBuffer[i]=='\0') break;
+		if(pHeaderBuffer[i]=='\r'&&pHeaderBuffer[i+1]=='\n') break;
+	}
+	if(pHeaderBuffer[i]=='\0') return;
+	i+=2;
+
+
+	int iDocNum=0;
+	char temporary[MAX_PATH];
+	while(1){
+		//元のファイルパスを取得
+		char szBeforeFilePath[MAX_PATH];
+		for(i2=0;;i++,i2++){
+			if(pHeaderBuffer[i]=='\r'&&pHeaderBuffer[i+1]=='\n'){
+				szBeforeFilePath[i2]=0;
+				break;
+			}
+			szBeforeFilePath[i2]=pHeaderBuffer[i];
+			if(pHeaderBuffer[i]=='\0') break;
+		}
+		if(pHeaderBuffer[i]=='\0') break;
+
+		sprintf(temporary,"%sdocument%02d.txt",dir_path,iDocNum);
+
+		HWND hChild;
+		hChild=NewTextEditWindow(temporary,WNDTYPE_TEXT);
+		int WndNum;
+		WndNum=GetWndNum(hChild);
+
+		char szOldTitle[MAX_PATH];
+		lstrcpy(szOldTitle,MdiInfo[WndNum].title);
+
+		//ドキュメント セレクト コンボボックスから消去
+		extern HWND hDocCombo;
+		i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
+		SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
+
+		//パスを変更
+		GlobalFree(MdiInfo[WndNum].path);
+		MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(szBeforeFilePath)+1);
+		lstrcpy(MdiInfo[WndNum].path,szBeforeFilePath);
+
+		//ドキュメント セレクト コンボボックスに挿入
+		char str[MAX_PATH],str2[MAX_PATH];
+		if(szBeforeFilePath[0]){
+			_splitpath(szBeforeFilePath,NULL,NULL,str,str2);
+			lstrcat(str,str2);
+		}
+		else{
+			extern int DocumentCounter;
+			DocumentCounter++;
+			sprintf(str,"Document[%d]",DocumentCounter);
+		}
+		DuplicateTitleCheck(str);
+		GlobalFree(MdiInfo[WndNum].title);
+		MdiInfo[WndNum].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(str)+1);
+		lstrcpy(MdiInfo[WndNum].title,str);
+		SendMessage(hDocCombo,CB_ADDSTRING,0,(long)MdiInfo[WndNum].title);
+		i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
+		SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
+
+		//MDIウィンドウのタイトルを再設定
+		SetWindowText(hChild,MdiInfo[WndNum].title);
+
+		//タブコントロールを再設定
+		COLORREF TabColor;
+		TabColor=pobj_nv->pobj_ExtLink->GetTabColorFromFilePath(MdiInfo[WndNum].path);
+		pobj_MainTab->delete_item(szOldTitle,0);
+		pobj_MainTab->insert(MdiInfo[WndNum].title,0,TabColor);
+
+		MdiInfo[WndNum].pmti->bModify=1;
+
+
+		iDocNum++;
+
+		i+=2;
+		if(pHeaderBuffer[i]=='\0') break;
+	}
+
+	RemoveDirectoryStrong(dir_path);
+}
+
+
+BOOL restore(void){
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+	char temporary[MAX_PATH],*temp2;
+
+	char szTempPath[MAX_PATH];
+	GetTempPath(MAX_PATH,temporary);
+	ShortPathToLongPath(temporary,szTempPath);
+	if(szTempPath[lstrlen(szTempPath)-1]!='\\') lstrcat(szTempPath,"\\");
+
+	sprintf(temporary,"%s*",szTempPath);
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind!=INVALID_HANDLE_VALUE){
+		do{
+			if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
+#ifdef THETEXT
+				if(memcmp(wfd.cFileName,"TheText_Temporary_",18)==0){
+#else
+				if(memcmp(wfd.cFileName,"ProjectEditor_Temporary_",24)==0){
+#endif
+					sprintf(temporary,"%s%s\\info.txt",szTempPath,wfd.cFileName);
+					temp2=ReadBuffer_NonErrMsg(temporary);
+					if(temp2){
+						HWND hTemp;
+						sscanf(temp2,"%x",&hTemp);
+						if(!IsWindow(hTemp)){
+							sprintf(temporary,"前回、%sが異常終了した可能性があります。データを復元しますか？",APPLICATION_NAME);
+							if(MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNO)==IDNO){
+								HeapDefaultFree(temp2);
+
+								sprintf(temporary,"%s%s\\",szTempPath,wfd.cFileName);
+								RemoveDirectoryStrong(temporary);
+								return 0;
+							}
+
+							sprintf(temporary,"%s%s\\",szTempPath,wfd.cFileName);
+							RestoreBeforeState(temporary,temp2);
+
+							HeapDefaultFree(temp2);
+
+							return 1;
+						}
+
+						HeapDefaultFree(temp2);
+					}
+				}
+			}
+		}while(FindNextFile(hFind,&wfd));
+	}
+
+	return 0;
+}
Index: /ProjectEditor/CClassInfo.cpp
===================================================================
--- /ProjectEditor/CClassInfo.cpp	(revision 3)
+++ /ProjectEditor/CClassInfo.cpp	(revision 3)
@@ -0,0 +1,284 @@
+#include "Common.h"
+
+#if defined(JPN)
+//日本語
+#include "pj_msg_jpn.h"
+#else
+//英語
+#include "pj_msg_eng.h"
+#endif
+
+
+CClassInfo::CClassInfo(){
+	pMemberInfo=(MEMBERINFO *)HeapAlloc(hHeap,0,1);
+	MemberNum=0;
+}
+CClassInfo::~CClassInfo(){
+	int i;
+	for(i=0;i<MemberNum;i++){
+		HeapDefaultFree(pMemberInfo[i].pName);
+	}
+	HeapDefaultFree(pMemberInfo);
+}
+
+int CClassInfo::Analyze(char *pBuf,int *p){
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	i=*p;
+
+	DWORD dwAccess;
+
+	//種類を取得
+	DWORD dwClassType;
+	if(memicmp(pBuf+i,"Class",5)==0){
+		dwClassType=ESC_CLASS;
+		i+=5;
+
+		dwAccess=ACCESS_PRIVATE;
+	}
+	else if(memicmp(pBuf+i,"Type",4)==0){
+		dwClassType=ESC_TYPE;
+		i+=4;
+
+		dwAccess=ACCESS_PUBLIC;
+	}
+	else if(memicmp(pBuf+i,"Interface",9)==0){
+		dwClassType=ESC_INTERFACE;
+		i+=9;
+
+		dwAccess=ACCESS_PUBLIC;
+	}
+	else return 0;
+	JumpBlank(pBuf,&i);
+
+
+	//クラス名を取得
+	for(i2=0;;i++,i2++){
+		if(!(IsVariableChar(pBuf[i])||pBuf[i]=='~')){
+			ClassName[i2]=0;
+			break;
+		}
+		ClassName[i2]=pBuf[i];
+	}
+	JumpBlank(pBuf,&i);
+
+
+	//メンバ変数、関数を取得
+	while(1){
+		if(pBuf[i]=='\0') break;
+		if(memicmp(pBuf+i,"End",3)==0){
+			/*	End Class
+				End Type
+				の検出 */
+			i2=i+3;
+			while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+
+			if(memicmp(pBuf+i2,"Class",5)==0&&(!IsVariableChar(pBuf[i2+5]))||
+				memicmp(pBuf+i2,"Interface",9)==0&&(!IsVariableChar(pBuf[i2+9]))||
+				memicmp(pBuf+i2,"Type",4)==0&&(!IsVariableChar(pBuf[i2+4]))){
+				while(!IsCommandDelimitation(pBuf,i2)) i2++;
+				i=i2;
+				break;
+			}
+		}
+
+		DWORD dwProc;
+		if(memicmp(pBuf+i,"Abstract",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Virtual",7)==0&&(pBuf[i+7]==' '||pBuf[i+7]=='\t')||
+			memicmp(pBuf+i,"Override",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')){
+			//メンバ関数のとき
+			if(pBuf[i]=='a'||pBuf[i]=='A'){
+				i+=9;
+				dwProc=ESC_ABSTRACT;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')) i+=9;
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')) i+=4;
+			}
+			else if(pBuf[i]=='v'||pBuf[i]=='V'){
+				i+=8;
+				dwProc=ESC_VIRTUAL;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')) i+=9;
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')) i+=4;
+			}
+			else if(pBuf[i]=='o'||pBuf[i]=='O'){
+				i+=9;
+				dwProc=ESC_OVERRIDE;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')) i+=9;
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')) i+=4;
+			}
+			else if(pBuf[i]=='f'||pBuf[i]=='F'){
+				i+=9;
+				dwProc=ESC_FUNCTION;
+			}
+			else if(pBuf[i]=='s'||pBuf[i]=='S'){
+				i+=4;
+				dwProc=ESC_SUB;
+			}
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		}
+		else{
+			//メンバ変数のとき
+			dwProc=0;
+		}
+
+		int code_pos;
+		code_pos=i;
+
+		//変数名または関数名を取得
+		if(pBuf[i]=='~'){
+			temporary[0]='~';
+			i2=1;
+			i++;
+		}
+		else i2=0;
+		for(;;i++,i2++){
+			if(!IsVariableChar(pBuf[i])){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=pBuf[i];
+		}
+
+		//次の行をサーチ
+		for(;;i++){
+			if(pBuf[i]=='\0') break;
+			if(pBuf[i]=='\''||(pBuf[i]=='/'&&pBuf[i+1]=='*')){
+				//コメント中
+				JumpBlank(pBuf,&i);
+				break;
+			}
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				i+=i2;
+				break;
+			}
+		}
+		JumpBlank(pBuf,&i);
+
+		if(lstrcmpi(temporary,"Inherits")==0){
+			//継承指定の場合（ツリーに反映すべきデータはないので無視する）
+			continue;
+		}
+
+		//アクセスを変更
+		if(lstrcmpi(temporary,"Private")==0){
+			dwAccess=ACCESS_PRIVATE;
+			continue;
+		}
+		if(lstrcmpi(temporary,"Public")==0){
+			dwAccess=ACCESS_PUBLIC;
+			continue;
+		}
+		if(lstrcmpi(temporary,"Protected")==0){
+			dwAccess=ACCESS_PROTECTED;
+			continue;
+		}
+
+		//重複チェック（オーバーライド関数を考慮）
+		for(i2=0;i2<MemberNum;i2++){
+			if(lstrcmp(pMemberInfo[i2].pName,temporary)==0){
+				lstrcat(temporary," ");
+				break;
+			}
+		}
+
+		pMemberInfo=
+			(MEMBERINFO *)HeapReAlloc(hHeap,
+				0,
+				pMemberInfo,
+				(MemberNum+1)*sizeof(MEMBERINFO));
+
+		//メンバ名
+		pMemberInfo[MemberNum].pName=
+			(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+		lstrcpy(pMemberInfo[MemberNum].pName,
+			temporary);
+
+		//メンバの種類（変数、Virtual、Sub、Function）
+		pMemberInfo[MemberNum].dwProc=dwProc;
+
+		//アクセシビリティ
+		pMemberInfo[MemberNum].dwAccess=dwAccess;
+
+		//コードの位置
+		pMemberInfo[MemberNum].code_pos=code_pos;
+
+		MemberNum++;
+
+		if(dwProc){
+			//Abstract定義以外はEnd Sub、End Functionをサーチする
+			if(dwProc==ESC_ABSTRACT) continue;
+			if(dwClassType==ESC_INTERFACE) continue;
+
+			while(1){
+				if(pBuf[i]=='\0'){
+					i2=0;
+					break;
+				}
+
+				if(memicmp(pBuf+i,"End",3)==0){
+					/*	End Sub
+						End Function
+						の検出 */
+					i+=3;
+					while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+					if(memicmp(pBuf+i,"Sub",3)==0&&(!IsVariableChar(pBuf[i+3]))||
+						memicmp(pBuf+i,"Function",8)==0&&(!IsVariableChar(pBuf[i+8]))){
+						i2=1;
+						break;
+					}
+
+					if(memicmp(pBuf+i,"Class",5)==0&&(!IsVariableChar(pBuf[i+5]))||
+						memicmp(pBuf+i,"Interface",9)==0&&(!IsVariableChar(pBuf[i+9]))||
+						memicmp(pBuf+i,"Type",4)==0&&(!IsVariableChar(pBuf[i+4]))){
+						i2=0;
+						break;
+					}
+				}
+
+				//次の行をサーチ
+				for(;;i++){
+					if(pBuf[i]=='\0') break;
+					i2=IsCommandDelimitation(pBuf,i);
+					if(i2){
+						i+=i2;
+						break;
+					}
+				}
+				JumpBlank(pBuf,&i);
+			}
+
+			if(i2==0){
+				//コード解析が不正に終了
+				*p=i;
+				return 0;
+			}
+
+			//次の行をサーチ
+			for(;;i++){
+				if(pBuf[i]=='\0') break;
+				i2=IsCommandDelimitation(pBuf,i);
+				if(i2){
+					i+=i2;
+					break;
+				}
+			}
+			JumpBlank(pBuf,&i);
+		}
+	}
+
+	*p=i;
+
+	return 1;
+}
+
Index: /ProjectEditor/CFileInfo.cpp
===================================================================
--- /ProjectEditor/CFileInfo.cpp	(revision 3)
+++ /ProjectEditor/CFileInfo.cpp	(revision 3)
@@ -0,0 +1,99 @@
+#include "common.h"
+
+CFileInfo::CFileInfo(char *path,HTREEITEM hTreeItem){
+	m_path=(char *)HeapAlloc(hHeap,0,lstrlen(path)+1);
+	lstrcpy(m_path,path);
+	m_hTreeItem=hTreeItem;
+}
+CFileInfo::~CFileInfo(){
+	HeapDefaultFree(m_path);
+}
+void CFileInfo::GetFullPath(char *buffer){
+	lstrcpy(buffer,m_path);
+	::GetFullPath(buffer,ProjectInfo.dir);
+}
+
+
+CDBFileInfo::CDBFileInfo(){
+	iNum=0;
+	ppobj_FileInfo=(CFileInfo **)HeapAlloc(hHeap,0,1);
+}
+CDBFileInfo::~CDBFileInfo(){
+	int i;
+	for(i=0;i<iNum;i++){
+		delete ppobj_FileInfo[i];
+	}
+	HeapDefaultFree(ppobj_FileInfo);
+}
+
+void CDBFileInfo::add(char *path,HTREEITEM hTreeItem){
+	ppobj_FileInfo=(CFileInfo **)HeapReAlloc(hHeap,0,ppobj_FileInfo,(iNum+1)*sizeof(CFileInfo *));
+	ppobj_FileInfo[iNum]=new CFileInfo(path,hTreeItem);
+	iNum++;
+}
+void CDBFileInfo::del(HTREEITEM hTreeItem){
+	int i;
+	for(i=0;i<iNum;i++){
+		if(ppobj_FileInfo[i]->m_hTreeItem==hTreeItem) break;
+	}
+	if(i==iNum) return;
+
+	delete ppobj_FileInfo[i];
+
+	iNum--;
+	for(;i<iNum;i++) ppobj_FileInfo[i]=ppobj_FileInfo[i+1];
+}
+char *CDBFileInfo::GetPath(HTREEITEM hTreeItem){
+	int i;
+	for(i=0;i<iNum;i++){
+		if(ppobj_FileInfo[i]->m_hTreeItem==hTreeItem) break;
+	}
+	if(i==iNum) return 0;
+	return ppobj_FileInfo[i]->m_path;
+}
+BOOL CDBFileInfo::IsMainFile(HTREEITEM hTreeItem){
+	int i;
+	for(i=0;i<iNum;i++){
+		if(ppobj_FileInfo[i]->m_hTreeItem==hTreeItem) break;
+	}
+	if(i==0) return 1;
+	return 0;
+}
+void CDBFileInfo::SetTreeItem(int index,HTREEITEM hTreeItem){
+	ppobj_FileInfo[index]->m_hTreeItem=hTreeItem;
+}
+void CDBFileInfo::ResetTree(void){
+	TV_INSERTSTRUCT tv;
+
+	TreeView_DeleteAllItems(pobj_FileTree->hTree);
+
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+
+	tv.hParent=TVI_ROOT;
+	tv.item.iImage=0;
+	tv.item.iSelectedImage=0;
+	tv.item.pszText="Source Files";
+	tv.hParent=TreeView_InsertItem(pobj_FileTree->hTree,&tv);
+
+	int i;
+	char temporary[MAX_PATH],temp2[MAX_PATH];
+	for(i=0;i<iNum;i++){
+		_splitpath(ppobj_FileInfo[i]->m_path,0,0,temporary,temp2);
+		lstrcat(temporary,temp2);
+		tv.item.iImage=2;
+		tv.item.iSelectedImage=2;
+		tv.item.pszText=temporary;
+		ppobj_FileInfo[i]->m_hTreeItem=TreeView_InsertItem(pobj_FileTree->hTree,&tv);
+	}
+}
+BOOL CDBFileInfo::dupli_check(char *path){
+	//重複チェック
+	int i;
+	for(i=0;i<iNum;i++){
+		if(lstrcmpi(ppobj_FileInfo[i]->m_path,path)==0){
+			return 1;
+		}
+	}
+	return 0;
+}
Index: /ProjectEditor/CIEsink.h
===================================================================
--- /ProjectEditor/CIEsink.h	(revision 3)
+++ /ProjectEditor/CIEsink.h	(revision 3)
@@ -0,0 +1,68 @@
+#include <atlbase.h>	// ATL基本機能用ヘッダファイル
+
+// ATLを使用するために必要なグローバル変数
+// この変数名は、必ず、この名前で無ければなりません。
+extern CComModule	_Module;
+
+#include <atlcom.h>		// ATL COM共通用ヘッダファイル
+#include <atlhost.h>	// ATL コンテナ機能サポート用ヘッダファイル
+#include <EXDISPID.H>
+
+// 数字は任意。詳しくはIDispatchImplのドキュメント参照
+#define SINKID_COUNTEREVENTS 0
+
+/* CIESink : シンク(イベント受付窓口)クラス */
+class ATL_NO_VTABLE CIESink :
+	public CComObjectRootEx<CComSingleThreadModel>,
+	public IDispEventImpl<SINKID_COUNTEREVENTS, CIESink, &DIID_DWebBrowserEvents2>
+{
+private:
+	CComPtr<IUnknown> m_pUnkIE;
+
+public:
+	CIESink() {}
+
+	HRESULT AdviseToIE( CComPtr<IUnknown> pUnkIE)
+	{
+		m_pUnkIE = pUnkIE;
+		
+		// タイプ ライブラリへのポインタやバージョン情報の設定
+		AtlGetObjectSourceInterface( pUnkIE, &m_libid, &m_iid, &m_wMajorVerNum, &m_wMinorVerNum) ;
+
+		// イベントをDispatch
+		HRESULT hr = this->DispEventAdvise( pUnkIE);
+
+		return hr ;
+	}
+
+BEGIN_COM_MAP(CIESink)
+	COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents2, CIESink)
+END_COM_MAP()
+
+BEGIN_SINK_MAP(CIESink)
+	SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, &CIESink::OnBeforeNavigate2)
+	SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_NEWWINDOW2, &CIESink::OnNewWindow2)
+	SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_ONQUIT, &CIESink::OnQuit)
+END_SINK_MAP()
+
+// OnBeforeNavigate2
+void _stdcall OnBeforeNavigate2( IDispatch** ppDisp, VARIANT* pvUrl, VARIANT*, VARIANT* pvTarget, VARIANT*,
+				   VARIANT*, VARIANT_BOOL *pbCancel)
+{
+	return ;
+}
+
+// OnNewWindow2
+void _stdcall OnNewWindow2( IDispatch** ppDisp, VARIANT_BOOL *pbCancel)
+{
+	return ;
+}
+
+// OnQuit
+void _stdcall OnQuit()
+{
+	DispEventUnadvise( m_pUnkIE);
+	return ;
+}
+};
+
Index: /ProjectEditor/Caret.cpp
===================================================================
--- /ProjectEditor/Caret.cpp	(revision 3)
+++ /ProjectEditor/Caret.cpp	(revision 3)
@@ -0,0 +1,855 @@
+#include "common.h"
+
+extern int font_width,font_height;
+
+BOOL IsRightTurn(char *pBuf,int i,int now_x){
+	if(pobj_nv->bRightTurn==0) return 0;
+	if(pobj_nv->iMaxOneLineTextLength-1<=now_x && pBuf[i]!='\r') return 1;
+	return 0;
+}
+
+int GetBufferIndexFromCaretPos(char *pBuf,int now_x,int now_y){
+	int i,i2;
+	int x,y;
+
+	// 行の確認
+	for(i=0,x=0,y=0;;i++,x++){
+		if(y>=now_y) break;
+		if(pBuf[i]=='\0') return 0;
+		if(IsRightTurn(pBuf,i,x)){
+			//右端で折り返す
+			y++;
+			x=-1;
+			i--;
+			continue;
+		}
+		if(pBuf[i]=='\t'){
+			//タブ文字
+			int tab;
+			tab=pobj_nv->TabSize;
+
+			if(x%tab==0) i2=tab;
+			else i2=tab-x%tab;
+			x+=i2-1;
+			continue;
+		}
+		else if(IsDBCSLeadByte(pBuf[i])){
+			//マルチバイト文字
+			x++;
+			i++;
+			continue;
+		}
+
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+			y++;
+			i++;
+			x=-1;
+		}
+	}
+
+	//列の確認
+	for(x=0;x<now_x;i++,x++){
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'||pBuf[i]=='\0') return 0;
+
+		if(pBuf[i]=='\t'){
+			//タブ文字
+			int tab;
+			tab=pobj_nv->TabSize;
+
+			if(x%tab==0) i2=tab;
+			else i2=tab-x%tab;
+			x+=i2-1;
+			continue;
+		}
+		else if(IsDBCSLeadByte(pBuf[i])){
+			//マルチバイト文字
+			x++;
+			i++;
+			continue;
+		}
+	}
+
+	return i;
+}
+void GetCaretPosFromBufferIndex(char *pBuf,int index,POINT *pCaretPos){
+	int i,i2;
+
+	pCaretPos->x=0;
+	pCaretPos->y=0;
+	for(i=0;i<index;i++,pCaretPos->x++){
+		if(pBuf[i]=='\0') break;
+		if(IsRightTurn(pBuf,i,pCaretPos->x)){
+			//右端で折り返す
+			pCaretPos->y++;
+			pCaretPos->x=-1;
+			i--;
+			continue;
+		}
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+			pCaretPos->x=-1;
+			pCaretPos->y++;
+			i++;
+			continue;
+		}
+		if(IsDBCSLeadByte(pBuf[i])){
+			i++;
+			pCaretPos->x++;
+			continue;
+		}
+		if(pBuf[i]=='\t'){
+			//タブ文字
+			int tab;
+			tab=pobj_nv->TabSize;
+
+			if(pCaretPos->x%tab==0) i2=tab;
+			else i2=tab-pCaretPos->x%tab;
+			pCaretPos->x+=i2-1;
+			continue;
+		}
+		else if(IsDBCSLeadByte(pBuf[i])){
+			//マルチバイト文字
+			pCaretPos->x++;
+			i++;
+			continue;
+		}
+	}
+}
+
+void TextEdit_GetSel(int WndNum,CHARRANGE *pCharRange){
+	//////////////////////////////////////////
+	// 選択範囲（バッファインデックス）を取得
+	//////////////////////////////////////////
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	pCharRange->cpMin=GetBufferIndexFromCaretPos(
+		MdiInfo[WndNum].pmti->buffer,
+		MdiInfo[WndNum].pmti->StartCaretPos.x,
+		MdiInfo[WndNum].pmti->StartCaretPos.y);
+
+	if(MdiInfo[WndNum].pmti->StartCaretPos.x==MdiInfo[WndNum].pmti->EndCaretPos.x&&
+		MdiInfo[WndNum].pmti->StartCaretPos.y==MdiInfo[WndNum].pmti->EndCaretPos.y){
+		//選択されていないとき
+		pCharRange->cpMax=pCharRange->cpMin;
+	}
+	else{
+		pCharRange->cpMax=GetBufferIndexFromCaretPos(
+			MdiInfo[WndNum].pmti->buffer,
+			MdiInfo[WndNum].pmti->EndCaretPos.x,
+			MdiInfo[WndNum].pmti->EndCaretPos.y);
+	}
+
+	if(pCharRange->cpMin>pCharRange->cpMax){
+		long temp;
+		temp=pCharRange->cpMin;
+		pCharRange->cpMin=pCharRange->cpMax;
+		pCharRange->cpMax=temp;
+	}
+}
+void TextEdit_GetSelText(int WndNum,CHARRANGE *pCharRange,char *buffer){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	memcpy(buffer,
+		MdiInfo[WndNum].pmti->buffer+pCharRange->cpMin,
+		pCharRange->cpMax-pCharRange->cpMin);
+	buffer[pCharRange->cpMax-pCharRange->cpMin]=0;
+}
+
+void GetScrollBaseCaretPos(int WndNum,int *pNaturalBaseX,int *pNaturalBaseY){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	HWND hEdit;
+	hEdit=MdiInfo[WndNum].pmti->hEdit;
+
+	//垂直スクロールバーの位置
+	SCROLLINFO si;
+	si.cbSize=sizeof(SCROLLINFO);
+	si.fMask=SIF_POS;
+	GetScrollInfo(hEdit,SB_VERT,&si);
+	*pNaturalBaseY-=si.nPos;		//文字単位
+
+	//水平スクロールバーの位置
+	GetScrollInfo(hEdit,SB_HORZ,&si);
+	*pNaturalBaseX-=si.nPos;		//文字単位
+}
+
+void GetNaturalBaseCaretPos(int WndNum,int *pScrollBaseX,int *pScrollBaseY){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	HWND hEdit;
+	hEdit=GetWindow(MdiInfo[WndNum].hwnd,GW_CHILD);
+
+	//垂直スクロールバーの位置
+	SCROLLINFO si;
+	si.cbSize=sizeof(SCROLLINFO);
+	si.fMask=SIF_POS;
+	GetScrollInfo(hEdit,SB_VERT,&si);
+	*pScrollBaseY+=si.nPos;		//文字単位
+
+	//水平スクロールバーの位置
+	GetScrollInfo(hEdit,SB_HORZ,&si);
+	*pScrollBaseX+=si.nPos;		//文字単位
+}
+
+void TextEdit_SetSel(int WndNum,int StartIndex,int EndIndex,BOOL bShowCenter){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	GetCaretPosFromBufferIndex(
+		MdiInfo[WndNum].pmti->buffer,
+		StartIndex,
+		&MdiInfo[WndNum].pmti->StartCaretPos);
+
+	GetCaretPosFromBufferIndex(
+		MdiInfo[WndNum].pmti->buffer,
+		EndIndex,
+		&MdiInfo[WndNum].pmti->EndCaretPos);
+
+	HWND hEdit;
+	hEdit=GetWindow(MdiInfo[WndNum].hwnd,GW_CHILD);
+
+	if(!TextEdit_ScrollCaret(WndNum,0,bShowCenter))
+		InvalidateRect(hEdit,NULL,0);
+	ResetCaretPos(WndNum);
+
+	ResetState_EditMenu();
+}
+void TextEdit_SelectOneLine(int WndNum,int code_pos,BOOL bShowCenter){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	///////////////////////
+	// 定義行の選択範囲
+	///////////////////////
+
+	int iStartPos;
+	iStartPos=code_pos;
+	while(MdiInfo[WndNum].pmti->buffer[iStartPos]!='\n'&&iStartPos>0) iStartPos--;
+	if(MdiInfo[WndNum].pmti->buffer[iStartPos]=='\n') iStartPos++;
+
+	int iEndPos;
+	iEndPos=code_pos;
+	while(MdiInfo[WndNum].pmti->buffer[iEndPos]!='\r'&&MdiInfo[WndNum].pmti->buffer[iEndPos]!='\0') iEndPos++;
+
+	TextEdit_SetSel(WndNum,iStartPos,iEndPos,bShowCenter);
+}
+void ResetCaretPos(int WndNum,BOOL bInputAndReset){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int x,y;
+
+	POINT OldPos;
+	GetCaretPos(&OldPos);
+
+	x=MdiInfo[WndNum].pmti->StartCaretPos.x;
+	y=MdiInfo[WndNum].pmti->StartCaretPos.y;
+	GetScrollBaseCaretPos(WndNum,&x,&y);
+
+	//エディタ画面左端のコントロールタブ
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+	//コントロールタブ上にカーソルがきたときに、非表示にする
+	if(OldPos.x>=iControlTabSpace&&x<0) HideCaret(MdiInfo[WndNum].pmti->hEdit);
+	else if(OldPos.x<iControlTabSpace&&x>=0) ShowCaret(MdiInfo[WndNum].pmti->hEdit);
+
+	SetCaretPos(
+		x*font_width     +iControlTabSpace,
+		y*font_height);
+
+	SetStatusText(NULL);
+
+
+	//////////////////////////////////////////////
+	// Web検索文字列
+	//////////////////////////////////////////////
+	if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+		int start,end;
+		if(MdiInfo[WndNum].pmti->StartCaretPos.x==MdiInfo[WndNum].pmti->EndCaretPos.x&&
+			MdiInfo[WndNum].pmti->StartCaretPos.y==MdiInfo[WndNum].pmti->EndCaretPos.y){
+			//文字列を選択中でないとき
+
+			int sw=0;
+			if(bInputAndReset){
+				if(MdiInfo[WndNum].pmti->StartCaretPos.x>1){
+					MdiInfo[WndNum].pmti->StartCaretPos.x-=2;
+					sw=1;
+				}
+			}
+
+			TextEdit_GetWordCaret(
+				MdiInfo[WndNum].pmti->hEdit,
+				WndNum,
+				&MdiInfo[WndNum].pmti->StartCaretPos,
+				&start,&end,
+				WORDCARET_BEFORE);
+
+			if(sw) MdiInfo[WndNum].pmti->StartCaretPos.x+=2;
+
+			//半角文字列を選択時の全角とのズレを修正
+			POINT pos;
+			GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,start,&pos);
+			start=GetBufferIndexFromCaretPos(MdiInfo[WndNum].pmti->buffer,pos.x,pos.y);
+			GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,end,&pos);
+			end=GetBufferIndexFromCaretPos(MdiInfo[WndNum].pmti->buffer,pos.x,pos.y);
+		}
+		else{
+			//文字列を選択中のとき
+			start=GetBufferIndexFromCaretPos(
+				MdiInfo[WndNum].pmti->buffer,
+				MdiInfo[WndNum].pmti->StartCaretPos.x,
+				MdiInfo[WndNum].pmti->StartCaretPos.y);
+			end=GetBufferIndexFromCaretPos(
+				MdiInfo[WndNum].pmti->buffer,
+				MdiInfo[WndNum].pmti->EndCaretPos.x,
+				MdiInfo[WndNum].pmti->EndCaretPos.y);
+		}
+
+		if(start>end){
+			int iTemp;
+			iTemp=start;
+			start=end;
+			end=iTemp;
+		}
+
+		char *pTemp;
+		int length;
+		length=end-start;
+		if(length<0) length=0;
+		pTemp=(char *)HeapAlloc(hHeap,0,length+1024);
+		memcpy(pTemp,MdiInfo[WndNum].pmti->buffer+start,length);
+		pTemp[length]=0;
+
+		char *temp2;
+		temp2=strstr(pTemp,"\r\n");
+		if(temp2) temp2[0]=0;
+
+		extern HWND hWebSearchCombo;
+		SetWindowText(GetWindow(hWebSearchCombo,GW_CHILD),pTemp);
+
+		//未完成
+		HeapDefaultFree(pTemp);
+		/*if((!IsHiragana(pTemp))&&pTemp[0]&&pTemp[1]){
+			//バックグラウンドでWeb検索をかける
+			_beginthread(WebSearchThread,0,(void *)pTemp);
+
+			//※pTempはWebSearchThreadスレッド内で破棄する
+		}
+		else{
+			HeapDefaultFree(pTemp);
+		}*/
+	}
+
+
+	////////////////////////////////////////////////////
+	// パラメータヒントを更新
+	////////////////////////////////////////////////////
+
+	extern METHODCHECKINFO MethodCheckInfo;
+	if(MethodCheckInfo.hWnd){
+		if(MdiInfo[WndNum].DocType==WNDTYPE_BASIC)
+			ShowParameterHint(WndNum);
+	}
+
+
+	//////////////////////////////////
+	// コード補完機能を利用中の場合
+	//////////////////////////////////
+
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	if(ComplementWndInfo.hWnd){
+		int i,i2;
+		char *pTemp,temporary[VN_SIZE];
+
+		i=GetBufferIndexFromCaretPos(MdiInfo[WndNum].pmti->buffer,
+			MdiInfo[WndNum].pmti->StartCaretPos.x,
+			MdiInfo[WndNum].pmti->StartCaretPos.y);
+
+		if(i<ComplementWndInfo.iPos||ComplementWndInfo.iPos+ComplementWndInfo.iLength<i){
+			//参照文字列以外にカーソルが移動した場合はコード補完リストを破棄
+
+			DestroyWindow(ComplementWndInfo.hWnd);
+			ComplementWndInfo.hWnd=0;
+		}
+		if(ComplementWndInfo.pMemberInfo[0].dwAccess==ACCESS_PAIRCOMMAND){
+			/////////////////////////////////////
+			// ペアステートメント補完
+			/////////////////////////////////////
+			//※リストを自動選択、場合により破棄
+
+			if(ComplementWndInfo.iLength==0){
+				//自動選択の指標となる文字列がないときは、補完ウィンドウを破棄する
+				DestroyWindow(ComplementWndInfo.hWnd);
+				ComplementWndInfo.hWnd=0;
+				return;
+			}
+
+			pTemp=(char *)HeapAlloc(hHeap,0,ComplementWndInfo.iLength+1);
+			memcpy(pTemp,
+				MdiInfo[WndNum].pmti->buffer+ComplementWndInfo.iPos,
+				ComplementWndInfo.iLength);
+			pTemp[ComplementWndInfo.iLength]=0;
+
+			for(i=0;i<ComplementWndInfo.MemberNum;i++){
+				ListView_GetItemText(ComplementWndInfo.hList,i,0,temporary,VN_SIZE);
+
+				if(memicmp(pTemp,temporary,ComplementWndInfo.iLength)==0){
+					if(lstrcmpi(pTemp,temporary)==0){
+						//完全一致の場合
+						SendMessage(ComplementWndInfo.hList,WM_KEYDOWN,VK_RETURN,0);
+					}
+					break;
+				}
+			}
+			if(i==ComplementWndInfo.MemberNum){
+				//エンドペアステートメントの先端部分と一致しなかったとき
+				DestroyWindow(ComplementWndInfo.hWnd);
+				ComplementWndInfo.hWnd=0;
+			}
+
+			//アイテムを選択
+			ListView_SetItemState(ComplementWndInfo.hList,
+				i,
+				LVIS_SELECTED|LVIS_FOCUSED,
+				LVIS_SELECTED|LVIS_FOCUSED);
+
+			//必要であればスクロール
+			ListView_EnsureVisible(ComplementWndInfo.hList,i,0);
+
+			HeapDefaultFree(pTemp);
+		}
+		else{
+			/////////////////////////////////
+			// クラスメンバのコード補完機能
+			/////////////////////////////////
+			//※リストを自動選択
+
+			if(ComplementWndInfo.iLength==0){
+				//自動選択の指標となる文字列がないとき
+				return;
+			}
+
+			if(ComplementWndInfo.iLength<0){
+				//文字数がマイナス値になったとき（.や>が消されたとき）
+				//  補完ウィンドウを破棄する
+				DestroyWindow(ComplementWndInfo.hWnd);
+				ComplementWndInfo.hWnd=0;
+				return;
+			}
+
+			pTemp=(char *)HeapAlloc(hHeap,0,ComplementWndInfo.iLength+1);
+			memcpy(pTemp,
+				MdiInfo[WndNum].pmti->buffer+ComplementWndInfo.iPos,
+				ComplementWndInfo.iLength);
+			pTemp[ComplementWndInfo.iLength]=0;
+
+			for(i=0;i<ComplementWndInfo.MemberNum;i++){
+				ListView_GetItemText(ComplementWndInfo.hList,i,0,temporary,VN_SIZE);
+
+				i2=lstrcmpi(pTemp,temporary);
+				if(i2<=0) break;
+			}
+			if(i==ComplementWndInfo.MemberNum) i--;
+
+			//アイテムを選択
+			ListView_SetItemState(ComplementWndInfo.hList,
+				i,
+				LVIS_SELECTED|LVIS_FOCUSED,
+				LVIS_SELECTED|LVIS_FOCUSED);
+
+			//必要であればスクロール
+			ListView_EnsureVisible(ComplementWndInfo.hList,i,0);
+
+			HeapDefaultFree(pTemp);
+		}
+	}
+}
+BOOL TextEdit_ScrollCaret(int WndNum,BOOL bScrollOneStep_x,BOOL bShowCenter){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int x,y;
+	BOOL bScroll=0;
+
+	HWND hEdit;
+	hEdit=MdiInfo[WndNum].pmti->hEdit;
+
+	x=MdiInfo[WndNum].pmti->StartCaretPos.x;
+	y=MdiInfo[WndNum].pmti->StartCaretPos.y;
+	GetScrollBaseCaretPos(WndNum,&x,&y);
+
+	//垂直方向
+	SCROLLINFO si;
+	si.cbSize=sizeof(SCROLLINFO);
+	si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+	GetScrollInfo(hEdit,SB_VERT,&si);
+	if(bShowCenter==0){
+		//通常キャレットスクロール
+		if(y<0){
+			//上へスクロール
+
+			si.nPos+=y;
+			SetScrollInfo(hEdit,SB_VERT,&si,1);
+			InvalidateRect(hEdit,NULL,0);
+			bScroll=1;
+		}
+		if(si.nPage&&y>(int)si.nPage-1){
+			//下へスクロール
+
+			si.nPos+=y-si.nPage;
+
+			SetScrollInfo(hEdit,SB_VERT,&si,1);
+			InvalidateRect(hEdit,NULL,0);
+			bScroll=1;
+		}
+	}
+	else{
+		//上部にキャレットがくるようにスクロール
+
+		if(y<0||
+			si.nPage&&y>(int)si.nPage-1){
+
+			si.nPos+=y-si.nPage/3;
+			SetScrollInfo(hEdit,SB_VERT,&si,1);
+			InvalidateRect(hEdit,NULL,0);
+			bScroll=1;
+		}
+	}
+
+
+	//水平方向
+	GetScrollInfo(hEdit,SB_HORZ,&si);
+	if(x<0){
+		si.nPos+=x-1;
+		if(!bScrollOneStep_x) si.nPos-=si.nPage/4;
+		if(si.nPos<0) si.nPos=0;
+		SetScrollInfo(hEdit,SB_HORZ,&si,1);
+		InvalidateRect(hEdit,NULL,0);
+		bScroll=1;
+	}
+	if(si.nPage&&x>(int)si.nPage){
+		si.nPos+=x-si.nPage;
+		if(!bScrollOneStep_x) si.nPos+=si.nPage/3;
+		SetScrollInfo(hEdit,SB_HORZ,&si,1);
+		InvalidateRect(hEdit,NULL,0);
+		bScroll=1;
+	}
+
+	return bScroll;
+}
+
+void CaretPos_LooseToNatural(int WndNum,int loose_x,int loose_y,POINT *pCaretPos){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2,LastPos;
+	int x,y;
+	char *pBuf;
+
+	//負数の場合は0をセット
+	if(loose_x<0) loose_x=0;
+	if(loose_y<0) loose_y=0;
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	// 行の確認
+	LastPos=0;
+	for(i=0,x=0,y=0;;i++,x++){
+		if(y>=loose_y){
+			pCaretPos->y=y;
+			break;
+		}
+		if(pBuf[i]=='\0'){
+			pCaretPos->y=y;
+			i=LastPos;
+			break;
+		}
+
+		if(IsRightTurn(pBuf,i,x)){
+			LastPos=i;
+
+			//右端で折り返す
+			y++;
+			x=-1;
+			i--;
+			continue;
+		}
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+			LastPos=i+2;
+			y++;
+			i++;
+			x=-1;
+		}
+
+		if(pBuf[i]=='\t'){
+			//タブ文字
+			int tab;
+			tab=pobj_nv->TabSize;
+
+			if(x%tab==0) i2=tab;
+			else i2=tab-x%tab;
+			x+=i2-1;
+			continue;
+		}
+		else if(IsDBCSLeadByte(pBuf[i])){
+			//マルチバイト文字
+			x++;
+			i++;
+			continue;
+		}
+	}
+
+	//列の確認
+	x=0;
+	for(;;i++,x++){
+		if(IsRightTurn(pBuf,i,x)){
+			//折り返しよりも右側が指定場所のとき
+			pCaretPos->x=x;
+			break;
+		}
+
+		if(pBuf[i]=='\t'){
+			//タブ文字
+			int tab;
+			tab=pobj_nv->TabSize;
+
+			if(x%tab==0) i2=tab;
+			else i2=tab-x%tab;
+			if(x+i2-1>=loose_x){
+				//指定場所にキャレットが存在するとき（タブ内）
+				pCaretPos->x=x;
+				break;
+			}
+			x+=i2-1;
+			continue;
+		}
+		else if(IsDBCSLeadByte(pBuf[i])){
+			//マルチバイト文字
+			x++;
+			i++;
+			if(x>=loose_x){
+				//マルチバイト文字の間にキャレットが存在するとき
+				pCaretPos->x=x-1;
+				break;
+			}
+			continue;
+		}
+
+		if(x>=loose_x){
+			//指定場所にキャレットが存在するとき（通常）
+			pCaretPos->x=x;
+			break;
+		}
+
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'||pBuf[i]=='\0'){
+			//改行文字よりも右側が指定場所のとき
+			pCaretPos->x=x;
+			break;
+		}
+	}
+}
+
+void GetNaturalCaretPos_Click(int WndNum,int mouse_x,int mouse_y,POINT *pCaretPos){
+	/////////////////////////////
+	// キャレット移動（クリック）
+	/////////////////////////////
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	//ピクセル座標をカーソル座標（文字単位）に変更
+	mouse_x=(int)((double)mouse_x/(double)font_width+0.5);
+	mouse_y/=font_height;
+	GetNaturalBaseCaretPos(WndNum,&mouse_x,&mouse_y);
+
+	CaretPos_LooseToNatural(WndNum,mouse_x,mouse_y,pCaretPos);
+}
+void GetNaturalCaretPos_Left(int WndNum){
+	///////////////////////////
+	// キャレット移動（左キー）
+	///////////////////////////
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	int x,y;
+	char *pBuf;
+
+	POINT *pCaretPos;
+	pCaretPos=&MdiInfo[WndNum].pmti->StartCaretPos;
+
+	if(pCaretPos->x==0&&pCaretPos->y==0){
+		//ファイルの先頭から左へは行けない
+		return;
+	}
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	i=GetBufferIndexFromCaretPos(pBuf,
+		pCaretPos->x,
+		pCaretPos->y);
+
+	if(i>=2){
+		if(pBuf[i-2]=='\r'&&pBuf[i-1]=='\n'){
+			//列先頭から前行の終端へ
+			x=INT_MAX;
+			y=pCaretPos->y-1;
+			CaretPos_LooseToNatural(WndNum,
+				x,y,
+				pCaretPos);
+			return;
+		}
+	}
+
+	x=pCaretPos->x-1;
+	y=pCaretPos->y;
+
+	BOOL sw=0;
+	if(x<0){
+		x=INT_MAX;
+		y--;
+
+		sw=1;
+	}
+
+	CaretPos_LooseToNatural(WndNum,
+		x,y,
+		pCaretPos);
+
+	if(sw){
+		GetNaturalCaretPos_Left(WndNum);
+	}
+}
+void GetNaturalCaretPos_Right(int WndNum,POINT *pCaretPos){
+	///////////////////////////
+	// キャレット移動（右キー）
+	///////////////////////////
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	char *pBuf;
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	i=GetBufferIndexFromCaretPos(pBuf,
+		pCaretPos->x,
+		pCaretPos->y);
+
+	if(pBuf[i]=='\0'){
+		//ファイルの終端から右へは行けない
+		return;
+	}
+	else if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+		//改行コードから右へ
+		pCaretPos->x=0;
+		pCaretPos->y++;
+	}
+	else if(pBuf[i]=='\t'){
+		//タブ文字から右へ
+		int tab;
+		tab=pobj_nv->TabSize;
+
+		if(pCaretPos->x%tab==0) i2=tab;
+		else i2=tab-pCaretPos->x%tab;
+		pCaretPos->x+=i2;
+	}
+	else if(IsDBCSLeadByte(pBuf[i])){
+		//マルチバイト文字
+		pCaretPos->x+=2;
+	}
+	else{
+		//右へ（通常）
+		pCaretPos->x++;
+	}
+
+	//折り返し
+	int iMax_OneLine_TextLength;
+	iMax_OneLine_TextLength=40;
+	if(IsRightTurn(pBuf,i,pCaretPos->x)){
+		pCaretPos->x=0;
+		pCaretPos->y++;
+	}
+
+	CaretPos_LooseToNatural(WndNum,
+		pCaretPos->x,
+		pCaretPos->y,
+		pCaretPos);
+}
+void GetNaturalCaretPos_Up(int WndNum,POINT *pCaretPos){
+	///////////////////////////
+	// キャレット移動（上キー）
+	///////////////////////////
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	if(pCaretPos->y==0){
+		//1行目にキャレットがあるとき
+		return;
+	}
+
+	//上下のキャレット移動時には、左右方向の位置を保持する
+	if(MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos==-1)
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=pCaretPos->x;
+
+	pCaretPos->y--;
+
+	CaretPos_LooseToNatural(WndNum,
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos,
+		pCaretPos->y,
+		pCaretPos);
+}
+void GetNaturalCaretPos_Down(int WndNum,POINT *pCaretPos){
+	///////////////////////////
+	// キャレット移動（下キー）
+	///////////////////////////
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	//上下のキャレット移動時には、左右方向の位置を保持する
+	if(MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos==-1)
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=pCaretPos->x;
+
+	pCaretPos->y++;
+
+	CaretPos_LooseToNatural(WndNum,
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos,
+		pCaretPos->y,
+		pCaretPos);
+}
+void GetNaturalCaretPos_PageUp(int WndNum,POINT *pCaretPos){
+	///////////////////////////////
+	// キャレット移動（PageUpキー）
+	///////////////////////////////
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	if(pCaretPos->y==0){
+		//1行目にキャレットがあるとき
+		return;
+	}
+
+	//上下のキャレット移動時には、左右方向の位置を保持する
+	if(MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos==-1)
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=pCaretPos->x;
+
+	SCROLLINFO si;
+	si.cbSize=sizeof(SCROLLINFO);
+	si.fMask=SIF_PAGE;
+	GetScrollInfo(MdiInfo[WndNum].pmti->hEdit,SB_VERT,&si);
+	pCaretPos->y-=si.nPage;
+	if(pCaretPos->y<0) pCaretPos->y=0;
+
+	CaretPos_LooseToNatural(WndNum,
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos,
+		pCaretPos->y,
+		pCaretPos);
+}
+void GetNaturalCaretPos_PageDown(int WndNum,POINT *pCaretPos){
+	///////////////////////////////
+	// キャレット移動（PageUpキー）
+	///////////////////////////////
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	//上下のキャレット移動時には、左右方向の位置を保持する
+	if(MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos==-1)
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=pCaretPos->x;
+
+	SCROLLINFO si;
+	si.cbSize=sizeof(SCROLLINFO);
+	si.fMask=SIF_PAGE;
+	GetScrollInfo(MdiInfo[WndNum].pmti->hEdit,SB_VERT,&si);
+	pCaretPos->y+=si.nPage;
+
+	CaretPos_LooseToNatural(WndNum,
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos,
+		pCaretPos->y,
+		pCaretPos);
+}
Index: /ProjectEditor/ChildWndOnRebar.cpp
===================================================================
--- /ProjectEditor/ChildWndOnRebar.cpp	(revision 3)
+++ /ProjectEditor/ChildWndOnRebar.cpp	(revision 3)
@@ -0,0 +1,420 @@
+#include "Common.h"
+
+
+
+//ファイル選択コンボボックス
+HWND hDocCombo;
+
+//スタンダードツールバー
+HWND hStandardToolbarPager;				//ページャー
+ILuxToolbar *pobj_StandardToolbar;
+
+//デバッガツールバー
+HWND hDebuggerToolbarPager;				//ページャー
+ILuxToolbar *pobj_DebuggerToolbar;
+
+//ビルドツールバー
+HWND hReleaseToolbarPager;
+ILuxToolbar *pobj_ReleaseToolbar;
+
+//プラットフォーム選択コンボボックス
+HWND hSelectCompilerCombo;
+
+//WebSearchコンボボックス
+HWND hWebSearchCombo;
+
+
+
+
+/////////////////
+// レバー追加
+// ※Add～プロシージャを追加
+/////////////////
+
+
+/* 以下は各バンドのメッセージプロシージャ */
+
+//hDocCombo（Rebar）プロシージャ
+LRESULT CALLBACK DocComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern WNDPROC OldDocComboProc;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	char str[MAX_PATH];
+	RECT rect;
+	switch(message){
+		case WM_COMMAND:
+			if(HIWORD(wParam)==CBN_SELCHANGE){
+				SendMessage(hwnd,CB_GETLBTEXT,SendMessage(hwnd,CB_GETCURSEL,0,0),(long)str);
+				for(i=0;i<MAX_WNDNUM;i++){
+					if(lstrcmpi(str,MdiInfo[i].title)==0) break;
+				}
+				BringWindowToTop(MdiInfo[i].hwnd);
+			}
+			break;
+		case WM_LBUTTONDOWN:
+			GetClientRect(hwnd,&rect);
+			SetWindowPos(hwnd,NULL,0,0,rect.right,120,SWP_NOMOVE);
+			break;
+		case WM_RBUTTONUP:
+			pobj_Rebar->menu_popup(hwnd,LOWORD(lParam),HIWORD(lParam));
+			break;
+	}
+	return CallWindowProc(OldDocComboProc,hwnd,message,wParam,lParam);
+}
+
+//hStandardToolbar（Rebar）プロシージャ
+LRESULT CALLBACK StandardToolbarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern char CmdMsg[255];
+	extern WNDPROC OldStandardToolbarProc;
+	if(message==WM_RBUTTONUP){
+		pobj_Rebar->menu_popup(hwnd,LOWORD(lParam),HIWORD(lParam));
+		InvalidateRect(hwnd,NULL,0);
+	}
+	return CallWindowProc(OldStandardToolbarProc,hwnd,message,wParam,lParam);
+}
+
+//hSelectCompilerCombo（Rebar）プロシージャ
+LRESULT CALLBACK SelectCompilerComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern WNDPROC OldSelectCompilerComboProc;
+	int i;
+	switch(message){
+		case WM_COMMAND:
+			if(HIWORD(wParam)==CBN_SELCHANGE){
+				i=SendMessage(hwnd,CB_GETCURSEL,0,0);
+
+				extern char *lpszCompilerName;
+				if(i==0) lpszCompilerName=WIN32_COMPILER_NAME;
+				if(i==1) lpszCompilerName=WIN64_COMPILER_NAME;
+			}
+			break;
+		case WM_LBUTTONDOWN:
+			RECT rect;
+			GetClientRect(hwnd,&rect);
+			SetWindowPos(hwnd,NULL,0,0,rect.right,120,SWP_NOMOVE);
+			break;
+		case WM_RBUTTONUP:
+			pobj_Rebar->menu_popup(hwnd,LOWORD(lParam),HIWORD(lParam));
+			break;
+	}
+	return CallWindowProc(OldSelectCompilerComboProc,hwnd,message,wParam,lParam);
+}
+
+//hWebSearchCombo（Rebar）プロシージャ
+LRESULT CALLBACK WebSearchProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern WNDPROC OldWebSearchProc;
+	switch(message){
+		case WM_LBUTTONDOWN:
+			RECT rect;
+			GetClientRect(hwnd,&rect);
+			SetWindowPos(hwnd,NULL,0,0,rect.right,120,SWP_NOMOVE);
+			break;
+	}
+	return CallWindowProc(OldWebSearchProc,hwnd,message,wParam,lParam);
+}
+
+LRESULT CALLBACK WebSearchEditProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern WNDPROC OldWebSearchEditProc;
+	switch(message){
+		case WM_CHAR:
+			if(LOWORD(wParam)==VK_RETURN){
+				char *buffer,*temporary;
+				buffer=(char *)HeapAlloc(hHeap,0,MAX_PATH*3+1024);
+				temporary=(char *)HeapAlloc(hHeap,0,MAX_PATH*3+1024);
+
+				GetWindowText(hwnd,temporary,MAX_PATH);
+
+				int i=0;
+				while(temporary[i]==' ') i++;
+
+				char temp2[MAX_PATH];
+				strncpy(temp2,temporary+i,MAX_PATH);
+
+				i=lstrlen(temp2);
+				while(i>0){
+					if(temp2[i-1]==' ') i--;
+					else break;
+				}
+				temp2[i]=0;
+
+				//EUCに変換
+				nkf.pSetNkfOption("-wx");
+				nkf.pNkfConvert(buffer,temp2);
+
+				//URLエンコード
+				URLEncode(buffer);
+
+
+				if(bProfessional){
+					//Pro版は埋め込み型で表示
+					lstrcpy(temporary,"http://www.activebasic.com/application_search.php?query=");
+					lstrcat(temporary,buffer);
+					lstrcat(temporary,"&type=web&utf_sw=1");
+
+					pobj_SideWeb->GoPage(temporary);
+				}
+				else{
+					//Standard版は外部リンクとして表示
+					lstrcpy(temporary,"http://www.activebasic.com/search.php?query=");
+					lstrcat(temporary,buffer);
+					lstrcat(temporary,"&type=web&utf_sw=1");
+
+					ShellExecute(hwnd,"open","iexplore.exe",temporary,NULL,SW_SHOWNORMAL);
+				}
+
+
+				AddFindData(GetParent(hwnd),pobj_nv->WebStr,temp2);
+
+				HeapDefaultFree(buffer);
+				HeapDefaultFree(temporary);
+			}
+			break;
+	}
+	return CallWindowProc(OldWebSearchEditProc,hwnd,message,wParam,lParam);
+}
+
+
+
+/*----- 以下はRebarの初期生成 -----*/
+
+//ドキュメント選択コンボボックスをレバーに追加
+HWND AddDocCombo(HWND hRebar,int num,char *lpszText){
+	extern HINSTANCE hInst;
+	extern HWND hDocCombo,hClient;
+	extern WNDPROC OldDocComboProc;
+	extern HFONT hStatusFont;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	HWND hTempWnd;
+	char buffer[MAX_PATH];
+
+	//コンボボックスを生成
+	hDocCombo=CreateWindow("COMBOBOX",NULL,
+		WS_CHILD|WS_VSCROLL|WS_VISIBLE|CBS_DROPDOWNLIST|CBS_DROPDOWN|CBS_HASSTRINGS|CBS_SORT,
+		0,0,0,120,hRebar,NULL,hInst,NULL);
+
+	//サブクラス化
+	OldDocComboProc=(WNDPROC)GetWindowLong(hDocCombo,GWL_WNDPROC);
+	SetWindowLong(hDocCombo,GWL_WNDPROC,(long)DocComboProc);
+
+	//フォントを設定
+	SendMessage(hDocCombo,WM_SETFONT,(unsigned int)hStatusFont,0);
+
+	hTempWnd=GetWindow(hClient,GW_CHILD);
+	if(IsWindow(hTempWnd)){
+		for(i=0,i2=0;i<MAX_WNDNUM;i++){
+			if(MdiInfo[i].hwnd){
+				GetWindowText(MdiInfo[i].hwnd,buffer,MAX_PATH);
+				if(MdiInfo[i].hwnd==hTempWnd) i2=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)buffer);
+				else SendMessage(hDocCombo,CB_ADDSTRING,0,(long)buffer);
+			}
+		}
+		SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
+	}
+
+	lstrcpy(lpszText,"File:");
+	return hDocCombo;
+}
+
+//ファイル管理ツールバーをレバーに追加
+HWND AddStandardToolbar(HWND hRebar,int num,char *lpszText){
+	extern HWND hStandardToolbarPager;
+
+	//ページャーウィンドウを生成
+	hStandardToolbarPager=CreateWindow(WC_PAGESCROLLER,NULL,
+		WS_CHILD|WS_VISIBLE|PGS_HORZ,
+		0,0,0,0,
+		hRebar,NULL,hInst,NULL);
+
+
+	//LuxToolbarオブジェクトを生成
+	if(pobj_StandardToolbar) pobj_StandardToolbar->Release();
+	pobj_StandardToolbar=LuxToolbar_CreateInstance();
+	pobj_StandardToolbar->Create(hStandardToolbarPager);
+
+
+#define ADD_TOOLBAR_BUTTON(id,iconID,lpszToolTip) pobj_StandardToolbar->Add(id,(HICON)LoadImage(hIconResInst,MAKEINTRESOURCE(iconID),IMAGE_ICON,16,16,0),lpszToolTip)
+#define ADD_TOOLBAR_SEPARATOR pobj_StandardToolbar->Add(0,0,0)
+	//ボタン類を追加
+	ADD_TOOLBAR_BUTTON(IDM_NEW,IDI_NEW,"新規作成(Ctrl+N)");
+	ADD_TOOLBAR_SEPARATOR;
+	ADD_TOOLBAR_BUTTON(IDM_OPEN,IDI_OPEN,"開く(Ctrl+O)");
+	ADD_TOOLBAR_BUTTON(IDM_SAVE,IDI_SAVE,"保存(Ctrl+S)");
+	ADD_TOOLBAR_BUTTON(IDM_ALLSAVE,IDI_ALLSAVE,"すべて保存");
+	ADD_TOOLBAR_SEPARATOR;
+	ADD_TOOLBAR_BUTTON(IDM_CUT,IDI_CUT,"切り取り(Ctrl+X)");
+	ADD_TOOLBAR_BUTTON(IDM_COPY,IDI_COPY,"コピー(Ctrl+C)");
+	ADD_TOOLBAR_BUTTON(IDM_PASTE,IDI_PASTE,"貼り付け(Ctrl+V)");
+	ADD_TOOLBAR_SEPARATOR;
+	ADD_TOOLBAR_BUTTON(IDM_UNDO,IDI_UNDO,"元に戻す(Ctrl+Z)");
+	ADD_TOOLBAR_BUTTON(IDM_REDO,IDI_REDO,"やり直し(Ctrl+Y)");
+	ADD_TOOLBAR_SEPARATOR;
+	ADD_TOOLBAR_BUTTON(IDM_FIND,IDI_FIND,"検索(Ctrl+F)");
+#undef ADD_TOOLBAR_SEPARATOR
+#undef ADD_TOOLBAR_BUTTON
+
+
+	//ページャー設定
+	Pager_SetChild(hStandardToolbarPager,pobj_StandardToolbar->GetHandle());
+
+
+	//サブクラス化
+	extern WNDPROC OldStandardToolbarProc;
+	OldStandardToolbarProc=(WNDPROC)GetWindowLong(pobj_StandardToolbar->GetHandle(),GWL_WNDPROC);
+	SetWindowLong(pobj_StandardToolbar->GetHandle(),GWL_WNDPROC,(long)StandardToolbarProc);
+
+	lpszText[0]=0;
+	return hStandardToolbarPager;
+}
+
+//デバッガツールバーをレバーに追加
+HWND AddDebuggerToolbar(HWND hRebar,int num,char *lpszText){
+#ifndef THETEXT
+
+	extern HWND hDebuggerToolbarPager;
+
+	hDebuggerToolbarPager=CreateWindow(WC_PAGESCROLLER,NULL,
+		WS_CHILD|WS_VISIBLE|PGS_HORZ,
+		0,0,0,0,
+		hRebar,NULL,hInst,NULL);
+
+	//LuxToolbarオブジェクトを生成
+	if(pobj_DebuggerToolbar) pobj_DebuggerToolbar->Release();
+	pobj_DebuggerToolbar=LuxToolbar_CreateInstance();
+	pobj_DebuggerToolbar->Create(hDebuggerToolbarPager);
+
+#define ADD_TOOLBAR_BUTTON(id,iconID,lpszToolTip) pobj_DebuggerToolbar->Add(id,(HICON)LoadImage(hIconResInst,MAKEINTRESOURCE(iconID),IMAGE_ICON,16,16,0),lpszToolTip)
+#define ADD_TOOLBAR_SEPARATOR pobj_DebuggerToolbar->Add(0,0,0)
+	//ボタン類を追加
+	ADD_TOOLBAR_BUTTON(IDM_DEBUGCOMPILE,IDI_DEBUGCOMPILE,"デバッグ コンパイル");
+	ADD_TOOLBAR_SEPARATOR;
+	ADD_TOOLBAR_BUTTON(IDM_DEBUG,IDI_DEBUGRUN,"デバッグ実行(F8)");
+	ADD_TOOLBAR_BUTTON(IDM_DEBUG_PAUSE,IDI_DEBUGPAUSE,"デバッグを一時停止");
+	ADD_TOOLBAR_BUTTON(IDM_DEBUG_STOP,IDI_DEBUGSTOP,"デバッグを中断");
+	ADD_TOOLBAR_SEPARATOR;
+	ADD_TOOLBAR_BUTTON(IDM_STEP_IN,IDI_STEPIN,"ステップ イン(F10)");
+	ADD_TOOLBAR_BUTTON(IDM_STEP_OVER,IDI_STEPOVER,"ステップ オーバー(F11)");
+	ADD_TOOLBAR_BUTTON(IDM_STEP_CURSOR,IDI_STEPTOCURSOR,"カーソル行まで実行(Ctrl+F11)");
+	ADD_TOOLBAR_SEPARATOR;
+	ADD_TOOLBAR_BUTTON(IDM_BREAKPOINT,IDI_BREAKPOINT,"ブレークポイントの設置/解除(F9)");
+#undef ADD_TOOLBAR_SEPARATOR
+#undef ADD_TOOLBAR_BUTTON
+
+	//ページャー設定
+	Pager_SetChild(hDebuggerToolbarPager,pobj_DebuggerToolbar->GetHandle());
+
+	//サブクラス化
+	extern WNDPROC OldStandardToolbarProc;
+	OldStandardToolbarProc=(WNDPROC)GetWindowLong(pobj_DebuggerToolbar->GetHandle(),GWL_WNDPROC);
+	SetWindowLong(pobj_DebuggerToolbar->GetHandle(),GWL_WNDPROC,(long)StandardToolbarProc);
+
+	lpszText[0]=0;
+	return hDebuggerToolbarPager;
+#else //THETEXT
+	return 0;
+#endif //THETEXT
+}
+
+//リリースツールバーをレバーに追加
+HWND AddReleaseToolbar(HWND hRebar,int num,char *lpszText){
+#ifndef THETEXT
+
+	extern HWND hReleaseToolbarPager;
+
+	hReleaseToolbarPager=CreateWindow(WC_PAGESCROLLER,NULL,
+		WS_CHILD|WS_VISIBLE|PGS_HORZ,
+		0,0,0,0,
+		hRebar,NULL,hInst,NULL);
+
+	//LuxToolbarオブジェクトを生成
+	if(pobj_ReleaseToolbar) pobj_ReleaseToolbar->Release();
+	pobj_ReleaseToolbar=LuxToolbar_CreateInstance();
+	pobj_ReleaseToolbar->Create(hReleaseToolbarPager);
+
+#define ADD_TOOLBAR_BUTTON(id,iconID,lpszToolTip) pobj_ReleaseToolbar->Add(id,(HICON)LoadImage(hIconResInst,MAKEINTRESOURCE(iconID),IMAGE_ICON,16,16,0),lpszToolTip)
+#define ADD_TOOLBAR_SEPARATOR pobj_ReleaseToolbar->Add(0,0,0)
+	//ボタン類を追加
+	ADD_TOOLBAR_BUTTON(IDM_RELEASECOMPILE,IDI_RELEASECOMPILE,"リリース コンパイル(F6)");
+	ADD_TOOLBAR_BUTTON(IDM_RELEASERUN,IDI_RELEASERUN,"実行");
+#undef ADD_TOOLBAR_SEPARATOR
+#undef ADD_TOOLBAR_BUTTON
+
+	//ページャー設定
+	Pager_SetChild(hReleaseToolbarPager,pobj_ReleaseToolbar->GetHandle());
+
+	//サブクラス化
+	extern WNDPROC OldStandardToolbarProc;
+	OldStandardToolbarProc=(WNDPROC)GetWindowLong(pobj_ReleaseToolbar->GetHandle(),GWL_WNDPROC);
+	SetWindowLong(pobj_ReleaseToolbar->GetHandle(),GWL_WNDPROC,(long)StandardToolbarProc);
+
+	lpszText[0]=0;
+	return hReleaseToolbarPager;
+#else //THETEXT
+	return 0;
+#endif //THETEXT
+}
+
+//コンパイラ選択コンボボックスをレバーに追加
+HWND AddBand_SelectCompiler(HWND hRebar,int num,char *lpszText){
+
+	//コンボボックスを生成
+	extern HINSTANCE hInst;
+	extern HWND hSelectCompilerCombo;
+	hSelectCompilerCombo=CreateWindow("COMBOBOX",NULL,
+		WS_CHILD|WS_VSCROLL|WS_VISIBLE|CBS_DROPDOWNLIST|CBS_DROPDOWN|CBS_HASSTRINGS|CBS_SORT,
+		0,0,0,120,hRebar,NULL,hInst,NULL);
+
+	//サブクラス化
+	extern WNDPROC OldSelectCompilerComboProc;
+	OldSelectCompilerComboProc=(WNDPROC)GetWindowLong(hSelectCompilerCombo,GWL_WNDPROC);
+	SetWindowLong(hSelectCompilerCombo,GWL_WNDPROC,(long)SelectCompilerComboProc);
+
+	//フォントを設定
+	extern HFONT hStatusFont;
+	SendMessage(hSelectCompilerCombo,WM_SETFONT,(WPARAM)hStatusFont,0);
+
+	//コンボボックスに文字列を挿入
+	SendMessage(hSelectCompilerCombo,CB_ADDSTRING,0,(long)"Win32");
+	if(IsWow64()) SendMessage(hSelectCompilerCombo,CB_ADDSTRING,0,(long)"Win64");
+
+	//Win32を選択
+	SendMessage(hSelectCompilerCombo,CB_SETCURSEL,0,0);
+
+	lpszText[0]=0;
+	return hSelectCompilerCombo;
+}
+
+HWND AddBand_WebSearch(HWND hRebar,int num,char *lpszText){
+	//コンボボックスを生成
+	extern HINSTANCE hInst;
+	extern HWND hWebSearchCombo;
+	hWebSearchCombo=CreateWindow("COMBOBOX",NULL,
+		WS_CHILD|WS_VSCROLL|WS_VISIBLE|CBS_DROPDOWN|CBS_HASSTRINGS|CBS_AUTOHSCROLL,
+		0,0,0,120,hRebar,NULL,hInst,NULL);
+
+	//サブクラス化
+	extern WNDPROC OldWebSearchProc;
+	OldWebSearchProc=(WNDPROC)GetWindowLong(hWebSearchCombo,GWL_WNDPROC);
+	SetWindowLong(hWebSearchCombo,GWL_WNDPROC,(long)WebSearchProc);
+	extern WNDPROC OldWebSearchEditProc;
+	OldWebSearchEditProc=(WNDPROC)GetWindowLong(GetWindow(hWebSearchCombo,GW_CHILD),GWL_WNDPROC);
+	SetWindowLong(GetWindow(hWebSearchCombo,GW_CHILD),GWL_WNDPROC,(long)WebSearchEditProc);
+
+	//フォントを設定
+	extern HFONT hStatusFont;
+	SendMessage(hWebSearchCombo,WM_SETFONT,(WPARAM)hStatusFont,0);
+
+	lstrcpy(lpszText,"WebSearch(F5):");
+
+
+
+	//Web検索文字列コンボボックスを初期化
+	int i;
+	SendMessage(hWebSearchCombo,CB_RESETCONTENT,0,0);
+	for(i=0;i<MAX_FINDLIST;i++){
+		if(pobj_nv->WebStr[i][0]=='\0') break;
+		SendMessage(hWebSearchCombo,CB_ADDSTRING,0,(long)pobj_nv->WebStr[i]);
+	}
+	SendMessage(hWebSearchCombo,CB_LIMITTEXT,8192,0);
+
+	return hWebSearchCombo;
+}
Index: /ProjectEditor/ClassTree.cpp
===================================================================
--- /ProjectEditor/ClassTree.cpp	(revision 3)
+++ /ProjectEditor/ClassTree.cpp	(revision 3)
@@ -0,0 +1,605 @@
+#include "Common.h"
+
+#if defined(JPN)
+//日本語
+#include "pj_msg_jpn.h"
+#else
+//英語
+#include "pj_msg_eng.h"
+#endif
+
+
+CClassTreeView *pobj_ClassTreeView;
+
+BOOL bSearchingClasses,bRetrySearchingClasses;
+
+
+int CClassTreeView::hash_default(LONG_PTR lpdata){
+	return lpdata%MAX_HASH;
+}
+void CClassTreeView::AddValidItem(HTREEITEM hItem,int iFileNum){
+	//ハッシュ値を取得
+	int key;
+	key=hash_default((LONG_PTR)hItem);
+
+	//格納位置を取得
+	TREEHASH *pth;
+	pth=&tree_data[key];
+	while(pth->hItem){
+		if(pth->hItem==hItem){
+			//既に存在するときは抜け出す
+			return;
+		}
+		if(pth->pNextData==0){
+			pth->pNextData=(TREEHASH *)HeapAlloc(hHeap,0,sizeof(TREEHASH));
+			pth=pth->pNextData;
+			break;
+		}
+		pth=pth->pNextData;
+	}
+
+	pth->hItem=hItem;
+	pth->iFileNum=iFileNum;
+	pth->pNextData=0;
+}
+
+BOOL CClassTreeView::delete_check(HTREEITEM hItem){
+	//ハッシュ値を取得
+	int key;
+	key=hash_default((LONG_PTR)hItem);
+
+	TREEHASH *pth;
+	pth=&tree_data[key];
+	while(pth->hItem){
+		if(pth->hItem==hItem) return 1;
+
+		if(pth->pNextData==0) break;
+		pth=pth->pNextData;
+	}
+	return 0;
+}
+
+void CClassTreeView::DeleteInvalidItems(HTREEITEM hItem){
+	HTREEITEM hChildItem;
+	while(hItem){
+		if(!delete_check(hItem)){
+			HTREEITEM hTemp;
+			hTemp=hItem;
+
+			hItem=TreeView_GetNextSibling(hTreeWnd,hItem);
+
+			TreeView_DeleteItem(hTreeWnd,hTemp);
+			continue;
+		}
+
+		hChildItem=TreeView_GetChild(hTreeWnd,hItem);
+		if(hChildItem){
+			DeleteInvalidItems(hChildItem);
+		}
+
+		hItem=TreeView_GetNextSibling(hTreeWnd,hItem);
+	}
+}
+
+void CClassTreeView::DeleteTreeHash(TREEHASH *pth){
+	if(pth->hItem && (iNowFile==-1 || iNowFile==pth->iFileNum)){
+		if(pth->pNextData){
+			DeleteTreeHash(pth->pNextData);
+			HeapDefaultFree(pth->pNextData);
+			pth->pNextData=0;
+		}
+		pth->hItem=0;
+	}
+}
+
+
+HTREEITEM CClassTreeView::insert(HTREEITEM hParentItem,int flag,char *lpszName,int iFileNum){
+	char temporary[255];
+
+	TVITEM tvItem;
+	tvItem.pszText=temporary;
+	tvItem.cchTextMax=255;
+	HTREEITEM hNextItem;
+	hNextItem=TreeView_GetChild(hTreeWnd,hParentItem);
+	while(hNextItem){
+		tvItem.mask=TVIF_HANDLE|TVIF_TEXT;
+		tvItem.hItem=hNextItem;
+		TreeView_GetItem(hTreeWnd,&tvItem);
+		if(lstrcmp(lpszName,tvItem.pszText)==0){
+			//既に挿入済みの場合
+			AddValidItem(hNextItem,iFileNum);
+			return hNextItem;
+		}
+
+		hNextItem=TreeView_GetNextSibling(hTreeWnd,hNextItem);
+	}
+
+
+	TV_INSERTSTRUCT tv;
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIS_EXPANDED ;
+	tv.hParent=hParentItem;
+	tv.item.pszText=lpszName;
+
+	if(flag==CTV_ROOT){
+		tv.item.iImage=3;
+		tv.item.iSelectedImage=3;
+	}
+	if(flag==CTV_FOLDER){
+		tv.item.iImage=0;
+		tv.item.iSelectedImage=0;
+	}
+	else if(flag==CTV_GLOBAL_PROC){
+		tv.item.iImage=5;
+		tv.item.iSelectedImage=5;
+	}
+	else if(flag==CTV_CLASS){
+		tv.item.iImage=2;
+		tv.item.iSelectedImage=2;
+	}
+	else if(flag==CTV_PUBLIC_MEMBER){
+		tv.item.iImage=4;
+		tv.item.iSelectedImage=4;
+	}
+	else if(flag==CTV_PUBLIC_METHOD){
+		tv.item.iImage=5;
+		tv.item.iSelectedImage=5;
+	}
+	else if(flag==CTV_PRIVATE_MEMBER){
+		tv.item.iImage=6;
+		tv.item.iSelectedImage=6;
+	}
+	else if(flag==CTV_PRIVATE_METHOD){
+		tv.item.iImage=7;
+		tv.item.iSelectedImage=7;
+	}
+
+	hNextItem=TreeView_InsertItem(hTreeWnd,&tv);
+	AddValidItem(hNextItem,iFileNum);
+	return hNextItem;
+}
+
+
+
+CClassTreeView::CClassTreeView(){
+	memset(this,0,sizeof(CClassTreeView));
+}
+CClassTreeView::~CClassTreeView(){
+	while(bSearchingClasses) Sleep(10);
+
+	iNowFile=-1;
+
+	int i;
+	for(i=0;i<MAX_HASH;i++){
+		DeleteTreeHash(&tree_data[i]);
+	}
+
+	if(pobj_ClassTreeView->pProcInfo){
+		//プロシージャ情報のメモリを解放
+		for(i=0;i<pobj_ClassTreeView->NumberOfProcedures;i++){
+			HeapDefaultFree(pobj_ClassTreeView->pProcInfo[i].name);
+		}
+		HeapDefaultFree(pobj_ClassTreeView->pProcInfo);
+		pobj_ClassTreeView->pProcInfo=0;
+	}
+}
+void CClassTreeView::init(HWND hwnd,int iFileNum){
+	hTreeWnd=hwnd;
+
+	iNowFile=iFileNum;
+
+	int i;
+	for(i=0;i<MAX_HASH;i++){
+		DeleteTreeHash(&tree_data[i]);
+	}
+}
+
+void CClassTreeView::InsertRootFolder(void){
+	extern PROJECTINFO ProjectInfo;
+	char temporary[VN_SIZE];
+	sprintf(temporary,"%s クラス",ProjectInfo.name);
+	hRootFolder=insert(
+		TVI_ROOT,
+		CTV_ROOT,
+		temporary,-1);
+}
+void CClassTreeView::InsertGlobalProcedureFolder(void){
+	hGlobalProcedureFolder=insert(
+		hRootFolder,
+		CTV_FOLDER,
+		"グローバル関数",-1);
+}
+
+HTREEITEM CClassTreeView::InsertGlobalProcedure(int flag,char *lpszName,int iFileNum){
+	return pobj_ClassTreeView->insert(
+		hGlobalProcedureFolder,
+		CTV_GLOBAL_PROC,
+		lpszName,
+		iFileNum);
+}
+
+HTREEITEM CClassTreeView::insert_code_item(HTREEITEM hParentItem,int flag,char *lpszName,int iFileNum,char *pBuf,int p){
+	int i4;
+	i4=NumberOfProcedures;
+	pProcInfo=(PROCINFO *)HeapReAlloc(hHeap,0,pProcInfo,sizeof(PROCINFO)*(i4+1));
+	pProcInfo[i4].name=(char *)HeapAlloc(hHeap,0,lstrlen(lpszName)+1);
+	lstrcpy(pProcInfo[i4].name,lpszName);
+	pProcInfo[i4].FileNum=iFileNum;
+
+	//コード位置
+	pProcInfo[i4].code_pos=p;
+
+	//ツリーアイテムを挿入
+	HTREEITEM hTempItem;
+	hTempItem=insert(
+		hParentItem,
+		flag,
+		lpszName,
+		iFileNum);
+
+	pProcInfo[i4].hTreeItem=hTempItem;
+
+	NumberOfProcedures++;
+
+	return hTempItem;
+}
+
+void CClassTreeView::InsertClassFolder(char *lpszName,int iFileNum,char *pBuf,int p){
+	hNowClassFolder=insert_code_item(hRootFolder,CTV_CLASS,lpszName,iFileNum,pBuf,p);
+}
+void CClassTreeView::InsertClassMember(int flag,char *lpszName,int iFileNum,char *pBuf,int p){
+	insert_code_item(hNowClassFolder,flag,lpszName,iFileNum,pBuf,p);
+}
+
+void CClassTreeView::finish(){
+	DeleteInvalidItems(TreeView_GetRoot(hTreeWnd));
+}
+
+
+void AnalysisClass(char *pBuf,int *p,int iFileNum){
+	int i2;
+	i2=*p;
+
+
+	CClassInfo *pobj_ClassInfo;
+	pobj_ClassInfo=new CClassInfo();
+
+	pobj_ClassInfo->Analyze(pBuf,p);
+
+
+	//クラスフォルダを挿入
+	pobj_ClassTreeView->InsertClassFolder(
+		pobj_ClassInfo->ClassName,
+		iFileNum,
+		pBuf,
+		i2);
+
+
+
+	///////////////////////////////
+	// メンバ及びメソッドを挿入
+	///////////////////////////////
+
+	int i;
+	for(i=0;i<pobj_ClassInfo->MemberNum;i++){
+		int flag;
+		if(pobj_ClassInfo->pMemberInfo[i].dwProc==0){
+			//メンバ変数
+			if(pobj_ClassInfo->pMemberInfo[i].dwAccess==ACCESS_PUBLIC){
+				//公開
+				flag=CTV_PUBLIC_MEMBER;
+			}
+			else{
+				//非公開
+				flag=CTV_PRIVATE_MEMBER;
+			}
+		}
+		else{
+			//メソッド
+			if(pobj_ClassInfo->pMemberInfo[i].dwAccess==ACCESS_PUBLIC){
+				//公開
+				flag=CTV_PUBLIC_METHOD;
+			}
+			else{
+				//非公開
+				flag=CTV_PRIVATE_METHOD;
+			}
+		}
+		pobj_ClassTreeView->InsertClassMember(flag,pobj_ClassInfo->pMemberInfo[i].pName,iFileNum,pBuf,pobj_ClassInfo->pMemberInfo[i].code_pos);
+	}
+
+
+	delete pobj_ClassInfo;
+	pobj_ClassInfo=0;
+}
+
+
+
+void SetClassTreeFromOneFile(char *lpszFilePath,int iFileNum){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i2,i3,i4,WndNum;
+	char *pBuf;
+	HWND hChild;
+	char temporary[GENERAL_SIZE];
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	while(hChild){
+		WndNum=GetWndNum(hChild);
+		if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+			if(lstrcmpi(MdiInfo[WndNum].path,lpszFilePath)==0) break;
+		}
+		hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+	}
+
+	if(hChild){
+		//すでに指定されたファイルが開かれている場合
+		pBuf=MdiInfo[WndNum].pmti->buffer;
+	}
+	else{
+		//開かれていない場合
+		pBuf=ReadBuffer(lpszFilePath);
+		if(!pBuf) pBuf=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+	}
+	for(i2=0;;i2++){
+		if(pBuf[i2]=='\0') break;
+		while(pBuf[i2]=='\r'&&pBuf[i2+1]=='\n'&&pBuf[i2+2]=='\r'&&pBuf[i2+3]=='\n') i2+=2;
+		if(i2==0||(pBuf[i2]=='\r'&&pBuf[i2+1]=='\n')){
+			if(pBuf[i2]=='\r'&&pBuf[i2+1]=='\n') i2+=2;
+			while(pBuf[i2]>='0'&&pBuf[i2]<='9') i2++;
+			while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+
+			i4=i2;
+			for(i3=0;;i2++,i3++){
+				if(!IsVariableChar(pBuf[i2])){
+					temporary[i3]=0;
+					break;
+				}
+				temporary[i3]=pBuf[i2];
+			}
+			if(pBuf[i2]=='\0') break;
+
+			if(lstrcmpi(temporary,"Class")==0||
+				lstrcmpi(temporary,"Type")==0||
+				lstrcmpi(temporary,"Interface")==0){
+
+				/////////////////////////////
+				// クラスの解析
+				/////////////////////////////
+				AnalysisClass(pBuf,&i4,iFileNum);
+
+				i2=i4-1;
+				continue;
+			}
+
+			int sw;
+			if(lstrcmpi(temporary,"Sub")==0) sw=1;
+			else if(lstrcmpi(temporary,"Function")==0) sw=2;
+			else sw=0;
+
+			if(sw){
+				//Sub/Function
+				while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+				for(i3=0;;i2++,i3++){
+					if(!IsVariableChar(pBuf[i2])){
+						temporary[i3]=0;
+						break;
+					}
+					temporary[i3]=pBuf[i2];
+				}
+
+				if(lstrcmpi(temporary,"Export")==0){
+					//Export修飾子はとばす
+					while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+
+					for(i3=0;;i2++,i3++){
+						if(!IsVariableChar(pBuf[i2])){
+							temporary[i3]=0;
+							break;
+						}
+						temporary[i3]=pBuf[i2];
+					}
+				}
+
+				i4=pobj_ClassTreeView->NumberOfProcedures;
+				pobj_ClassTreeView->pProcInfo=(PROCINFO *)HeapReAlloc(hHeap,0,pobj_ClassTreeView->pProcInfo,sizeof(PROCINFO)*(i4+1));
+				pobj_ClassTreeView->pProcInfo[i4].name=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+				lstrcpy(pobj_ClassTreeView->pProcInfo[i4].name,temporary);
+				pobj_ClassTreeView->pProcInfo[i4].FileNum=iFileNum;
+
+				//定義行の選択範囲
+				pobj_ClassTreeView->pProcInfo[i4].code_pos=i2;
+
+				//パラメータ部
+				while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+				if(pBuf[i2]=='('){
+					int IsStr,PareNum;
+					for(i2++,i3=0,IsStr=0,PareNum=0;;i2++,i3++){
+						if(pBuf[i2]=='\"') IsStr^=1;
+						if(pBuf[i2]=='('&&IsStr==0) PareNum++;
+						if(pBuf[i2]==')'&&IsStr==0){
+							PareNum--;
+							if(PareNum<0){
+								temporary[i3]=0;
+								break;
+							}
+						}
+						if(pBuf[i2]=='\0') break;
+						temporary[i3]=pBuf[i2];
+					}
+					//temporaryはパラメータの内容が格納されるが、不要
+				}
+
+				for(;;i2++){
+					if(IsCommandDelimitation(pBuf,i2)){
+						break;
+					}
+					if((pBuf[i2]=='a'||pBuf[i2]=='A')&&(pBuf[i2+1]=='s'||pBuf[i2+1]=='S')&&(pBuf[i2+2]==' '||pBuf[i2+2]=='\t')){
+						i2+=3;
+						while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+						for(i3=0;;i2++,i3++){
+							if(!IsVariableChar(pBuf[i2])){
+								temporary[i3]=0;
+								break;
+							}
+							temporary[i3]=pBuf[i2];
+						}
+						//temporaryには型情報が格納されるが、不要
+						break;
+					}
+				}
+
+				//ツリーアイテムを挿入
+				HTREEITEM hTempItem;
+				hTempItem=pobj_ClassTreeView->InsertGlobalProcedure(
+					CTV_GLOBAL_PROC,
+					pobj_ClassTreeView->pProcInfo[i4].name,
+					iFileNum);
+				pobj_ClassTreeView->pProcInfo[i4].hTreeItem=hTempItem;
+
+				pobj_ClassTreeView->NumberOfProcedures++;
+
+				i2--;
+			}
+		}
+	}
+
+	if(!hChild) HeapDefaultFree(pBuf);
+}
+
+void SetProcedureTreeData(void *temp_iFileNum){
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	char temporary[MAX_PATH];
+	BOOL bExpand;
+	TVITEM tvItem;
+	SCROLLINFO si;
+
+	int iFileNum;
+	iFileNum=(int)temp_iFileNum;
+
+	if(bSearchingClasses){
+		bRetrySearchingClasses=1;
+		_endthread();
+		return;
+	}
+	bSearchingClasses=1;
+
+	if(pobj_ClassTreeView->pProcInfo){
+wait_repeat:
+		Sleep(700);
+		if(bRetrySearchingClasses){
+			bRetrySearchingClasses=0;
+			goto wait_repeat;
+		}
+
+		PROCINFO *pNewProcInfo;
+		pNewProcInfo=(PROCINFO *)HeapAlloc(hHeap,0,pobj_ClassTreeView->NumberOfProcedures*sizeof(PROCINFO));
+		int NewProcNum;
+		NewProcNum=0;
+
+		//プロシージャ情報のメモリを解放
+		for(i=0;i<pobj_ClassTreeView->NumberOfProcedures;i++){
+			if(iFileNum==-1 || iFileNum==pobj_ClassTreeView->pProcInfo[i].FileNum){
+				HeapDefaultFree(pobj_ClassTreeView->pProcInfo[i].name);
+			}
+			else{
+				pNewProcInfo[NewProcNum]=pobj_ClassTreeView->pProcInfo[i];
+				NewProcNum++;
+			}
+		}
+		HeapDefaultFree(pobj_ClassTreeView->pProcInfo);
+
+		pobj_ClassTreeView->pProcInfo=pNewProcInfo;
+		pobj_ClassTreeView->NumberOfProcedures=NewProcNum;
+	}
+	else{
+		pobj_ClassTreeView->pProcInfo=(PROCINFO *)HeapAlloc(hHeap,0,1);
+		pobj_ClassTreeView->NumberOfProcedures=0;
+	}
+
+	extern HWND hProcedureTreeView;
+	tvItem.hItem=TreeView_GetRoot(hProcedureTreeView);
+	if(tvItem.hItem){
+		TreeView_GetItem(hProcedureTreeView,&tvItem);
+		if(tvItem.state&TVIS_EXPANDED){
+			bExpand=1;
+
+			si.cbSize=sizeof(SCROLLINFO);
+			si.fMask=SIF_POS;
+			GetScrollInfo(hProcedureTreeView,SB_VERT,&si);
+		}
+		else bExpand=0;
+	}
+	else bExpand=1;
+
+
+	pobj_ClassTreeView->init(hProcedureTreeView,iFileNum);
+
+	//ルートフォルダ
+	pobj_ClassTreeView->InsertRootFolder();
+
+	//グローバル関数フォルダ
+	pobj_ClassTreeView->InsertGlobalProcedureFolder();
+
+
+	//描画をロック
+	LockWindowUpdate(hProcedureTreeView);
+
+	if(iFileNum==-1){
+		//プロジェクトのすべてのファイルを解析
+		for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
+			ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
+
+			SetClassTreeFromOneFile(temporary,i);
+		}
+
+		//不要になったアイテムを除去
+		pobj_ClassTreeView->finish();
+	}
+	else{
+		/////////////////////////////////
+		// 編集中のファイルのみを解析
+		/////////////////////////////////
+
+		ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[iFileNum]->GetFullPath(temporary);
+
+		SetClassTreeFromOneFile(temporary,iFileNum);
+	}
+
+	//不要になったアイテムを除去
+	pobj_ClassTreeView->finish();
+
+	//描画ロックを解除
+	LockWindowUpdate(0);
+
+
+	if(bExpand){
+		TreeView_Expand(hProcedureTreeView,pobj_ClassTreeView->hRootFolder,TVE_EXPAND);
+
+		SetScrollInfo(hProcedureTreeView,SB_VERT,&si,1);
+	}
+
+
+	bSearchingClasses=0;
+	if(bRetrySearchingClasses){
+		bRetrySearchingClasses=0;
+		ResetClassTree(iFileNum);
+	}
+
+	if(pobj_ClassTreeView->bCloseSwitch){
+		//コード解析中に終了ボタンが押されたとき
+		PostMessage(hOwner,WM_CLOSE,0,0);
+	}
+	if(pobj_ClassTreeView->bShowSwitch){
+		//コード解析中にクラスビューがダブルクリックされたとき
+		extern HWND hProjectViewTab;
+		PostMessage(hProjectViewTab,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
+		pobj_ClassTreeView->bShowSwitch=0;
+	}
+
+	_endthread();
+}
+void ResetClassTree(int iFileNum){
+	_beginthread(SetProcedureTreeData,0,(void *)iFileNum);
+}
Index: /ProjectEditor/CodeFormatter.cpp
===================================================================
--- /ProjectEditor/CodeFormatter.cpp	(revision 3)
+++ /ProjectEditor/CodeFormatter.cpp	(revision 3)
@@ -0,0 +1,249 @@
+#include "common.h"
+
+// インデント関連
+
+int IsIndentAdditionCommand_FromBuffer(char *buffer);
+int IsIndentDecreaseCommand_FromBuffer(char *buffer);
+
+char *CodeFormatter(char *lpszReadBuffer){
+	int WndNum;
+	WndNum=GetNowWndNum();
+
+	if(MdiInfo[WndNum].DocType!=WNDTYPE_BASIC){
+		goto NonFormater;
+	}
+
+	char *lpszTempReadBuffer;
+	lpszTempReadBuffer=(char *)HeapAlloc(hHeap,0,lstrlen(lpszReadBuffer)+1);
+	lstrcpy(lpszTempReadBuffer,lpszReadBuffer);
+
+	//CRLFをLFに変換
+	ChangeReturnCode(lpszTempReadBuffer);
+
+	DeleteComment(lpszTempReadBuffer);
+
+	//カッコの相互関係をチェック
+	if(!CheckParenthesis(lpszTempReadBuffer)){
+		HeapDefaultFree(lpszTempReadBuffer);
+		goto NonFormater;
+	}
+
+
+
+	////////////////////////////////////
+	// インデントの初期TAB文字数を取得
+	////////////////////////////////////
+
+	char *pBuf;
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	//カーソルバッファ位置を取得
+	int i,i2;
+	i=GetBufferIndexFromCaretPos(pBuf,
+		MdiInfo[WndNum].pmti->StartCaretPos.x,
+		MdiInfo[WndNum].pmti->StartCaretPos.y);
+	int StartX=MdiInfo[WndNum].pmti->StartCaretPos.x;
+
+	//現在の行のインデントをコピー（iFirstIndent_Speciallyにタブ数を格納）
+	int iFirstIndent_Specially=0;
+	for(i2=i;i2>0;i2--){
+		if(pBuf[i2-1]=='\r'&&pBuf[i2]=='\n'){
+
+			i=i2-1;
+
+			i2++;
+
+			int x=0;
+			while(pBuf[i2]=='\t'&&x<StartX){
+				i2++;
+				x++;
+				iFirstIndent_Specially++;
+			}
+
+			break;
+		}
+	}
+
+	//前の行のインデントをコピー（iIndentにタブ数を格納）
+	for(;i>0;i--){
+		if(
+			pBuf[i-1]=='\r'&&pBuf[i]=='\n'&&
+			(!(pBuf[i+1]=='\r'&&pBuf[i+2]=='\n'))
+			){
+			i++;
+			break;
+		}
+	}
+
+	int iIndent;
+	for(iIndent=0;;iIndent++){
+		if(pBuf[i+iIndent]!='\t') break;
+	}
+
+	if(MdiInfo[WndNum].DocType==WNDTYPE_BASIC){
+		//インデント追加のコマンドかどうかを判断
+		if(IsIndentAdditionCommand_FromBuffer(pBuf+i+iIndent)) iIndent++;
+	}
+
+
+
+	//////////////////////////////
+	// 各行のTAB文字数を計算
+	//////////////////////////////
+
+	int *pTabs,LineCount=0;
+	pTabs=(int *)HeapAlloc(hHeap,0,(lstrlen(lpszTempReadBuffer)+1)*sizeof(int));
+
+	char *pTemp;
+	pTemp=(char *)HeapAlloc(hHeap,0,lstrlen(lpszTempReadBuffer)+1);
+
+	i=0;
+	BOOL bInterface=0;
+	while(1){
+		while(lpszTempReadBuffer[i]=='\t'||lpszTempReadBuffer[i]==' ') i++;
+
+		int PareNum,BracketNum;
+		PareNum=0,BracketNum=0;
+
+		pTabs[LineCount]=0;
+
+		int MultiLine=0;
+		for(i2=0;;i++,i2++){
+
+			if(lpszTempReadBuffer[i-1]=='('||lpszTempReadBuffer[i-1]=='[') PareNum++;
+			else if(lpszTempReadBuffer[i-1]==')'||lpszTempReadBuffer[i-1]==']') PareNum--;
+
+			if(lpszTempReadBuffer[i]=='\n'||lpszTempReadBuffer[i]=='\0'){
+				if((lpszTempReadBuffer[i-1]=='('||lpszTempReadBuffer[i-1]==',')&&lpszTempReadBuffer[i]){
+					//パラメータ改行
+
+					i++;
+					MultiLine++;
+
+					pTabs[LineCount+MultiLine]=PareNum;
+
+					while(lpszTempReadBuffer[i]=='\n'){
+						i++;
+						MultiLine++;
+
+						pTabs[LineCount+MultiLine]=PareNum;
+					}
+					continue;
+				}
+				if(lpszTempReadBuffer[i-1]=='_'&&lpszTempReadBuffer[i]){
+					//任意改行
+					i++;
+					i2--;
+
+					MultiLine++;
+
+					pTabs[LineCount+MultiLine]=1;
+					continue;
+				}
+
+				pTemp[i2]=0;
+				break;
+			}
+			pTemp[i2]=lpszTempReadBuffer[i];
+		}
+
+
+		//インデント減少コマンドかどうかを判定
+		int f;
+		if(f=IsIndentDecreaseCommand_FromBuffer(pTemp)){
+			if(iIndent>0) iIndent--;
+			if(f==2){
+				if(iIndent>0) iIndent--;
+			}
+
+			if(f==3) bInterface=0;
+		}
+
+		if(iFirstIndent_Specially!=-1){
+			if(iIndent-iFirstIndent_Specially<0) iFirstIndent_Specially=iIndent;
+
+			pTabs[LineCount]+=iIndent-iFirstIndent_Specially;
+
+			iFirstIndent_Specially=-1;
+		}
+		else pTabs[LineCount]+=iIndent;
+		LineCount++;
+
+		while(MultiLine){
+			pTabs[LineCount]+=iIndent;
+			LineCount++;
+
+			MultiLine--;
+		}
+
+
+
+		//インデント増加コマンドかどうかを判定
+		if((f=IsIndentAdditionCommand_FromBuffer(pTemp))&&bInterface==0){
+			iIndent++;
+			if(f==2) iIndent++;
+
+			if(f==3) bInterface=1;
+		}
+
+
+		if(lpszTempReadBuffer[i]=='\0') break;
+		i++;
+	}
+
+
+
+	//////////////////////////
+	// インデント整形
+	//////////////////////////
+
+	char *lpszNewBuffer,temp2[1024];
+	lpszNewBuffer=(char *)HeapAlloc(hHeap,0,lstrlen(lpszReadBuffer)+8192);
+	lpszNewBuffer[0]=0;
+
+	i=0;
+	bInterface=0;
+	LineCount=0;
+	while(1){
+		while(lpszReadBuffer[i]=='\t'||lpszReadBuffer[i]==' ') i++;
+
+		for(i2=0;;i++,i2++){
+
+			if(IS_RETURN(lpszReadBuffer,i)||lpszReadBuffer[i]=='\0'){
+				pTemp[i2]=0;
+				break;
+			}
+			pTemp[i2]=lpszReadBuffer[i];
+		}
+
+
+		memset(temp2,'\t',pTabs[LineCount]);
+		temp2[pTabs[LineCount]]=0;
+		LineCount++;
+
+		lstrcat(lpszNewBuffer,temp2);
+		lstrcat(lpszNewBuffer,pTemp);
+
+
+
+		if(lpszReadBuffer[i]=='\0') break;
+		i+=2;
+
+		lstrcat(lpszNewBuffer,"\r\n");
+	}
+
+	HeapDefaultFree(pTemp);
+	HeapDefaultFree(lpszTempReadBuffer);
+
+	HeapDefaultFree(pTabs);
+
+	return lpszNewBuffer;
+
+
+
+NonFormater:
+	//インデント整形は行わない
+	lpszNewBuffer=(char *)HeapAlloc(hHeap,0,lstrlen(lpszReadBuffer)+1);
+	lstrcpy(lpszNewBuffer,lpszReadBuffer);
+	return lpszNewBuffer;
+}
Index: /ProjectEditor/Common.h
===================================================================
--- /ProjectEditor/Common.h	(revision 3)
+++ /ProjectEditor/Common.h	(revision 3)
@@ -0,0 +1,1286 @@
+#define STRICT
+#define OEMRESOURCE
+#define _CRT_SECURE_NO_DEPRECATE	//セキュリティ警告を出さない
+#define _CRT_NONSTDC_NO_DEPRECATE
+#include <windows.h>
+#include <stdio.h>
+#include <string.h>
+#include <commctrl.h>
+#include "../htmlhelp.h"
+#include <shlobj.h>
+#include <zmouse.h>
+#include <math.h>
+#include <limits.h>
+#include <process.h>
+#include <wininet.h>
+#include "nkf_class.h"
+#include "WebSearch.h"
+#include "ruler.h"
+#include "TabCtrl.h"
+#include "ExtensionLink.h"
+#include "HtmlAnalysis.h"
+#include "FileTree.h"
+#include "menu.h"
+#include "LuxCtrl.h"
+#include "BREGEXP.H"
+#include "../BasicCompiler32/CommandValue.h"
+#include "../BasicCompiler_Common/BasicFixed.h"
+
+
+typedef struct _charrange { 
+    LONG cpMin;
+    LONG cpMax;
+} CHARRANGE;
+
+
+#ifdef THETEXT
+#else
+#include "Attach.h"
+#include "Debugger.h"
+#endif
+
+
+#pragma comment(lib, "wininet.lib")
+
+
+
+#ifdef THETEXT
+
+////////////////////////////
+// TheTextのバージョン情報
+////////////////////////////
+#define APPLICATION_NAME "TheText"
+#define VERSION_APPLI_NAME APPLICATION_NAME
+#define VERSION_STRING "1.02"
+
+#else
+
+/////////////////////////////////////////////////
+// ActiveBasic/ProjectEditorのバージョン情報
+/////////////////////////////////////////////////
+#define APPLICATION_NAME "ActiveBasic 5.0"
+#define VERSION_APPLI_NAME APPLICATION_NAME
+#define VERSION_STRING "5.00.00 β8"
+
+#endif
+
+
+//シリアルIDから算出されるハッシュ値
+//シリアルID = 7641325089125189
+#define SERIAL_HASH_64 183391802137311458
+
+
+
+#define WIN32_COMPILER_NAME "BasicCompiler32.exe"
+#define WIN64_COMPILER_NAME "BasicCompiler64.exe"
+
+
+#ifndef IMAGE_FILE_MACHINE_AMD64
+#define IMAGE_FILE_MACHINE_AMD64             0x8664  // AMD64 (K8)
+#endif
+
+
+#if defined(JPN)
+
+#ifdef THETEXT
+//TheText日本語
+#include "../res_TheText/resource.h"
+#include "common_msg_jpn.h"
+#else
+//日本語
+#include "../res/resource.h"
+#include "common_msg_jpn.h"
+#endif
+
+#else
+//英語
+#include "../res_e/resource.h"
+#include "common_msg_eng.h"
+#endif
+
+//アイコンリソース
+#include "../icon_res/resource.h"
+
+
+
+
+#define GENERAL_SIZE	8192
+#define VN_SIZE			512
+#define MAX_ARRAYDIM	16
+
+#define MAX_WNDNUM 255
+
+
+#ifdef _AMD64_
+#else
+typedef long LONG_PTR;
+typedef DWORD ULONG_PTR;
+#endif
+
+//ファイルタイプ
+#define FT_BASICPROGRAM	1
+#define FT_SUBPROGRAM	2
+#define FT_TEXT			3
+#define FT_PROJECT		4
+#define FT_ICON			5
+#define FT_HTML			6
+#define FT_OTHER		0
+
+#define BMPNUM_STANDARDTOOLBAR	10		//hDefaultToolbarのビットマップ数
+#define SEPNUM_STANDARDTOOLBAR	4		//hDefaultToolbarのセパレータ数
+#define BMPNUM_DEBUGGERTOOLBAR		8		//hDebuggerToolbarのビットマップ数
+#define SEPNUM_DEBUGGERTOOLBAR		2		//hDebuggerToolbarのセパレータ数
+#define BMPNUM_RADTOOLBAR		18		//コントロール挿入用ツールバーのビットマップ数（区切り用BMPを最後の1つに用意する）
+#define SEPNUM_RADTOOLBAR		3		//コントロール挿入用ツールバーのセパレータ数
+
+//MDIクライアントウィンドウ下のドキュメントウィンドウタイプ
+#define WNDTYPE_BASIC		1
+#define WNDTYPE_TEXT		2
+#define	WNDTYPE_RAD			3
+#define WNDTYPE_MENU		4
+#define WNDTYPE_ICONEDIT	5
+#define WNDTYPE_HTML		6
+
+#define IS_DOCUMENT_TEXT(a) (a==WNDTYPE_BASIC||a==WNDTYPE_TEXT||a==WNDTYPE_HTML)
+
+#define IS_RETURN(buffer,p) (buffer[p]=='\r'&&buffer[p+1]=='\n')
+#define IS_BLANK(c) (c==' '||c=='\t')
+
+//Rebarコントロールの個数（レバー追加）
+#define MAX_REBARBANDS			5
+
+//RebarコントロールのID（レバー追加）
+#define ID_DOCCOMBO				1
+#define ID_STANDARDTOOLBAR		2
+#define ID_RELEASETOOLBAR		3
+#define ID_DEBUGGERTOOLBAR		4
+#define ID_SELECTCOMPILERCOMBO	5
+#define ID_WEB_SEARCH			6
+
+//検索コンボボックスの最大リスト数
+#define MAX_FINDLIST	20
+
+#define ID_FIRSTCHILD 100
+
+
+//タブカラー
+#define TABCOLOR_GRAY		RGB(230,230,230)	//灰色
+#define TABCOLOR_WHITE		RGB(255,255,255)	//白
+#define TABCOLOR_RED		RGB(255,200,200)	//赤
+#define TABCOLOR_GREEN		RGB(200,255,200)	//緑
+#define TABCOLOR_BLUE		RGB(200,220,255)	//青
+#define TABCOLOR_YELLOW		RGB(255,255,180)	//黄色
+
+
+//////////////////////////////////////////
+// BasicCompiler、ProjectEditor共通の定数
+//////////////////////////////////////////
+
+//サイズ変更枠の太さ
+#define LEVER_THICK 5
+
+#define WM_SHOWERROR			WM_USER+70	//エラー表示メッセージ
+
+#define WM_SETCOMPILEVIEW		WM_USER+71	//コンパイラウィンドウが表示されたとき
+#define WM_DESTROYCOMPILEVIEW	WM_USER+72	//コンパイラウィンドウが破棄されたとき
+
+#define WM_SETDEBUGGERBASE		WM_USER+73	//デバッガベースウィンドウが表示されたとき
+#define WM_DESTROYDEBUGGERBASE	WM_USER+74	//デバッガベースウィンドウが破棄されたとき
+
+#define WM_SETDEBUGGERVIEW		WM_USER+75	//デバッガウィンドウが表示されたとき
+#define WM_DESTROYDEBUGGERVIEW	WM_USER+76	//デバッガウィンドウが表示されたとき
+
+///////////////////////////////////////////
+
+
+#define WM_RESETCARETPOS		WM_USER+80	//オートスクロールスレッドからのキャレット設定
+
+#define WM_SEARCH_TAB_CREATE	WM_USER+90	//Web検索のタブアイテムの生成メッセージ
+#define WM_SEARCH_TAB_CLOSE		WM_USER+91	//Web検索のタブアイテムの破棄メッセージ
+
+//SideWeb
+#define WM_BROWS_CREATE  WM_USER+100
+#define WM_BROWS_DESTROY WM_USER+101
+#define WM_BROWS_GO      WM_USER+102
+#define WM_BROWS_NAVI    WM_USER+103
+
+
+
+#define MAX_HASH 32768
+
+
+//////////////////////////////////
+// メインウィンドウのタイマーID
+
+#define ID_TIMER_BACKUP	10
+#define ID_DEBUGSAFTY	20
+
+// ここまで
+//////////////////////////////////
+
+
+
+extern HANDLE hHeap;
+extern HINSTANCE hInst,hResInst,hIconResInst;
+extern HWND hOwner;
+extern HWND hClient;
+extern int ScreenX,ScreenY;
+extern char pj_editor_Dir[MAX_PATH];
+
+extern BOOL bProfessional;
+
+
+//アルファブレンド用のAPI
+#define WS_EX_LAYERED 0x00080000
+#define LWA_ALPHA 0x00000002
+typedef BOOL (WINAPI *FWINLAYER)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags );
+
+
+
+//新規プロジェクトのベース
+#define BASE_VOID	0
+#define BASE_PROMPT 1
+#define BASE_NORMAL 2
+
+struct POINTANDSIZE{
+	POINT pos;
+	SIZE size;
+};
+
+
+
+//////////////////////////////////////////
+// リソース ヘッダ（アイコン、カーソル用）
+typedef struct{
+	WORD idReserved;
+	WORD idType;
+	WORD idCount;
+}ICONDIR,CURSORDIR;
+
+////////////////////////////
+//.icoファイルのヘッダ情報
+struct ICONDIRENTRY{
+	BYTE bWidth;
+	BYTE bHeight;
+	BYTE bColorCount;
+	BYTE bReserved;
+	WORD wPlanes;
+	WORD wBitCount;
+	DWORD dwBytesInRes;
+	DWORD dwImageOffset;
+};
+
+
+/////////////////////
+//MDIウィンドウ情報
+
+#define MAX_UNDONUM 300//512未完成
+#define MAX_ICONEDIT_UNDONUM 32
+
+#define TEXTEDIT_UNDO_KEY		1
+#define TEXTEDIT_UNDO_PASTE		2
+#define TEXTEDIT_UNDO_SELKEY	3
+struct TEXTEDIT_UNDOSTATE{
+	int NowPos;
+	int Command[MAX_UNDONUM];
+	char *KeyStr[MAX_UNDONUM];
+	char *DelStr[MAX_UNDONUM];
+	CHARRANGE Range[MAX_UNDONUM];
+	CHARRANGE DelRange[MAX_UNDONUM];
+};
+
+struct RAD_UNDOSTATE_NAME{
+	char *name;
+	char *HandleName;
+	char *CallBackName;
+};
+#define RAD_UNDO_INSERTWND	1
+#define RAD_UNDO_DELETEWND	2
+#define RAD_UNDO_INSERTITEM	3
+#define RAD_UNDO_DELETEITEM	4
+#define RAD_UNDO_NAME		5
+#define RAD_UNDO_CAPTION	6
+#define RAD_UNDO_FONT		7
+#define RAD_UNDO_BGCOLOR	8
+#define RAD_UNDO_WINDOWMENU	9
+#define RAD_UNDO_ICONRES	10
+#define RAD_UNDO_STYLE		11
+#define RAD_UNDO_EXSTYLE	12
+#define RAD_UNDO_POSITION	13
+#define RAD_UNDO_IMAGESTATE	14
+#define RAD_UNDO_TYPE		15
+struct RAD_UNDOSTATE{
+	int NowPos;
+	int Command[MAX_UNDONUM];
+	int SelectItemNum[MAX_UNDONUM];
+	DWORD lpdwData[MAX_UNDONUM];
+};
+
+#define MAX_RAD_SELITEM	255
+struct MDIRADINFO{
+	//Radツール用
+
+	HWND hTools;
+
+	HWND hProperty;
+	HWND hProp_Dlg;
+
+	HWND hSupport;
+
+	HWND hRad;
+
+	HBITMAP hBitmap;
+	HBITMAP hOldBitmap;
+	HDC hMemDC;
+	int SelectingItem[MAX_RAD_SELITEM];
+	int ButtonSelect;
+
+	//ウィンドウクライアント領域
+	POINT ClientPos;
+	SIZE ClientSize;
+
+	//変更情報
+	RAD_UNDOSTATE undo;
+};
+
+struct MDIMENUINFO{
+	HWND hList;
+	HWND hMenuEdit;
+	HWND hEdit_Dlg;
+};
+
+#define ICONTYPE_16_16	0
+#define ICONTYPE_16_256	1
+#define ICONTYPE_32_16	2
+#define ICONTYPE_32_256	3
+struct ICONEDIT_UNDOSTATE{
+	int NowPos;
+	BYTE *lpData[MAX_ICONEDIT_UNDONUM];
+};
+struct MDIICONEDITINFO{
+	HWND hMain;
+	HWND hToolDlg;
+	HWND hButtonsDlg;
+	HWND hColorDlg;
+
+	HDC memdc;
+	HBITMAP hMemBmp;
+
+	HBITMAP hSelectingBmp;
+	int SelectLevel;
+	RECT DraggingRect;
+
+	int num;
+	int SelectIconNum;
+	union{
+		BYTE *pIconImage[8];	//アイコンのイメージデータ配列（マップ配列、カラー配列、マスク配列）
+		BITMAPINFOHEADER *pBmpHdr[8];
+	};
+	DWORD dwBytesInRes[8];
+
+	DWORD NowTool;
+	COLORREF MainColor;
+	COLORREF SubColor;
+
+	ICONEDIT_UNDOSTATE undo[8];
+	BOOL bModify;
+};
+
+struct MDITEXTEDITINFO{
+	HWND hEdit;
+
+	//Web検索ウィンドウ
+	CWebResult *pobj_WebResult;
+
+	//ルーラーウィンドウ
+	CRuler *pobj_Ruler;
+
+	//アイコン
+	HICON hIcon;
+
+	char *buffer;
+	COLORREF *pColorRef;
+	int iUnderStart;
+	int iUnderEnd;
+
+	POINT StartCaretPos;
+	POINT EndCaretPos;
+	int Temp_UpDown_CaretXPos;
+	BOOL bAutoScroll;
+
+	//コントロールタブスペースの幅と行番号の文字数
+	int iWidth_ControlTabSpace;
+	int iLineNumberTextCount;
+
+	int iCharCode;
+	int iLfCode;
+
+	BOOL bModify;
+};
+
+struct MDIINFO{
+	HWND hwnd;
+	int DocType;
+	char *title;
+	char *path;
+
+	union{
+		MDIRADINFO *MdiRadInfo;
+		MDIMENUINFO *MdiMenuInfo;
+		MDIICONEDITINFO *MdiIconEditInfo;
+		MDITEXTEDITINFO *pmti;
+	};
+
+	char *IndentStr;
+	TEXTEDIT_UNDOSTATE *edit_undo;
+};
+extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+//RADツールのマウスドラッグ
+#define FRAME_CHANGEPOS_START	1 //----- ここから -----
+#define FRAME_UPPER_LEFT	1
+#define FRAME_UPPER_RIGHT	2
+#define FRAME_LOWER_LEFT	3
+#define FRAME_LOWER_RIGHT	4
+#define FRAME_LEFT			5
+#define FRAME_RIGHT			6
+#define FRAME_UPPER			7
+#define FRAME_LOWER			8
+#define FRAME_INSIDE		9
+#define FRAME_CHANGEPOS_END		9 //----- ここまで -----
+#define ITEM_MAKING			10
+#define SELECTING_FRAME		11
+
+//アイテムの大きさの限界値
+#define MIN_ITEM_X	12
+#define MIN_ITEM_Y	9
+
+//選択アイテム
+#define SELECT_WINDOW	-1
+#define NON_TOOL		-1
+
+struct RADINFO{
+	int NowDragging;
+	POINT DragStartPos;
+	RECT DragStartRect[MAX_RAD_SELITEM];
+	RECT DraggingRect[MAX_RAD_SELITEM];
+	RECT OldDraggingRect[MAX_RAD_SELITEM];
+};
+
+
+//////////////////
+//リソース情報
+struct RESITEMINFO{
+	char *IdName;
+	char *path;
+
+	HTREEITEM hTreeItem;
+};
+struct RESOURCEINFO{
+	int NumberOfCursorRes;
+	RESITEMINFO *pCursorResInfo;
+	HTREEITEM hCursorTreeItem;
+
+	int NumberOfBitmapRes;
+	RESITEMINFO *pBitmapResInfo;
+	HTREEITEM hBitmapTreeItem;
+
+	int NumberOfIconRes;
+	RESITEMINFO *pIconResInfo;
+	HTREEITEM hIconTreeItem;
+};
+
+
+////////////////////
+//プロジェクト情報
+
+#define PROJECT_VERSION	10
+
+class CFileInfo{
+public:
+	char *m_path;
+	HTREEITEM m_hTreeItem;
+	CFileInfo(char *path,HTREEITEM hTreeItem);
+	~CFileInfo();
+
+	void GetFullPath(char *buffer);
+};
+class CDBFileInfo{
+public:
+	int iNum;
+	CFileInfo **ppobj_FileInfo;
+
+	CDBFileInfo();
+	~CDBFileInfo();
+
+	void add(char *path,HTREEITEM hTreeItem);
+	void del(HTREEITEM hTreeItem);
+	char *GetPath(HTREEITEM hTreeItem);
+	BOOL IsMainFile(HTREEITEM hTreeItem);
+
+	void SetTreeItem(int index,HTREEITEM hTreeItem);
+	void ResetTree(void);
+
+	BOOL dupli_check(char *path);
+};
+struct FILEINFO{
+	char *pPath;
+	HTREEITEM hTreeItem;
+};
+
+struct PROCINFO{
+	char *name;
+	int FileNum;
+	HTREEITEM hTreeItem;
+
+	int code_pos;
+};
+struct INCPROCINFO{
+	char *name;
+	char *Parms;
+	char *type;
+};
+
+//ダイアログアイテムの種類
+#define CT_BUTTON		1
+#define CT_CHECKBOX		2
+#define CT_COMBOBOX		3
+#define CT_EDIT			4
+#define CT_GROUPBOX		5
+#define CT_HSCROLLBAR	6
+#define CT_IMAGEBOX		7
+#define CT_LISTBOX		8
+#define CT_LISTVIEW		9
+#define CT_RADIOBUTTON	10
+#define CT_STATIC		11
+#define CT_TREEVIEW		12
+#define CT_VSCROLLBAR	13
+#define CT_UPDOWN		14
+#define CT_PROGRESSBAR	15
+#define CT_TRACKBAR		16
+#define CT_MENU			99
+
+//イベント タイプ
+#define EVENTTYPE_DEFAULT	0
+#define EVENTTYPE_MENU		1
+#define EVENTTYPE_MMSYS		2
+
+//ウィンドウ タイプ
+#define WNDTYPE_DEFAULT		0
+#define WNDTYPE_MODALDLG	1
+#define WNDTYPE_MODELESSDLG	3
+
+//イメージタイプ
+#define IMGTYPE_FILE	0
+#define IMGTYPE_RES		1
+
+struct IMAGECTRLINFO{
+	int type;
+	char *path;
+};
+struct CHILDINFO{
+	char *IdName;
+	POINT pos;
+	SIZE size;
+	char *caption;
+	DWORD style;
+	DWORD ExStyle;
+	int Control;
+
+	IMAGECTRLINFO ImageCtrlInfo;
+};
+struct WINDOW_INFO{
+	//ウィンドウデータ
+	char *name;
+	char *HandleName;
+	POINT pos;
+	SIZE size;
+	char *caption;
+	DWORD style;
+	DWORD ExStyle;
+	char *MenuID;
+	int id;
+	int bgColor;
+	LOGFONT LogFont;
+	char *IconResName;
+	char *ClassName;
+	char *CallBackName;
+	long type;
+	char *filepath;
+
+	//子ウィンドウ管理
+	int NumberOfChildWindows;
+	CHILDINFO *pChildInfo;
+
+	//ツリー項目
+	HTREEITEM hTreeItem;
+};
+struct NEWPROJECTINFO{
+	char name[MAX_PATH];
+	DWORD dwTypeID;
+	_int8 ShowHelloWorld;
+	DWORD dwOption;
+};
+struct MENU_INFO{
+	char *IdName;
+	char *caption;
+	UINT type;
+	UINT state;
+
+	int NumberOfMenu;
+	MENU_INFO *pMenuInfo;
+
+	HTREEITEM hTreeItem;
+};
+#define MT_EXE	0	//EXEモジュールタイプ
+#define MT_DLL	1	//DLLモジュールタイプ
+#define PJ_OP_SOURCE_MASK	0x00FFFFFF
+#define PJ_OP_MMSYSTEM		0x00000001
+#define PJ_OP_COMMCTRL		0x00000002
+#define PJ_OP_RICHEDIT		0x00000004
+#define PJ_OP_WINSOCK		0x00000008
+#define PJ_OP_STRICT		0x00010000
+#define PJ_OP_RC_MANIFEST	0x00020000
+struct PROJECTINFO{
+	DWORD dwModuleType;
+
+	char name[MAX_PATH];
+	char dir[MAX_PATH];
+
+	DWORD dwVersion;
+
+	CDBFileInfo *pobj_DBFileInfo;
+
+	char ResourceFileName[MAX_PATH];
+
+	int NumberOfMenu;
+	MENU_INFO *pMenuInfo;
+	HTREEITEM hMenuTreeItem;
+
+	int NumberOfWindows;
+	WINDOW_INFO *pWindowInfo;
+	HTREEITEM hWindowTreeItem;
+
+	RESOURCEINFO res;
+
+	DWORD dwOption;
+	char lpszOutput_Release[MAX_PATH];
+	char lpszOutput_Debug[MAX_PATH];
+
+	//マニフェスト
+	char szManifestPath[MAX_PATH];
+
+	//デバッグ情報
+	char szCmdLine[8192];
+	char szExePath[MAX_PATH];
+
+	//ブレークポイント情報
+	CDBBreakPoint *pobj_DBBreakPoint;
+
+	_int8 ModifyOfMaterial;
+	_int8 ModifuOfResource;
+	_int8 modify;
+};
+extern PROJECTINFO ProjectInfo;
+
+
+struct SAVEREBAR{
+	int RebarID;
+	int RebarLength;
+	int IsBandBreak;
+};
+
+struct ITEMEVENTINFO{
+	char *IdName;
+	char **pEventNames;
+	int ClassID;
+	int EventNum;
+};
+
+#define PARAMETER_HINT_MAX_SIZE 8192
+struct METHODCHECKINFO{
+	HWND hWnd;
+	LOGFONT LogFont;
+	HFONT hFont;
+	HFONT hBoldFont;
+	char BeforeMethodName[VN_SIZE];
+	char msg[PARAMETER_HINT_MAX_SIZE];
+	int ParmNum;
+	int HeadPos;
+};
+
+
+/////////////////////
+// コード補完機能
+/////////////////////
+
+#define ACCESS_NON					0
+#define ACCESS_PRIVATE				1
+#define ACCESS_PUBLIC				2
+#define ACCESS_PROTECTED			3
+#define ACCESS_PAIRCOMMAND			4
+#define ACCESS_HTML_GENERAL_PARAM	5
+#define ACCESS_HTML_PARAM			6
+struct MEMBERINFO{
+	//クラス名
+	char *pName;
+	DWORD dwProc;
+	DWORD dwAccess;
+
+	int code_pos;
+};
+struct COMPLEMENT_WINDOW_INFO{
+	HWND hWnd;
+	HWND hList;
+
+	int iPos;
+	int iLength;
+
+	MEMBERINFO *pMemberInfo;
+	int MemberNum;
+
+	//ペアステートメントのインデント格納用
+	char szIndent[255];
+};
+
+
+
+class CSettingFile{
+	BOOL GetDataLine(char *name,char *parms);
+protected:
+	char *buffer;
+
+	BOOL GetWholeValue(char *name,int *pi32data);
+	BOOL Get3WholeValue(char *name,int *pd1,int *pd2,int *pd3);
+	BOOL GetRGBValue(char *name,COLORREF *prgb);
+	BOOL GetStringValue(char *name,char *str);
+	BOOL GetRectValue(char *name,RECT *prc);
+	BOOL GetLogFont(char *name,LOGFONT *plf);
+	BOOL GetRebarBand(SAVEREBAR *psr,int num);
+
+	void SetWholeValue(char *name,long i32data);
+	void Set3WholeValue(char *name,long d1,long d2,long d3);
+	void SetRGBValue(char *name,COLORREF rgb);
+	void SetStringValue(char *name,char *str);
+	void SetRectValue(char *name,RECT *prc);
+	void SetLogFont(char *name,LOGFONT *plf);
+	void SetRebarBand(SAVEREBAR *psr,int num);
+};
+#include "DesignTheme.h"
+
+
+
+//ProjectEditor.cpp
+void HeapDefaultFree(LPVOID lpMem);
+void ToBigChar(char str[]);
+int GetWndNum(HWND hChild);
+int GetNowWndNum(void);
+int GetFileNum(int WndNum);
+void SendTextEditResizeEvent(HWND hwnd);
+void RedrawAllWindow(void);
+int DocumentModifyCheck(HWND hChild);
+void SetStatusText(char *MenuText);
+void ResetState_UndoMenu(void);
+void ResetState_EditMenu(void);
+void ResetState_DocMenu(void);
+void DuplicateTitleCheck(char *lpszTitle);
+HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor=TABCOLOR_GRAY);
+void CloseDocWindow(int WndNum);
+void ResizeTextEditWnd(HWND hwnd,int cx,int cy);
+void ResizeOwnerWnd(void);
+#define FLAG_DBLCLK		1
+#define FLAG_BEAMCURSOR	2
+int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag);
+
+//Backup.cpp
+void CreateBackupDir(void);
+void backup(void *dummy);
+BOOL restore(void);
+
+//DialogBoxes.cpp
+void SetPosCenter(HWND hParent,HWND hwnd);
+void SetPosCenter(HWND hwnd);
+BOOL SetFontDialog(HWND hwnd,LOGFONT *lf,BOOL bFixedPitchOnly,int *lpiPointSize=0);
+void DlgNewProjectWizard(HWND hwnd);
+BOOL CALLBACK DlgNewFile(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+void DlgProjectOptionSetting(HWND hwnd);
+void DlgOptionSetting(HWND hwnd);
+BOOL CALLBACK DialogAbout(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK DlgPassword(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK DlgProfessionalStart(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//FileOperation.cpp
+void MakeUserSettingDir(void);
+char *ReadBuffer(char *path);
+char *ReadBuffer_NonErrMsg(char *path);
+_int8 WriteBuffer(char *path,char *buffer,int length);
+_int8 WriteBuffer_NonErrMsg(char *path,char *buffer,int length);
+void GetRelationalPath(char *path,char *dir);
+void GetFullPath(char *path,char *dir);
+void RemoveDirectoryStrong(char *dir_path);
+BOOL GetFilePathDialog(HWND hwnd,char *filename,LPSTR Filter,LPSTR Title,_int8 IsOpen);
+BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle);
+int GetFileExtension(char *path);
+HWND OpenFileWithExtension(char *OpenFileName);
+BOOL SaveDocument(HWND hChild,char *SaveFileName);
+BOOL ShortPathToLongPath(char ShortPath[MAX_PATH],char *LongPath);
+BOOL IsFile(char *path);
+
+//rebar.cpp
+#define MAX_BAND 255
+typedef HWND (*AddBandProc)(HWND hRebar,int num,char *lpszText);
+class CDBRebarBand{
+	int BandId[MAX_BAND];
+	AddBandProc pAddProc[MAX_BAND];
+	int iMaxBandNum;
+public:
+	HWND hRebar;
+	CDBRebarBand();
+	~CDBRebarBand();
+	void add(int band_id,AddBandProc add_proc);
+	HWND call_add(int band_id,int num,char *lpszText);
+};
+class CMainRebar{
+	CDBRebarBand *pobj_DBRebarBand;
+
+	void SetupRebar(HWND hwnd);
+public:
+	HWND hParent;
+	HWND hRebar;
+
+	CMainRebar(HWND hwnd_parent);
+	~CMainRebar();
+
+	void ResetInitRebar();
+	void ResetRebar();
+	void SaveRebarState(void);
+	void ChangeRebarBand(int BandID);
+	void menu_popup(HWND hwnd,int PosX,int PosY);
+};
+extern CMainRebar *pobj_Rebar;
+void ResetRebarData(void);
+LRESULT CALLBACK DefaultToolbarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+LRESULT CALLBACK DocComboProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+LRESULT CALLBACK DebuggerToolbarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//SubOperation.cpp
+void ScreenToClient(HWND hwnd,RECT *pRect);
+void ClientToScreen(HWND hwnd,RECT *pRect);
+BOOL IsWow64(void);
+void URLEncode(LPSTR pszSrc);
+void Digit(int num,char *buffer);
+void RectNaturalFormat(RECT *ReadRect,RECT *CopyRect);
+void RectNaturalFormat(int *x1,int *y1,int *x2,int *y2);
+void KillSpaces(char *str1,char *str2);
+void RemoveStringQuotes(char *str);
+void SlideString(char *str,int slide);
+void SlideBuffer(char *buffer,int length,int slide);
+BOOL IsVariableTopChar(char c);
+BOOL IsVariableChar(char c);
+BOOL IsCommandBackDelimitation(char *buffer,int pos);
+BOOL IsCommandDelimitation(char *buffer,int p);
+char *ComparisonString(char *str1,char *str2,BOOL bBigSmall);
+int GetOneParameter(char *Parameter,int pos,char *retAns);
+int GetStringInPare(char *buffer,char *ReadBuffer);
+int GetStringInBracket(char *buffer,char *ReadBuffer);
+void JumpBlank(char *pBuf,int *piPos);
+BOOL CheckParenthesis(char *buffer);
+DWORD GetValue(char *value);
+BOOL IsManagementCommand(int ComNum);
+int IsBasicReservedWord(char *str);
+HBITMAP CreateGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2);
+HBITMAP CreateVertGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2);
+HBITMAP CreateHorzGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2);
+HICON CreateGrayIcon(HICON hBaseIcon);
+void GetSize(SIZE *pSize,RECT *pRect);
+BOOL HitTest(RECT *pRect,POINT *pPos);
+BOOL Rectangle(HDC hdc,RECT *pRect);
+void ComboBox_SetSelText(HWND hCombo,char *lpszText);
+void SetCursorByState(int state);
+void SetTextEditColorDesign(TEXTEDIT_COLOR_INFO *pColorInfo,CTheme *pobj_Theme,BOOL bRedraw);
+BOOL SerialCheck(char *buffer);
+void WriteSerialHash(void);
+BOOL SetupProjectEditor(void);
+void EndProjectEditor(void);
+void SetupWindow(HWND hwnd);
+BOOL SetRunning(HWND hChild);
+BOOL IsNeedCompile(char *FileName,BOOL bDebug);
+
+//DocumentAdvice.cpp
+void MenuAdvice(WPARAM msg);
+void ShowToolTipText(LPTOOLTIPTEXT TipText);
+char *IncludeFiles(char *buffer);
+void AddParameterHints_ToProject(char *path);
+
+
+
+/////////////////////
+// テキスト エディタ
+/////////////////////
+
+#define CONTROL_TAB_SPACE_DEFAULT		10	//エディタ画面左端のコントロールタブ（通常）
+
+//DrawBuffer.cpp
+void TextEdit_DrawBuffer(HDC hdc,int WndNum);
+
+//TextEditor.cpp
+int GetControlTabSpace(int WndNum,int *piCount=0);
+void ResetTextEditFont(HWND hwnd);
+void SetTextEditWordColor(int WndNum);
+BOOL IsHiragana(char *pBuf);
+BOOL IsAlphabet(char c);
+BOOL IsReturnCode(char *pBuf);
+void ResetScrollbar(int WndNum,int max_x,int max_y);
+#define WORDCARET_BEFORE 1
+#define WORDCARET_AFTER  2
+void TextEdit_GetWordCaret(HWND hwnd,int WndNum,POINT *pPos,int *piStart,int *piEnd,BOOL bBeforeAfterFlag);
+void CancelBeforeAutoIndent(int WndNum);
+LRESULT CALLBACK TextEditProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//Caret.cpp
+BOOL IsRightTurn(char *pBuf,int i,int now_x);
+int GetBufferIndexFromCaretPos(char *pBuf,int now_x,int now_y);
+void GetCaretPosFromBufferIndex(char *pBuf,int index,POINT *pCaretPos);
+void TextEdit_GetSel(int WndNum,CHARRANGE *pCharRange);
+void TextEdit_GetSelText(int WndNum,CHARRANGE *pCharRange,char *buffer);
+void GetScrollBaseCaretPos(int WndNum,int *pNaturalBaseX,int *pNaturalBaseY);
+void GetNaturalBaseCaretPos(int WndNum,int *pScrollBaseX,int *pScrollBaseY);
+void TextEdit_SetSel(int WndNum,int StartIndex,int EndIndex,BOOL bShowCenter=0);
+void TextEdit_SelectOneLine(int WndNum,int code_pos,BOOL bShowCenter=0);
+void ResetCaretPos(int WndNum,BOOL bInputAndReset=0);
+BOOL TextEdit_ScrollCaret(int WndNum,BOOL bScrollOneStep_x,BOOL bShowCenter=0);
+void CaretPos_LooseToNatural(int WndNum,int loose_x,int loose_y,POINT *pCaretPos);
+void GetNaturalCaretPos_Click(int WndNum,int mouse_x,int mouse_y,POINT *pCaretPos);
+void GetNaturalCaretPos_Left(int WndNum);
+void GetNaturalCaretPos_Right(int WndNum,POINT *pCaretPos);
+void GetNaturalCaretPos_Up(int WndNum,POINT *pCaretPos);
+void GetNaturalCaretPos_Down(int WndNum,POINT *pCaretPos);
+void GetNaturalCaretPos_PageUp(int WndNum,POINT *pCaretPos);
+void GetNaturalCaretPos_PageDown(int WndNum,POINT *pCaretPos);
+
+//Replace.cpp
+void TextEdit_Replace(int WndNum,char *str,BOOL bRedraw);
+void TextEdit_ReplaceUpdateUndoData(int WndNum,char *str,BOOL bPaste,BOOL bRedraw);
+void TextEdit_Convert(int id);
+
+//TextEditor_UndoRedo.cpp
+void TextEdit_UndoCommand(int WndNum);
+void TextEdit_RedoCommand(int WndNum);
+void TextEdit_NoticeChanging(int WndNum,int Command,char *KeyStr,char *DelStr,CHARRANGE *Range,CHARRANGE *DelRange);
+void TextEdit_DeleteUndoData(int WndNum,int pos);
+
+//Search.cpp
+void AddFindData(HWND hwnd,char ppData[MAX_FINDLIST][MAX_PATH],char *str);
+BOOL CALLBACK DlgFind(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK DlgPermutation(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//analysis.cpp
+BOOL GetVarFormatString(char *buffer,char *array,char *array2,char *NestMember,int *pRefType);
+BOOL CheckReferType(char *ClassName,BOOL bArray,char *VarArray,int VarRefType);
+void GetOriginalClassName(char *ClassName);
+int GetClassPos(char *pBuf,char *ClassName,DWORD *pdwClassType);
+BOOL GetClassNameFromClassMember(char *pBuf,int iPos,char *VarName,char *ClassName,BOOL *pbArray);
+void GetCodeAreaType(char *pBuf,int iPos,int *piProcPos,char *NowClass);
+BOOL GetVariableClassName(char *pEditBuf,int iPos,char *VarName,char *ClassName,BOOL *pbArray);
+
+//EndPairCommandComplement.cpp
+BOOL GetEndPairCommandInfo(char *buffer,int p);
+BOOL IsNeedNewIndentCommand(char *name);
+void GetWithObjectVariable(char *buffer,int p,char *pObjectVar);
+
+//Complement.cpp
+void DeleteComplementInfo(void);
+BOOL GetComplementInfo(char *variable,char *pEditBuf,int iPos);
+void CodeComplement(int WndNum,int iPos);
+LRESULT CALLBACK ComplementWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//ParameterHint.cpp
+char *GetUserSourceCode(void);
+void ChangeReturnCode(char *buffer);
+void DeleteComment(char *buffer);
+LRESULT CALLBACK MethodCheckWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+void ShowParameterHint(int WndNum);
+
+//CodeFormatter.cpp
+char *CodeFormatter(char *lpszReadBuffer);
+
+#ifdef THETEXT
+//StringCount.cpp
+BOOL CALLBACK DlgStringCount(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+#endif
+
+//Print.cpp
+class CPage{
+public:
+	PAGESETUPDLG psd;
+	CPage();
+	~CPage();
+
+	BOOL SetupDlg(void);
+};
+extern CPage obj_Page;
+LRESULT CALLBACK PreviewWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+void Preview(void);
+void Printout(void);
+
+//History.cpp
+#define IS_FILEHISTORY_COMMAND(a) (100<=a&&a<=199)
+class CHistory{
+	int iNum;
+	int iMaxHistoryNum;
+
+	int m_BaseID;
+public:
+	char *lpszPath[255];
+
+	CHistory(int BaseID);
+	~CHistory();
+
+	void load(char *path);
+	void save(char *path);
+
+	void add(char *path);
+	void insert(char *path);
+
+	void ResetFileMenu(CSubMenuEx *pobj_SubMenu,BOOL bOwnerDraw);
+};
+
+
+
+
+//////////////////////
+/* プロジェクト解析 */
+
+//CClassInfo.cpp
+class CClassInfo{
+public:
+	char ClassName[VN_SIZE];
+	MEMBERINFO *pMemberInfo;
+	int MemberNum;
+	CClassInfo();
+	~CClassInfo();
+	int Analyze(char *pBuf,int *p);
+};
+
+//ClassTree.cpp
+struct TREEHASH{
+	HTREEITEM hItem;
+	int iFileNum;
+	TREEHASH *pNextData;
+};
+#define CTV_ROOT			1	//ルート
+#define CTV_FOLDER			2	//フォルダ
+#define CTV_GLOBAL_PROC		3	//プロシージャ
+#define CTV_CLASS			4	//クラス
+#define CTV_PUBLIC_MEMBER	5	//公開cメンバ変数
+#define CTV_PUBLIC_METHOD	6	//公開メソッド
+#define CTV_PRIVATE_MEMBER	7	//非公開メンバ変数
+#define CTV_PRIVATE_METHOD	8	//非公開メソッド
+class CClassTreeView{
+	HWND hTreeWnd;
+	int iNowFile;
+	TREEHASH tree_data[MAX_HASH];
+
+	HTREEITEM hGlobalProcedureFolder;
+	HTREEITEM hNowClassFolder;
+
+	int hash_default(LONG_PTR lpdata);
+
+	void AddValidItem(HTREEITEM hItem,int iFileNum);
+	BOOL delete_check(HTREEITEM hItem);
+	void DeleteInvalidItems(HTREEITEM hItem);
+	void DeleteTreeHash(TREEHASH *pth);
+
+	HTREEITEM insert(HTREEITEM hParentItem,int flag,char *lpszName,int iFileNum);
+
+public:
+	HTREEITEM hRootFolder;
+
+	int NumberOfProcedures;
+	PROCINFO *pProcInfo;
+
+	BOOL bCloseSwitch;
+	BOOL bShowSwitch;
+
+	CClassTreeView();
+	~CClassTreeView();
+	void init(HWND hwnd,int iFileNum);
+
+	void InsertRootFolder(void);
+	void InsertGlobalProcedureFolder(void);
+	HTREEITEM InsertGlobalProcedure(int flag,char *lpszName,int iFileNum);
+	HTREEITEM insert_code_item(HTREEITEM hParentItem,int flag,char *lpszName,int iFileNum,char *pBuf,int p);
+	void InsertClassFolder(char *lpszName,int iFileNum,char *pBuf,int p);
+	void InsertClassMember(int flag,char *lpszName,int iFileNum,char *pBuf,int p);
+	void finish();
+};
+extern CClassTreeView *pobj_ClassTreeView;
+void ResetClassTree(int iFileNum);
+
+//ProjectControl.cpp
+void ResizeProjectView_ToolWindow(void);
+LRESULT CALLBACK ProjectView_ToolWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+LRESULT CALLBACK ProjectViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+void Project_File_Insert(char *path);
+void Project_File_Delete(HTREEITEM hTreeItem);
+void MakeNewProject(void);
+void OpenProject(char *path);
+BOOL ProjectModifyCheck(BOOL bRun);
+_int8 CloseProject(void);
+void MakeWorkFile(void);
+void SaveProject(void);
+BOOL SetProjectToRun(void);
+BOOL IsNeedCompileForProject(BOOL bDebug);
+
+//WindowControl.cpp
+int GetWndInfoNum(char *name);
+HGLOBAL Rad_GetChildInfoClipboardData(int WndNum,int WndInfoNum);
+void Rad_PasteChildInfoClipboardData(int WndNum,HGLOBAL hGlobal);
+char *PermutationWndPgmTemplate(char *pBuf,char *pPjName, char *pWndName, char *pHandleName, char *pProcName);
+void GetItemClassName(char *buffer,int Control);
+void SaveWindowProgram();
+void SaveWindowFile(char *path,WINDOW_INFO *WindowInfo,int NumberOfWindowInfo);
+_int8 OpenWindowFile(char *path);
+void GetDefaultWindowFont(LOGFONT *LogFont);
+void Project_Window_Insert(void);
+void Project_Window_Delete(int WndInfoNum);
+
+//Resource.cpp
+void GetResourceData(void);
+void Project_CursorResInsert(void);
+void Project_Cursor_Delete(int CursorInfoNum);
+void Project_Cursor_RenameID(int CursorInfoNum);
+void Project_BitmapResInsert(void);
+void Project_Bitmap_Delete(int IconInfoNum);
+void Project_Bitmap_RenameID(int BitmapInfoNum);
+void Project_IconResInsert(void);
+void Project_Icon_Delete(int IconInfoNum);
+void Project_Icon_RenameID(int IconInfoNum);
+BOOL CALLBACK DlgProject_ResourceID_Input(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+
+
+///////////////////
+/* RADウィンドウ */
+
+//RadProc.cpp
+void NewRadWindow(int WndInfoNum);
+int InsertDlgItem(int WndNum,int WndInfoNum,int ItemNum,POINT *pPos,SIZE *pSize,char *IdName,char *caption,DWORD style_or_WndNum,DWORD ExStyle,int Control,int ImageType,char *ImagePath,DWORD dwInsertType);
+void DeleteDlgItem(int WndNum,int WndInfoNum,int ItemNum,BOOL bNoticeChanging);
+void CursorPos_GlobalToLocal(HWND hwnd,long *x,long *y);
+void DrawSelectingRect(HWND hwnd,int WndNum,int WndInfoNum,int ButtonSelect);
+void ChangePropertyWindow(int WndNum,int WndInfoNum);
+void ResetScrollbarOfRadEditor(int WndNum,int weight,int height);
+LRESULT CALLBACK RadWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+void ResizeToRadToolWindows(int WndNum,int weight,int height);
+LRESULT CALLBACK MDIClientWindow_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//DrawWindow.cpp
+void DrawRadWindow(int WndNum,WINDOW_INFO *pWindowInfo);
+
+//Rad_UndoRedo.cpp
+void Rad_UndoCommand(int WndNum);
+void Rad_RedoCommand(int WndNum);
+void Rad_DeleteUndoData(int WndNum,int pos);
+void Rad_NoticeChanging(int WndNum,int Command,int SelectItemNum,DWORD dwData);
+
+//RadToolsAndPropertyProc.cpp
+LRESULT CALLBACK RadToolsWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_WindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK DlgRadProperty_Item_RenameCaption(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_ButtonProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_CheckBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_ComboBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_EditProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_GroupBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_ImageBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_ListBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_ListViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_ProgressBarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_RadioButtonProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_ScrollBarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_StaticProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_TrackBarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_TreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK RadProperty_UpDownProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+LRESULT CALLBACK RadPropertyWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//MessageCallOperation.cpp
+char **GetProcedureNamesOfMessageCall(int WndInfoNum,ITEMEVENTINFO **ppItemEventInfo,int *num,BOOL *pbAlways);
+void SelectProcedureOfMessageCall(int WndInfoNum,char *ProcedureName,char *Parameter);
+BOOL CALLBACK DlgEventCode(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//RadSupport.cpp
+LRESULT CALLBACK TestWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+void SetSupportDlgData(int WndNum,int WndInfoNum);
+BOOL CALLBACK DlgRadSupport(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+
+
+////////////////////
+/* MENUウィンドウ */
+
+//MenuProc.cpp
+int GetMenuInfoNum(char *name);
+void HeapMenuDataFree(MENU_INFO *pMenuInfo,int ItemNum,int *NumberOfFreedItem);
+BOOL CALLBACK DlgProject_MenuID_Input(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+void Project_Menu_Insert(void);
+void Project_Menu_Delete(int MenuInfoNum);
+void NewMenuWindow(MENU_INFO *pMenuInfo);
+BOOL CALLBACK MenuEditDlg(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+LRESULT CALLBACK MenuEditWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+LRESULT CALLBACK MDIClientWindow_Menu(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+
+
+//////////////////////////////////
+/* アイコン エディタ ウィンドウ */
+
+//IconEditor.cpp
+void AddIconType(int WndNum,int IconType);
+void DeleteIconType(int WndNum);
+void NewIconEditWindow(char *filepath);
+void SaveIconFile(char *filepath,HWND hwnd);
+LRESULT CALLBACK MDIClientWindow_IconEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//IconEditor_Main.cpp
+HGLOBAL IconEdit_GetChildInfoClipboardData(int WndNum);
+void IconEdit_PasteChildInfoClipboardData(int WndNum,HBITMAP hBmp);
+void IconEdit_PasteImage(int WndNum);
+void DrawIconToMemBmp(int WndNum,RECT *pRect);
+void IconEdit_EraseRect(int WndNum,RECT *pRect);
+LRESULT CALLBACK IconEditWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//IconEditor_Tool.cpp
+BOOL CALLBACK DlgIconButtons(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+BOOL CALLBACK DlgIconToolProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//IconEditor_Color.cpp
+BOOL CALLBACK DlgIconColorProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+//IconEditor_UndoRedo.cpp
+void IconEdit_UndoCommand(int WndNum);
+void IconEdit_RedoCommand(int WndNum);
+void IconEdit_NoticeChanging(int WndNum);
+
+
+
+
+
+#include "NonVolatile.h"
+
+
+
+
+#ifdef _DEBUG
+/*Debug*/
+
+#define HeapAlloc CheckHeapAlloc
+#define HeapReAlloc CheckHeapReAlloc
+LPVOID CheckHeapAlloc(HANDLE hHeap,DWORD dwFlags,DWORD dwBytes);
+LPVOID CheckHeapReAlloc(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes);
+
+#define DeleteObject CheckDeleteObject
+BOOL CheckDeleteObject(HGDIOBJ hObject);
+
+#endif
Index: /ProjectEditor/Complement.cpp
===================================================================
--- /ProjectEditor/Complement.cpp	(revision 3)
+++ /ProjectEditor/Complement.cpp	(revision 3)
@@ -0,0 +1,785 @@
+#include "common.h"
+
+///////////////////////////
+// コード補完機能
+///////////////////////////
+
+BOOL GetComplementClass(char *pBuf,char *ClassName,char *nest,BOOL bInherits){
+	extern HANDLE hHeap;
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	extern char *pHeaderBuf;
+	extern char *pUserSource;
+	int i,i2;
+	char temporary[8192];
+	DWORD dwClassType;
+	BOOL bRet;
+
+
+	/////////////////////////////////////////
+	// ソースコードからクラス定義位置を取得
+	/////////////////////////////////////////
+	i=GetClassPos(pBuf,ClassName,&dwClassType);
+	if(pBuf[i]=='\0') return 0;
+
+
+	if(nest[0]){
+		////////////////////
+		// 入れ子構造の場合
+		////////////////////
+
+		//クラス、配列の構成要素を解析する
+		char VarName[VN_SIZE];		//変数名
+		char array[VN_SIZE];		//第1次配列
+		char lpPtrOffset[VN_SIZE];	//第2次配列
+		char NestMember[VN_SIZE];	//入れ子メンバ
+		int RefType;				//"."参照のときは0、"->"参照のときは1
+		lstrcpy(VarName,nest);
+		if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)) return 0;
+
+		//メンバ変数の型であるクラスの名前を取得
+		char ClassName[VN_SIZE];
+		BOOL bArray;
+		if(!GetClassNameFromClassMember(pBuf,i,VarName,ClassName,&bArray)) return 0;
+
+		//TypeDef宣言を考慮してオリジナルなクラス名を取得
+		GetOriginalClassName(ClassName);
+
+		if(!CheckReferType(ClassName,bArray,array,RefType)) return 0;
+
+		//ユーザーのソースコードをサーチ
+		bRet=GetComplementClass(pUserSource,ClassName,NestMember,0);
+		if(!bRet){
+			//失敗したときはbasic.sbpをサーチ
+			bRet=GetComplementClass(pHeaderBuf,ClassName,NestMember,0);
+		}
+		return bRet;
+	}
+
+
+	////////////////////////
+	// メンバ情報を取得
+	////////////////////////
+	DWORD dwAccess;
+	DWORD dwProc;
+
+	//アクセス制限の初期値をセット
+	if(dwClassType==ESC_CLASS) dwAccess=ACCESS_PRIVATE;
+	else dwAccess=ACCESS_PUBLIC;
+
+	if(memicmp(pBuf+i,"Inherits",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')){
+		i+=9;
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+		//継承を行う場合
+		for(i2=0;;i++,i2++){
+			if(!IsVariableChar(pBuf[i])){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=pBuf[i];
+		}
+
+		//ユーザーのソースコードをサーチ
+		bRet=GetComplementClass(pUserSource,temporary,"",1);
+		if(!bRet){
+			//失敗したときはbasic.sbpをサーチ
+			bRet=GetComplementClass(pHeaderBuf,temporary,"",1);
+		}
+
+		for(;;i++){
+			if(pBuf[i]=='\0') break;
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				i+=i2;
+				break;
+			}
+		}
+		JumpBlank(pBuf,&i);
+	}
+
+	//メンバ変数、関数を取得
+	while(1){
+		if(pBuf[i]=='\0') break;
+		if(memicmp(pBuf+i,"End",3)==0){
+			/*	End Class
+				End Type
+				の検出 */
+			i2=i+3;
+			while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+
+			if(memicmp(pBuf+i2,"Class",5)==0&&(!IsVariableChar(pBuf[i2+5]))||
+				memicmp(pBuf+i2,"Interface",9)==0&&(!IsVariableChar(pBuf[i2+9]))||
+				memicmp(pBuf+i2,"Type",4)==0&&(!IsVariableChar(pBuf[i2+4]))) break;
+		}
+
+		if(memicmp(pBuf+i,"Abstract",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Virtual",7)==0&&(pBuf[i+7]==' '||pBuf[i+7]=='\t')||
+			memicmp(pBuf+i,"Override",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')){
+			//メンバ関数のとき
+			if(pBuf[i]=='a'||pBuf[i]=='A'){
+				i+=9;
+				dwProc=ESC_ABSTRACT;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')) i+=9;
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')) i+=4;
+			}
+			else if(pBuf[i]=='v'||pBuf[i]=='V'){
+				i+=8;
+				dwProc=ESC_VIRTUAL;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')) i+=9;
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')) i+=4;
+			}
+			else if(pBuf[i]=='o'||pBuf[i]=='O'){
+				i+=9;
+				dwProc=ESC_OVERRIDE;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')) i+=9;
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')) i+=4;
+			}
+			else if(pBuf[i]=='f'||pBuf[i]=='F'){
+				i+=9;
+				dwProc=ESC_FUNCTION;
+			}
+			else if(pBuf[i]=='s'||pBuf[i]=='S'){
+				i+=4;
+				dwProc=ESC_SUB;
+			}
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		}
+		else{
+			//メンバ変数のとき
+			dwProc=0;
+		}
+
+		//変数名または関数名を取得
+		if(pBuf[i]=='~'){
+			temporary[0]='~';
+			i2=1;
+			i++;
+		}
+		else i2=0;
+		for(;;i++,i2++){
+			if(!IsVariableChar(pBuf[i])){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=pBuf[i];
+		}
+
+		if(bInherits){
+			//継承元の場合はコンストラクタ、デストラクタを除去
+			if(temporary[0]=='~') goto next;
+			if(lstrcmp(temporary,ClassName)==0) goto next;
+		}
+
+		//次の行をサーチ
+		for(;;i++){
+			if(pBuf[i]=='\0') break;
+			if(pBuf[i]=='\''||(pBuf[i]=='/'&&pBuf[i+1]=='*')){
+				//コメント中
+				JumpBlank(pBuf,&i);
+				break;
+			}
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				i+=i2;
+				break;
+			}
+		}
+		JumpBlank(pBuf,&i);
+
+		//重複チェック（オーバーライド関数の除去）
+		for(i2=0;i2<ComplementWndInfo.MemberNum;i2++){
+			if(lstrcmp(ComplementWndInfo.pMemberInfo[i2].pName,temporary)==0) goto next;
+		}
+
+		//アクセスを変更
+		if(lstrcmpi(temporary,"Private")==0){
+			dwAccess=ACCESS_PRIVATE;
+			continue;
+		}
+		if(lstrcmpi(temporary,"Public")==0){
+			dwAccess=ACCESS_PUBLIC;
+			continue;
+		}
+		if(lstrcmpi(temporary,"Protected")==0){
+			dwAccess=ACCESS_PROTECTED;
+			continue;
+		}
+
+		ComplementWndInfo.pMemberInfo=
+			(MEMBERINFO *)HeapReAlloc(hHeap,
+				0,
+				ComplementWndInfo.pMemberInfo,
+				(ComplementWndInfo.MemberNum+1)*sizeof(MEMBERINFO));
+
+		//メンバ名
+		ComplementWndInfo.pMemberInfo[ComplementWndInfo.MemberNum].pName=
+			(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+		lstrcpy(ComplementWndInfo.pMemberInfo[ComplementWndInfo.MemberNum].pName,
+			temporary);
+
+		//メンバの種類（変数、Virtual、Sub、Function）
+		ComplementWndInfo.pMemberInfo[ComplementWndInfo.MemberNum].dwProc=dwProc;
+
+		//アクセシビリティ
+		ComplementWndInfo.pMemberInfo[ComplementWndInfo.MemberNum].dwAccess=dwAccess;
+
+		ComplementWndInfo.MemberNum++;
+next:
+		if(dwProc){
+			//Abstract定義以外はEnd Sub、End Functionをサーチする
+			if(dwProc==ESC_ABSTRACT) continue;
+			if(dwClassType==ESC_INTERFACE) continue;
+
+			while(1){
+				if(pBuf[i]=='\0'){
+					i2=0;
+					break;
+				}
+
+				if(memicmp(pBuf+i,"End",3)==0){
+					/*	End Sub
+						End Function
+						の検出 */
+					i+=3;
+					while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+					if(memicmp(pBuf+i,"Sub",3)==0&&(!IsVariableChar(pBuf[i+3]))||
+						memicmp(pBuf+i,"Function",8)==0&&(!IsVariableChar(pBuf[i+8]))){
+						i2=1;
+						break;
+					}
+
+					if(memicmp(pBuf+i,"Class",5)==0&&(!IsVariableChar(pBuf[i+5]))||
+						memicmp(pBuf+i,"Interface",9)==0&&(!IsVariableChar(pBuf[i+9]))||
+						memicmp(pBuf+i,"Type",4)==0&&(!IsVariableChar(pBuf[i+4]))){
+						i2=0;
+						break;
+					}
+				}
+
+				//次の行をサーチ
+				for(;;i++){
+					if(pBuf[i]=='\0') break;
+					i2=IsCommandDelimitation(pBuf,i);
+					if(i2){
+						i+=i2;
+						break;
+					}
+				}
+				JumpBlank(pBuf,&i);
+			}
+
+			if(i2==0){
+				//コード解析が不正に終了
+				return 1;
+			}
+
+			//次の行をサーチ
+			for(;;i++){
+				if(pBuf[i]=='\0') break;
+				i2=IsCommandDelimitation(pBuf,i);
+				if(i2){
+					i+=i2;
+					break;
+				}
+			}
+			JumpBlank(pBuf,&i);
+		}
+	}
+
+	return 1;
+}
+
+void DeleteComplementInfo(void){
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	int i;
+
+	for(i=0;i<ComplementWndInfo.MemberNum;i++)
+		HeapDefaultFree(ComplementWndInfo.pMemberInfo[i].pName);
+
+	HeapDefaultFree(ComplementWndInfo.pMemberInfo);
+}
+BOOL GetComplementInfo(char *variable,char *pEditBuf,int iPos){
+	extern HANDLE hHeap;
+
+	//ユーザーが作成したソースコードを取得
+	extern char *pUserSource;
+	pUserSource=GetUserSourceCode();
+
+	//クラス、配列の構成要素を解析する
+	char VarName[VN_SIZE];		//変数名
+	char array[VN_SIZE];		//第1次配列
+	char lpPtrOffset[VN_SIZE];	//第2次配列
+	char NestMember[VN_SIZE];	//入れ子メンバ
+	int RefType;				//"."参照のときは0、"->"参照のときは1
+	lstrcpy(VarName,variable);
+	if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)){
+		HeapDefaultFree(pUserSource);
+		pUserSource=0;
+		return 0;
+	}
+
+
+	////////////////////////////////
+	// オブジェクトのクラス名を取得
+	////////////////////////////////
+	char ClassName[VN_SIZE];
+	BOOL bArray;
+	if(!GetVariableClassName(pEditBuf,iPos,VarName,ClassName,&bArray)){
+		HeapDefaultFree(pUserSource);
+		pUserSource=0;
+		return 0;
+	}
+
+	//TypeDef宣言を考慮してオリジナルなクラス名を取得
+	GetOriginalClassName(ClassName);
+
+	if(!CheckReferType(ClassName,bArray,array,RefType)){
+		HeapDefaultFree(pUserSource);
+		pUserSource=0;
+		return 0;
+	}
+
+
+	////////////////////
+	// クラス情報を取得
+	////////////////////
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+
+	ComplementWndInfo.pMemberInfo=(MEMBERINFO *)HeapAlloc(hHeap,0,1);
+	ComplementWndInfo.MemberNum=0;
+
+	//ユーザーのソースコードをサーチ
+	BOOL bRet;
+	bRet=GetComplementClass(pUserSource,ClassName,NestMember,0);
+	if(!bRet){
+		//失敗したときはbasic.sbpをサーチ
+		extern char *pHeaderBuf;
+		bRet=GetComplementClass(pHeaderBuf,ClassName,NestMember,0);
+	}
+
+	HeapDefaultFree(pUserSource);
+	pUserSource=0;
+
+	if(!bRet||ComplementWndInfo.MemberNum==0){
+		//見つからなかったとき
+		DeleteComplementInfo();
+		return 0;
+	}
+
+	return 1;
+}
+void CodeComplement(int WndNum,int iPos){
+	int i,i2;
+
+	//エディタ画面左端のコントロールタブ
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern int font_width,font_height;
+	POINT pos;
+	pos=MdiInfo[WndNum].pmti->StartCaretPos;
+	GetScrollBaseCaretPos(WndNum,(int *)&pos.x,(int *)&pos.y);
+
+	pos.x=(pos.x-1)*font_width    +iControlTabSpace;
+	pos.y=(pos.y+1)*font_height;
+
+	ClientToScreen(MdiInfo[WndNum].pmti->hEdit,&pos);
+
+	extern HINSTANCE hInst;
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	ComplementWndInfo.hWnd=CreateWindowEx(WS_EX_DLGMODALFRAME,
+		"ComplementWindow",NULL,
+		WS_POPUP|WS_CLIPCHILDREN,
+		pos.x,pos.y,100,100,
+		hOwner,NULL,hInst,0);
+
+	///////////////////////////
+	// リストビューの初期化
+	///////////////////////////
+	extern METHODCHECKINFO MethodCheckInfo;
+	int height,max_width,listitem_height;
+	max_width=0;
+
+	// リストアイテムを追加
+	LV_ITEM lvItem;
+	lvItem.mask = LVIF_TEXT|LVIF_IMAGE;
+	for(i=0;i<ComplementWndInfo.MemberNum;i++){
+		lvItem.pszText=ComplementWndInfo.pMemberInfo[i].pName;
+		lvItem.iItem=0;
+		lvItem.iSubItem=0;
+
+		if(ComplementWndInfo.pMemberInfo[i].dwAccess==ACCESS_PAIRCOMMAND){
+			//ペアステートメント補完リストアイテム
+			lvItem.iImage=4;
+		}
+		else if(ComplementWndInfo.pMemberInfo[i].dwAccess==ACCESS_HTML_GENERAL_PARAM){
+			//HTMLタグのパラメータ
+			lvItem.iImage=5;
+		}
+		else if(ComplementWndInfo.pMemberInfo[i].dwAccess==ACCESS_HTML_PARAM){
+			//HTMLタグのパラメータ
+			lvItem.iImage=6;
+		}
+		else if(ComplementWndInfo.pMemberInfo[i].dwProc==0){
+			//メンバ変数
+			if(ComplementWndInfo.pMemberInfo[i].dwAccess!=ACCESS_PUBLIC)
+				lvItem.iImage=0;
+			else
+				lvItem.iImage=1;
+		}
+		else{
+			//メンバ関数
+			if(ComplementWndInfo.pMemberInfo[i].dwAccess!=ACCESS_PUBLIC)
+				lvItem.iImage=2;
+			else
+				lvItem.iImage=3;
+		}
+		ListView_InsertItem(ComplementWndInfo.hList,&lvItem);
+
+		i2=ListView_GetStringWidth(ComplementWndInfo.hList,
+			ComplementWndInfo.pMemberInfo[i].pName);
+
+		if(max_width<i2) max_width=i2;
+	}
+
+	RECT rc;
+	ListView_GetItemRect(ComplementWndInfo.hList,0,&rc,LVIR_BOUNDS);
+	listitem_height=rc.bottom-rc.top;
+	height=listitem_height*ComplementWndInfo.MemberNum;
+
+	//ウィンドウサイズとクライアント領域サイズの差を計算
+	RECT rc_Window,rc_Client;
+	SIZE size;
+	int dx,dy;
+	GetWindowRect(ComplementWndInfo.hWnd, &rc_Window);
+	GetClientRect(ComplementWndInfo.hWnd, &rc_Client);
+	dx = (rc_Window.right - rc_Window.left) - (rc_Client.right - rc_Client.left);
+	dy = (rc_Window.bottom - rc_Window.top) - (rc_Client.bottom - rc_Client.top);
+
+#define MAX_COMPLEMENT_LISTNUM 15
+	size.cx=max_width+dx+30;	//※30はアイコンの幅を含む余白
+	size.cy=height+dy;
+	if(size.cy>listitem_height*MAX_COMPLEMENT_LISTNUM+dy){
+		size.cy=listitem_height*MAX_COMPLEMENT_LISTNUM+dy;
+
+		//垂直スクロールバーの幅を考慮する
+		size.cx+=GetSystemMetrics(SM_CXVSCROLL);
+	}
+	else{
+		//スクロールバーを使用しないようにする
+		i=GetWindowLong(ComplementWndInfo.hList,GWL_STYLE);
+		i|=LVS_NOSCROLL;
+		i&=~(WS_VSCROLL|WS_HSCROLL);
+		SetWindowLong(ComplementWndInfo.hList,GWL_STYLE,i);
+	}
+
+	if(pos.x+size.cx>ScreenX){
+		pos.x=ScreenX-size.cx;
+	}
+	if(pos.y+size.cy>ScreenY-30){
+		pos.y-=size.cy+font_height;
+	}
+
+	//サイズ変更
+	MoveWindow(ComplementWndInfo.hWnd,
+		pos.x,pos.y,
+		size.cx,size.cy,0);
+
+	//チラツキを抑えながら、補完リストを表示する
+	ShowWindow(ComplementWndInfo.hWnd,SW_SHOWNOACTIVATE);
+
+	ComplementWndInfo.iPos=iPos;
+}
+
+
+
+////////////////////////////////
+// コード補完ウィンドウ
+////////////////////////////////
+
+void DrawComplementListView(HWND hListView,HDC hdc){
+	//コード補完リストビューの独自描画
+	int i;
+	RECT rc;
+	char temporary[1024];
+
+	RECT rcClient;
+	GetClientRect(hListView,&rcClient);
+
+	HFONT hFont;
+	hFont=(HFONT)SendMessage(hListView,WM_GETFONT,0,0);
+
+	HFONT hOldFont;
+	hOldFont=(HFONT)SelectObject(hdc,hFont);
+
+	SetBkMode(hdc,OPAQUE);
+
+	for(i=0;i<ListView_GetItemCount(hListView);i++){
+		LVITEM lvItem;
+		lvItem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_STATE;
+		lvItem.iItem=i;
+		lvItem.iSubItem=0;
+		lvItem.pszText=temporary;
+		lvItem.cchTextMax=1024;
+		lvItem.stateMask=LVIS_SELECTED;
+		ListView_GetItem(hListView,&lvItem);
+
+		COLORREF colorBack;
+		if(lvItem.state&LVIS_SELECTED){
+			//選択中
+			colorBack=RGB(50,80,255);
+		}
+		else{
+			//選択されていない
+			colorBack=ListView_GetBkColor(hListView);
+		}
+
+
+		/////////////////////
+		// アイコンを描画
+		/////////////////////
+		ListView_GetItemRect(hListView,i,&rc,LVIR_ICON);
+
+		HIMAGELIST hImageList;
+		hImageList=ListView_GetImageList(hListView,LVSIL_SMALL);
+
+		ImageList_Draw(hImageList,lvItem.iImage,hdc,rc.left,rc.top,ILD_NORMAL);
+
+
+		/////////////////////
+		// 文字列を描画
+		/////////////////////
+
+		//背景色で下地を準備
+		ListView_GetItemRect(hListView,i,&rc,LVIR_ICON);
+		rc.left=rc.right;
+		rc.right=rcClient.right;
+		if(lvItem.state&LVIS_SELECTED){
+			//選択されている
+
+			//グラデーションビットマップを生成
+			SIZE size;
+			GetSize(&size,&rc);
+			HBITMAP hBackBmp;
+			hBackBmp=CreateGradationBitmap(&size,RGB(130,150,210),RGB(50,80,190));
+
+			HDC memdc;
+			memdc=CreateCompatibleDC(hdc);
+			SelectObject(memdc,hBackBmp);
+
+			BitBlt(hdc,rc.left,rc.top,size.cx,size.cy,memdc,0,0,SRCCOPY);
+
+			DeleteDC(memdc);
+			DeleteObject(hBackBmp);
+
+			SetTextColor(hdc,RGB(255,255,255));
+			SetBkMode(hdc,TRANSPARENT);
+		}
+		else{
+			//選択されていない
+			HBRUSH hBrush;
+			hBrush=CreateSolidBrush(colorBack);
+			FillRect(hdc,&rc,hBrush);
+			DeleteObject(hBrush);
+
+			SetTextColor(hdc,RGB(0,0,0));
+			SetBkMode(hdc,OPAQUE);
+			SetBkColor(hdc,colorBack);
+		}
+
+		ListView_GetItemRect(hListView,i,&rc,LVIR_LABEL);
+		rc.left+=5;
+		DrawText(hdc,lvItem.pszText,lstrlen(lvItem.pszText),&rc,DT_LEFT|DT_SINGLELINE|DT_VCENTER);
+	}
+
+	SelectObject(hdc,hOldFont);
+}
+
+WNDPROC OldComplementListViewProc;
+
+LRESULT CALLBACK ComplementListViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	int i,WndNum;
+	char temporary[VN_SIZE],temp2[VN_SIZE];
+
+	switch(message){
+		case WM_SETFOCUS:
+		case WM_RBUTTONDOWN:
+		case WM_RBUTTONDBLCLK:
+			//フォーカスをエディタに戻す
+			WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+			SetFocus(MdiInfo[WndNum].pmti->hEdit);
+			return 0;
+		case WM_KEYDOWN:
+			if(LOWORD(wParam)==VK_RETURN) goto DblClk;
+			else if(LOWORD(wParam)==VK_ESCAPE){
+				DestroyWindow(ComplementWndInfo.hWnd);
+				ComplementWndInfo.hWnd=0;
+			}
+			break;
+		case WM_LBUTTONDOWN:
+			//フォーカスをエディタに戻す
+			WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+			SetFocus(MdiInfo[WndNum].pmti->hEdit);
+
+			LVHITTESTINFO lvHitTest;
+			lvHitTest.pt.x=0;
+			lvHitTest.pt.y=HIWORD(lParam);
+			ListView_HitTest(hwnd,&lvHitTest);
+
+			//アイテムを選択
+			ListView_SetItemState(hwnd,lvHitTest.iItem,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
+			return 0;
+		case WM_LBUTTONDBLCLK:
+DblClk:
+
+			//選択されたアイテムを取得
+			for(i=0;i<ComplementWndInfo.MemberNum;i++){
+				if(ListView_GetItemState(ComplementWndInfo.hList,i,LVIS_SELECTED)) break;
+			}
+			if(i!=ComplementWndInfo.MemberNum){
+				ListView_GetItemText(hwnd,i,0,temporary,VN_SIZE);
+
+				WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+				if(ComplementWndInfo.pMemberInfo[0].dwAccess==ACCESS_PAIRCOMMAND){
+					//ペアステートメント補完
+
+					for(i=ComplementWndInfo.iPos-1;;i--){
+						if(MdiInfo[WndNum].pmti->buffer[i]!='\t'){
+							i++;
+							break;
+						}
+					}
+
+					GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+						i,
+						&MdiInfo[WndNum].pmti->StartCaretPos);
+
+					//インデント
+					lstrcpy(temp2,ComplementWndInfo.szIndent);
+					if(IsNeedNewIndentCommand(temporary)) lstrcat(temp2,"\t");
+
+					lstrcat(temp2,temporary);
+
+					//リプレース前に補完機能を破棄する
+					DestroyWindow(ComplementWndInfo.hWnd);
+					ComplementWndInfo.hWnd=0;
+
+					TextEdit_ReplaceUpdateUndoData(WndNum,temp2,0,1);
+				}
+				else{
+					//クラスメンバ補完
+
+					GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+						ComplementWndInfo.iPos,
+						&MdiInfo[WndNum].pmti->StartCaretPos);
+
+					//リプレース前に補完機能を破棄する
+					DestroyWindow(ComplementWndInfo.hWnd);
+					ComplementWndInfo.hWnd=0;
+
+					TextEdit_ReplaceUpdateUndoData(WndNum,temporary,0,1);
+				}
+			}
+
+			return 0;
+
+		case WM_PAINT:
+			HDC hdc;
+			PAINTSTRUCT ps;
+			hdc=BeginPaint(hwnd,&ps);
+			DrawComplementListView(hwnd,hdc);
+			EndPaint(hwnd,&ps);
+			return 0;
+	}
+	return CallWindowProc(OldComplementListViewProc,hwnd,message,wParam,lParam);
+}
+
+LRESULT CALLBACK ComplementWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	static HWND hListView;
+	static HIMAGELIST hImageList;
+
+	switch(message){
+		case WM_CREATE:
+
+			////////////////////////
+			// リストビューを作成
+			////////////////////////
+
+			hListView=CreateWindow(WC_LISTVIEW,0,
+				WS_CHILD|WS_VISIBLE|WS_VSCROLL|     LVS_SMALLICON|LVS_SINGLESEL|LVS_SORTASCENDING|LVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hwnd,NULL,hInst,0);
+			OldComplementListViewProc=(WNDPROC)GetWindowLongPtr(hListView,GWLP_WNDPROC);
+			SetWindowLong(hListView,GWLP_WNDPROC,(long)ComplementListViewProc);
+
+			//フォントをセット
+			extern METHODCHECKINFO MethodCheckInfo;
+			SendMessage(hListView,WM_SETFONT,(long)MethodCheckInfo.hFont,0);
+
+			ComplementWndInfo.hList=hListView;
+
+			//背景色をセット
+			COLORREF rgb;
+			if(ComplementWndInfo.pMemberInfo[0].dwAccess==ACCESS_PAIRCOMMAND){
+				//ペアステートメント補完
+				rgb=RGB(245,245,255);
+			}
+			else{
+				//クラスメンバ補完
+				rgb=RGB(255,245,240);
+			}
+			ListView_SetBkColor(hListView,rgb);
+			ListView_SetTextBkColor(hListView,rgb);
+
+
+			////////////////////////
+			// イメージリストを作成
+			////////////////////////
+
+			hImageList=ImageList_Create(16, 16, ILC_COLOR24, 7, 0);
+			ListView_SetImageList(hListView, hImageList, LVSIL_SMALL);
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_VARIABLE)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_VARIABLE)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_FUNCTION)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_FUNCTION)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_PAIRSTATEMENT)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_HTML_GENERAL_PARAMETER)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_HTML_PARAMETER)));
+
+			return 0;
+		case WM_SIZE:
+			MoveWindow(hListView,0,0,LOWORD(lParam),HIWORD(lParam),0);
+			return 0;
+		case WM_DESTROY:
+			DeleteComplementInfo();
+			ImageList_Destroy(hImageList);
+			return 0;
+
+		case WM_NOTIFY:
+			NMLISTVIEW *nmListView;
+			nmListView=(NMLISTVIEW *)lParam;
+			if(nmListView->hdr.hwndFrom==hListView){
+				if(nmListView->hdr.code==LVN_ITEMCHANGED){
+					InvalidateRect(hListView,NULL,0);
+					return 1;
+				}
+			}
+			break;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
Index: /ProjectEditor/Debugger.cpp
===================================================================
--- /ProjectEditor/Debugger.cpp	(revision 3)
+++ /ProjectEditor/Debugger.cpp	(revision 3)
@@ -0,0 +1,525 @@
+#ifndef THETEXT
+//ProjectEditorのみ
+
+#include "common.h"
+
+CDebugger *pobj_Debugger;
+
+#define WM_DEBUG_CONTINUE	WM_USER+200
+#define WM_STEP_IN			WM_USER+201
+#define WM_STEP_OVER		WM_USER+202
+#define WM_STEP_CURSOR		WM_USER+203
+#define WM_DEBUG_STOP		WM_USER+204
+#define WM_DEBUG_PAUSE		WM_USER+205
+
+CDebugger::CDebugger(){
+	hwnd=0;
+	bDebugging=0;
+}
+CDebugger::~CDebugger(){
+}
+
+BOOL CDebugger::IsDebugging(void){
+	return bDebugging;
+}
+BOOL CDebugger::IsDebuggerView(void){
+	if(hwnd) return 1;
+	return 0;
+}
+
+void CDebugger::resize(int x,int y,int cx,int cy){
+	MoveWindow(hwnd,x,y,cx,cy,1);
+}
+
+void CDebugger::ResetCommandEnabled(void){
+	if(bDebugging==0){
+		BOOL bEnableDocument=0, bBreakPoint=0;
+
+		HWND hChild;
+		hChild=GetWindow(hClient,GW_CHILD);
+
+		if(ProjectInfo.name[0]){
+			//有効（プロジェクトを開いているとき）
+			bEnableDocument=1;
+		}
+		else{
+			if(IsWindow(hChild)){
+				if(MdiInfo[GetWndNum(hChild)].DocType==WNDTYPE_BASIC){
+					//有効（Basicプログラムファイルを開いているとき）
+					bEnableDocument=1;
+				}
+			}
+		}
+
+		if(IsWindow(hChild)){
+			if(MdiInfo[GetWndNum(hChild)].DocType==WNDTYPE_BASIC){
+				//ブレークポイント有効（Basicプログラムファイルを開いているとき）
+				bBreakPoint=1;
+			}
+		}
+
+		int MenuMsg;
+		if(bEnableDocument) MenuMsg=MF_BYCOMMAND|MF_ENABLED;
+		else MenuMsg=MF_BYCOMMAND|MF_GRAYED;
+
+		//リリースコンパイル
+		pobj_MainMenu->EnableItem(IDM_RELEASECOMPILE,MenuMsg);
+		pobj_ReleaseToolbar->EnableItem(IDM_RELEASECOMPILE,bEnableDocument);
+
+		//リリース実行
+		pobj_MainMenu->EnableItem(IDM_RELEASERUN,MenuMsg);
+		pobj_ReleaseToolbar->EnableItem(IDM_RELEASERUN,bEnableDocument);
+
+		//デバッグコンパイル
+		pobj_MainMenu->EnableItem(IDM_DEBUGCOMPILE,MenuMsg);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUGCOMPILE,bEnableDocument);
+
+		//デバッグ実行
+		pobj_MainMenu->EnableItem(IDM_DEBUG,MenuMsg);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG,bEnableDocument);
+
+		if(bEnableDocument==0){
+			//ステップ実行
+			pobj_MainMenu->EnableItem(IDM_STEP_IN,MenuMsg);
+			pobj_MainMenu->EnableItem(IDM_STEP_OVER,MenuMsg);
+			pobj_MainMenu->EnableItem(IDM_STEP_CURSOR,MenuMsg);
+			pobj_DebuggerToolbar->EnableItem(IDM_STEP_IN,bEnableDocument);
+			pobj_DebuggerToolbar->EnableItem(IDM_STEP_OVER,bEnableDocument);
+			pobj_DebuggerToolbar->EnableItem(IDM_STEP_CURSOR,bEnableDocument);
+
+			//デバッグの一時停止
+			pobj_MainMenu->EnableItem(IDM_DEBUG_PAUSE,MenuMsg);
+			pobj_DebuggerToolbar->EnableItem(IDM_DEBUG_PAUSE,bEnableDocument);
+
+			//デバッグの中断
+			pobj_MainMenu->EnableItem(IDM_DEBUG_STOP,MenuMsg);
+			pobj_DebuggerToolbar->EnableItem(IDM_DEBUG_STOP,bEnableDocument);
+		}
+
+		if(bBreakPoint) MenuMsg=MF_BYCOMMAND|MF_ENABLED;
+		else MenuMsg=MF_BYCOMMAND|MF_GRAYED;
+
+		//ブレークポイント
+		pobj_MainMenu->EnableItem(IDM_BREAKPOINT,MenuMsg);
+		pobj_DebuggerToolbar->EnableItem(IDM_BREAKPOINT,bBreakPoint);
+
+
+
+
+		//プラットフォームセレクト
+		extern HWND hSelectCompilerCombo;
+		EnableWindow(hSelectCompilerCombo,bEnableDocument);
+	}
+}
+
+void CDebugger::SaftyCheck(void){
+	extern HWND hCompileView;
+	if(!IsWindow(hCompileView)){
+		SendMessage(hOwner,WM_DESTROYDEBUGGERVIEW,0,0);
+		SendMessage(hOwner,WM_DESTROYDEBUGGERBASE,0,0);
+		SendMessage(hOwner,WM_DESTROYCOMPILEVIEW,0,0);
+	}
+}
+
+
+
+/////////////////////////////////////////
+// デバッグ開始
+/////////////////////////////////////////
+void CDebugger::begin(void){
+	bDebugging=1;
+
+	if(pobj_MainMenu){
+		//リリースコンパイルを無効化
+		pobj_MainMenu->EnableItem(IDM_RELEASECOMPILE,MF_BYCOMMAND|MF_GRAYED);
+		pobj_DebuggerToolbar->EnableItem(IDM_RELEASECOMPILE,0);
+
+		//デバッグコンパイルを無効化
+		pobj_MainMenu->EnableItem(IDM_DEBUGCOMPILE,MF_BYCOMMAND|MF_GRAYED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUGCOMPILE,0);
+
+		//デバッグ実行を無効化
+		pobj_MainMenu->EnableItem(IDM_DEBUG,MF_BYCOMMAND|MF_GRAYED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG,0);
+
+		//ステップ実行を無効化
+		pobj_MainMenu->EnableItem(IDM_STEP_IN,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_STEP_OVER,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_STEP_CURSOR,MF_BYCOMMAND|MF_GRAYED);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_IN,0);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_OVER,0);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_CURSOR,0);
+
+		//デバッグの一時停止を有効化
+		pobj_MainMenu->EnableItem(IDM_DEBUG_PAUSE,MF_BYCOMMAND|MF_ENABLED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG_PAUSE,1);
+
+		//デバッグの中断を有効化
+		pobj_MainMenu->EnableItem(IDM_DEBUG_STOP,MF_BYCOMMAND|MF_ENABLED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG_STOP,1);
+	}
+}
+
+
+/////////////////////////////////////////
+// デバッグ終了
+/////////////////////////////////////////
+void CDebugger::end(void){
+	bDebugging=0;
+
+	if(pobj_MainMenu){
+		//リリースコンパイルを有効化
+		pobj_MainMenu->EnableItem(IDM_RELEASECOMPILE,MF_BYCOMMAND|MF_ENABLED);
+		pobj_DebuggerToolbar->EnableItem(IDM_RELEASECOMPILE,1);
+
+		//デバッグコンパイルを有効化
+		pobj_MainMenu->EnableItem(IDM_DEBUGCOMPILE,MF_BYCOMMAND|MF_ENABLED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUGCOMPILE,1);
+
+		//デバッグ実行を有効化
+		pobj_MainMenu->EnableItem(IDM_DEBUG,MF_BYCOMMAND|MF_ENABLED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG,1);
+
+		//ステップ実行を無効化
+		pobj_MainMenu->EnableItem(IDM_STEP_IN,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_STEP_OVER,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_STEP_CURSOR,MF_BYCOMMAND|MF_GRAYED);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_IN,0);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_OVER,0);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_CURSOR,0);
+
+		//デバッグの一時停止を無効化
+		pobj_MainMenu->EnableItem(IDM_DEBUG_PAUSE,MF_BYCOMMAND|MF_GRAYED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG_PAUSE,0);
+
+		//デバッグの中断を無効化
+		pobj_MainMenu->EnableItem(IDM_DEBUG_STOP,MF_BYCOMMAND|MF_GRAYED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG_STOP,0);
+	}
+}
+
+
+/////////////////////////////////////////
+// 一時停止（ウォッチウィンドウが立ち上がる）
+/////////////////////////////////////////
+void CDebugger::watch_start(HWND hDebuggerView){
+	hwnd=hDebuggerView;
+
+	if(pobj_MainMenu){
+		//継続を有効化
+		pobj_MainMenu->EnableItem(IDM_DEBUG,MF_BYCOMMAND|MF_ENABLED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG,1);
+
+		//ステップ実行を有効化
+		pobj_MainMenu->EnableItem(IDM_STEP_IN,MF_BYCOMMAND|MF_ENABLED);
+		pobj_MainMenu->EnableItem(IDM_STEP_OVER,MF_BYCOMMAND|MF_ENABLED);
+		pobj_MainMenu->EnableItem(IDM_STEP_CURSOR,MF_BYCOMMAND|MF_ENABLED);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_IN,1);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_OVER,1);
+		pobj_DebuggerToolbar->EnableItem(IDM_STEP_CURSOR,1);
+
+		//デバッグの一時停止を無効化
+		pobj_MainMenu->EnableItem(IDM_DEBUG_PAUSE,MF_BYCOMMAND|MF_GRAYED);
+		pobj_DebuggerToolbar->EnableItem(IDM_DEBUG_PAUSE,0);
+	}
+}
+
+
+/////////////////////////////////////////
+// デバッグを再開
+/////////////////////////////////////////
+void CDebugger::watch_quit(void){
+	hwnd=0;
+
+	begin();
+}
+
+
+void CDebugger::DebugContinue(void){
+	if(hwnd) SendMessage(hwnd,WM_DEBUG_CONTINUE,0,0);
+}
+void CDebugger::StepIn(void){
+	if(hwnd) SendMessage(hwnd,WM_STEP_IN,0,0);
+}
+void CDebugger::StepOver(void){
+	if(hwnd) SendMessage(hwnd,WM_STEP_OVER,0,0);
+}
+void CDebugger::StepToCursor(void){
+	if(hwnd){
+		int WndNum;
+		WndNum=GetNowWndNum();
+		if(WndNum==-1) return;
+
+		char temporary[MAX_PATH];
+		sprintf(temporary,"\"%s\",%d",MdiInfo[WndNum].path,MdiInfo[WndNum].pmti->StartCaretPos.y);
+
+		char temp2[MAX_PATH];
+		GetTempPath(MAX_PATH,temp2);
+		if(temp2[lstrlen(temp2)-1]!='\\') lstrcat(temp2,"\\");
+		lstrcat(temp2,"ab_breakpoint.tmp");
+
+		WriteBuffer(temp2,temporary,lstrlen(temporary));
+
+		SendMessage(hwnd,WM_STEP_CURSOR,0,0);
+	}
+}
+void CDebugger::DebugStop(void){
+	extern HWND hCompileView;
+	SendMessage(hCompileView,WM_DEBUG_STOP,0,0);
+}
+void CDebugger::DebugPause(void){
+	extern HWND hCompileView;
+	SendMessage(hCompileView,WM_DEBUG_PAUSE,0,0);
+}
+
+
+
+
+
+
+//////////////////////////
+// ブレークポイント
+//////////////////////////
+
+CFileBreakPoint::CFileBreakPoint(char *lpszFileName,int iLineNum){
+	this->lpszFileName=(char *)HeapAlloc(hHeap,0,lstrlen(lpszFileName)+1);
+	lstrcpy(this->lpszFileName,lpszFileName);
+
+	piLine=(int *)HeapAlloc(hHeap,0,sizeof(int));
+	piLine[0]=iLineNum;
+	num=1;
+}
+CFileBreakPoint::~CFileBreakPoint(){
+	HeapDefaultFree(lpszFileName);
+	HeapDefaultFree(piLine);
+}
+void CFileBreakPoint::add(int iLineNum){
+	piLine=(int *)HeapReAlloc(hHeap,0,piLine,(num+1)*sizeof(int));
+
+	int i;
+	for(i=0;i<num;i++){
+		if(piLine[i]>iLineNum){
+			for(int i2=num;i2>i;i2--){
+				piLine[i2]=piLine[i2-1];
+			}
+			break;
+		}
+	}
+
+	piLine[i]=iLineNum;
+	num++;
+}
+void CFileBreakPoint::remove(int iLineNum){
+	int i;
+	for(i=0;i<num;i++){
+		if(iLineNum==piLine[i]) break;
+	}
+	if(i==num) return;
+
+	num--;
+	for(;i<num;i++){
+		piLine[i]=piLine[i+1];
+	}
+}
+BOOL CFileBreakPoint::check(int iLineNum){
+	int i;
+	for(i=0;i<num;i++){
+		if(iLineNum==piLine[i]) return 1;
+	}
+	return 0;
+}
+
+void CFileBreakPoint::replace(LPSTR lpszBuffer,CHARRANGE *pDelRange,CHARRANGE *pRange,LPSTR lpszNewStr){
+	int i;
+
+	//削除される行範囲を取得
+	int DelStartLine=0;
+	for(i=0;i<pDelRange->cpMin;i++){
+		if(IsReturnCode(lpszBuffer+i)){
+			DelStartLine++;
+		}
+	}
+
+	int DelEndLine=DelStartLine;
+	for(;i<pDelRange->cpMax;i++){
+		if(IsReturnCode(lpszBuffer+i)){
+			DelEndLine++;
+		}
+	}
+
+	//ブレークポイントを消去
+	for(i=0;i<num;i++){
+		if(DelStartLine<piLine[i]&&piLine[i]<DelEndLine){
+			remove(piLine[i]);
+		}
+	}
+
+
+	//新しく挿入される文字列の行数を計算する
+	int NewLineNum=0;
+	for(i=0;lpszNewStr[i];i++){
+		if(IsReturnCode(lpszNewStr+i)){
+			NewLineNum++;
+		}
+	}
+
+
+	//オフセットを計算
+	int offset=DelStartLine-DelEndLine+NewLineNum;
+
+
+	//挿入行以降の行にて、オフセットを反映される
+	for(i=0;i<num;i++){
+		if(DelStartLine<=piLine[i]){
+			piLine[i]+=offset;
+		}
+	}
+}
+
+
+
+CDBBreakPoint::CDBBreakPoint(){
+	ppItem=(CFileBreakPoint **)HeapAlloc(hHeap,0,1);
+	num=0;
+}
+CDBBreakPoint::~CDBBreakPoint(){
+	int i;
+	for(i=0;i<num;i++){
+		delete ppItem[i];
+	}
+	HeapDefaultFree(ppItem);
+}
+void CDBBreakPoint::insert(char *lpszFileName,int iLineNum){
+	int i;
+	for(i=0;i<num;i++){
+		if(lstrcmpi(ppItem[i]->lpszFileName,lpszFileName)==0){
+			ppItem[i]->add(iLineNum);
+			return;
+		}
+	}
+
+	if(i==num){
+		ppItem=(CFileBreakPoint **)HeapReAlloc(hHeap,0,ppItem,(num+1)*sizeof(CFileBreakPoint *));
+		ppItem[num]=new CFileBreakPoint(lpszFileName,iLineNum);
+		num++;
+	}
+}
+void CDBBreakPoint::remove(char *lpszFileName,int iLineNum){
+	int i;
+	for(i=0;i<num;i++){
+		if(lstrcmpi(lpszFileName,ppItem[i]->lpszFileName)==0){
+			ppItem[i]->remove(iLineNum);
+			break;
+		}
+	}
+	if(i==num) return;
+
+	if(ppItem[i]->num==0){
+		delete ppItem[i];
+
+		num--;
+		for(;i<num;i++){
+			ppItem[i]=ppItem[i+1];
+		}
+	}
+}
+
+void CDBBreakPoint::Event_BreakPoint(void){
+	int WndNum;
+	WndNum=GetNowWndNum();
+	if(WndNum==-1) return;
+
+	if(!IsFile(MdiInfo[WndNum].path)) return;
+
+	int i,i2,sw=0;
+	for(i=0;i<num;i++){
+		if(lstrcmpi(MdiInfo[WndNum].path,ppItem[i]->lpszFileName)==0){
+			for(i2=0;i2<ppItem[i]->num;i2++){
+				if(MdiInfo[WndNum].pmti->StartCaretPos.y==ppItem[i]->piLine[i2]){
+					sw=1;
+					break;
+				}
+			}
+			break;
+		}
+	}
+
+	if(sw==0){
+		//ブレークポイントを追加
+		insert(MdiInfo[WndNum].path,MdiInfo[WndNum].pmti->StartCaretPos.y);
+	}
+	else{
+		//ブレークポイントを削除
+		remove(MdiInfo[WndNum].path,MdiInfo[WndNum].pmti->StartCaretPos.y);
+	}
+
+	if(pobj_Debugger->IsDebugging()){
+		SaveToTempFile();
+
+		//デバッガにブレークポイント更新のメッセージを送る
+		//未完成
+	}
+
+	//エディタを再描画
+	InvalidateRect(MdiInfo[WndNum].pmti->hEdit,NULL,0);
+}
+void CDBBreakPoint::SaveToTempFile(void){
+	char *buffer;
+	int length=0;
+	buffer=(char *)HeapAlloc(hHeap,0,65535);
+	buffer[0]=0;
+	int i,i2;
+	for(i=0;i<num;i++){
+		sprintf(buffer+length,"\"%s\"",ppItem[i]->lpszFileName);
+		length+=lstrlen(buffer+length);
+
+		for(i2=0;i2<ppItem[i]->num;i2++){
+			sprintf(buffer+length,",%d",ppItem[i]->piLine[i2]);
+			length+=lstrlen(buffer+length);
+		}
+
+		lstrcpy(buffer+length,"\n");
+		length+=lstrlen(buffer+length);
+	}
+
+	HANDLE hFile;
+	char temporary[MAX_PATH];
+	GetTempPath(MAX_PATH,temporary);
+	if(temporary[lstrlen(temporary)-1]!='\\') lstrcat(temporary,"\\");
+	lstrcat(temporary,"ab_breakpoint.tmp");
+
+	//未完成
+	sprintf(temporary,"%sab_breakpoint.tmp",pj_editor_Dir);
+
+	hFile=CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
+	DWORD dwAccBytes;
+	WriteFile(hFile,buffer,lstrlen(buffer),&dwAccBytes,NULL);
+	CloseHandle(hFile);
+
+	HeapDefaultFree(buffer);
+}
+
+
+CFileBreakPoint *CDBBreakPoint::EnumLines(char *lpszFilePath){
+	int i;
+	for(i=0;i<num;i++){
+		if(lstrcmpi(lpszFilePath,ppItem[i]->lpszFileName)==0){
+			return ppItem[i];
+		}
+	}
+	return 0;
+}
+
+void CDBBreakPoint::replace(LPSTR lpszFilePath,LPSTR lpszBuffer,CHARRANGE *pDelRange,CHARRANGE *pRange,LPSTR lpszNewStr){
+	int i;
+	for(i=0;i<num;i++){
+		if(lstrcmpi(ppItem[i]->lpszFileName,lpszFilePath)==0){
+			ppItem[i]->replace(lpszBuffer,pDelRange,pRange,lpszNewStr);
+			return;
+		}
+	}
+}
+
+
+
+#endif //THETEXT
Index: /ProjectEditor/Debugger.h
===================================================================
--- /ProjectEditor/Debugger.h	(revision 3)
+++ /ProjectEditor/Debugger.h	(revision 3)
@@ -0,0 +1,83 @@
+
+class CDebugger{
+	BOOL bDebugging;
+public:
+	HWND hwnd;
+
+	CDebugger::CDebugger();
+	CDebugger::~CDebugger();
+
+	BOOL IsDebugging(void);
+	BOOL IsDebuggerView(void);
+
+	void resize(int x,int y,int cx,int cy);
+
+	void ResetCommandEnabled(void);
+
+	void SaftyCheck(void);
+
+	void begin(void);
+	void end(void);
+	void watch_start(HWND hDebuggerView);
+	void watch_quit(void);
+
+
+	/////////////////////////////////
+	// イベントによるアプリ間通信
+	/////////////////////////////////
+
+	void DebugContinue(void);
+	void StepIn(void);
+	void StepOver(void);
+	void StepToCursor(void);
+
+	void DebugStop(void);
+	void DebugPause(void);
+};
+
+extern CDebugger *pobj_Debugger;
+
+
+
+
+
+/////////////////////////////////
+// ブレークポイント
+/////////////////////////////////
+
+class CFileBreakPoint{
+public:
+	char *lpszFileName;
+
+	int *piLine;
+	int num;
+
+	CFileBreakPoint(char *lpszFileName,int iLineNum);
+	~CFileBreakPoint();
+
+	void add(int iLineNum);
+	void remove(int iLineNum);
+
+	BOOL check(int iLineNum);
+
+	void replace(LPSTR lpszBuffer,CHARRANGE *pDelRange,CHARRANGE *pRange,LPSTR lpszNewStr);
+};
+
+class CDBBreakPoint{
+	CFileBreakPoint **ppItem;
+	int num;
+
+public:
+	CDBBreakPoint();
+	~CDBBreakPoint();
+
+	void insert(char *lpszFileName,int iLineNum);
+	void remove(char *lpszFileName,int iLineNum);
+
+	void Event_BreakPoint(void);
+	void SaveToTempFile(void);
+
+	CFileBreakPoint *EnumLines(char *lpszFilePath);
+
+	void replace(LPSTR lpszFilePath,LPSTR lpszBuffer,CHARRANGE *pDelRange,CHARRANGE *pRange,LPSTR lpszNewStr);
+};
Index: /ProjectEditor/DesignTheme.cpp
===================================================================
--- /ProjectEditor/DesignTheme.cpp	(revision 3)
+++ /ProjectEditor/DesignTheme.cpp	(revision 3)
@@ -0,0 +1,191 @@
+#include "common.h"
+
+
+CDBTheme *pobj_DBTheme;
+
+
+CTheme::CTheme(char *path,char *name){
+	bActive=0;
+	lstrcpy(m_name,name);
+	if(path==0) return;
+
+	buffer=ReadBuffer(path);
+
+
+	//通常の文字色
+	GetRGBValue("rgbDefault",&TextColorInfo.rgbDefault);
+
+	//コメント文字色
+	GetRGBValue("rgbComment",&TextColorInfo.rgbComment);
+
+	//特殊ステートメント
+	GetRGBValue("rgbStatement",&TextColorInfo.rgbStatement);
+
+	//文字列色
+	GetRGBValue("rgbString",&TextColorInfo.rgbString);
+
+	//背景色（カーソル行）
+	GetRGBValue("rgbCursorBack",&TextColorInfo.rgbCursorBack);
+
+	//背景色（一般）
+	GetRGBValue("rgbBackground",&TextColorInfo.rgbBackground);
+
+	//背景画像
+	if(!GetStringValue("BackgroundImagePath",szBackgroundImagePath)) szBackgroundImagePath[0]=0;
+
+	HeapDefaultFree(buffer);
+}
+CTheme::CTheme(){
+	CTheme(0,THEMENAME_USER);
+}
+CTheme::~CTheme(){
+}
+
+void CTheme::save(){
+	buffer=(char *)HeapAlloc(hHeap,0,65536);
+	buffer[0]=0;
+
+
+	//通常の文字色
+	SetRGBValue("rgbDefault",TextColorInfo.rgbDefault);
+
+	//コメント文字色
+	SetRGBValue("rgbComment",TextColorInfo.rgbComment);
+
+	//特殊ステートメント
+	SetRGBValue("rgbStatement",TextColorInfo.rgbStatement);
+
+	//文字列色
+	SetRGBValue("rgbString",TextColorInfo.rgbString);
+
+	//背景色（カーソル行）
+	SetRGBValue("rgbCursorBack",TextColorInfo.rgbCursorBack);
+
+	//背景色（一般）
+	SetRGBValue("rgbBackground",TextColorInfo.rgbBackground);
+
+	//背景画像
+	SetStringValue("BackgroundImagePath",szBackgroundImagePath);
+
+	char path[MAX_PATH];
+	sprintf(path,"%sTheme\\%s",pj_editor_Dir,m_name);
+	if(!IsFile(path)){
+		CreateDirectory(path,NULL);
+	}
+
+	sprintf(path,"%sTheme\\%s\\design.ini",pj_editor_Dir,m_name);
+	WriteBuffer(path,buffer,lstrlen(buffer));
+
+	HeapDefaultFree(buffer);
+}
+
+
+CDBTheme::CDBTheme(){
+	hBackBmp=0;
+
+	iNum=0;
+	ppobj_Theme=(CTheme **)HeapAlloc(hHeap,0,1);
+
+	char temporary[MAX_PATH];
+	sprintf(temporary,"%sTheme\\*",pj_editor_Dir);
+
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind!=INVALID_HANDLE_VALUE){
+		do{
+			if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
+				if(!(lstrcmp(wfd.cFileName,".")==0||lstrcmp(wfd.cFileName,"..")==0)){
+					//ディレクトリのとき
+					sprintf(temporary,"%sTheme\\%s\\design.ini",pj_editor_Dir,wfd.cFileName);
+					if(IsFile(temporary)){
+						add(temporary,wfd.cFileName);
+					}
+				}
+			}
+			else{
+				//ファイルのとき
+				//無視
+			}
+		}while(FindNextFile(hFind,&wfd));
+	}
+}
+CDBTheme::~CDBTheme(){
+	int i;
+	for(i=0;i<iNum;i++){
+		delete ppobj_Theme[i];
+	}
+	HeapDefaultFree(ppobj_Theme);
+
+	unlock();
+}
+
+CTheme *CDBTheme::dupli_check(char *name){
+	//重複チェック
+	int i;
+	for(i=0;i<iNum;i++){
+		if(lstrcmpi(ppobj_Theme[i]->m_name,name)==0){
+			return ppobj_Theme[i];
+		}
+	}
+	return 0;
+}
+
+CTheme *CDBTheme::add(char *path,char *name){
+	ppobj_Theme=(CTheme **)HeapReAlloc(hHeap,0,ppobj_Theme,(iNum+1)*sizeof(CTheme *));
+	ppobj_Theme[iNum]=new CTheme(path,name);
+	iNum++;
+
+	return ppobj_Theme[iNum-1];
+}
+void CDBTheme::ResetTheme_ToComboBox(HWND hCombo){
+	int i;
+	for(i=0;i<iNum;i++){
+		SendMessage(hCombo,CB_ADDSTRING,0,(LPARAM)ppobj_Theme[i]->m_name);
+	}
+
+	//選択する
+	for(i=0;i<iNum;i++){
+		if(lstrcmp(ppobj_Theme[i]->m_name,pobj_nv->szActiveTheme)==0){
+			i=SendMessage(hCombo,CB_FINDSTRINGEXACT,0,(LPARAM)ppobj_Theme[i]->m_name);
+			SendMessage(hCombo,CB_SETCURSEL,i,0);
+			break;
+		}
+	}
+}
+CTheme *CDBTheme::GetActiveTheme(){
+	int i;
+	for(i=0;i<iNum;i++){
+		if(lstrcmp(ppobj_Theme[i]->m_name,pobj_nv->szActiveTheme)==0){
+			return ppobj_Theme[i];
+		}
+	}
+	return 0;
+}
+
+void CDBTheme::lock(void){
+	CTheme *pobj_Theme;
+	pobj_Theme=GetActiveTheme();
+
+	if(pobj_Theme->szBackgroundImagePath[0]=='\0'){
+		hBackBmp=0;
+		return;
+	}
+
+	char szThemeDir[MAX_PATH];
+	sprintf(szThemeDir,"%sTheme\\%s\\",pj_editor_Dir,pobj_Theme->m_name);
+
+	char temporary[MAX_PATH];
+	lstrcpy(temporary,pobj_Theme->szBackgroundImagePath);
+	GetFullPath(temporary,szThemeDir);
+
+	hBackBmp=(HBITMAP)LoadImage(0,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
+
+	BITMAP Bitmap;
+	GetObject(hBackBmp,sizeof(BITMAP),&Bitmap);
+	sizeBackBmp.cx=Bitmap.bmWidth;
+	sizeBackBmp.cy=Bitmap.bmHeight;
+}
+void CDBTheme::unlock(void){
+	if(hBackBmp) DeleteObject(hBackBmp);
+}
Index: /ProjectEditor/DesignTheme.h
===================================================================
--- /ProjectEditor/DesignTheme.h	(revision 3)
+++ /ProjectEditor/DesignTheme.h	(revision 3)
@@ -0,0 +1,53 @@
+
+
+#define THEMENAME_CLASSIC	"Classic"
+#define THEMENAME_USER		"User Setting"
+
+
+struct TEXTEDIT_COLOR_INFO{
+	COLORREF rgbDefault;		//通常の文字
+	COLORREF rgbComment;		//コメント
+	COLORREF rgbStatement;		//特殊ステートメント
+	COLORREF rgbString;			//文字列
+	COLORREF rgbCursorBack;		//背景色（カーソル行）
+	COLORREF rgbBackground;		//背景色（一般）
+};
+extern TEXTEDIT_COLOR_INFO tci;
+
+
+class CTheme:public CSettingFile{
+public:
+	BOOL bActive;
+	char m_name[MAX_PATH];
+	TEXTEDIT_COLOR_INFO TextColorInfo;
+	char szBackgroundImagePath[MAX_PATH];
+
+	CTheme(char *path,char *name);
+	CTheme();
+	~CTheme();
+
+	void save(void);
+};
+
+class CDBTheme{
+public:
+	int iNum;
+	CTheme **ppobj_Theme;
+
+	CDBTheme();
+	~CDBTheme();
+	CTheme *dupli_check(char *name);
+
+	CTheme *add(char *path,char *name);
+
+	void ResetTheme_ToComboBox(HWND hCombo);
+
+	CTheme *GetActiveTheme();
+
+	HBITMAP hBackBmp;
+	SIZE sizeBackBmp;
+	void lock(void);
+	void unlock(void);
+};
+
+extern CDBTheme *pobj_DBTheme;
Index: /ProjectEditor/DialogBoxes.cpp
===================================================================
--- /ProjectEditor/DialogBoxes.cpp	(revision 3)
+++ /ProjectEditor/DialogBoxes.cpp	(revision 3)
@@ -0,0 +1,2297 @@
+#include "Common.h"
+
+//タブ用
+BOOL SetSwitch[32];
+
+
+void SetPosCenter(HWND hParent,HWND hwnd){
+	RECT owrect,rect;
+	int x,y;
+
+	if(IsWindow(hParent)) GetWindowRect(hParent,&owrect);
+	else{
+		owrect.left=0;
+		owrect.top=0;
+		owrect.right=ScreenX;
+		owrect.bottom=ScreenY;
+	}
+	GetWindowRect(hwnd,&rect);
+	x=((owrect.right-owrect.left)-(rect.right-rect.left))/2+owrect.left;
+	y=((owrect.bottom-owrect.top)-(rect.bottom-rect.top))/2+owrect.top;
+	SetWindowPos(hwnd,0,x,y,0,0,SWP_NOSIZE);
+}
+void SetPosCenter(HWND hwnd){
+	SetPosCenter(hOwner,hwnd);
+}
+BOOL SetFontDialog(HWND hwnd,LOGFONT *lf,BOOL bFixedPitchOnly,int *lpiPointSize){
+	CHOOSEFONT cf;
+	LOGFONT lfDummy;
+
+	lfDummy=*lf;
+	memset(&cf,0,sizeof(CHOOSEFONT));
+	cf.lStructSize=sizeof(CHOOSEFONT);
+	cf.hwndOwner=hwnd;
+	cf.lpLogFont=&lfDummy;
+	cf.Flags=CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT;
+	if(bFixedPitchOnly) cf.Flags|=CF_FIXEDPITCHONLY|CF_NOVERTFONTS;
+	cf.nFontType=SCREEN_FONTTYPE;
+	lstrcpy((char *)cf.lpTemplateName,"Font select");
+
+	if(!ChooseFont(&cf)) return 0;
+
+	memcpy(lf,&lfDummy,sizeof(LOGFONT));
+
+	if(lpiPointSize) *lpiPointSize=cf.iPointSize;
+
+	return 1;
+}
+
+
+
+//////////////////////////////////
+// プロジェクト新規作成ウィザード
+//////////////////////////////////
+
+//プロジェクト作成項目
+#if defined(JPN)
+//日本語
+#define TEXT_BASE_NORMAL	"ノーマル ウィンドウをベースに、GUIアプリケーションを作成します。"
+#define TEXT_BASE_PROMPT	"プロンプト ウィンドウをベースに、N88BASIC互換プログラムを作成します。"
+#define TEXT_BASE_DOSPROMPT	"コンソール アプリケーションを作成します。Windows上で稼動するDOSプロンプトでの入出力が可能になります。"
+#define TEXT_NOBASE			"空のプロジェクトを作成します。"
+#define TEXT_DIRECTX		"DirectXに対応したアプリケーションを作成します。2Dまたは3Dの描画を高速に行うことができ、ゲームアプリケーションなどの開発に最適です。"
+#define TEXT_DLL			"ダイナミック リンク ライブラリ(DLL)を作成します。"
+#else
+//英語
+#define TEXT_BASE_NORMAL	"You can make a GUI application of a normal window base."
+#define TEXT_BASE_PROMPT	"You can make a N88 compatible program of a prompt window base."
+#define TEXT_BASE_DOSPROMPT	"You can make a console application."
+#define TEXT_NOBASE			"Empty project is created."
+#define TEXT_DIRECTX		"You can make a DirectX application. It can draw 2D or 3D graphics at high speed and it is useful to a game programing."
+#define TEXT_DLL			"You can make a DLL(Dynamic Link Library)."
+#endif
+
+void GetCheckTextBuffer(char *buffer){
+	extern NEWPROJECTINFO NewProjectInfo;
+	int i;
+
+#if defined(JPN)
+	//日本語
+	lstrcpy(buffer,"作成するプロジェクトの内容を確認して \"完了\" ボタンを押して下さい。\r\n\r\n");
+	i=lstrlen(buffer);
+	sprintf(buffer+i,"プロジェクト名: \"%s\"\r\n",NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+	sprintf(buffer+i,"ワーク ディレクトリ: \"%s\\%s\"\r\n\r\n",pobj_nv->ProjectSaveDir,NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+
+	if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
+		lstrcpy(buffer+i,"ノーマル ウィンドウを持つEXE形式の実行ファイルを作成します。\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wnd … ウィンドウ デザイン保存用\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"MainWnd.ab … メイン ウィンドウのイベント プロシージャ用\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_PROMPTBASE){
+		lstrcpy(buffer+i,"プロンプト ウィンドウを持つEXE形式の実行ファイルを作成します。\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_DOSPROMPTBASE){
+		lstrcpy(buffer+i,"EXE形式のコンソール アプリケーションを作成します。\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_NOBASE){
+		lstrcpy(buffer+i,"EXE形式の実行ファイルを作成します。\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+		lstrcpy(buffer+i,"EXE形式の実行ファイルを作成します。同時に、DirectXの操作に必要なソースコードを生成します。\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"dx_graphics.sbp … DirectGraphicsサポート用ソースコード ファイル\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"dx_input.sbp … DirectInputサポート用ソースコード ファイル\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"dx_music.sbp … DirectMusicサポート用ソースコード ファイル\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_DLL){
+		lstrcpy(buffer+i,"ダイナミック リンク ライブラリ(DLL)を作成します。\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- 以下のファイルが生成されます ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … プロジェクト ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … インデックス ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … メイン ソースコード ファイル\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … 作業状況の管理用\r\n",NewProjectInfo.name);
+	}
+#else
+	//英語
+	lstrcpy(buffer,"Please check following points and click the \"Finish\" button.\r\n\r\n");
+	i=lstrlen(buffer);
+	sprintf(buffer+i,"Project Name: \"%s\"\r\n",NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+	sprintf(buffer+i,"Work Directory: \"%s\\%s\"\r\n\r\n",pobj_nv->ProjectSaveDir,NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+
+	if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
+		sprintf(buffer+i,"%s\r\n\r\n",TEXT_BASE_NORMAL);
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- Creation Files ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … Project file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wnd … Data of Window Design\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"MainWnd.ab … Data of Event Procedures of the Main Window\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_PROMPTBASE){
+		sprintf(buffer+i,"%s\r\n\r\n",TEXT_BASE_PROMPT);
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- Creation Files ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_DOSPROMPTBASE){
+		sprintf(buffer+i,"%s\r\n\r\n",TEXT_BASE_DOSPROMPT);
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- Creation Files ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_NOBASE){
+		sprintf(buffer+i,"%s\r\n\r\n",TEXT_NOBASE);
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- Creation Files ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+		sprintf(buffer+i,"%s\r\n\r\n",TEXT_DIRECTX);
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- Creation Files ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"dx_graphics.sbp … DirectGraphics is supported at this source file\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"dx_input.sbp … DirectInput is supported at this source file\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"dx_music.sbp … DirectMusic is supported at this source file\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_DLL){
+		sprintf(buffer+i,"%s\r\n\r\n",TEXT_DLL);
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"--- Creation Files ---\r\n");
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.pj … Creation Files\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.idx … Index file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.ab … Main Source Code file\r\n",NewProjectInfo.name);
+		i+=lstrlen(buffer+i);
+		sprintf(buffer+i,"%s.wrk … Data of Work State\r\n",NewProjectInfo.name);
+	}
+#endif
+}
+BOOL CALLBACK DlgNewProject_Page3(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	char buffer[GENERAL_SIZE];
+	LPPSHNOTIFY lpPshNotify;
+	switch(message){
+		case WM_NOTIFY:
+			lpPshNotify=(LPPSHNOTIFY)lParam;
+			switch(lpPshNotify->hdr.code){
+				case PSN_SETACTIVE:
+					PropSheet_SetWizButtons(GetParent(hwnd),PSWIZB_FINISH|PSWIZB_BACK);
+
+					GetCheckTextBuffer(buffer);
+
+					SetDlgItemText(hwnd,IDC_PROJECTINFO,buffer);
+					SetTimer(hwnd,1,10,0);
+					return 1;
+				case PSN_WIZFINISH:
+					MakeNewProject();
+					return 1;
+			}
+			break;
+		case WM_TIMER:
+			KillTimer(hwnd,1);
+			SendDlgItemMessage(hwnd,IDC_PROJECTINFO,EM_SETSEL,0,0);
+			return 1;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgNewProject_Page2(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern NEWPROJECTINFO NewProjectInfo;
+	LPPSHNOTIFY lpPshNotify;
+	switch(message){
+		case WM_INITDIALOG:
+
+			//#strict指定
+			SendDlgItemMessage(hwnd,IDC_STRICT,BM_SETCHECK,BST_CHECKED,0);
+
+			break;
+		case WM_NOTIFY:
+			lpPshNotify=(LPPSHNOTIFY)lParam;
+			switch(lpPshNotify->hdr.code){
+				case PSN_SETACTIVE:
+					//DirectXアプリのときはMMSYSをチェック
+					if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+						SendDlgItemMessage(hwnd,IDC_API_MMSYS,BM_SETCHECK,BST_CHECKED,0);
+						EnableWindow(GetDlgItem(hwnd,IDC_API_MMSYS),0);
+					}
+					else{
+						EnableWindow(GetDlgItem(hwnd,IDC_API_MMSYS),1);
+					}
+
+					PropSheet_SetWizButtons(GetParent(hwnd),PSWIZB_NEXT|PSWIZB_BACK);
+					return 1;
+				case PSN_WIZNEXT:
+					NewProjectInfo.dwOption=PJ_OP_RC_MANIFEST;
+					if(SendDlgItemMessage(hwnd,IDC_STRICT,BM_GETCHECK,0,0))
+						NewProjectInfo.dwOption|=PJ_OP_STRICT;
+					if(SendDlgItemMessage(hwnd,IDC_API_COMMCTRL,BM_GETCHECK,0,0))
+						NewProjectInfo.dwOption|=PJ_OP_COMMCTRL;
+					if(SendDlgItemMessage(hwnd,IDC_API_MMSYS,BM_GETCHECK,0,0))
+						NewProjectInfo.dwOption|=PJ_OP_MMSYSTEM;
+					if(SendDlgItemMessage(hwnd,IDC_API_RICHEDIT,BM_GETCHECK,0,0))
+						NewProjectInfo.dwOption|=PJ_OP_RICHEDIT;
+					if(SendDlgItemMessage(hwnd,IDC_API_WINSOCK,BM_GETCHECK,0,0))
+						NewProjectInfo.dwOption|=PJ_OP_WINSOCK;
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+void AppImage_ShowOrHide(HWND hDlg,int id){
+	int nCmd;
+
+	if(id==IDC_EXE_WINDOWBASE) nCmd=SW_SHOW;
+	else nCmd=SW_HIDE;
+	ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_WINDOW),nCmd);
+
+	if(id==IDC_EXE_PROMPTBASE) nCmd=SW_SHOW;
+	else nCmd=SW_HIDE;
+	ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_PROMPT),nCmd);
+
+	if(id==IDC_EXE_DOSPROMPTBASE) nCmd=SW_SHOW;
+	else nCmd=SW_HIDE;
+	ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_DOSPROMPT),nCmd);
+
+	if(id==IDC_EXE_NOBASE) nCmd=SW_SHOW;
+	else nCmd=SW_HIDE;
+	ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_NON),nCmd);
+
+	if(id==IDC_EXE_DIRECTX) nCmd=SW_SHOW;
+	else nCmd=SW_HIDE;
+	ShowWindow(GetDlgItem(hDlg,IDC_IMAGE_DIRECTX),nCmd);
+}
+BOOL CALLBACK DlgNewProject_Page1(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern NEWPROJECTINFO NewProjectInfo;
+	int i;
+	char temporary[MAX_PATH];
+	LPPSHNOTIFY lpPshNotify;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(GetParent(hwnd));
+
+			SetDlgItemText(hwnd,IDC_DIRPATH,pobj_nv->ProjectSaveDir);
+			SendDlgItemMessage(hwnd,IDC_EXE_WINDOWBASE,BM_SETCHECK,BST_CHECKED,0);
+			SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_BASE_NORMAL);
+			break;
+		case WM_COMMAND:
+			if(HIWORD(wParam)==EN_CHANGE){
+				if(GetWindowTextLength(GetDlgItem(hwnd,IDC_PROJECTNAME))==0||
+					GetWindowTextLength(GetDlgItem(hwnd,IDC_DIRPATH))==0){
+					PropSheet_SetWizButtons(GetParent(hwnd),0);
+				}
+				else PropSheet_SetWizButtons(GetParent(hwnd),PSWIZB_NEXT);
+			}
+			switch(LOWORD(wParam)){
+				case IDC_PATHBROWSE:
+					//"ディレクトリを選択して下さい"
+					if(!GetFolder(hwnd,temporary,STRING_DIRECTORY_SELECT)) return 1;
+					SetDlgItemText(hwnd,IDC_DIRPATH,temporary);
+					return 1;
+				case IDC_EXE_WINDOWBASE:
+					AppImage_ShowOrHide(hwnd,LOWORD(wParam));
+
+					SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_BASE_NORMAL);
+					EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),1);
+					return 1;
+				case IDC_EXE_PROMPTBASE:
+					AppImage_ShowOrHide(hwnd,LOWORD(wParam));
+
+					SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_BASE_PROMPT);
+					EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),1);
+					return 1;
+				case IDC_EXE_DOSPROMPTBASE:
+					AppImage_ShowOrHide(hwnd,LOWORD(wParam));
+
+					SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_BASE_DOSPROMPT);
+					EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),1);
+					return 1;
+				case IDC_EXE_NOBASE:
+					AppImage_ShowOrHide(hwnd,LOWORD(wParam));
+
+					SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_NOBASE);
+					EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),0);
+					return 1;
+				case IDC_EXE_DIRECTX:
+					AppImage_ShowOrHide(hwnd,LOWORD(wParam));
+
+					SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_DIRECTX);
+					EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),0);
+					return 1;
+				case IDC_DLL:
+					AppImage_ShowOrHide(hwnd,LOWORD(wParam));
+
+					SetDlgItemText(hwnd,IDC_HELPTEXT_OFBASE,TEXT_DLL);
+					EnableWindow(GetDlgItem(hwnd,IDC_SHOWHELLOWORLD),0);
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			lpPshNotify=(LPPSHNOTIFY)lParam;
+			switch(lpPshNotify->hdr.code){
+				case PSN_SETACTIVE:
+					SendMessage(hwnd,WM_COMMAND,MAKELONG(0,EN_CHANGE),0);
+					return 1;
+				case PSN_WIZNEXT:
+					GetDlgItemText(hwnd,IDC_PROJECTNAME,NewProjectInfo.name,MAX_PATH);
+					if(!IsVariableTopChar(NewProjectInfo.name[0])){
+						//"プロジェクト名の先頭文字はアルファベット（A～Z、a～z）またはアンダーバー（_）でなければなりません。"
+						MessageBox(hwnd,STRING_ERROR_PROJECTTOPCHAR,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+						SetWindowLong(hwnd,DWL_MSGRESULT,-1);
+						return 1;
+					}
+					for(i=1;;i++){
+						if(NewProjectInfo.name[i]=='\0') break;
+						if(!IsVariableChar(NewProjectInfo.name[i])){
+							//"プロジェクト名に不正な文字コードが含まれています。"
+							MessageBox(hwnd,STRING_ERROR_PROJECTNAME,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+							SetWindowLong(hwnd,DWL_MSGRESULT,-1);
+							return 1;
+						}
+					}
+					GetDlgItemText(hwnd,IDC_DIRPATH,pobj_nv->ProjectSaveDir,MAX_PATH);
+
+					//ベース選択
+					if(SendDlgItemMessage(hwnd,IDC_EXE_WINDOWBASE,BM_GETCHECK,0,0))
+						NewProjectInfo.dwTypeID=IDC_EXE_WINDOWBASE;
+					else if(SendDlgItemMessage(hwnd,IDC_EXE_PROMPTBASE,BM_GETCHECK,0,0))
+						NewProjectInfo.dwTypeID=IDC_EXE_PROMPTBASE;
+					else if(SendDlgItemMessage(hwnd,IDC_EXE_DOSPROMPTBASE,BM_GETCHECK,0,0))
+						NewProjectInfo.dwTypeID=IDC_EXE_DOSPROMPTBASE;
+					else if(SendDlgItemMessage(hwnd,IDC_EXE_NOBASE,BM_GETCHECK,0,0))
+						NewProjectInfo.dwTypeID=IDC_EXE_NOBASE;
+					else if(SendDlgItemMessage(hwnd,IDC_EXE_DIRECTX,BM_GETCHECK,0,0))
+						NewProjectInfo.dwTypeID=IDC_EXE_DIRECTX;
+					else if(SendDlgItemMessage(hwnd,IDC_DLL,BM_GETCHECK,0,0))
+						NewProjectInfo.dwTypeID=IDC_DLL;
+
+					//"Hello World!"を表示するか
+					if(SendDlgItemMessage(hwnd,IDC_SHOWHELLOWORLD,BM_GETCHECK,0,0)) NewProjectInfo.ShowHelloWorld=1;
+					else NewProjectInfo.ShowHelloWorld=0;
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+void DlgNewProjectWizard(HWND hwnd){
+#define MAX_NEWPROJECTPAGE 3
+	PROPSHEETHEADER psh;
+	PROPSHEETPAGE psp;
+	HPROPSHEETPAGE hpsp[MAX_NEWPROJECTPAGE];
+	int i;
+
+	psp.dwSize=sizeof(PROPSHEETPAGE);
+	psp.hInstance=hResInst;
+	psp.dwFlags=PSP_DEFAULT;
+
+	//各ページのセッティング
+	i=0;
+	psp.pszTemplate=MAKEINTRESOURCE(IDD_NEWPROJECT_PAGE1);
+	psp.pfnDlgProc=DlgNewProject_Page1;
+	hpsp[i]=CreatePropertySheetPage(&psp);
+	i++;
+	psp.pszTemplate=MAKEINTRESOURCE(IDD_NEWPROJECT_PAGE2);
+	psp.pfnDlgProc=DlgNewProject_Page2;
+	hpsp[i]=CreatePropertySheetPage(&psp);
+	i++;
+	psp.pszTemplate=MAKEINTRESOURCE(IDD_NEWPROJECT_PAGE3);
+	psp.pfnDlgProc=DlgNewProject_Page3;
+	hpsp[i]=CreatePropertySheetPage(&psp);
+
+	memset(&psh,0,sizeof(PROPSHEETHEADER));
+	psh.dwSize=sizeof(PROPSHEETHEADER);
+	psh.dwFlags=PSH_WIZARD;
+	psh.phpage=hpsp;
+	psh.hwndParent=hwnd;
+	psh.nPages=MAX_NEWPROJECTPAGE;
+	PropertySheet(&psh);
+}
+
+#define CATEGORY_TEXT_BASIC	"Basic"
+#define CATEGORY_TEXT_TEXT	"テキスト"
+#define CATEGORY_TEXT_OTHER "その他"
+
+#define CATEGORY_BASIC	1
+#define CATEGORY_TEXT	2
+#define CATEGORY_OTHER	3
+void ResetNewFileTypeListView(HWND hListView,int fCategory){
+	ListView_DeleteAllItems(hListView);
+
+	LV_ITEM lvItem;
+	lvItem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
+	lvItem.iItem=0;
+	lvItem.iSubItem=0;
+
+	if(fCategory==CATEGORY_BASIC){
+		lvItem.pszText="Basic ソース ファイル";
+		lvItem.iImage=0;
+		lvItem.lParam=FT_BASICPROGRAM;
+		ListView_InsertItem(hListView,&lvItem);
+		lvItem.iItem++;
+
+		lvItem.pszText="プロジェクト";
+		lvItem.iImage=2;
+		lvItem.lParam=FT_PROJECT;
+		ListView_InsertItem(hListView,&lvItem);
+	}
+	else if(fCategory==CATEGORY_TEXT){
+		lvItem.pszText="テキスト ファイル";
+		lvItem.iImage=3;
+		lvItem.lParam=FT_TEXT;
+		ListView_InsertItem(hListView,&lvItem);
+		lvItem.iItem++;
+
+		lvItem.pszText="HTML ファイル";
+		lvItem.iImage=4;
+		lvItem.lParam=FT_HTML;
+		ListView_InsertItem(hListView,&lvItem);
+	}
+	else if(fCategory==CATEGORY_OTHER){
+		lvItem.pszText="アイコン ファイル";
+		lvItem.iImage=5;
+		lvItem.lParam=FT_ICON;
+		ListView_InsertItem(hListView,&lvItem);
+	}
+
+	ListView_SetItemState(hListView,0,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
+}
+
+#ifndef THETEXT
+BOOL CALLBACK DlgNewFile(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern PROJECTINFO ProjectInfo;
+	extern char NewFileName[MAX_PATH];
+
+	static HIMAGELIST hImageList;
+	static HWND hTree;
+	static HWND hListView;
+	int i;
+	LVITEM lvItem;
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+
+			///////////////////////////////////
+			// カテゴリツリービューを初期化
+			///////////////////////////////////
+			HTREEITEM hBasicTreeItem;
+
+			hTree=GetDlgItem(hwnd,IDC_CATEGORY_TREE);
+
+			TV_INSERTSTRUCT tv;
+			tv.hInsertAfter=TVI_LAST;
+			tv.item.mask=TVIF_TEXT;
+			tv.hParent=TVI_ROOT;
+
+			tv.item.pszText=CATEGORY_TEXT_BASIC;
+			hBasicTreeItem=TreeView_InsertItem(hTree,&tv);
+			tv.item.pszText=CATEGORY_TEXT_TEXT;
+			TreeView_InsertItem(hTree,&tv);
+			tv.item.pszText=CATEGORY_TEXT_OTHER;
+			TreeView_InsertItem(hTree,&tv);
+
+			TreeView_SelectItem(hTree,hBasicTreeItem);
+
+
+
+			/////////////////////////////////////////
+			// ファイルタイプ リストビューを初期化
+			/////////////////////////////////////////
+
+			hListView=GetDlgItem(hwnd,IDC_FILETYPELIST);
+
+			hImageList=ImageList_Create(32, 32, ILC_COLOR24|ILC_MASK, 6, 0);
+			ListView_SetImageList(hListView, hImageList, LVSIL_NORMAL);
+			ImageList_AddIcon(hImageList, LoadIcon(hInst, MAKEINTRESOURCE(IDI_FILE_BAS)));
+			ImageList_AddIcon(hImageList, LoadIcon(hInst, MAKEINTRESOURCE(IDI_FILE_SBP)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_PJ)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_TEXT)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_HTML)));
+			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_ICON)));
+
+
+			ResetNewFileTypeListView(hListView,CATEGORY_BASIC);
+
+
+			SetFocus(GetDlgItem(hwnd,IDC_FILETYPELIST));
+
+			if(ProjectInfo.name[0]){
+				SendDlgItemMessage(hwnd,IDC_ADDTOPROJECT,BM_SETCHECK,BST_CHECKED,0);
+			}
+
+			SendMessage(hwnd,WM_COMMAND,IDC_ADDTOPROJECT,0);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					for(i=0;i<ListView_GetItemCount(hListView);i++){
+						if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+							lvItem.mask=LVIF_PARAM;
+							lvItem.iItem=i;
+							lvItem.iSubItem=0;
+							ListView_GetItem(hListView,&lvItem);
+							break;
+						}
+					}
+					if(i==ListView_GetItemCount(hListView)) return 1;
+
+					//ファイルタイプ
+					i=lvItem.lParam;
+
+					//プロジェクトへ追加するかどうか
+					if(IsWindowEnabled(GetDlgItem(hwnd,IDC_ADDTOPROJECT))){
+						if(SendDlgItemMessage(hwnd,IDC_ADDTOPROJECT,BM_GETCHECK,0,0)){
+							i|=0x00008000;
+							GetDlgItemText(hwnd,IDC_FILENAME,NewFileName,MAX_PATH);
+
+							if(NewFileName[0]=='\0'){
+								MessageBox(hwnd,"ファイル名を入力してください。",APPLICATION_NAME,MB_OK);
+								return 1;
+							}
+						}
+					}
+
+					EndDialog(hwnd,i);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,-1);
+					return 1;
+				case IDC_ADDTOPROJECT:
+					if(IsWindowEnabled(GetDlgItem(hwnd,IDC_ADDTOPROJECT))&&
+						SendDlgItemMessage(hwnd,IDC_ADDTOPROJECT,BM_GETCHECK,0,0)){
+						EnableWindow(GetDlgItem(hwnd,IDC_FILENAME),1);
+						EnableWindow(GetDlgItem(hwnd,IDC_STATIC_FILENAME),1);
+					}
+					else{
+						EnableWindow(GetDlgItem(hwnd,IDC_FILENAME),0);
+						EnableWindow(GetDlgItem(hwnd,IDC_STATIC_FILENAME),0);
+					}
+					return 1;
+			}
+			break;
+
+		case WM_NOTIFY:
+			NMHDR *hdr;
+			hdr=(NMHDR *)lParam;
+			if(hdr->hwndFrom==hTree&&hdr->code==TVN_SELCHANGED){
+				NMTREEVIEW *lpnmTree;
+				lpnmTree=(NMTREEVIEW *)lParam;
+
+				char temporary[255];
+				TVITEM tvItem;
+				tvItem.mask=TVIF_TEXT|TVIF_HANDLE;
+				tvItem.hItem=lpnmTree->itemNew.hItem;
+				tvItem.pszText=temporary;
+				tvItem.cchTextMax=255;
+				TreeView_GetItem(hTree,&tvItem);
+
+				if(lstrcmpi(tvItem.pszText,CATEGORY_TEXT_BASIC)==0)
+					ResetNewFileTypeListView(hListView,CATEGORY_BASIC);
+				else if(lstrcmpi(tvItem.pszText,CATEGORY_TEXT_TEXT)==0)
+					ResetNewFileTypeListView(hListView,CATEGORY_TEXT);
+				else if(lstrcmpi(tvItem.pszText,CATEGORY_TEXT_OTHER)==0)
+					ResetNewFileTypeListView(hListView,CATEGORY_OTHER);
+			}
+			if(hdr->hwndFrom==hListView){
+				if(hdr->code==LVN_ITEMCHANGED){
+					for(i=0;i<ListView_GetItemCount(hListView);i++){
+						if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+							lvItem.mask=LVIF_PARAM;
+							lvItem.iItem=i;
+							lvItem.iSubItem=0;
+							ListView_GetItem(hListView,&lvItem);
+							break;
+						}
+					}
+					if(i!=ListView_GetItemCount(hListView)&&ProjectInfo.name[0]&&(
+						lvItem.lParam==FT_BASICPROGRAM||
+						lvItem.lParam==FT_SUBPROGRAM
+						)){
+						EnableWindow(GetDlgItem(hwnd,IDC_ADDTOPROJECT),1);
+					}
+					else EnableWindow(GetDlgItem(hwnd,IDC_ADDTOPROJECT),0);
+
+					SendMessage(hwnd,WM_COMMAND,IDC_ADDTOPROJECT,0);
+				}
+				else if(hdr->code==NM_DBLCLK){
+					SendMessage(hwnd,WM_COMMAND,IDOK,0);
+				}
+			}
+			return 0;
+
+		case WM_DESTROY:
+			ImageList_Destroy(hImageList);
+			return 0;
+	}
+	return 0;
+}
+#endif
+
+
+//プロジェクトオプション項目
+#define MAX_PJSETDLG 4
+DWORD temp_dwPjOption;
+char temp_lpszOutputRelease[MAX_PATH];
+char temp_lpszOutputDebug[MAX_PATH];
+char temp_szManifestPath[MAX_PATH];
+char temp_szDebugCmdLine[8192];
+char temp_szDebugExePath[MAX_PATH];
+
+void SaveSetting_DlgPjOption(void){
+	extern PROJECTINFO  ProjectInfo;
+	if(SetSwitch[0]){
+		//出力ファイル
+		lstrcpy(ProjectInfo.lpszOutput_Release,temp_lpszOutputRelease);
+		lstrcpy(ProjectInfo.lpszOutput_Debug,temp_lpszOutputDebug);
+
+		//コメントの有無
+		ProjectInfo.dwOption=temp_dwPjOption;
+	}
+	if(SetSwitch[1]){
+		//Win32API
+		ProjectInfo.dwOption=temp_dwPjOption;
+	}
+	if(SetSwitch[2]){
+		//マニフェスト
+
+		//パス
+		lstrcpy(ProjectInfo.szManifestPath,temp_szManifestPath);
+
+		ProjectInfo.dwOption=temp_dwPjOption;
+
+		ProjectInfo.ModifuOfResource=1;
+	}
+	if(SetSwitch[3]){
+		//デバッグ
+
+		//コマンドライン
+		lstrcpy(ProjectInfo.szCmdLine,temp_szDebugCmdLine);
+
+		//デバッグセッション用の実行可能ファイル
+		lstrcpy(ProjectInfo.szExePath,temp_szDebugExePath);
+	}
+
+	ProjectInfo.modify=1;
+}
+BOOL CALLBACK DlgProjectOption_Whole(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern PROJECTINFO ProjectInfo;
+	NMHDR *nmhdr;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(GetParent(hwnd));
+
+			SetSwitch[0]=1;
+
+			//出力ファイル
+			SetDlgItemText(hwnd,IDC_EDIT_RELEASE,ProjectInfo.lpszOutput_Release);
+			SetDlgItemText(hwnd,IDC_EDIT_DEBUG,ProjectInfo.lpszOutput_Debug);
+
+			//厳密な型チェック
+			if(temp_dwPjOption&PJ_OP_STRICT)
+				SendDlgItemMessage(hwnd,IDC_STRICT,BM_SETCHECK,BST_CHECKED,0);
+
+			break;
+		case WM_NOTIFY:
+			nmhdr=(NMHDR *)lParam;
+			if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
+				GetDlgItemText(hwnd,IDC_EDIT_RELEASE,temp_lpszOutputRelease,MAX_PATH);
+				GetDlgItemText(hwnd,IDC_EDIT_DEBUG,temp_lpszOutputDebug,MAX_PATH);
+
+				//厳密な型チェック
+				if(SendDlgItemMessage(hwnd,IDC_STRICT,BM_GETCHECK,0,0))
+					temp_dwPjOption|=PJ_OP_STRICT;
+				else temp_dwPjOption&=~PJ_OP_STRICT;
+
+				if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
+			}
+			return 1;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgProjectOption_Win32API(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern PROJECTINFO ProjectInfo;
+	NMHDR *nmhdr;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetSwitch[1]=1;
+
+			if(temp_dwPjOption&PJ_OP_MMSYSTEM)
+				SendDlgItemMessage(hwnd,IDC_API_MMSYS,BM_SETCHECK,BST_CHECKED,0);
+			if(temp_dwPjOption&PJ_OP_COMMCTRL)
+				SendDlgItemMessage(hwnd,IDC_API_COMMCTRL,BM_SETCHECK,BST_CHECKED,0);
+			if(temp_dwPjOption&PJ_OP_RICHEDIT)
+				SendDlgItemMessage(hwnd,IDC_API_RICHEDIT,BM_SETCHECK,BST_CHECKED,0);
+			if(temp_dwPjOption&PJ_OP_WINSOCK)
+				SendDlgItemMessage(hwnd,IDC_API_WINSOCK,BM_SETCHECK,BST_CHECKED,0);
+			break;
+		case WM_NOTIFY:
+			nmhdr=(NMHDR *)lParam;
+			if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
+				if(SendDlgItemMessage(hwnd,IDC_API_MMSYS,BM_GETCHECK,0,0))
+					temp_dwPjOption|=PJ_OP_MMSYSTEM;
+				else temp_dwPjOption&=~PJ_OP_MMSYSTEM;
+				if(SendDlgItemMessage(hwnd,IDC_API_COMMCTRL,BM_GETCHECK,0,0))
+					temp_dwPjOption|=PJ_OP_COMMCTRL;
+				else temp_dwPjOption&=~PJ_OP_COMMCTRL;
+				if(SendDlgItemMessage(hwnd,IDC_API_RICHEDIT,BM_GETCHECK,0,0))
+					temp_dwPjOption|=PJ_OP_RICHEDIT;
+				else temp_dwPjOption&=~PJ_OP_RICHEDIT;
+				if(SendDlgItemMessage(hwnd,IDC_API_WINSOCK,BM_GETCHECK,0,0))
+					temp_dwPjOption|=PJ_OP_WINSOCK;
+				else temp_dwPjOption&=~PJ_OP_WINSOCK;
+
+				if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
+			}
+			return 1;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgProjectOption_Manifest(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_INITDIALOG:
+			SetSwitch[2]=1;
+
+			//パス
+			SetDlgItemText(hwnd,IDC_PATH,ProjectInfo.szManifestPath);
+
+			//マニフェストをリソースに埋め込む
+			if(temp_dwPjOption&PJ_OP_RC_MANIFEST)
+				SendDlgItemMessage(hwnd,IDC_RC_MANIFEST,BM_SETCHECK,BST_CHECKED,0);
+
+			SendMessage(hwnd,WM_COMMAND,IDC_RC_MANIFEST,0);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_RC_MANIFEST:
+					if(SendDlgItemMessage(hwnd,IDC_RC_MANIFEST,BM_GETCHECK,0,0)){
+						EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PATH),1);
+						EnableWindow(GetDlgItem(hwnd,IDC_PATH),1);
+					}
+					else{
+						EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PATH),0);
+						EnableWindow(GetDlgItem(hwnd,IDC_PATH),0);
+					}
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			NMHDR *nmhdr;
+			nmhdr=(NMHDR *)lParam;
+			if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
+
+				//パス
+				GetDlgItemText(hwnd,IDC_PATH,temp_szManifestPath,MAX_PATH);
+
+				//マニフェストをリソースに埋め込む
+				if(SendDlgItemMessage(hwnd,IDC_RC_MANIFEST,BM_GETCHECK,0,0))
+					temp_dwPjOption|=PJ_OP_RC_MANIFEST;
+				else temp_dwPjOption&=~PJ_OP_RC_MANIFEST;
+
+				if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
+			}
+			return 1;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgProjectOption_Debug(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern PROJECTINFO ProjectInfo;
+	NMHDR *nmhdr;
+	char temporary[MAX_PATH];
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetSwitch[3]=1;
+
+			if(ProjectInfo.dwModuleType!=MT_DLL){
+				EnableWindow(GetDlgItem(hwnd,IDC_EXE_PATH),0);
+				EnableWindow(GetDlgItem(hwnd,IDC_DIR),0);
+			}
+
+			SetDlgItemText(hwnd,IDC_CMD_LINE,ProjectInfo.szCmdLine);
+			SetDlgItemText(hwnd,IDC_EXE_PATH,ProjectInfo.szExePath);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_DIR:
+					extern LPSTR ExeFileFilter;
+					if(!GetFilePathDialog(hwnd,temporary,ExeFileFilter,"DLLデバッグ用の実行可能ファイルを指定してください",1)) break;
+
+					SetDlgItemText(hwnd,IDC_EXE_PATH,temporary);
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			nmhdr=(NMHDR *)lParam;
+			if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
+				GetDlgItemText(hwnd,IDC_CMD_LINE,temp_szDebugCmdLine,8192);
+				GetDlgItemText(hwnd,IDC_EXE_PATH,temp_szDebugExePath,MAX_PATH);
+
+				if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
+			}
+			return 1;
+	}
+	return 0;
+}
+void DlgProjectOptionSetting(HWND hwnd){
+	PROPSHEETHEADER psh;
+	PROPSHEETPAGE psp[MAX_PJSETDLG];
+	HPROPSHEETPAGE hpsp[MAX_PJSETDLG];
+	int i;
+	memset(&SetSwitch,0,MAX_PJSETDLG);
+
+	//各ページのセッティング
+	i=0;
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_PJ_OPTION1);
+	psp[i].pfnDlgProc=DlgProjectOption_Whole;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+	i++;
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_PJ_OPTION2);
+	psp[i].pfnDlgProc=DlgProjectOption_Win32API;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+	i++;
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_PJ_OPTION3);
+	psp[i].pfnDlgProc=DlgProjectOption_Manifest;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+	i++;
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_PJ_OPTION4);
+	psp[i].pfnDlgProc=DlgProjectOption_Debug;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+
+	extern PROJECTINFO ProjectInfo;
+	temp_dwPjOption=ProjectInfo.dwOption;
+
+	memset(&psh,0,sizeof(PROPSHEETHEADER));
+	psh.dwSize=sizeof(PROPSHEETHEADER);
+	psh.dwFlags=PSH_PROPSHEETPAGE|PSH_NOAPPLYNOW;
+	psh.phpage=hpsp;
+	psh.hwndParent=hwnd;
+	psh.pszCaption=STRING_PROJECTOPTION;	//"プロジェクト オプション"
+	psh.nPages=MAX_PJSETDLG;
+	psh.nStartPage=0;
+	psh.ppsp=psp;
+	PropertySheet(&psh);
+}
+
+
+/////////////////////
+// オプション項目
+/////////////////////
+
+BOOL bOptionWhole;
+BOOL bOptionEditor;
+BOOL bOptionColor;
+BOOL bOptionToolbar;
+BOOL bOptionRad;
+BOOL bOptionWeb;
+BOOL temp_bSaveCheckProject;
+BOOL temp_bLineAdjust;
+BOOL temp_bSaveTabToHead;
+LOGFONT temp_lf,temp_HintFont;
+int temp_TabSize;
+BOOL temp_bEditor_LineNumber;
+BOOL temp_bEditor_Ruler;
+BOOL temp_bEditor_CaretLine_BackGround;
+int temp_iMaxOneLineTextLength;
+BOOL temp_bAutoIndent;
+BOOL temp_bPasteIndent;
+DWORD temp_dwParameterHint;
+BOOL temp_bShowComplementWnd;
+int temp_BackNum_PairStatementComplement;
+BOOL temp_bSaveFindStr;
+
+CTheme obj_temp_Theme;
+
+BOOL temp_bCtrlKeyHyperLink;
+BOOL temp_bSaveWebFindStr;
+CDBDomain *pobj_temp_DBDomain;
+
+void SaveSetting(void){
+	int i;
+	if(bOptionWhole){
+		//実行時の、プロジェクトの保存確認の有無
+		pobj_nv->bSaveCheckProject=temp_bSaveCheckProject;
+
+		//ドキュメントを保存したときにタブを先頭に再配置するかどうか
+		pobj_nv->bSaveTabToHead=temp_bSaveTabToHead;
+	}
+	if(bOptionEditor){
+		//フォント
+		pobj_nv->lf=temp_lf;
+
+		//タブサイズ
+		pobj_nv->TabSize=temp_TabSize;
+
+		//エディタの行番号を表示するかどうか
+		pobj_nv->bEditor_LineNumber=temp_bEditor_LineNumber;
+
+		//エディタのルーラーを表示するかどうか
+		pobj_nv->bEditor_Ruler=temp_bEditor_Ruler;
+
+		//カーソル行を強調表示するかどうか
+		pobj_nv->bEditor_CaretLine_BackGround=temp_bEditor_CaretLine_BackGround;
+
+		//自動折り返し時の一行あたりの文字数
+		pobj_nv->iMaxOneLineTextLength=temp_iMaxOneLineTextLength;
+
+		//コード補完機能
+		pobj_nv->bShowComplementWnd=temp_bShowComplementWnd;
+
+		pobj_nv->BackNum_PairStatementComplement=temp_BackNum_PairStatementComplement;
+
+		//パラメータ ヒント
+		pobj_nv->dwParameterHint=temp_dwParameterHint;
+
+		//パラメータ ヒント フォント
+		extern METHODCHECKINFO MethodCheckInfo;
+		MethodCheckInfo.LogFont=temp_HintFont;
+		DeleteObject(MethodCheckInfo.hFont);
+		DeleteObject(MethodCheckInfo.hBoldFont);
+
+		MethodCheckInfo.hFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
+		i=MethodCheckInfo.LogFont.lfWeight;
+		MethodCheckInfo.LogFont.lfWeight=FW_BOLD;
+		MethodCheckInfo.hBoldFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
+		MethodCheckInfo.LogFont.lfWeight=i;
+
+		//自動インデント
+		pobj_nv->bAutoIndent=temp_bAutoIndent;
+
+		//貼り付け時のインデント調整
+		pobj_nv->bPasteIndent=temp_bPasteIndent;
+
+		//検索・置換文字列を保存するかどうか
+		pobj_nv->bSaveFindStr=temp_bSaveFindStr;
+
+		RedrawAllWindow();		//すべてのウィンドウを再描画
+	}
+	if(bOptionColor){
+		//カラーデザインを更新
+		CTheme *pobj_Theme;
+		pobj_Theme=pobj_DBTheme->dupli_check(obj_temp_Theme.m_name);
+		*pobj_Theme=obj_temp_Theme;
+		if(lstrcmp(pobj_Theme->m_name,THEMENAME_USER)==0){
+			//ユーザー設定の場合は自動的にファイルに保存する
+			pobj_Theme->save();
+		}
+
+		//再描画
+		SetTextEditColorDesign(&tci,pobj_Theme,1);
+	}
+	if(bOptionRad){
+		//ライン アジャスタ
+		pobj_nv->bLineAdjust=temp_bLineAdjust;
+	}
+	if(bOptionWeb){
+		pobj_nv->bCtrlKeyHyperLink=temp_bCtrlKeyHyperLink;
+
+		pobj_nv->bSaveWebFindStr=temp_bSaveWebFindStr;
+
+		//Web検索
+		pobj_nv->pobj_DBDomain->copy_get(pobj_temp_DBDomain);
+
+		//SideWebウィンドウを再表示
+		delete pobj_SideWeb;
+		pobj_SideWeb=new CSideWeb(hOwner);
+		ResizeOwnerWnd();
+	}
+	return;
+}
+BOOL CALLBACK Dlg_Option_Whole(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	NMHDR *nmhdr;
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(GetParent(hwnd));
+
+			bOptionWhole=1;
+
+			//実行時の、プロジェクトの保存確認の有無
+			if(pobj_nv->bSaveCheckProject) SendDlgItemMessage(hwnd,IDC_SAVECHECK,BM_SETCHECK,BST_CHECKED,0);
+
+			//ドキュメントを保存したときにタブを先頭に再配置するかどうか
+			if(pobj_nv->bSaveTabToHead) SendDlgItemMessage(hwnd,IDC_SAVE_TAB_TO_HEAD,BM_SETCHECK,BST_CHECKED,0);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_LINKFILE:
+					ExtensionLink(hwnd);
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			nmhdr=(NMHDR *)lParam;
+			if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
+				//実行時の、プロジェクトの保存確認の有無
+				if(SendDlgItemMessage(hwnd,IDC_SAVECHECK,BM_GETCHECK,0,0)) temp_bSaveCheckProject=1;
+				else temp_bSaveCheckProject=0;
+
+				//ドキュメントを保存したときにタブを先頭に再配置するかどうか
+				if(SendDlgItemMessage(hwnd,IDC_SAVE_TAB_TO_HEAD,BM_GETCHECK,0,0)) temp_bSaveTabToHead=1;
+				else temp_bSaveTabToHead=0;
+
+				if(nmhdr->code==PSN_APPLY) SaveSetting();
+			}
+			return 1;
+		case WM_HELP:
+			HELPINFO *lpHelpInfo;
+			lpHelpInfo = (HELPINFO *)lParam;
+
+			HH_POPUP hp;
+			memset(&hp, 0, sizeof(HH_POPUP));
+			hp.cbStruct = sizeof(HH_POPUP);
+			hp.pt.x = lpHelpInfo->MousePos.x;
+			hp.pt.y = lpHelpInfo->MousePos.y+10;
+			hp.clrForeground = RGB(0, 0, 0);
+			hp.clrBackground = -1;
+			hp.rcMargins.left = -1;
+			hp.rcMargins.right = -1;
+			hp.rcMargins.top = -1;
+			hp.rcMargins.bottom = -1;
+			hp.idString = 0;
+			hp.pszFont="MS Sans Serif,10";
+
+			switch(lpHelpInfo->iCtrlId){
+				case IDC_SAVECHECK:
+#if defined(JPN)
+					//日本語
+					hp.pszText="このチェックボックスをオンにすると、プロジェクトが未保存の状態であるとき、コンパイル時に保存確認のダイアログボックスが表示されるようになります。\nチェックをオフにすると、プロジェクトはコンパイル時に自動的に保存されます（デフォルトはオフです）。";
+#else
+					//英語
+					hp.pszText="When the compiling button is clicked, if this check is on, the DialogBox to save modification is displayed.\nIf this check is off, the project is saved automatically(Default).";
+#endif
+					break;
+				case IDC_LINKFILE:
+#if defined(JPN)
+					//日本語
+					hp.pszText="ファイルの関連付けを行います。";
+#else
+					//英語
+					hp.pszText="Relate the files.";
+#endif
+					break;
+				default:
+					hp.pszText="";
+					break;
+			}
+			HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
+			return 1;
+	}
+	return 0;
+}
+BOOL CALLBACK Dlg_Option_Editor(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern METHODCHECKINFO MethodCheckInfo;
+	char str[255];
+	NMHDR *nmhdr;
+	switch(message){
+		case WM_INITDIALOG:
+			bOptionEditor=1;
+
+			//フォント
+			sprintf(str,"%s",pobj_nv->lf.lfFaceName);
+			SetDlgItemText(hwnd,IDC_SETFONT,str);
+			temp_lf=pobj_nv->lf;
+
+			//タブサイズ
+			sprintf(str,"%d",pobj_nv->TabSize);
+			SetDlgItemText(hwnd,IDC_TABSIZE,str);
+
+			//エディタの行番号を表示するかどうか
+			if(pobj_nv->bEditor_LineNumber) SendDlgItemMessage(hwnd,IDC_LINENUMBER,BM_SETCHECK,BST_CHECKED,0);
+
+			//エディタのルーラーを表示するかどうか
+			if(pobj_nv->bEditor_Ruler) SendDlgItemMessage(hwnd,IDC_RULER,BM_SETCHECK,BST_CHECKED,0);
+
+			//カーソル行を強調表示するかどうか
+			if(pobj_nv->bEditor_CaretLine_BackGround) SendDlgItemMessage(hwnd,IDC_CARETLINE_BACKGROUND,BM_SETCHECK,BST_CHECKED,0);
+
+#ifdef THETEXT
+			//自動折り返し時の一行あたりの文字数
+			sprintf(str,"%d",pobj_nv->iMaxOneLineTextLength);
+			SetDlgItemText(hwnd,IDC_MAX_ONELINE_TEXT_LENGTH,str);
+#endif
+
+			//自動インデント
+			if(pobj_nv->bAutoIndent) SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_SETCHECK,BST_CHECKED,0);
+
+			//貼り付け時のインデント調整
+			if(pobj_nv->bPasteIndent) SendDlgItemMessage(hwnd,IDC_PASTEINDENT,BM_SETCHECK,BST_CHECKED,0);
+
+			//コード補完
+			if(pobj_nv->bShowComplementWnd)
+				SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_SETCHECK,BST_CHECKED,0);
+
+			//ペアステートメント補完
+			SendDlgItemMessage(hwnd,IDC_BACKNUM,EM_SETLIMITTEXT,4,0);
+			if(pobj_nv->BackNum_PairStatementComplement){
+				SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_SETCHECK,BST_CHECKED,0);
+				sprintf(str,"%d",pobj_nv->BackNum_PairStatementComplement);
+				SetDlgItemText(hwnd,IDC_BACKNUM,str);
+			}
+
+			SendMessage(hwnd,WM_COMMAND,IDC_COMPLEMENT,0);
+
+			//パラメータ ヒント
+			if(pobj_nv->dwParameterHint){
+				SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_SETCHECK,BST_CHECKED,0);
+				if(pobj_nv->dwParameterHint==1)
+					SendDlgItemMessage(hwnd,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
+				else
+					SendDlgItemMessage(hwnd,IDC_STATUSBAR,BM_SETCHECK,BST_CHECKED,0);
+				SendMessage(hwnd,WM_COMMAND,IDC_PARAMHINT,0);
+			}
+			else SendDlgItemMessage(hwnd,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
+
+			//パラメータ ヒント フォント
+			sprintf(str,"%s",MethodCheckInfo.LogFont.lfFaceName);
+			SetDlgItemText(hwnd,IDC_HINTFONT,str);
+			temp_HintFont=MethodCheckInfo.LogFont;
+
+			//検索・置換文字列を保存するかどうか
+			if(pobj_nv->bSaveFindStr) SendDlgItemMessage(hwnd,IDC_SAVE_FINDSTR,BM_SETCHECK,BST_CHECKED,0);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_SETFONT:
+					if(!SetFontDialog(hwnd,&temp_lf,1)) return 1;
+					sprintf(str,"%s",temp_lf.lfFaceName);
+					SetDlgItemText(hwnd,IDC_SETFONT,str);
+					return 1;
+				case IDC_HINTFONT:
+					if(!SetFontDialog(hwnd,&temp_HintFont,0)) return 1;
+					sprintf(str,"%s",temp_HintFont.lfFaceName);
+					SetDlgItemText(hwnd,IDC_HINTFONT,str);
+					return 1;
+
+				case IDC_ISAUTOINDENT:
+				case IDC_COMPLEMENT:
+					if(SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_GETCHECK,0,0)&&
+						SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_GETCHECK,0,0)){
+						EnableWindow(GetDlgItem(hwnd,IDC_PAIRSTATEMENT),1);
+						SendMessage(hwnd,WM_COMMAND,IDC_PAIRSTATEMENT,0);
+					}
+					else{
+						EnableWindow(GetDlgItem(hwnd,IDC_PAIRSTATEMENT),0);
+						EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),0);
+						EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),0);
+					}
+					return 1;
+
+				case IDC_PAIRSTATEMENT:
+					if(SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_GETCHECK,0,0)){
+						EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),1);
+						EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),1);
+
+						if(GetWindowTextLength(GetDlgItem(hwnd,IDC_BACKNUM))==0)
+							SetDlgItemText(hwnd,IDC_BACKNUM,"100");
+					}
+					else{
+						EnableWindow(GetDlgItem(hwnd,IDC_BACKNUM),0);
+						EnableWindow(GetDlgItem(hwnd,IDC_STATIC_PAIRSTATEMENT),0);
+					}
+					return 1;
+
+				case IDC_PARAMHINT:
+					if(SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_GETCHECK,0,0)){
+						EnableWindow(GetDlgItem(hwnd,IDC_POPUP),1);
+						EnableWindow(GetDlgItem(hwnd,IDC_STATUSBAR),1);
+						if(SendDlgItemMessage(hwnd,IDC_POPUP,BM_GETCHECK,0,0)){
+							EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),1);
+							EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),1);
+						}
+					}
+					else{
+						EnableWindow(GetDlgItem(hwnd,IDC_POPUP),0);
+						EnableWindow(GetDlgItem(hwnd,IDC_STATUSBAR),0);
+						EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),0);
+						EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),0);
+					}
+					return 1;
+				case IDC_POPUP:
+					EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),1);
+					EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),1);
+					return 1;
+				case IDC_STATUSBAR:
+					EnableWindow(GetDlgItem(hwnd,IDC_STATIC_HINTFONT),0);
+					EnableWindow(GetDlgItem(hwnd,IDC_HINTFONT),0);
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			nmhdr=(NMHDR *)lParam;
+			if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
+				GetDlgItemText(hwnd,IDC_TABSIZE,str,255);
+				sscanf(str,"%d",&temp_TabSize);
+
+				//エディタの行番号を表示するかどうか
+				if(SendDlgItemMessage(hwnd,IDC_LINENUMBER,BM_GETCHECK,0,0)) temp_bEditor_LineNumber=1;
+				else temp_bEditor_LineNumber=0;
+
+				//エディタのルーラーを表示するかどうか
+				if(SendDlgItemMessage(hwnd,IDC_RULER,BM_GETCHECK,0,0)) temp_bEditor_Ruler=1;
+				else temp_bEditor_Ruler=0;
+
+				//カーソル行を強調表示するかどうか
+				if(SendDlgItemMessage(hwnd,IDC_CARETLINE_BACKGROUND,BM_GETCHECK,0,0)) temp_bEditor_CaretLine_BackGround=1;
+				else temp_bEditor_CaretLine_BackGround=0;
+
+#ifdef THETEXT
+				//自動折り返し時の一行あたりの文字数
+				GetDlgItemText(hwnd,IDC_MAX_ONELINE_TEXT_LENGTH,str,255);
+				sscanf(str,"%d",&temp_iMaxOneLineTextLength);
+				if(temp_iMaxOneLineTextLength<=0){
+					temp_iMaxOneLineTextLength=75;
+				}
+#endif
+
+				//自動インデント
+				if(SendDlgItemMessage(hwnd,IDC_ISAUTOINDENT,BM_GETCHECK,0,0)) temp_bAutoIndent=1;
+				else temp_bAutoIndent=0;
+
+				//貼り付け時のインデント調整
+				if(SendDlgItemMessage(hwnd,IDC_PASTEINDENT,BM_GETCHECK,0,0)) temp_bPasteIndent=1;
+				else temp_bPasteIndent=0;
+
+				//コード補完機能
+				if(SendDlgItemMessage(hwnd,IDC_COMPLEMENT,BM_GETCHECK,0,0))
+					temp_bShowComplementWnd=1;
+				else temp_bShowComplementWnd=0;
+
+				//ペアステートメント補完
+				if(IsWindowEnabled(GetDlgItem(hwnd,IDC_PAIRSTATEMENT))){
+					if(SendDlgItemMessage(hwnd,IDC_PAIRSTATEMENT,BM_GETCHECK,0,0)){
+						GetDlgItemText(hwnd,IDC_BACKNUM,str,255);
+						sscanf(str,"%d",&temp_BackNum_PairStatementComplement);
+					}
+					else temp_BackNum_PairStatementComplement=0;
+				}
+				else temp_BackNum_PairStatementComplement=0;
+
+				//パラメータヒント
+				if(SendDlgItemMessage(hwnd,IDC_PARAMHINT,BM_GETCHECK,0,0)){
+					if(SendDlgItemMessage(hwnd,IDC_POPUP,BM_GETCHECK,0,0)) temp_dwParameterHint=1;
+					else temp_dwParameterHint=2;
+				}
+				else temp_dwParameterHint=0;
+
+				if(SendDlgItemMessage(hwnd,IDC_SAVE_FINDSTR,BM_GETCHECK,0,0))
+					temp_bSaveFindStr=1;
+				else temp_bSaveFindStr=0;
+
+				if(nmhdr->code==PSN_APPLY) SaveSetting();
+			}
+			return 1;
+
+		case WM_HELP:
+			HELPINFO *lpHelpInfo;
+			lpHelpInfo = (HELPINFO *)lParam;
+
+			HH_POPUP hp;
+			memset(&hp, 0, sizeof(HH_POPUP));
+			hp.cbStruct = sizeof(HH_POPUP);
+			hp.pt.x = lpHelpInfo->MousePos.x;
+			hp.pt.y = lpHelpInfo->MousePos.y+10;
+			hp.clrForeground = RGB(0, 0, 0);
+			hp.clrBackground = -1;
+			hp.rcMargins.left = -1;
+			hp.rcMargins.right = -1;
+			hp.rcMargins.top = -1;
+			hp.rcMargins.bottom = -1;
+			hp.idString = 0;
+			hp.pszFont="MS Sans Serif,10";
+
+			switch(lpHelpInfo->iCtrlId){
+				case IDC_STATIC_SETFONT:
+				case IDC_SETFONT:
+#if defined(JPN)
+					//日本語
+					hp.pszText="エディタで使用するフォントを選択することができます。";
+#else
+					//英語
+					hp.pszText="Choose the font displayed on the editor";
+#endif
+					break;
+				case IDC_STATIC_TABSIZE:
+				case IDC_TABSIZE:
+#if defined(JPN)
+					//日本語
+					hp.pszText="タブサイズを指定します。デフォルト値は4です。";
+#else
+					//英語
+					hp.pszText="Set the tab size. Value of default is 4.";
+#endif
+					break;
+				case IDC_ISAUTOINDENT:
+#if defined(JPN)
+					//日本語
+					hp.pszText="このチェックをオンにすると、必要に応じて、自動的にインデント用のタブ文字が挿入されます。";
+#else
+					//英語
+					hp.pszText="If this check is on, the indent tabs will be inserted automatically.";
+#endif
+					break;
+				case IDC_COMPLEMENT:
+#if defined(JPN)
+					//日本語
+					hp.pszText="このチェックをオンにすると、クラスまたは構造体のメンバを入力するときに、予想されるキーワードがリスト表示されます。";
+#else
+					//英語
+					hp.pszText="If this check is on, the member expected is displayed in a list when inputting the member of the class object.";
+#endif
+					break;
+				case IDC_PARAMHINT:
+#if defined(JPN)
+					//日本語
+					hp.pszText="このチェックをオンにすると、関数またはステートメントを入力するときに、該当するパラメータのヒント文字列が表示されます。文字列の表示方法はポップアップまたはステータスバーのいずれかを選択することができます。";
+#else
+					//英語
+					hp.pszText="If this check is on, parameter hint is displayed when inputting a function or a statement.";
+#endif
+					break;
+				case IDC_POPUP:
+#if defined(JPN)
+					//日本語
+					hp.pszText="パラメータヒントをポップアップ表示するときは、ここをチェックします。";
+#else
+					//英語
+					hp.pszText="If this check is on, parameter hint is displayed on a popup window.";
+#endif
+					break;
+				case IDC_STATUSBAR:
+#if defined(JPN)
+					//日本語
+					hp.pszText="パラメータヒントをステータスバーに表示するときは、ここをチェックします。";
+#else
+					//英語
+					hp.pszText="If this check is on, parameter hint is displayed in a status bar.";
+#endif
+					break;
+				case IDC_STATIC_HINTFONT:
+				case IDC_HINTFONT:
+#if defined(JPN)
+					//日本語
+					hp.pszText="ポップアップ表示されるパラメータヒントのフォントを指定します。";
+#else
+					//英語
+					hp.pszText="Choose the font displayed on the popup hint.";
+#endif
+					break;
+				default:
+					hp.pszText="";
+					break;
+			}
+			HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
+			return 1;
+	}
+	return 0;
+}
+COLORREF GetColorFromSelection(int iPos,TEXTEDIT_COLOR_INFO *ptci){
+	if(iPos==0) return ptci->rgbComment;
+	else if(iPos==1) return ptci->rgbString;
+	else if(iPos==2) return ptci->rgbDefault;
+	else if(iPos==3) return ptci->rgbStatement;
+	else if(iPos==4) return ptci->rgbCursorBack;
+	else if(iPos==5) return ptci->rgbBackground;
+	return 0;
+}
+void SetColorFromSelection(int iPos,COLORREF rgb,TEXTEDIT_COLOR_INFO *ptci){
+	if(iPos==0) ptci->rgbComment=rgb;
+	else if(iPos==1) ptci->rgbString=rgb;
+	else if(iPos==2) ptci->rgbDefault=rgb;
+	else if(iPos==3) ptci->rgbStatement=rgb;
+	else if(iPos==4) ptci->rgbCursorBack=rgb;
+	else if(iPos==5) ptci->rgbBackground=rgb;
+}
+#ifdef THETEXT
+char szNewThemeName[MAX_PATH];
+BOOL bThemeOverwirte;
+BOOL CALLBACK DlgOptionThemeSave(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+			SendMessage(hwnd,WM_COMMAND,IDC_NAME,0);
+			SetFocus(GetDlgItem(hwnd,IDC_NAME));
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					GetDlgItemText(hwnd,IDC_NAME,szNewThemeName,MAX_PATH);
+
+					if(SendDlgItemMessage(hwnd,IDC_OVERWRITE,BM_GETCHECK,0,0))
+						bThemeOverwirte=1;
+					else bThemeOverwirte=0;
+
+					if(pobj_DBTheme->dupli_check(szNewThemeName)){
+						if(!bThemeOverwirte){
+							char temporary[MAX_PATH];
+							sprintf(temporary,"テーマ \"%s\" は既に存在します。「上書きを許可する」をチェックした後、保存してください。",szNewThemeName);
+							MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OK);
+							return 1;
+						}
+					}
+
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+				case IDC_NAME:
+					if(GetWindowTextLength(GetDlgItem(hwnd,IDC_NAME)))
+						EnableWindow(GetDlgItem(hwnd,IDOK),1);
+					else EnableWindow(GetDlgItem(hwnd,IDOK),0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+#endif
+BOOL CALLBACK Dlg_Option_Color(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	int iPos;
+	CTheme *pobj_Theme;
+	char temporary[MAX_PATH];
+	switch(message){
+		case WM_INITDIALOG:
+			bOptionColor=1;
+
+			//一時保存値を初期化
+			pobj_Theme=pobj_DBTheme->GetActiveTheme();
+			obj_temp_Theme=*pobj_Theme;
+
+			//指定する部分
+			SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"コメント");
+			SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"ダブルクォート内の文字列");
+			SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"通常の文字");
+			SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"特殊ステートメント");
+			SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"背景色（カーソル行）");
+			SendDlgItemMessage(hwnd,IDC_TARGET,CB_ADDSTRING,0,(LPARAM)"背景色（一般）");
+			SendDlgItemMessage(hwnd,IDC_TARGET,CB_SETCURSEL,0,0);
+
+
+			//テーマ名をコンボボックスにセット
+			pobj_DBTheme->ResetTheme_ToComboBox(GetDlgItem(hwnd,IDC_THEME));
+
+
+			SendMessage(hwnd,WM_COMMAND,MAKELONG(IDC_THEME,CBN_SELCHANGE),0);
+			break;
+
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+#ifdef THETEXT
+				case IDC_SAVE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_OPTION_THEME_SAVE),hwnd,DlgOptionThemeSave)) return 1;
+
+					pobj_Theme=pobj_DBTheme->dupli_check(szNewThemeName);
+					if(pobj_Theme){
+					}
+					else{
+						//新規に追加
+						pobj_Theme=pobj_DBTheme->add(0,szNewThemeName);
+					}
+					*pobj_Theme=obj_temp_Theme;
+					lstrcpy(pobj_Theme->m_name,szNewThemeName);
+
+					//ファイルに保存
+					pobj_Theme->save();
+
+					//テーマ コンボボックスのカーソル位置をセット
+					ComboBox_SetSelText(GetDlgItem(hwnd,IDC_THEME),szNewThemeName);
+
+					return 1;
+#endif //THETEXT
+				case IDC_THEME:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						if(!SendDlgItemMessage(hwnd,IDC_THEME,CB_GETLBTEXT,
+							SendDlgItemMessage(hwnd,IDC_THEME,CB_GETCURSEL,0,0),
+							(LPARAM)temporary)) return 1;
+
+						pobj_Theme=pobj_DBTheme->dupli_check(temporary);
+						obj_temp_Theme=*pobj_Theme;
+
+						InvalidateRect(GetDlgItem(hwnd,IDC_SAMPLE),NULL,0);
+						InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
+					}
+					return 1;
+				case IDC_TARGET:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
+					}
+					return 1;
+				case IDC_COLOR_BUTTON:
+					iPos=SendDlgItemMessage(hwnd,IDC_TARGET,CB_GETCURSEL,0,0);
+
+					CHOOSECOLOR cc;
+					static COLORREF CustColors[16];
+					cc.lStructSize=sizeof(CHOOSECOLOR);
+					cc.hwndOwner=hwnd;
+					cc.rgbResult=GetColorFromSelection(iPos,&obj_temp_Theme.TextColorInfo);
+					cc.lpCustColors=CustColors;
+					cc.Flags=CC_FULLOPEN | CC_RGBINIT;
+					if(!ChooseColor(&cc)) return 1;
+
+					SetColorFromSelection(iPos,cc.rgbResult,&obj_temp_Theme.TextColorInfo);
+
+					InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
+					InvalidateRect(GetDlgItem(hwnd,IDC_SAMPLE),NULL,0);
+
+					lstrcpy(obj_temp_Theme.m_name,THEMENAME_USER);
+
+					//ユーザー設定を選択
+					ComboBox_SetSelText(GetDlgItem(hwnd,IDC_THEME),THEMENAME_USER);
+					return 1;
+			}
+			break;
+
+		case WM_NOTIFY:
+			NMHDR *nmhdr;
+			nmhdr=(NMHDR *)lParam;
+
+			if(nmhdr->code==PSN_APPLY) SaveSetting();
+			return 1;
+
+		case WM_DRAWITEM:
+			LPDRAWITEMSTRUCT pds;
+			pds=(LPDRAWITEMSTRUCT)lParam;
+
+			HBRUSH hBrush,hOldBrush;
+
+			if(wParam==IDC_COLOR_BUTTON){
+				iPos=SendDlgItemMessage(hwnd,IDC_TARGET,CB_GETCURSEL,0,0);
+
+				//////////////
+				// 色を描画
+				//////////////
+
+				//ペンとブラシを生成
+				HPEN hPen,hOldPen;
+				hPen=(HPEN)GetStockObject(WHITE_PEN);
+				if(IsWindowEnabled(GetDlgItem(hwnd,IDC_COLOR_BUTTON)))
+					hBrush=CreateSolidBrush(GetColorFromSelection(iPos,&obj_temp_Theme.TextColorInfo));
+				else
+					hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
+
+				//塗りつぶす
+				hOldPen=(HPEN)SelectObject(pds->hDC,hPen);
+				hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
+				Rectangle(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom);
+				SelectObject(pds->hDC,hOldPen);
+				SelectObject(pds->hDC,hOldBrush);
+
+				//ブラシを破棄
+				DeleteObject(hBrush);
+			}
+			else if(wParam==IDC_SAMPLE){
+				TEXTEDIT_COLOR_INFO ColorInfo;
+				ColorInfo=obj_temp_Theme.TextColorInfo;
+
+				//背景色で塗りつぶす
+				hBrush=CreateSolidBrush(ColorInfo.rgbBackground);
+				hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
+				PatBlt(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom,PATCOPY);
+				SelectObject(pds->hDC,hOldBrush);
+				DeleteObject(hBrush);
+
+				//フォントを選択
+				extern HFONT hFont_TextEdit;
+				HFONT hOldFont;
+				hOldFont=(HFONT)SelectObject(pds->hDC,hFont_TextEdit);
+
+				///////////////////
+				// サンプルを描画
+				///////////////////
+
+				extern int font_width,font_height;
+				int x=0,y=0;
+
+#ifdef THETEXT
+#define SAMPLESTR_STATEMENT "div"
+#define SAMPLESTR_COMMENT "<!-- この行にカーソルがあります -->"
+#define SAMPLESTR_DEFAULT "<    style=               >Hello World!</   >"
+#define SAMPLESTR_STRING "\"color:#123456\""
+
+				y+=font_height;
+
+				//"<    style=               >Hello World!</   >"
+				SetTextColor(pds->hDC,ColorInfo.rgbDefault);
+				SetBkColor(pds->hDC,ColorInfo.rgbBackground);
+				TextOut(pds->hDC,x,y,SAMPLESTR_DEFAULT,lstrlen(SAMPLESTR_DEFAULT));
+
+				//div
+				x=font_width*1;
+				SetTextColor(pds->hDC,ColorInfo.rgbStatement);
+				TextOut(pds->hDC,x,y,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
+				x=font_width*41;
+				TextOut(pds->hDC,x,y,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
+
+				//"color:#123456"
+				x=font_width*11;
+				SetTextColor(pds->hDC,ColorInfo.rgbString);
+				TextOut(pds->hDC,x,y,SAMPLESTR_STRING,lstrlen(SAMPLESTR_STRING));
+
+				x=0;
+				y+=font_height*2;
+
+				//"'この行にカーソルがあります
+				hBrush=CreateSolidBrush(ColorInfo.rgbCursorBack);
+				hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
+				PatBlt(pds->hDC,x,y,pds->rcItem.right,font_height,PATCOPY);
+				SelectObject(pds->hDC,hOldBrush);
+				DeleteObject(hBrush);
+
+				SetTextColor(pds->hDC,ColorInfo.rgbComment);
+				SetBkColor(pds->hDC,ColorInfo.rgbCursorBack);
+				TextOut(pds->hDC,x,y,SAMPLESTR_COMMENT,lstrlen(SAMPLESTR_COMMENT));
+#else
+#define SAMPLESTR_STATEMENT "#console"
+#define SAMPLESTR_COMMENT "'この行にカーソルがあります"
+#define SAMPLESTR_DEFAULT "Print "
+#define SAMPLESTR_STRING "\"Hello World!\""
+
+				//"#console"
+				SetTextColor(pds->hDC,ColorInfo.rgbStatement);
+				SetBkColor(pds->hDC,ColorInfo.rgbBackground);
+				TextOut(pds->hDC,0,0,SAMPLESTR_STATEMENT,lstrlen(SAMPLESTR_STATEMENT));
+				y+=font_height*2;
+
+				//"'この行にカーソルがあります
+				hBrush=CreateSolidBrush(ColorInfo.rgbCursorBack);
+				hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
+				PatBlt(pds->hDC,x,y,pds->rcItem.right,font_height,PATCOPY);
+				SelectObject(pds->hDC,hOldBrush);
+				DeleteObject(hBrush);
+
+				SetTextColor(pds->hDC,ColorInfo.rgbComment);
+				SetBkColor(pds->hDC,ColorInfo.rgbCursorBack);
+				TextOut(pds->hDC,x,y,SAMPLESTR_COMMENT,lstrlen(SAMPLESTR_COMMENT));
+				y+=font_height*2;
+
+				//Print
+				SetTextColor(pds->hDC,ColorInfo.rgbDefault);
+				SetBkColor(pds->hDC,ColorInfo.rgbBackground);
+				TextOut(pds->hDC,x,y,SAMPLESTR_DEFAULT,lstrlen(SAMPLESTR_DEFAULT));
+				x+=lstrlen(SAMPLESTR_DEFAULT)*font_width;
+
+				//"Hello World!"
+				SetTextColor(pds->hDC,ColorInfo.rgbString);
+				TextOut(pds->hDC,x,y,SAMPLESTR_STRING,lstrlen(SAMPLESTR_STRING));
+#endif
+
+				SelectObject(pds->hDC,hOldFont);
+			}
+			return 0;
+
+		case WM_HELP:
+			HELPINFO *lpHelpInfo;
+			lpHelpInfo = (HELPINFO *)lParam;
+
+			HH_POPUP hp;
+			memset(&hp, 0, sizeof(HH_POPUP));
+			hp.cbStruct = sizeof(HH_POPUP);
+			hp.pt.x = lpHelpInfo->MousePos.x;
+			hp.pt.y = lpHelpInfo->MousePos.y+10;
+			hp.clrForeground = RGB(0, 0, 0);
+			hp.clrBackground = -1;
+			hp.rcMargins.left = -1;
+			hp.rcMargins.right = -1;
+			hp.rcMargins.top = -1;
+			hp.rcMargins.bottom = -1;
+			hp.idString = 0;
+			hp.pszFont="MS Sans Serif,10";
+
+			switch(lpHelpInfo->iCtrlId){
+				case IDC_TARGET:
+					hp.pszText="どの部分の色を設定するかを選択します。";
+					break;
+				default:
+					hp.pszText="";
+					break;
+			}
+			HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
+			return 1;
+	}
+	return 0;
+}
+BOOL CALLBACK Dlg_Option_Toolbar(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_INITDIALOG:
+			bOptionToolbar=1;
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_RESETTOOLBAR:
+					//"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか？"
+					if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
+
+					//レバーコントロールを再生成
+					pobj_Rebar->ResetInitRebar();
+
+					//メニュー状態を設定
+					ResetState_DocMenu();
+					return 1;
+			}
+			break;
+
+		case WM_HELP:
+			HELPINFO *lpHelpInfo;
+			lpHelpInfo = (HELPINFO *)lParam;
+
+			HH_POPUP hp;
+			memset(&hp, 0, sizeof(HH_POPUP));
+			hp.cbStruct = sizeof(HH_POPUP);
+			hp.pt.x = lpHelpInfo->MousePos.x;
+			hp.pt.y = lpHelpInfo->MousePos.y+10;
+			hp.clrForeground = RGB(0, 0, 0);
+			hp.clrBackground = -1;
+			hp.rcMargins.left = -1;
+			hp.rcMargins.right = -1;
+			hp.rcMargins.top = -1;
+			hp.rcMargins.bottom = -1;
+			hp.idString = 0;
+			hp.pszFont="MS Sans Serif,10";
+
+			switch(lpHelpInfo->iCtrlId){
+				case IDC_RESETTOOLBAR:
+#if defined(JPN)
+					//日本語
+					hp.pszText="ツールバーの配置を初期状態に戻します。";
+#else
+					//英語
+					hp.pszText="Reset the state of the toolbar.";
+#endif
+					break;
+				default:
+					hp.pszText="";
+					break;
+			}
+			HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
+			return 1;
+	}
+	return 0;
+}
+BOOL CALLBACK Dlg_Option_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	NMHDR *nmhdr;
+	switch(message){
+		case WM_INITDIALOG:
+
+			bOptionRad=1;
+
+			//ライン アジャスタ
+			if(pobj_nv->bLineAdjust) SendDlgItemMessage(hwnd,IDC_LINEADJUST,BM_SETCHECK,BST_CHECKED,0);
+
+			break;
+		case WM_NOTIFY:
+			nmhdr=(NMHDR *)lParam;
+			if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
+				if(SendDlgItemMessage(hwnd,IDC_LINEADJUST,BM_GETCHECK,0,0)) temp_bLineAdjust=1;
+				else temp_bLineAdjust=0;
+
+				if(nmhdr->code==PSN_APPLY) SaveSetting();
+			}
+			return 1;
+
+		case WM_HELP:
+			HELPINFO *lpHelpInfo;
+			lpHelpInfo = (HELPINFO *)lParam;
+
+			HH_POPUP hp;
+			memset(&hp, 0, sizeof(HH_POPUP));
+			hp.cbStruct = sizeof(HH_POPUP);
+			hp.pt.x = lpHelpInfo->MousePos.x;
+			hp.pt.y = lpHelpInfo->MousePos.y+10;
+			hp.clrForeground = RGB(0, 0, 0);
+			hp.clrBackground = -1;
+			hp.rcMargins.left = -1;
+			hp.rcMargins.right = -1;
+			hp.rcMargins.top = -1;
+			hp.rcMargins.bottom = -1;
+			hp.idString = 0;
+			hp.pszFont="MS Sans Serif,10";
+
+			switch(lpHelpInfo->iCtrlId){
+				case IDC_LINEADJUST:
+#if defined(JPN)
+					//日本語
+					hp.pszText="このチェックボックスをオンにすると、ラインアジャスタ機能が有効になります。ラインアジャスタ機能をオンにすると、マウスを使ってコントロールの移動を行う際に他のコントロール同士との位置合わせが容易に行えるようになります。";
+#else
+					//英語
+					hp.pszText="If this check is on, line adjuster becomes effective.";
+#endif
+					break;
+				default:
+					hp.pszText="";
+					break;
+			}
+			HtmlHelp(hwnd, 0, HH_DISPLAY_TEXT_POPUP, (DWORD)&hp);
+			return 1;
+	}
+	return 0;
+}
+char szDomainAdd_Name[255];
+char szDomainAdd_Domain[255];
+BOOL CALLBACK Dlg_Option_Web_Domain_Add(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			SetFocus(GetDlgItem(hwnd,IDC_NAME));
+
+			if(lParam!=-1){
+				SetWindowText(hwnd,"Web検索用ドメインを編集");
+				SetDlgItemText(hwnd,IDC_NAME,szDomainAdd_Name);
+				SetDlgItemText(hwnd,IDC_DOMAIN,szDomainAdd_Domain);
+			}
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					GetDlgItemText(hwnd,IDC_NAME,szDomainAdd_Name,255);
+					GetDlgItemText(hwnd,IDC_DOMAIN,szDomainAdd_Domain,255);
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			return 0;
+	}
+	return 0;
+}
+BOOL CALLBACK Dlg_Option_Web(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	HWND hListView;
+	NMHDR *nmhdr;
+	int i;
+	char temporary[255];
+	switch(message){
+		case WM_INITDIALOG:
+
+			bOptionWeb=1;
+
+
+			//Ctrlキーによるハイパーリンク
+			if(pobj_nv->bCtrlKeyHyperLink) SendDlgItemMessage(hwnd,IDC_CTRLKEY_HYPERLINK,BM_SETCHECK,BST_CHECKED,0);
+
+			//Web検索文字列を保存するかどうか
+			if(pobj_nv->bSaveWebFindStr) SendDlgItemMessage(hwnd,IDC_SAVE_WEBFINDSTR,BM_SETCHECK,BST_CHECKED,0);
+
+
+			//拡張スタイル
+			DWORD dwStyle;
+			hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
+			dwStyle=ListView_GetExtendedListViewStyle(hListView);
+			dwStyle|=LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
+			ListView_SetExtendedListViewStyle(hListView,dwStyle);
+
+			LV_COLUMN ListView_Column;
+			ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+			ListView_Column.fmt=LVCFMT_LEFT;
+
+			ListView_Column.cx=80;
+			ListView_Column.pszText="表示名";
+			ListView_Column.iSubItem=0;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+			ListView_Column.cx=200;
+			ListView_Column.pszText="ドメイン";
+			ListView_Column.iSubItem++;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+			//一時オブジェクトにコピー
+			pobj_temp_DBDomain->copy_get(pobj_nv->pobj_DBDomain);
+
+			//ドメインリストにデータをセット
+			pobj_temp_DBDomain->SetListView(hListView);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_ADD:
+					if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,Dlg_Option_Web_Domain_Add,-1)) return 1;
+
+					pobj_temp_DBDomain->add(szDomainAdd_Name,szDomainAdd_Domain);
+					return 1;
+				case IDC_DELETE:
+					hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
+					for(i=0;i<ListView_GetItemCount(hListView);i++){
+						if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+							ListView_GetItemText(hListView,i,0,temporary,255);
+							pobj_temp_DBDomain->del(temporary);
+							break;
+						}
+					}
+					return 1;
+				case IDC_EDIT:
+					hListView=GetDlgItem(hwnd,IDC_DOMAIN_LIST);
+					for(i=0;i<ListView_GetItemCount(hListView);i++){
+						if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+							ListView_GetItemText(hListView,i,0,temporary,255);
+
+							ListView_GetItemText(hListView,i,0,szDomainAdd_Name,255);
+							ListView_GetItemText(hListView,i,1,szDomainAdd_Domain,255);
+							lstrcpy(temporary,szDomainAdd_Name);
+							if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,Dlg_Option_Web_Domain_Add,i)) return 1;
+
+							pobj_temp_DBDomain->change(temporary,szDomainAdd_Name,szDomainAdd_Domain);
+						}
+					}
+					return 1;
+			}
+			return 0;
+		case WM_NOTIFY:
+			nmhdr=(NMHDR *)lParam;
+			if(nmhdr->code==PSN_APPLY||nmhdr->code==PSN_KILLACTIVE){
+
+				//Ctrlキーによるハイパーリンク
+				if(SendDlgItemMessage(hwnd,IDC_CTRLKEY_HYPERLINK,BM_GETCHECK,0,0)) temp_bCtrlKeyHyperLink=1;
+				else temp_bCtrlKeyHyperLink=0;
+
+				//Web検索文字列を保存するかどうか
+				if(SendDlgItemMessage(hwnd,IDC_SAVE_WEBFINDSTR,BM_GETCHECK,0,0)) temp_bSaveWebFindStr=1;
+				else temp_bSaveWebFindStr=0;
+
+				if(nmhdr->code==PSN_APPLY) SaveSetting();
+			}
+			if(nmhdr->idFrom==IDC_DOMAIN_LIST){
+				if(nmhdr->code==NM_DBLCLK){
+					LPNMLISTVIEW lpnmListView;
+					lpnmListView=(LPNMLISTVIEW)lParam;
+
+					char szBeforeName[255];
+					ListView_GetItemText(nmhdr->hwndFrom,lpnmListView->iItem,0,szDomainAdd_Name,255);
+					ListView_GetItemText(nmhdr->hwndFrom,lpnmListView->iItem,1,szDomainAdd_Domain,255);
+					lstrcpy(szBeforeName,szDomainAdd_Name);
+					if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_OPTION_WEB_DOMAIN_ADD),hwnd,Dlg_Option_Web_Domain_Add,lpnmListView->iItem)) return 1;
+
+					pobj_temp_DBDomain->change(szBeforeName,szDomainAdd_Name,szDomainAdd_Domain);
+				}
+			}
+			return 1;
+	}
+	return 0;
+}
+void DlgOptionSetting(HWND hwnd){
+	PROPSHEETHEADER psh;
+#define MAX_SETDLG 32
+	PROPSHEETPAGE psp[MAX_SETDLG];
+	HPROPSHEETPAGE hpsp[MAX_SETDLG];
+	int i;
+
+	bOptionWhole=0;
+	bOptionEditor=0;
+	bOptionColor=0;
+	bOptionToolbar=0;
+	bOptionRad=0;
+	bOptionWeb=0;
+
+	i=0;
+
+	//各ページのセッティング
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_WHOLE);
+	psp[i].pfnDlgProc=Dlg_Option_Whole;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+	i++;
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_EDITOR);
+	psp[i].pfnDlgProc=Dlg_Option_Editor;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+	i++;
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_COLOR);
+	psp[i].pfnDlgProc=Dlg_Option_Color;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+	i++;
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_TOOLBAR);
+	psp[i].pfnDlgProc=Dlg_Option_Toolbar;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+
+#ifndef THETEXT
+	//RADツールに関するオプションはProjectEditorのみ表示
+	i++;
+	psp[i].dwSize=sizeof(PROPSHEETPAGE);
+	psp[i].dwFlags=PSP_DEFAULT;
+	psp[i].hInstance=hResInst;
+	psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_RAD);
+	psp[i].pfnDlgProc=Dlg_Option_Rad;
+	hpsp[i]=CreatePropertySheetPage(&psp[i]);
+#endif
+
+	if(bProfessional){
+		//Web検索に関するオプションはPro版のみ表示
+		i++;
+		psp[i].dwSize=sizeof(PROPSHEETPAGE);
+		psp[i].dwFlags=PSP_DEFAULT;
+		psp[i].hInstance=hResInst;
+		psp[i].pszTemplate=MAKEINTRESOURCE(IDD_OPTION_WEB);
+		psp[i].pfnDlgProc=Dlg_Option_Web;
+		hpsp[i]=CreatePropertySheetPage(&psp[i]);
+	}
+
+	i++;
+
+
+
+	///////////////////////////
+	// 一時オブジェクトを生成
+	///////////////////////////
+
+	pobj_temp_DBDomain=new CDBDomain();
+
+
+
+	memset(&psh,0,sizeof(PROPSHEETHEADER));
+	psh.dwSize=sizeof(PROPSHEETHEADER);
+	psh.dwFlags=PSH_PROPSHEETPAGE|PSH_NOAPPLYNOW;
+	psh.phpage=hpsp;
+	psh.hwndParent=hwnd;
+	psh.pszCaption=STRING_OPTION;	//"オプション"
+	psh.nPages=i;
+	psh.nStartPage=0;
+	psh.ppsp=psp;
+	PropertySheet(&psh);
+
+
+
+	///////////////////////////
+	// 一時オブジェクトを破棄
+	///////////////////////////
+
+	delete pobj_temp_DBDomain;
+}
+BOOL CALLBACK DialogAbout(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	if(message==WM_INITDIALOG){
+		SetPosCenter(hwnd);
+
+		SetDlgItemText(hwnd,IDC_STATIC_NAME,VERSION_APPLI_NAME);
+
+		char temporary[1024];
+		sprintf(temporary,"Version %s",VERSION_STRING);
+		SetDlgItemText(hwnd,IDC_STATIC_VERSION,temporary);
+
+#ifdef THETEXT
+		if(bProfessional){
+			lstrcpy(temporary,"  このアプリケーションはすべての機能を利用可能なPro版です。");
+			ShowWindow(GetDlgItem(hwnd,IDC_GOPRO),SW_HIDE);
+		}
+		else{
+#ifdef SHAREWARE
+			lstrcpy(temporary,"  機能制限がかかったスタンダードモードで動作しています。Pro版のご購入手続きを行っていただくことで、提供される機能のすべてをご利用いただけます。");
+#else
+			lstrcpy(temporary,"  このアプリケーションは基本機能を備えたStandard版です。より高機能なPro版をご検討の方は、下のボタンをクリックしてください。");
+#endif
+			ShowWindow(GetDlgItem(hwnd,IDC_GOPRO),SW_SHOW);
+		}
+#else //THETEXT
+		if(bProfessional){
+			lstrcpy(temporary,"  このアプリケーションはすべての機能を利用可能なPro版です。");
+			ShowWindow(GetDlgItem(hwnd,IDC_GOPRO),SW_HIDE);
+			ShowWindow(GetDlgItem(hwnd,IDC_INPUT_PASSWORD),SW_HIDE);
+		}
+		else{
+			lstrcpy(temporary,"  このアプリケーションは基本機能を備えたStandard版です。TheText Proをご購入いただくことによって、ProjectEditor Proへの拡張機能を行うことができます。");
+			ShowWindow(GetDlgItem(hwnd,IDC_GOPRO),SW_SHOW);
+			ShowWindow(GetDlgItem(hwnd,IDC_INPUT_PASSWORD),SW_SHOW);
+		}
+#endif
+		SetDlgItemText(hwnd,IDC_NOTE,temporary);
+
+
+#ifndef THETEXT
+		//ライブラリ開発チーム
+		LoadString(hResInst,IDS_DEV_GROUP,temporary,1024);
+		SetDlgItemText(hwnd,IDC_DEV_GROUP,temporary);
+#endif
+	}
+	if(message==WM_COMMAND){
+		switch(LOWORD(wParam)){
+			case IDCANCEL:
+				EndDialog(hwnd,NULL);
+				return 1;
+			case IDC_GOPRO:
+				ShellExecute(hwnd,"open","http://www.discoversoft.net/thetext_pro.html",NULL,NULL,SW_SHOWNORMAL);
+				return 1;
+#ifndef THETEXT
+			//ProjectEditorのみ
+			case IDC_INPUT_PASSWORD:
+				if(DialogBox(hResInst,MAKEINTRESOURCE(IDD_PASSWORD),hwnd,DlgPassword)){
+					WriteSerialHash();
+
+					MessageBox(hwnd,"シリアルIDを正常に認証致しました。\n次回起動時から、機能拡張が施されたProモードでProjectEditorをご利用いただくことができます。",APPLICATION_NAME,MB_OK);
+					EnableWindow(GetDlgItem(hwnd,IDC_INPUT_PASSWORD),0);
+				}
+				return 1;
+#endif
+		}
+	}
+	return 0;
+}
+BOOL CALLBACK DlgPassword(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(GetDesktopWindow(),hwnd);
+			SetFocus(GetDlgItem(hwnd,IDC_PASSWORD));
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					char temporary[255];
+					GetDlgItemText(hwnd,IDC_PASSWORD,temporary,255);
+
+					if(!SerialCheck(temporary)){
+						MessageBox(hwnd,"入力されたシリアルIDが正しくありません。",APPLICATION_NAME,MB_OK);
+						return 1;
+					}
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			return 0;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgProfessionalStart(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(GetDesktopWindow(),hwnd);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			return 0;
+	}
+	return 0;
+}
Index: /ProjectEditor/DocumentAdvice.cpp
===================================================================
--- /ProjectEditor/DocumentAdvice.cpp	(revision 3)
+++ /ProjectEditor/DocumentAdvice.cpp	(revision 3)
@@ -0,0 +1,274 @@
+#include "Common.h"
+
+void MenuAdvice(WPARAM msg){
+	/////////////////////////////////////////////////////
+	// コマンド解説（ステータスバーに表示されるテキスト）
+	/////////////////////////////////////////////////////
+	extern char CmdMsg[255];
+
+#if defined(JPN)
+	//日本語
+	if(LOWORD(msg)==IDM_NEW) SetStatusText("新規にプロジェクトまたはドキュメントを作成します");
+	else if(LOWORD(msg)==IDM_OPEN) SetStatusText("既存のドキュメントを開きます");
+	else if(LOWORD(msg)==IDM_CLOSE) SetStatusText("作業中のファイルを閉じます");
+	else if(LOWORD(msg)==IDM_SAVE) SetStatusText("作業中のファイルを保存します");
+	else if(LOWORD(msg)==IDM_NEWSAVE) SetStatusText("作業中のファイルを新しい名前を付けて保存します");
+	else if(LOWORD(msg)==IDM_ALLSAVE) SetStatusText("開いているファイルをすべて保存します");
+	else if(LOWORD(msg)==IDM_PROJECT_OPEN) SetStatusText("既存のプロジェクトを開きます");
+	else if(LOWORD(msg)==IDM_PROJECT_SAVE) SetStatusText("作業中のプロジェクトを保存します");
+	else if(LOWORD(msg)==IDM_PROJECT_CLOSE) SetStatusText("作業中のプロジェクトを閉じます");
+	else if(LOWORD(msg)==IDM_EXIT) SetStatusText("アプリケーションの終了と内容の保存確認をします");
+	else if(LOWORD(msg)==IDM_UNDO) SetStatusText("直前の操作を元にもどします");
+	else if(LOWORD(msg)==IDM_REDO) SetStatusText("前の未完了操作を繰り返します");
+	else if(LOWORD(msg)==IDM_CUT) SetStatusText("選択範囲を切り取り、クリップボードへコピーします");
+	else if(LOWORD(msg)==IDM_COPY) SetStatusText("選択範囲をクリップボードへコピーします");
+	else if(LOWORD(msg)==IDM_PASTE) SetStatusText("挿入位置にクリップボードの内容を挿入します");
+	else if(LOWORD(msg)==IDM_DELETE) SetStatusText("選択範囲を削除します");
+	else if(LOWORD(msg)==IDM_ALLSELECT) SetStatusText("ファイル全体を選択します");
+	else if(LOWORD(msg)==IDM_FIND) SetStatusText("作業中のドキュメント内を検索します");
+	else if(LOWORD(msg)==IDM_PERMUTATION) SetStatusText("指定した文字列を他の文字列で置換します");
+
+#ifdef THETEXT
+	else if(LOWORD(msg)==IDM_STRING_COUNT) SetStatusText("作業中ドキュメントの文字数をカウントします");
+#endif
+
+	else if(LOWORD(msg)==IDM_PROJECTVIEW) SetStatusText("プロジェクトビューの表示/非表示を切り替えます");
+	else if(LOWORD(msg)==IDM_PROJECT_OPTION) SetStatusText("プロジェクトオプションの設定を行います");
+	else if(LOWORD(msg)==IDM_TOPMOST) SetStatusText("エディタの最前面表示ON/OFFを切り替えます");
+	else if(LOWORD(msg)==IDM_SET) SetStatusText("エディタオプションの設定を行います");
+	else if(LOWORD(msg)==IDM_DEBUG) SetStatusText("プログラムをデバッグ用にコンパイルし、デバッグ実行します");
+	else if(LOWORD(msg)==IDM_DEBUGCOMPILE) SetStatusText("プログラムをデバッグ用にコンパイルします");
+	else if(LOWORD(msg)==IDM_RELEASECOMPILE) SetStatusText("プログラムをリリース用にコンパイルします");
+	else if(LOWORD(msg)==IDM_TOPIC) SetStatusText("ヘルプファイルを開きます");
+	else if(LOWORD(msg)==IDM_ABOUT) SetStatusText("ActiveBasicのバージョン情報を表示します");
+	else SetStatusText(CmdMsg);
+#else
+	//英語
+	if(LOWORD(msg)==IDM_NEW) SetStatusText("Create a new document");
+	else if(LOWORD(msg)==IDM_OPEN) SetStatusText("Open an existing document");
+	else if(LOWORD(msg)==IDM_CLOSE) SetStatusText("Close the active document");
+	else if(LOWORD(msg)==IDM_SAVE) SetStatusText("Save the active document");
+	else if(LOWORD(msg)==IDM_NEWSAVE) SetStatusText("Save the active document with a new name");
+	else if(LOWORD(msg)==IDM_ALLSAVE) SetStatusText("Save all the modified documents");
+	else if(LOWORD(msg)==IDM_PROJECT_OPEN) SetStatusText("Open an existing project");
+	else if(LOWORD(msg)==IDM_PROJECT_SAVE) SetStatusText("Save the active project");
+	else if(LOWORD(msg)==IDM_PROJECT_CLOSE) SetStatusText("Close the active project");
+	else if(LOWORD(msg)==IDM_EXIT) SetStatusText("Quit the application, prompts you to save modified documents");
+	else if(LOWORD(msg)==IDM_UNDO) SetStatusText("Undo the last action");
+	else if(LOWORD(msg)==IDM_REDO) SetStatusText("Redo the previously undone action");
+	else if(LOWORD(msg)==IDM_CUT) SetStatusText("Cut the selection and puts it on the Clipboard");
+	else if(LOWORD(msg)==IDM_COPY) SetStatusText("Copy the selection and puts it on the Clipboard");
+	else if(LOWORD(msg)==IDM_PASTE) SetStatusText("Insert Clipboard contents");
+	else if(LOWORD(msg)==IDM_DELETE) SetStatusText("Erase the selection");
+	else if(LOWORD(msg)==IDM_ALLSELECT) SetStatusText("Select the entire document");
+	else if(LOWORD(msg)==IDM_FIND) SetStatusText("Search for text in the active document");
+	else if(LOWORD(msg)==IDM_PERMUTATION) SetStatusText("Replace occurrences of search string");
+	else if(LOWORD(msg)==IDM_PROJECTVIEW) SetStatusText("Show or hide ProjectView");
+	else if(LOWORD(msg)==IDM_PROJECT_OPTION) SetStatusText("Set project options");
+	else if(LOWORD(msg)==IDM_TOPMOST) SetStatusText("Mark ProjectEditor stay on top of the other applications");
+	else if(LOWORD(msg)==IDM_SET) SetStatusText("Set editor options");
+	else if(LOWORD(msg)==IDM_DEBUG) SetStatusText("Debug the program");
+	else if(LOWORD(msg)==IDM_DEBUGCOMPILE) SetStatusText("Compile the program for debugging");
+	else if(LOWORD(msg)==IDM_RELEASECOMPILE) SetStatusText("Compile the program for release");
+	else if(LOWORD(msg)==IDM_TOPIC) SetStatusText("Open the Help topics");
+	else if(LOWORD(msg)==IDM_ABOUT) SetStatusText("Display information about ActiveBasic");
+	else SetStatusText(CmdMsg);
+#endif
+}
+
+void ShowToolTipText(LPTOOLTIPTEXT TipText){
+	////////////////////////////////////////////////////////////////////////////
+	// ツールチップ（ツールバーにポイントしたときにポップアップされるテキスト）
+	////////////////////////////////////////////////////////////////////////////
+
+#if defined(JPN)
+	//日本語
+	if(TipText->hdr.idFrom==IDM_NEW) TipText->lpszText="新規作成 (Ctrl+N)";
+	else if(TipText->hdr.idFrom==IDM_OPEN) TipText->lpszText="開く (Ctrl+O)";
+	else if(TipText->hdr.idFrom==IDM_SAVE) TipText->lpszText="保存 (Ctrl+S)";
+	else if(TipText->hdr.idFrom==IDM_ALLSAVE) TipText->lpszText="すべて保存";
+	else if(TipText->hdr.idFrom==IDM_CUT) TipText->lpszText="切り取り (Ctrl+X)";
+	else if(TipText->hdr.idFrom==IDM_COPY) TipText->lpszText="コピー (Ctrl+C)";
+	else if(TipText->hdr.idFrom==IDM_PASTE) TipText->lpszText="貼り付け (Ctrl+V)";
+	else if(TipText->hdr.idFrom==IDM_UNDO) TipText->lpszText="元に戻す (Ctrl+Z)";
+	else if(TipText->hdr.idFrom==IDM_REDO) TipText->lpszText="やり直し (Ctrl+Y)";
+	else if(TipText->hdr.idFrom==IDM_FIND) TipText->lpszText="検索 (Ctrl+F)";
+	else if(TipText->hdr.idFrom==IDM_DEBUG) TipText->lpszText="デバッグ実行 (F2)";
+	else if(TipText->hdr.idFrom==IDM_DEBUGCOMPILE) TipText->lpszText="デバッグ コンパイル (F4)";
+	else if(TipText->hdr.idFrom==IDM_RELEASECOMPILE) TipText->lpszText="リリース コンパイル (F7)";
+#else
+	//英語
+	if(TipText->hdr.idFrom==IDM_NEW) TipText->lpszText="New Document (Ctrl+N)";
+	else if(TipText->hdr.idFrom==IDM_OPEN) TipText->lpszText="Open Document (Ctrl+O)";
+	else if(TipText->hdr.idFrom==IDM_SAVE) TipText->lpszText="Save Document (Ctrl+S)";
+	else if(TipText->hdr.idFrom==IDM_ALLSAVE) TipText->lpszText="Save All Document";
+	else if(TipText->hdr.idFrom==IDM_CUT) TipText->lpszText="Cut (Ctrl+X)";
+	else if(TipText->hdr.idFrom==IDM_COPY) TipText->lpszText="Copy (Ctrl+C)";
+	else if(TipText->hdr.idFrom==IDM_PASTE) TipText->lpszText="Paste (Ctrl+V)";
+	else if(TipText->hdr.idFrom==IDM_UNDO) TipText->lpszText="Undo (Ctrl+Z)";
+	else if(TipText->hdr.idFrom==IDM_REDO) TipText->lpszText="Redo (Ctrl+Y)";
+	else if(TipText->hdr.idFrom==IDM_FIND) TipText->lpszText="Find (Ctrl+F)";
+	else if(TipText->hdr.idFrom==IDM_DEBUG) TipText->lpszText="Run for Debugging (F2)";
+	else if(TipText->hdr.idFrom==IDM_DEBUGCOMPILE) TipText->lpszText="Compile for Debugging (F4)";
+	else if(TipText->hdr.idFrom==IDM_RELEASECOMPILE) TipText->lpszText="Compile for Release (F7)";
+#endif
+	MenuAdvice(TipText->hdr.idFrom);
+}
+
+char *reflexive_Include(char *buffer,char ***pppFilePath,int *pFileNum,char *pDefaultDir){
+	extern HANDLE hHeap;
+	int i,i2,i3,i4,sw1,sw2,FileSize;
+	char temporary[MAX_PATH],temp2[MAX_PATH+255],*temp3;
+	DWORD AccBytes;
+
+	//重複チェック用
+	char **ppFilePath;
+	int FileNum;
+	ppFilePath=*pppFilePath;
+	FileNum=*pFileNum;
+
+	for(i=0;;i++){
+		if(memcmp(buffer+i,"#include",8)==0&&(!IsVariableChar(buffer[i+8]))){
+			i2=i+8;
+			while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+			sw1=0;
+			if(buffer[i2]=='\"') i2++;
+			else if(buffer[i2]=='<'){
+				i2++;
+				sw1=1;
+			}
+			for(i3=0;;i2++,i3++){
+				if((buffer[i2]=='\"'&&sw1==0)||(buffer[i2]=='>'&&sw1==1)||(buffer[i2]=='\r'&&buffer[i2+1]=='\n')||buffer[i2]=='\0'){
+					temporary[i3]=0;
+					break;
+				}
+				temporary[i3]=buffer[i2];
+			}
+			while((!(buffer[i2]=='\r'&&buffer[i2+1]=='\n'))&&buffer[i2]!='\0') i2++;
+
+			if(sw1){
+				sprintf(temp2,"%sInclude\\%s",pj_editor_Dir,temporary);
+				lstrcpy(temporary,temp2);
+			}
+			else{
+				GetFullPath(temporary,pDefaultDir);
+			}
+
+
+			//////////////////
+			// 重複チェック
+			//////////////////
+			for(i3=0,sw2=0;i3<FileNum;i3++){
+				if(lstrcmpi(ppFilePath[i3],temporary)==0){
+					//重複したとき
+					sw2=1;
+					break;
+				}
+			}
+			if(sw2){
+				//重複したときは無視する
+				i=i2;
+				continue;
+			}
+			ppFilePath=(char **)HeapReAlloc(hHeap,0,ppFilePath,(FileNum+1)*sizeof(char *));
+			ppFilePath[FileNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(ppFilePath[FileNum],temporary);
+			FileNum++;
+
+#define MEM_SPACE 1024 //強制終了を防ぐためのゆとりスペース
+			extern MDIINFO MdiInfo[MAX_WNDNUM];
+			for(i3=0;i3<MAX_WNDNUM;i3++){
+				if(MdiInfo[i3].hwnd){
+					if(lstrcmpi(temporary,MdiInfo[i3].path)==0) break;
+				}
+			}
+			if(i3==MAX_WNDNUM){
+				//ファイルから開く
+				HANDLE fh;
+				fh=CreateFile(temporary,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+				if(fh==INVALID_HANDLE_VALUE){
+					goto finish;
+				}
+
+				FileSize=GetFileSize(fh,NULL);
+
+				temp3=(char *)HeapAlloc(hHeap,0,FileSize+MEM_SPACE);
+				ReadFile(fh,temp3,FileSize,&AccBytes,NULL);
+				temp3[FileSize]=0;
+
+				CloseHandle(fh);
+			}
+			else{
+				//エディタから読み取る
+				FileSize=lstrlen(MdiInfo[i3].pmti->buffer);
+
+				temp3=(char *)HeapAlloc(hHeap,0,FileSize+MEM_SPACE);
+				memcpy(temp3,MdiInfo[i3].pmti->buffer,FileSize);
+				temp3[FileSize]=0;
+			}
+
+			//新しい参照ディレクトリを取得
+			char DefaultDir[MAX_PATH+1024];
+			_splitpath(temporary,DefaultDir,temp2,0,0);
+			lstrcat(DefaultDir,temp2);
+
+			//インクルードの再帰呼び出し
+			temp3=reflexive_Include(temp3,&ppFilePath,&FileNum,DefaultDir);
+			FileSize=lstrlen(temp3);
+
+			i4=lstrlen(buffer)+FileSize-(i2-i);
+			if(FileSize>(i2-i)) buffer=(char *)HeapReAlloc(hHeap,0,buffer,i4+1+MEM_SPACE);
+			SlideString(buffer+i2,FileSize-(i2-i));
+
+			memcpy(buffer+i,temp3,FileSize);
+
+			HeapDefaultFree(temp3);
+
+			i--;
+			continue;
+		}
+
+		for(;;i++){
+			if(buffer[i]=='\0') break;
+			if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
+				i++;
+				break;
+			}
+		}
+		if(buffer[i]=='\0') break;
+	}
+
+finish:
+
+	//重複チェック用
+	*pppFilePath=ppFilePath;
+	*pFileNum=FileNum;
+
+	return buffer;
+}
+
+char *IncludeFiles(char *buffer){
+	extern HANDLE hHeap;
+	int i;
+
+	//参照ディレクトリ
+	char *pDefaultDir;
+	extern PROJECTINFO ProjectInfo;
+	if(ProjectInfo.name[0])
+		pDefaultDir=ProjectInfo.dir;
+	else pDefaultDir=pj_editor_Dir;
+
+	//重複チェック用
+	char **ppFilePath;
+	int FileNum;
+	ppFilePath=(char **)HeapAlloc(hHeap,0,1);
+	FileNum=0;
+
+	buffer=reflexive_Include(buffer,&ppFilePath,&FileNum,pDefaultDir);
+
+	for(i=0;i<FileNum;i++){
+		HeapDefaultFree(ppFilePath[i]);
+	}
+	HeapDefaultFree(ppFilePath);
+	return buffer;
+}
Index: /ProjectEditor/DrawBuffer.cpp
===================================================================
--- /ProjectEditor/DrawBuffer.cpp	(revision 3)
+++ /ProjectEditor/DrawBuffer.cpp	(revision 3)
@@ -0,0 +1,613 @@
+#include "Common.h"
+
+extern HFONT hFont_TextEdit;
+extern int font_width,font_height;
+
+class CDrawReserve{
+	int x,y;
+	COLORREF NowColor,NowBackColor;
+	int bNowUnder;
+	char *lpszBuffer;
+	int length;
+	int m_WndNum;
+	HDC hdc;
+	HBITMAP hMemBmp,hOldBitmap;
+	HFONT hOldFont;
+	SIZE ClientSize;
+	int iControlTabSpace;
+	int iOnePage_CharHeight;
+	int iLineNumberTextCount;
+	int iMax_OneLine_TextLength;
+public:
+	HDC memdc;
+	CDrawReserve(int WndNum,HDC _hDC,int cx,int cy,int ctrl_tab_space,int nMaxOnePageChar,int linenum_textcount){
+		m_WndNum=WndNum;
+		x=-1;
+		y=-1;
+		bNowUnder=0;
+		hdc=_hDC;
+		ClientSize.cx=cx;
+		ClientSize.cy=cy;
+		iControlTabSpace=ctrl_tab_space;
+		iOnePage_CharHeight=nMaxOnePageChar;
+		iMax_OneLine_TextLength=cx/font_width+1;
+		iLineNumberTextCount=linenum_textcount;
+		memdc=CreateCompatibleDC(hdc);
+		hMemBmp=CreateCompatibleBitmap(hdc,cx,cy);
+		hOldBitmap=(HBITMAP)SelectObject(memdc,hMemBmp);
+
+		//背景色でメモリ画面を初期化
+		HBRUSH hBrush,hOldBrush;
+		hBrush=CreateSolidBrush(tci.rgbBackground);
+		hOldBrush=(HBRUSH)SelectObject(memdc,hBrush);
+		PatBlt(memdc,0,0,cx,cy,PATCOPY);
+		DeleteObject(hBrush);
+
+		//背景ビットマップ
+#ifdef THETEXT
+		if(pobj_DBTheme->hBackBmp){
+			HDC memdc2;
+			memdc2=CreateCompatibleDC(memdc);
+			SelectObject(memdc2,pobj_DBTheme->hBackBmp);
+			BitBlt(memdc,
+				cx-(pobj_DBTheme->sizeBackBmp.cx),
+				cy-(pobj_DBTheme->sizeBackBmp.cy),
+				pobj_DBTheme->sizeBackBmp.cx,pobj_DBTheme->sizeBackBmp.cy,
+				memdc2,0,0,SRCCOPY);
+			DeleteDC(memdc2);
+		}
+#endif
+
+		//フォントを設定
+		extern HFONT hFont_TextEdit;
+		hOldFont=(HFONT)SelectObject(memdc,hFont_TextEdit);
+
+		lpszBuffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+		length=0;
+	}
+	~CDrawReserve(){
+		SelectObject(memdc,hOldBitmap);
+		DeleteObject(hMemBmp);
+
+		SelectObject(memdc,hOldFont);
+
+		DeleteDC(memdc);
+
+		HeapDefaultFree(lpszBuffer);
+	}
+
+	void draw(){
+		if(length==0) return;
+		SetTextColor(memdc,NowColor);
+		if(NowBackColor==tci.rgbBackground){
+			SetBkMode(memdc,TRANSPARENT);
+		}
+		else{
+			SetBkMode(memdc,OPAQUE);
+			SetBkColor(memdc,NowBackColor);
+		}
+
+		HFONT hBeforeFont;
+		if(bNowUnder){
+			//下線付きフォントに設定
+			extern HFONT hFont_HyperLink_TextEdit;
+			hBeforeFont=(HFONT)SelectObject(memdc,hFont_HyperLink_TextEdit);
+		}
+
+		int offset=0;
+		if(x<0){
+			offset=-x;
+
+			//左端の全角文字の文字化けを避けるために10バイトの余裕を作る
+			offset-=10;
+			if(offset<0) offset=0;
+
+			length-=offset;
+			if(length<0) return;
+		}
+
+		if(length>iMax_OneLine_TextLength+10){
+			length=iMax_OneLine_TextLength+10;
+		}
+
+		int i;
+		int *lpDxWidths;
+		lpDxWidths=(int *)malloc((length+1)*sizeof(int));
+		for(i=0;i<length+1;i++){
+			lpDxWidths[i]=font_width;
+		}
+		ExtTextOut(memdc,
+			(x+offset)*(font_width)     +iControlTabSpace,
+			y*font_height,
+			0,NULL,
+			lpszBuffer+offset,length,
+			lpDxWidths);
+
+		if(bNowUnder){
+			SelectObject(memdc,hBeforeFont);
+		}
+
+		free(lpDxWidths);
+	}
+
+	void DrawReserve(int nXStart,int nYStart,COLORREF NextColor,COLORREF NextBackColor,BOOL bUnder,LPSTR lpString,int cbString){
+		if(nYStart!=y || NextColor!=NowColor || NextBackColor!=NowBackColor || bUnder!=bNowUnder){
+			//描画
+			draw();
+
+			x=nXStart;
+			y=nYStart;
+			NowColor=NextColor;
+			NowBackColor=NextBackColor;
+			bNowUnder=bUnder;
+
+			lpszBuffer[0]=0;
+			length=0;
+		}
+
+		//予約
+		lpszBuffer=(char *)HeapReAlloc(hHeap,0,lpszBuffer,length+cbString+1);
+		memcpy(lpszBuffer+length,lpString,cbString);
+		length+=cbString;
+		lpszBuffer[length]=0;
+	}
+
+	void finish(int BaseY){
+		draw();
+
+		HBRUSH hBrush,hOldBrush;
+		if(pobj_nv->bEditor_LineNumber){
+			hBrush=CreateSolidBrush(RGB(220,220,220));
+			hOldBrush=(HBRUSH)SelectObject(memdc,hBrush);
+
+
+			/////////////////////////////////////////////////////
+			// エディタ画面左端のコントロールタブの行番号を描画
+			/////////////////////////////////////////////////////
+
+			//灰色で塗りつぶす
+			PatBlt(memdc,
+				0,
+				0,
+				iControlTabSpace,
+				ClientSize.cy,
+				PATCOPY);
+
+			extern HFONT hFont_LineNumber;
+			int LineNumberFontHeight;
+
+			HFONT hOldFont;
+			hOldFont=(HFONT)SelectObject(memdc,hFont_LineNumber);
+			SetTextColor(memdc,RGB(60,60,60));
+			SetBkColor(memdc,RGB(220,220,220));
+
+			SIZE size;
+			GetTextExtentPoint32(memdc,"A",1,&size);
+			LineNumberFontHeight=size.cy;
+
+
+			//ブレークポイントの描画を準備
+			CFileBreakPoint *pobj_FileBreakPoint=0;
+			if(ProjectInfo.name[0]){
+				pobj_FileBreakPoint=
+					ProjectInfo.pobj_DBBreakPoint->EnumLines(MdiInfo[m_WndNum].path);
+			}
+			else{
+				extern CDBBreakPoint *pobj_DBBreakPoint;
+				pobj_FileBreakPoint=pobj_DBBreakPoint->EnumLines(MdiInfo[m_WndNum].path);
+			}
+
+
+			int i,i2;
+			char temporary[255],temp2[255];
+			if(y<iOnePage_CharHeight) i2=y;
+			else i2=iOnePage_CharHeight;
+			for(i=0;i<=i2;i++){
+
+				BOOL bBreakPoint;
+				bBreakPoint=0;
+				if(pobj_FileBreakPoint){
+					if(pobj_FileBreakPoint->check(i-BaseY)){
+						bBreakPoint=1;
+					}
+				}
+
+				if(bBreakPoint){
+					DrawIconEx(memdc,3,i*font_height+(font_height-16)/2,
+						(HICON)LoadImage(hIconResInst,MAKEINTRESOURCE(IDI_BREAKPOINT_FLAG),IMAGE_ICON,16,16,LR_SHARED),
+						16,16,0,NULL,DI_NORMAL);
+				}
+				else{
+					sprintf(temp2,"%%%dd:",iLineNumberTextCount);
+					sprintf(temporary,temp2,(i-BaseY)+1);
+
+					TextOut(memdc,
+						3,
+						i*font_height+(font_height-LineNumberFontHeight)/2,
+						temporary,
+						lstrlen(temporary));
+				}
+			}
+
+			SelectObject(memdc,hOldFont);
+
+
+			//ブラシを破棄
+			SelectObject(memdc,hOldBrush);
+			DeleteObject(hBrush);
+		}
+		else{
+			////////////////////////////////////////////
+			// エディタ画面左端のコントロールタブを描画
+			// ※行番号は非表示
+			////////////////////////////////////////////
+
+			hBrush=CreateSolidBrush(RGB(220,220,220));
+			hOldBrush=(HBRUSH)SelectObject(memdc,hBrush);
+
+			PatBlt(memdc,
+				0,
+				0,
+				iControlTabSpace,
+				ClientSize.cy,
+				PATCOPY);
+
+			SelectObject(memdc,hOldBrush);
+			DeleteObject(hBrush);
+		}
+
+
+		//メモリDCの内容を画面に描画
+		BitBlt(hdc,0,0,ClientSize.cx,ClientSize.cy,memdc,0,0,SRCCOPY);
+	}
+};
+
+void TextEdit_DrawBuffer(HDC hdc,int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	int x,y;
+	int BaseX,BaseY,CharX;
+	char *pBuf,temporary[255];
+	HWND hEdit;
+
+
+	//背景モード、カラーの設定
+	COLORREF DefaultBackColor,CaretBackColor;
+	DefaultBackColor=tci.rgbBackground;
+
+	RECT ClientRect;
+	hEdit=GetWindow(MdiInfo[WndNum].hwnd,GW_CHILD);
+	GetClientRect(hEdit,&ClientRect);
+
+	//エディタ画面左端のコントロールタブ
+	int iControlTabSpace;
+	int iLineNumberTextCount;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+	iLineNumberTextCount=MdiInfo[WndNum].pmti->iLineNumberTextCount;
+
+	//一ページ中に表示できる行数を取得
+	int OnePage_CharHeight;
+	OnePage_CharHeight=(ClientRect.bottom/font_height)+1;
+
+	//描画用クラス
+	CDrawReserve obj_dr(
+		WndNum,
+		hdc,
+		ClientRect.right-ClientRect.left,ClientRect.bottom-ClientRect.top,
+		iControlTabSpace,
+		OnePage_CharHeight,
+		iLineNumberTextCount);
+
+
+	//テキストバッファをコード内で参照しやすいようにポインタ変数を利用する
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	//選択範囲を取得
+	CHARRANGE CharRange;
+	TextEdit_GetSel(WndNum,&CharRange);
+
+	//ベース描画ポジションを取得(文字単位)
+	BaseX=0;
+	BaseY=0;
+	GetScrollBaseCaretPos(WndNum,&BaseX,&BaseY);
+
+	if(pobj_nv->bEditor_CaretLine_BackGround){
+		//カーソル行の色を変える
+		CaretBackColor=tci.rgbCursorBack;
+	}
+	else{
+		//カーソル行の色を変えない
+		CaretBackColor=tci.rgbBackground;
+	}
+	HBRUSH hCaretBackBrush;
+	hCaretBackBrush=CreateSolidBrush(CaretBackColor);
+
+	BOOL IsStr=0;
+	DWORD dwComment=0;
+	BOOL bMultiLineComment;
+	COLORREF NextColor,NextBackColor;
+	int MaxX=0;
+	x=BaseX;
+	y=BaseY;
+	CharX=0;	//左端から何文字目かを示す
+	int bHyperLinkUnderBar=0;	//ハイパーリンク用下線の表示スイッチ
+	for(i=0;;i++){
+		if(pBuf[i]=='\0'){
+			if(0<=y&&y<=OnePage_CharHeight){
+				if(MdiInfo[WndNum].pmti->StartCaretPos.y==y-BaseY){
+					////////////////////////////////////
+					// カーソル行では余白を塗りつぶす
+					////////////////////////////////////
+
+					HBRUSH hTempBrush;
+					hTempBrush=(HBRUSH)SelectObject(obj_dr.memdc,hCaretBackBrush);
+
+					//終端コードよりも右側はブラシで塗りつぶす
+					PatBlt(obj_dr.memdc,
+						x*font_width     +iControlTabSpace,
+						y*font_height,
+						ClientRect.right-(x*font_width     +iControlTabSpace),
+						font_height,
+						PATCOPY);
+
+					//カーソル行
+					SelectObject(obj_dr.memdc,hTempBrush);
+				}
+
+				//行番号が末端行にも表示されるようにするために描画予約を行う
+				obj_dr.DrawReserve(
+					x,
+					y,
+					NULL,
+					NULL,
+					bHyperLinkUnderBar,
+					"",0);
+			}
+
+			if(MaxX<CharX) MaxX=CharX;
+
+			break;
+		}
+
+		if(IsRightTurn(pBuf,i,x)){
+			/////////////////
+			// 自動折り返し
+			/////////////////
+
+			if(MdiInfo[WndNum].pmti->StartCaretPos.y==y-BaseY){
+				///////////////////////////////////////////////////////////
+				//改行コードよりも右側は白いブラシで塗りつぶす（カーソル行用）
+				///////////////////////////////////////////////////////////
+
+				HBRUSH hTempBrush;
+
+				//カーソル行
+				hTempBrush=(HBRUSH)SelectObject(obj_dr.memdc,hCaretBackBrush);
+
+				PatBlt(obj_dr.memdc,
+					x*font_width     +iControlTabSpace,
+					y*font_height,
+					ClientRect.right-(x*font_width     +iControlTabSpace),
+					font_height,
+					PATCOPY);
+
+				//カーソル行
+				SelectObject(obj_dr.memdc,hTempBrush);
+			}
+
+			y++;
+
+			x=BaseX;
+			CharX=0;
+			i--;
+			continue;
+		}
+
+		if(MdiInfo[WndNum].DocType==WNDTYPE_BASIC){
+
+			if(pBuf[i]=='\"'&&dwComment==0) IsStr^=1;
+
+			//複数行に渡るコメントを考慮
+			if(pBuf[i]=='/'&&pBuf[i+1]=='*'&&IsStr==0&&dwComment==0){
+				dwComment=12;
+				bMultiLineComment=1;
+			}
+			if(pBuf[i]=='*'&&pBuf[i+1]=='/'&&
+				dwComment==10&&bMultiLineComment){
+				dwComment=3;
+			}
+
+			//単行コメント
+			if(pBuf[i]=='\''&&dwComment==0&&IsStr==0){
+				dwComment=10;
+				bMultiLineComment=0;
+			}
+
+			if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+				//単行コメント中での改行は、コメントを解除
+				if(dwComment&&bMultiLineComment==0){
+					IsStr=0;
+					dwComment=0;
+				}
+			}
+			if(dwComment!=0&&dwComment!=10) dwComment--;
+		}
+		if(MdiInfo[WndNum].DocType==WNDTYPE_HTML){
+			//複数行に渡るコメントを考慮
+			if(pBuf[i]=='<'&&pBuf[i+1]=='!'&&pBuf[i+2]=='-'&&pBuf[i+3]=='-'&&IsStr==0&&dwComment==0){
+				dwComment=10;
+			}
+			if(pBuf[i]=='-'&&pBuf[i+1]=='-'&&pBuf[i+2]=='>'&&
+				dwComment){
+				dwComment=4;
+			}
+			if(dwComment!=0&&dwComment!=10) dwComment--;
+		}
+
+		//ハイパーリンク用下線
+		if(MdiInfo[WndNum].pmti->iUnderStart<=i&&i<MdiInfo[WndNum].pmti->iUnderEnd)
+			bHyperLinkUnderBar=1;
+		else bHyperLinkUnderBar=0;
+
+		if(0<=y&&y<=OnePage_CharHeight){
+			//////////////////////////////////
+			// 表示中ページでは文字単位で描画
+			//////////////////////////////////
+			//※i2に描画する文字数を格納する
+
+			NextBackColor=DefaultBackColor;
+			if(dwComment){
+				//複数行に渡るコメント
+				NextColor=tci.rgbComment;
+			}
+			else{
+				//通常カラー
+				NextColor=MdiInfo[WndNum].pmti->pColorRef[i];
+			}
+
+			if(CharRange.cpMin<=i&&i<CharRange.cpMax){
+				//選択されているバッファは反転表示する
+				NextColor=NextColor^0x00FFFFFF;
+				NextBackColor=NextBackColor^0x00FFFFFF;
+			}
+			else{
+				if(MdiInfo[WndNum].pmti->StartCaretPos.y==y-BaseY){
+					//カーソル行
+					NextBackColor=CaretBackColor;
+				}
+			}
+
+			if(IsDBCSLeadByte(pBuf[i])){
+				//マルチバイト文字
+				i2=2;
+				obj_dr.DrawReserve(
+					x,
+					y,
+					NextColor,
+					NextBackColor,
+					bHyperLinkUnderBar,
+					pBuf+i,i2);
+
+				i++;
+			}
+			else if(pBuf[i]=='\t'){
+				//タブ文字
+				int tab;
+				tab=pobj_nv->TabSize;
+
+				if((x-BaseX)%tab==0) i2=tab;
+				else i2=tab-(x-BaseX)%tab;
+				memset(temporary,' ',i2);
+				temporary[i2]=0;
+
+				obj_dr.DrawReserve(
+					x,
+					y,
+					NextColor,
+					NextBackColor,
+					bHyperLinkUnderBar,
+					temporary,i2);
+			}
+			else if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+				//改行文字は1スペースだけ空白を描画しておく（反転表示をするため）
+				i2=1;
+				temporary[0]=' ';
+				temporary[1]=0;
+				obj_dr.DrawReserve(
+					x,
+					y,
+					NextColor,
+					NextBackColor,
+					bHyperLinkUnderBar,
+					temporary,i2);
+
+
+				if(MdiInfo[WndNum].pmti->StartCaretPos.y==y-BaseY){
+					///////////////////////////////////////////////////////////
+					//改行コードよりも右側は白いブラシで塗りつぶす（カーソル行用）
+					///////////////////////////////////////////////////////////
+
+					HBRUSH hTempBrush;
+
+					//カーソル行
+					hTempBrush=(HBRUSH)SelectObject(obj_dr.memdc,hCaretBackBrush);
+
+					PatBlt(obj_dr.memdc,
+						(x+i2)*font_width     +iControlTabSpace,
+						y*font_height,
+						ClientRect.right-((x+i2)*font_width     +iControlTabSpace),
+						font_height,
+						PATCOPY);
+
+					//カーソル行
+					SelectObject(obj_dr.memdc,hTempBrush);
+				}
+			}
+			else{
+				//通常のキャラ文字
+				i2=1;
+				obj_dr.DrawReserve(
+					x,
+					y,
+					NextColor,
+					NextBackColor,
+					bHyperLinkUnderBar,
+					pBuf+i,i2);
+			}
+		}
+		else{
+			////////////////////////////////////////
+			// 非表示ページでは文字数の計算だけ行う
+			////////////////////////////////////////
+			//※i2に描画する文字数を格納する
+
+			if(IsDBCSLeadByte(pBuf[i])){
+				//マルチバイト文字
+				i2=2;
+				i++;
+			}
+			else if(pBuf[i]=='\t'){
+				//タブ文字
+				int tab;
+				tab=pobj_nv->TabSize;
+
+				if((x-BaseX)%tab==0) i2=tab;
+				else i2=tab-(x-BaseX)%tab;
+			}
+			else{
+				//通常のキャラ文字（改行文字を含む）
+				i2=1;
+			}
+		}
+
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+			y++;
+
+			if(MaxX<CharX) MaxX=CharX;
+
+			x=BaseX;
+			CharX=0;
+
+			i++;
+		}
+		else{
+			x+=i2;
+			CharX+=i2;
+		}
+	}
+
+	obj_dr.finish(BaseY);
+
+	DeleteObject(hCaretBackBrush);
+
+
+	//////////////////////////////////
+	// スクロールバーの範囲をセット
+	//////////////////////////////////
+
+	if(pobj_nv->bRightTurn){
+		MaxX=0;
+	}
+
+	ResetScrollbar(WndNum,MaxX,(-BaseY)+y);
+}
Index: /ProjectEditor/DrawWindow.cpp
===================================================================
--- /ProjectEditor/DrawWindow.cpp	(revision 3)
+++ /ProjectEditor/DrawWindow.cpp	(revision 3)
@@ -0,0 +1,1767 @@
+#include "Common.h"
+
+void DrawLineInClient(int WndNum,long StartX,long StartY,long EndX,long EndY){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	MoveToEx(MdiInfo[WndNum].MdiRadInfo->hMemDC,
+		StartX+MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+		StartY+MdiInfo[WndNum].MdiRadInfo->ClientPos.y,
+		NULL);
+	LineTo(MdiInfo[WndNum].MdiRadInfo->hMemDC,
+		EndX+MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+		EndY+MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
+}
+void DrawRectangleInClient(int WndNum,long left,long top,long right,long bottom,COLORREF RGB_Pen,COLORREF RGB_Brush,BOOL bBrushing){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HPEN hPen,hOldPen;
+	HBRUSH hBrush,hOldBrush;
+
+	hPen=CreatePen(PS_SOLID,0,RGB_Pen);
+	if(bBrushing) hBrush=CreateSolidBrush(RGB_Brush);
+	else hBrush=(HBRUSH)GetStockObject(NULL_BRUSH);
+	hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+	hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hBrush);
+
+	Rectangle(MdiInfo[WndNum].MdiRadInfo->hMemDC,
+		left+MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+		top+MdiInfo[WndNum].MdiRadInfo->ClientPos.y,
+		right+MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+		bottom+MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
+
+	SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+	SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldBrush);
+	DeleteObject(hPen);
+	if(bBrushing) DeleteObject(hBrush);
+}
+void DrawButtonEdge(int WndNum,POINT *pPos,SIZE *pSize){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HPEN hPen,hOldPen;
+
+	//光源方向の縁
+	hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+	hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+	DrawLineInClient(WndNum,
+		pPos->x, pPos->y,
+		pPos->x+pSize->cx-1, pPos->y);
+	DrawLineInClient(WndNum,
+		pPos->x, pPos->y,
+		pPos->x, pPos->y+pSize->cy-1);
+	SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+	DeleteObject(hPen);
+
+	//影側の縁
+	hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DDKSHADOW));
+	hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+	DrawLineInClient(WndNum,
+		pPos->x, pPos->y+pSize->cy-1,
+		pPos->x+pSize->cx, pPos->y+pSize->cy-1);
+	DrawLineInClient(WndNum,
+		pPos->x+pSize->cx-1, pPos->y,
+		pPos->x+pSize->cx-1, pPos->y+pSize->cy-1);
+	SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+	DeleteObject(hPen);
+
+	hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW));
+	hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+	DrawLineInClient(WndNum,
+		pPos->x+1, pPos->y+pSize->cy-2,
+		pPos->x+pSize->cx-1, pPos->y+pSize->cy-2);
+	DrawLineInClient(WndNum,
+		pPos->x+pSize->cx-2, pPos->y+1,
+		pPos->x+pSize->cx-2, pPos->y+pSize->cy-2);
+	SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+	DeleteObject(hPen);
+
+	//内部
+	DrawRectangleInClient(WndNum,
+		pPos->x+1,pPos->y+1,
+		pPos->x+pSize->cx-2,pPos->y+pSize->cy-2,
+		GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+	pPos->x+=3;
+	pPos->y+=2;
+	pSize->cx-=5;
+	pSize->cy-=4;
+}
+void DrawItemEdgeByExStyle(int WndNum,int ExStyle,POINT *pPos,SIZE *pSize){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HPEN hPen,hOldPen;
+	RECT rect;
+
+	if(ExStyle&WS_EX_DLGMODALFRAME){
+		///////////////////////////
+		//モーダル フレーム境界線
+
+		rect.left=pPos->x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+		rect.top=pPos->y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+		rect.right=pPos->x+pSize->cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+		rect.bottom=pPos->y+pSize->cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+		DrawEdge(MdiInfo[WndNum].MdiRadInfo->hMemDC,&rect,EDGE_RAISED,BF_RECT);
+		pPos->x+=2;
+		pPos->y+=2;
+		pSize->cx-=4;
+		pSize->cy-=4;
+
+		//細枠
+		DrawRectangleInClient(WndNum,
+			pPos->x,pPos->y,
+			pPos->x+pSize->cx,pPos->y+pSize->cy,
+			GetSysColor(COLOR_ACTIVEBORDER),0,0);
+
+		pPos->x+=1;
+		pPos->y+=1;
+		pSize->cx-=2;
+		pSize->cy-=2;
+	}
+	else if(ExStyle&WS_EX_STATICEDGE){
+		//////////////////////
+		//スタティック境界線
+
+		//影側の色
+		hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW));
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		DrawLineInClient(WndNum,
+			pPos->x,
+			pPos->y,
+			pPos->x,
+			pPos->y+pSize->cy-1);
+		DrawLineInClient(WndNum,
+			pPos->x,
+			pPos->y,
+			pPos->x+pSize->cx-1,
+			pPos->y);
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+
+		//光源方向の縁
+		hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		DrawLineInClient(WndNum,
+			pPos->x,
+			pPos->y+pSize->cy-1,
+			pPos->x+pSize->cx-1,
+			pPos->y+pSize->cy-1);
+		DrawLineInClient(WndNum,
+			pPos->x+pSize->cx-1,
+			pPos->y,
+			pPos->x+pSize->cx-1,
+			pPos->y+pSize->cy);
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+
+		pPos->x+=1;
+		pPos->y+=1;
+		pSize->cx-=2;
+		pSize->cy-=2;
+	}
+	if(ExStyle&WS_EX_CLIENTEDGE){
+		//////////////////////
+		//クライアント境界線
+
+		rect.left=pPos->x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+		rect.top=pPos->y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+		rect.right=pPos->x+pSize->cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+		rect.bottom=pPos->y+pSize->cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+		DrawEdge(MdiInfo[WndNum].MdiRadInfo->hMemDC,&rect,EDGE_SUNKEN,BF_RECT);
+		pPos->x+=2;
+		pPos->y+=2;
+		pSize->cx-=4;
+		pSize->cy-=4;
+	}
+}
+void DrawScrollBar(int WndNum,DWORD style,BOOL bSwitch,POINT *pPos,SIZE *pSize){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	HPEN hPen,hOldPen;
+	COLORREF rgb;
+	POINT pos;
+	SIZE size;
+
+	if(bSwitch==0){
+		//水平スクロールバー
+
+		//左ボタン
+		if(pSize->cx>16*2){
+			pos=*pPos;
+			size.cx=16;
+			size.cy=pSize->cy;
+		}
+		else{
+			pos=*pPos;
+			size.cx=pSize->cx/2;
+			size.cy=pSize->cy;
+		}
+		DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+		//内部
+		DrawRectangleInClient(WndNum,
+			pos.x,pos.y,
+			pos.x+size.cx,pos.y+size.cy,
+			GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+		if(style&WS_DISABLED){
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+			hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+			pos.x++;
+			pos.y++;
+			i2=pos.y+(size.cy/2);
+			for(i=0;i<4;i++,i2--){
+				DrawLineInClient(WndNum,i+pos.x+2,i2,i+pos.x+2,i2+(i*2)+1);
+			}
+			SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+			DeleteObject(hPen);
+			rgb=GetSysColor(COLOR_GRAYTEXT);
+			pos.x--;
+			pos.y--;
+		}
+		else rgb=GetSysColor(COLOR_BTNTEXT);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		i2=pos.y+(size.cy/2);
+		for(i=0;i<4;i++,i2--){
+			DrawLineInClient(WndNum,i+pos.x+2,i2,i+pos.x+2,i2+(i*2)+1);
+		}
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+
+		//右ボタン
+		if(pSize->cx>16*2){
+			pos.x=pPos->x+pSize->cx-16;
+			pos.y=pPos->y;
+			size.cx=16;
+			size.cy=pSize->cy;
+		}
+		else{
+			pos.x=pPos->x+pSize->cx/2+pSize->cx%2;
+			pos.y=pPos->y;
+			size.cx=pSize->cx/2;
+			size.cy=pSize->cy;
+		}
+		DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+		//内部
+		DrawRectangleInClient(WndNum,
+			pos.x,pos.y,
+			pos.x+size.cx,pos.y+size.cy,
+			GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+		if(style&WS_DISABLED){
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+			hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+			pos.x++;
+			pos.y++;
+			i2=pos.y+(size.cy/2);
+			for(i=3;i>=0;i--,i2--){
+				DrawLineInClient(WndNum,i+pos.x+3,i2,i+pos.x+3,i2+((3-i)*2)+1);
+			}
+			SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+			DeleteObject(hPen);
+			rgb=GetSysColor(COLOR_GRAYTEXT);
+			pos.x--;
+			pos.y--;
+		}
+		else rgb=GetSysColor(COLOR_BTNTEXT);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		i2=pos.y+(size.cy/2);
+		for(i=3;i>=0;i--,i2--){
+			DrawLineInClient(WndNum,i+pos.x+3,i2,i+pos.x+3,i2+((3-i)*2)+1);
+		}
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+
+		if(pSize->cx>16*3){
+			if(!(style&WS_DISABLED)){
+				pos.x=pPos->x+16;
+				pos.y=pPos->y;
+				size.cx=16;
+				size.cy=pSize->cy;
+				DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+				//内部
+				DrawRectangleInClient(WndNum,
+					pos.x,pos.y,
+					pos.x+size.cx,pos.y+size.cy,
+					GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+				pos.x=pPos->x+16*2;
+				pos.y=pPos->y;
+				size.cx=pSize->cx-16*3;
+				size.cy=pSize->cy;
+			}
+			else{
+				pos.x=pPos->x+16;
+				pos.y=pPos->y;
+				size.cx=pSize->cx-16*2;
+				size.cy=pSize->cy;
+			}
+		}
+		else if(pSize->cx>16*2){
+			pos.x=pPos->x+16;
+			pos.y=pPos->y;
+			size.cx=pSize->cx-16*2;
+			size.cy=pSize->cy;
+		}
+		else{
+			pos.x=pPos->x+pSize->cx/2;
+			pos.y=pPos->y;
+			size.cx=pSize->cx%2;
+			size.cy=pSize->cy;
+		}
+	}
+	else{
+		//垂直スクロールバー
+
+		//上ボタン
+		if(pSize->cy>16*2){
+			pos=*pPos;
+			size.cy=16;
+			size.cx=pSize->cx;
+		}
+		else{
+			pos=*pPos;
+			size.cy=pSize->cy/2;
+			size.cx=pSize->cx;
+		}
+		DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+		//内部
+		DrawRectangleInClient(WndNum,
+			pos.x,pos.y,
+			pos.x+size.cx,pos.y+size.cy,
+			GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+		pos.y++;
+		if(style&WS_DISABLED){
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+			hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+			pos.x++;
+			pos.y++;
+			i2=pos.x+(size.cx/2)-1;
+			for(i=0;i<4;i++,i2--){
+				DrawLineInClient(WndNum,i2,i+pos.y+2,i2+(i*2)+1,i+pos.y+2);
+			}
+			SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+			DeleteObject(hPen);
+			rgb=GetSysColor(COLOR_GRAYTEXT);
+			pos.x--;
+			pos.y--;
+		}
+		else rgb=GetSysColor(COLOR_BTNTEXT);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		i2=pos.x+(size.cx/2)-1;
+		for(i=0;i<4;i++,i2--){
+			DrawLineInClient(WndNum,i2,i+pos.y+2,i2+(i*2)+1,i+pos.y+2);
+		}
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+
+		//下ボタン
+		if(pSize->cy>16*2){
+			pos.x=pPos->x;
+			pos.y=pPos->y+pSize->cy-16;
+			size.cx=pSize->cx;
+			size.cy=16;
+		}
+		else{
+			pos.x=pPos->x;
+			pos.y=pPos->y+pSize->cy/2+pSize->cy%2;
+			size.cx=pSize->cx;
+			size.cy=pSize->cy/2;
+		}
+		DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+		//内部
+		DrawRectangleInClient(WndNum,
+			pos.x,pos.y,
+			pos.x+size.cx,pos.y+size.cy,
+			GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+		pos.x--;
+		if(style&WS_DISABLED){
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+			hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+			pos.x++;
+			pos.y++;
+			i2=pos.x+(size.cx/2);
+			for(i=3;i>=0;i--,i2--){
+				DrawLineInClient(WndNum,i2,i+pos.y+3,i2+((3-i)*2)+1,i+pos.y+3);
+			}
+			SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+			DeleteObject(hPen);
+			rgb=GetSysColor(COLOR_GRAYTEXT);
+			pos.x--;
+			pos.y--;
+		}
+		else rgb=GetSysColor(COLOR_BTNTEXT);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		i2=pos.x+(size.cx/2);
+		for(i=3;i>=0;i--,i2--){
+			DrawLineInClient(WndNum,i2,i+pos.y+3,i2+((3-i)*2)+1,i+pos.y+3);
+		}
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+
+		if(pSize->cy>16*3){
+			if(!(style&WS_DISABLED)){
+				pos.x=pPos->x;
+				pos.y=pPos->y+16;
+				size.cx=pSize->cx;
+				size.cy=16;
+				DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+				//内部
+				DrawRectangleInClient(WndNum,
+					pos.x,pos.y,
+					pos.x+size.cx,pos.y+size.cy,
+					GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+				pos.x=pPos->x;
+				pos.y=pPos->y+16*2;
+				size.cx=pSize->cx;
+				size.cy=pSize->cy-16*3;
+			}
+			else{
+				pos.x=pPos->x;
+				pos.y=pPos->y+16;
+				size.cx=pSize->cx;
+				size.cy=pSize->cy-16*2;
+			}
+		}
+		else if(pSize->cy>16*2){
+			pos.x=pPos->x;
+			pos.y=pPos->y+16;
+			size.cx=pSize->cx;
+			size.cy=pSize->cy-16*2;
+		}
+		else{
+			pos.x=pPos->x;
+			pos.y=pPos->y+pSize->cy/2;
+			size.cx=pSize->cx;
+			size.cy=pSize->cy%2;
+		}
+	}
+
+	if(size.cx){
+		int x,y;
+		HBITMAP hBitmap;
+		BITMAPINFO BitmapInfo;
+		BYTE *pByte;
+
+		memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
+		BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+		BitmapInfo.bmiHeader.biWidth=size.cx;
+		BitmapInfo.bmiHeader.biHeight=size.cy;
+		BitmapInfo.bmiHeader.biPlanes=1;
+		BitmapInfo.bmiHeader.biBitCount=24;
+
+		hBitmap=CreateDIBSection(MdiInfo[WndNum].MdiRadInfo->hMemDC,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0);
+		i=BitmapInfo.bmiHeader.biWidth*3;
+		if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
+		for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
+			if(y%2==0) rgb=GetSysColor(COLOR_3DFACE);
+			else rgb=RGB(255,255,255);
+			for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
+				i2=y*i+x*3;
+				pByte[i2+2]=LOBYTE(LOWORD(rgb));
+				pByte[i2+1]=HIBYTE(LOWORD(rgb));
+				pByte[i2]=LOBYTE(HIWORD(rgb));
+				if(rgb==RGB(255,255,255)) rgb=GetSysColor(COLOR_3DFACE);
+				else rgb=RGB(255,255,255);
+			}
+		}
+		SetDIBitsToDevice(MdiInfo[WndNum].MdiRadInfo->hMemDC,
+			pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+			pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y,
+			BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight,
+			0,0,
+			0,BitmapInfo.bmiHeader.biHeight,
+			pByte,
+			&BitmapInfo,
+			DIB_RGB_COLORS);
+		DeleteObject(hBitmap);
+	}
+}
+void DrawUpDownControl(int WndNum,DWORD style,BOOL bSwitch,POINT *pPos,SIZE *pSize){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	HPEN hPen,hOldPen;
+	COLORREF rgb;
+	POINT pos;
+	SIZE size;
+
+	if(bSwitch==0){
+		//水平
+
+		//左ボタン
+		pos=*pPos;
+		size.cx=pSize->cx/2;
+		size.cy=pSize->cy;
+		DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+		//内部
+		DrawRectangleInClient(WndNum,
+			pos.x,pos.y,
+			pos.x+size.cx,pos.y+size.cy,
+			GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+		if(style&WS_DISABLED){
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+			hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+			pos.x++;
+			pos.y++;
+			i2=pos.y+(size.cy/2);
+			for(i=0;i<4;i++,i2--){
+				DrawLineInClient(WndNum,i+pos.x+2,i2,i+pos.x+2,i2+(i*2)+1);
+			}
+			SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+			DeleteObject(hPen);
+			rgb=GetSysColor(COLOR_GRAYTEXT);
+			pos.x--;
+			pos.y--;
+		}
+		else rgb=GetSysColor(COLOR_BTNTEXT);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		i2=pos.y+(size.cy/2);
+		for(i=0;i<4;i++,i2--){
+			DrawLineInClient(WndNum,i+pos.x+2,i2,i+pos.x+2,i2+(i*2)+1);
+		}
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+
+		//右ボタン
+		pos.x=pPos->x+pSize->cx/2+pSize->cx%2;
+		pos.y=pPos->y;
+		size.cx=pSize->cx/2;
+		size.cy=pSize->cy;
+		DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+		//内部
+		DrawRectangleInClient(WndNum,
+			pos.x,pos.y,
+			pos.x+size.cx,pos.y+size.cy,
+			GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+		if(style&WS_DISABLED){
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+			hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+			pos.x++;
+			pos.y++;
+			i2=pos.y+(size.cy/2);
+			for(i=3;i>=0;i--,i2--){
+				DrawLineInClient(WndNum,i+pos.x+3,i2,i+pos.x+3,i2+((3-i)*2)+1);
+			}
+			SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+			DeleteObject(hPen);
+			rgb=GetSysColor(COLOR_GRAYTEXT);
+			pos.x--;
+			pos.y--;
+		}
+		else rgb=GetSysColor(COLOR_BTNTEXT);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		i2=pos.y+(size.cy/2);
+		for(i=3;i>=0;i--,i2--){
+			DrawLineInClient(WndNum,i+pos.x+3,i2,i+pos.x+3,i2+((3-i)*2)+1);
+		}
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+	}
+	else{
+		//垂直
+
+		//上ボタン
+		pos=*pPos;
+		size.cy=pSize->cy/2;
+		size.cx=pSize->cx;
+		DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+		//内部
+		DrawRectangleInClient(WndNum,
+			pos.x,pos.y,
+			pos.x+size.cx,pos.y+size.cy,
+			GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+		pos.y++;
+		if(style&WS_DISABLED){
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+			hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+			pos.x++;
+			pos.y++;
+			i2=pos.x+(size.cx/2)-1;
+			for(i=0;i<4;i++,i2--){
+				DrawLineInClient(WndNum,i2,i+pos.y+2,i2+(i*2)+1,i+pos.y+2);
+			}
+			SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+			DeleteObject(hPen);
+			rgb=GetSysColor(COLOR_GRAYTEXT);
+			pos.x--;
+			pos.y--;
+		}
+		else rgb=GetSysColor(COLOR_BTNTEXT);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		i2=pos.x+(size.cx/2)-1;
+		for(i=0;i<4;i++,i2--){
+			DrawLineInClient(WndNum,i2,i+pos.y+2,i2+(i*2)+1,i+pos.y+2);
+		}
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+
+		//下ボタン
+		pos.x=pPos->x;
+		pos.y=pPos->y+pSize->cy/2+pSize->cy%2;
+		size.cx=pSize->cx;
+		size.cy=pSize->cy/2;
+		DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos,&size);
+
+		//内部
+		DrawRectangleInClient(WndNum,
+			pos.x,pos.y,
+			pos.x+size.cx,pos.y+size.cy,
+			GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+		pos.x--;
+		if(style&WS_DISABLED){
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+			hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+			pos.x++;
+			pos.y++;
+			i2=pos.x+(size.cx/2);
+			for(i=3;i>=0;i--,i2--){
+				DrawLineInClient(WndNum,i2,i+pos.y+3,i2+((3-i)*2)+1,i+pos.y+3);
+			}
+			SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+			DeleteObject(hPen);
+			rgb=GetSysColor(COLOR_GRAYTEXT);
+			pos.x--;
+			pos.y--;
+		}
+		else rgb=GetSysColor(COLOR_BTNTEXT);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hPen);
+		i2=pos.x+(size.cx/2);
+		for(i=3;i>=0;i--,i2--){
+			DrawLineInClient(WndNum,i2,i+pos.y+3,i2+((3-i)*2)+1,i+pos.y+3);
+		}
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldPen);
+		DeleteObject(hPen);
+	}
+}
+void DrawWindowScrollBar(int WndNum,DWORD style,POINT *pPos,SIZE *pSize){
+	POINT pos;
+	SIZE size;
+	if(style&WS_HSCROLL){
+		pos.x=pPos->x;
+		pos.y=pPos->y+pSize->cy-GetSystemMetrics(SM_CYVSCROLL);
+		if(style&WS_VSCROLL) size.cx=pSize->cx-GetSystemMetrics(SM_CXVSCROLL);
+		else size.cx=pSize->cx;
+		size.cy=GetSystemMetrics(SM_CYVSCROLL);
+		DrawScrollBar(WndNum,style,0,&pos,&size);
+	}
+	if(style&WS_VSCROLL){
+		pos.x=pPos->x+pSize->cx-GetSystemMetrics(SM_CXHSCROLL);
+		pos.y=pPos->y;
+		size.cx=GetSystemMetrics(SM_CXHSCROLL);
+		if(style&WS_HSCROLL) size.cy=pSize->cy-GetSystemMetrics(SM_CYHSCROLL);
+		else size.cy=pSize->cy;
+		DrawScrollBar(WndNum,style,1,&pos,&size);
+	}
+}
+void DrawOEMImage(HDC hdc,POINT *pPos,SIZE *pSize,DWORD dwImage){
+	HBITMAP hBmp,hOldBmp;
+	HDC memdc;
+
+	//未完成（XPのみに対応？）
+
+	memdc=CreateCompatibleDC(hdc);
+	hBmp=LoadBitmap(NULL,(LPSTR)dwImage);
+	hOldBmp=(HBITMAP)SelectObject(memdc,hBmp);
+	BitBlt(hdc,pPos->x,pPos->y,pSize->cx,pSize->cy,memdc,0,0,SRCCOPY);
+	SelectObject(memdc,hOldBmp);
+	DeleteDC(memdc);
+	DeleteObject(hBmp);
+}
+void DesigningWindow(int WndNum,HDC hdc,POINT *pBasePos,WINDOW_INFO *pWindowInfo){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,i4;
+	double red,green,blue,d_red,d_green,d_blue;
+	char temporary[MAX_PATH];
+	COLORREF rgb;
+	HPEN hPen,hOldPen;
+	HBRUSH hBrush,hOldBrush;
+	HFONT hFont,hOldFont;
+	HANDLE hImage;
+	RECT InsideRect,rect,rc2;
+	POINT pos,pos2;
+	SIZE size,size2;
+
+	HGLOBAL hResource;
+	BITMAPINFO *pBitmapInfo;
+	BYTE *pByte,*pByte2;
+
+
+	////////////////////////
+	//ウィンドウの縁を描画
+	InsideRect.left=pBasePos->x;
+	InsideRect.top=pBasePos->y;
+	InsideRect.right=InsideRect.left+pWindowInfo->size.cx;
+	InsideRect.bottom=InsideRect.top+pWindowInfo->size.cy;
+
+	if(pWindowInfo->style&(WS_BORDER|WS_THICKFRAME)){
+		DrawEdge(hdc,&InsideRect,EDGE_RAISED,BF_RECT);
+
+		InsideRect.left+=2;
+		InsideRect.top+=2;
+		InsideRect.right-=2;
+		InsideRect.bottom-=2;
+	}
+
+
+	////////////
+	//枠を描画
+	if(pWindowInfo->style&(WS_BORDER|WS_THICKFRAME)){
+		//細枠
+		hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_ACTIVEBORDER));
+		hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
+		hOldPen=(HPEN)SelectObject(hdc,hPen);
+		hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+		Rectangle(hdc,InsideRect.left,InsideRect.top,InsideRect.right,InsideRect.bottom);
+
+		InsideRect.left+=1;
+		InsideRect.top+=1;
+		InsideRect.right-=1;
+		InsideRect.bottom-=1;
+
+		//サイズ変更枠
+		if(pWindowInfo->style&WS_THICKFRAME){
+			Rectangle(hdc,InsideRect.left,InsideRect.top,InsideRect.right,InsideRect.bottom);
+
+			InsideRect.left+=1;
+			InsideRect.top+=1;
+			InsideRect.right-=1;
+			InsideRect.bottom-=1;
+		}
+		SelectObject(hdc,hOldPen);
+		SelectObject(hdc,hOldBrush);
+		DeleteObject(hPen);
+		DeleteObject(hBrush);
+	}
+
+
+	//Draw...InClient関数のため
+	MdiInfo[WndNum].MdiRadInfo->ClientPos.x=0;
+	MdiInfo[WndNum].MdiRadInfo->ClientPos.y=0;
+
+	if(pWindowInfo->style&(WS_CAPTION&(~WS_BORDER))){
+		//////////////////////
+		//タイトルバーを描画
+
+		//背景を描画（グラデーション可）
+		i=GetSysColor(COLOR_ACTIVECAPTION);
+		OSVERSIONINFO OsVersionInfo;
+		OsVersionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
+		GetVersionEx(&OsVersionInfo);
+		if((OsVersionInfo.dwPlatformId==VER_PLATFORM_WIN32_NT&&OsVersionInfo.dwMajorVersion>=5)||
+			(OsVersionInfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS&&LOWORD(OsVersionInfo.dwBuildNumber)>=1998)){
+#define COLOR_GRADIENTACTIVECAPTION 27
+			i2=GetSysColor(COLOR_GRADIENTACTIVECAPTION);
+		}
+		else i2=i;
+		if(pWindowInfo->ExStyle&WS_EX_TOOLWINDOW)
+			i3=GetSystemMetrics(SM_CYSMCAPTION);
+		else i3=GetSystemMetrics(SM_CYCAPTION);
+		d_red=((double)((i2&0xFF)-(i&0xFF)))/(double)(InsideRect.right-InsideRect.left);
+		d_green=((double)(((i2>>8)&0xFF))-((i>>8)&0xFF))/(double)(InsideRect.right-InsideRect.left);
+		d_blue=((double)(((i2>>16)&0xFF))-((i>>16)&0xFF))/(double)(InsideRect.right-InsideRect.left);
+
+		red=(double)(i&0xFF);
+		green=(double)((i>>8)&0xFF);
+		blue=(double)((i>>16)&0xFF);
+		for(i4=InsideRect.left;i4<InsideRect.right;i4++){
+			hPen=CreatePen(PS_SOLID,0,RGB((_int8)red,(_int8)green,(_int8)blue));
+			hOldPen=(HPEN)SelectObject(hdc,hPen);
+			MoveToEx(hdc,i4,InsideRect.top,NULL);
+			LineTo(hdc,i4,InsideRect.top+i3-1);
+			SelectObject(hdc,hOldPen);
+			DeleteObject(hPen);
+			red+=d_red;
+			green+=d_green;
+			blue+=d_blue;
+		}
+
+		//タイトルテキストの描画
+		LOGFONT LogFont;
+		SystemParametersInfo(SPI_GETICONTITLELOGFONT,sizeof(LOGFONT),&LogFont,0);
+		hFont=CreateFontIndirect(&LogFont);
+		hOldFont=(HFONT)SelectObject(hdc,hFont);
+		SetTextColor(hdc,GetSysColor(COLOR_CAPTIONTEXT));
+		rect.left=InsideRect.left+20;
+		rect.top=InsideRect.top;
+		rect.right=InsideRect.right;
+		rect.bottom=InsideRect.top+i3;
+		DrawText(hdc,pWindowInfo->caption,lstrlen(pWindowInfo->caption),&rect,DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX);
+		SelectObject(hdc,hOldFont);
+		DeleteObject(hFont);
+
+		//ボタン
+		if(pWindowInfo->style&WS_SYSMENU){
+			//終了ボタン
+			size.cx=GetSystemMetrics(SM_CXSIZE)-2;
+			size.cy=GetSystemMetrics(SM_CYSIZE)-4;
+			pos.x=InsideRect.right-2-size.cx;
+			pos.y=InsideRect.top+2;
+			DrawButtonEdge(WndNum,&pos,&size);
+
+			hResource=LoadResource(hResInst,FindResource(hResInst,MAKEINTRESOURCE(IDB_TITLE_BUTTON_CLOSE),RT_BITMAP));
+			pBitmapInfo=(BITMAPINFO *)LockResource(hResource);
+			pByte=(BYTE *)pBitmapInfo+pBitmapInfo->bmiHeader.biSize;
+
+			i2=pBitmapInfo->bmiHeader.biWidth*3;
+			if(i2%sizeof(LONG)!=0) i2+=sizeof(LONG)-(i2%sizeof(LONG));
+			pByte2=(BYTE *)GlobalAlloc(GMEM_FIXED,pBitmapInfo->bmiHeader.biHeight*i2);
+			int x,y;
+			for(y=0;y<pBitmapInfo->bmiHeader.biHeight;y++){
+				if(y%2==0) rgb=GetSysColor(COLOR_3DFACE);
+				else rgb=RGB(255,255,255);
+				for(x=0;x<pBitmapInfo->bmiHeader.biWidth;x++){
+					i4=y*i2+x*3;
+					rgb=RGB(pByte[i4+2],pByte[i4+1],pByte[i4]);
+					if(rgb==RGB(0,0,0)){
+						rgb=GetSysColor(COLOR_BTNTEXT);
+						pByte2[i4+2]=LOBYTE(LOWORD(rgb));
+						pByte2[i4+1]=HIBYTE(LOWORD(rgb));
+						pByte2[i4]=LOBYTE(HIWORD(rgb));
+					}
+					else if(rgb==RGB(255,255,255)){
+						rgb=GetSysColor(COLOR_3DFACE);
+						pByte2[i4+2]=LOBYTE(LOWORD(rgb));
+						pByte2[i4+1]=HIBYTE(LOWORD(rgb));
+						pByte2[i4]=LOBYTE(HIWORD(rgb));
+					}
+				}
+			}
+			SetStretchBltMode(hdc,COLORONCOLOR);
+			StretchDIBits(hdc,
+				pos.x+(int)((double)size.cx*0.17), pos.y+(int)((double)size.cy*0.17),
+				(int)((double)size.cx*0.65)+1, (int)((double)size.cy*0.65)+1,
+				0,0,
+				pBitmapInfo->bmiHeader.biWidth,pBitmapInfo->bmiHeader.biHeight,
+				pByte2,
+				pBitmapInfo,
+				DIB_RGB_COLORS,SRCCOPY);
+			GlobalFree(pByte2);
+
+			if(pWindowInfo->style&WS_MAXIMIZEBOX||pWindowInfo->style&WS_MINIMIZEBOX){
+				//最大化ボタン
+				size.cx=GetSystemMetrics(SM_CXSIZE)-2;
+				size.cy=GetSystemMetrics(SM_CYSIZE)-4;
+				pos.x=InsideRect.right-size.cx*2-4;
+				pos.y=InsideRect.top+2;
+				DrawButtonEdge(WndNum,&pos,&size);
+				if(!(pWindowInfo->style&WS_MAXIMIZEBOX)){
+					pos.x++;
+					pos.y++;
+					hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+					hOldPen=(HPEN)SelectObject(hdc,hPen);
+					hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
+					Rectangle(hdc,pos.x,pos.y,pos.x+size.cx-2,pos.y+size.cy-1);
+					MoveToEx(hdc,pos.x,pos.y+1,NULL);
+					LineTo(hdc,pos.x+size.cx-2,pos.y+1);
+					SelectObject(hdc,hOldPen);
+					SelectObject(hdc,hOldBrush);
+					DeleteObject(hPen);
+					pos.x--;
+					pos.y--;
+					rgb=GetSysColor(COLOR_GRAYTEXT);
+				}
+				else rgb=GetSysColor(COLOR_BTNTEXT);
+				hPen=CreatePen(PS_SOLID,0,rgb);
+				hOldPen=(HPEN)SelectObject(hdc,hPen);
+				hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
+				Rectangle(hdc,pos.x,pos.y,pos.x+size.cx-2,pos.y+size.cy-1);
+				MoveToEx(hdc,pos.x,pos.y+1,NULL);
+				LineTo(hdc,pos.x+size.cx-2,pos.y+1);
+				SelectObject(hdc,hOldPen);
+				SelectObject(hdc,hOldBrush);
+				DeleteObject(hPen);
+
+				//最小化ボタン
+				size.cx=GetSystemMetrics(SM_CXSIZE)-2;
+				size.cy=GetSystemMetrics(SM_CYSIZE)-4;
+				pos.x=InsideRect.right-size.cx*3-4;
+				pos.y=InsideRect.top+2;
+				DrawButtonEdge(WndNum,&pos,&size);
+				if(!(pWindowInfo->style&WS_MINIMIZEBOX)){
+					pos.x++;
+					pos.y++;
+					hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+					hOldPen=(HPEN)SelectObject(hdc,hPen);
+					MoveToEx(hdc,pos.x+1,pos.y+size.cy-2,NULL);
+					LineTo(hdc,pos.x+size.cy-3,pos.y+size.cy-2);
+					MoveToEx(hdc,pos.x+1,pos.y+size.cy-3,NULL);
+					LineTo(hdc,pos.x+size.cy-3,pos.y+size.cy-3);
+					SelectObject(hdc,hOldPen);
+					DeleteObject(hPen);
+					pos.x--;
+					pos.y--;
+					rgb=GetSysColor(COLOR_GRAYTEXT);
+				}
+				else rgb=GetSysColor(COLOR_BTNTEXT);
+				hPen=CreatePen(PS_SOLID,0,rgb);
+				hOldPen=(HPEN)SelectObject(hdc,hPen);
+				MoveToEx(hdc,pos.x+1,pos.y+size.cy-2,NULL);
+				LineTo(hdc,pos.x+size.cy-3,pos.y+size.cy-2);
+				MoveToEx(hdc,pos.x+1,pos.y+size.cy-3,NULL);
+				LineTo(hdc,pos.x+size.cy-3,pos.y+size.cy-3);
+				SelectObject(hdc,hOldPen);
+				DeleteObject(hPen);
+			}
+		}
+
+		InsideRect.top+=i3;
+	}
+
+	if(pWindowInfo->MenuID){
+		//メニューラインを3DFACEで描画
+		rgb=GetSysColor(COLOR_3DFACE);
+		i=GetSystemMetrics(SM_CYMENU);
+		hPen=CreatePen(PS_SOLID,0,rgb);
+		hBrush=CreateSolidBrush(rgb);
+		hOldPen=(HPEN)SelectObject(hdc,hPen);
+		hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+		Rectangle(hdc,
+			InsideRect.left,InsideRect.top-1,InsideRect.right,InsideRect.top+i);
+		SelectObject(hdc,hOldPen);
+		SelectObject(hdc,hOldBrush);
+		DeleteObject(hPen);
+		DeleteObject(hBrush);
+
+		InsideRect.top+=i;
+	}
+
+	//クライアント左上ポジションを設定
+	MdiInfo[WndNum].MdiRadInfo->ClientPos.x=InsideRect.left;
+	MdiInfo[WndNum].MdiRadInfo->ClientPos.y=InsideRect.top;
+
+	//ExStyleによる縁を描画
+	pos.x=0;
+	pos.y=0;
+	size.cx=InsideRect.right-InsideRect.left;
+	size.cy=InsideRect.bottom-InsideRect.top;
+	DrawItemEdgeByExStyle(WndNum,pWindowInfo->ExStyle,&pos,&size);
+
+	//スクロールバーを描画
+	DrawWindowScrollBar(WndNum,pWindowInfo->style,&pos,&size);
+
+	//クライアント領域のサイズを設定
+	MdiInfo[WndNum].MdiRadInfo->ClientSize=size;
+
+
+	//////////////
+	//背景を描画
+	if(pWindowInfo->bgColor==COLOR_3DFACE){
+		//3DFACE
+		hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DFACE));
+		hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
+		hOldPen=(HPEN)SelectObject(hdc,hPen);
+		hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+		Rectangle(hdc,InsideRect.left,InsideRect.top,InsideRect.right,InsideRect.bottom);
+		SelectObject(hdc,hOldPen);
+		SelectObject(hdc,hOldBrush);
+		DeleteObject(hPen);
+		DeleteObject(hBrush);
+	}
+	else if(pWindowInfo->bgColor<=0){
+		//色指定
+		hPen=CreatePen(PS_SOLID,0,-pWindowInfo->bgColor);
+		hBrush=CreateSolidBrush(-pWindowInfo->bgColor);
+		hOldPen=(HPEN)SelectObject(hdc,hPen);
+		hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+		Rectangle(hdc,InsideRect.left,InsideRect.top,InsideRect.right,InsideRect.bottom);
+		SelectObject(hdc,hOldPen);
+		SelectObject(hdc,hOldBrush);
+		DeleteObject(hPen);
+		DeleteObject(hBrush);
+	}
+	else if(pWindowInfo->bgColor>=0x1000){
+		//ビットマップ
+		for(i2=0;i2<ProjectInfo.res.NumberOfBitmapRes;i2++){
+			if(lstrcmp(ProjectInfo.res.pBitmapResInfo[pWindowInfo->bgColor-0x1000].IdName,
+				ProjectInfo.res.pBitmapResInfo[i2].IdName)==0) break;
+		}
+		if(i2!=ProjectInfo.res.NumberOfBitmapRes){
+			lstrcpy(temporary,ProjectInfo.res.pBitmapResInfo[i2].path);
+			GetFullPath(temporary,ProjectInfo.dir);
+			hImage=LoadImage(NULL,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
+
+			hBrush=CreatePatternBrush((HBITMAP)hImage);
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+			SetBrushOrgEx(hdc,InsideRect.left,InsideRect.top,&pos);
+			PatBlt(hdc,
+				InsideRect.left, InsideRect.top,
+				InsideRect.right-InsideRect.left, InsideRect.bottom-InsideRect.top,PATCOPY);
+			SetBrushOrgEx(hdc,pos.x,pos.y,0);
+			SelectObject(hdc,hOldBrush);
+			DeleteObject(hBrush);
+			DeleteObject(hImage);
+		}
+	}
+
+
+	////////////////////////////////////////////
+	//子ウィンドウ（ダイアログアイテム）を描画
+	hFont=CreateFontIndirect(&pWindowInfo->LogFont);
+	for(i=0;i<pWindowInfo->NumberOfChildWindows;i++){
+		pos=pWindowInfo->pChildInfo[i].pos;
+		size=pWindowInfo->pChildInfo[i].size;
+
+		//ExStyleによる縁を描画
+		DrawItemEdgeByExStyle(WndNum,pWindowInfo->pChildInfo[i].ExStyle,&pos,&size);
+
+		if(pWindowInfo->pChildInfo[i].Control==CT_BUTTON){
+			////////////////////////
+			// Button コントロール
+
+			if((pWindowInfo->pChildInfo[i].style&0x0000000F)==BS_DEFPUSHBUTTON){
+				//標準のボタンの場合（黒枠描画）
+				DrawRectangleInClient(WndNum,
+					pos.x, pos.y,
+					pos.x+size.cx, pos.y+size.cy,
+					RGB(0,0,0),0,0);
+				pos.x++;
+				pos.y++;
+				size.cx-=2;
+				size.cy-=2;
+			}
+
+			//ボタンの縁を描画
+			DrawButtonEdge(WndNum,&pos,&size);
+
+			if(!(pWindowInfo->pChildInfo[i].style&(BS_ICON|BS_BITMAP))){
+				//キャプション テキスト
+
+				rect.left=pos.x+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.top=pos.y+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+				rect.right=pos.x+size.cx-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.bottom=pos.y+size.cy-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+
+				if(pWindowInfo->pChildInfo[i].style&BS_MULTILINE) i4=0;
+				else i4=DT_SINGLELINE;
+
+				//ビットを考慮してBS_CENTERを最初に比較する
+				if((pWindowInfo->pChildInfo[i].style&BS_CENTER)==BS_CENTER) i2=DT_CENTER;
+				else if(pWindowInfo->pChildInfo[i].style&BS_LEFT) i2=DT_LEFT;
+				else if(pWindowInfo->pChildInfo[i].style&BS_RIGHT) i2=DT_RIGHT;
+				else i2=DT_CENTER;
+
+				//ビットを考慮してBS_VCENTERを最初に比較する
+				if((pWindowInfo->pChildInfo[i].style&BS_VCENTER)==BS_VCENTER) i3=DT_VCENTER;
+				else if(pWindowInfo->pChildInfo[i].style&BS_TOP) i3=DT_TOP;
+				else if(pWindowInfo->pChildInfo[i].style&BS_BOTTOM) i3=DT_BOTTOM;
+				else i3=DT_VCENTER;
+
+				hOldFont=(HFONT)SelectObject(hdc,hFont);
+				if(pWindowInfo->pChildInfo[i].style&WS_DISABLED){
+					SetTextColor(hdc,RGB(255,255,255));
+					rc2.left=rect.left+1;
+					rc2.top=rect.top+1;
+					rc2.right=rect.right+1;
+					rc2.bottom=rect.bottom+1;
+					DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rc2,i4|i2|i3);
+					SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT));
+				}
+				else SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
+
+				DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rect,i4|i2|i3);
+				SelectObject(hdc,hOldFont);
+			}
+		}
+		else if(pWindowInfo->pChildInfo[i].Control==CT_CHECKBOX){
+			//////////////////////////
+			// CheckBox コントロール
+
+			if(pWindowInfo->pChildInfo[i].style&BS_PUSHLIKE){
+				//ボタンの縁を描画
+				DrawButtonEdge(WndNum,&pos,&size);
+			}
+			else{
+				//チェックボックスを描画
+				size2.cx=13;
+				size2.cy=13;
+				if(pWindowInfo->pChildInfo[i].style&BS_LEFTTEXT)
+					pos2.x=pos.x+size.cx-size2.cx;
+				else pos2.x=pos.x;
+				if((pWindowInfo->pChildInfo[i].style&BS_VCENTER)==BS_VCENTER||
+					(pWindowInfo->pChildInfo[i].style&BS_VCENTER)==0)
+					pos2.y=pos.y+(size.cy/2)-(size2.cy/2);
+				else if(pWindowInfo->pChildInfo[i].style&BS_TOP)
+					pos2.y=pos.y+1;
+				else if(pWindowInfo->pChildInfo[i].style&BS_BOTTOM)
+					pos2.y=pos.y+size.cy-size2.cy-1;
+				DrawItemEdgeByExStyle(WndNum,WS_EX_CLIENTEDGE,&pos2,&size2);
+
+				if(pWindowInfo->pChildInfo[i].style&WS_DISABLED)
+					rgb=GetSysColor(COLOR_3DFACE);
+				else rgb=GetSysColor(COLOR_WINDOW);
+				DrawRectangleInClient(WndNum,pos2.x, pos2.y,
+					pos2.x+size2.cx, pos2.y+size2.cy,
+					rgb,rgb,1);
+				if(!(pWindowInfo->pChildInfo[i].style&BS_LEFTTEXT)) pos.x+=17;
+				else pos.x++;
+				size.cx-=17;
+			}
+
+			if(!(pWindowInfo->pChildInfo[i].style&(BS_ICON|BS_BITMAP))){
+				//キャプション テキスト
+				rect.left=pos.x+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.top=pos.y+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+				rect.right=pos.x+size.cx-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.bottom=pos.y+size.cy-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+
+				if(pWindowInfo->pChildInfo[i].style&BS_MULTILINE) i4=0;
+				else i4=DT_SINGLELINE;
+
+				//ビットを考慮してBS_CENTERを最初に比較する
+				if((pWindowInfo->pChildInfo[i].style&BS_CENTER)==BS_CENTER) i2=DT_CENTER;
+				else if(pWindowInfo->pChildInfo[i].style&BS_LEFT) i2=DT_LEFT;
+				else if(pWindowInfo->pChildInfo[i].style&BS_RIGHT) i2=DT_RIGHT;
+				else i2=DT_LEFT;
+
+				//ビットを考慮してBS_VCENTERを最初に比較する
+				if((pWindowInfo->pChildInfo[i].style&BS_VCENTER)==BS_VCENTER) i3=DT_VCENTER;
+				else if(pWindowInfo->pChildInfo[i].style&BS_TOP) i3=DT_TOP;
+				else if(pWindowInfo->pChildInfo[i].style&BS_BOTTOM) i3=DT_BOTTOM;
+				else i3=DT_VCENTER;
+
+				hOldFont=(HFONT)SelectObject(hdc,hFont);
+				if(pWindowInfo->pChildInfo[i].style&WS_DISABLED){
+					SetTextColor(hdc,RGB(255,255,255));
+					rc2.left=rect.left+1;
+					rc2.top=rect.top+1;
+					rc2.right=rect.right+1;
+					rc2.bottom=rect.bottom+1;
+					DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rc2,i4|i2|i3);
+					SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT));
+				}
+				else SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
+
+				DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rect,i4|i2|i3);
+				SelectObject(hdc,hOldFont);
+			}
+		}
+		else if(pWindowInfo->pChildInfo[i].Control==CT_COMBOBOX){
+			//////////////////////////
+			// ComboBox コントロール
+
+			pos2=pos;
+			size2.cx=size.cx;
+			size2.cy=20;
+			DrawItemEdgeByExStyle(WndNum,WS_EX_CLIENTEDGE,&pos2,&size2);
+
+			//内部
+			if(pWindowInfo->pChildInfo[i].style&WS_DISABLED)
+				rgb=GetSysColor(COLOR_3DFACE);
+			else rgb=GetSysColor(COLOR_WINDOW);
+			DrawRectangleInClient(WndNum,
+				pos2.x,pos2.y,
+				pos2.x+size2.cx,pos2.y+size2.cy,
+				rgb,rgb,1);
+
+			if((pWindowInfo->pChildInfo[i].style&0x000F)==CBS_SIMPLE){
+				pos.y+=20;
+				size.cy-=20;
+				DrawItemEdgeByExStyle(WndNum,WS_EX_CLIENTEDGE,&pos,&size);
+
+				//内部
+				rgb=GetSysColor(COLOR_WINDOW);
+				DrawRectangleInClient(WndNum,
+					pos.x,pos.y,
+					pos.x+size.cx,pos.y+size.cy,
+					rgb,rgb,1);
+			}
+			else{
+				//下ボタン
+				pos2.x+=size2.cx-16;
+				size2.cx=16;
+				size2.cy=16;
+				DrawItemEdgeByExStyle(WndNum,WS_EX_DLGMODALFRAME,&pos2,&size2);
+
+				//内部
+				DrawRectangleInClient(WndNum,
+					pos2.x,pos2.y,
+					pos2.x+size2.cx,pos2.y+size2.cy,
+					GetSysColor(COLOR_3DFACE),GetSysColor(COLOR_3DFACE),1);
+
+				pos2.x--;
+				if(pWindowInfo->pChildInfo[i].style&WS_DISABLED){
+					hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DHIGHLIGHT));
+					hOldPen=(HPEN)SelectObject(hdc,hPen);
+					pos2.x++;
+					pos2.y++;
+					i3=pos2.x+(size2.cx/2);
+					for(i2=3;i2>=0;i2--,i3--){
+						DrawLineInClient(WndNum,i3,i2+pos2.y+3,i3+((3-i2)*2)+1,i2+pos2.y+3);
+					}
+					SelectObject(hdc,hOldPen);
+					DeleteObject(hPen);
+					rgb=GetSysColor(COLOR_GRAYTEXT);
+					pos2.x--;
+					pos2.y--;
+				}
+				else rgb=GetSysColor(COLOR_BTNTEXT);
+				hPen=CreatePen(PS_SOLID,0,rgb);
+				hOldPen=(HPEN)SelectObject(hdc,hPen);
+				i3=pos2.x+(size2.cx/2);
+				for(i2=3;i2>=0;i2--,i3--){
+					DrawLineInClient(WndNum,i3,i2+pos2.y+3,i3+((3-i2)*2)+1,i2+pos2.y+3);
+				}
+				SelectObject(hdc,hOldPen);
+				DeleteObject(hPen);
+			}
+		}
+		else if(pWindowInfo->pChildInfo[i].Control==CT_EDIT){
+			//////////////////////
+			// Edit コントロール
+
+			//内部
+			if(pWindowInfo->pChildInfo[i].style&WS_DISABLED||pWindowInfo->pChildInfo[i].style&ES_READONLY)
+				rgb=GetSysColor(COLOR_3DFACE);
+			else rgb=GetSysColor(COLOR_WINDOW);
+			DrawRectangleInClient(WndNum,
+				pos.x,pos.y,
+				pos.x+size.cx,pos.y+size.cy,
+				rgb,rgb,1);
+
+			//キャプション テキスト
+			rect.left=pos.x+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+			rect.top=pos.y+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+			rect.right=pos.x+size.cx-1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+			rect.bottom=pos.y+size.cy-1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+
+			if(pWindowInfo->pChildInfo[i].style&ES_MULTILINE) i4=0;
+			else i4=DT_SINGLELINE;
+
+			//ビットを考慮してES_LEFTを最後に検討する
+			if(pWindowInfo->pChildInfo[i].style&ES_CENTER) i2=DT_CENTER;
+			else if(pWindowInfo->pChildInfo[i].style&ES_RIGHT) i2=DT_RIGHT;
+			else i2=DT_LEFT;
+
+			//文字色を設定
+			if(pWindowInfo->pChildInfo[i].style&WS_DISABLED)
+				SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT));
+			else
+				SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT));
+
+			hOldFont=(HFONT)SelectObject(hdc,hFont);
+			DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rect,i4|i2);
+			SelectObject(hdc,hOldFont);
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_GROUPBOX){
+			///////////////////////////////////
+			// グループ ボックス コントロール
+
+			hOldFont=(HFONT)SelectObject(hdc,hFont);
+			GetTextExtentPoint32(hdc,pWindowInfo->pChildInfo[i].caption,lstrlen(pWindowInfo->pChildInfo[i].caption),&size2);
+
+			//枠を描画
+			rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+			rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y+(size2.cy/2);
+			rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+			rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+			DrawEdge(hdc,&rect,EDGE_ETCHED,BF_RECT);
+
+			//ビットを考慮してBS_CENTERを最初に検討する
+			if((pWindowInfo->pChildInfo[i].style&BS_CENTER)==BS_CENTER){
+				rect.left=pos.x+(size.cx/2)-(size2.cx/2)-3;
+				rect.right=rect.left+size2.cx+4;
+			}
+			else if(pWindowInfo->pChildInfo[i].style&BS_RIGHT){
+				rect.right=pos.x+size.cx-7;
+				rect.left=rect.right-size2.cx-4;
+			}
+			else{
+				rect.left=pos.x+7;
+				rect.right=rect.left+size2.cx+4;
+			}
+			rect.top=pos.y;
+			rect.bottom=pos.y+size2.cy;
+
+			if(pWindowInfo->bgColor==COLOR_3DFACE) rgb=GetSysColor(COLOR_3DFACE);
+			else rgb=-pWindowInfo->bgColor;
+			DrawRectangleInClient(WndNum,rect.left,rect.top,rect.right,rect.bottom,rgb,rgb,1);
+
+			if(!((pWindowInfo->pChildInfo[i].style&BS_ICON)||(pWindowInfo->pChildInfo[i].style&BS_BITMAP))){
+				rect.left+=MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.top+=MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+				rect.right+=MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.bottom+=MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+				rect.left+=2;
+				rect.right-=2;
+
+				//テキストを描画
+				if(pWindowInfo->pChildInfo[i].style&WS_DISABLED){
+					SetTextColor(hdc,RGB(255,255,255));
+					rc2.left=rect.left+1;
+					rc2.top=rect.top+1;
+					rc2.right=rect.right+1;
+					rc2.bottom=rect.bottom+1;
+					DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rc2,DT_SINGLELINE);
+					SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT));
+				}
+				else
+					SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
+
+				DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rect,DT_SINGLELINE);
+			}
+			SelectObject(hdc,hOldFont);
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_HSCROLLBAR){
+			////////////////////////////////////
+			// 水平スクロールバー コントロール
+			DrawScrollBar(WndNum,pWindowInfo->pChildInfo[i].style,0,&pos,&size);
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_IMAGEBOX){
+			/////////////////////
+			// イメージ ボックス
+			HDC memdc;
+
+			if((pWindowInfo->pChildInfo[i].style&0x0000000F)==SS_BLACKFRAME)
+				DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(0,0,0),0,0);
+			else if((pWindowInfo->pChildInfo[i].style&0x0000000F)==SS_GRAYFRAME)
+				DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,GetSysColor(COLOR_3DSHADOW),0,0);
+			else if((pWindowInfo->pChildInfo[i].style&0x0000000F)==SS_WHITEFRAME)
+				DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(255,255,255),0,0);
+			else if((pWindowInfo->pChildInfo[i].style&0x0000001F)==SS_ETCHEDFRAME){
+				rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+				rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+				DrawEdge(hdc,&rect,EDGE_ETCHED,BF_RECT);
+			}
+			else if((pWindowInfo->pChildInfo[i].style&0x0000000F)==SS_BLACKRECT)
+				DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,GetSysColor(COLOR_3DDKSHADOW),GetSysColor(COLOR_3DDKSHADOW),1);
+			else if((pWindowInfo->pChildInfo[i].style&0x0000000F)==SS_GRAYRECT)
+				DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,GetSysColor(COLOR_3DSHADOW),GetSysColor(COLOR_3DSHADOW),1);
+			else if((pWindowInfo->pChildInfo[i].style&0x0000000F)==SS_WHITERECT)
+				DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(255,255,255),RGB(255,255,255),1);
+			else if((pWindowInfo->pChildInfo[i].style&0x0000000F)==SS_ICON){
+				if(pWindowInfo->pChildInfo[i].ImageCtrlInfo.type==IMGTYPE_FILE)
+					lstrcpy(temporary,pWindowInfo->pChildInfo[i].ImageCtrlInfo.path);
+				else{
+					for(i2=0;i2<ProjectInfo.res.NumberOfIconRes;i2++){
+						if(lstrcmp(pWindowInfo->pChildInfo[i].ImageCtrlInfo.path,
+							ProjectInfo.res.pIconResInfo[i2].IdName)==0) break;
+					}
+					if(i2==ProjectInfo.res.NumberOfIconRes) goto NonIconImage;
+
+					lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i2].path);
+				}
+				GetFullPath(temporary,ProjectInfo.dir);
+				hImage=LoadImage(NULL,temporary,IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
+				if(hImage){
+					pWindowInfo->pChildInfo[i].size.cx=32+(pWindowInfo->pChildInfo[i].size.cx-size.cx);
+					pWindowInfo->pChildInfo[i].size.cy=32+(pWindowInfo->pChildInfo[i].size.cy-size.cy);
+					pos=pWindowInfo->pChildInfo[i].pos;
+					size=pWindowInfo->pChildInfo[i].size;
+
+					//ExStyleによる縁を再描画
+					DrawItemEdgeByExStyle(WndNum,pWindowInfo->pChildInfo[i].ExStyle,&pos,&size);
+
+					DrawIcon(hdc,
+						pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+						pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y,
+						(HICON)hImage);
+					DestroyIcon((HICON)hImage);
+				}
+				else{
+NonIconImage:
+					DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(0,0,0),0,0);
+					hOldFont=(HFONT)SelectObject(hdc,hFont);
+					rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+					rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+					rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+					rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+					SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT));
+					DrawText(hdc,"icon...",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
+					SelectObject(hdc,hOldFont);
+				}
+			}
+			else if((pWindowInfo->pChildInfo[i].style&0x0000000F)==SS_BITMAP){
+				BITMAP Bitmap;
+
+				if(pWindowInfo->pChildInfo[i].ImageCtrlInfo.type==IMGTYPE_FILE)
+					lstrcpy(temporary,pWindowInfo->pChildInfo[i].ImageCtrlInfo.path);
+				else{
+					for(i2=0;i2<ProjectInfo.res.NumberOfBitmapRes;i2++){
+						if(lstrcmp(pWindowInfo->pChildInfo[i].ImageCtrlInfo.path,
+							ProjectInfo.res.pBitmapResInfo[i2].IdName)==0) break;
+					}
+					if(i2==ProjectInfo.res.NumberOfBitmapRes) goto NonBitmapImage;
+
+					lstrcpy(temporary,ProjectInfo.res.pBitmapResInfo[i2].path);
+				}
+				GetFullPath(temporary,ProjectInfo.dir);
+				hImage=LoadImage(NULL,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
+				if(hImage){
+					GetObject(hImage,sizeof(BITMAP),&Bitmap);
+
+					pWindowInfo->pChildInfo[i].size.cx=Bitmap.bmWidth+(pWindowInfo->pChildInfo[i].size.cx-size.cx);
+					pWindowInfo->pChildInfo[i].size.cy=Bitmap.bmHeight+(pWindowInfo->pChildInfo[i].size.cy-size.cy);
+					pos=pWindowInfo->pChildInfo[i].pos;
+					size=pWindowInfo->pChildInfo[i].size;
+
+					//ExStyleによる縁を再描画
+					DrawItemEdgeByExStyle(WndNum,pWindowInfo->pChildInfo[i].ExStyle,&pos,&size);
+
+					memdc=CreateCompatibleDC(hdc);
+					SelectObject(memdc,hImage);
+					BitBlt(hdc,
+						pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+						pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y,
+						size.cx, size.cy,
+						memdc, 0,0,
+						SRCCOPY);
+					DeleteDC(memdc);
+					DeleteObject(hImage);
+				}
+				else{
+NonBitmapImage:
+					DrawRectangleInClient(WndNum,pos.x,pos.y,pos.x+size.cx,pos.y+size.cy,RGB(0,0,0),0,0);
+					hOldFont=(HFONT)SelectObject(hdc,hFont);
+					rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+					rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+					rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+					rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+					SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT));
+					DrawText(hdc,"bmp...",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
+					SelectObject(hdc,hOldFont);
+				}
+			}
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_LISTBOX){
+			/////////////////////////
+			// ListBox コントロール
+
+			//内部
+			if(pWindowInfo->pChildInfo[i].style&WS_DISABLED)
+				rgb=GetSysColor(COLOR_3DFACE);
+			else rgb=GetSysColor(COLOR_WINDOW);
+			DrawRectangleInClient(WndNum,
+				pos.x,pos.y,
+				pos.x+size.cx,pos.y+size.cy,
+				rgb,rgb,1);
+
+			if(pWindowInfo->pChildInfo[i].style&LBS_DISABLENOSCROLL)
+				DrawWindowScrollBar(WndNum,pWindowInfo->pChildInfo[i].style|WS_DISABLED,&pos,&size);
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_LISTVIEW){
+			//////////////////////////
+			// ListView コントロール
+
+			//内部
+			if(pWindowInfo->pChildInfo[i].style&WS_DISABLED)
+				rgb=GetSysColor(COLOR_3DFACE);
+			else rgb=GetSysColor(COLOR_WINDOW);
+			DrawRectangleInClient(WndNum,
+				pos.x,pos.y,
+				pos.x+size.cx,pos.y+size.cy,
+				rgb,rgb,1);
+
+			if((pWindowInfo->pChildInfo[i].style&LVS_REPORT)&&
+				(!((pWindowInfo->pChildInfo[i].style&LVS_LIST)==LVS_LIST))){
+				//レポート ビュー
+				size.cy=16;
+				DrawButtonEdge(WndNum,&pos,&size);
+			}
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_PROGRESSBAR){
+			/////////////////////////////
+			// ProgressBar コントロール
+
+			//内部
+			pos.x++;
+			pos.y++;
+			size.cx-=2;
+			size.cy-=2;
+			rgb=GetSysColor(COLOR_ACTIVECAPTION);
+			if(pWindowInfo->pChildInfo[i].style&PBS_SMOOTH){
+				if(pWindowInfo->pChildInfo[i].style&PBS_VERTICAL){
+					pos.y+=(long)((double)size.cy*0.3);
+					DrawRectangleInClient(WndNum,
+						pos.x,pos.y,
+						pos.x+size.cx,pos.y+(long)((double)size.cy*0.7),
+						rgb,rgb,1);
+				}
+				else{
+					DrawRectangleInClient(WndNum,
+						pos.x,pos.y,
+						pos.x+(long)((double)size.cx*0.7),pos.y+size.cy,
+						rgb,rgb,1);
+				}
+			}
+			else{
+				if(pWindowInfo->pChildInfo[i].style&PBS_VERTICAL){
+					pos.y+=(long)((double)size.cy*0.3);
+					i3=(size.cx*2)/3;
+					i2=(int)((double)size.cy*0.7);
+					for(;i2>i3;i2-=i3+2){
+						DrawRectangleInClient(WndNum,
+							pos.x,pos.y+i2-i3,
+							pos.x+size.cx,pos.y+i2,
+							rgb,rgb,1);
+					}
+				}
+				else{
+					i3=(size.cy*2)/3;
+					i4=(int)((double)size.cx*0.7);
+					for(i2=0;i2+i3<i4;i2+=i3+2){
+						DrawRectangleInClient(WndNum,
+							pos.x+i2,pos.y,
+							pos.x+i2+i3,pos.y+size.cy,
+							rgb,rgb,1);
+					}
+				}
+			}
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_RADIOBUTTON){
+			/////////////////////////////
+			// RadioButton コントロール
+
+			if(pWindowInfo->pChildInfo[i].style&BS_PUSHLIKE){
+				//ボタンの縁を描画
+				DrawButtonEdge(WndNum,&pos,&size);
+			}
+			else{
+				//ラジオボタンを描画
+				size2.cx=12;
+				size2.cy=12;
+				if(pWindowInfo->pChildInfo[i].style&BS_LEFTTEXT)
+					pos2.x=pos.x+size.cx-size2.cx;
+				else pos2.x=pos.x+1;
+				if((pWindowInfo->pChildInfo[i].style&BS_VCENTER)==BS_VCENTER||
+					(pWindowInfo->pChildInfo[i].style&BS_VCENTER)==0)
+					pos2.y=pos.y+(size.cy/2)-(size2.cy/2);
+				else if(pWindowInfo->pChildInfo[i].style&BS_TOP)
+					pos2.y=pos.y+1;
+				else if(pWindowInfo->pChildInfo[i].style&BS_BOTTOM)
+					pos2.y=pos.y+size.cy-size2.cy-1;
+
+				hResource=LoadResource(hResInst,FindResource(hResInst,MAKEINTRESOURCE(IDB_RADIOBUTTON),RT_BITMAP));
+				pBitmapInfo=(BITMAPINFO *)LockResource(hResource);
+				pByte=(BYTE *)pBitmapInfo+pBitmapInfo->bmiHeader.biSize;
+				pByte2=(BYTE *)GlobalAlloc(GMEM_FIXED,pBitmapInfo->bmiHeader.biWidth*pBitmapInfo->bmiHeader.biHeight*3);
+				for(i2=0,i3=0;i2<pBitmapInfo->bmiHeader.biWidth*pBitmapInfo->bmiHeader.biHeight;i2++,i3+=3){
+					rgb=RGB(pByte[i3+2],pByte[i3+1],pByte[i3]);
+
+					if(rgb==RGB(255,255,0)){
+						if(pWindowInfo->bgColor==COLOR_3DFACE) rgb=GetSysColor(COLOR_3DFACE);
+						else rgb=-pWindowInfo->bgColor;
+					}
+
+					//影側
+					else if(rgb==RGB(0,0,0)) rgb=GetSysColor(COLOR_3DSHADOW);
+					else if(rgb==RGB(255,0,0)) rgb=GetSysColor(COLOR_3DDKSHADOW);
+
+					//光源側
+					else if(rgb==RGB(0,0,255)) rgb=GetSysColor(COLOR_3DLIGHT);
+					else if(rgb==RGB(0,255,0)) rgb=GetSysColor(COLOR_3DHIGHLIGHT);
+
+					//内部
+					else if(rgb==RGB(255,255,255)){
+						if(pWindowInfo->pChildInfo[i].style&WS_DISABLED) rgb=GetSysColor(COLOR_3DFACE);
+					}
+
+					pByte2[i3+2]=LOBYTE(LOWORD(rgb));
+					pByte2[i3+1]=HIBYTE(LOWORD(rgb));
+					pByte2[i3]=LOBYTE(HIWORD(rgb));
+				}
+				SetDIBitsToDevice(hdc,
+					pos2.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+					pos2.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y,
+					pBitmapInfo->bmiHeader.biWidth, pBitmapInfo->bmiHeader.biHeight,
+					0,0,
+					0,pBitmapInfo->bmiHeader.biHeight,
+					pByte2,
+					pBitmapInfo,
+					DIB_RGB_COLORS);
+				GlobalFree(pByte2);
+
+				if(!(pWindowInfo->pChildInfo[i].style&BS_LEFTTEXT)) pos.x+=17;
+				else pos.x++;
+				size.cx-=17;
+			}
+
+			if(!(pWindowInfo->pChildInfo[i].style&(BS_ICON|BS_BITMAP))){
+				//キャプション テキスト
+				rect.left=pos.x+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.top=pos.y+1+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+				rect.right=pos.x+size.cx-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+				rect.bottom=pos.y+size.cy-2+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+
+				if(pWindowInfo->pChildInfo[i].style&BS_MULTILINE) i4=0;
+				else i4=DT_SINGLELINE;
+
+				//ビットを考慮してBS_CENTERを最初に比較する
+				if((pWindowInfo->pChildInfo[i].style&BS_CENTER)==BS_CENTER) i2=DT_CENTER;
+				else if(pWindowInfo->pChildInfo[i].style&BS_LEFT) i2=DT_LEFT;
+				else if(pWindowInfo->pChildInfo[i].style&BS_RIGHT) i2=DT_RIGHT;
+				else i2=DT_LEFT;
+
+				//ビットを考慮してBS_VCENTERを最初に比較する
+				if((pWindowInfo->pChildInfo[i].style&BS_VCENTER)==BS_VCENTER) i3=DT_VCENTER;
+				else if(pWindowInfo->pChildInfo[i].style&BS_TOP) i3=DT_TOP;
+				else if(pWindowInfo->pChildInfo[i].style&BS_BOTTOM) i3=DT_BOTTOM;
+				else i3=DT_VCENTER;
+
+				hOldFont=(HFONT)SelectObject(hdc,hFont);
+				if(pWindowInfo->pChildInfo[i].style&WS_DISABLED){
+					SetTextColor(hdc,RGB(255,255,255));
+					rc2.left=rect.left+1;
+					rc2.top=rect.top+1;
+					rc2.right=rect.right+1;
+					rc2.bottom=rect.bottom+1;
+					DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rc2,i4|i2|i3);
+					SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT));
+				}
+				else SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
+
+				DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rect,i4|i2|i3);
+				SelectObject(hdc,hOldFont);
+			}
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_STATIC){
+			////////////////////////
+			// Static コントロール
+
+			//キャプション テキスト
+			rect.left=pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+			rect.top=pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+			rect.right=pos.x+size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+			rect.bottom=pos.y+size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+
+			//ビットを考慮してSS_LEFTを最後に検討する
+			if(pWindowInfo->pChildInfo[i].style&SS_CENTER) i2=DT_CENTER;
+			else if(pWindowInfo->pChildInfo[i].style&SS_RIGHT) i2=DT_RIGHT;
+			else i2=DT_LEFT;
+
+			hOldFont=(HFONT)SelectObject(hdc,hFont);
+			if(pWindowInfo->pChildInfo[i].style&WS_DISABLED){
+				SetTextColor(hdc,RGB(255,255,255));
+				rc2.left=rect.left+1;
+				rc2.top=rect.top+1;
+				rc2.right=rect.right+1;
+				rc2.bottom=rect.bottom+1;
+				DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rc2,i2);
+				SetTextColor(hdc,GetSysColor(COLOR_GRAYTEXT));
+			}
+			else
+				SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
+
+			//折り返すかどうか
+			if(!(pWindowInfo->pChildInfo[i].style&SS_LEFTNOWORDWRAP)){
+				i2|=DT_WORDBREAK;
+			}
+
+			DrawText(hdc,pWindowInfo->pChildInfo[i].caption,-1,&rect,i2);
+			SelectObject(hdc,hOldFont);
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_TRACKBAR){
+			//////////////////////////
+			// TrackBar コントロール
+
+			if(pWindowInfo->pChildInfo[i].style&TBS_VERT){
+				pos.x+=2;
+				size.cx-=2;
+				if(size.cx>21) size.cx=21;
+				pos.y+=8;
+				size.cy-=16;
+
+				rect.left=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pos.x+(size.cx/2)-2;
+				rect.right=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pos.x+(size.cx/2)+2;
+				rect.top=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pos.y;
+				rect.bottom=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pos.y+size.cy;
+				DrawEdge(hdc,&rect,EDGE_SUNKEN,BF_RECT);
+
+				size.cy=size.cx/2;
+				DrawButtonEdge(WndNum,&pos,&size);
+			}
+			else{
+				pos.x+=8;
+				size.cx-=16;
+				pos.y+=2;
+				size.cy-=2;
+				if(size.cy>21) size.cy=21;
+
+				rect.left=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pos.x;
+				rect.right=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+pos.x+size.cx;
+				rect.top=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pos.y+(size.cy/2)-2;
+				rect.bottom=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+pos.y+(size.cy/2)+2;
+				DrawEdge(hdc,&rect,EDGE_SUNKEN,BF_RECT);
+
+				size.cx=size.cy/2;
+				DrawButtonEdge(WndNum,&pos,&size);
+			}
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_TREEVIEW){
+			//////////////////////////
+			// TreeView コントロール
+
+			//内部
+			if(pWindowInfo->pChildInfo[i].style&WS_DISABLED)
+				rgb=GetSysColor(COLOR_3DFACE);
+			else rgb=GetSysColor(COLOR_WINDOW);
+			DrawRectangleInClient(WndNum,
+				pos.x,pos.y,
+				pos.x+size.cx,pos.y+size.cy,
+				rgb,rgb,1);
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_UPDOWN){
+			///////////////////////////////
+			// アップ ダウン コントロール
+			if(pWindowInfo->pChildInfo[i].style&UDS_HORZ)
+				DrawUpDownControl(WndNum,pWindowInfo->pChildInfo[i].style,0,&pos,&size);
+			else DrawUpDownControl(WndNum,pWindowInfo->pChildInfo[i].style,1,&pos,&size);
+		}
+
+		else if(pWindowInfo->pChildInfo[i].Control==CT_VSCROLLBAR){
+			////////////////////////////////////
+			// 垂直スクロールバー コントロール
+			DrawScrollBar(WndNum,pWindowInfo->pChildInfo[i].style,1,&pos,&size);
+		}
+	}
+	DeleteObject(hFont);
+}
+void DrawRadWindow(int WndNum,WINDOW_INFO *pWindowInfo){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HBRUSH hOldBrush;
+	POINT pos;
+
+	SetBkMode(MdiInfo[WndNum].MdiRadInfo->hMemDC,TRANSPARENT);
+
+	hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,GetStockObject(WHITE_BRUSH));
+	PatBlt(MdiInfo[WndNum].MdiRadInfo->hMemDC,0,0,ScreenX*2,ScreenY*2,PATCOPY);
+	SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,hOldBrush);
+
+	pos.x=LEVER_THICK;
+	pos.y=LEVER_THICK;
+	DesigningWindow(WndNum,MdiInfo[WndNum].MdiRadInfo->hMemDC,&pos,pWindowInfo);
+
+	InvalidateRect(MdiInfo[WndNum].MdiRadInfo->hRad,NULL,0);
+}
Index: /ProjectEditor/EndPairCommandComplement.cpp
===================================================================
--- /ProjectEditor/EndPairCommandComplement.cpp	(revision 3)
+++ /ProjectEditor/EndPairCommandComplement.cpp	(revision 3)
@@ -0,0 +1,452 @@
+#include "common.h"
+
+///////////////////////////////////////////////////////////////////
+// ここから、ペアステートメント補完を行うための関数郡
+///////////////////////////////////////////////////////////////////
+
+int GetStartCommandId_FromBuffer(char *buffer){
+	int i;
+	char temporary[VN_SIZE];
+
+	for(i=0;;i++){
+		if(!IsVariableChar(buffer[i])){
+			temporary[i]=0;
+			break;
+		}
+		temporary[i]=buffer[i];
+	}
+
+	if(lstrcmpi(temporary,"If")==0){
+		//If文の場合はブロック形式の有無を判定
+
+		int IsStr=0;
+		for(;;i++){
+			if(buffer[i]=='\"') IsStr^=1;
+			if((buffer[i]=='\''||IsCommandDelimitation(buffer,i))&&IsStr==0){
+				i--;
+				break;
+			}
+		}
+
+		while(buffer[i]==' '||buffer[i]=='\t') i--;
+
+		if(memicmp(buffer+i-3,"Then",4)==0){
+			//ブロック形式のIf
+			return COM_IF;
+		}
+		else{
+			//一行のみのIf
+			return 0;
+		}
+	}
+
+	if(lstrcmpi(temporary,"Virtual")==0||
+		lstrcmpi(temporary,"Override")==0||
+		lstrcmpi(temporary,"Static")==0){
+		if(temporary[0]=='s'||temporary[0]=='S')
+			i=7;
+		else if(temporary[0]=='v'||temporary[0]=='V')
+			i=8;
+		else i=9;
+
+		while(buffer[i]==' '||buffer[i]=='\t') i++;
+
+		int i2;
+		for(i2=0;;i++,i2++){
+			if(!IsVariableChar(buffer[i])){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=buffer[i];
+		}
+
+		if(lstrcmpi(temporary,"Function")==0) return COM_FUNCTION;
+		if(lstrcmpi(temporary,"Sub")==0) return COM_SUB;
+		return 0;
+	}
+
+	if(lstrcmpi(temporary,"Class")==0) return COM_CLASS;
+	if(lstrcmpi(temporary,"Interface")==0) return COM_INTERFACE;
+	if(lstrcmpi(temporary,"Do")==0) return COM_DO;
+	if(lstrcmpi(temporary,"Enum")==0) return COM_ENUM;
+	if(lstrcmpi(temporary,"For")==0) return COM_FOR;
+	if(lstrcmpi(temporary,"Function")==0) return COM_FUNCTION;
+	if(lstrcmpi(temporary,"Select")==0) return COM_SELECT;
+	if(lstrcmpi(temporary,"Sub")==0) return COM_SUB;
+	if(lstrcmpi(temporary,"Type")==0) return COM_TYPE;
+	if(lstrcmpi(temporary,"While")==0) return COM_WHILE;
+	if(lstrcmpi(temporary,"With")==0) return COM_WITH;
+
+	return 0;
+}
+int GetEndCommandId_FromBuffer(char *buffer){
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	for(i=0,i2=0;;i++,i2++){
+		if(!IsVariableChar(buffer[i])){
+			temporary[i2]=0;
+
+			if(lstrcmpi(temporary,"End")==0&&
+				(buffer[i]==' '||buffer[i]=='\t')){
+				while(buffer[i]==' '||buffer[i]=='\t') i++;
+				i--;
+				i2--;
+				continue;
+			}
+
+			break;
+		}
+		temporary[i2]=buffer[i];
+	}
+
+	if(lstrcmpi(temporary,"EndClass")==0) return COM_CLASS;
+	if(lstrcmpi(temporary,"EndInterface")==0) return COM_INTERFACE;
+	if(lstrcmpi(temporary,"Loop")==0) return COM_DO;
+	if(lstrcmpi(temporary,"EndEnum")==0) return COM_ENUM;
+	if(lstrcmpi(temporary,"Next")==0) return COM_FOR;
+	if(lstrcmpi(temporary,"EndFunction")==0) return COM_FUNCTION;
+	if(lstrcmpi(temporary,"EndIf")==0) return COM_IF;
+	if(lstrcmpi(temporary,"EndSelect")==0) return COM_SELECT;
+	if(lstrcmpi(temporary,"EndSub")==0) return COM_SUB;
+	if(lstrcmpi(temporary,"EndType")==0) return COM_TYPE;
+	if(lstrcmpi(temporary,"Wend")==0) return COM_WHILE;
+	if(lstrcmpi(temporary,"EndWith")==0) return COM_WITH;
+
+	return 0;
+}
+void GetNameOfEndCommand(int CmdId,char *buffer){
+	switch(CmdId){
+		case COM_CLASS:
+			lstrcpy(buffer,"End Class");
+			break;
+		case COM_INTERFACE:
+			lstrcpy(buffer,"End Interface");
+			break;
+		case COM_DO:
+			lstrcpy(buffer,"Loop");
+			break;
+		case COM_ENUM:
+			lstrcpy(buffer,"End Enum");
+			break;
+		case COM_FOR:
+			lstrcpy(buffer,"Next");
+			break;
+		case COM_FUNCTION:
+			lstrcpy(buffer,"End Function");
+			break;
+		case COM_IF:
+			lstrcpy(buffer,"End If");
+			break;
+		case COM_SELECT:
+			lstrcpy(buffer,"End Select");
+			break;
+		case COM_SUB:
+			lstrcpy(buffer,"End Sub");
+			break;
+		case COM_TYPE:
+			lstrcpy(buffer,"End Type");
+			break;
+		case COM_WHILE:
+			lstrcpy(buffer,"Wend");
+			break;
+		case COM_WITH:
+			lstrcpy(buffer,"End With");
+			break;
+	}
+}
+BOOL IsIntoStringQuotes(char *buffer,int i){
+	int i2;
+
+	i2=i;
+	while(i2&&buffer[i2]!='\n') i2--;
+	if(i2==-1) i2=0;
+	if(buffer[i2]=='\n') i2++;
+
+	int IsStr=0;
+	for(;i2<i;i2++){
+		if(buffer[i2]=='\"') IsStr^=1;
+	}
+	return IsStr;
+}
+BOOL GetEndPairCommandInfo(char *buffer,int p){
+	int i,i2,i3,CmdId;
+	char epcName[32];
+	char indent[255],LineNum;
+
+	int stack[255];
+	int sp;
+
+	CmdId=0;
+	LineNum=0;
+	sp=-1;
+
+	i=p;
+
+	//入力中の行を除く
+	for(i--;i>=0;i--){
+		i2=IsCommandDelimitation(buffer,i);
+		if(i2) break;
+	}
+
+	while(1){
+
+		//i2に一行前の先頭位置を格納
+		for(i--;i>=0;i--){
+			i2=IsCommandDelimitation(buffer,i);
+			if(i2){
+				if(IsIntoStringQuotes(buffer,i)){
+					//文字列中の場合
+					continue;
+				}
+
+				if(i2==1) i2=i+1;
+				else{
+					i2=i+2;
+					LineNum++;
+
+					if(LineNum>pobj_nv->BackNum_PairStatementComplement){
+						//設定された行数を超えた場合
+						return 0;
+					}
+				}
+
+				break;
+			}
+		}
+		if(i==-1) i2=i+1;
+
+		//インデント文字列をindentにコピー
+		for(i3=0;;i2++,i3++){
+			if(buffer[i2]!='\t'){
+				indent[i3]=0;
+				break;
+			}
+			indent[i3]=buffer[i2];
+		}
+
+		//空白文字を飛び越す
+		while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+
+		//終了コマンドを取得（End Class、End Sub、Next、Wendなど…）
+		i3=GetEndCommandId_FromBuffer(buffer+i2);
+		if(i3){
+			sp++;
+			stack[sp]=i3;
+		}
+
+		//開始コマンドを取得（Class、Sub、For、Whileなど…）
+		i3=GetStartCommandId_FromBuffer(buffer+i2);
+		if(i3){
+			if(sp==-1){
+				CmdId=i3;
+				break;
+			}
+
+			if(stack[sp]!=i3) return 0;
+			sp--;
+		}
+
+		if(i<=0) break;
+	}
+
+	if(!CmdId) return 0;
+
+	extern HANDLE hHeap;
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	if(CmdId==COM_IF){
+		//Else、ElseIf、End Ifをリストに追加
+
+		///////////////////////
+		// 補完情報
+		///////////////////////
+
+		ComplementWndInfo.pMemberInfo=(MEMBERINFO *)HeapAlloc(hHeap,0,sizeof(MEMBERINFO)*2);
+		ComplementWndInfo.MemberNum=2;
+
+		ComplementWndInfo.pMemberInfo[0].pName=(char *)HeapAlloc(hHeap,0,5);
+		lstrcpy(ComplementWndInfo.pMemberInfo[0].pName,"Else");
+		ComplementWndInfo.pMemberInfo[0].dwProc=0;
+		ComplementWndInfo.pMemberInfo[0].dwAccess=ACCESS_PAIRCOMMAND;
+
+		ComplementWndInfo.pMemberInfo[1].pName=(char *)HeapAlloc(hHeap,0,7);
+		lstrcpy(ComplementWndInfo.pMemberInfo[1].pName,"End If");
+		ComplementWndInfo.pMemberInfo[1].dwProc=0;
+		ComplementWndInfo.pMemberInfo[1].dwAccess=ACCESS_PAIRCOMMAND;
+	}
+	else if(CmdId==COM_CLASS){
+		ComplementWndInfo.pMemberInfo=(MEMBERINFO *)HeapAlloc(hHeap,0,sizeof(MEMBERINFO)*4);
+		ComplementWndInfo.MemberNum=4;
+
+		ComplementWndInfo.pMemberInfo[0].pName=(char *)HeapAlloc(hHeap,0,10);
+		lstrcpy(ComplementWndInfo.pMemberInfo[0].pName,"End Class");
+		ComplementWndInfo.pMemberInfo[0].dwProc=0;
+		ComplementWndInfo.pMemberInfo[0].dwAccess=ACCESS_PAIRCOMMAND;
+
+		ComplementWndInfo.pMemberInfo[1].pName=(char *)HeapAlloc(hHeap,0,8);
+		lstrcpy(ComplementWndInfo.pMemberInfo[1].pName,"Private");
+		ComplementWndInfo.pMemberInfo[1].dwProc=0;
+		ComplementWndInfo.pMemberInfo[1].dwAccess=ACCESS_PAIRCOMMAND;
+
+		ComplementWndInfo.pMemberInfo[2].pName=(char *)HeapAlloc(hHeap,0,10);
+		lstrcpy(ComplementWndInfo.pMemberInfo[2].pName,"Protected");
+		ComplementWndInfo.pMemberInfo[2].dwProc=0;
+		ComplementWndInfo.pMemberInfo[2].dwAccess=ACCESS_PAIRCOMMAND;
+
+		ComplementWndInfo.pMemberInfo[3].pName=(char *)HeapAlloc(hHeap,0,7);
+		lstrcpy(ComplementWndInfo.pMemberInfo[3].pName,"Public");
+		ComplementWndInfo.pMemberInfo[3].dwProc=0;
+		ComplementWndInfo.pMemberInfo[3].dwAccess=ACCESS_PAIRCOMMAND;
+	}
+	else if(CmdId==COM_SELECT){
+		ComplementWndInfo.pMemberInfo=(MEMBERINFO *)HeapAlloc(hHeap,0,sizeof(MEMBERINFO)*4);
+		ComplementWndInfo.MemberNum=2;
+
+		ComplementWndInfo.pMemberInfo[0].pName=(char *)HeapAlloc(hHeap,0,10);
+		lstrcpy(ComplementWndInfo.pMemberInfo[0].pName,"End Select");
+		ComplementWndInfo.pMemberInfo[0].dwProc=0;
+		ComplementWndInfo.pMemberInfo[0].dwAccess=ACCESS_PAIRCOMMAND;
+
+		ComplementWndInfo.pMemberInfo[1].pName=(char *)HeapAlloc(hHeap,0,8);
+		lstrcpy(ComplementWndInfo.pMemberInfo[1].pName,"Case");
+		ComplementWndInfo.pMemberInfo[1].dwProc=0;
+		ComplementWndInfo.pMemberInfo[1].dwAccess=ACCESS_PAIRCOMMAND;
+	}
+	else{
+		//その他のコマンド
+
+		//エンドペアステートメントの名前を取得
+		GetNameOfEndCommand(CmdId,epcName);
+
+
+		///////////////////////
+		// 補完情報
+		///////////////////////
+
+		ComplementWndInfo.pMemberInfo=(MEMBERINFO *)HeapAlloc(hHeap,0,sizeof(MEMBERINFO));
+		ComplementWndInfo.MemberNum=1;
+
+		ComplementWndInfo.pMemberInfo[0].pName=(char *)HeapAlloc(hHeap,0,lstrlen(epcName)+1);
+		lstrcpy(ComplementWndInfo.pMemberInfo[0].pName,epcName);
+
+		ComplementWndInfo.pMemberInfo[0].dwProc=0;
+		ComplementWndInfo.pMemberInfo[0].dwAccess=ACCESS_PAIRCOMMAND;
+	}
+	lstrcpy(ComplementWndInfo.szIndent,indent);
+
+
+	return 1;
+}
+BOOL IsNeedNewIndentCommand(char *name){
+	if(lstrcmpi(name,"Case")==0) return 1;
+	return 0;
+}
+
+
+
+///////////////////////////////////////////////
+// Withで構成されるオブジェクト識別子を取得
+///////////////////////////////////////////////
+
+void GetWithObjectVariable(char *buffer,int p,char *pObjectVar){
+	int i,i2,i3,i4,CmdId;
+	char LineNum;
+	char temporary[VN_SIZE];
+
+	int stack[255];
+	int sp;
+
+	CmdId=0;
+	LineNum=0;
+	sp=-1;
+	pObjectVar[0]=0;
+
+	i=p;
+
+	//入力中の行を除く
+	for(i--;i>=0;i--){
+		i2=IsCommandDelimitation(buffer,i);
+		if(i2) break;
+	}
+
+	while(1){
+
+		//i2に一行前の先頭位置を格納
+		for(i--;i>=0;i--){
+			i2=IsCommandDelimitation(buffer,i);
+			if(i2){
+				if(i2==1) i2=i+1;
+				else{
+					i2=i+2;
+					LineNum++;
+
+					if(LineNum>pobj_nv->BackNum_PairStatementComplement){
+						//設定された行数を超えた場合
+						return;
+					}
+				}
+
+				break;
+			}
+		}
+		if(i==-1) i2=i+1;
+
+		//インデントを飛び越す
+		while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+
+		//終了コマンドを取得（End Class、End Sub、Next、Wendなど…）
+		CmdId=GetEndCommandId_FromBuffer(buffer+i2);
+		if(CmdId){
+			sp++;
+			stack[sp]=CmdId;
+		}
+
+		//開始コマンドを取得（Class、Sub、For、Whileなど…）
+		CmdId=GetStartCommandId_FromBuffer(buffer+i2);
+		if(CmdId){
+			if(sp==-1){
+				if(CmdId==COM_WITH){
+					//オブジェクト識別子を付加
+					i2+=5;
+					while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+
+					for(i3=0;;i2++,i3++){
+						if(buffer[i2]=='-'&&buffer[i2+1]=='>'){
+							temporary[i3++]=buffer[i2++];
+							temporary[i3]=buffer[i2];
+							continue;
+						}
+						if(buffer[i2]=='['){
+							i4=GetStringInBracket(temporary+i3,buffer+i2);
+							i2+=i4-1;
+							i3+=i4-1;
+							continue;
+						}
+						if(buffer[i2]=='('){
+							i4=GetStringInPare(temporary+i3,buffer+i2);
+							i2+=i4-1;
+							i3+=i4-1;
+							continue;
+						}
+						if(!(IsVariableChar(buffer[i2])||buffer[i2]=='.')){
+							temporary[i3]=0;
+							break;
+						}
+						temporary[i3]=buffer[i2];
+					}
+					lstrcat(temporary,pObjectVar);
+					lstrcpy(pObjectVar,temporary);
+				}
+			}
+			else{
+				if(stack[sp]!=CmdId){
+					pObjectVar[0]=0;
+					break;
+				}
+				sp--;
+			}
+		}
+
+		if(i<=0) break;
+	}
+}
Index: /ProjectEditor/ExtensionLink.cpp
===================================================================
--- /ProjectEditor/ExtensionLink.cpp	(revision 3)
+++ /ProjectEditor/ExtensionLink.cpp	(revision 3)
@@ -0,0 +1,615 @@
+#include "common.h"
+
+
+#ifndef ListView_SetCheckState
+   #define ListView_SetCheckState(hwndLV, i, fCheck) \
+      ListView_SetItemState(hwndLV, i, \
+      INDEXTOSTATEIMAGEMASK((fCheck)+1), LVIS_STATEIMAGEMASK)
+#endif
+
+
+
+COneExt::COneExt(BOOL bReg,char *lpszExtension,char *lpszNote,BOOL bWindowsSearch,COLORREF tab_color){
+	m_bReg=bReg;
+	lstrcpy(m_szExtension,lpszExtension);
+	lstrcpy(m_szNote,lpszNote);
+	m_bWindowsSearch=bWindowsSearch;
+	TabColor=tab_color;
+}
+COneExt::~COneExt(){
+}
+
+CExtLink::CExtLink(){
+	ppobj_ExtItems=(COneExt **)malloc(1);
+	iExtItemNum=0;
+}
+CExtLink::~CExtLink(){
+	int i;
+	for(i=0;i<iExtItemNum;i++){
+		delete ppobj_ExtItems[i];
+	}
+	free(ppobj_ExtItems);
+	ppobj_ExtItems=0;
+}
+
+void CExtLink::load(char *path){
+	char *buffer;
+	buffer=ReadBuffer_NonErrMsg(path);
+	if(buffer){
+		int i=0;
+		char temporary[64],temp2[255],temp3[64],temp4[64];
+		while(1){
+			//関連付けをおこなうかどうかのチェック
+			BOOL bReg;
+			i=GetOneParameter(buffer,i,temporary);
+			if(temporary[0]=='\0') break;
+			bReg=atoi(temporary);
+
+			//拡張子
+			i=GetOneParameter(buffer,i,temporary);
+			if(temporary[0]=='\0') break;
+
+			//説明
+			i=GetOneParameter(buffer,i,temp2);
+			if(temp2[0]=='\0') break;
+
+			//Windows検索
+			i=GetOneParameter(buffer,i,temp3);
+			if(temp3[0]=='\0') break;
+
+			//タブの色
+			i=GetOneParameter(buffer,i,temp4);
+			if(temp4[0]=='\0') break;
+
+			DWORD dwColor;
+			sscanf(temp4,"%x",&dwColor);
+
+			add(bReg,temporary,temp2,atoi(temp3),(COLORREF)dwColor);
+
+			if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
+				i+=2;
+			}
+			else break;
+		}
+
+		HeapDefaultFree(buffer);
+	}
+	else{
+		//デフォルト値をセット
+		SetInitData();
+	}
+}
+void CExtLink::save(char *path){
+	int i;
+	char buffer[8192];
+	buffer[0]=0;
+	for(i=0;i<iExtItemNum;i++){
+		sprintf(buffer+lstrlen(buffer),"%d,%s,%s,%d,%x\r\n",
+			ppobj_ExtItems[i]->m_bReg,
+			ppobj_ExtItems[i]->m_szExtension,
+			ppobj_ExtItems[i]->m_szNote,
+			ppobj_ExtItems[i]->m_bWindowsSearch,
+			ppobj_ExtItems[i]->TabColor);
+	}
+
+	//保存
+	WriteBuffer(path,buffer,lstrlen(buffer));
+}
+
+BOOL CExtLink::add(BOOL bReg,char *lpszExtension,char *lpszNote,BOOL bWindowsSearch,COLORREF tab_color){
+	//重複チェック
+	int i;
+	for(i=0;i<iExtItemNum;i++){
+		if(lstrcmpi(ppobj_ExtItems[i]->m_szExtension,lpszExtension)==0){
+			return 0;
+		}
+	}
+
+	ppobj_ExtItems=(COneExt **)realloc(ppobj_ExtItems,(iExtItemNum+1)*sizeof(COneExt*));
+	ppobj_ExtItems[iExtItemNum]=new COneExt(bReg,lpszExtension,lpszNote,bWindowsSearch,tab_color);
+	iExtItemNum++;
+
+	return 1;
+}
+void CExtLink::del(char *lpszExtension){
+	int i;
+	for(i=0;i<iExtItemNum;i++){
+		if(lstrcmpi(lpszExtension,ppobj_ExtItems[i]->m_szExtension)==0)
+			break;
+	}
+	if(i==iExtItemNum) return;
+
+	delete ppobj_ExtItems[i];
+
+	iExtItemNum--;
+	for(;i<iExtItemNum;i++){
+		ppobj_ExtItems[i]=ppobj_ExtItems[i+1];
+	}
+}
+
+void CExtLink::SetInitData(void){
+	///////////////////////////////////
+	// 初期立ち上げ時用の値をセット
+	///////////////////////////////////
+
+#ifdef THETEXT
+	add(1,"txt","テキスト ドキュメント",1,TABCOLOR_GRAY);
+	add(0,"htm","HTML ドキュメント",1,TABCOLOR_BLUE);
+	add(0,"html","HTML ドキュメント",1,TABCOLOR_BLUE);
+	add(1,"cgi","CGI ドキュメント",1,TABCOLOR_GREEN);
+	add(1,"pl","Perl ドキュメント",1,TABCOLOR_GREEN);
+	add(1,"php","PHP ドキュメント",1,TABCOLOR_RED);
+	add(1,"tpl","テンプレート ドキュメント",1,TABCOLOR_YELLOW);
+#else
+	add(1,"ab","Basic ソースコード",1,TABCOLOR_BLUE);
+	add(1,"abp","Basic ソースコード",1,TABCOLOR_BLUE);
+	add(1,"bas","Basic ソースコード",1,TABCOLOR_BLUE);
+	add(1,"sbp","サブソースコード",1,TABCOLOR_GREEN);
+	add(1,"pj","ActiveBasic プロジェクト ドキュメント",0,TABCOLOR_GRAY);
+#endif
+}
+
+void CExtLink::ResetListView(HWND hListView){
+	ListView_DeleteAllItems(hListView);
+
+	int i;
+	for(i=0;  i < pobj_nv->pobj_ExtLink->iExtItemNum;  i++){
+		LV_ITEM item;
+
+		//拡張子
+		item.mask=LVIF_TEXT;
+		item.pszText=ppobj_ExtItems[i]->m_szExtension;
+		item.iItem=i;
+		item.iSubItem=0;
+		ListView_InsertItem(hListView,&item);
+
+		//説明
+		item.pszText=ppobj_ExtItems[i]->m_szNote;
+		item.iItem=i;
+		item.iSubItem++;
+		ListView_SetItem(hListView,&item);
+
+		//Windows検索
+		if(ppobj_ExtItems[i]->m_bWindowsSearch)
+			item.pszText="有効";
+		else item.pszText="無効";
+		item.iItem=i;
+		item.iSubItem++;
+		ListView_SetItem(hListView,&item);
+
+		if(bProfessional){
+			//タブの色
+			//※有料版のみ
+			if(ppobj_ExtItems[i]->TabColor==TABCOLOR_GRAY)			item.pszText="灰色";
+			else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_WHITE)	item.pszText="白";
+			else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_RED)		item.pszText="赤";
+			else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_GREEN)	item.pszText="緑";
+			else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_BLUE)		item.pszText="青";
+			else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_YELLOW)	item.pszText="黄色";
+			else item.pszText="ユーザー設定";
+			item.iItem=i;
+			item.iSubItem++;
+			ListView_SetItem(hListView,&item);
+		}
+
+		//チェックマーク
+		ListView_SetCheckState(hListView,i,ppobj_ExtItems[i]->m_bReg);
+	}
+}
+
+COLORREF CExtLink::GetTabColorFromFilePath(char *path){
+	if(bProfessional){
+		//拡張子を識別し、タブの色を決定
+		//※有料版のみ
+		char szExt[255],*lpszTemp;
+		_splitpath(path,NULL,NULL,NULL,szExt);
+		if(szExt[0]=='.') lpszTemp=szExt+1;
+		else lpszTemp=szExt;
+		for(int i=0;i<iExtItemNum;i++){
+			if(lstrcmpi(lpszTemp,ppobj_ExtItems[i]->m_szExtension)==0){
+				return ppobj_ExtItems[i]->TabColor;
+			}
+		}
+	}
+	return TABCOLOR_GRAY;
+}
+
+
+BOOL CALLBACK DlgFileLinkAdd(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	static COneExt *pobj_OneExt;
+
+	static int TabColor;
+	switch(message){
+		case WM_INITDIALOG:
+			if(lParam){
+				pobj_OneExt=(COneExt *)lParam;
+
+				SetDlgItemText(hwnd,IDC_EXTENSION,pobj_OneExt->m_szExtension);
+				SetDlgItemText(hwnd,IDC_NOTE,pobj_OneExt->m_szNote);
+				TabColor=pobj_OneExt->TabColor;
+
+				if(pobj_OneExt->m_bWindowsSearch)
+					SendDlgItemMessage(hwnd,IDC_SEARCH_ON,BM_SETCHECK,BST_CHECKED,0);
+				else
+					SendDlgItemMessage(hwnd,IDC_SEARCH_OFF,BM_SETCHECK,BST_CHECKED,0);
+
+				EnableWindow(GetDlgItem(hwnd,IDC_EXTENSION),0);
+
+				SetFocus(GetDlgItem(hwnd,IDC_NOTE));
+			}
+			else{
+				pobj_OneExt=0;
+				TabColor=TABCOLOR_GRAY;
+
+				SendDlgItemMessage(hwnd,IDC_SEARCH_ON,BM_SETCHECK,BST_CHECKED,0);
+
+				SetFocus(GetDlgItem(hwnd,IDC_EXTENSION));
+			}
+
+			if(!bProfessional){
+				//フリー版の場合は、タブの色設定を排除する
+				ShowWindow(GetDlgItem(hwnd,IDC_STATIC_TABCOLOR),SW_HIDE);
+				ShowWindow(GetDlgItem(hwnd,IDC_STATIC_TABCOLOR2),SW_HIDE);
+				ShowWindow(GetDlgItem(hwnd,IDC_COLOR_BUTTON),SW_HIDE);
+			}
+
+			SendMessage(hwnd,WM_COMMAND,IDC_EXTENSION,0);
+
+			break;
+		case WM_DRAWITEM:
+			LPDRAWITEMSTRUCT pds;
+			pds=(LPDRAWITEMSTRUCT)lParam;
+
+			HBRUSH hBrush,hOldBrush;
+
+			if(wParam==IDC_COLOR_BUTTON){
+				//////////////
+				// 色を描画
+				//////////////
+
+				//ペンとブラシを生成
+				HPEN hPen,hOldPen;
+				hPen=(HPEN)GetStockObject(WHITE_PEN);
+				hBrush=CreateSolidBrush(TabColor);
+
+				//塗りつぶす
+				hOldPen=(HPEN)SelectObject(pds->hDC,hPen);
+				hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
+				Rectangle(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom);
+				SelectObject(pds->hDC,hOldPen);
+				SelectObject(pds->hDC,hOldBrush);
+
+				//ブラシを破棄
+				DeleteObject(hBrush);
+			}
+			return 1;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					char szExtension[64];
+					GetDlgItemText(hwnd,IDC_EXTENSION,szExtension,64);
+
+					char szNote[255];
+					GetDlgItemText(hwnd,IDC_NOTE,szNote,255);
+
+					BOOL bWindowsSearch;
+					if(SendDlgItemMessage(hwnd,IDC_SEARCH_ON,BM_GETCHECK,0,0))
+						bWindowsSearch=1;
+					else bWindowsSearch=0;
+
+					if(pobj_OneExt){
+						//変更
+						lstrcpy(pobj_OneExt->m_szNote,szNote);
+						pobj_OneExt->m_bWindowsSearch=bWindowsSearch;
+						pobj_OneExt->TabColor=TabColor;
+					}
+					else{
+						//追加
+						if(!pobj_nv->pobj_ExtLink->add(1,szExtension,szNote,bWindowsSearch,TabColor)){
+							char temporary[255];
+							sprintf(temporary,"拡張子 %s は既にリストに存在します。",szExtension);
+							MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+
+							return 1;
+						}
+					}
+
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+				case IDC_COLOR_BUTTON:
+					POINT pos;
+					GetCursorPos(&pos);
+					extern HMENU hTabColorMenu;
+					TrackPopupMenu(hTabColorMenu,TPM_LEFTALIGN,pos.x,pos.y,0,hwnd,0);
+					return 1;
+
+				case IDC_EXTENSION:
+					if(GetWindowTextLength(GetDlgItem(hwnd,IDC_EXTENSION)))
+						EnableWindow(GetDlgItem(hwnd,IDOK),1);
+					else
+						EnableWindow(GetDlgItem(hwnd,IDOK),0);
+					return 1;
+
+				case IDM_USER_COLOR:
+					COLORREF colorUser;
+					colorUser=TabColor;
+					{
+						CHOOSECOLOR cc;
+						COLORREF CusColors[16]={
+							RGB(255,255,255),
+							RGB(0,0,0),
+							RGB(128,128,128),
+							RGB(192,192,192),
+							RGB(128,0,0),
+							RGB(255,0,0),
+							RGB(128,128,0),
+							RGB(255,255,0),
+							RGB(0,128,0),
+							RGB(0,255,0),
+							RGB(0,128,128),
+							RGB(0,255,255),
+							RGB(0,0,128),
+							RGB(0,0,255),
+							RGB(128,0,128),
+							RGB(255,0,255)};
+						cc.lStructSize=sizeof(CHOOSECOLOR);
+						cc.hwndOwner=hwnd;
+						cc.rgbResult=colorUser;
+						cc.lpCustColors=CusColors;
+						cc.Flags=CC_RGBINIT|CC_FULLOPEN;
+						if(!ChooseColor(&cc)){
+							return 0;
+						}
+						colorUser=cc.rgbResult;
+					}
+				case IDM_GRAY:
+				case IDM_WHITE:
+				case IDM_RED:
+				case IDM_GREEN:
+				case IDM_BLUE:
+				case IDM_YELLOW:
+					if(LOWORD(wParam)==IDM_GRAY)	TabColor=TABCOLOR_GRAY;
+					if(LOWORD(wParam)==IDM_WHITE)	TabColor=TABCOLOR_WHITE;
+					if(LOWORD(wParam)==IDM_RED)		TabColor=TABCOLOR_RED;
+					if(LOWORD(wParam)==IDM_GREEN)	TabColor=TABCOLOR_GREEN;
+					if(LOWORD(wParam)==IDM_BLUE)	TabColor=TABCOLOR_BLUE;
+					if(LOWORD(wParam)==IDM_YELLOW)	TabColor=TABCOLOR_YELLOW;
+					if(LOWORD(wParam)==IDM_USER_COLOR) TabColor=colorUser;
+					InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+BOOL CALLBACK DlgLinkFile(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	int i;
+	HWND hListView;
+	char temporary[255];
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+
+
+			///////////////////////////
+			// カラムの設定
+			///////////////////////////
+
+			//拡張スタイル
+			DWORD dwStyle;
+			hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
+			dwStyle=ListView_GetExtendedListViewStyle(hListView);
+			dwStyle|=LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES;
+			ListView_SetExtendedListViewStyle(hListView,dwStyle);
+
+			LV_COLUMN ListView_Column;
+			ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+			ListView_Column.fmt=LVCFMT_LEFT;
+
+			ListView_Column.cx=50;
+			ListView_Column.pszText="拡張子";
+			ListView_Column.iSubItem=0;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+			ListView_Column.cx=150;
+			ListView_Column.pszText="説明";
+			ListView_Column.iSubItem++;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+			ListView_Column.cx=90;
+			ListView_Column.pszText="Windows検索";
+			ListView_Column.iSubItem++;
+			ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+
+			if(bProfessional){
+				//Pro版のみタブの色を表示
+				ListView_Column.cx=80;
+				ListView_Column.pszText="タブの色";
+				ListView_Column.iSubItem++;
+				ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
+			}
+
+
+			pobj_nv->pobj_ExtLink->ResetListView(hListView);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_ADD_BUTTON:
+					if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_EXTENSION_ADD),hwnd,DlgFileLinkAdd,0)) return 1;
+
+					pobj_nv->pobj_ExtLink->ResetListView(GetDlgItem(hwnd,IDC_EXTENSION_LIST));
+
+					return 1;
+				case IDC_EDIT_BUTTON:
+					hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
+
+					for(i=0;i<ListView_GetItemCount(hListView);i++){
+						if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+							break;
+						}
+					}
+					if(i==ListView_GetItemCount(hListView)) return 1;
+
+					if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_EXTENSION_ADD),hwnd,DlgFileLinkAdd,(LPARAM)pobj_nv->pobj_ExtLink->ppobj_ExtItems[i])) return 1;
+
+					pobj_nv->pobj_ExtLink->ResetListView(GetDlgItem(hwnd,IDC_EXTENSION_LIST));
+
+					return 1;
+				case IDC_DELETE_BUTTON:
+					hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
+
+					for(i=0;i<ListView_GetItemCount(hListView);i++){
+						if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
+							ListView_GetItemText(hListView,i,0,temporary,255);
+
+							char temp2[255];
+							sprintf(temp2,"%s をリストから削除します。",temporary);
+							if(MessageBox(hwnd,temp2,APPLICATION_NAME,MB_OKCANCEL)==IDCANCEL) return 1;
+
+							ListView_DeleteItem(hListView,i);
+
+							pobj_nv->pobj_ExtLink->del(temporary);
+							break;
+						}
+					}
+					return 1;
+				case IDOK:
+					hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
+
+					for(i=0;i<ListView_GetItemCount(hListView);i++){
+						pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_bReg=ListView_GetCheckState(hListView,i);
+					}
+
+					if(MessageBox(hwnd,"指定された内容で拡張子に関するレジストリキーを登録します。よろしいですか？",APPLICATION_NAME,MB_YESNO)==IDNO)
+						return 1;
+
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
+
+					for(i=0;i<ListView_GetItemCount(hListView);i++){
+						pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_bReg=ListView_GetCheckState(hListView,i);
+					}
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
+
+			NMHDR *hdr;
+			hdr=(NMHDR *)lParam;
+			if(hdr->hwndFrom==hListView&&hdr->code==NM_DBLCLK){
+				SendMessage(hwnd,WM_COMMAND,IDC_EDIT_BUTTON,0);
+			}
+			break;
+	}
+	return 0;
+}
+
+HKEY ClassRoot_CreateKey(char *path,char *lpszData){
+	HKEY hKey;
+	RegCreateKeyEx(HKEY_CLASSES_ROOT,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
+	RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)lpszData,lstrlen(lpszData));
+	return hKey;
+}
+void ExtensionLink(HWND hwnd){
+	int i;
+	HKEY hKey;
+
+	//初期状態の重複起動で関連付けを作動しないようにする
+	pobj_nv->save();
+
+	if(DialogBox(hResInst,MAKEINTRESOURCE(IDD_EXTENSION_LINK),hwnd,DlgLinkFile)==0) return;
+
+	char szApplicationPath[MAX_PATH];
+	GetModuleFileName(hInst,szApplicationPath,MAX_PATH);
+
+	char temporary[MAX_PATH],temp2[255],temp3[255];
+	for(i=0;i<pobj_nv->pobj_ExtLink->iExtItemNum;i++){
+		if(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_bReg==0) continue;
+
+		//「.拡張子」キー
+		sprintf(temp2,".%s",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
+		sprintf(temp3,"%sfile",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
+		hKey=ClassRoot_CreateKey(temp2,temp3);
+
+		sprintf(temp2,"%s file.",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
+		RegSetValueEx(hKey,"Content Type",0,REG_SZ,(const unsigned char *)temp2,lstrlen(temp2));
+
+		RegCloseKey(hKey);
+
+
+		if(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_bWindowsSearch){
+			//検索対象に含める
+			sprintf(temporary,".%s\\PersistentHandler",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
+			hKey=ClassRoot_CreateKey(temporary,"{5e941d80-bf96-11cd-b579-08002b30bfeb}");
+			RegCloseKey(hKey);
+		}
+		else{
+			//検索対象に含めない
+			sprintf(temporary,".%s\\PersistentHandler",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
+			RegDeleteKey(HKEY_CLASSES_ROOT,temporary);
+		}
+
+
+		//説明
+		RegCreateKeyEx(HKEY_CLASSES_ROOT,temp3,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
+		RegSetValueEx(hKey,NULL,0,REG_SZ,
+			(const unsigned char *)pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szNote,
+			lstrlen(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szNote));
+		RegCloseKey(hKey);
+
+
+		//アプリケーションパス
+		sprintf(temporary,"\"%s\" \"%%1\"",szApplicationPath);
+		sprintf(temp2,"%s\\shell\\open\\command",temp3);
+		RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
+		RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
+		RegCloseKey(hKey);
+
+
+#ifndef THETEXT
+		/////////////////////
+		// アイコン設定
+		// ※ProjectEditorのみ
+		/////////////////////
+
+		sprintf(temp2,"%s\\DefaultIcon",temp3);
+		if(lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"bas")==0){
+			sprintf(temporary,"\"%s\",8",szApplicationPath);
+			RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
+			RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
+			RegCloseKey(hKey);
+		}
+		if(lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"ab")==0||
+			lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"abp")==0){
+			sprintf(temporary,"\"%s\",8",szApplicationPath);
+			RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
+			RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
+			RegCloseKey(hKey);
+		}
+		if(lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"sbp")==0){
+			sprintf(temporary,"\"%s\",9",szApplicationPath);
+			RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
+			RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
+			RegCloseKey(hKey);
+		}
+		if(lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"pj")==0){
+			sprintf(temporary,"\"%s\",7",szApplicationPath);
+			RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
+			RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
+			RegCloseKey(hKey);
+		}
+#endif
+	}
+
+	//アイコンの関連付けを瞬時に反映させる
+	SHChangeNotify( SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL );
+}
Index: /ProjectEditor/ExtensionLink.h
===================================================================
--- /ProjectEditor/ExtensionLink.h	(revision 3)
+++ /ProjectEditor/ExtensionLink.h	(revision 3)
@@ -0,0 +1,37 @@
+
+class COneExt{
+public:
+	BOOL m_bReg;
+	char m_szExtension[64];
+	char m_szNote[255];
+	BOOL m_bWindowsSearch;
+
+	COLORREF TabColor;
+
+	COneExt(BOOL bReg,char *lpszExtension,char *lpszNote,BOOL bWindowsSearch,COLORREF tab_color);
+	~COneExt();
+};
+
+class CExtLink{
+public:
+	COneExt **ppobj_ExtItems;
+	int iExtItemNum;
+
+	CExtLink();
+	~CExtLink();
+
+	void load(char *path);
+	void save(char *path);
+
+	BOOL add(BOOL bReg,char *lpszExtension,char *lpszNote,BOOL bWindowsSearch,COLORREF tab_color);
+	void del(char *lpszExtension);
+
+	void SetInitData();
+
+	void ResetListView(HWND hListView);
+
+	COLORREF GetTabColorFromFilePath(char *path);
+};
+
+
+void ExtensionLink(HWND hwnd);
Index: /ProjectEditor/FileOperation.cpp
===================================================================
--- /ProjectEditor/FileOperation.cpp	(revision 3)
+++ /ProjectEditor/FileOperation.cpp	(revision 3)
@@ -0,0 +1,579 @@
+#include "Common.h"
+
+void MakeUserSettingDir(void){
+	char temporary[MAX_PATH];
+	sprintf(temporary,"%sUserSetting",pj_editor_Dir);
+
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind==INVALID_HANDLE_VALUE){
+		//UserSettingディレクトリを作成
+		if(!CreateDirectory(temporary,NULL)){
+			MessageBox(hOwner,"UserSettingディレクトリの作成に失敗",APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+	}
+}
+
+char *ReadBuffer(char *path){
+	extern HANDLE hHeap;
+	int i;
+	DWORD dw;
+	char *buffer,temporary[MAX_PATH];
+	HANDLE hFile;
+
+	hFile=CreateFile(path,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		//"\"%s\" ファイルの読み込みに失敗しました。"
+		sprintf(temporary,STRING_ERROR_CANT_FILEOPEN,path);
+		MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+
+		return 0;
+	}
+	i=GetFileSize(hFile,0);
+	buffer=(char *)HeapAlloc(hHeap,0,i+1);
+	ReadFile(hFile,buffer,i,&dw,0);
+	buffer[dw]=0;
+	CloseHandle(hFile);
+	return buffer;
+}
+char *ReadBuffer_NonErrMsg(char *path){
+	extern HANDLE hHeap;
+	int i;
+	DWORD dw;
+	char *buffer;
+	HANDLE hFile;
+
+	hFile=CreateFile(path,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE) return 0;
+	i=GetFileSize(hFile,0);
+	buffer=(char *)HeapAlloc(hHeap,0,i+1);
+	ReadFile(hFile,buffer,i,&dw,0);
+	buffer[dw]=0;
+	CloseHandle(hFile);
+	return buffer;
+}
+_int8 WriteBuffer(char *path,char *buffer,int length){
+	HANDLE hFile;
+	DWORD dw;
+	hFile=CreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		char temporary[MAX_PATH];
+
+		//"\"%s\" ファイルへの書き込みに失敗しました。"
+		sprintf(temporary,STRING_ERROR_CANT_FILESAVE,path);
+		MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+		return 0;
+	}
+	if(length) WriteFile(hFile,buffer,length,&dw,NULL);
+	CloseHandle(hFile);
+	return 1;
+}
+_int8 WriteBuffer_NonErrMsg(char *path,char *buffer,int length){
+	extern HWND hOwnerEditor;
+	HANDLE hFile;
+	DWORD dw;
+	hFile=CreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		return 0;
+	}
+	if(length) WriteFile(hFile,buffer,length,&dw,NULL);
+	CloseHandle(hFile);
+	return 1;
+}
+void GetRelationalPath(char *path,char *dir){
+	//相対パスを取得
+	int i,i2,i3,i4,i5;
+	char temporary[MAX_PATH],temp2[MAX_PATH],temp3[MAX_PATH],temp4[MAX_PATH];
+
+	//ドライブ名をチェック
+	_splitpath(path,temporary,0,0,0);
+	_splitpath(dir,temp2,0,0,0);
+	if(lstrcmpi(temporary,temp2)!=0) return;
+
+	_splitpath(path,0,temporary,0,0);
+	_splitpath(dir,0,temp2,0,0);
+	i=1;i2=1;
+	while(1){
+		i4=i;
+		if(temporary[i-1]=='\\'&&temporary[i]){	//path側
+			for(i3=0;;i++,i3++){
+				if(temporary[i]=='\\'){
+					temp3[i3]=0;
+					i++;
+					break;
+				}
+				temp3[i3]=temporary[i];
+			}
+		}
+		else temp3[0]=0;
+
+		i5=i2;
+		if(temp2[i2-1]=='\\'&&temp2[i2]){		//dir側
+			for(i3=0;;i2++,i3++){
+				if(temp2[i2]=='\\'){
+					temp4[i3]=0;
+					i2++;
+					break;
+				}
+				temp4[i3]=temp2[i2];
+			}
+		}
+		else temp4[0]=0;
+
+		if(temp3[0]=='\0'&&temp4[0]=='\0') break;
+
+		if(lstrcmpi(temp3,temp4)!=0){
+			for(i3=0;;i5++){
+				if(temp2[i5]=='\0') break;
+				if(temp2[i5]=='\\') i3++;
+			}
+			temp3[0]=0;
+			for(i2=0;i2<i3;i2++) lstrcat(temp3,"..\\");
+			lstrcat(temp3,temporary+i4);
+			break;
+		}
+	}
+	_splitpath(path,0,0,temporary,temp2);
+	lstrcat(temp3,temporary);
+	lstrcat(temp3,temp2);
+	lstrcpy(path,temp3);
+}
+void GetFullPath(char *path,char *dir){
+	int i,i2,i3,i4;
+	char temporary[MAX_PATH];
+
+	if(strstr(path,":")||strstr(path,"\\\\")) return;
+
+	i=0;i2=0;
+	while(1){
+		if(path[i]=='.'&&path[i+1]=='\\') i+=2;
+		if(path[i]=='.'&&path[i+1]=='.'&&path[i+2]=='\\'){
+			i2++;
+			i+=3;
+		}
+		else break;
+	}
+
+	i3=lstrlen(dir);i4=0;
+	while(i4<i2){
+		for(i3--;;i3--){
+			if(dir[i3-1]=='\\'){
+				i4++;
+				break;
+			}
+		}
+	}
+	memcpy(temporary,dir,i3);
+	temporary[i3]=0;
+	lstrcat(temporary,path+i);
+	lstrcpy(path,temporary);
+}
+
+void RemoveDirectoryStrong(char *dir_path){
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+	char temporary[MAX_PATH];
+	sprintf(temporary,"%s*",dir_path);
+
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind!=INVALID_HANDLE_VALUE){
+		do{
+			if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
+				if(!(lstrcmp(wfd.cFileName,".")==0||lstrcmp(wfd.cFileName,"..")==0)){
+					//ディレクトリのとき
+					sprintf(temporary,"%s%s\\",dir_path,wfd.cFileName);
+					RemoveDirectoryStrong(temporary);
+				}
+			}
+			else{
+				//ファイルのとき
+				sprintf(temporary,"%s%s",dir_path,wfd.cFileName);
+
+				DeleteFile(temporary);
+			}
+		}while(FindNextFile(hFind,&wfd));
+	}
+
+	RemoveDirectory(dir_path);
+}
+
+BOOL GetFilePathDialog(HWND hwnd,char *filename,LPSTR Filter,LPSTR Title,_int8 IsOpen){
+	OPENFILENAME ofstr;
+	filename[0]=0;
+	ofstr.lStructSize=sizeof(OPENFILENAME);
+	ofstr.hwndOwner=hwnd;
+	ofstr.hInstance=0;
+	ofstr.lpstrFilter=Filter;
+	ofstr.lpstrCustomFilter=NULL;
+	ofstr.nMaxCustFilter=0;
+	ofstr.nFilterIndex=1;
+	ofstr.lpstrFile=filename;
+	ofstr.nMaxFile=MAX_PATH;
+	ofstr.lpstrFileTitle=NULL;
+	ofstr.nMaxFileTitle=0;
+	ofstr.lpstrInitialDir=pobj_nv->DefSaveDir;
+	ofstr.lpstrTitle=Title;
+	ofstr.Flags=OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST;
+	ofstr.nFileOffset=0;
+	ofstr.nFileExtension=0;
+	ofstr.lpstrDefExt="*";
+	ofstr.lCustData=NULL;
+	ofstr.lpfnHook=NULL;
+	ofstr.lpTemplateName=NULL;
+	if(IsOpen){
+		if(!GetOpenFileName(&ofstr)) return FALSE;
+	}
+	else{
+		if(!GetSaveFileName(&ofstr)) return FALSE;
+	}
+
+	//次回の初期ディレクトリをセット
+	char temporary[MAX_PATH];
+	_splitpath(filename,pobj_nv->DefSaveDir,temporary,NULL,NULL);
+	lstrcat(pobj_nv->DefSaveDir,temporary);
+
+	return TRUE;
+}
+BOOL GetFolder(HWND hWnd,char *folder,char *OpenFolderTitle){
+	BROWSEINFO BrowseInfo;
+	LPITEMIDLIST pidlBrowse;
+	LPMALLOC g_pMalloc;
+	char temporary[MAX_PATH];
+
+	BrowseInfo.hwndOwner=hWnd;
+	BrowseInfo.pszDisplayName=temporary;
+	BrowseInfo.pidlRoot=NULL;
+	BrowseInfo.lpszTitle=OpenFolderTitle;
+	BrowseInfo.ulFlags=BIF_RETURNONLYFSDIRS;
+	BrowseInfo.lpfn=NULL;
+	BrowseInfo.lParam=(LPARAM)0;
+	BrowseInfo.iImage=0;
+	pidlBrowse=SHBrowseForFolder(&BrowseInfo);
+	if(pidlBrowse){
+		if(SHGetMalloc(&g_pMalloc)!=0) return 0;
+		SHGetPathFromIDList(pidlBrowse,folder);
+		g_pMalloc->Free(pidlBrowse);
+		g_pMalloc->Release();
+		return 1;
+	}
+	return 0;
+}
+
+int GetFileExtension(char *path){
+	char temporary[MAX_PATH];
+	_splitpath(path,0,0,0,temporary);
+
+	if(lstrcmpi(temporary,".bas")==0||
+		lstrcmpi(temporary,".ab")==0||
+		lstrcmpi(temporary,".abp")==0) return FT_BASICPROGRAM;
+	if(lstrcmpi(temporary,".sbp")==0) return FT_SUBPROGRAM;
+	if(lstrcmpi(temporary,".txt")==0) return FT_TEXT;
+	if(lstrcmpi(temporary,".pj")==0) return FT_PROJECT;
+	if(lstrcmpi(temporary,".ico")==0) return FT_ICON;
+
+	if(lstrcmpi(temporary,".html")==0||
+		lstrcmpi(temporary,".htm")==0||
+		lstrcmpi(temporary,".tpl")==0||
+		lstrcmpi(temporary,".php")==0)
+		return FT_HTML;
+
+	return FT_OTHER;
+}
+HWND OpenFileWithExtension(char *OpenFileName){
+	int i;
+	_int8 DocumentType;
+
+	i=GetFileExtension(OpenFileName);
+
+#ifndef THETEXT
+	if(i==FT_PROJECT){
+		//「最近使ったプロジェクト」に追加
+		pobj_nv->pobj_ProjectHistory->insert(OpenFileName);
+
+		OpenProject(OpenFileName);
+		return 0;
+	}
+#endif
+
+	//「最近使ったファイル」に追加
+	pobj_nv->pobj_History->insert(OpenFileName);
+
+	if(i==FT_ICON){
+		NewIconEditWindow(OpenFileName);
+		return 0;
+	}
+	else if(i==FT_BASICPROGRAM||i==FT_SUBPROGRAM){
+		DocumentType=WNDTYPE_BASIC;
+
+#ifdef THETEXT
+		DocumentType=WNDTYPE_TEXT;
+#endif
+	}
+	else if(i==FT_HTML) DocumentType=WNDTYPE_HTML;
+	else DocumentType=WNDTYPE_TEXT;
+
+	COLORREF TabColor;
+	TabColor=pobj_nv->pobj_ExtLink->GetTabColorFromFilePath(OpenFileName);
+
+	return NewTextEditWindow(OpenFileName,DocumentType,TabColor);
+}
+BOOL SaveDocument(HWND hChild,char *SaveFileName){	//ウィンドウからバッファを読み取り、ファイルに保存
+	extern LPSTR IconFileFilter;
+	extern HWND hClient,hDocCombo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int WndNum,i2;
+	char temporary[MAX_PATH],str[MAX_PATH],str2[32];
+	HANDLE fh;
+	DWORD dummy;
+
+	WndNum=GetWndNum(hChild);
+
+	char szOldTitle[MAX_PATH];
+	lstrcpy(szOldTitle,MdiInfo[WndNum].title);
+
+	if(MdiInfo[WndNum].DocType==WNDTYPE_RAD||MdiInfo[WndNum].DocType==WNDTYPE_MENU){
+		////////////////////////////////////
+		// RADツール及びメニューエディタ
+		////////////////////////////////////
+
+		extern PROJECTINFO ProjectInfo;
+		if(ProjectInfo.ModifyOfMaterial){
+			sprintf(temporary,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
+			SaveWindowFile(temporary,ProjectInfo.pWindowInfo,ProjectInfo.NumberOfWindows);
+
+			//.wbpファイルを生成
+			SaveWindowProgram();
+		}
+	}
+	else if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+		//////////////////////////
+		// テキストドキュメント
+		//////////////////////////
+
+		if(SaveFileName){
+			lstrcpy(temporary,SaveFileName);
+			if((fh=CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE){
+				sprintf(str,STRING_FILE_OVERWRIDE,temporary);
+				if(MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNO|MB_ICONINFORMATION)==IDNO){
+					CloseHandle(fh);
+					return 0;
+				}
+			}
+			CloseHandle(fh);
+
+			//ドキュメント セレクト コンボボックスから消去
+			i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
+			SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
+
+			//新しいパスをセット
+			GlobalFree(MdiInfo[WndNum].path);
+			MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(temporary)+1);
+			lstrcpy(MdiInfo[WndNum].path,temporary);
+
+			//ドキュメント セレクト コンボボックスに挿入
+			_splitpath(temporary,NULL,NULL,str,str2);
+			lstrcat(str,str2);
+			GlobalFree(MdiInfo[WndNum].title);
+			MdiInfo[WndNum].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(str)+1);
+			lstrcpy(MdiInfo[WndNum].title,str);
+			SendMessage(hDocCombo,CB_ADDSTRING,0,(long)MdiInfo[WndNum].title);
+			i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
+			SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
+
+			//MDIウィンドウのタイトルを再設定
+			SetWindowText(hChild,MdiInfo[WndNum].title);
+		}
+		else{
+			if(MdiInfo[WndNum].path[0]=='\0'){
+				//"保存先のファイルを指定してください"
+get_file_path:
+
+				LPSTR ff;
+
+				extern LPSTR DefFileFilter;
+				extern LPSTR HtmlFileFilter;
+				extern LPSTR TextFileFilter;
+				if(MdiInfo[WndNum].DocType==WNDTYPE_BASIC)
+					ff=DefFileFilter;
+				else if(MdiInfo[WndNum].DocType==WNDTYPE_HTML)
+					ff=HtmlFileFilter;
+				else if(MdiInfo[WndNum].DocType==WNDTYPE_TEXT)
+					ff=TextFileFilter;
+
+				if(!GetFilePathDialog(hOwner,temporary,ff,STRING_FILESAVETITLE_DEFAULT,FALSE)) return 0;
+				SaveDocument(hChild,temporary);
+				return 1;
+			}
+			lstrcpy(temporary,MdiInfo[WndNum].path);
+		}
+
+		if(!IsFile(temporary)){
+			//保存先ファイルが存在しないとき
+			char temp2[MAX_PATH];
+
+			//初期ディレクトリをセット
+			_splitpath(temporary,pobj_nv->DefSaveDir,temp2,NULL,NULL);
+			lstrcat(pobj_nv->DefSaveDir,temp2);
+
+			goto get_file_path;
+		}
+
+		//文字コードを復元
+		char *pBuf;
+		pBuf=nkf.RestoreBuffer(MdiInfo[WndNum].pmti->buffer,MdiInfo[WndNum].pmti->iCharCode);
+
+		//改行コードを復元
+		if(MdiInfo[WndNum].pmti->iLfCode==LFCODE_LF) nkf.ToLF(pBuf);
+		else if(MdiInfo[WndNum].pmti->iLfCode==LFCODE_CR) nkf.ToCR(pBuf);
+
+
+		////////////////////////
+		// 保存
+		////////////////////////
+
+		fh=CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
+		if(fh==INVALID_HANDLE_VALUE){
+			sprintf(str,STRING_ERROR_CANT_FILESAVE,temporary);
+			MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONSTOP);
+			return 0;
+		}
+		WriteFile(fh,pBuf,lstrlen(pBuf),&dummy,NULL);
+		CloseHandle(fh);
+
+
+		HeapDefaultFree(pBuf);
+
+		//変更フラグに0をセット
+		MdiInfo[WndNum].pmti->bModify=0;
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+		///////////////////
+		// ICON
+		///////////////////
+
+		if(SaveFileName){
+			lstrcpy(temporary,SaveFileName);
+			if((fh=CreateFile(temporary,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE){
+				sprintf(str,STRING_FILE_OVERWRIDE,temporary);
+				if(MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNO|MB_ICONINFORMATION)==IDNO){
+					CloseHandle(fh);
+					return 0;
+				}
+			}
+			CloseHandle(fh);
+			GlobalFree(MdiInfo[WndNum].path);
+			MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(temporary)+1);
+			lstrcpy(MdiInfo[WndNum].path,temporary);
+			i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
+			SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
+			_splitpath(temporary,NULL,NULL,str,str2);
+			lstrcat(str,str2);
+			lstrcpy(MdiInfo[WndNum].title,str);
+			SendMessage(hDocCombo,CB_ADDSTRING,0,(long)MdiInfo[WndNum].title);
+			i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
+			SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
+			SetWindowText(hChild,MdiInfo[WndNum].title);
+		}
+		else{
+			if(MdiInfo[WndNum].path[0]=='\0'){
+				//"保存先のファイルを指定してください"
+				if(!GetFilePathDialog(hOwner,temporary,IconFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return 0;
+				SaveDocument(hChild,temporary);
+				return 1;
+			}
+			lstrcpy(temporary,MdiInfo[WndNum].path);
+		}
+		SaveIconFile(temporary,hChild);
+
+		MdiInfo[WndNum].MdiIconEditInfo->bModify=0;
+	}
+
+
+	//タブコントロールを再設定
+	if(pobj_nv->bSaveTabToHead){
+		COLORREF color;
+		color=pobj_MainTab->GetItemColor(szOldTitle);
+		pobj_MainTab->delete_item(szOldTitle,0);
+		pobj_MainTab->insert(MdiInfo[WndNum].title,0,color);
+	}
+	else{
+		pobj_MainTab->reset_item(szOldTitle,MdiInfo[WndNum].title);
+	}
+
+	//「最近使ったファイル」を更新
+	pobj_nv->pobj_History->insert(MdiInfo[WndNum].path);
+
+	return 1;
+}
+BOOL ShortPathToLongPath(char ShortPath[MAX_PATH],char *LongPath){
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+	int i;
+	char dummy[MAX_PATH];
+	for(i=0;i<MAX_PATH;i++){
+		LongPath[i]=ShortPath[i];
+		if((ShortPath[i-1]==':'&&ShortPath[i]=='\\')||(ShortPath[i-1]=='\\'&&ShortPath[i]=='\\')){
+			LongPath[i+1]=0;
+			break;
+		}
+	}
+	if(ShortPath[i-1]=='\\'&&ShortPath[i]=='\\'){
+		for(i++;i<MAX_PATH;i++){
+			if(IsDBCSLeadByte(ShortPath[i])){
+				i++;
+				continue;
+			}
+			LongPath[i]=ShortPath[i];
+			if(ShortPath[i]=='\\'){
+				LongPath[i+1]=0;
+				break;
+			}
+		}
+		for(i++;i<MAX_PATH;i++){
+			if(IsDBCSLeadByte(ShortPath[i])){
+				i++;
+				continue;
+			}
+			LongPath[i]=ShortPath[i];
+			if(ShortPath[i]=='\\'){
+				LongPath[i+1]=0;
+				break;
+			}
+		}
+	}
+	for(i++;i<MAX_PATH;i++){
+		if(IsDBCSLeadByte(ShortPath[i])){
+			i++;
+			continue;
+		}
+		if(ShortPath[i]=='\\'||ShortPath[i]=='\0'){
+			strncpy(dummy,ShortPath,i);
+			dummy[i]=0;
+			if((hFind=FindFirstFile(dummy,&wfd))!=INVALID_HANDLE_VALUE) FindClose(hFind);
+			lstrcat(LongPath,wfd.cFileName);
+
+			if(ShortPath[i]=='\0') break;
+			lstrcat(LongPath,"\\");
+
+			if(ShortPath[i]=='\\'&&ShortPath[i+1]=='\0'){
+				break;
+			}
+		}
+	}
+	return 1;
+}
+
+BOOL IsFile(char *path){
+	WIN32_FIND_DATA wfd;
+	HANDLE hFind;
+
+	hFind=FindFirstFile(path,&wfd);
+	if(hFind==INVALID_HANDLE_VALUE){
+		return 0;
+	}
+	FindClose(hFind);
+
+	return 1;
+}
Index: /ProjectEditor/FileTree.cpp
===================================================================
--- /ProjectEditor/FileTree.cpp	(revision 3)
+++ /ProjectEditor/FileTree.cpp	(revision 3)
@@ -0,0 +1,197 @@
+#include "common.h"
+
+CFileTree *pobj_FileTree;
+
+WNDPROC OldFileTreeViewProc;
+
+BOOL CALLBACK DlgProject_FileProperty(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern PROJECTINFO ProjectInfo;
+	HTREEITEM hTreeItem;
+	int i;
+	char temporary[MAX_PATH];
+	HANDLE hFile;
+	FILETIME LastWriteTime,LocalTime;
+	SYSTEMTIME SystemTime;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+			hTreeItem=TreeView_GetSelection(pobj_FileTree->hTree);
+
+			char *path;
+			path=ProjectInfo.pobj_DBFileInfo->GetPath(hTreeItem);
+
+			//絶対パス、相対パスを表示
+			lstrcpy(temporary,path);
+			GetFullPath(temporary,ProjectInfo.dir);
+			SetDlgItemText(hwnd,IDC_USING_FILE,temporary);
+			SetDlgItemText(hwnd,IDC_DEFINED_FILE,path);
+
+			//最終更新日時を表示
+			hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+			if(hFile==INVALID_HANDLE_VALUE){
+				//"エラー"
+				lstrcpy(temporary,STRING_ERROR);
+			}
+			else{
+				GetFileTime(hFile,NULL,NULL,&LastWriteTime);
+				FileTimeToLocalFileTime(&LastWriteTime,&LocalTime);
+				FileTimeToSystemTime(&LocalTime,&SystemTime);
+				if(SystemTime.wHour>=12){
+					//"午後 "
+					lstrcpy(temporary,STRING_AFTERNOON);
+					lstrcat(temporary," ");
+					SystemTime.wHour-=12;
+				}
+				else{
+					//"午前 "
+					lstrcpy(temporary,STRING_MORNING);
+					lstrcat(temporary," ");
+				}
+				sprintf(temporary+5,"%02d:%02d:%02d %04d/%02d/%02d",
+					SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond,
+					SystemTime.wYear,SystemTime.wMonth,SystemTime.wDay);
+				CloseHandle(hFile);
+			}
+			SetDlgItemText(hwnd,IDC_UPDATE_TIME,temporary);
+
+
+			//////////////
+			// 形式を表示
+			//////////////
+			i=GetFileExtension(path);
+
+			//"Basic プログラム"
+			if(i==FT_BASICPROGRAM) lstrcpy(temporary,STRING_FILETYPE_BASICPROGRAM);
+			//"サブ プログラム"
+			else if(i==FT_SUBPROGRAM) lstrcpy(temporary,STRING_FILETYPE_SUBPROGRAM);
+			//"テキスト ドキュメント"
+			else if(i==FT_TEXT) lstrcpy(temporary,STRING_FILETYPE_TEXT);
+			//"判別できません"
+			else lstrcpy(temporary,STRING_FILETYPE_UNKNOWN);
+
+			SetDlgItemText(hwnd,IDC_FILETYPE,temporary);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					EndDialog(hwnd,0);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+LRESULT CALLBACK FileTreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	HTREEITEM hTreeItem;
+	char temporary[MAX_PATH];
+	char *path;
+	switch(message){
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDM_FILETREE_INSERT:
+					//"プロジェクトへ挿入するファイルを指定して下さい"
+					extern LPSTR DefFileFilter;
+					if(!GetFilePathDialog(hOwner,temporary,DefFileFilter,STRING_FILEOPENTITLE_INSERTEDPROJECT,1)) break;
+					Project_File_Insert(temporary);
+					break;
+				case IDM_FILETREE_OPEN:
+					hTreeItem=TreeView_GetSelection(hwnd);
+
+					path=ProjectInfo.pobj_DBFileInfo->GetPath(hTreeItem);
+					if(!path) break;
+
+					lstrcpy(temporary,path);
+					GetFullPath(temporary,ProjectInfo.dir);
+					OpenFileWithExtension(temporary);
+					break;
+				case IDM_FILETREE_DELETE:
+					hTreeItem=TreeView_GetSelection(hwnd);
+					Project_File_Delete(hTreeItem);
+					break;
+				case IDM_FILETREE_PROPERTY:
+					DialogBox(hResInst,MAKEINTRESOURCE(IDD_PROJECT_FILEPROPERTY),hOwner,DlgProject_FileProperty);
+					break;
+			}
+			return 0;
+		case WM_CHAR:
+			if(wParam==VK_RETURN){
+				SendMessage(hwnd,WM_COMMAND,IDM_FILETREE_OPEN,0);
+				//デフォルトのメッセージ処理をするとビープ音がしてしまうので避ける
+				return 0;
+			}
+			break;
+		case WM_KEYDOWN:
+			if(wParam==VK_DELETE){
+				SendMessage(hwnd,WM_COMMAND,IDM_FILETREE_DELETE,0);
+			}
+			break;
+		case WM_LBUTTONDBLCLK:
+			SendMessage(hwnd,WM_COMMAND,IDM_FILETREE_OPEN,0);
+			break;
+	}
+	return CallWindowProc(OldFileTreeViewProc,hwnd,message,wParam,lParam);
+}
+
+CFileTree::CFileTree(HWND hParent){
+	hTree=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+		WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+		0,0,0,0,
+		hParent,0,hInst,0);
+	OldFileTreeViewProc=(WNDPROC)GetWindowLong(hTree,GWL_WNDPROC);
+	SetWindowLong(hTree,GWL_WNDPROC,(long)FileTreeViewProc);
+
+	//イメージリスト読み込み、設定
+	hImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,3,0);
+	ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
+	ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
+	ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT)));
+	TreeView_SetImageList(hTree,hImageList,TVSIL_NORMAL);
+}
+CFileTree::~CFileTree(){
+	DestroyWindow(hTree);
+	ImageList_Destroy(hImageList);
+}
+
+void CFileTree::ContextMenu(POINT *pPos){
+	//右クリックによるメニューを表示
+	TV_HITTESTINFO tvHitTestInfo;
+	tvHitTestInfo.pt=*pPos;
+	ScreenToClient(hTree,&tvHitTestInfo.pt);
+
+	HTREEITEM hTreeItem;
+	hTreeItem=TreeView_HitTest(hTree,&tvHitTestInfo);
+	if(hTreeItem){
+		TreeView_SelectItem(hTree,hTreeItem);
+
+		extern HMENU hFileTreeMenuBase;
+		if(TreeView_GetRoot(hTree)==hTreeItem)
+			TrackPopupMenu(GetSubMenu(hFileTreeMenuBase,0),TPM_LEFTALIGN,pPos->x,pPos->y,0,hTree,0);
+		else TrackPopupMenu(GetSubMenu(hFileTreeMenuBase,1),TPM_LEFTALIGN,pPos->x,pPos->y,0,hTree,0);
+	}
+}
+
+HTREEITEM CFileTree::insert(char *str){
+	//////////////////////
+	//ツリービューに追加
+
+	TV_INSERTSTRUCT tv;
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.item.iImage=2;
+	tv.item.iSelectedImage=2;
+	tv.hParent=TreeView_GetRoot(hTree);
+	tv.item.pszText=str;
+
+	return TreeView_InsertItem(hTree,&tv);
+}
+
+void CFileTree::resize(int x,int y,int cx,int cy){
+	MoveWindow(hTree,x,y,cx,cy,1);
+}
Index: /ProjectEditor/FileTree.h
===================================================================
--- /ProjectEditor/FileTree.h	(revision 3)
+++ /ProjectEditor/FileTree.h	(revision 3)
@@ -0,0 +1,17 @@
+
+
+class CFileTree{
+	HIMAGELIST hImageList;
+public:
+	HWND hTree;
+	CFileTree(HWND hParent);
+	~CFileTree();
+
+	void ContextMenu(POINT *pPos);
+
+	HTREEITEM insert(char *str);
+
+	void resize(int x,int y,int cx,int cy);
+};
+
+extern CFileTree *pobj_FileTree;
Index: /ProjectEditor/History.cpp
===================================================================
--- /ProjectEditor/History.cpp	(revision 3)
+++ /ProjectEditor/History.cpp	(revision 3)
@@ -0,0 +1,117 @@
+#include "common.h"
+
+CHistory::CHistory(int BaseID){
+	iNum=0;
+	iMaxHistoryNum=15;
+
+	m_BaseID=BaseID;
+}
+CHistory::~CHistory(){
+	int i;
+	for(i=0;i<iNum;i++){
+		HeapDefaultFree(lpszPath[i]);
+	}
+}
+
+void CHistory::load(char *path){
+	char temporary[MAX_PATH];
+
+	char *buffer;
+	buffer=ReadBuffer_NonErrMsg(path);
+	if(buffer){
+		int i;
+		i=0;
+		while(buffer[i]){
+			//表示名
+			i=GetOneParameter(buffer,i,temporary);
+			if(temporary[0]=='\0') break;
+
+			if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
+				i+=2;
+			}
+
+			add(temporary);
+		}
+		HeapDefaultFree(buffer);
+	}
+}
+void CHistory::save(char *path){
+	char *buffer;
+	buffer=(char *)HeapAlloc(hHeap,0,iNum*MAX_PATH+1);
+	buffer[0]=0;
+
+	int i;
+	for(i=0;i<iNum;i++){
+		sprintf(buffer+lstrlen(buffer),"%s\r\n",lpszPath[i]);
+	}
+
+	WriteBuffer(path,buffer,lstrlen(buffer));
+
+	HeapDefaultFree(buffer);
+}
+void CHistory::add(char *path){
+	lpszPath[iNum]=(char *)HeapAlloc(hHeap,0,lstrlen(path)+1);
+	lstrcpy(lpszPath[iNum],path);
+	iNum++;
+}
+void CHistory::insert(char *path){
+	//重複チェック
+	int i;
+	for(i=0;i<iNum;i++){
+		if(lstrcmpi(path,lpszPath[i])==0) break;
+	}
+	if(i==iNum){
+		//ローテーション
+		for(i=iNum;i>0;i--){
+			lpszPath[i]=lpszPath[i-1];
+		}
+
+		if(iNum+1 == iMaxHistoryNum){
+			//一番古い情報を削除
+			HeapDefaultFree(lpszPath[iNum]);
+		}
+		else iNum++;
+	}
+	else{
+		//ローテーション
+		HeapDefaultFree(lpszPath[i]);
+
+		for(;i>0;i--){
+			lpszPath[i]=lpszPath[i-1];
+		}
+	}
+
+	lpszPath[0]=(char *)HeapAlloc(hHeap,0,lstrlen(path)+1);
+	lstrcpy(lpszPath[0],path);
+}
+
+void CHistory::ResetFileMenu(CSubMenuEx *pobj_SubMenu,BOOL bOwnerDraw){
+	//古いメニューアイテムを消去
+	while(0<pobj_SubMenu->iMenuItemNum){
+		pobj_SubMenu->RemoveItem(0);
+	}
+
+	if(iNum==0){
+		//なし
+		pobj_SubMenu->InsertItem(0,100,"なし");
+		pobj_SubMenu->EnableItem(100,MF_BYCOMMAND|MF_GRAYED);
+		return;
+	}
+
+
+	int i;
+	for(i=0;i<iNum;i++){
+		//挿入
+		pobj_SubMenu->InsertItem(i,m_BaseID+i,lpszPath[i]);
+
+		//アイコンをセット
+		if(IsFile(lpszPath[i])){
+			SHFILEINFO shfi;
+			SHGetFileInfo( lpszPath[i], FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
+
+			if(shfi.hIcon){
+				pobj_SubMenu->SetIcon(m_BaseID+i,shfi.hIcon);
+			}
+		}
+	}
+}
Index: /ProjectEditor/HtmlAnalysis.cpp
===================================================================
--- /ProjectEditor/HtmlAnalysis.cpp	(revision 3)
+++ /ProjectEditor/HtmlAnalysis.cpp	(revision 3)
@@ -0,0 +1,691 @@
+#include "common.h"
+
+extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+
+#define ADD_TAG_PARAM(str) AddComplimentInfo(str,ACCESS_HTML_PARAM);
+
+int IsHtmlTagWord(char *str){
+	if(str[0]=='a'||str[0]=='A'){
+		if(lstrcmpi(str,"a")==0) return 1;
+		if(lstrcmpi(str,"abbr")==0) return 1;
+		if(lstrcmpi(str,"acronym")==0) return 1;
+		if(lstrcmpi(str,"address")==0) return 1;
+		if(lstrcmpi(str,"applet")==0) return 1;
+		if(lstrcmpi(str,"area")==0) return 1;
+	}
+	else if(str[0]=='b'||str[0]=='B'){
+		if(lstrcmpi(str,"b")==0) return 1;
+		if(lstrcmpi(str,"base")==0) return 1;
+		if(lstrcmpi(str,"basefont")==0) return 1;
+		if(lstrcmpi(str,"bdo")==0) return 1;
+		if(lstrcmpi(str,"bgsound")==0) return 1;
+		if(lstrcmpi(str,"big")==0) return 1;
+		if(lstrcmpi(str,"blink")==0) return 1;
+		if(lstrcmpi(str,"blockquote")==0) return 1;
+		if(lstrcmpi(str,"body")==0) return 1;
+		if(lstrcmpi(str,"br")==0) return 1;
+		if(lstrcmpi(str,"button")==0) return 1;
+	}
+	else if(str[0]=='c'||str[0]=='C'){
+		if(lstrcmpi(str,"caption")==0) return 1;
+		if(lstrcmpi(str,"center")==0) return 1;
+		if(lstrcmpi(str,"cite")==0) return 1;
+		if(lstrcmpi(str,"code")==0) return 1;
+		if(lstrcmpi(str,"col")==0) return 1;
+		if(lstrcmpi(str,"colgroup")==0) return 1;
+		if(lstrcmpi(str,"comment")==0) return 1;
+	}
+	else if(str[0]=='d'||str[0]=='D'){
+		if(lstrcmpi(str,"dd")==0) return 1;
+		if(lstrcmpi(str,"del")==0) return 1;
+		if(lstrcmpi(str,"dfn")==0) return 1;
+		if(lstrcmpi(str,"dir")==0) return 1;
+		if(lstrcmpi(str,"div")==0) return 1;
+		if(lstrcmpi(str,"dl")==0) return 1;
+		if(lstrcmpi(str,"dt")==0) return 1;
+	}
+	else if(str[0]=='e'||str[0]=='E'){
+		if(lstrcmpi(str,"em")==0) return 1;
+		if(lstrcmpi(str,"embed")==0) return 1;
+	}
+	else if(str[0]=='f'||str[0]=='F'){
+		if(lstrcmpi(str,"fieldset")==0) return 1;
+		if(lstrcmpi(str,"font")==0) return 1;
+		if(lstrcmpi(str,"form")==0) return 1;
+		if(lstrcmpi(str,"frame")==0) return 1;
+		if(lstrcmpi(str,"frameset")==0) return 1;
+	}
+	else if(str[0]=='h'||str[0]=='H'){
+		if(lstrcmpi(str,"h1")==0) return 1;
+		if(lstrcmpi(str,"h2")==0) return 1;
+		if(lstrcmpi(str,"h3")==0) return 1;
+		if(lstrcmpi(str,"h4")==0) return 1;
+		if(lstrcmpi(str,"h5")==0) return 1;
+		if(lstrcmpi(str,"h6")==0) return 1;
+		if(lstrcmpi(str,"head")==0) return 1;
+		if(lstrcmpi(str,"hr")==0) return 1;
+		if(lstrcmpi(str,"html")==0) return 1;
+	}
+	else if(str[0]=='i'||str[0]=='I'){
+		if(lstrcmpi(str,"i")==0) return 1;
+		if(lstrcmpi(str,"iframe")==0) return 1;
+		if(lstrcmpi(str,"ilayer")==0) return 1;
+		if(lstrcmpi(str,"img")==0) return 1;
+		if(lstrcmpi(str,"input")==0) return 1;
+		if(lstrcmpi(str,"ins")==0) return 1;
+		if(lstrcmpi(str,"isindex")==0) return 1;
+	}
+	else if(str[0]=='k'||str[0]=='K'){
+		if(lstrcmpi(str,"kbd")==0) return 1;
+		if(lstrcmpi(str,"keygen")==0) return 1;
+	}
+	else if(str[0]=='l'||str[0]=='L'){
+		if(lstrcmpi(str,"label")==0) return 1;
+		if(lstrcmpi(str,"layer")==0) return 1;
+		if(lstrcmpi(str,"legend")==0) return 1;
+		if(lstrcmpi(str,"li")==0) return 1;
+		if(lstrcmpi(str,"link")==0) return 1;
+		if(lstrcmpi(str,"listing")==0) return 1;
+	}
+	else if(str[0]=='m'||str[0]=='M'){
+		if(lstrcmpi(str,"map")==0) return 1;
+		if(lstrcmpi(str,"marquee")==0) return 1;
+		if(lstrcmpi(str,"menu")==0) return 1;
+		if(lstrcmpi(str,"meta")==0) return 1;
+		if(lstrcmpi(str,"multicol")==0) return 1;
+	}
+	else if(str[0]=='n'||str[0]=='N'){
+		if(lstrcmpi(str,"nobr")==0) return 1;
+		if(lstrcmpi(str,"noembed")==0) return 1;
+		if(lstrcmpi(str,"noframes")==0) return 1;
+		if(lstrcmpi(str,"nolayer")==0) return 1;
+		if(lstrcmpi(str,"noscript")==0) return 1;
+	}
+	else if(str[0]=='o'||str[0]=='O'){
+		if(lstrcmpi(str,"object")==0) return 1;
+		if(lstrcmpi(str,"ol")==0) return 1;
+		if(lstrcmpi(str,"optgroup")==0) return 1;
+		if(lstrcmpi(str,"option")==0) return 1;
+	}
+	else if(str[0]=='p'||str[0]=='P'){
+		if(lstrcmpi(str,"p")==0) return 1;
+		if(lstrcmpi(str,"param")==0) return 1;
+		if(lstrcmpi(str,"plaintext")==0) return 1;
+		if(lstrcmpi(str,"pre")==0) return 1;
+	}
+	else if(str[0]=='q'||str[0]=='Q'){
+		if(lstrcmpi(str,"q")==0) return 1;
+	}
+	else if(str[0]=='r'||str[0]=='R'){
+		if(lstrcmpi(str,"rb")==0) return 1;
+		if(lstrcmpi(str,"rp")==0) return 1;
+		if(lstrcmpi(str,"rt")==0) return 1;
+		if(lstrcmpi(str,"ruby")==0) return 1;
+	}
+	else if(str[0]=='s'||str[0]=='S'){
+		if(lstrcmpi(str,"s")==0) return 1;
+		if(lstrcmpi(str,"samp")==0) return 1;
+		if(lstrcmpi(str,"script")==0) return 1;
+		if(lstrcmpi(str,"select")==0) return 1;
+		if(lstrcmpi(str,"server")==0) return 1;
+		if(lstrcmpi(str,"small")==0) return 1;
+		if(lstrcmpi(str,"span")==0) return 1;
+		if(lstrcmpi(str,"strike")==0) return 1;
+		if(lstrcmpi(str,"strong")==0) return 1;
+		if(lstrcmpi(str,"style")==0) return 1;
+		if(lstrcmpi(str,"sub")==0) return 1;
+		if(lstrcmpi(str,"sup")==0) return 1;
+	}
+	else if(str[0]=='t'||str[0]=='T'){
+		if(lstrcmpi(str,"table")==0) return 1;
+		if(lstrcmpi(str,"tbody")==0) return 1;
+		if(lstrcmpi(str,"td")==0) return 1;
+		if(lstrcmpi(str,"textarea")==0) return 1;
+		if(lstrcmpi(str,"tfoot")==0) return 1;
+		if(lstrcmpi(str,"th")==0) return 1;
+		if(lstrcmpi(str,"thead")==0) return 1;
+		if(lstrcmpi(str,"title")==0) return 1;
+		if(lstrcmpi(str,"tr")==0) return 1;
+		if(lstrcmpi(str,"tt")==0) return 1;
+	}
+	else if(str[0]=='u'||str[0]=='U'){
+		if(lstrcmpi(str,"u")==0) return 1;
+		if(lstrcmpi(str,"ul")==0) return 1;
+	}
+	else if(str[0]=='v'||str[0]=='V'){
+		if(lstrcmpi(str,"var")==0) return 1;
+	}
+	else if(str[0]=='w'||str[0]=='W'){
+		if(lstrcmpi(str,"wbr")==0) return 1;
+	}
+	else if(str[0]=='x'||str[0]=='X'){
+		if(lstrcmpi(str,"xmp")==0) return 1;
+	}
+
+
+	return 0;
+}
+int IsHtmlReservedWord(char *str){
+	return IsHtmlTagWord(str);
+}
+
+void AddComplimentInfo(char *str,DWORD dwAccess){
+	ComplementWndInfo.pMemberInfo=(MEMBERINFO *)HeapReAlloc(hHeap,0,
+		ComplementWndInfo.pMemberInfo,
+		(ComplementWndInfo.MemberNum+1)*sizeof(MEMBERINFO));
+
+	ComplementWndInfo.pMemberInfo[ComplementWndInfo.MemberNum].pName=
+		(char *)HeapAlloc(hHeap,0,lstrlen(str)+1);
+	lstrcpy(
+		ComplementWndInfo.pMemberInfo[ComplementWndInfo.MemberNum].pName,
+		str);
+
+	ComplementWndInfo.pMemberInfo[ComplementWndInfo.MemberNum].dwProc=0;
+
+	ComplementWndInfo.pMemberInfo[ComplementWndInfo.MemberNum].dwAccess=dwAccess;
+
+	ComplementWndInfo.MemberNum++;
+}
+
+BOOL GetNowTagInfo(char *buffer,int p){
+	int i,i2,i3;
+	for(i=p;i>0;i--){
+		if(buffer[i]=='\r'&&buffer[i+1]=='\n') break;
+	}
+
+	int IsStr=0;
+	char szTag[1024];
+	szTag[0]=0;
+	for(;i<p;i++){
+		if(buffer[i]=='\0') break;
+		if(buffer[i]=='<'){
+			IsStr=0;
+
+			i2=i+1;
+			while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+
+			if(IsAlphabet(buffer[i2])){
+				for(i3=0;;i2++,i3++){
+					if(!IsAlphabet(buffer[i2])){
+						szTag[i3]=0;
+						break;
+					}
+					szTag[i3]=buffer[i2];
+				}
+			}
+			else szTag[0]=0;
+		}
+		if(buffer[i]=='>'&&IsStr==0){
+			szTag[0]=0;
+		}
+
+		if(buffer[i]=='\"'&&szTag[0]){
+			//タグ内のダブルクォート
+			IsStr^=1;
+		}
+	}
+
+	if(IsStr){
+		//文字列内では補完しない
+		return 0;
+	}
+
+	if(!IsHtmlTagWord(szTag)){
+		//未登録のタグはサポートしない
+		return 0;
+	}
+
+	ComplementWndInfo.pMemberInfo=(MEMBERINFO *)HeapAlloc(hHeap,0,1);
+	ComplementWndInfo.MemberNum=0;
+
+	BOOL bUseGeneralParam=1;
+	if(lstrcmpi(szTag,"a")==0){
+		ADD_TAG_PARAM("href");
+		ADD_TAG_PARAM("name");
+		ADD_TAG_PARAM("target");
+	}
+	else if(lstrcmpi(szTag,"applet")==0){
+		ADD_TAG_PARAM("alt");
+		ADD_TAG_PARAM("archive");
+		ADD_TAG_PARAM("code");
+		ADD_TAG_PARAM("codebase");
+		ADD_TAG_PARAM("mayscript");
+		ADD_TAG_PARAM("object");
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("hspace");
+		ADD_TAG_PARAM("vspace");
+		ADD_TAG_PARAM("width");
+	}
+	else if(lstrcmpi(szTag,"area")==0){
+		ADD_TAG_PARAM("shape");
+		ADD_TAG_PARAM("coords");
+		ADD_TAG_PARAM("href");
+		ADD_TAG_PARAM("alt");
+		ADD_TAG_PARAM("accesskey");
+		ADD_TAG_PARAM("nohref");
+		ADD_TAG_PARAM("hreflang");
+		ADD_TAG_PARAM("methods");
+		ADD_TAG_PARAM("rel");
+		ADD_TAG_PARAM("rev");
+		ADD_TAG_PARAM("tabindex");
+		ADD_TAG_PARAM("target");
+	}
+	else if(lstrcmpi(szTag,"base")==0){
+		ADD_TAG_PARAM("href");
+		ADD_TAG_PARAM("target");
+
+		bUseGeneralParam=0;
+	}
+	else if(lstrcmpi(szTag,"basefont")==0){
+		ADD_TAG_PARAM("size");
+		ADD_TAG_PARAM("color");
+		ADD_TAG_PARAM("face");
+	}
+	else if(lstrcmpi(szTag,"bgsound")==0){
+		ADD_TAG_PARAM("balance");
+		ADD_TAG_PARAM("loop");
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("volume");
+	}
+	else if(lstrcmpi(szTag,"blockquote")==0){
+		ADD_TAG_PARAM("cite");
+	}
+	else if(lstrcmpi(szTag,"body")==0){
+		ADD_TAG_PARAM("text");
+		ADD_TAG_PARAM("link");
+		ADD_TAG_PARAM("vlink");
+		ADD_TAG_PARAM("alink");
+		ADD_TAG_PARAM("bgcolor");
+		ADD_TAG_PARAM("background");
+		ADD_TAG_PARAM("bgproperties");
+		ADD_TAG_PARAM("marginheight");
+		ADD_TAG_PARAM("marginwidth");
+		ADD_TAG_PARAM("topmargin");
+		ADD_TAG_PARAM("leftmargin");
+		ADD_TAG_PARAM("bottommargin");
+		ADD_TAG_PARAM("rightmargin");
+		ADD_TAG_PARAM("scroll");
+	}
+	else if(lstrcmpi(szTag,"br")==0){
+		ADD_TAG_PARAM("/");
+		ADD_TAG_PARAM("clear");
+	}
+	else if(lstrcmpi(szTag,"button")==0){
+		ADD_TAG_PARAM("accesskey");
+		ADD_TAG_PARAM("disabled");
+		ADD_TAG_PARAM("tabindex");
+		ADD_TAG_PARAM("type");
+		ADD_TAG_PARAM("value");
+	}
+	else if(lstrcmpi(szTag,"caption")==0){
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("valign");
+	}
+	else if(lstrcmpi(szTag,"col")==0){
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("bgcolor");
+		ADD_TAG_PARAM("char");
+		ADD_TAG_PARAM("charoff");
+		ADD_TAG_PARAM("span");
+		ADD_TAG_PARAM("valign");
+		ADD_TAG_PARAM("width");
+	}
+	else if(lstrcmpi(szTag,"colgroup")==0){
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("bgcolor");
+		ADD_TAG_PARAM("char");
+		ADD_TAG_PARAM("charoff");
+		ADD_TAG_PARAM("span");
+		ADD_TAG_PARAM("valign");
+		ADD_TAG_PARAM("width");
+	}
+	else if(lstrcmpi(szTag,"del")==0){
+		ADD_TAG_PARAM("cite");
+		ADD_TAG_PARAM("datetime");
+	}
+	else if(lstrcmpi(szTag,"div")==0){
+		ADD_TAG_PARAM("align");
+	}
+	else if(lstrcmpi(szTag,"dl")==0){
+		ADD_TAG_PARAM("compact");
+	}
+	else if(lstrcmpi(szTag,"embed")==0){
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("width");
+		ADD_TAG_PARAM("hspace");
+		ADD_TAG_PARAM("vspace");
+		ADD_TAG_PARAM("compact");
+		ADD_TAG_PARAM("units");
+		ADD_TAG_PARAM("border");
+		ADD_TAG_PARAM("frameborder");
+		ADD_TAG_PARAM("hidden");
+		ADD_TAG_PARAM("alt");
+		ADD_TAG_PARAM("code");
+		ADD_TAG_PARAM("codebase");
+		ADD_TAG_PARAM("type");
+		ADD_TAG_PARAM("palette");
+		ADD_TAG_PARAM("pluginspage");
+		ADD_TAG_PARAM("pluginurl");
+		ADD_TAG_PARAM("autostart");
+		ADD_TAG_PARAM("autoplay");
+		ADD_TAG_PARAM("control");
+		ADD_TAG_PARAM("loop");
+		ADD_TAG_PARAM("repeat");
+		ADD_TAG_PARAM("textfocus");
+	}
+	else if(lstrcmpi(szTag,"fieldset")==0){
+		ADD_TAG_PARAM("align");
+	}
+	else if(lstrcmpi(szTag,"font")==0){
+		ADD_TAG_PARAM("size");
+		ADD_TAG_PARAM("color");
+		ADD_TAG_PARAM("face");
+	}
+	else if(lstrcmpi(szTag,"form")==0){
+		ADD_TAG_PARAM("action");
+		ADD_TAG_PARAM("method");
+		ADD_TAG_PARAM("target");
+		ADD_TAG_PARAM("accept");
+		ADD_TAG_PARAM("accept-charset");
+		ADD_TAG_PARAM("autocomplete");
+		ADD_TAG_PARAM("enctype");
+		ADD_TAG_PARAM("urn");
+	}
+	else if(lstrcmpi(szTag,"frame")==0){
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("width");
+		ADD_TAG_PARAM("bordercolor");
+		ADD_TAG_PARAM("frameborder");
+		ADD_TAG_PARAM("marginheight");
+		ADD_TAG_PARAM("marginwidth");
+		ADD_TAG_PARAM("noresize");
+		ADD_TAG_PARAM("longdesc");
+		ADD_TAG_PARAM("scrolling");
+		ADD_TAG_PARAM("allowtransparency");
+	}
+	else if(lstrcmpi(szTag,"frameset")==0){
+		ADD_TAG_PARAM("border");
+		ADD_TAG_PARAM("bordercolor");
+		ADD_TAG_PARAM("cols");
+		ADD_TAG_PARAM("frameborder");
+		ADD_TAG_PARAM("framespacing");
+		ADD_TAG_PARAM("rows");
+	}
+	else if(lstrcmpi(szTag,"h1")==0||
+		lstrcmpi(szTag,"h2")==0||
+		lstrcmpi(szTag,"h3")==0||
+		lstrcmpi(szTag,"h4")==0||
+		lstrcmpi(szTag,"h5")==0||
+		lstrcmpi(szTag,"h6")==0){
+		ADD_TAG_PARAM("align");
+	}
+	else if(lstrcmpi(szTag,"hr")==0){
+		ADD_TAG_PARAM("/");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("color");
+		ADD_TAG_PARAM("noshade");
+		ADD_TAG_PARAM("size");
+		ADD_TAG_PARAM("width");
+	}
+	else if(lstrcmpi(szTag,"iframe")==0){
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("width");
+		ADD_TAG_PARAM("hspace");
+		ADD_TAG_PARAM("vspace");
+		ADD_TAG_PARAM("marginheight");
+		ADD_TAG_PARAM("marginwidth");
+		ADD_TAG_PARAM("border");
+		ADD_TAG_PARAM("bordercolor");
+		ADD_TAG_PARAM("frameborder");
+		ADD_TAG_PARAM("framespacing");
+		ADD_TAG_PARAM("longdesc");
+		ADD_TAG_PARAM("scrolling");
+	}
+	else if(lstrcmpi(szTag,"img")==0){
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("alt");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("width");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("border");
+		ADD_TAG_PARAM("galleryimg");
+		ADD_TAG_PARAM("hspace");
+		ADD_TAG_PARAM("longdesc");
+		ADD_TAG_PARAM("lowsrc");
+		ADD_TAG_PARAM("suppress");
+		ADD_TAG_PARAM("vspace");
+		ADD_TAG_PARAM("ismap");
+		ADD_TAG_PARAM("usemap");
+		ADD_TAG_PARAM("controls");
+		ADD_TAG_PARAM("dynsrc");
+		ADD_TAG_PARAM("loop");
+		ADD_TAG_PARAM("start");
+	}
+	else if(lstrcmpi(szTag,"input")==0){
+		ADD_TAG_PARAM("accesskey");
+		ADD_TAG_PARAM("disabled");
+		ADD_TAG_PARAM("tabindex");
+		ADD_TAG_PARAM("type");
+		ADD_TAG_PARAM("autocomplete");
+		ADD_TAG_PARAM("istyle");
+		ADD_TAG_PARAM("maxlength");
+		ADD_TAG_PARAM("readonly");
+		ADD_TAG_PARAM("value");
+		ADD_TAG_PARAM("accept");
+		ADD_TAG_PARAM("checked");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("alt");
+		ADD_TAG_PARAM("border");
+		ADD_TAG_PARAM("dynsrc");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("ismap");
+		ADD_TAG_PARAM("lowsrc");
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("width");
+	}
+	else if(lstrcmpi(szTag,"ins")==0){
+		ADD_TAG_PARAM("cite");
+		ADD_TAG_PARAM("datetime");
+	}
+	else if(lstrcmpi(szTag,"label")==0){
+		ADD_TAG_PARAM("accesskey");
+		ADD_TAG_PARAM("for");
+	}
+	else if(lstrcmpi(szTag,"legend")==0){
+		ADD_TAG_PARAM("accesskey");
+		ADD_TAG_PARAM("align");
+	}
+	else if(lstrcmpi(szTag,"li")==0){
+		ADD_TAG_PARAM("type");
+		ADD_TAG_PARAM("value");
+	}
+	else if(lstrcmpi(szTag,"link")==0){
+		ADD_TAG_PARAM("rel");
+		ADD_TAG_PARAM("href");
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("charset");
+		ADD_TAG_PARAM("media");
+		ADD_TAG_PARAM("type");
+	}
+	else if(lstrcmpi(szTag,"marquee")==0){
+		ADD_TAG_PARAM("behavior");
+		ADD_TAG_PARAM("bgcolor");
+		ADD_TAG_PARAM("direction");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("hspace");
+		ADD_TAG_PARAM("loop");
+		ADD_TAG_PARAM("scrollamount");
+		ADD_TAG_PARAM("scrolldelay");
+		ADD_TAG_PARAM("truespeed");
+		ADD_TAG_PARAM("vspace");
+		ADD_TAG_PARAM("width");
+	}
+	else if(lstrcmpi(szTag,"meta")==0){
+		ADD_TAG_PARAM("name");
+		ADD_TAG_PARAM("http-equiv");
+		ADD_TAG_PARAM("content");
+	}
+	else if(lstrcmpi(szTag,"object")==0){
+		ADD_TAG_PARAM("alt");
+		ADD_TAG_PARAM("archive");
+		ADD_TAG_PARAM("border");
+		ADD_TAG_PARAM("classid");
+		ADD_TAG_PARAM("code");
+		ADD_TAG_PARAM("codebase");
+		ADD_TAG_PARAM("codetype");
+		ADD_TAG_PARAM("data");
+		ADD_TAG_PARAM("declare");
+		ADD_TAG_PARAM("name");
+		ADD_TAG_PARAM("standby");
+		ADD_TAG_PARAM("tabindex");
+		ADD_TAG_PARAM("type");
+		ADD_TAG_PARAM("usemap");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("width");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("hspace");
+		ADD_TAG_PARAM("vspace");
+	}
+	else if(lstrcmpi(szTag,"ol")==0){
+		ADD_TAG_PARAM("compact");
+		ADD_TAG_PARAM("start");
+		ADD_TAG_PARAM("type");
+	}
+	else if(lstrcmpi(szTag,"option")==0){
+		ADD_TAG_PARAM("disabled");
+		ADD_TAG_PARAM("label");
+		ADD_TAG_PARAM("selected");
+		ADD_TAG_PARAM("value");
+	}
+	else if(lstrcmpi(szTag,"p")==0){
+		ADD_TAG_PARAM("align");
+	}
+	else if(lstrcmpi(szTag,"param")==0){
+		ADD_TAG_PARAM("name");
+		ADD_TAG_PARAM("value");
+		ADD_TAG_PARAM("valuetype");
+		ADD_TAG_PARAM("type");
+	}
+	else if(lstrcmpi(szTag,"pre")==0){
+		ADD_TAG_PARAM("cols");
+		ADD_TAG_PARAM("width");
+		ADD_TAG_PARAM("wrap");
+	}
+	else if(lstrcmpi(szTag,"script")==0){
+		ADD_TAG_PARAM("charset");
+		ADD_TAG_PARAM("defer");
+		ADD_TAG_PARAM("event");
+		ADD_TAG_PARAM("for");
+		ADD_TAG_PARAM("src");
+		ADD_TAG_PARAM("type");
+	}
+	else if(lstrcmpi(szTag,"select")==0){
+		ADD_TAG_PARAM("accesskey");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("disabled");
+		ADD_TAG_PARAM("multiple");
+		ADD_TAG_PARAM("size");
+		ADD_TAG_PARAM("tabindex");
+	}
+	else if(lstrcmpi(szTag,"style")==0){
+		ADD_TAG_PARAM("disabled");
+		ADD_TAG_PARAM("media");
+		ADD_TAG_PARAM("type");
+	}
+	else if(lstrcmpi(szTag,"table")==0){
+		ADD_TAG_PARAM("border");
+		ADD_TAG_PARAM("bordercolor");
+		ADD_TAG_PARAM("bordercolordark");
+		ADD_TAG_PARAM("bordercolorlight");
+		ADD_TAG_PARAM("frame");
+		ADD_TAG_PARAM("rules");
+		ADD_TAG_PARAM("background");
+		ADD_TAG_PARAM("bgcolor");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("cellpadding");
+		ADD_TAG_PARAM("cellspacing");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("hspace");
+		ADD_TAG_PARAM("vspace");
+		ADD_TAG_PARAM("width");
+		ADD_TAG_PARAM("cols");
+		ADD_TAG_PARAM("summary");
+	}
+	else if(lstrcmpi(szTag,"tbody")==0||
+		lstrcmpi(szTag,"tfoot")==0||
+		lstrcmpi(szTag,"thead")==0){
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("bgcolor");
+		ADD_TAG_PARAM("char");
+		ADD_TAG_PARAM("charoff");
+		ADD_TAG_PARAM("valign");
+	}
+	else if(lstrcmpi(szTag,"td")==0||
+		lstrcmpi(szTag,"th")==0){
+		ADD_TAG_PARAM("bordercolor");
+		ADD_TAG_PARAM("bordercolordark");
+		ADD_TAG_PARAM("bordercolorlight");
+		ADD_TAG_PARAM("background");
+		ADD_TAG_PARAM("bgcolor");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("valign");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("width");
+		ADD_TAG_PARAM("nowrap");
+		ADD_TAG_PARAM("char");
+		ADD_TAG_PARAM("charoff");
+		ADD_TAG_PARAM("colspan");
+		ADD_TAG_PARAM("rowspan");
+		ADD_TAG_PARAM("abbr");
+		ADD_TAG_PARAM("axis");
+		ADD_TAG_PARAM("headers");
+		ADD_TAG_PARAM("scope");
+	}
+	else if(lstrcmpi(szTag,"textarea")==0){
+		ADD_TAG_PARAM("accesskey");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("cols");
+		ADD_TAG_PARAM("istyle");
+		ADD_TAG_PARAM("readonly");
+		ADD_TAG_PARAM("rows");
+		ADD_TAG_PARAM("wrap");
+		ADD_TAG_PARAM("tabindex");
+	}
+	else if(lstrcmpi(szTag,"title")==0){
+		bUseGeneralParam=0;
+	}
+	else if(lstrcmpi(szTag,"tr")==0){
+		ADD_TAG_PARAM("bordercolor");
+		ADD_TAG_PARAM("bordercolordark");
+		ADD_TAG_PARAM("bordercolorlight");
+		ADD_TAG_PARAM("bgcolor");
+		ADD_TAG_PARAM("align");
+		ADD_TAG_PARAM("char");
+		ADD_TAG_PARAM("charoff");
+		ADD_TAG_PARAM("height");
+		ADD_TAG_PARAM("valign");
+	}
+	else if(lstrcmpi(szTag,"ul")==0){
+		ADD_TAG_PARAM("compact");
+		ADD_TAG_PARAM("type");
+	}
+
+
+
+
+	if(bUseGeneralParam){
+		//一般属性
+		AddComplimentInfo("class",ACCESS_HTML_GENERAL_PARAM);
+		AddComplimentInfo("id",ACCESS_HTML_GENERAL_PARAM);
+		AddComplimentInfo("style",ACCESS_HTML_GENERAL_PARAM);
+	}
+
+	return 1;
+}
Index: /ProjectEditor/HtmlAnalysis.h
===================================================================
--- /ProjectEditor/HtmlAnalysis.h	(revision 3)
+++ /ProjectEditor/HtmlAnalysis.h	(revision 3)
@@ -0,0 +1,2 @@
+int IsHtmlReservedWord(char *str);
+BOOL GetNowTagInfo(char *buffer,int p);
Index: /ProjectEditor/IconEditor.cpp
===================================================================
--- /ProjectEditor/IconEditor.cpp	(revision 3)
+++ /ProjectEditor/IconEditor.cpp	(revision 3)
@@ -0,0 +1,549 @@
+#include "Common.h"
+
+RGBQUAD DefaultColorTable16[16]={
+	0,0,0,0,
+	0,0,128,0,
+	0,128,0,0,
+	0,128,128,0,
+	128,0,0,0,
+	128,0,128,0,
+	128,128,0,0,
+	128,128,128,0,
+	192,192,192,0,
+	0,0,255,0,
+	0,255,0,0,
+	0,255,255,0,
+	255,0,0,0,
+	255,0,255,0,
+	255,255,0,0,
+	255,255,255,0,
+};
+RGBQUAD DefaultColorTable256[256];	//ファイルから読み込む（SetupProjectEditor関数を参照）
+
+void ResizeIconWindow(HWND hMain,HWND hToolDlg,HWND hColorDlg,int width,int height){
+	MoveWindow(hMain,0,0,width-170,height-50,1);
+	MoveWindow(hToolDlg,width-170,0,170,height,1);
+	MoveWindow(hColorDlg,0,height-50,width-170,50,1);
+}
+void ResetIconType(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	HWND hCombo;
+	char temporary[MAX_PATH];
+	BITMAPINFOHEADER *pBmpInfoHdr;
+
+	hCombo=GetDlgItem(MdiInfo[WndNum].MdiIconEditInfo->hToolDlg,IDC_ICONTYPECOMBO);
+
+	for(i=0;i<MdiInfo[WndNum].MdiIconEditInfo->num;i++){
+		pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i];
+
+		//例: "32*32 (xxxx色)"
+		sprintf(temporary,"%d*%d (%d%s)",
+			pBmpInfoHdr->biWidth,
+			pBmpInfoHdr->biHeight/2,
+			(int)pow((double)2,(double)pBmpInfoHdr->biBitCount),
+			STRING_UNIT_COLORS);
+		SendMessage(hCombo,CB_ADDSTRING,0,(long)temporary);
+	}
+	SendMessage(hCombo,CB_SETCURSEL,0,0);
+}
+BYTE *CreateIconType(int IconType,DWORD *dwBytes){
+	extern HANDLE hHeap;
+	int i,width,BitCount,dwBytesInRes;
+	BITMAPINFOHEADER *pBmpHdr;
+	BYTE *pImageBuffer;
+
+	switch(IconType){
+		case ICONTYPE_16_16:
+			width=16;
+			BitCount=4;
+			break;
+		case ICONTYPE_16_256:
+			width=16;
+			BitCount=8;
+			break;
+		case ICONTYPE_32_16:
+			width=32;
+			BitCount=4;
+			break;
+		case ICONTYPE_32_256:
+			width=32;
+			BitCount=8;
+			break;
+	}
+
+	//イメージサイズを計算
+	dwBytesInRes=sizeof(BITMAPINFOHEADER)+
+		sizeof(RGBQUAD)*(int)pow((double)2,(double)BitCount)+
+		BitCount*width*width/8;
+	if(width==16) dwBytesInRes+=width*width*2/8;
+	else dwBytesInRes+=width*width/8;
+	*dwBytes=dwBytesInRes;
+
+	//メモリ領域を確保
+	pImageBuffer=(BYTE *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,dwBytesInRes);
+
+	//ヘッダ情報をセット
+	pBmpHdr=(BITMAPINFOHEADER *)pImageBuffer;
+	pBmpHdr->biSize=sizeof(BITMAPINFOHEADER);
+	pBmpHdr->biWidth=width;
+	pBmpHdr->biHeight=width*2;
+	pBmpHdr->biPlanes=1;
+	pBmpHdr->biBitCount=BitCount;
+
+	//カラーテーブルをセット
+	RGBQUAD *pRgbq;
+	pRgbq=(RGBQUAD *)(pImageBuffer+sizeof(BITMAPINFOHEADER));
+	if(BitCount==4){
+		//16色
+		memcpy(pRgbq,DefaultColorTable16,sizeof(RGBQUAD)*16);
+	}
+	else if(BitCount==8){
+		//256色
+		memcpy(pRgbq,DefaultColorTable256,sizeof(RGBQUAD)*256);
+	}
+
+	//マスクビットをセット
+	BYTE *pMaskBuf;
+	pMaskBuf=pImageBuffer+
+		sizeof(BITMAPINFOHEADER)+
+		sizeof(RGBQUAD)*(int)pow((double)2,(double)BitCount)+
+		BitCount*width*width/8;
+	if(width==16){
+		//一行の4バイト境界を考慮
+		for(i=0;i<16;i++){
+			pMaskBuf[i*4]=0xFF;
+			pMaskBuf[i*4+1]=0xFF;
+			pMaskBuf[i*4+2]=0;
+			pMaskBuf[i*4+3]=0;
+		}
+	}
+	else memset(pMaskBuf,0xFF,width*width/8);
+
+	return pImageBuffer;
+}
+void AddIconType(int WndNum,int IconType){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,width,BitCount;
+
+	switch(IconType){
+		case ICONTYPE_16_16:
+			width=16;
+			BitCount=4;
+			break;
+		case ICONTYPE_16_256:
+			width=16;
+			BitCount=8;
+			break;
+		case ICONTYPE_32_16:
+			width=32;
+			BitCount=4;
+			break;
+		case ICONTYPE_32_256:
+			width=32;
+			BitCount=8;
+			break;
+	}
+
+	MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->num]=
+		CreateIconType(IconType,
+		&MdiInfo[WndNum].MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum].MdiIconEditInfo->num]);
+
+	//イメージ選択用のメモリを解放
+	if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2)
+		DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+	MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+
+	//アイコンタイプを追加
+	MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum=MdiInfo[WndNum].MdiIconEditInfo->num;
+	MdiInfo[WndNum].MdiIconEditInfo->num++;
+
+	//変更情報を初期化
+	i=MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum;
+	MdiInfo[WndNum].MdiIconEditInfo->undo[i].NowPos=0;
+	memset(MdiInfo[WndNum].MdiIconEditInfo->undo[i].lpData,0,sizeof(BYTE *)*MAX_ICONEDIT_UNDONUM);
+
+	//アイコンタイプコンボボックスに追加
+	char temporary[32];
+	HWND hCombo;
+	hCombo=GetDlgItem(MdiInfo[WndNum].MdiIconEditInfo->hToolDlg,IDC_ICONTYPECOMBO);
+
+	//例: "32*32 (xxxx色)"
+	sprintf(temporary,"%d*%d (%d%s)",
+		width,
+		width,
+		(int)pow((double)2,(double)BitCount),
+		STRING_UNIT_COLORS);
+	i=SendMessage(hCombo,CB_ADDSTRING,0,(long)temporary);
+
+	SendMessage(hCombo,CB_SETCURSEL,i,0);
+
+	//再描画
+	HBRUSH hOldBrush;
+	hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,GetStockObject(WHITE_BRUSH));
+	PatBlt(MdiInfo[WndNum].MdiIconEditInfo->memdc,0,0,400,400,PATCOPY);
+	SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hOldBrush);
+	DrawIconToMemBmp(WndNum,0);
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,1);
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hColorDlg,NULL,0);
+}
+void DeleteIconType(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+
+	//変更情報を解放
+	for(i=0;i<MAX_ICONEDIT_UNDONUM;i++){
+		if(MdiInfo[WndNum].MdiIconEditInfo->undo[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum].lpData[i])
+			HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum].lpData[i]);
+	}
+
+	//メモリを解放
+	HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]);
+
+	//イメージ選択用のメモリを解放
+	if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2)
+		DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+	MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+
+	////////////////////////
+	// アイコンタイプを削除
+	for(i=MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum;i<MdiInfo[WndNum].MdiIconEditInfo->num-1;i++){
+		MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i]=MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i+1];
+		MdiInfo[WndNum].MdiIconEditInfo->dwBytesInRes[i]=MdiInfo[WndNum].MdiIconEditInfo->dwBytesInRes[i+1];
+		MdiInfo[WndNum].MdiIconEditInfo->undo[i]=MdiInfo[WndNum].MdiIconEditInfo->undo[i+1];
+	}
+	MdiInfo[WndNum].MdiIconEditInfo->num--;
+	if(MdiInfo[WndNum].MdiIconEditInfo->num==MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum)
+		MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum=MdiInfo[WndNum].MdiIconEditInfo->num-1;
+
+	//コンボボックスからアイコンタイプを削除
+	HWND hCombo;
+	hCombo=GetDlgItem(MdiInfo[WndNum].MdiIconEditInfo->hToolDlg,IDC_ICONTYPECOMBO);
+	i=SendMessage(hCombo,CB_DELETESTRING,
+		SendMessage(hCombo,CB_GETCURSEL,0,0),
+		0);
+	SendMessage(hCombo,CB_SETCURSEL,MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum,0);
+
+	//再描画
+	HBRUSH hOldBrush;
+	hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,GetStockObject(WHITE_BRUSH));
+	PatBlt(MdiInfo[WndNum].MdiIconEditInfo->memdc,0,0,400,400,PATCOPY);
+	SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hOldBrush);
+	DrawIconToMemBmp(WndNum,0);
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,1);
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hColorDlg,NULL,0);
+}
+void NewIconEditWindow(char *filepath){
+	extern HINSTANCE hInst,hResInst;
+	extern HANDLE hHeap;
+	extern HWND hDocCombo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2,IconNum;
+	char str[MAX_PATH],str2[32],*buffer;
+	BYTE *pImageBuffer[8];
+	DWORD dwBytesInRes[8];
+	HWND hChild;
+	HDC hdc;
+	MDICREATESTRUCT mdic;
+
+	if(filepath){
+
+		//すでに指定されたファイルが開かれている場合
+		hChild=GetWindow(hClient,GW_CHILD);
+		while(hChild){
+			i=GetWndNum(hChild);
+			if(MdiInfo[i].DocType==WNDTYPE_ICONEDIT){
+				if(lstrcmpi(MdiInfo[i].path,filepath)==0) break;
+			}
+			hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+		}
+		if(hChild){
+			BringWindowToTop(hChild);
+			return;
+		}
+
+		//ファイル読み込み（正常に読み込めるかの確認も含む）
+		HANDLE hFile;
+		DWORD dw;
+		hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+		if(hFile==INVALID_HANDLE_VALUE){
+			//"\"%s\" ファイルの読み込みに失敗しました。"
+			sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);
+			MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+		i=GetFileSize(hFile,NULL);
+		buffer=(char *)GlobalAlloc(GMEM_FIXED,i+1);
+		ReadFile(hFile,buffer,i,&dw,NULL);
+		CloseHandle(hFile);
+
+		ICONDIR *pIconDir;
+		ICONDIRENTRY *pIconDirEntry;
+		pIconDir=(ICONDIR *)buffer;
+		IconNum=pIconDir->idCount;
+		for(i=0;i<IconNum;i++){
+			pIconDirEntry=(ICONDIRENTRY *)(buffer+sizeof(ICONDIR)+sizeof(ICONDIRENTRY)*i);
+
+			pImageBuffer[i]=(BYTE *)HeapAlloc(hHeap,0,pIconDirEntry->dwBytesInRes);
+			memcpy(pImageBuffer[i],buffer+pIconDirEntry->dwImageOffset,pIconDirEntry->dwBytesInRes);
+
+			dwBytesInRes[i]=pIconDirEntry->dwBytesInRes;
+		}
+
+		_splitpath(filepath,NULL,NULL,str,str2);
+		lstrcat(str,str2);
+		mdic.szTitle=str;
+	}
+	else{
+		extern int DocumentCounter;
+		buffer=0;
+		DocumentCounter++;
+		sprintf(str,"Icon[%d]",DocumentCounter);
+		mdic.szTitle=str;
+
+		IconNum=1;
+		pImageBuffer[0]=CreateIconType(ICONTYPE_32_16,&dwBytesInRes[0]);
+	}
+	mdic.szClass="MDIClientWindow_IconEdit";
+	mdic.hOwner=hInst;
+	mdic.x=CW_USEDEFAULT;
+	mdic.y=CW_USEDEFAULT;
+	mdic.cx=CW_USEDEFAULT;
+	mdic.cy=CW_USEDEFAULT;
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	if(IsWindow(hChild)){
+		if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
+		else mdic.style=0;
+	}
+	else{
+		if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE;
+		else mdic.style=0;
+	}
+
+	mdic.lParam=0;
+	hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic);	//ウィンドウ作成
+
+	////////////////////
+	//子ウィンドウ作成
+
+	//エディタ中央部分を作成
+	HWND hMain;
+	hMain=CreateWindowEx(WS_EX_CLIENTEDGE,"IconEditWindowProc",NULL,
+		WS_CHILD|WS_VISIBLE,
+		0,0,0,0,
+		hChild,NULL,hInst,NULL);
+
+	//ツールダイアログ部分を作成
+	HWND hToolDlg;
+	hToolDlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_ICONEDIT_TOOL),hChild,(DLGPROC)DlgIconToolProc);
+
+	//ツールダイアログのボタン部分を作成
+	HWND hButtonsDlg;
+	hButtonsDlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_ICONEDIT_BUTTONS),hToolDlg,(DLGPROC)DlgIconButtons);
+
+	//カラーテーブルダイアログ部分を作成
+	HWND hColorDlg;
+	hColorDlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_ICONEDIT_COLOR),hChild,(DLGPROC)DlgIconColorProc);
+
+	//ウィンドウのID登録
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd==0){
+			MdiInfo[i].hwnd=hChild;
+			MdiInfo[i].DocType=WNDTYPE_ICONEDIT;
+			MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(str)+1);
+			lstrcpy(MdiInfo[i].title,str);
+			if(filepath){
+				MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(filepath)+1);
+				lstrcpy(MdiInfo[i].path,filepath);
+			}
+			else MdiInfo[i].path=(char *)GlobalAlloc(GPTR,1);
+
+			MdiInfo[i].edit_undo=(TEXTEDIT_UNDOSTATE *)GlobalAlloc(GPTR,sizeof(TEXTEDIT_UNDOSTATE));
+			MdiInfo[i].edit_undo->NowPos=0;
+
+			MdiInfo[i].MdiIconEditInfo=(MDIICONEDITINFO *)HeapAlloc(hHeap,0,sizeof(MDIICONEDITINFO));
+			MdiInfo[i].MdiIconEditInfo->hMain=hMain;
+			MdiInfo[i].MdiIconEditInfo->hToolDlg=hToolDlg;
+			MdiInfo[i].MdiIconEditInfo->hButtonsDlg=hButtonsDlg;
+			MdiInfo[i].MdiIconEditInfo->hColorDlg=hColorDlg;
+			hdc=GetDC(hMain);
+			MdiInfo[i].MdiIconEditInfo->memdc=CreateCompatibleDC(hdc);
+			MdiInfo[i].MdiIconEditInfo->hMemBmp=CreateCompatibleBitmap(hdc,600,400);
+			SelectObject(MdiInfo[i].MdiIconEditInfo->memdc,MdiInfo[i].MdiIconEditInfo->hMemBmp);
+			ReleaseDC(hMain,hdc);
+
+			MdiInfo[i].MdiIconEditInfo->SelectLevel=0;
+
+			MdiInfo[i].MdiIconEditInfo->num=IconNum;
+			MdiInfo[i].MdiIconEditInfo->SelectIconNum=0;
+			memcpy(MdiInfo[i].MdiIconEditInfo->pIconImage,pImageBuffer,sizeof(DWORD)*IconNum);
+
+			memcpy(MdiInfo[i].MdiIconEditInfo->dwBytesInRes,dwBytesInRes,sizeof(DWORD)*IconNum);
+
+			MdiInfo[i].MdiIconEditInfo->NowTool=IDC_TOOL_PEN;
+			MdiInfo[i].MdiIconEditInfo->MainColor=RGB(0,0,0);
+			extern COLORREF TransparentClrRef;
+			MdiInfo[i].MdiIconEditInfo->SubColor=TransparentClrRef;
+
+			for(i2=0;i2<MdiInfo[i].MdiIconEditInfo->num;i2++){
+				MdiInfo[i].MdiIconEditInfo->undo[i2].NowPos=0;
+				memset(MdiInfo[i].MdiIconEditInfo->undo[i2].lpData,0,sizeof(BYTE *)*MAX_ICONEDIT_UNDONUM);
+			}
+			MdiInfo[i].MdiIconEditInfo->bModify=0;
+			break;
+		}
+	}
+
+	//メモリへ初期描画を行う
+	HBRUSH hOldBrush;
+	hOldBrush=(HBRUSH)SelectObject(MdiInfo[i].MdiIconEditInfo->memdc,GetStockObject(WHITE_BRUSH));
+	PatBlt(MdiInfo[i].MdiIconEditInfo->memdc,0,0,600,400,PATCOPY);
+	SelectObject(MdiInfo[i].MdiIconEditInfo->memdc,hOldBrush);
+	DrawIconToMemBmp(i,0);
+
+	//ウィンドウ位置を初期化
+	RECT rc;
+	GetClientRect(hChild,&rc);
+	ResizeIconWindow(hMain,hToolDlg,hColorDlg,rc.right,rc.bottom);
+
+	//アイコンタイプコンボボックスをセット
+	ResetIconType(i);
+
+	if(MdiInfo[i].MdiIconEditInfo->num<=1)
+		EnableWindow(GetDlgItem(hToolDlg,IDC_DELETE_ICONTYPE),0);
+
+	//Docコンボボックスに追加
+	i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
+	SendMessage(hDocCombo,CB_SETCURSEL,i,0);
+
+	//タブに追加
+	pobj_MainTab->insert(str,1);
+
+	SetStatusText(NULL);
+
+	//メニュー状態を設定
+	ResetState_DocMenu();
+}
+void SaveIconFile(char *filepath,HWND hwnd){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2,WndNum;
+	char buffer[8192],temporary[MAX_PATH];
+	int ImgBufSize[8];
+
+	WndNum=GetWndNum(hwnd);
+
+	i2=0;
+
+	///////////
+	// ICONDIR
+	*((WORD *)(buffer+i2))=0;	//idReserved
+	i2+=sizeof(WORD);
+	*((WORD *)(buffer+i2))=1;	//idType
+	i2+=sizeof(WORD);
+	*((WORD *)(buffer+i2))=MdiInfo[WndNum].MdiIconEditInfo->num;	//idCount
+	i2+=sizeof(WORD);
+
+	////////////////
+	// ICONDIRENTRY
+	ICONDIRENTRY IconDirEntry;
+	memset(&IconDirEntry,0,sizeof(ICONDIRENTRY));
+
+	//イメージバッファの初期位置
+	IconDirEntry.dwImageOffset=sizeof(ICONDIR)+
+		sizeof(ICONDIRENTRY)*MdiInfo[WndNum].MdiIconEditInfo->num;
+
+	for(i=0;i<MdiInfo[WndNum].MdiIconEditInfo->num;i++){
+		BITMAPINFOHEADER *pBmpInfoHdr;
+		pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i];
+
+		IconDirEntry.bWidth=(BYTE)pBmpInfoHdr->biWidth;
+		IconDirEntry.bHeight=(BYTE)pBmpInfoHdr->biHeight/2;
+		if(pBmpInfoHdr->biBitCount<=8)
+			IconDirEntry.bColorCount=(BYTE)pow((double)2,(double)pBmpInfoHdr->biBitCount);
+		else IconDirEntry.bColorCount=0;
+
+		IconDirEntry.dwBytesInRes=sizeof(BITMAPINFOHEADER);
+		if(pBmpInfoHdr->biBitCount<=8)	//256色以下の場合はカラーパレットのサイズを考慮
+			IconDirEntry.dwBytesInRes+=(DWORD)pow((double)2,(double)pBmpInfoHdr->biBitCount)*sizeof(long);
+		IconDirEntry.dwBytesInRes+=pBmpInfoHdr->biBitCount*pBmpInfoHdr->biWidth*(pBmpInfoHdr->biHeight/2)/8;
+		if(pBmpInfoHdr->biWidth==16){
+			//16*16のアイコン
+			IconDirEntry.dwBytesInRes+=pBmpInfoHdr->biWidth*(pBmpInfoHdr->biHeight/2)/8*2;
+		}
+		else{
+			//32*32のアイコン
+			IconDirEntry.dwBytesInRes+=pBmpInfoHdr->biWidth*(pBmpInfoHdr->biHeight/2)/8;
+		}
+
+		ImgBufSize[i]=IconDirEntry.dwBytesInRes;
+
+		memcpy(buffer+i2,&IconDirEntry,sizeof(ICONDIRENTRY));
+		i2+=sizeof(ICONDIRENTRY);
+
+		IconDirEntry.dwImageOffset+=IconDirEntry.dwBytesInRes;
+	}
+
+	////////////////////
+	// イメージバッファ
+	for(i=0;i<MdiInfo[WndNum].MdiIconEditInfo->num;i++){
+		memcpy(buffer+i2,
+			MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i],
+			ImgBufSize[i]);
+
+		i2+=ImgBufSize[i];
+	}
+
+
+	//ファイルへ書き込み
+	HANDLE hFile;
+	DWORD dummy;
+	hFile=CreateFile(filepath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		//"\"%s\" ファイルへの書き込みに失敗しました。"
+		sprintf(temporary,STRING_ERROR_CANT_FILESAVE,filepath);
+		MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONSTOP);
+		return;
+	}
+	WriteFile(hFile,buffer,i2,&dummy,NULL);
+	CloseHandle(hFile);
+}
+
+LRESULT CALLBACK MDIClientWindow_IconEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HWND hDocCombo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,WndNum;
+
+	switch(message){
+		case WM_MDIACTIVATE:
+			if(!lParam) return 0;
+			i=GetWndNum((HWND)lParam);
+			if(i==-1) return 0;	//ウィンドウが初期状態の場合
+
+			i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
+			SendMessage(hDocCombo,CB_SETCURSEL,i,0);
+			SetStatusText(NULL);
+			ResetState_EditMenu();
+			return 0;
+		case WM_SIZE:
+			WndNum=GetWndNum(hwnd);
+			if(WndNum==-1) break;
+			ResizeIconWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain,
+				MdiInfo[WndNum].MdiIconEditInfo->hToolDlg,
+				MdiInfo[WndNum].MdiIconEditInfo->hColorDlg,
+				LOWORD(lParam),HIWORD(lParam));
+			break;
+		case WM_CLOSE:
+			CloseDocWindow(GetWndNum(hwnd));
+			pobj_nv->bMDIZoomed=IsZoomed(hwnd);
+			i=DefMDIChildProc(hwnd,message,wParam,lParam);
+
+			//メニュー状態を設定
+			ResetState_DocMenu();
+
+			return i;
+	}
+	return DefMDIChildProc(hwnd,message,wParam,lParam);
+}
Index: /ProjectEditor/IconEditor_Color.cpp
===================================================================
--- /ProjectEditor/IconEditor_Color.cpp	(revision 3)
+++ /ProjectEditor/IconEditor_Color.cpp	(revision 3)
@@ -0,0 +1,182 @@
+#include "common.h"
+
+extern RGBQUAD DefaultColorTable16[16];
+
+BOOL CALLBACK DlgIconColorProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern COLORREF TransparentClrRef;
+	int i,i2,WndNum;
+	RGBQUAD *pRgbq;
+	RECT rect;
+	POINT pos,pos2;
+	COLORREF ColorRef;
+	HDC hdc;
+
+	switch(message){
+		case WM_LBUTTONDOWN:
+		case WM_RBUTTONDOWN:
+			pos.x=LOWORD(lParam);
+			pos.y=HIWORD(lParam);
+
+			WndNum=GetWndNum(GetParent(hwnd));
+
+			pos2=pos;
+			ClientToScreen(hwnd,&pos2);
+			ScreenToClient(GetDlgItem(hwnd,IDC_STATIC_COLOR),&pos2);
+
+			if((8+1)*15<pos2.x&&pos2.x<(8+1)*15+13&&
+				0<pos2.y&&pos2.y<13){
+				//透明色をクリックした場合
+				if(message==WM_LBUTTONDOWN)
+					MdiInfo[WndNum].MdiIconEditInfo->MainColor=TransparentClrRef;
+				else
+					MdiInfo[WndNum].MdiIconEditInfo->SubColor=TransparentClrRef;
+				InvalidateRect(hwnd,NULL,0);
+				return 1;
+			}
+
+			if(pos2.x%15==0||pos2.x%15>=12||
+				pos2.y%15==0||pos2.y%15>=12||
+				0>pos2.x||pos2.x/15>=8||
+				0>pos2.y||pos2.y/15>=2){
+				//パディング部分をクリックした場合は抜け出す
+				return 1;
+			}
+
+			//選択カラーを取得
+			hdc=GetDC(hwnd);
+			ColorRef=GetPixel(hdc,pos.x,pos.y);
+			ReleaseDC(hwnd,hdc);
+
+			if(message==WM_LBUTTONDOWN)
+				MdiInfo[WndNum].MdiIconEditInfo->MainColor=ColorRef;
+			else
+				MdiInfo[WndNum].MdiIconEditInfo->SubColor=ColorRef;
+
+			InvalidateRect(hwnd,NULL,0);
+			return 1;
+		case WM_PAINT:
+			WndNum=GetWndNum(GetParent(hwnd));
+			if(WndNum==-1) break;
+
+			////////////////////////
+			// カラーテーブルを表示
+			PAINTSTRUCT ps;
+			HPEN hPen,hOldPen;
+			HBRUSH hBrush,hOldBrush;
+
+			GetWindowRect(GetDlgItem(hwnd,IDC_STATIC_COLOR),&rect);
+			pos.x=rect.left;
+			pos.y=rect.top;
+			ScreenToClient(hwnd,&pos);
+			GetWindowRect(GetDlgItem(hwnd,IDC_NOWCOLOR),&rect);
+			pos2.x=rect.left;
+			pos2.y=rect.top;
+			ScreenToClient(hwnd,&pos2);
+
+			//カラーテーブルを取得
+			pRgbq=(RGBQUAD *)(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+sizeof(BITMAPINFOHEADER));
+
+			hdc=BeginPaint(hwnd,&ps);
+			hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));
+			hOldPen=(HPEN)SelectObject(hdc,hPen);
+			if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biBitCount==4){
+				////////
+				// 16色
+
+				//カラーテーブルを描画
+				i2=16;
+				for(i=0;i<i2;i++){
+					hBrush=CreateSolidBrush(RGB(pRgbq[i].rgbRed,pRgbq[i].rgbGreen,pRgbq[i].rgbBlue));
+					hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+					if(i<i2/2){
+						Rectangle(hdc,
+							pos.x+i*15,
+							pos.y,
+							pos.x+i*15+13,
+							pos.y+13);
+					}
+					else{
+						Rectangle(hdc,
+							pos.x+(i-i2/2)*15,
+							pos.y+15,
+							pos.x+(i-i2/2)*15+13,
+							pos.y+15+13);
+					}
+					SelectObject(hdc,hOldBrush);
+					DeleteObject(hBrush);
+				}
+			}
+			else{
+				/////////
+				// 256色
+
+				//カラーテーブルを描画
+				i2=16;
+				for(i=0;i<i2;i++){
+					hBrush=CreateSolidBrush(RGB(DefaultColorTable16[i].rgbRed,DefaultColorTable16[i].rgbGreen,DefaultColorTable16[i].rgbBlue));
+					hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+					if(i<i2/2){
+						Rectangle(hdc,
+							pos.x+i*15,
+							pos.y,
+							pos.x+i*15+13,
+							pos.y+13);
+					}
+					else{
+						Rectangle(hdc,
+							pos.x+(i-i2/2)*15,
+							pos.y+15,
+							pos.x+(i-i2/2)*15+13,
+							pos.y+15+13);
+					}
+					SelectObject(hdc,hOldBrush);
+					DeleteObject(hBrush);
+				}
+			}
+
+			//透明色カラーを表示
+			hBrush=CreateSolidBrush(TransparentClrRef);
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+			Rectangle(hdc,
+				pos.x+(i2/2+1)*15,
+				pos.y,
+				pos.x+(i2/2+1)*15+13,
+				pos.y+13);
+			SelectObject(hdc,hOldBrush);
+			DeleteObject(hBrush);
+
+			MoveToEx(hdc,pos.x+(i2/2+1)*15,pos.y,NULL);
+			LineTo(hdc,pos.x+(i2/2+1)*15+13,pos.y+13);
+
+
+			//現在選択中のサブカラーを表示
+			hBrush=CreateSolidBrush(MdiInfo[WndNum].MdiIconEditInfo->SubColor);
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+			Rectangle(hdc,
+				pos2.x+10,
+				pos2.y+10,
+				pos2.x+23,
+				pos2.y+23);
+			SelectObject(hdc,hOldBrush);
+			DeleteObject(hBrush);
+
+			//現在選択中のメインカラーを表示
+			hBrush=CreateSolidBrush(MdiInfo[WndNum].MdiIconEditInfo->MainColor);
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+			Rectangle(hdc,
+				pos2.x+3,
+				pos2.y+3,
+				pos2.x+16,
+				pos2.y+16);
+			SelectObject(hdc,hOldBrush);
+			DeleteObject(hBrush);
+
+			SelectObject(hdc,hOldPen);
+			DeleteObject(hPen);
+			EndPaint(hwnd,&ps);
+			return 1;
+	}
+	return 0;
+}
Index: /ProjectEditor/IconEditor_Main.cpp
===================================================================
--- /ProjectEditor/IconEditor_Main.cpp	(revision 3)
+++ /ProjectEditor/IconEditor_Main.cpp	(revision 3)
@@ -0,0 +1,1576 @@
+#include "Common.h"
+
+#define ZOOMED_XPOS 100
+#define PIXEL_WIDTH	10
+
+RGBQUAD TransparentRgbq={230,230,255};	//blue,green,red（透明色）
+COLORREF TransparentClrRef=RGB(255,230,230);	//red,green,blue（透明色）
+
+void IconEdit_SelectImage(int WndNum);
+
+void LimitRectFormat(int WndNum,RECT *pRect){
+	//はみ出した場合は範囲内におさめる
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	if(pRect->left<0) pRect->left=0;
+	if(pRect->top<0) pRect->top=0;
+	if(pRect->left>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth)
+		pRect->left=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth-1;
+	if(pRect->top>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2)
+		pRect->top=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2-1;
+
+	if(pRect->right<0) pRect->right=0;
+	if(pRect->bottom<0) pRect->bottom=0;
+	if(pRect->right>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth)
+		pRect->right=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth-1;
+	if(pRect->bottom>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2)
+		pRect->bottom=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2-1;
+}
+void GetZoomedPos(POINT *pPos){
+	pPos->x=pPos->x*PIXEL_WIDTH+ZOOMED_XPOS;
+	pPos->y*=PIXEL_WIDTH;
+}
+void SetZoomedPixel(HDC hdc,int WndNum,int x,int y){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	POINT pos;
+
+	if(x<0||y<0||
+		x>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth||
+		y>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2)
+		return;
+
+	pos.x=x;
+	pos.y=y;
+	GetZoomedPos(&pos);
+	Rectangle(hdc,pos.x,pos.y,pos.x+11,pos.y+11);
+}
+DWORD GetColorCode(int WndNum,COLORREF ColorRef){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	RGBQUAD *pRgbq;
+
+	//透明色の場合
+	if(ColorRef==TransparentClrRef) return -1;
+
+	//カラーテーブルを取得
+	pRgbq=(RGBQUAD *)(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+sizeof(BITMAPINFOHEADER));
+
+	i2=(int)pow((double)2,(double)MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biBitCount);
+	for(i=0;i<i2;i++){
+		if(ColorRef==RGB(pRgbq[i].rgbRed,pRgbq[i].rgbGreen,pRgbq[i].rgbBlue)) break;
+	}
+	if(i==i2) i=0;
+
+	return i;
+}
+HGLOBAL IconEdit_GetChildInfoClipboardData(int WndNum){
+	//////////////////////////////////////////////
+	// 選択中のイメージをクリップボードへ保存する
+	//////////////////////////////////////////////
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HDC hDC;
+	HBITMAP hBmp;
+	SIZE size;
+	int sw;
+
+	//何も選択されていない場合は0を返す
+	sw=0;
+	if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==0) return 0;
+	if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==1){
+		IconEdit_SelectImage(WndNum);
+		sw=1;
+	}
+
+	size.cx=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right-MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left+1;
+	size.cy=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom-MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top+1;
+
+	hDC=CreateCompatibleDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
+	hBmp=CreateCompatibleBitmap(
+		MdiInfo[WndNum].MdiIconEditInfo->memdc,
+		size.cx,
+		size.cy);
+	SelectObject(hDC,hBmp);
+
+	BitBlt(hDC,0,0,size.cx,size.cy,
+		MdiInfo[WndNum].MdiIconEditInfo->memdc,
+		MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left,
+		MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top,
+		SRCCOPY);
+
+	DeleteDC(hDC);
+
+	if(sw){
+		DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+		MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=1;
+	}
+
+	return hBmp;
+}
+void IconEdit_PasteChildInfoClipboardData(int WndNum,HBITMAP hBmp){
+	////////////////////////////////////
+	// クリップボードの内容を貼り付ける
+	////////////////////////////////////
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HDC hDC,hDC2;
+	BITMAP Bitmap;
+
+	if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2)
+		IconEdit_PasteImage(WndNum);
+
+	GetObject(hBmp,sizeof(Bitmap),&Bitmap);
+
+	hDC=CreateCompatibleDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
+	MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp=
+		CreateCompatibleBitmap(MdiInfo[WndNum].MdiIconEditInfo->memdc,Bitmap.bmWidth,Bitmap.bmHeight);
+	SelectObject(hDC,MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+	hDC2=CreateCompatibleDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
+	SelectObject(hDC2,hBmp);
+
+	BitBlt(hDC,0,0,Bitmap.bmWidth,Bitmap.bmHeight,
+		hDC2,0,0,SRCCOPY);
+
+	DeleteDC(hDC);
+	DeleteDC(hDC2);
+
+	MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left=0;
+	MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top=0;
+	MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right=Bitmap.bmWidth-1;
+	MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom=Bitmap.bmHeight-1;
+
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,0);
+
+	MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=2;
+}
+
+void IconEdit_SelectImage(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	SIZE size;
+	HDC hDC;
+
+	size.cx=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right-MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left+1;
+	size.cy=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom-MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top+1;
+
+	hDC=CreateCompatibleDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
+	MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp=
+		CreateCompatibleBitmap(MdiInfo[WndNum].MdiIconEditInfo->memdc,size.cx,size.cy);
+	SelectObject(hDC,MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+	BitBlt(hDC,0,0,size.cx,size.cy,
+		MdiInfo[WndNum].MdiIconEditInfo->memdc,
+		MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left,
+		MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top,
+		SRCCOPY);
+	DeleteDC(hDC);
+
+	MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=2;
+}
+void IconEdit_PasteImage(int WndNum){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2,i3,x,y,y2,selecting_x,selecting_y;
+	DWORD dwRgbq;
+
+	//コピー先
+	RGBQUAD *pRgbq;
+	BYTE *pBuffer,*pMaskBuf;
+	BITMAPINFOHEADER *pBmpInfoHdr;
+
+	//コピー元
+	BITMAP Bitmap;
+	BITMAPINFO SelectingBitmapInfo;
+	COLORREF *pSelectingBuffer;
+
+	//変更情報
+	IconEdit_NoticeChanging(WndNum);
+
+	GetObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp,sizeof(BITMAP),&Bitmap);
+	pSelectingBuffer=(COLORREF *)HeapAlloc(hHeap,0,Bitmap.bmWidth*Bitmap.bmHeight*sizeof(COLORREF));
+	SelectingBitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+	SelectingBitmapInfo.bmiHeader.biWidth=Bitmap.bmWidth;
+	SelectingBitmapInfo.bmiHeader.biHeight=Bitmap.bmHeight;
+	SelectingBitmapInfo.bmiHeader.biPlanes=1;
+	SelectingBitmapInfo.bmiHeader.biBitCount=32;
+	SelectingBitmapInfo.bmiHeader.biCompression=BI_RGB;
+	GetDIBits(MdiInfo[WndNum].MdiIconEditInfo->memdc,
+		MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp,
+		0,Bitmap.bmHeight,
+		pSelectingBuffer,&SelectingBitmapInfo,DIB_RGB_COLORS);
+
+	pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+
+	//カラーテーブルを取得
+	pRgbq=(RGBQUAD *)(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+sizeof(BITMAPINFOHEADER));
+
+	//ビットバッファを取得
+	pBuffer=MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+
+		sizeof(BITMAPINFOHEADER);
+	if(pBmpInfoHdr->biBitCount<=8)
+		pBuffer+=sizeof(DWORD)*(int)pow((double)2,(double)pBmpInfoHdr->biBitCount);
+
+	//マスクバッファを取得
+	pMaskBuf=pBuffer+pBmpInfoHdr->biBitCount*pBmpInfoHdr->biWidth*(pBmpInfoHdr->biHeight/2)/8;
+
+	for(y=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom;y>=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top;y--){
+		for(x=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left;x<=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right;x++){
+			if(x<0||y<0||
+				x>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth||
+				y>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2){
+				//範囲外の場合
+				continue;
+			}
+
+			selecting_x=x-MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left;
+			selecting_y=y-MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top;
+			dwRgbq=pSelectingBuffer[(Bitmap.bmHeight-1-selecting_y)*Bitmap.bmWidth+selecting_x];
+
+			if(pBmpInfoHdr->biBitCount==4||pBmpInfoHdr->biBitCount==8){
+				i=(pBmpInfoHdr->biHeight/2-1-y)*pBmpInfoHdr->biWidth+x;
+				if(dwRgbq==*(DWORD *)&TransparentRgbq){
+					//////////////////
+					// 透明色にセット
+					if(pBmpInfoHdr->biWidth==16){
+						//一行の4バイト境界を考慮
+						y2=(pBmpInfoHdr->biHeight/2-1)-y;
+						pMaskBuf[(i+pBmpInfoHdr->biWidth*y2)/8]|=0x01<<(8-(i%8+1));
+					}
+					else pMaskBuf[i/8]|=0x01<<(8-(i%8+1));
+
+					/////////////////
+					// 色を0にセット
+					i3=(int)pow((double)2,(double)pBmpInfoHdr->biBitCount);
+					for(i2=0;i2<i3;i2++){
+						if(dwRgbq==((DWORD *)pRgbq)[i2]) break;
+					}
+					switch(pBmpInfoHdr->biBitCount){
+						case 4:		//16色
+							if(i%2==0) *(pBuffer+i/2)&=0x0F;
+							else *(pBuffer+i/2)&=0xF0;
+							break;
+						case 8:		//256色
+							pBuffer[i]=0;
+							break;
+					}
+				}
+				else{
+					////////////////////
+					// 無透明色にセット
+					if(pBmpInfoHdr->biWidth==16){
+						//一行の4バイト境界を考慮
+						y2=(pBmpInfoHdr->biHeight/2-1)-y;
+						pMaskBuf[(i+pBmpInfoHdr->biWidth*y2)/8]&=~(0x01<<(8-(i%8+1)));
+					}
+					else pMaskBuf[i/8]&=~(0x01<<(8-(i%8+1)));
+
+					//////////////
+					// 色をセット
+					i3=(int)pow((double)2,(double)pBmpInfoHdr->biBitCount);
+					for(i2=0;i2<i3;i2++){
+						if(dwRgbq==((DWORD *)pRgbq)[i2]) break;
+					}
+					switch(pBmpInfoHdr->biBitCount){
+						case 4:		//16色
+							if(i%2==0){
+								*(pBuffer+i/2)&=0x0F;
+								*(pBuffer+i/2)|=i2<<4;
+							}
+							else{
+								*(pBuffer+i/2)&=0xF0;
+								*(pBuffer+i/2)|=i2;
+							}
+							break;
+						case 8:		//256色
+							pBuffer[i]=i2;
+							break;
+					}
+				}
+			}
+		}
+	}
+	HeapDefaultFree(pSelectingBuffer);
+
+	DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+	MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+
+	DrawIconToMemBmp(WndNum,0);
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,0);
+}
+
+void DrawIconToMemBmp(int WndNum,RECT *pRect){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HPEN hPen,hOldPen;
+	HBRUSH hBrush,hOldBrush;
+	int i,i2,i3,x,y,y2;
+	POINT pos;
+	RGBQUAD *pRgbq;
+	COLORREF ColorRef;
+	BYTE *pBuffer,*pMaskBuf;
+	BITMAPINFOHEADER *pBmpInfoHdr;
+
+	pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+
+	hPen=CreatePen(PS_SOLID,0,RGB(200,200,200));
+	hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hPen);
+
+	//カラーテーブルを取得
+	pRgbq=(RGBQUAD *)(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+sizeof(BITMAPINFOHEADER));
+
+	//ビットバッファを取得
+	pBuffer=MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+
+		sizeof(BITMAPINFOHEADER);
+	if(pBmpInfoHdr->biBitCount<=8)
+		pBuffer+=sizeof(DWORD)*(int)pow((double)2,(double)pBmpInfoHdr->biBitCount);
+
+	//マスクバッファを取得
+	pMaskBuf=pBuffer+pBmpInfoHdr->biBitCount*pBmpInfoHdr->biWidth*(pBmpInfoHdr->biHeight/2)/8;
+
+	i=0;	//標準ピクセルのバイトカウンタ
+	i3=0;	//透明ピクセルのバイトカウンタ
+	for(y=pBmpInfoHdr->biHeight/2-1;y>=0;y--){
+		for(x=0;x<pBmpInfoHdr->biWidth;x++,i++,i3++){
+			if(pRect){
+				//メモリへの再描画が必要ない場合を検証（実行速度向上のため）
+				if(!(pRect->left<=x&&x<=pRect->right&&
+					pRect->top<=y&&y<=pRect->bottom)) continue;
+			}
+
+			//////////////////////
+			// マスクビットの確認
+			if(pBmpInfoHdr->biWidth==16){
+				//一行の4バイト境界を考慮
+				y2=(pBmpInfoHdr->biHeight/2-1)-y;
+				i2=(pMaskBuf[(i+pBmpInfoHdr->biWidth*y2)/8]>>(8-(i%8+1)))&0x01;
+			}
+			else i2=(pMaskBuf[i/8]>>(8-(i%8+1)))&0x01;
+			if(i2){
+				hBrush=CreateSolidBrush(TransparentClrRef);
+				hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hBrush);
+				pos.x=x;
+				pos.y=y;
+				GetZoomedPos(&pos);
+				Rectangle(MdiInfo[WndNum].MdiIconEditInfo->memdc,
+					pos.x,
+					pos.y,
+					pos.x+11,
+					pos.y+11);
+				SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hOldBrush);
+				DeleteObject(hBrush);
+
+				SetPixel(MdiInfo[WndNum].MdiIconEditInfo->memdc,x,y,TransparentClrRef);
+				continue;
+			}
+
+			////////////////
+			// 通常ピクセル
+			switch(pBmpInfoHdr->biBitCount){
+				case 4:		//16色
+					i2=*(pBuffer+i/2);
+					if(i%2==0) i2>>=4;
+					i2&=0x0F;
+					ColorRef=RGB(pRgbq[i2].rgbRed,pRgbq[i2].rgbGreen,pRgbq[i2].rgbBlue);
+					break;
+				case 8:		//256色
+					i2=pBuffer[i];
+					ColorRef=RGB(pRgbq[i2].rgbRed,pRgbq[i2].rgbGreen,pRgbq[i2].rgbBlue);
+					break;
+			}
+			hBrush=CreateSolidBrush(ColorRef);
+			hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hBrush);
+			pos.x=x;
+			pos.y=y;
+			GetZoomedPos(&pos);
+			Rectangle(MdiInfo[WndNum].MdiIconEditInfo->memdc,
+				pos.x,
+				pos.y,
+				pos.x+11,
+				pos.y+11);
+			SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hOldBrush);
+			DeleteObject(hBrush);
+
+			SetPixel(MdiInfo[WndNum].MdiIconEditInfo->memdc,x,y,ColorRef);
+		}
+	}
+
+	SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hOldPen);
+	DeleteObject(hPen);
+}
+
+void PixelChange(int WndNum,int x,int y,DWORD ColorCode){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	int y2;
+	BYTE *pBuffer,*pMaskBuf;
+	BITMAPINFOHEADER *pBmpInfoHdr;
+
+	if(x<0||y<0) return;
+	if(x>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth||
+		y>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2)
+		return;
+
+	pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+
+	pBuffer=MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+
+		sizeof(BITMAPINFOHEADER);
+	pBuffer+=sizeof(DWORD)*(int)pow((double)2,(double)pBmpInfoHdr->biBitCount);
+
+	pMaskBuf=pBuffer+pBmpInfoHdr->biBitCount*pBmpInfoHdr->biWidth*(pBmpInfoHdr->biHeight/2)/8;
+
+	if(x>=pBmpInfoHdr->biWidth||y>=pBmpInfoHdr->biHeight/2) return;
+	y2=(pBmpInfoHdr->biHeight/2-1)-y;
+	i=pBmpInfoHdr->biWidth*y2+x;
+
+	//////////////////
+	// マスクピクセル
+	if(ColorCode==-1){
+		//透明色に指定
+		if(pBmpInfoHdr->biWidth==16){
+			//一行の4バイト境界を考慮
+			pMaskBuf[(i+pBmpInfoHdr->biWidth*y2)/8]|=0x01<<(8-(i%8+1));
+		}
+		else pMaskBuf[i/8]|=0x01<<(8-(i%8+1));
+
+		ColorCode=0;
+	}
+	else{
+		//無透明色に指定
+		if(pBmpInfoHdr->biWidth==16){
+			//一行の4バイト境界を考慮
+			pMaskBuf[(i+pBmpInfoHdr->biWidth*y2)/8]&=~(0x01<<(8-(i%8+1)));
+		}
+		else pMaskBuf[i/8]&=~(0x01<<(8-(i%8+1)));
+	}
+
+	////////////////
+	// 通常ピクセル
+	switch(pBmpInfoHdr->biBitCount){
+		case 4:
+			////////
+			// 16色
+			if(i%2) *(pBuffer+i/2)=(*(pBuffer+i/2)&0xF0)|(BYTE)ColorCode;
+			else *(pBuffer+i/2)=(*(pBuffer+i/2)&0x0F)|(BYTE)ColorCode<<4;
+			break;
+		case 8:
+			/////////
+			// 256色
+			pBuffer[i]=(BYTE)ColorCode;
+			break;
+	}
+}
+COLORREF IconEdit_GetPixel(int WndNum,int x,int y){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	int y2;
+	BYTE *pBuffer,*pMaskBuf;
+	BITMAPINFOHEADER *pBmpInfoHdr;
+	RGBQUAD *pRgbq;
+	COLORREF ColorRef;
+
+	if(x<0||y<0) return 0;
+	if(x>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth||
+		y>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2)
+		return 0;
+
+	pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+
+	//カラーテーブルを取得
+	pRgbq=(RGBQUAD *)(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+sizeof(BITMAPINFOHEADER));
+
+	//通常バッファを取得
+	pBuffer=MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]+
+		sizeof(BITMAPINFOHEADER)+
+		sizeof(DWORD)*(int)pow((double)2,(double)pBmpInfoHdr->biBitCount);
+
+	//マスクバッファを取得
+	pMaskBuf=pBuffer+pBmpInfoHdr->biBitCount*pBmpInfoHdr->biWidth*(pBmpInfoHdr->biHeight/2)/8;
+
+	if(x>=pBmpInfoHdr->biWidth||y>=pBmpInfoHdr->biHeight/2) return 0;
+	y2=(pBmpInfoHdr->biHeight/2-1)-y;
+	i=pBmpInfoHdr->biWidth*y2+x;
+
+	//////////////////
+	// マスクピクセル
+	if(pBmpInfoHdr->biWidth==16){
+		//一行の4バイト境界を考慮
+		if((pMaskBuf[(i+pBmpInfoHdr->biWidth*y2)/8]>>(8-(i%8+1)))&0x01)
+			return TransparentClrRef;
+	}
+	else{
+		if((pMaskBuf[i/8]>>(8-(i%8+1)))&0x01)
+			return TransparentClrRef;
+	}
+
+	////////////////
+	// 通常ピクセル
+	switch(pBmpInfoHdr->biBitCount){
+		case 4:		//16色
+			if(i%2) i2=*(pBuffer+i/2)&0x0F;
+			else i2=(*(pBuffer+i/2)>>4)&0x0F;
+			ColorRef=RGB(pRgbq[i2].rgbRed,pRgbq[i2].rgbGreen,pRgbq[i2].rgbBlue);
+			break;
+		case 8:		//256色
+			i2=pBuffer[i];
+			ColorRef=RGB(pRgbq[i2].rgbRed,pRgbq[i2].rgbGreen,pRgbq[i2].rgbBlue);
+			break;
+	}
+	return ColorRef;
+}
+void IconEdit_DrawLine(int WndNum,int x1,int y1,int x2,int y2,DWORD ColorCode){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int dx,dy,s,step;
+
+	dx=abs(x2-x1);
+	dy=abs(y2-y1);
+	if(dx>dy){
+		if(x1>x2){
+			step=(y1>y2)?1:-1;
+			s=x1;
+			x1=x2;
+			x2=s;
+			y1=y2;
+		}
+		else step=(y1<y2)?1:-1;
+
+		PixelChange(WndNum,x1,y1,ColorCode);
+
+		s=dx>>1;
+		while(++x1<=x2){
+			if((s-=dy)<0){
+				s+=dx;
+				y1+=step;
+			}
+
+			PixelChange(WndNum,x1,y1,ColorCode);
+		}
+	}
+	else{
+		if(y1>y2){
+			step=(x1>x2)?1:-1;
+			s=y1;
+			y1=y2;
+			y2=s;
+			x1=x2;
+		}
+		else step=(x1<x2)?1:-1;
+
+		PixelChange(WndNum,x1,y1,ColorCode);
+
+		s=dy>>1;
+		while(++y1<=y2){
+			if((s-=dx)<0){
+				s+=dy;
+				x1+=step;
+			}
+
+			PixelChange(WndNum,x1,y1,ColorCode);
+		}
+	}
+}
+void IconEdit_FloodFill(int WndNum,int x,int y,COLORREF FilledColor,DWORD ColorCode){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	if(x<0||y<0) return;
+	if(x>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biWidth||
+		y>=MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]->biHeight/2)
+		return;
+
+	PixelChange(WndNum,x,y,ColorCode);
+
+	if(IconEdit_GetPixel(WndNum,x,y+1)==FilledColor)
+		IconEdit_FloodFill(WndNum,x,y+1,FilledColor,ColorCode);
+	if(IconEdit_GetPixel(WndNum,x+1,y)==FilledColor)
+		IconEdit_FloodFill(WndNum,x+1,y,FilledColor,ColorCode);
+	if(IconEdit_GetPixel(WndNum,x,y-1)==FilledColor)
+		IconEdit_FloodFill(WndNum,x,y-1,FilledColor,ColorCode);
+	if(IconEdit_GetPixel(WndNum,x-1,y)==FilledColor)
+		IconEdit_FloodFill(WndNum,x-1,y,FilledColor,ColorCode);
+}
+void IconEdit_DrawRectangle(int WndNum,int x1,int y1,int x2,int y2,DWORD ColorCode,DWORD FillClrCode,BOOL bFill){
+	RectNaturalFormat(&x1,&y1,&x2,&y2);
+
+	IconEdit_DrawLine(WndNum,x1,y1,x1,y2,ColorCode);
+	IconEdit_DrawLine(WndNum,x2,y1,x2,y2,ColorCode);
+	IconEdit_DrawLine(WndNum,x1+1,y1,x2-1,y1,ColorCode);
+	IconEdit_DrawLine(WndNum,x1+1,y2,x2-1,y2,ColorCode);
+
+	if(bFill){
+		int x,y;
+		for(x=x1+1;x<x2;x++){
+			for(y=y1+1;y<y2;y++) PixelChange(WndNum,x,y,FillClrCode);
+		}
+	}
+}
+void IconEdit_DrawEllipse(int WndNum,int x1,int y1,int x2,int y2,DWORD ColorCode){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	RECT rect,rc2;
+
+	rect.left=x1;
+	rect.top=y1;
+	rect.right=x2;
+	rect.bottom=y2;
+	RectNaturalFormat(&rect,&rc2);
+
+	int xc,yc,rx,ry;
+	int x,y,r;
+
+	rx=(rc2.right-rc2.left)/2;
+	ry=(rc2.bottom-rc2.top)/2;
+	xc=rc2.left+rx;
+	yc=rc2.top+ry;
+	if(rx==0&&ry==0){
+		if(rc2.bottom-rc2.top==1&&rc2.bottom-rc2.top==1)
+			IconEdit_DrawRectangle(WndNum,x1,y1,x2,y2,ColorCode,0,0);
+		else IconEdit_DrawLine(WndNum,x1,y1,x2,y2,ColorCode);
+		return;
+	}
+
+	int bX,bY;
+	if((rc2.right-rc2.left)%2) bX=1;
+	else bX=0;
+	if((rc2.bottom-rc2.top)%2) bY=1;
+	else bY=0;
+
+	if(rx>ry){
+		x=r=rx;
+		y=0;
+		while(x>=y){
+			x1=x*ry/rx;
+			y1=y*ry/rx;
+
+			PixelChange(WndNum,xc+x+bX,yc+y1+bY,ColorCode);
+			PixelChange(WndNum,xc+x+bX,yc-y1,ColorCode);
+			PixelChange(WndNum,xc-x,yc+y1+bY,ColorCode);
+			PixelChange(WndNum,xc-x,yc-y1,ColorCode);
+			PixelChange(WndNum,xc+y+bX,yc+x1+bY,ColorCode);
+			PixelChange(WndNum,xc+y+bX,yc-x1,ColorCode);
+			PixelChange(WndNum,xc-y,yc+x1+bY,ColorCode);
+			PixelChange(WndNum,xc-y,yc-x1,ColorCode);
+
+			if((r-=(y++<<1)+1)<=0) r+=(x-- -1)<<1;
+		}
+	}
+	else{
+		x=r=ry;
+		y=0;
+		while(x>=y){
+			x1=x*rx/ry;
+			y1=y*rx/ry;
+
+			PixelChange(WndNum,xc+x1+bX,yc+y+bY,ColorCode);
+			PixelChange(WndNum,xc+x1+bX,yc-y,ColorCode);
+			PixelChange(WndNum,xc-x1,yc+y+bY,ColorCode);
+			PixelChange(WndNum,xc-x1,yc-y,ColorCode);
+			PixelChange(WndNum,xc+y1+bX,yc+x+bY,ColorCode);
+			PixelChange(WndNum,xc+y1+bX,yc-x,ColorCode);
+			PixelChange(WndNum,xc-y1,yc+x+bY,ColorCode);
+			PixelChange(WndNum,xc-y1,yc-x,ColorCode);
+
+			if((r-=(y++<<1)+1)<=0) r+=(x-- -1)<<1;
+		}
+	}
+}
+
+void IconEdit_EraseRect(int WndNum,RECT *pRect){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+	//変更情報
+	IconEdit_NoticeChanging(WndNum);
+
+	IconEdit_DrawRectangle(WndNum,
+		pRect->left,
+		pRect->top,
+		pRect->right,
+		pRect->bottom,
+		GetColorCode(WndNum,MdiInfo[WndNum].MdiIconEditInfo->SubColor),
+		GetColorCode(WndNum,MdiInfo[WndNum].MdiIconEditInfo->SubColor),1);
+
+	DrawIconToMemBmp(WndNum,0);
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,0);
+}
+
+void IconEdit_DrawFrame(HWND hwnd,int WndNum,RECT *pRect){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HDC hdc;
+	HPEN hPen,hOldPen;
+	HBRUSH hOldBrush;
+	RECT rect;
+	POINT pos;
+
+	//////////////////////
+	// 選択フレームの描画
+
+	hdc=GetDC(hwnd);
+
+	//以前の選択フレームを消去
+	BITMAPINFOHEADER *pBmpInfoHdr;
+	pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+	pos.x=pBmpInfoHdr->biWidth;
+	pos.y=pBmpInfoHdr->biHeight/2;
+	GetZoomedPos(&pos);
+	BitBlt(hdc,0,0,pos.x,pos.y,MdiInfo[WndNum].MdiIconEditInfo->memdc,0,0,SRCCOPY);
+
+
+	hPen=CreatePen(PS_DOT,0,RGB(0,0,0));
+	SetBkMode(hdc,TRANSPARENT);
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+	hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
+
+	pos.x=pRect->left;
+	pos.y=pRect->top;
+	GetZoomedPos(&pos);
+	rect.left=pos.x;
+	rect.top=pos.y;
+
+	pos.x=pRect->right+1;
+	pos.y=pRect->bottom+1;
+	GetZoomedPos(&pos);
+	rect.right=pos.x+1;
+	rect.bottom=pos.y+1;
+
+	Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
+	SelectObject(hdc,hOldBrush);
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+
+	ReleaseDC(hwnd,hdc);
+}
+void IconEdit_DrawSelectingRect(HDC hdc,int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i2,i3;
+	HPEN hPen,hOldPen;
+	HBRUSH hOldBrush;
+	COLORREF rgb;
+	RECT rect;
+
+	rect.left=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left*PIXEL_WIDTH+ZOOMED_XPOS;
+	rect.top=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top*PIXEL_WIDTH;
+	rect.right=(MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right+1)*PIXEL_WIDTH+ZOOMED_XPOS+1;
+	rect.bottom=(MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom+1)*PIXEL_WIDTH+1;
+
+	SetBkMode(hdc,TRANSPARENT);
+
+	//主線
+	hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
+	hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+	Rectangle(hdc,
+		rect.left+2, rect.top+2,
+		rect.right-2, rect.bottom-2);
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+	hPen=CreatePen(PS_SOLID,0,RGB(255,255,255));
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+	Rectangle(hdc,
+		rect.left+1, rect.top+1,
+		rect.right-1, rect.bottom-1);
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+	SelectObject(hdc,hOldBrush);
+
+	rgb=RGB(255,60,30);
+	hPen=CreatePen(PS_SOLID,0,rgb);
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+	hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(WHITE_BRUSH));
+
+	Rectangle(hdc,
+		rect.left,rect.top,
+		rect.left+5,rect.top+5);
+	Rectangle(hdc,
+		rect.left,rect.bottom-5,
+		rect.left+5,rect.bottom);
+	Rectangle(hdc,
+		rect.right-5,rect.top,
+		rect.right,rect.top+5);
+	Rectangle(hdc,
+		rect.right-5,rect.bottom-5,
+		rect.right,rect.bottom);
+
+	i2=(rect.right-rect.left)/2;
+	i3=(rect.bottom-rect.top)/2;
+	Rectangle(hdc,
+		rect.left+i2-2,rect.top,
+		rect.left+i2+3,rect.top+5);
+	Rectangle(hdc,
+		rect.left+i2-2,rect.bottom-5,
+		rect.left+i2+3,rect.bottom);
+	Rectangle(hdc,
+		rect.left,rect.top+i3-2,
+		rect.left+5,rect.top+i3+3);
+	Rectangle(hdc,
+		rect.right-5,rect.top+i3-2,
+		rect.right,rect.top+i3+3);
+
+	SelectObject(hdc,hOldBrush);
+
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+}
+void DrawZoomedBitmap(HDC hdc,int WndNum,POINT *pPos){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int x,y;
+	RGBQUAD rgbq;
+	HPEN hPen,hOldPen;
+	POINT pos;
+
+	BITMAP Bitmap;
+	BITMAPINFO SelectingBitmapInfo;
+	COLORREF *pSelectingBuffer;
+
+	GetObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp,sizeof(BITMAP),&Bitmap);
+	pSelectingBuffer=(COLORREF *)HeapAlloc(hHeap,0,Bitmap.bmWidth*Bitmap.bmHeight*sizeof(COLORREF));
+	SelectingBitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+	SelectingBitmapInfo.bmiHeader.biWidth=Bitmap.bmWidth;
+	SelectingBitmapInfo.bmiHeader.biHeight=Bitmap.bmHeight;
+	SelectingBitmapInfo.bmiHeader.biPlanes=1;
+	SelectingBitmapInfo.bmiHeader.biBitCount=32;
+	SelectingBitmapInfo.bmiHeader.biCompression=BI_RGB;
+	GetDIBits(MdiInfo[WndNum].MdiIconEditInfo->memdc,
+		MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp,
+		0,Bitmap.bmHeight,
+		pSelectingBuffer,&SelectingBitmapInfo,DIB_RGB_COLORS);
+
+	hPen=CreatePen(PS_SOLID,0,RGB(200,200,200));
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+	for(y=Bitmap.bmHeight-1;y>=0;y--){
+		for(x=0;x<Bitmap.bmWidth;x++){
+			memcpy(&rgbq,
+				&pSelectingBuffer[(Bitmap.bmHeight-y-1)*Bitmap.bmWidth+x],
+				sizeof(RGBQUAD));
+
+			HBRUSH hBrush,hOldBrush;
+			hBrush=CreateSolidBrush(RGB(rgbq.rgbRed,rgbq.rgbGreen,rgbq.rgbBlue));
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+			pos.x=pPos->x+x;
+			pos.y=pPos->y+y;
+			GetZoomedPos(&pos);
+			Rectangle(hdc,pos.x,pos.y,pos.x+11,pos.y+11);
+
+			SelectObject(hdc,hOldBrush);
+			DeleteObject(hBrush);
+		}
+	}
+
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+
+	HeapDefaultFree(pSelectingBuffer);
+}
+int IconEdit_GetStateOfDraggingFrame(int WndNum,int x,int y){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	POINT pos;
+	RECT rect;
+
+	pos.x=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left;
+	pos.y=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top;
+	GetZoomedPos(&pos);
+	rect.left=pos.x;
+	rect.top=pos.y;
+	pos.x=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right+1;
+	pos.y=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom+1;
+	GetZoomedPos(&pos);
+	rect.right=pos.x;
+	rect.bottom=pos.y;
+
+	if(rect.left<x&&x<rect.right&&
+		rect.top<y&&y<rect.bottom) return FRAME_INSIDE;
+	return 0;
+}
+void DrawSelectingImage(HDC hdc,int WndNum){
+	/////////////////////////////////
+	// 選択されているイメージを表示
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HDC hDC2;
+	SIZE size;
+	POINT pos;
+
+	size.cx=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right-MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left;
+	size.cy=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom-MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top;
+	hDC2=CreateCompatibleDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
+	SelectObject(hDC2,MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+	BitBlt(hdc,
+		MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left,
+		MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top,
+		size.cx,size.cy,
+		hDC2,0,0,SRCCOPY);
+	DeleteDC(hDC2);
+
+	//拡大選択イメージを表示
+	pos.x=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left;
+	pos.y=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top;
+	DrawZoomedBitmap(hdc,WndNum,&pos);
+}
+void TempLine(HDC hdc,int WndNum,int x1,int y1,int x2,int y2,COLORREF ColorRef){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int dx,dy,s,step;
+	HPEN hPen,hOldPen;
+	HBRUSH hBrush,hOldBrush;
+
+	hPen=CreatePen(PS_SOLID,0,RGB(200,200,200));
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+	hBrush=CreateSolidBrush(ColorRef);
+	hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+	dx=abs(x2-x1);
+	dy=abs(y2-y1);
+	if(dx>dy){
+		if(x1>x2){
+			step=(y1>y2)?1:-1;
+			s=x1;
+			x1=x2;
+			x2=s;
+			y1=y2;
+		}
+		else step=(y1<y2)?1:-1;
+
+		SetZoomedPixel(hdc,WndNum,x1,y1);
+
+		s=dx>>1;
+		while(++x1<=x2){
+			if((s-=dy)<0){
+				s+=dx;
+				y1+=step;
+			}
+
+			SetZoomedPixel(hdc,WndNum,x1,y1);
+		}
+	}
+	else{
+		if(y1>y2){
+			step=(x1>x2)?1:-1;
+			s=y1;
+			y1=y2;
+			y2=s;
+			x1=x2;
+		}
+		else step=(x1<x2)?1:-1;
+
+		SetZoomedPixel(hdc,WndNum,x1,y1);
+
+		s=dy>>1;
+		while(++y1<=y2){
+			if((s-=dx)<0){
+				s+=dy;
+				x1+=step;
+			}
+
+			SetZoomedPixel(hdc,WndNum,x1,y1);
+		}
+	}
+
+	SelectObject(hdc,hOldBrush);
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+	DeleteObject(hBrush);
+}
+void TempRectangle(HDC hdc,int WndNum,int x1,int y1,int x2,int y2,COLORREF ColorRef,COLORREF FillClrRef,BOOL bFill){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int x,y;
+	HPEN hPen,hOldPen;
+	HBRUSH hBrush,hOldBrush;
+	RECT rect,rc2;
+
+	hPen=CreatePen(PS_SOLID,0,ColorRef);
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+	if(!bFill) hBrush=(HBRUSH)GetStockObject(NULL_BRUSH);
+	else hBrush=CreateSolidBrush(FillClrRef);
+	hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+	Rectangle(hdc,x1,y1,x2,y2);
+	SelectObject(hdc,hOldBrush);
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+	if(bFill) DeleteObject(hBrush);
+
+	rect.left=x1;
+	rect.top=y1;
+	rect.right=x2;
+	rect.bottom=y2;
+	RectNaturalFormat(&rect,&rc2);
+
+	hPen=CreatePen(PS_SOLID,0,RGB(200,200,200));
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+	hBrush=CreateSolidBrush(ColorRef);
+	hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+	x=rc2.left;
+	for(y=rc2.top;y<=rc2.bottom;y++)
+		SetZoomedPixel(hdc,WndNum,x,y);
+
+	x=rc2.right;
+	for(y=rc2.top;y<=rc2.bottom;y++)
+		SetZoomedPixel(hdc,WndNum,x,y);
+
+	y=rc2.top;
+	for(x=rc2.left+1;x<rc2.right;x++)
+		SetZoomedPixel(hdc,WndNum,x,y);
+
+	y=rc2.bottom;
+	for(x=rc2.left+1;x<rc2.right;x++)
+		SetZoomedPixel(hdc,WndNum,x,y);
+
+	SelectObject(hdc,hOldBrush);
+	DeleteObject(hBrush);
+
+	if(bFill){
+		hBrush=CreateSolidBrush(FillClrRef);
+		hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+		for(x=rc2.left+1;x<rc2.right;x++){
+			for(y=rc2.top+1;y<rc2.bottom;y++) SetZoomedPixel(hdc,WndNum,x,y);
+		}
+		SelectObject(hdc,hOldBrush);
+		DeleteObject(hBrush);
+	}
+
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+}
+void TempEllipse(HDC hdc,int WndNum,int x1,int y1,int x2,int y2,COLORREF ColorRef){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HPEN hPen,hOldPen;
+	HBRUSH hBrush,hOldBrush;
+	RECT rect,rc2;
+
+	rect.left=x1;
+	rect.top=y1;
+	rect.right=x2;
+	rect.bottom=y2;
+	RectNaturalFormat(&rect,&rc2);
+
+	int xc,yc,rx,ry;
+	int x,y,r;
+
+	rx=(rc2.right-rc2.left)/2;
+	ry=(rc2.bottom-rc2.top)/2;
+	xc=rc2.left+rx;
+	yc=rc2.top+ry;
+	if(rx==0&&ry==0){
+		if(rc2.bottom-rc2.top==1&&rc2.bottom-rc2.top==1)
+			TempRectangle(hdc,WndNum,x1,y1,x2,y2,ColorRef,0,0);
+		else TempLine(hdc,WndNum,x1,y1,x2,y2,ColorRef);
+		return;
+	}
+
+	int bX,bY;
+	if((rc2.right-rc2.left)%2) bX=1;
+	else bX=0;
+	if((rc2.bottom-rc2.top)%2) bY=1;
+	else bY=0;
+
+	hPen=CreatePen(PS_SOLID,0,RGB(200,200,200));
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+	hBrush=CreateSolidBrush(ColorRef);
+	hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+	if(rx>ry){
+		x=r=rx;
+		y=0;
+		while(x>=y){
+			x1=x*ry/rx;
+			y1=y*ry/rx;
+
+			SetZoomedPixel(hdc,WndNum,xc+x+bX,yc+y1+bY);
+			SetZoomedPixel(hdc,WndNum,xc+x+bX,yc-y1);
+			SetZoomedPixel(hdc,WndNum,xc-x,yc+y1+bY);
+			SetZoomedPixel(hdc,WndNum,xc-x,yc-y1);
+			SetZoomedPixel(hdc,WndNum,xc+y+bX,yc+x1+bY);
+			SetZoomedPixel(hdc,WndNum,xc+y+bX,yc-x1);
+			SetZoomedPixel(hdc,WndNum,xc-y,yc+x1+bY);
+			SetZoomedPixel(hdc,WndNum,xc-y,yc-x1);
+
+			SetPixel(hdc,xc+x+bX,yc+y1+bY,ColorRef);
+			SetPixel(hdc,xc+x+bX,yc-y1,ColorRef);
+			SetPixel(hdc,xc-x,yc+y1+bY,ColorRef);
+			SetPixel(hdc,xc-x,yc-y1,ColorRef);
+			SetPixel(hdc,xc+y+bX,yc+x1+bY,ColorRef);
+			SetPixel(hdc,xc+y+bX,yc-x1,ColorRef);
+			SetPixel(hdc,xc-y,yc+x1+bY,ColorRef);
+			SetPixel(hdc,xc-y,yc-x1,ColorRef);
+
+			if((r-=(y++<<1)+1)<=0) r+=(x-- -1)<<1;
+		}
+	}
+	else{
+		x=r=ry;
+		y=0;
+		while(x>=y){
+			x1=x*rx/ry;
+			y1=y*rx/ry;
+
+			SetZoomedPixel(hdc,WndNum,xc+x1+bX,yc+y+bY);
+			SetZoomedPixel(hdc,WndNum,xc+x1+bX,yc-y);
+			SetZoomedPixel(hdc,WndNum,xc-x1,yc+y+bY);
+			SetZoomedPixel(hdc,WndNum,xc-x1,yc-y);
+			SetZoomedPixel(hdc,WndNum,xc+y1+bX,yc+x+bY);
+			SetZoomedPixel(hdc,WndNum,xc+y1+bX,yc-x);
+			SetZoomedPixel(hdc,WndNum,xc-y1,yc+x+bY);
+			SetZoomedPixel(hdc,WndNum,xc-y1,yc-x);
+
+			SetPixel(hdc,xc+x1+bX,yc+y+bY,ColorRef);
+			SetPixel(hdc,xc+x1+bX,yc-y,ColorRef);
+			SetPixel(hdc,xc-x1,yc+y+bY,ColorRef);
+			SetPixel(hdc,xc-x1,yc-y,ColorRef);
+			SetPixel(hdc,xc+y1+bX,yc+x+bY,ColorRef);
+			SetPixel(hdc,xc+y1+bX,yc-x,ColorRef);
+			SetPixel(hdc,xc-y1,yc+x+bY,ColorRef);
+			SetPixel(hdc,xc-y1,yc-x,ColorRef);
+
+			if((r-=(y++<<1)+1)<=0) r+=(x-- -1)<<1;
+		}
+	}
+
+	SelectObject(hdc,hOldBrush);
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+	DeleteObject(hBrush);
+}
+LRESULT CALLBACK IconEditWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int WndNum,dx,dy;
+	BOOL bRedrawMemBmp;
+	HDC hdc;
+	POINT pos,p2;
+	RECT rect,rc2;
+	COLORREF ColorRef,MainClrRef,SubClrRef;
+	static DWORD dwDrag;		//左クリック時は1、右クリック時は2、それ以外は0
+	static int NowDragging;
+	static POINT LastPos;
+	static RECT OldRect;
+
+	switch(message){
+		case WM_LBUTTONDOWN:
+		case WM_RBUTTONDOWN:
+			if(dwDrag) return 0;
+
+			pos.x=(short)(LOWORD(lParam)-ZOOMED_XPOS)/PIXEL_WIDTH;
+			pos.y=(short)HIWORD(lParam)/PIXEL_WIDTH;
+
+			SetFocus(hwnd);
+			WndNum=GetWndNum(GetParent(hwnd));
+
+			SetCapture(hwnd);
+			if(message==WM_LBUTTONDOWN){
+				dwDrag=1;
+				MainClrRef=MdiInfo[WndNum].MdiIconEditInfo->MainColor;
+				SubClrRef=MdiInfo[WndNum].MdiIconEditInfo->SubColor;
+			}
+			else{
+				dwDrag=2;
+				MainClrRef=MdiInfo[WndNum].MdiIconEditInfo->SubColor;
+				SubClrRef=MdiInfo[WndNum].MdiIconEditInfo->MainColor;
+			}
+
+			if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_SELECT){
+				if(dwDrag==2){
+					dwDrag=0;
+					ReleaseCapture();
+					break;
+				}
+
+				if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel){
+					NowDragging=IconEdit_GetStateOfDraggingFrame(WndNum,LOWORD(lParam),HIWORD(lParam));
+					if(NowDragging==0){
+						if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==1){
+							MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+							InvalidateRect(hwnd,NULL,0);
+						}
+						else if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2)
+							IconEdit_PasteImage(WndNum);
+
+						NowDragging=SELECTING_FRAME;
+					}
+					else if(NowDragging==FRAME_INSIDE){
+						if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==1){
+							IconEdit_SelectImage(WndNum);
+							IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
+						}
+
+						OldRect=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect;
+					}
+				}
+				else{
+					NowDragging=SELECTING_FRAME;
+					SetCursor(LoadCursor(NULL,IDC_CROSS));
+				}
+
+				LastPos=pos;
+				InvalidateRect(hwnd,NULL,0);
+			}
+			else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_PEN){
+				//変更情報
+				IconEdit_NoticeChanging(WndNum);
+
+				PixelChange(WndNum,pos.x,pos.y,GetColorCode(WndNum,MainClrRef));
+				LastPos=pos;
+
+				rect.left=pos.x;
+				rect.top=pos.y;
+				rect.right=pos.x;
+				rect.bottom=pos.y;
+				DrawIconToMemBmp(WndNum,&rect);
+				InvalidateRect(hwnd,NULL,0);
+
+				SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_PEN)));
+			}
+			else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILL){
+				//変更情報
+				IconEdit_NoticeChanging(WndNum);
+
+				hdc=GetDC(hwnd);
+				ColorRef=GetPixel(hdc,pos.x,pos.y);
+				ReleaseDC(hwnd,hdc);
+				if(ColorRef!=MainClrRef){
+					IconEdit_FloodFill(WndNum,pos.x,pos.y,ColorRef,GetColorCode(WndNum,MainClrRef));
+
+					DrawIconToMemBmp(WndNum,0);
+					InvalidateRect(hwnd,NULL,0);
+				}
+				SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_FILL)));
+			}
+			else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_LINE||
+				MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_RECTANGLE||
+				MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILLRECT||
+				MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILLRECT2||
+				MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_ELLIPSE){
+				hdc=GetDC(hwnd);
+				TempLine(hdc,WndNum,pos.x,pos.y,pos.x,pos.y,MainClrRef);
+				ReleaseDC(hwnd,hdc);
+
+				LastPos=pos;
+
+				SetCursor(LoadCursor(NULL,IDC_CROSS));
+			}
+			return 0;
+		case WM_LBUTTONUP:
+		case WM_RBUTTONUP:
+			if(dwDrag==0) return 0;
+			if(dwDrag==1&&message==WM_RBUTTONUP||
+				dwDrag==2&&message==WM_LBUTTONUP) return 0;
+
+			WndNum=GetWndNum(GetParent(hwnd));
+
+			pos.x=(short)(LOWORD(lParam)-ZOOMED_XPOS)/PIXEL_WIDTH;
+			pos.y=(short)HIWORD(lParam)/PIXEL_WIDTH;
+
+			if(dwDrag==1){
+				MainClrRef=MdiInfo[WndNum].MdiIconEditInfo->MainColor;
+				SubClrRef=MdiInfo[WndNum].MdiIconEditInfo->SubColor;
+			}
+			else{
+				MainClrRef=MdiInfo[WndNum].MdiIconEditInfo->SubColor;
+				SubClrRef=MdiInfo[WndNum].MdiIconEditInfo->MainColor;
+			}
+
+			ReleaseCapture();
+			dwDrag=0;
+
+			bRedrawMemBmp=0;
+			if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_SELECT){
+				if(NowDragging==SELECTING_FRAME){
+					if(LastPos.x==pos.x&&LastPos.y==pos.y){
+						ResetState_EditMenu();
+						return 0;
+					}
+					rect.left=LastPos.x;
+					rect.top=LastPos.y;
+					rect.right=pos.x;
+					rect.bottom=pos.y;
+
+					RectNaturalFormat(&rect,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
+					LimitRectFormat(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
+					MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=1;
+					InvalidateRect(hwnd,NULL,0);
+				}
+				else if(NowDragging==FRAME_INSIDE)
+					InvalidateRect(hwnd,NULL,0);
+			}
+			else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_LINE){
+				//変更情報
+				IconEdit_NoticeChanging(WndNum);
+
+				IconEdit_DrawLine(WndNum,LastPos.x,LastPos.y,pos.x,pos.y,GetColorCode(WndNum,MainClrRef));
+
+				bRedrawMemBmp=1;
+			}
+			else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_RECTANGLE){
+				//変更情報
+				IconEdit_NoticeChanging(WndNum);
+
+				IconEdit_DrawRectangle(WndNum,LastPos.x,LastPos.y,pos.x,pos.y,GetColorCode(WndNum,MainClrRef),0,0);
+
+				bRedrawMemBmp=1;
+			}
+			else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILLRECT){
+				//変更情報
+				IconEdit_NoticeChanging(WndNum);
+
+				IconEdit_DrawRectangle(WndNum,LastPos.x,LastPos.y,pos.x,pos.y,
+					GetColorCode(WndNum,MainClrRef),
+					GetColorCode(WndNum,SubClrRef),1);
+
+				bRedrawMemBmp=1;
+			}
+			else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILLRECT2){
+				//変更情報
+				IconEdit_NoticeChanging(WndNum);
+
+				IconEdit_DrawRectangle(WndNum,LastPos.x,LastPos.y,pos.x,pos.y,
+					GetColorCode(WndNum,MainClrRef),
+					GetColorCode(WndNum,MainClrRef),1);
+
+				bRedrawMemBmp=1;
+			}
+			else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_ELLIPSE){
+				//変更情報
+				IconEdit_NoticeChanging(WndNum);
+
+				IconEdit_DrawEllipse(WndNum,LastPos.x,LastPos.y,pos.x,pos.y,GetColorCode(WndNum,MainClrRef));
+
+				bRedrawMemBmp=1;
+			}
+
+			if(bRedrawMemBmp){
+				rect.left=LastPos.x;
+				rect.top=LastPos.y;
+				rect.right=pos.x;
+				rect.bottom=pos.y;
+				RectNaturalFormat(&rect,&rc2);
+				DrawIconToMemBmp(WndNum,&rc2);
+				InvalidateRect(hwnd,NULL,0);
+			}
+
+			ResetState_EditMenu();
+			return 0;
+		case WM_MOUSEMOVE:
+			WndNum=GetWndNum(GetParent(hwnd));
+
+			pos.x=(short)(LOWORD(lParam)-ZOOMED_XPOS)/PIXEL_WIDTH;
+			pos.y=(short)HIWORD(lParam)/PIXEL_WIDTH;
+
+			if(dwDrag==1){
+				MainClrRef=MdiInfo[WndNum].MdiIconEditInfo->MainColor;
+				SubClrRef=MdiInfo[WndNum].MdiIconEditInfo->SubColor;
+			}
+			else{
+				MainClrRef=MdiInfo[WndNum].MdiIconEditInfo->SubColor;
+				SubClrRef=MdiInfo[WndNum].MdiIconEditInfo->MainColor;
+			}
+
+			if(dwDrag){
+				if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_SELECT){
+					if(NowDragging==SELECTING_FRAME){
+						//範囲選択中
+						rect.left=LastPos.x;
+						rect.top=LastPos.y;
+						rect.right=pos.x;
+						rect.bottom=pos.y;
+						RectNaturalFormat(&rect,&rc2);
+						LimitRectFormat(WndNum,&rc2);
+						IconEdit_DrawFrame(hwnd,WndNum,&rc2);
+					}
+					else if(NowDragging==FRAME_INSIDE){
+						//移動中
+						dx=pos.x-LastPos.x;
+						dy=pos.y-LastPos.y;
+						MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left+=dx;
+						MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right+=dx;
+						MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top+=dy;
+						MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom+=dy;
+						LastPos=pos;
+
+
+						////////////////////////
+						// 古い選択範囲を再描画
+						HRGN hRgn,hRgn2;
+
+						OldRect.right++;
+						OldRect.bottom++;
+
+						hRgn=CreateRectRgnIndirect(&OldRect);
+						hRgn2=CreateRectRgnIndirect(&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
+						CombineRgn(hRgn,hRgn,hRgn2,RGN_XOR);
+						DeleteObject(hRgn2);
+
+						p2.x=OldRect.left;
+						p2.y=OldRect.top;
+						GetZoomedPos(&p2);
+						rect.left=p2.x;
+						rect.top=p2.y;
+						p2.x=OldRect.right;
+						p2.y=OldRect.bottom;
+						GetZoomedPos(&p2);
+						rect.right=p2.x+1;
+						rect.bottom=p2.y+1;
+						hRgn2=CreateRectRgnIndirect(&rect);
+						CombineRgn(hRgn,hRgn,hRgn2,RGN_OR);
+						DeleteObject(hRgn2);
+
+						p2.x=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.left;
+						p2.y=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.top;
+						GetZoomedPos(&p2);
+						rect.left=p2.x;
+						rect.top=p2.y;
+						p2.x=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.right;
+						p2.y=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect.bottom;
+						GetZoomedPos(&p2);
+						rect.right=p2.x+1;
+						rect.bottom=p2.y+1;
+						hRgn2=CreateRectRgnIndirect(&rect);
+						CombineRgn(hRgn,hRgn,hRgn2,RGN_XOR);
+						DeleteObject(hRgn2);
+
+						InvalidateRgn(hwnd,hRgn,0);
+						DeleteObject(hRgn);
+						UpdateWindow(hwnd);
+						hdc=GetDC(hwnd);
+						DrawSelectingImage(hdc,WndNum);
+						ReleaseDC(hwnd,hdc);
+
+						OldRect=MdiInfo[WndNum].MdiIconEditInfo->DraggingRect;
+					}
+				}
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_PEN){
+					if(abs(pos.x-LastPos.x)>1||abs(pos.y-LastPos.y)>1){
+						IconEdit_DrawLine(WndNum,LastPos.x,LastPos.y,pos.x,pos.y,GetColorCode(WndNum,MainClrRef));
+
+						rect.left=LastPos.x;
+						rect.top=LastPos.y;
+						rect.right=pos.x;
+						rect.bottom=pos.y;
+						RectNaturalFormat(&rect,&rc2);
+						DrawIconToMemBmp(WndNum,&rc2);
+						InvalidateRect(hwnd,NULL,0);
+					}
+					else{
+						PixelChange(WndNum,pos.x,pos.y,GetColorCode(WndNum,MainClrRef));
+
+						rect.left=pos.x;
+						rect.top=pos.y;
+						rect.right=pos.x;
+						rect.bottom=pos.y;
+						DrawIconToMemBmp(WndNum,&rect);
+						InvalidateRect(hwnd,NULL,0);
+					}
+					LastPos=pos;
+				}
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_LINE){
+					InvalidateRect(hwnd,NULL,0);
+					UpdateWindow(hwnd);
+
+					hdc=GetDC(hwnd);
+					TempLine(hdc,WndNum,LastPos.x,LastPos.y,pos.x,pos.y,MainClrRef);
+					ReleaseDC(hwnd,hdc);
+				}
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_RECTANGLE){
+					InvalidateRect(hwnd,NULL,0);
+					UpdateWindow(hwnd);
+
+					hdc=GetDC(hwnd);
+					TempRectangle(hdc,WndNum,LastPos.x,LastPos.y,pos.x,pos.y,MainClrRef,0,0);
+					ReleaseDC(hwnd,hdc);
+				}
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILLRECT){
+					InvalidateRect(hwnd,NULL,0);
+					UpdateWindow(hwnd);
+
+					hdc=GetDC(hwnd);
+					TempRectangle(hdc,WndNum,LastPos.x,LastPos.y,pos.x,pos.y,
+						MainClrRef,
+						SubClrRef,1);
+					ReleaseDC(hwnd,hdc);
+				}
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILLRECT2){
+					InvalidateRect(hwnd,NULL,0);
+					UpdateWindow(hwnd);
+
+					hdc=GetDC(hwnd);
+					TempRectangle(hdc,WndNum,LastPos.x,LastPos.y,pos.x,pos.y,
+						MainClrRef,
+						MainClrRef,1);
+					ReleaseDC(hwnd,hdc);
+				}
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_ELLIPSE){
+					InvalidateRect(hwnd,NULL,0);
+					UpdateWindow(hwnd);
+
+					hdc=GetDC(hwnd);
+					TempEllipse(hdc,WndNum,LastPos.x,LastPos.y,pos.x,pos.y,MainClrRef);
+					ReleaseDC(hwnd,hdc);
+				}
+			}
+			else{
+				//ドラッグ中でないとき
+				if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_SELECT){
+					if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel)
+						SetCursorByState(IconEdit_GetStateOfDraggingFrame(WndNum,LOWORD(lParam),HIWORD(lParam)));
+					else
+						SetCursor(LoadCursor(NULL,IDC_CROSS));
+				}
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_PEN)
+					SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_PEN)));
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILL)
+					SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_FILL)));
+				else if(MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_LINE||
+					MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_RECTANGLE||
+					MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILLRECT||
+					MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_FILLRECT2||
+					MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_ELLIPSE){
+					SetCursor(LoadCursor(NULL,IDC_CROSS));
+				}
+			}
+			return 0;
+		case WM_KEYDOWN:
+			switch(wParam){
+				case VK_ESCAPE:
+					WndNum=GetWndNum(GetParent(hwnd));
+					if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2){
+						DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+						MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+					}
+					InvalidateRect(hwnd,NULL,0);
+					return 0;
+			}
+			break;
+		case WM_PAINT:
+			PAINTSTRUCT ps;
+			SIZE size;
+
+			WndNum=GetWndNum(GetParent(hwnd));
+			BITMAPINFOHEADER *pBmpInfoHdr;
+			pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+
+			hdc=BeginPaint(hwnd,&ps);
+
+			size.cx=ZOOMED_XPOS+pBmpInfoHdr->biWidth*PIXEL_WIDTH+1;
+			size.cy=pBmpInfoHdr->biWidth*PIXEL_WIDTH+1;
+
+			BitBlt(hdc,
+				0,0,
+				size.cx,
+				size.cy,
+				MdiInfo[WndNum].MdiIconEditInfo->memdc,0,0,SRCCOPY);
+
+			HBRUSH hOldBrush;
+			hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(WHITE_BRUSH));
+			PatBlt(hdc,
+				0,size.cy,
+				ScreenX,ScreenY-size.cy,
+				PATCOPY);
+			PatBlt(hdc,
+				size.cx,0,
+				ScreenX-size.cx,size.cy,
+				PATCOPY);
+
+			if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==1)
+				IconEdit_DrawSelectingRect(hdc,WndNum);
+			if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2){
+				DrawSelectingImage(hdc,WndNum);
+				if(dwDrag==0) IconEdit_DrawSelectingRect(hdc,WndNum);
+			}
+
+			EndPaint(hwnd,&ps);
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
Index: /ProjectEditor/IconEditor_Tool.cpp
===================================================================
--- /ProjectEditor/IconEditor_Tool.cpp	(revision 3)
+++ /ProjectEditor/IconEditor_Tool.cpp	(revision 3)
@@ -0,0 +1,229 @@
+#include "common.h"
+
+char *GetIconEditToolName(DWORD id){
+	char *pTemp=0;
+
+#if defined(JPN)
+	//日本語
+	if(id==IDC_TOOL_SELECT) pTemp="選択";
+	else if(id==IDC_TOOL_PEN) pTemp="ペン";
+	else if(id==IDC_TOOL_LINE) pTemp="線";
+	else if(id==IDC_TOOL_FILL) pTemp="塗りつぶし";
+	else if(id==IDC_TOOL_RECTANGLE) pTemp="四角形";
+	else if(id==IDC_TOOL_FILLRECT) pTemp="縁付き四角形";
+	else if(id==IDC_TOOL_FILLRECT2) pTemp="塗りつぶし四角形";
+	else if(id==IDC_TOOL_ELLIPSE) pTemp="楕円";
+#else
+	//英語
+	if(id==IDC_TOOL_SELECT) pTemp="Tool";
+	else if(id==IDC_TOOL_PEN) pTemp="Pen";
+	else if(id==IDC_TOOL_LINE) pTemp="Line";
+	else if(id==IDC_TOOL_FILL) pTemp="Fill";
+	else if(id==IDC_TOOL_RECTANGLE) pTemp="Rectangle";
+	else if(id==IDC_TOOL_FILLRECT) pTemp="Rectangle with edge";
+	else if(id==IDC_TOOL_FILLRECT2) pTemp="Fill Rectangle";
+	else if(id==IDC_TOOL_ELLIPSE) pTemp="Ellipse";
+#endif
+
+	return pTemp;
+}
+
+BOOL CALLBACK DlgIconButtons(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int WndNum;
+	RECT rect;
+#define BMPNUM_ICONTOOLBAR 8
+	TBBUTTON IconToolBar[]={
+		{0,IDC_TOOL_SELECT,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
+		{1,IDC_TOOL_PEN,TBSTATE_ENABLED|TBSTATE_CHECKED,TBSTYLE_CHECKGROUP,0,0},
+		{2,IDC_TOOL_LINE,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{3,IDC_TOOL_FILL,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
+		{4,IDC_TOOL_RECTANGLE,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{5,IDC_TOOL_FILLRECT,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{6,IDC_TOOL_FILLRECT2,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
+		{7,IDC_TOOL_ELLIPSE,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+	};
+	TOOLTIPTEXT *pTipText;
+	static HWND hToolBar;
+
+	switch(message){
+		case WM_INITDIALOG:
+			MoveWindow(hwnd,20,120,80,200,1);
+
+			hToolBar=CreateToolbarEx(hwnd,WS_CHILD|WS_VISIBLE|CCS_NODIVIDER|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS,
+				NULL,
+				BMPNUM_ICONTOOLBAR,	/*ビットマップの個数*/
+				hResInst,(unsigned int)MAKEINTRESOURCE(IDR_ICONTOOLBAR),IconToolBar,
+				BMPNUM_ICONTOOLBAR,	/*アイテムの個数*/
+				0,0,16,15,sizeof(TBBUTTON));
+
+
+			//Windows9x系OSでの不具合を防ぐため
+			PostMessage(hwnd,WM_USER+120,0,0);
+
+			break;
+		case WM_USER+120:
+			GetClientRect(hwnd,&rect);
+			MoveWindow(hToolBar,0,0,rect.right,rect.bottom,1);
+			return 1;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_TOOL_SELECT:
+				case IDC_TOOL_PEN:
+				case IDC_TOOL_LINE:
+				case IDC_TOOL_FILL:
+				case IDC_TOOL_RECTANGLE:
+				case IDC_TOOL_FILLRECT:
+				case IDC_TOOL_FILLRECT2:
+				case IDC_TOOL_ELLIPSE:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(LOWORD(wParam)!=IDC_TOOL_SELECT&&
+						MdiInfo[WndNum].MdiIconEditInfo->NowTool==IDC_TOOL_SELECT){
+						MdiInfo[WndNum].MdiIconEditInfo->NowTool=LOWORD(wParam);
+						if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel){
+							if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2)
+								DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+							MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+						}
+						InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,0);
+					}
+					else MdiInfo[WndNum].MdiIconEditInfo->NowTool=LOWORD(wParam);
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			pTipText=(TOOLTIPTEXT *)lParam;
+			if(pTipText->hdr.code==TTN_NEEDTEXT){
+				//ツールチップを表示
+				pTipText->lpszText=GetIconEditToolName(pTipText->hdr.idFrom);
+			}
+			break;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgIconType(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,WndNum;
+	HWND hList;
+	BOOL bExist[4];
+	char temporary[32];
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+			WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+			memset(bExist,0,sizeof(BOOL)*4);
+			for(i=0;i<MdiInfo[WndNum].MdiIconEditInfo->num;i++){
+				if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biWidth==16&&
+					MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biBitCount==4){
+					bExist[0]=1;
+				}
+				if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biWidth==16&&
+					MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biBitCount==8){
+					bExist[1]=1;
+				}
+				if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biWidth==32&&
+					MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biBitCount==4){
+					bExist[2]=1;
+				}
+				if(MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biWidth==32&&
+					MdiInfo[WndNum].MdiIconEditInfo->pBmpHdr[i]->biBitCount==8){
+					bExist[3]=1;
+				}
+			}
+
+			hList=GetDlgItem(hwnd,IDC_TYPELIST);
+			if(bExist[0]==0){
+				//"16*16 (16色)"
+				sprintf(temporary,"16*16 (16%s)",STRING_UNIT_COLORS);
+				SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
+			}
+			if(bExist[1]==0){
+				//"16*16 (256色)"
+				sprintf(temporary,"16*16 (256%s)",STRING_UNIT_COLORS);
+				SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
+			}
+			if(bExist[2]==0){
+				//"32*32 (16色)"
+				sprintf(temporary,"32*32 (16%s)",STRING_UNIT_COLORS);
+				SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
+			}
+			if(bExist[3]==0){
+				//"32*32 (256色)"
+				sprintf(temporary,"32*32 (256%s)",STRING_UNIT_COLORS);
+				SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
+			}
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					hList=GetDlgItem(hwnd,IDC_TYPELIST);
+					SendMessage(hList,LB_GETTEXT,SendMessage(hList,LB_GETCURSEL,0,0),(long)temporary);
+
+					if(temporary[0]=='1'&&temporary[7]=='1') i=ICONTYPE_16_16;
+					if(temporary[0]=='1'&&temporary[7]=='2') i=ICONTYPE_16_256;
+					if(temporary[0]=='3'&&temporary[7]=='1') i=ICONTYPE_32_16;
+					if(temporary[0]=='3'&&temporary[7]=='2') i=ICONTYPE_32_256;
+					EndDialog(hwnd,i);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,-1);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgIconToolProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,WndNum;
+
+	switch(message){
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_ADD_ICONTYPE:
+					i=DialogBox(hResInst,MAKEINTRESOURCE(IDD_ICONEDIT_ICONTYPE),GetParent(hwnd),(DLGPROC)DlgIconType);
+					if(i==-1) return 1;
+
+					WndNum=GetWndNum(GetParent(hwnd));
+					AddIconType(WndNum,i);
+
+					EnableWindow(GetDlgItem(hwnd,IDC_DELETE_ICONTYPE),1);
+					return 1;
+				case IDC_DELETE_ICONTYPE:
+					WndNum=GetWndNum(GetParent(hwnd));
+					DeleteIconType(WndNum);
+
+					if(MdiInfo[WndNum].MdiIconEditInfo->num<=1)
+						EnableWindow(GetDlgItem(hwnd,IDC_DELETE_ICONTYPE),0);
+					return 1;
+				case IDC_ICONTYPECOMBO:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						WndNum=GetWndNum(GetParent(hwnd));
+
+						//イメージ選択用のメモリを解放
+						if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2)
+							DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+						MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+
+						MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum=
+							SendDlgItemMessage(hwnd,IDC_ICONTYPECOMBO,CB_GETCURSEL,0,0);
+
+						HBRUSH hOldBrush;
+						hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,GetStockObject(WHITE_BRUSH));
+						PatBlt(MdiInfo[WndNum].MdiIconEditInfo->memdc,0,0,400,400,PATCOPY);
+						SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hOldBrush);
+						DrawIconToMemBmp(WndNum,0);
+
+						InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,1);
+						InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hColorDlg,NULL,0);
+					}
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
Index: /ProjectEditor/IconEditor_UndoRedo.cpp
===================================================================
--- /ProjectEditor/IconEditor_UndoRedo.cpp	(revision 3)
+++ /ProjectEditor/IconEditor_UndoRedo.cpp	(revision 3)
@@ -0,0 +1,100 @@
+#include "common.h"
+
+void IconEdit_UndoCommand(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	BYTE *pByte;
+	ICONEDIT_UNDOSTATE *pUndoState;
+
+	pUndoState=&MdiInfo[WndNum].MdiIconEditInfo->undo[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+
+	i=pUndoState->NowPos-1;
+	if(i==-1) i=MAX_ICONEDIT_UNDONUM-1;
+	if(!pUndoState->lpData[i]){
+		MessageBeep(0);
+		return;
+	}
+	pUndoState->NowPos=i;
+
+	pByte=MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+	MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]=
+		pUndoState->lpData[i];
+	pUndoState->lpData[i]=pByte;
+
+	//選択フレームを消去
+	if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==2){
+		DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+		MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+	}
+
+	//再描画
+	DrawIconToMemBmp(WndNum,0);
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,0);
+
+	MdiInfo[WndNum].MdiIconEditInfo->bModify=1;
+
+	//メニューを有効化
+	ResetState_UndoMenu();
+}
+void IconEdit_RedoCommand(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	BYTE *pByte;
+	ICONEDIT_UNDOSTATE *pUndoState;
+
+	pUndoState=&MdiInfo[WndNum].MdiIconEditInfo->undo[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+
+	if(!pUndoState->lpData[pUndoState->NowPos]){
+		MessageBeep(0);
+		return;
+	}
+
+	pByte=MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+	MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]=
+		pUndoState->lpData[pUndoState->NowPos];
+	pUndoState->lpData[pUndoState->NowPos]=pByte;
+
+	DrawIconToMemBmp(WndNum,0);
+	InvalidateRect(MdiInfo[WndNum].MdiIconEditInfo->hMain,NULL,0);
+
+	pUndoState->NowPos++;
+	if(pUndoState->NowPos==MAX_ICONEDIT_UNDONUM) pUndoState->NowPos=0;
+
+	MdiInfo[WndNum].MdiIconEditInfo->bModify=1;
+
+	ResetState_UndoMenu();
+}
+void IconEdit_NoticeChanging(int WndNum){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	ICONEDIT_UNDOSTATE *pUndoState;
+
+	pUndoState=&MdiInfo[WndNum].MdiIconEditInfo->undo[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
+
+	//Redoされた場合の不要なデータを削除する
+	for(i=pUndoState->NowPos;;i++){
+		if(i==MAX_ICONEDIT_UNDONUM) i=0;
+		if(pUndoState->lpData[i]==0) break;
+		HeapDefaultFree(pUndoState->lpData[i]);
+		pUndoState->lpData[i]=0;
+	}
+
+	pUndoState->lpData[pUndoState->NowPos]=(BYTE *)
+		HeapAlloc(hHeap,0,MdiInfo[WndNum].MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]);
+
+	memcpy(pUndoState->lpData[pUndoState->NowPos],
+		MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum],
+		MdiInfo[WndNum].MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum]);
+
+	pUndoState->NowPos++;
+	if(pUndoState->NowPos==MAX_ICONEDIT_UNDONUM) pUndoState->NowPos=0;
+	if(pUndoState->lpData[pUndoState->NowPos]){
+		//一番古い情報を切り捨てる
+		HeapDefaultFree(pUndoState->lpData[pUndoState->NowPos]);
+		pUndoState->lpData[pUndoState->NowPos]=0;
+	}
+
+	MdiInfo[WndNum].MdiIconEditInfo->bModify=1;
+
+	ResetState_UndoMenu();
+}
Index: /ProjectEditor/LuxCtrl.cpp
===================================================================
--- /ProjectEditor/LuxCtrl.cpp	(revision 3)
+++ /ProjectEditor/LuxCtrl.cpp	(revision 3)
@@ -0,0 +1,5 @@
+#include "common.h"
+
+HINSTANCE hLib_LuxCtrl;
+
+PROC_LuxToolbar_CreateInstance LuxToolbar_CreateInstance;
Index: /ProjectEditor/LuxCtrl.h
===================================================================
--- /ProjectEditor/LuxCtrl.h	(revision 3)
+++ /ProjectEditor/LuxCtrl.h	(revision 3)
@@ -0,0 +1,26 @@
+
+
+extern "C++"
+{
+class ILuxToolbar:public IUnknown{
+public:
+	virtual void _stdcall Create(HWND hParent);
+	virtual HWND _stdcall GetHandle(void);
+	virtual void _stdcall Insert(int index,int id,HICON hIcon,LPSTR lpszToolTip);
+	virtual void _stdcall Add(int id,HICON hIcon,LPSTR lpszToolTip);
+	virtual void _stdcall Clear(void);
+	virtual void _stdcall EnableItem(int id,BOOL bEnabled);
+	virtual void _stdcall GetSize(SIZE &ref_size);
+};
+}// extern "C++"
+
+extern HINSTANCE hLib_LuxCtrl;
+
+typedef ILuxToolbar *(_stdcall *PROC_LuxToolbar_CreateInstance)(void);
+extern PROC_LuxToolbar_CreateInstance LuxToolbar_CreateInstance;
+
+
+
+extern ILuxToolbar *pobj_StandardToolbar;
+extern ILuxToolbar *pobj_ReleaseToolbar;
+extern ILuxToolbar *pobj_DebuggerToolbar;
Index: /ProjectEditor/MenuProc.cpp
===================================================================
--- /ProjectEditor/MenuProc.cpp	(revision 3)
+++ /ProjectEditor/MenuProc.cpp	(revision 3)
@@ -0,0 +1,893 @@
+#include "Common.h"
+
+#if defined(JPN)
+//日本語
+#include "rad_msg_jpn.h"
+#else
+//英語
+#include "rad_msg_eng.h"
+#endif
+
+int GetMenuInfoNum(char *name){
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+		if(lstrcmpi(name,ProjectInfo.pMenuInfo[i].IdName)==0) return i;
+	}
+	return -1;
+}
+void HeapMenuDataFree(MENU_INFO *pMenuInfo,int ItemNum,int *NumberOfFreedItem){
+	extern HANDLE hHeap;
+	int i;
+	for(i=0;i<ItemNum;i++){
+		if(NumberOfFreedItem) (*NumberOfFreedItem)++;
+		if(pMenuInfo[i].caption) HeapDefaultFree(pMenuInfo[i].caption);
+		if(pMenuInfo[i].IdName) HeapDefaultFree(pMenuInfo[i].IdName);
+		if(pMenuInfo[i].pMenuInfo){
+			HeapMenuDataFree(pMenuInfo[i].pMenuInfo,pMenuInfo[i].NumberOfMenu,NumberOfFreedItem);
+			HeapDefaultFree(pMenuInfo[i].pMenuInfo);
+		}
+	}
+}
+
+BOOL CALLBACK DlgProject_MenuID_Input(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern char NewIdName[MAX_PATH];
+	switch(message){
+		case WM_INITDIALOG:
+			if(lParam==0){
+				//"新規メニュー"
+				SetWindowText(hwnd,STRING_MENUEDIT_MAKE_NEWMENU);
+			}
+			else{
+				//"メニューIDの変更"
+				SetWindowText(hwnd,STRING_MENUEDIT_RENAME_MENUID);
+				SetDlgItemText(hwnd,IDC_IDNAME,(char *)lParam);
+			}
+			SetPosCenter(hwnd);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					GetDlgItemText(hwnd,IDC_IDNAME,NewIdName,MAX_PATH);
+					if(!NewIdName[0]){
+						//"ID名を入力して下さい。"
+						MessageBox(hwnd,STRING_ERROR_MUST_IDNAME,STRING_ERROR,MB_OK);
+						return 1;
+					}
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+void Project_Menu_Insert(void){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern char NewIdName[MAX_PATH];
+	int i;
+	char temporary[MAX_PATH];
+	MENU_INFO *MenuInfo;
+
+	if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,(DLGPROC)DlgProject_MenuID_Input,0)) return;
+
+	//重複チェック
+	for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+		if(lstrcmpi(NewIdName,ProjectInfo.pMenuInfo[i].IdName)==0){
+			//"\"%s\" メニューは既にプロジェクト内に存在します。"
+			sprintf(temporary,STRING_MENUEDIT_DUPLICATIONERROR,ProjectInfo.pMenuInfo[i].IdName);
+			MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+	}
+
+	ProjectInfo.pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pMenuInfo,(ProjectInfo.NumberOfMenu+1)*sizeof(MENU_INFO));
+	MenuInfo=&ProjectInfo.pMenuInfo[ProjectInfo.NumberOfMenu];
+
+	MenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
+	lstrcpy(MenuInfo->IdName,NewIdName);
+
+	MenuInfo->caption=0;
+
+	MenuInfo->NumberOfMenu=0;
+	MenuInfo->pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+
+
+	//////////////////////
+	//ツリービューに追加
+
+	extern HWND hMaterialTreeView;
+	TV_INSERTSTRUCT tv;
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.item.iImage=3;
+	tv.item.iSelectedImage=3;
+	tv.hParent=ProjectInfo.hMenuTreeItem;
+	tv.item.pszText=MenuInfo->IdName;
+
+	MenuInfo->hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
+
+	TreeView_SelectItem(hMaterialTreeView,MenuInfo->hTreeItem);
+
+
+	ProjectInfo.NumberOfMenu++;
+	ProjectInfo.ModifyOfMaterial=1;
+
+
+	////////////////////////////////
+	// ウィンドウ プロパティを更新
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
+			if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+				ChangePropertyWindow(i,GetWndInfoNum(MdiInfo[i].path));
+		}
+	}
+
+	NewMenuWindow(&ProjectInfo.pMenuInfo[ProjectInfo.NumberOfMenu-1]);
+}
+void Project_Menu_Delete(int MenuInfoNum){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i;
+
+	//ウィンドウが開かれている場合は閉じる
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd&&lstrcmpi(ProjectInfo.pMenuInfo[MenuInfoNum].IdName,MdiInfo[i].path)==0){
+			SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
+			break;
+		}
+	}
+
+	//メニュー情報のメモリを解放
+	HeapMenuDataFree(ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo,ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu,0);
+	HeapDefaultFree(ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo);
+	HeapDefaultFree(ProjectInfo.pMenuInfo[MenuInfoNum].IdName);
+
+	//ツリービューから削除
+	extern HWND hMaterialTreeView;
+	TreeView_DeleteItem(hMaterialTreeView,ProjectInfo.pMenuInfo[MenuInfoNum].hTreeItem);
+
+	//ProjectInfo.pMenuInfo構造体から削除
+	ProjectInfo.NumberOfMenu--;
+	for(i=MenuInfoNum;i<ProjectInfo.NumberOfMenu;i++) ProjectInfo.pMenuInfo[i]=ProjectInfo.pMenuInfo[i+1];
+	if(ProjectInfo.NumberOfMenu==0){
+		HeapDefaultFree(ProjectInfo.pMenuInfo);
+		ProjectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+	}
+	else ProjectInfo.pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu*sizeof(MENU_INFO));
+
+	ProjectInfo.ModifyOfMaterial=1;
+
+
+	////////////////////////////////
+	// ウィンドウ プロパティを更新
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
+			if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+				ChangePropertyWindow(i,GetWndInfoNum(MdiInfo[i].path));
+		}
+	}
+}
+
+void SetMenuDataList(HWND hList,MENU_INFO *pMenuInfo,int GradeNum){
+	int i;
+	char temporary[MAX_PATH];
+	for(i=0;i<pMenuInfo->NumberOfMenu;i++){
+		memset(temporary,' ',GradeNum*4);
+		temporary[GradeNum*4]=0;
+		if(pMenuInfo->pMenuInfo[i].type==MFT_SEPARATOR)
+			lstrcpy(temporary+GradeNum*4,"-");
+		else
+			lstrcpy(temporary+GradeNum*4,pMenuInfo->pMenuInfo[i].caption);
+		SendMessage(hList,LB_ADDSTRING,0,(long)temporary);
+		if(pMenuInfo->pMenuInfo[i].pMenuInfo)
+			SetMenuDataList(hList,&pMenuInfo->pMenuInfo[i],GradeNum+1);
+	}
+}
+void NewMenuWindow(MENU_INFO *pMenuInfo){
+	extern HINSTANCE hInst;
+	extern HWND hDocCombo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	HWND hChild,hListWnd,hMenuEdit;
+	RECT rect;
+	MDICREATESTRUCT mdic;
+
+	//すでに指定されたファイルが開かれている場合
+	hChild=GetWindow(hClient,GW_CHILD);
+	while(hChild){
+		i=GetWndNum(hChild);
+		if(MdiInfo[i].DocType==WNDTYPE_MENU){
+			if(lstrcmpi(MdiInfo[i].path,pMenuInfo->IdName)==0) break;
+		}
+		hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+	}
+	if(hChild){
+		BringWindowToTop(hChild);
+		return;
+	}
+
+	mdic.szTitle=pMenuInfo->IdName;
+	mdic.szClass="MDIClientWindow_Menu";
+	mdic.hOwner=hInst;
+	mdic.x=CW_USEDEFAULT;
+	mdic.y=CW_USEDEFAULT;
+	mdic.cx=CW_USEDEFAULT;
+	mdic.cy=CW_USEDEFAULT;
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	if(IsWindow(hChild)){
+		if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
+		else mdic.style=0;
+	}
+	else{
+		if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE;
+		else mdic.style=0;
+	}
+
+	mdic.lParam=0;
+	hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic);	//ウィンドウ作成
+
+
+	////////////////////
+	//子ウィンドウ作成
+
+	//ダイアログの下地を作成
+	hMenuEdit=CreateWindowEx(WS_EX_CLIENTEDGE,"MenuEditWindow",NULL,
+		WS_CHILD|WS_VSCROLL|WS_VISIBLE,
+		0,0,0,0,
+		hChild,NULL,hInst,NULL);
+
+	//メニュー リスト ウィンドウを作成
+	hListWnd=CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX",NULL,
+		WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE|LBS_NOTIFY|LBS_NOINTEGRALHEIGHT,
+		0,0,0,0,
+		hChild,NULL,hInst,NULL);
+
+	//ウィンドウのID登録
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd==0){
+			MdiInfo[i].hwnd=hChild;
+			MdiInfo[i].DocType=WNDTYPE_MENU;
+			MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pMenuInfo->IdName)+1);
+			lstrcpy(MdiInfo[i].title,pMenuInfo->IdName);
+			MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pMenuInfo->IdName)+1);
+			lstrcpy(MdiInfo[i].path,pMenuInfo->IdName);
+
+
+			/////////////////////
+			//MENU ウィンドウ情報
+
+			MdiInfo[i].MdiMenuInfo=(MDIMENUINFO *)GlobalAlloc(GPTR,sizeof(MDIMENUINFO));
+
+			MdiInfo[i].MdiMenuInfo->hList=hListWnd;
+
+			MdiInfo[i].MdiMenuInfo->hMenuEdit=hMenuEdit;
+			MdiInfo[i].MdiMenuInfo->hEdit_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_PROJECT_MENUEDIT),hMenuEdit,(DLGPROC)MenuEditDlg);
+
+			SCROLLINFO ScrollInfo;
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_POS;
+			ScrollInfo.nPos=0;
+			SetScrollInfo(MdiInfo[i].MdiMenuInfo->hMenuEdit,SB_VERT,&ScrollInfo,1);
+
+			SendMessage(hListWnd,LB_RESETCONTENT,0,0);
+			SetMenuDataList(hListWnd,pMenuInfo,0);
+			if(pMenuInfo->NumberOfMenu){
+				SendMessage(hListWnd,LB_SETCURSEL,0,0);
+				SendMessage(hChild,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)hListWnd);
+			}
+			break;
+		}
+	}
+
+	//ウィンドウ位置を初期化
+	GetClientRect(hChild,&rect);
+	MoveWindow(MdiInfo[i].MdiMenuInfo->hMenuEdit,0,0,172,rect.bottom,1);
+	MoveWindow(MdiInfo[i].MdiMenuInfo->hList,172,0,rect.right-172,rect.bottom,1);
+
+	//Docコンボボックスに追加
+	i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)pMenuInfo->IdName);
+	SendMessage(hDocCombo,CB_SETCURSEL,i,0);
+
+	//タブに追加
+	pobj_MainTab->insert(pMenuInfo->IdName,1);
+
+	SetFocus(hListWnd);
+
+	//メニュー状態を設定
+	ResetState_DocMenu();
+}
+
+int GetNumberOfMenu(MENU_INFO *pMenuInfo){
+	int i,i2;
+	for(i=0,i2=0;i<pMenuInfo->NumberOfMenu;i++,i2++){
+		if(pMenuInfo->pMenuInfo[i].pMenuInfo) i2+=GetNumberOfMenu(&pMenuInfo->pMenuInfo[i]);
+	}
+	return i2;
+}
+MENU_INFO *GetMenuInfoFromList(MENU_INFO *pMenuInfo,int *pPos,int index,int *GradeNum){
+	int i;
+	MENU_INFO *pRetMenuInfo;
+	for(i=0;i<pMenuInfo->NumberOfMenu;i++){
+		if((*pPos)==index){
+			*pPos=i;
+			return pMenuInfo;
+		}
+		(*pPos)++;
+		if(pMenuInfo->pMenuInfo[i].pMenuInfo){
+			(*GradeNum)++;
+			pRetMenuInfo=GetMenuInfoFromList(&pMenuInfo->pMenuInfo[i],pPos,index,GradeNum);
+			if(pRetMenuInfo) return pRetMenuInfo;
+			(*GradeNum)--;
+		}
+	}
+	return 0;
+}
+BOOL CALLBACK DlgMenuProperty_Rename(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HWND hClient,hOwner;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	char temporary[MAX_PATH];
+	static MENU_INFO *pMenuInfo;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			i=GetWndNum(GetWindow(hClient,GW_CHILD));
+			GetDlgItemText(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,temporary,MAX_PATH);
+			SetDlgItemText(hwnd,IDC_IDNAME,temporary);
+			GetDlgItemText(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,temporary,MAX_PATH);
+			SetDlgItemText(hwnd,IDC_CAPTION,temporary);
+
+			pMenuInfo=(MENU_INFO *)lParam;
+			if(pMenuInfo->pMenuInfo){
+				EnableWindow(GetDlgItem(hwnd,IDC_IDSTATIC),0);
+				EnableWindow(GetDlgItem(hwnd,IDC_IDNAME),0);
+			}
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					i=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+					if(!pMenuInfo->pMenuInfo){
+						//ID
+						GetDlgItemText(hwnd,IDC_IDNAME,temporary,MAX_PATH);
+						if(!temporary[0]){
+							//"ID名を入力して下さい。"
+							MessageBox(hOwner,STRING_ERROR_MUST_IDNAME,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+							break;
+						}
+						HeapDefaultFree(pMenuInfo->IdName);
+						pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(pMenuInfo->IdName,temporary);
+					}
+
+					//キャプション
+					GetDlgItemText(hwnd,IDC_CAPTION,temporary,MAX_PATH);
+					if(!temporary[0]){
+						//"キャプションを入力して下さい。"
+						MessageBox(hOwner,STRING_ERROR_MUST_CAPTION,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+						break;
+					}
+					HeapDefaultFree(pMenuInfo->caption);
+					pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+					lstrcpy(pMenuInfo->caption,temporary);
+
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+BOOL CALLBACK MenuEditDlg(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,i4,WndNum,MenuInfoNum;
+	char temporary[MAX_PATH];
+	MENU_INFO *pMenuInfo,tempMenuInfo;
+
+	switch(message){
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_RENAME:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+					if(i4==LB_ERR) return 1;
+					i2=0;
+					i3=0;
+					pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+					pMenuInfo=&pMenuInfo->pMenuInfo[i2];
+
+					if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_PROJECT_MENURENAME),hOwner,(DLGPROC)DlgMenuProperty_Rename,(long)pMenuInfo)) return 1;
+					GetDlgItemText(hwnd,IDC_IDNAME,temporary,MAX_PATH);
+
+					if(!pMenuInfo->pMenuInfo){
+						//ID
+						SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,pMenuInfo->IdName);
+					}
+
+					//キャプション
+					SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
+
+					//リストへキャプションを反映
+					SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
+					memset(temporary,' ',i3*4);
+					lstrcpy(temporary+i3*4,pMenuInfo->caption);
+					SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
+
+					SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
+					ProjectInfo.ModifyOfMaterial=1;
+					return 1;
+				case IDC_POPUP:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+					if(i4==LB_ERR) return 1;
+					i2=0;
+					i3=0;
+					pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+					pMenuInfo=&pMenuInfo->pMenuInfo[i2];
+
+					if(pMenuInfo->pMenuInfo){
+						if(pMenuInfo->NumberOfMenu){
+							//"この操作を行うとポップアップされるメニュー アイテムも削除されます。"
+							if(MessageBox(hOwner,STRING_MENUEDIT_DELETECHECK,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)==IDCANCEL) return 1;
+						}
+						i=0;
+						HeapMenuDataFree(pMenuInfo->pMenuInfo,pMenuInfo->NumberOfMenu,&i);
+
+						for(i2=0;i2<i;i2++)
+							SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4+1,0);
+
+						HeapDefaultFree(pMenuInfo->pMenuInfo);
+						pMenuInfo->pMenuInfo=0;
+						lstrcpy(temporary,"IDM_name");
+						pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(pMenuInfo->IdName,temporary);
+					}
+					else{
+						if(pMenuInfo->type==MFT_STRING){
+							HeapDefaultFree(pMenuInfo->IdName);
+							pMenuInfo->IdName=0;
+						}
+						else if(pMenuInfo->type==MFT_SEPARATOR){
+							lstrcpy(temporary,"caption text");
+							pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+							lstrcpy(pMenuInfo->caption,temporary);
+						}
+						pMenuInfo->NumberOfMenu=0;
+						pMenuInfo->pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+						pMenuInfo->type=MFT_STRING;
+					}
+					SendMessage(MdiInfo[WndNum].hwnd,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
+					ProjectInfo.ModifyOfMaterial=1;
+					return 1;
+				case IDC_SEPARATOR:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+					if(i4==LB_ERR) return 1;
+					i2=0;
+					i3=0;
+					pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+					pMenuInfo=&pMenuInfo->pMenuInfo[i2];
+
+					if(SendDlgItemMessage(hwnd,IDC_SEPARATOR,BM_GETCHECK,0,0)){
+						HeapDefaultFree(pMenuInfo->caption);
+						pMenuInfo->caption=0;
+						HeapDefaultFree(pMenuInfo->IdName);
+						pMenuInfo->IdName=0;
+						pMenuInfo->type=MFT_SEPARATOR;
+
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
+						memset(temporary,' ',i3*4);
+						lstrcpy(temporary+i3*4,"-");
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
+					}
+					else{
+						lstrcpy(temporary,"caption text");
+						pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(pMenuInfo->caption,temporary);
+						lstrcpy(temporary,"IDM_name");
+						pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(pMenuInfo->IdName,temporary);
+						pMenuInfo->type=MFT_STRING;
+
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
+						memset(temporary,' ',i3*4);
+						lstrcpy(temporary+i3*4,pMenuInfo->caption);
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
+					}
+					SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
+					SendMessage(MdiInfo[WndNum].hwnd,WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
+					return 1;
+				case IDC_CHECKED:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+					if(i4==LB_ERR) return 1;
+					i2=0;
+					i3=0;
+					pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+					pMenuInfo=&pMenuInfo->pMenuInfo[i2];
+
+					if(SendDlgItemMessage(hwnd,IDC_CHECKED,BM_GETCHECK,0,0))
+						pMenuInfo->state|=MFS_CHECKED;
+					else
+						pMenuInfo->state&=~MFS_CHECKED;
+
+					ProjectInfo.ModifyOfMaterial=1;
+					return 1;
+				case IDC_DISABLED:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+					if(i4==LB_ERR) return 1;
+					i2=0;
+					i3=0;
+					pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+					pMenuInfo=&pMenuInfo->pMenuInfo[i2];
+
+					if(SendDlgItemMessage(hwnd,IDC_DISABLED,BM_GETCHECK,0,0))
+						pMenuInfo->state|=MFS_DISABLED;
+					else
+						pMenuInfo->state&=~MFS_DISABLED;
+
+					ProjectInfo.ModifyOfMaterial=1;
+					return 1;
+				case IDC_INSERTMENUITEM:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					if(ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu==0){
+						ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo,(ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu+1)*sizeof(MENU_INFO));
+						pMenuInfo=&ProjectInfo.pMenuInfo[MenuInfoNum].pMenuInfo[ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu];
+
+						sprintf(temporary,"caption text");
+						pMenuInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(pMenuInfo->caption,temporary);
+
+						sprintf(temporary,"IDM_name");
+						pMenuInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(pMenuInfo->IdName,temporary);
+
+						pMenuInfo->state=0;
+						pMenuInfo->type=MFT_STRING;
+						pMenuInfo->pMenuInfo=0;
+
+						ProjectInfo.pMenuInfo[MenuInfoNum].NumberOfMenu++;
+
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,0,(long)pMenuInfo->caption);
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,0,0);
+						SendMessage(GetParent(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit),WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
+					}
+					else{
+						i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+						if(i4==LB_ERR){
+							//"新しいメニュー アイテムの挿入位置を選択して下さい"
+							MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_NEW_ITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+							return 1;
+						}
+						i2=0;
+						i3=0;
+						pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+						if(pMenuInfo->pMenuInfo[i2].pMenuInfo){
+							//"ポップアップ アイテムを作成する場合は \"はい\" を、ポップアップと同じ階層にメニュー アイテムを作成する場合は \"いいえ\" を押して下さい。"
+							i=MessageBox(hOwner,STRING_MENUEDIT_INSERTTYPE_YESNO,APPLICATION_NAME,MB_YESNOCANCEL);
+							if(i==IDYES){
+								pMenuInfo=&pMenuInfo->pMenuInfo[i2];
+								i2=0;
+								i3++;
+							}
+							else if(i==IDNO){
+								i4+=GetNumberOfMenu(&pMenuInfo->pMenuInfo[i2]);
+								i2++;
+							}
+							else return 1;
+						}
+						else i2++;
+						i4++;
+						pMenuInfo->pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,pMenuInfo->pMenuInfo,(pMenuInfo->NumberOfMenu+1)*sizeof(MENU_INFO));
+						for(i=pMenuInfo->NumberOfMenu;i>i2;i--){
+							pMenuInfo->pMenuInfo[i]=pMenuInfo->pMenuInfo[i-1];
+						}
+						memset(&pMenuInfo->pMenuInfo[i2],0,sizeof(MENU_INFO));
+
+						sprintf(temporary,"caption text");
+						pMenuInfo->pMenuInfo[i2].caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(pMenuInfo->pMenuInfo[i2].caption,temporary);
+
+						sprintf(temporary,"IDM_name");
+						pMenuInfo->pMenuInfo[i2].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(pMenuInfo->pMenuInfo[i2].IdName,temporary);
+
+						memset(temporary,' ',i3*4);
+						lstrcpy(temporary+i3*4,pMenuInfo->pMenuInfo[i2].caption);
+
+						pMenuInfo->NumberOfMenu++;
+
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_INSERTSTRING,i4,(long)temporary);
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
+						SendMessage(GetParent(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit),WM_COMMAND,MAKELONG(0,LBN_SELCHANGE),(long)MdiInfo[WndNum].MdiMenuInfo->hList);
+					}
+					ProjectInfo.ModifyOfMaterial=1;
+					return 1;
+				case IDC_DELETEMENUITEM:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+					if(i4==LB_ERR){
+						//"削除するメニュー アイテムを選択して下さい"
+						MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_DELETE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+						return 1;
+					}
+					i2=0;
+					i3=0;
+					pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+
+					i3=1;
+					if(pMenuInfo->pMenuInfo[i2].pMenuInfo){
+						if(pMenuInfo->pMenuInfo[i2].NumberOfMenu){
+							//"この操作を行うとポップアップされるメニュー アイテムも削除されます。"
+							if(MessageBox(hOwner,STRING_MENUEDIT_DELETECHECK,APPLICATION_NAME,MB_OKCANCEL)==IDCANCEL) return 1;
+						}
+						HeapMenuDataFree(pMenuInfo->pMenuInfo[i2].pMenuInfo,pMenuInfo->pMenuInfo[i2].NumberOfMenu,&i3);
+						HeapDefaultFree(pMenuInfo->pMenuInfo[i2].pMenuInfo);
+					}
+					else HeapDefaultFree(pMenuInfo->pMenuInfo[i2].IdName);
+
+					if(pMenuInfo->pMenuInfo[i2].type!=MFT_SEPARATOR)
+						HeapDefaultFree(pMenuInfo->pMenuInfo[i2].caption);
+
+					for(i=i2;i<pMenuInfo->NumberOfMenu-1;i++)
+						pMenuInfo->pMenuInfo[i]=pMenuInfo->pMenuInfo[i+1];
+
+					pMenuInfo->NumberOfMenu--;
+					pMenuInfo->pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,0,pMenuInfo->pMenuInfo,pMenuInfo->NumberOfMenu*sizeof(MENU_INFO));
+
+					for(i=0;i<i3;i++)
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_DELETESTRING,i4,0);
+
+					i=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCOUNT,0,0)-1;
+					if(i){
+						if(i<i4) i4=i;
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4,0);
+					}
+
+					ProjectInfo.ModifyOfMaterial=1;
+					return 1;
+				case IDC_UP:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+					if(i4==LB_ERR){
+						//"移動するメニュー アイテムを選択して下さい"
+						MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_MOVE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+						return 1;
+					}
+					i2=0;
+					i3=0;
+					pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+					if(i2==0) return 1;
+					i2--;
+
+					memcpy(&tempMenuInfo,&pMenuInfo->pMenuInfo[i2],sizeof(MENU_INFO));
+					memcpy(&pMenuInfo->pMenuInfo[i2],&pMenuInfo->pMenuInfo[i2+1],sizeof(MENU_INFO));
+					memcpy(&pMenuInfo->pMenuInfo[i2+1],&tempMenuInfo,sizeof(MENU_INFO));
+
+					SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_RESETCONTENT,0,0);
+					SetMenuDataList(MdiInfo[WndNum].MdiMenuInfo->hList,&ProjectInfo.pMenuInfo[MenuInfoNum],0);
+					if(!pMenuInfo->pMenuInfo[i2].pMenuInfo)
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4-1,0);
+
+					ProjectInfo.ModifyOfMaterial=1;
+					return 1;
+				case IDC_DOWN:
+					WndNum=GetWndNum(GetParent(GetParent(hwnd)));
+					if(WndNum==-1) return 1;
+					MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+
+					i4=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+					if(i4==LB_ERR){
+						//"移動するメニュー アイテムを選択して下さい"
+						MessageBox(hOwner,STRING_MENUEDIT_MUSTSELECT_MOVE_MENUITEM,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+						return 1;
+					}
+					i2=0;
+					i3=0;
+					pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i4,&i3);
+					if(pMenuInfo->NumberOfMenu<=i2+1) return 1;
+
+					memcpy(&tempMenuInfo,&pMenuInfo->pMenuInfo[i2],sizeof(MENU_INFO));
+					memcpy(&pMenuInfo->pMenuInfo[i2],&pMenuInfo->pMenuInfo[i2+1],sizeof(MENU_INFO));
+					memcpy(&pMenuInfo->pMenuInfo[i2+1],&tempMenuInfo,sizeof(MENU_INFO));
+
+					SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_RESETCONTENT,0,0);
+					SetMenuDataList(MdiInfo[WndNum].MdiMenuInfo->hList,&ProjectInfo.pMenuInfo[MenuInfoNum],0);
+					if(!pMenuInfo->pMenuInfo[i2].pMenuInfo)
+						SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_SETCURSEL,i4+1,0);
+
+					ProjectInfo.ModifyOfMaterial=1;
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+LRESULT CALLBACK MenuEditWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HINSTANCE hInst;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	RECT rect;
+	SCROLLINFO ScrollInfo;
+
+	switch(message){
+		case WM_MOUSEACTIVATE:
+			BringWindowToTop(GetParent(hwnd));
+			return 0;
+		case WM_VSCROLL:
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			if(LOWORD(wParam)==SB_LINEUP) i=-20;
+			else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
+			else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
+			else i=0;
+			GetClientRect(hwnd,&rect);
+			i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
+			if(i!=0){
+				ScrollInfo.nPos+=i;
+				SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
+				ScrollWindow(hwnd,0,-i,NULL,NULL);
+				UpdateWindow(hwnd);
+			}
+			return 0;
+		case WM_SIZE:
+			i=GetWndNum(GetParent(hwnd));
+			if(i==-1) return 0;	//ウィンドウが初期状態の場合
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			GetClientRect(MdiInfo[i].MdiMenuInfo->hEdit_Dlg,&rect);
+			ScrollInfo.nMin=0;
+			ScrollInfo.nMax=rect.bottom;
+			ScrollInfo.nPage=HIWORD(lParam);
+			SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
+
+			i=ScrollInfo.nPos;
+			ScrollInfo.fMask=SIF_POS;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			if(i>ScrollInfo.nPos){
+				ScrollWindow(hwnd,0,i-ScrollInfo.nPos,NULL,NULL);
+				UpdateWindow(hwnd);
+			}
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+LRESULT CALLBACK MDIClientWindow_Menu(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HWND hDocCombo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,WndNum,MenuInfoNum;
+	MENU_INFO *pMenuInfo;
+
+	switch(message){
+		case WM_COMMAND:
+			WndNum=GetWndNum(hwnd);
+			if(WndNum==-1) return 0;
+			MenuInfoNum=GetMenuInfoNum(MdiInfo[WndNum].path);
+			if((HWND)lParam==MdiInfo[WndNum].MdiMenuInfo->hList&&HIWORD(wParam)==LBN_SELCHANGE){
+				i=SendMessage(MdiInfo[WndNum].MdiMenuInfo->hList,LB_GETCURSEL,0,0);
+				i2=0;
+				i3=0;
+				pMenuInfo=GetMenuInfoFromList(&ProjectInfo.pMenuInfo[MenuInfoNum],&i2,i,&i3);
+				pMenuInfo=&pMenuInfo->pMenuInfo[i2];
+
+				if(pMenuInfo->pMenuInfo){
+					SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
+					SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,"");
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),0);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),0);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),1);
+					SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_CHECKED,0);
+					SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_UNCHECKED,0);
+				}
+				else if(pMenuInfo->type==MFT_STRING){
+					SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,pMenuInfo->caption);
+					SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,pMenuInfo->IdName);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTIONSTATIC),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),1);
+					SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_UNCHECKED,0);
+					SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_UNCHECKED,0);
+				}
+				else if(pMenuInfo->type==MFT_SEPARATOR){
+					SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTION,"");
+					SetDlgItemText(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDNAME,"");
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_IDSTATIC),0);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CAPTIONSTATIC),0);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_RENAME),0);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP),0);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR),1);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED),0);
+					EnableWindow(GetDlgItem(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED),0);
+					SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_POPUP,BM_SETCHECK,BST_UNCHECKED,0);
+					SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_SEPARATOR,BM_SETCHECK,BST_CHECKED,0);
+				}
+
+				if(pMenuInfo->state&MFS_CHECKED) i2=BST_CHECKED;
+				else i2=BST_UNCHECKED;
+				SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_CHECKED,BM_SETCHECK,i2,0);
+				if(pMenuInfo->state&MFS_DISABLED) i2=BST_CHECKED;
+				else i2=BST_UNCHECKED;
+				SendDlgItemMessage(MdiInfo[WndNum].MdiMenuInfo->hEdit_Dlg,IDC_DISABLED,BM_SETCHECK,i2,0);
+			}
+			return 0;
+		case WM_MDIACTIVATE:
+			if(!lParam) return 0;
+			i=GetWndNum((HWND)lParam);
+			if(i==-1) return 0;	//ウィンドウが初期状態の場合
+
+			i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
+			SendMessage(hDocCombo,CB_SETCURSEL,i,0);
+			SetStatusText(NULL);
+			ResetState_EditMenu();
+			return 0;
+		case WM_SIZE:
+			WndNum=GetWndNum(hwnd);
+			if(WndNum==-1) break;
+			MoveWindow(MdiInfo[WndNum].MdiMenuInfo->hMenuEdit,0,0,172,HIWORD(lParam),1);
+			MoveWindow(MdiInfo[WndNum].MdiMenuInfo->hList,172,0,LOWORD(lParam)-172,HIWORD(lParam),1);
+			break;
+		case WM_CLOSE:
+			CloseDocWindow(GetWndNum(hwnd));
+			pobj_nv->bMDIZoomed=IsZoomed(hwnd);
+			i=DefMDIChildProc(hwnd,message,wParam,lParam);
+
+			//メニュー状態を設定
+			ResetState_DocMenu();
+
+			return i;
+	}
+	return DefMDIChildProc(hwnd,message,wParam,lParam);
+}
Index: /ProjectEditor/MessageCallOperation.cpp
===================================================================
--- /ProjectEditor/MessageCallOperation.cpp	(revision 3)
+++ /ProjectEditor/MessageCallOperation.cpp	(revision 3)
@@ -0,0 +1,706 @@
+#include "Common.h"
+
+////////////////////////////////////////////////////////////////////////////
+//このソースファイルではイベントプロシージャの管理を行う（MainWnd.abなど）
+////////////////////////////////////////////////////////////////////////////
+
+int NowMenuNum;
+
+int GetItemMessageInfo(int WndInfoNum,char *buffer,char *EventName){
+	extern PROJECTINFO ProjectInfo; 
+	int i;
+
+	for(i=lstrlen(buffer);i>=0;i--){
+		if(buffer[i]=='_') break;
+	}
+	if(i==-1) return 0;
+	lstrcpy(EventName,buffer+i+1);
+	buffer[i]=0;
+	if(lstrcmp(EventName,"MenuClick")==0) return CT_MENU;
+	for(i=0;i<ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;i++){
+		if(lstrcmp(buffer,ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].IdName)==0) break;
+	}
+	if(i==ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows) return 0;
+
+	return ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].Control;
+}
+char **GetProcedureNamesOfMessageCall(int WndInfoNum,ITEMEVENTINFO **ppItemEventInfo,int *num,BOOL *pbAlways){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,i4,i5,i6,NameLen,CallBackNameLen;
+	char *buffer,**ppNames,temporary[MAX_PATH],temp2[MAX_PATH];
+
+	NameLen=lstrlen(ProjectInfo.pWindowInfo[WndInfoNum].name);
+	CallBackNameLen=lstrlen(ProjectInfo.pWindowInfo[WndInfoNum].CallBackName);
+
+	sprintf(temporary,"%s%s",ProjectInfo.dir,ProjectInfo.pWindowInfo[WndInfoNum].filepath);
+	buffer=ReadBuffer(temporary);
+
+	*num=0;
+	ppNames=(char **)HeapAlloc(hHeap,0,1);
+
+	*pbAlways=0;
+
+	//メッセージ
+	*ppItemEventInfo=(ITEMEVENTINFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(ITEMEVENTINFO));
+	for(i=0,i4=0;;i++){
+		if(buffer[i]=='\0') break;
+
+		//注釈（複数行）
+		if(buffer[i]=='/'&&buffer[i+1]=='*'){
+			i+=2;
+			while(!(buffer[i]=='*'&&buffer[i+1]=='/')){
+				if(buffer[i]=='\0'){
+					i--;
+					break;
+				}
+				i++;
+			}
+			continue;
+		}
+
+		if((buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]!='\0')||i==0){
+			if(buffer[i]=='\r'&&buffer[i+1]=='\n') i2=i+2;
+			else i2=i;
+			while(buffer[i2]>='0'&&buffer[i2]<='9') i2++;
+			while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+			if(memicmp(buffer+i2,"Sub",3)==0&&(buffer[i2+3]==' '||buffer[i2+3]=='\t')){
+				i2+=4;
+				while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+				strncpy(temporary,buffer+i2,NameLen);
+				temporary[NameLen]=0;
+				if(lstrcmp(temporary,ProjectInfo.pWindowInfo[WndInfoNum].name)==0&&buffer[i2+NameLen]=='_'){
+					for(i2+=NameLen+1,i3=0;;i2++,i3++){
+						if(!IsVariableChar(buffer[i2])){
+							temporary[i3]=0;
+							break;
+						}
+						temporary[i3]=buffer[i2];
+					}
+					i6=GetItemMessageInfo(WndInfoNum,temporary,temp2);
+					if(i6){
+						//アイテムメッセージ（WM_COMMAND、WM_NOTIFY）
+						for(i5=0;;i5++){
+							if((*ppItemEventInfo)[i5].IdName==0){
+								*ppItemEventInfo=(ITEMEVENTINFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,*ppItemEventInfo,(i4+2)*sizeof(ITEMEVENTINFO));
+								(*ppItemEventInfo)[i4].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+								lstrcpy((*ppItemEventInfo)[i4].IdName,temporary);
+								(*ppItemEventInfo)[i4].pEventNames=(char **)HeapAlloc(hHeap,0,1);
+								(*ppItemEventInfo)[i4].ClassID=i6;
+								i4++;
+								break;
+							}
+							if(lstrcmp((*ppItemEventInfo)[i5].IdName,temporary)==0) break;
+						}
+						(*ppItemEventInfo)[i5].pEventNames=(char **)HeapReAlloc(hHeap,0,(*ppItemEventInfo)[i5].pEventNames,((*ppItemEventInfo)[i5].EventNum+1)*sizeof(char *));
+						(*ppItemEventInfo)[i5].pEventNames[(*ppItemEventInfo)[i5].EventNum]=(char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
+						lstrcpy((*ppItemEventInfo)[i5].pEventNames[(*ppItemEventInfo)[i5].EventNum],temp2);
+						(*ppItemEventInfo)[i5].EventNum++;
+					}
+					else if(temporary[0]){
+						//一般メッセージ
+						ppNames=(char **)HeapReAlloc(hHeap,0,ppNames,(*num+1)*sizeof(char *));
+						ppNames[*num]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(ppNames[*num],temporary);
+						(*num)++;
+					}
+				}
+			}
+			if(memicmp(buffer+i2,"Function",8)==0&&(buffer[i2+8]==' '||buffer[i2+8]=='\t')){
+				//[WndName]_WindowProcのみFunction定義
+				i2+=9;
+				while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+				if(memicmp(buffer+i2,ProjectInfo.pWindowInfo[WndInfoNum].CallBackName,CallBackNameLen)==0&&
+					(buffer[i2+CallBackNameLen]==' '||buffer[i2+CallBackNameLen]=='\t'||buffer[i2+CallBackNameLen]=='(')){
+					*pbAlways=1;
+				}
+			}
+		}
+	}
+	HeapDefaultFree(buffer);
+
+	return ppNames;
+}
+void SelectProcedureOfMessageCall(int WndInfoNum,char *ProcedureName,char *Parameter){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,WndNum;
+	char temporary[MAX_PATH],*pBuf;
+	HWND hChild;
+	POINT pos;
+
+	sprintf(temporary,"%s%s",ProjectInfo.dir,ProjectInfo.pWindowInfo[WndInfoNum].filepath);
+	hChild=OpenFileWithExtension(temporary);
+	if(!hChild) return;
+	WndNum=GetWndNum(hChild);
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	for(i=0;;i++){
+		if(pBuf[i]=='\0') break;
+		if((pBuf[i]=='\r'&&pBuf[i+1]=='\n'&&pBuf[i+2]!='\0')||i==0){
+			if(i) i2=i+2;
+			else i2=i;
+			while(pBuf[i2]>='0'&&pBuf[i2]<='9') i2++;
+			while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+			strncpy(temporary,pBuf+i2,3);
+			temporary[3]=0;
+			if(lstrcmpi(temporary,"Sub")==0&&(pBuf[i2+3]==' '||pBuf[i2+3]=='\t')){
+				pos.x=i2;
+				i2+=4;
+				while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+				for(i3=0;;i2++,i3++){
+					if(!IsVariableChar(pBuf[i2])){
+						temporary[i3]=0;
+						break;
+					}
+					temporary[i3]=pBuf[i2];
+				}
+				if(lstrcmpi(temporary,ProcedureName)==0){
+					for(;;i2++){
+						if(pBuf[i2]=='\r'||pBuf[i2]=='\0'){
+							if(pBuf[i2]=='\r'){
+								if(pBuf[i2+1]!='\n') continue;
+							}
+							pos.y=i2;
+							break;
+						}
+					}
+					break;
+				}
+			}
+		}
+	}
+	if(pBuf[i]){
+		//プロシージャが見つかったとき
+		TextEdit_SetSel(WndNum,pos.x,pos.y);
+	}
+	else{
+		//プロシージャがないときは生成する
+
+		//挿入位置にキャレットを移動
+		TextEdit_SetSel(WndNum,i,i);
+
+		//挿入
+		sprintf(temporary,"\r\nSub %s(%s)",ProcedureName,Parameter);
+		i2=lstrlen(temporary);
+		lstrcat(temporary,"\r\n\r\nEnd Sub\r\n");
+		TextEdit_ReplaceUpdateUndoData(WndNum,temporary,1,1);
+
+		TextEdit_SetSel(WndNum,i+2,i+i2);
+	}
+	SetFocus(MdiInfo[WndNum].pmti->hEdit);
+}
+void InsertEventToList(HWND hList,int ItemNum,char *EventName,char *MessageName,char *OutLine){
+	LV_ITEM item;
+
+	item.mask=LVIF_TEXT;
+	item.pszText=EventName;
+	item.iItem=ItemNum;
+	item.iSubItem=0;
+	ListView_InsertItem(hList,&item);
+	item.pszText=MessageName;
+	item.iItem=ItemNum;
+	item.iSubItem=1;
+	ListView_SetItem(hList,&item);
+	item.pszText=OutLine;
+	item.iItem=ItemNum;
+	item.iSubItem=2;
+	ListView_SetItem(hList,&item);
+}
+BOOL GetEventProcedureNameFromListView(HWND hList,int WndNum,int WndInfoNum,char *EventName,char *Parameter,DWORD dwEventType){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,MaxCount;
+	char temporary[MAX_PATH];
+
+	MaxCount=ListView_GetItemCount(hList);
+	if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+		if(dwEventType==EVENTTYPE_DEFAULT){
+			for(i=0;i<MaxCount;i++){
+				if(ListView_GetItemState(hList,i,LVIS_SELECTED)){
+					ListView_GetItemText(hList,i,0,temporary,MAX_PATH);
+					sprintf(EventName,"%s_%s",
+						ProjectInfo.pWindowInfo[WndInfoNum].name,
+						temporary);
+					break;
+				}
+			}
+			if(i==MaxCount) return 0;
+
+			if(i==0) lstrcpy(Parameter,"state As Integer, minimized As Integer");
+			else if(i==1) lstrcpy(Parameter,"ByRef CreateStruct As CREATESTRUCT");
+			else if(i==2) Parameter[0]=0;
+			else if(i==3) lstrcpy(Parameter,"hDrop As HDROP");
+			else if(i==4) lstrcpy(Parameter,"nScrollCode As Long, nPos As Integer, hwndScrollBar As HWND");
+			else if(i==5) lstrcpy(Parameter,"KeyCode As Long, flags As Long");
+			else if(i==6) lstrcpy(Parameter,"KeyCode As Long, flags As Long");
+			else if(i==7) lstrcpy(Parameter,"KeyCode As Long, flags As Long");
+			else if(i==8) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==9) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==10) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==11) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==12) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==13) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==14) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==15) lstrcpy(Parameter,"x As Integer, y As Integer");
+			else if(i==16) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+			else if(i==17) lstrcpy(Parameter,"hDC As HDC");
+			else if(i==18) lstrcpy(Parameter,"ByRef cancel As Integer");
+			else if(i==19) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==20) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==21) lstrcpy(Parameter,"flags As Long, x As Integer, y As Integer");
+			else if(i==22) lstrcpy(Parameter,"SizeType As Long, cx As Integer, cy As Integer");
+			else if(i==23) Parameter[0]=0;
+			else if(i==24) lstrcpy(Parameter,"TimerID As DWord");
+			else if(i==25) lstrcpy(Parameter,"nScrollCode As Long, nPos As Integer, hwndScrollBar As HWND");
+		}
+		else if(dwEventType==EVENTTYPE_MENU){
+			for(i=0;i<MaxCount;i++){
+				if(ListView_GetItemState(hList,i,LVIS_SELECTED)){
+					ListView_GetItemText(hList,i,0,temporary,MAX_PATH);
+					sprintf(EventName,"%s_%s_MenuClick",
+						ProjectInfo.pWindowInfo[WndInfoNum].name,
+						temporary);
+					break;
+				}
+			}
+			if(i==MaxCount) return 0;
+
+			Parameter[0]=0;
+		}
+		else if(dwEventType==EVENTTYPE_MMSYS){
+			for(i=0;i<MaxCount;i++){
+				if(ListView_GetItemState(hList,i,LVIS_SELECTED)){
+					ListView_GetItemText(hList,i,0,temporary,MAX_PATH);
+					sprintf(EventName,"%s_%s",
+						ProjectInfo.pWindowInfo[WndInfoNum].name,
+						temporary);
+					break;
+				}
+			}
+			if(i==MaxCount) return 0;
+
+			if(i==0) lstrcpy(Parameter,"flags As Long, DevID As DWord");
+		}
+	}
+	else{
+		for(i=0;i<MaxCount;i++){
+			if(ListView_GetItemState(hList,i,LVIS_SELECTED)){
+				ListView_GetItemText(hList,i,0,temporary,MAX_PATH);
+				sprintf(EventName,"%s_%s_%s",
+					ProjectInfo.pWindowInfo[WndInfoNum].name,
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].IdName,
+					temporary);
+				break;
+			}
+		}
+		if(i==MaxCount) return 0;
+
+		if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTVIEW){
+			//ListView
+			if(i==0) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==1) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==2) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+			else if(i==3) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+			else if(i==4) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==5) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==6) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+			else if(i==7) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+			else if(i==8) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==9) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO");
+			else if(i==10) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==11) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==12) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==13) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==14) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO");
+			else if(i==15) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO");
+			else if(i==16) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==17) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==18) lstrcpy(Parameter,"ByRef nmListView As NMLISTVIEW");
+			else if(i==19) lstrcpy(Parameter,"ByRef nmLVKeyDown As NMLVKEYDOWN");
+			else if(i==20) lstrcpy(Parameter,"ByRef nmLVDispInfo As NMLVDISPINFO");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_PROGRESSBAR){
+			//ProgressBar
+			lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TRACKBAR){
+			//TrackBar
+			lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TREEVIEW){
+			//TreeView
+			if(0<=i&&i<=7) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+			else lstrcpy(Parameter,"ByRef nmTreeView As NMTREEVIEW");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_UPDOWN){
+			//UpDown
+			if(i==0) lstrcpy(Parameter,"ByRef nmHdr As NMHDR");
+			else if(i==1) lstrcpy(Parameter,"ByRef nmUpDown As NMUPDOWN");
+		}
+		else Parameter[0]=0;
+	}
+
+	return 1;
+}
+int SetDefaultNotifyMessagesInList(HWND hList,int ClassID){
+	int i;
+	i=0;
+	InsertEventToList(hList,i++,"Click","NM_CLICK","ｺﾝﾄﾛｰﾙ内でﾏｳｽの左ﾎﾞﾀﾝがｸﾘｯｸされた時");
+	InsertEventToList(hList,i++,"DblClick","NM_DBLCLK","ｺﾝﾄﾛｰﾙ内でﾏｳｽの左ﾎﾞﾀﾝがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+	InsertEventToList(hList,i++,"KillFocus","NM_KILLFOCUS","入力ﾌｫｰｶｽを失った時");
+	InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","ﾒﾓﾘ不足でｺﾝﾄﾛｰﾙの動作が完了できない時");
+	InsertEventToList(hList,i++,"RClick","NM_RCLICK","ｺﾝﾄﾛｰﾙ内でﾏｳｽの右ﾎﾞﾀﾝがｸﾘｯｸされた時");
+	InsertEventToList(hList,i++,"RDblClick","NM_RDBLCLK","ｺﾝﾄﾛｰﾙ内でﾏｳｽの右ﾎﾞﾀﾝがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+	InsertEventToList(hList,i++,"Return","NM_RETURN","ｺﾝﾄﾛｰﾙに入力ﾌｫｰｶｽがあるときにEnterｷｰが押された時");
+	InsertEventToList(hList,i++,"SetFocus","NM_SETFOCUS","入力ﾌｫｰｶｽを取得した時");
+	if(ClassID==CT_LISTVIEW){
+		InsertEventToList(hList,i++,"BeginDrag","LVN_BEGINDRAG","ﾏｳｽの左ﾎﾞﾀﾝでﾄﾞﾗｯｸﾞ&ﾄﾞﾛｯﾌﾟを始める時");
+		InsertEventToList(hList,i++,"BeginLabelEdit","LVN_BEGINLABELEDIT","ｱｲﾃﾑのﾗﾍﾞﾙの編集が開始された時");
+		InsertEventToList(hList,i++,"BeginRDrag","LVN_BEGINRDRAG","ﾏｳｽの右ﾎﾞﾀﾝでﾄﾞﾗｯｸﾞ&ﾄﾞﾛｯﾌﾟを始める時");
+		InsertEventToList(hList,i++,"ColumnClick","LVN_COLUMNCLICK","ｶﾗﾑの1つがｸﾘｯｸされた時");
+		InsertEventToList(hList,i++,"DeleteAllItems","LVN_DELETEALLITEMS","ﾋﾞｭｰ内のすべてのｱｲﾃﾑが削除された時");
+		InsertEventToList(hList,i++,"DeleteItem","LVN_DELETEITEM","ﾋﾞｭｰ内のｱｲﾃﾑが削除された時");
+		InsertEventToList(hList,i++,"EndLabelEdit","LVN_ENDLABELEDIT","ｱｲﾃﾑのﾗﾍﾞﾙの編集が終了した時");
+		InsertEventToList(hList,i++,"GetDispInfo","LVN_GETDISPINFO","親ｳｨﾝﾄﾞｳがﾃﾞｨｽﾌﾟﾚｲに関する情報を供給した時");
+		InsertEventToList(hList,i++,"InsertItem","LVN_INSERTITEM","ﾋﾞｭｰ内にｱｲﾃﾑが挿入された時");
+		InsertEventToList(hList,i++,"ItemChanged","LVN_ITEMCHANGED","ﾋﾞｭｰ内のｱｲﾃﾑが変更された時");
+		InsertEventToList(hList,i++,"ItemChanging","LVN_ITEMCHANGING","ﾋﾞｭｰ内のｱｲﾃﾑを変更する時");
+		InsertEventToList(hList,i++,"KeyDown","LVN_KEYDOWN","ｷｰが押された時");
+		InsertEventToList(hList,i++,"SetDispInfo","LVN_SETDISPINFO","親ｳｨﾝﾄﾞｳがｱｲﾃﾑに対して情報を更新する必要がある時");
+	}
+	else if(ClassID==CT_TREEVIEW){
+		//未完成
+	}
+	return i;
+}
+void SetMenuEventToList(HWND hList,MENU_INFO *pMenuInfo,int *pListNum,int *pPos){
+	int i;
+	for(i=0;i<pMenuInfo->NumberOfMenu;i++){
+		if((!pMenuInfo->pMenuInfo[i].pMenuInfo)&&pMenuInfo->pMenuInfo[i].type==MFT_STRING)
+			InsertEventToList(hList,(*pListNum)++,pMenuInfo->pMenuInfo[i].IdName,"WM_COMMAND",pMenuInfo->pMenuInfo[i].caption);
+		(*pPos)++;
+		if(pMenuInfo->pMenuInfo[i].pMenuInfo)
+			SetMenuEventToList(hList,&pMenuInfo->pMenuInfo[i],pListNum,pPos);
+	}
+}
+void SetEventToList(HWND hDlg,DWORD dwEventType){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,WndNum,WndInfoNum;
+	HWND hList;
+
+	hList=GetDlgItem(hDlg,IDC_EVENTLIST);
+	ListView_DeleteAllItems(hList);
+	SetDlgItemText(hDlg,IDC_PROCEDURENAME,"");
+
+	WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+	WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+	i=0;
+	if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+		EnableWindow(GetDlgItem(hDlg,IDC_DEFAULT),1);
+		EnableWindow(GetDlgItem(hDlg,IDC_MENU),1);
+		EnableWindow(GetDlgItem(hDlg,IDC_MMSYS),1);
+		if(dwEventType==EVENTTYPE_DEFAULT){
+			SendDlgItemMessage(hDlg,IDC_DEFAULT,BM_SETCHECK,BST_CHECKED,0);
+			InsertEventToList(hList,i++,"Activate","WM_ACTIVATE","ｳｨﾝﾄﾞｳがｱｸﾃｨﾌﾞ、または非ｱｸﾃｨﾌﾞになった時");
+			InsertEventToList(hList,i++,"Create","WM_CREATE","ｳｨﾝﾄﾞｳ作成時");
+			InsertEventToList(hList,i++,"Destroy","WM_DESTROY","ｳｨﾝﾄﾞｳ破棄時");
+			InsertEventToList(hList,i++,"DropFiles","WM_DROPFILES","ｳｨﾝﾄﾞｳにﾌｧｲﾙがﾄﾞﾛｯﾌﾟされた時");
+			InsertEventToList(hList,i++,"HScroll","WM_HSCROLL","水平ｽｸﾛｰﾙ ﾊﾞｰ・ﾄﾗｯｸ ﾊﾞｰが移動した時");
+			InsertEventToList(hList,i++,"KeyDown","WM_KEYDOWN","ｷｰが押された時");
+			InsertEventToList(hList,i++,"KeyPress","WM_CHAR","ANSI文字ｷｰを押して離した時");
+			InsertEventToList(hList,i++,"KeyUp","WM_KEYUP","ｷｰが離された時");
+			InsertEventToList(hList,i++,"LButtonDblClick","WM_LBUTTONDBLCLK","ﾏｳｽの左ﾎﾞﾀﾝがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"LButtonDown","WM_LBUTTONDOWN","ﾏｳｽの左ﾎﾞﾀﾝが押された時");
+			InsertEventToList(hList,i++,"LButtonUp","WM_LBUTTONUP","ﾏｳｽの左ﾎﾞﾀﾝが離された時");
+			InsertEventToList(hList,i++,"MButtonDblClick","WM_MBUTTONDBLCLK","ﾏｳｽの中央ﾎﾞﾀﾝがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"MButtonDown","WM_MBUTTONDOWN","ﾏｳｽの中央ﾎﾞﾀﾝが押された時");
+			InsertEventToList(hList,i++,"MButtonUp","WM_MBUTTONUP","ﾏｳｽの中央ﾎﾞﾀﾝが離された時");
+			InsertEventToList(hList,i++,"MouseMove","WM_MOUSEMOVE","ﾏｳｽが移動した時");
+			InsertEventToList(hList,i++,"Move","WM_MOVE","ｳｨﾝﾄﾞｳが移動した時");
+			InsertEventToList(hList,i++,"Notify","WM_NOTIFY","ｺﾓﾝｺﾝﾄﾛｰﾙからﾒｯｾｰｼﾞが通知された時");
+			InsertEventToList(hList,i++,"Paint","WM_PAINT","再描画要求が出された時");
+			InsertEventToList(hList,i++,"QueryClose","WM_CLOSE","ｳｨﾝﾄﾞｳの終了ﾎﾞﾀﾝが押された時");
+			InsertEventToList(hList,i++,"RButtonDblClick","WM_RBUTTONDBLCLK","ﾏｳｽの右ﾎﾞﾀﾝがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"RButtonDown","WM_RBUTTONDOWN","ﾏｳｽの右ﾎﾞﾀﾝが押された時");
+			InsertEventToList(hList,i++,"RButtonUp","WM_RBUTTONUP","ﾏｳｽの右ﾎﾞﾀﾝが離された時");
+			InsertEventToList(hList,i++,"Resize","WM_SIZE","ｳｨﾝﾄﾞｳの大きさが変更された時");
+			InsertEventToList(hList,i++,"SetFocus","WM_SETFOCUS","ｷｰﾎﾞｰﾄﾞ ﾌｫｰｶｽを受け取った時");
+			InsertEventToList(hList,i++,"Timer","WM_TIMER","設定したﾀｲﾏｰのﾀｲﾑ ｱｳﾄ時");
+			InsertEventToList(hList,i++,"VScroll","WM_VSCROLL","垂直ｽｸﾛｰﾙ ﾊﾞｰ・ﾄﾗｯｸ ﾊﾞｰが移動した時");
+		}
+		else if(dwEventType==EVENTTYPE_MENU){
+			//メニュー イベント
+			SendDlgItemMessage(hDlg,IDC_MENU,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[WndInfoNum].MenuID){
+				int MenuInfoNum;
+				MenuInfoNum=GetMenuInfoNum(ProjectInfo.pWindowInfo[WndInfoNum].MenuID);
+				i=0;
+				i2=0;
+
+				SetMenuEventToList(hList,&ProjectInfo.pMenuInfo[MenuInfoNum],&i,&i2);
+			}
+		}
+		else if(dwEventType==EVENTTYPE_MMSYS){
+			SendDlgItemMessage(hDlg,IDC_MMSYS,BM_SETCHECK,BST_CHECKED,0);
+			InsertEventToList(hList,i++,"MciNotify","MM_MCINOTIFY","MCIｺﾏﾝﾄﾞが完了したり異常終了した場合");
+		}
+	}
+	else{
+		EnableWindow(GetDlgItem(hDlg,IDC_DEFAULT),1);
+		EnableWindow(GetDlgItem(hDlg,IDC_MENU),0);
+		EnableWindow(GetDlgItem(hDlg,IDC_MMSYS),0);
+		SendDlgItemMessage(hDlg,IDC_DEFAULT,BM_SETCHECK,BST_CHECKED,0);
+		if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_BUTTON){
+			//Button
+			InsertEventToList(hList,i++,"Click","BN_CLICKED","ﾎﾞﾀﾝがｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ﾎﾞﾀﾝがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX){
+			//CheckBox
+			InsertEventToList(hList,i++,"Click","BN_CLICKED","ﾁｪｯｸ ﾎﾞｯｸｽがｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ﾁｪｯｸ ﾎﾞｯｸｽがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_COMBOBOX){
+			//ComboBox
+			InsertEventToList(hList,i++,"CloseUp","CBN_CLOSEUP","ﾘｽﾄ ﾎﾞｯｸｽが非表示になる時");
+			InsertEventToList(hList,i++,"DblClick","CBN_DBLCLK","ﾘｽﾄ内のｱｲﾃﾑがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"DropDown","CBN_DROPDOWN","ﾘｽﾄ ﾎﾞｯｸｽがﾄﾞﾛｯﾌﾟ ﾀﾞｳﾝされる時");
+			InsertEventToList(hList,i++,"EditChange","CBN_EDITCHANGE","ｴﾃﾞｨｯﾄ ﾎﾞｯｸｽの内容が変化した時（後処理）");
+			InsertEventToList(hList,i++,"EditUpdate","CBN_EDITUPDATE","ﾘｽﾄ ﾎﾞｯｸｽが非表示になった時");
+			InsertEventToList(hList,i++,"ErrSpace","CBN_ERRSPACE","ﾒﾓﾘ割り当てに失敗した時");
+			InsertEventToList(hList,i++,"KillFocus","CBN_KILLFOCUS","入力ﾌｫｰｶｽを失った時");
+			InsertEventToList(hList,i++,"SelChange","CBN_SELCHANGE","ﾘｽﾄ内の選択が変更された時");
+			InsertEventToList(hList,i++,"SelEndCancel","CBN_SELENDCANCEL","ｺﾝﾎﾞ ﾎﾞｯｸｽの選択を取り消した時");
+			InsertEventToList(hList,i++,"SelEndOk","CBN_SELENDOK","選択した項目が有効である時");
+			InsertEventToList(hList,i++,"SetFocus","CBN_SETFOCUS","入力ﾌｫｰｶｽを取得した時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_EDIT){
+			//Edit
+			InsertEventToList(hList,i++,"Change","EN_CHANGE","ｴﾃﾞｨｯﾄ ﾎﾞｯｸｽの内容が変更された時（後処理）");
+			InsertEventToList(hList,i++,"ErrSpace","EN_ERRSPACE","ﾒﾓﾘ割り当てに失敗した時");
+			InsertEventToList(hList,i++,"HScroll","EN_HSCROLL","水平ｽｸﾛｰﾙを行った時");
+			InsertEventToList(hList,i++,"KillFocus","EN_KILLFOCUS","入力ﾌｫｰｶｽを失った時");
+			InsertEventToList(hList,i++,"MaxText","EN_MAXTEXT","文字数が上限を超えた時");
+			InsertEventToList(hList,i++,"SetFocus","EN_SETFOCUS","入力ﾌｫｰｶｽを取得した時");
+			InsertEventToList(hList,i++,"Update","EN_UPDATE","ｴﾃﾞｨｯﾄ ﾎﾞｯｸｽの内容が変更される時（前処理）");
+			InsertEventToList(hList,i++,"VScroll","EN_VSCROLL","垂直ｽｸﾛｰﾙを行った時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_IMAGEBOX){
+			//ImageBox
+			InsertEventToList(hList,i++,"Click","STN_CLICKED","ｲﾒｰｼﾞ ﾎﾞｯｸｽがｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"DblClick","STN_DBLCLK","ｲﾒｰｼﾞ ﾎﾞｯｸｽがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTBOX){
+			//ListBox
+			InsertEventToList(hList,i++,"SelChange","LBN_SELCHANGE","ﾘｽﾄ内の選択が変更された時");
+			InsertEventToList(hList,i++,"DblClick","LBN_DBLCLK","ﾘｽﾄ内の文字列がﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"ErrSpace","LBN_ERRSPACE","ﾘｽﾄのﾒﾓﾘ割り当てに失敗した時");
+			InsertEventToList(hList,i++,"KillFocus","LBN_KILLFOCUS","入力ﾌｫｰｶｽを失った時");
+			InsertEventToList(hList,i++,"SelCancel","LBN_SELCANCEL","ﾘｽﾄ内の選択が取り消された時");
+			InsertEventToList(hList,i++,"SetFocus","LBN_SETFOCUS","入力ﾌｫｰｶｽを取得した時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTVIEW){
+			//ListView
+			i=SetDefaultNotifyMessagesInList(hList,CT_LISTVIEW);
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_PROGRESSBAR){
+			//ProgressBar
+			InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","ﾒﾓﾘ不足でｺﾝﾄﾛｰﾙの動作が完了できない時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON){
+			//RadioButton
+			InsertEventToList(hList,i++,"Click","BN_CLICKED","ﾗｼﾞｵ ﾎﾞﾀﾝがｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"DblClick","BN_DBLCLK","ﾗｼﾞｵ ﾎﾞﾀﾝがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC){
+			//Static
+			InsertEventToList(hList,i++,"Click","STN_CLICKED","ｽﾀﾃｨｯｸ ﾃｷｽﾄがｸﾘｯｸされた時");
+			InsertEventToList(hList,i++,"DblClick","STN_DBLCLK","ｽﾀﾃｨｯｸ ﾃｷｽﾄがﾀﾞﾌﾞﾙ ｸﾘｯｸされた時");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TRACKBAR){
+			//TrackBar
+			InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","ﾒﾓﾘ不足でｺﾝﾄﾛｰﾙの動作が完了できない時");
+			InsertEventToList(hList,i++,"ReleasedCapture","NM_RELEASEDCAPTURE ","ﾏｳｽ ｷｬﾌﾟﾁｬ ﾘﾘｰｽの通知");
+			InsertEventToList(hList,i++,"CustomDraw","NM_CUSTOMDRAW ","ｶｽﾀﾑ描画操作の通知");
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TREEVIEW){
+			//TreeView
+			i=SetDefaultNotifyMessagesInList(hList,CT_TREEVIEW);
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_UPDOWN){
+			//UpDown
+			InsertEventToList(hList,i++,"OutOfMemory","NM_OUTOFMEMORY","ﾒﾓﾘ不足でｺﾝﾄﾛｰﾙの動作が完了できない時");
+			InsertEventToList(hList,i++,"Deltapos","UDN_DELTAPOS","ｺﾝﾄﾛｰﾙの位置が変えられようとしている時");
+		}
+	}
+}
+void Popup_SelectMenu(HWND hDlg){
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	POINT pos;
+	HMENU hMenu;
+
+	if(ProjectInfo.NumberOfMenu==0) return;
+
+	GetCursorPos(&pos);
+
+	hMenu=CreatePopupMenu();
+
+	MENUITEMINFO mii;
+	mii.cbSize=sizeof(MENUITEMINFO);
+	for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+		if(NowMenuNum==i){
+			mii.fMask=MIIM_TYPE|MIIM_ID|MIIM_STATE;
+			mii.fState=MFS_CHECKED;
+		}
+		else mii.fMask=MIIM_TYPE|MIIM_ID;
+		mii.fType=MFT_STRING;
+		mii.wID=100+i;
+		mii.dwTypeData=ProjectInfo.pMenuInfo[i].IdName;
+		InsertMenuItem(hMenu,i,1,&mii);
+	}
+
+	extern HMENU hRadMenuBase;
+	TrackPopupMenu(hMenu,TPM_LEFTALIGN,pos.x,pos.y,0,hDlg,0);
+
+	DestroyMenu(hMenu);
+}
+
+WNDPROC OldEventListViewProc;
+LRESULT CALLBACK EventListViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	if(message==WM_RBUTTONDOWN){
+		if(SendDlgItemMessage(GetParent(hwnd),IDC_MENU,BM_GETCHECK,0,0))
+			Popup_SelectMenu(GetParent(hwnd));
+		return 0;
+	}
+	return CallWindowProc(OldEventListViewProc,hwnd,message,wParam,lParam);
+}
+BOOL CALLBACK DlgEventCode(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int WndNum,WndInfoNum,i,i2;
+	char temporary[MAX_PATH],temp2[MAX_PATH];
+	HWND hList;
+	DWORD dwStyle;
+	RECT rect;
+	LV_COLUMN ListView_Column;
+
+	static DWORD dwEventType;
+
+	if(message==WM_COMMAND&&100<=wParam&&wParam<200){
+		hList=GetDlgItem(hwnd,IDC_EVENTLIST);
+		WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+		WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+
+		ListView_DeleteAllItems(hList);
+		SetDlgItemText(hwnd,IDC_PROCEDURENAME,"");
+		i=0;
+		i2=0;
+
+		NowMenuNum=wParam-100;
+		SetMenuEventToList(hList,&ProjectInfo.pMenuInfo[wParam-100],&i,&i2);
+	}
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			SetFocus(GetDlgItem(hwnd,IDC_EVENTLIST));
+
+			hList=GetDlgItem(hwnd,IDC_EVENTLIST);
+			GetClientRect(hList,&rect);
+			dwStyle=ListView_GetExtendedListViewStyle(hList);
+			dwStyle|=LVS_EX_FULLROWSELECT;
+			ListView_SetExtendedListViewStyle(hList,dwStyle);
+
+			ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+			ListView_Column.fmt=LVCFMT_LEFT;
+
+			ListView_Column.cx=100;
+			ListView_Column.pszText="イベント";
+			ListView_Column.iSubItem=0;
+			ListView_InsertColumn(hList,0,&ListView_Column);
+
+			ListView_Column.cx=120;
+			ListView_Column.pszText="対応メッセージ";
+			ListView_Column.iSubItem=1;
+			ListView_InsertColumn(hList,1,&ListView_Column);
+
+			ListView_Column.cx=rect.right-240;
+			ListView_Column.pszText="概要";
+			ListView_Column.iSubItem=2;
+			ListView_InsertColumn(hList,2,&ListView_Column);
+
+			dwEventType=lParam;
+			SetEventToList(hwnd,dwEventType);
+			EnableWindow(GetDlgItem(hwnd,IDOK),0);
+
+			OldEventListViewProc=(WNDPROC)GetWindowLong(GetDlgItem(hwnd,IDC_EVENTLIST),GWL_WNDPROC);
+			SetWindowLong(GetDlgItem(hwnd,IDC_EVENTLIST),GWL_WNDPROC,(long)EventListViewProc);
+
+			WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+			WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+			NowMenuNum=GetMenuInfoNum(ProjectInfo.pWindowInfo[WndInfoNum].MenuID);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_DEFAULT:
+					dwEventType=EVENTTYPE_DEFAULT;
+					SetEventToList(hwnd,dwEventType);
+					EnableWindow(GetDlgItem(hwnd,IDOK),0);
+					break;
+				case IDC_MENU:
+					dwEventType=EVENTTYPE_MENU;
+					SetEventToList(hwnd,dwEventType);
+					EnableWindow(GetDlgItem(hwnd,IDOK),0);
+
+					//「対象メニュー」選択メニューを表示
+					Popup_SelectMenu(hwnd);
+					break;
+				case IDC_MMSYS:
+					dwEventType=EVENTTYPE_MMSYS;
+					SetEventToList(hwnd,dwEventType);
+					EnableWindow(GetDlgItem(hwnd,IDOK),0);
+					break;
+				case IDOK:
+					hList=GetDlgItem(hwnd,IDC_EVENTLIST);
+					WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+					WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+					if(GetEventProcedureNameFromListView(hList,WndNum,WndInfoNum,temporary,temp2,dwEventType)){
+						SelectProcedureOfMessageCall(WndInfoNum,temporary,temp2);
+						EndDialog(hwnd,0);
+					}
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			NMLISTVIEW *nmListView;
+			nmListView=(NMLISTVIEW *)lParam;
+			if(nmListView->hdr.idFrom==IDC_EVENTLIST){
+				if(nmListView->hdr.code==LVN_ITEMCHANGED){
+					hList=GetDlgItem(hwnd,IDC_EVENTLIST);
+					WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+					WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+					if(GetEventProcedureNameFromListView(hList,WndNum,WndInfoNum,temporary,temp2,dwEventType)){
+						sprintf(temporary+lstrlen(temporary),"(%s)",temp2);
+						EnableWindow(GetDlgItem(hwnd,IDOK),1);
+					}
+					else{
+						temporary[0]=0;
+						EnableWindow(GetDlgItem(hwnd,IDOK),0);
+					}
+					SetDlgItemText(hwnd,IDC_PROCEDURENAME,temporary);
+					return 1;
+				}
+				else if(nmListView->hdr.code==NM_DBLCLK)
+					SendMessage(hwnd,WM_COMMAND,IDOK,0);
+			}				
+			break;
+	}
+	return 0;
+}
Index: /ProjectEditor/NonVolatile.cpp
===================================================================
--- /ProjectEditor/NonVolatile.cpp	(revision 3)
+++ /ProjectEditor/NonVolatile.cpp	(revision 3)
@@ -0,0 +1,898 @@
+#include "common.h"
+
+
+void GetDefaultEditFont(LOGFONT *pLogFont){
+#if defined(JPN)
+	//日本語
+	pLogFont->lfHeight=-13;
+	pLogFont->lfWidth=0;
+	pLogFont->lfEscapement=0;
+	pLogFont->lfOrientation=0;
+	pLogFont->lfWeight=400;
+	pLogFont->lfItalic=NULL;
+	pLogFont->lfUnderline=NULL;
+	pLogFont->lfStrikeOut=NULL;
+	pLogFont->lfCharSet=SHIFTJIS_CHARSET;
+	pLogFont->lfOutPrecision=OUT_STRING_PRECIS;
+	pLogFont->lfClipPrecision=CLIP_STROKE_PRECIS;
+	pLogFont->lfQuality=DRAFT_QUALITY;
+	pLogFont->lfPitchAndFamily=FIXED_PITCH;
+	sprintf(pLogFont->lfFaceName,"ＭＳ ゴシック");
+#else
+	//英語
+	pLogFont->lfHeight=-15;
+	pLogFont->lfWidth=0;
+	pLogFont->lfEscapement=0;
+	pLogFont->lfOrientation=0;
+	pLogFont->lfWeight=400;
+	pLogFont->lfItalic=NULL;
+	pLogFont->lfUnderline=NULL;
+	pLogFont->lfStrikeOut=NULL;
+	pLogFont->lfCharSet=ANSI_CHARSET;
+	pLogFont->lfOutPrecision=OUT_STRING_PRECIS;
+	pLogFont->lfClipPrecision=CLIP_STROKE_PRECIS;
+	pLogFont->lfQuality=DRAFT_QUALITY;
+	pLogFont->lfPitchAndFamily=FIXED_PITCH;
+	sprintf(pLogFont->lfFaceName,"Courier New");
+#endif
+}
+void GetDefaultHintFont(LOGFONT *pLogFont){
+#if defined(JPN)
+	//日本語
+	pLogFont->lfHeight=-12;
+	pLogFont->lfWidth=0;
+	pLogFont->lfEscapement=0;
+	pLogFont->lfOrientation=0;
+	pLogFont->lfWeight=FW_THIN;
+	pLogFont->lfItalic=NULL;
+	pLogFont->lfUnderline=NULL;
+	pLogFont->lfStrikeOut=NULL;
+	pLogFont->lfCharSet=ANSI_CHARSET;
+	pLogFont->lfOutPrecision=OUT_STRING_PRECIS;
+	pLogFont->lfClipPrecision=CLIP_STROKE_PRECIS;
+	pLogFont->lfQuality=DRAFT_QUALITY;
+	pLogFont->lfPitchAndFamily=VARIABLE_PITCH;
+	sprintf(pLogFont->lfFaceName,"ＭＳ Ｐゴシック");
+#else
+	//英語
+	pLogFont->lfHeight=-12;
+	pLogFont->lfWidth=0;
+	pLogFont->lfEscapement=0;
+	pLogFont->lfOrientation=0;
+	pLogFont->lfWeight=FW_THIN;
+	pLogFont->lfItalic=NULL;
+	pLogFont->lfUnderline=NULL;
+	pLogFont->lfStrikeOut=NULL;
+	pLogFont->lfCharSet=ANSI_CHARSET;
+	pLogFont->lfOutPrecision=OUT_STRING_PRECIS;
+	pLogFont->lfClipPrecision=CLIP_STROKE_PRECIS;
+	pLogFont->lfQuality=DRAFT_QUALITY;
+	pLogFont->lfPitchAndFamily=VARIABLE_PITCH;
+	sprintf(pLogFont->lfFaceName,"Arial");
+#endif
+}
+void GetDefaultPrintFont(LOGFONT *pLogFont){
+	pLogFont->lfHeight=0;	//iPrintFontPointSizeとデバイス情報により決まる
+	pLogFont->lfWidth=0;
+	pLogFont->lfEscapement=0;
+	pLogFont->lfOrientation=0;
+	pLogFont->lfWeight=FW_NORMAL;
+	pLogFont->lfItalic=NULL;
+	pLogFont->lfUnderline=NULL;
+	pLogFont->lfStrikeOut=NULL;
+	pLogFont->lfCharSet=SHIFTJIS_CHARSET;
+	pLogFont->lfOutPrecision=OUT_STRING_PRECIS;
+	pLogFont->lfClipPrecision=CLIP_STROKE_PRECIS;
+	pLogFont->lfQuality=DRAFT_QUALITY;
+	pLogFont->lfPitchAndFamily=FIXED_PITCH;
+	lstrcpy(pLogFont->lfFaceName,"ＭＳ ゴシック");
+}
+
+
+///////////////////////////
+// 不揮発性のデータ管理
+///////////////////////////
+
+CNonVolatile::CNonVolatile(){
+	memset(this,0,sizeof(CNonVolatile));
+
+	//拡張子管理オブジェクトを生成
+	pobj_ExtLink=new CExtLink();
+
+	//Web検索用ドメイン管理オブジェクトを生成
+	pobj_DBDomain=new CDBDomain();
+
+	//「最近使ったファイル」オブジェクトを生成
+	pobj_History=new CHistory(100);
+
+	//「最近使ったプロジェクト」オブジェクトを生成
+	pobj_ProjectHistory=new CHistory(200);
+}
+CNonVolatile::~CNonVolatile(){
+	//拡張子管理オブジェクトを破棄
+	delete pobj_ExtLink;
+	pobj_ExtLink=0;
+
+	//Web検索用ドメイン管理オブジェクトを破棄
+	delete pobj_DBDomain;
+	pobj_DBDomain=0;
+
+	//「最近使ったファイル」オブジェクトを破棄
+	delete pobj_History;
+	pobj_History=0;
+
+	//「最近使ったプロジェクト」オブジェクトを破棄
+	delete pobj_ProjectHistory;
+	pobj_ProjectHistory=0;
+}
+
+BOOL CSettingFile::GetDataLine(char *name,char *parms){
+	int i,i2,length;
+	length=lstrlen(name);
+	for(i=0;;i++){
+		if(buffer[i]=='\0') break;
+		if(i==0||buffer[i]=='\r'&&buffer[i+1]=='\n'){
+			if(buffer[i]=='\r'&&buffer[i+1]=='\n') i+=2;
+			if(memcmp(buffer+i,name,length)==0&&buffer[i+length]=='='){
+				i+=length+1;
+				for(i2=0;;i++,i2++){
+					if(buffer[i]=='\r'&&buffer[i+1]=='\n'||buffer[i]=='\0'){
+						parms[i2]=0;
+						break;
+					}
+					parms[i2]=buffer[i];
+				}
+				return 1;
+			}
+		}
+	}
+	return 0;
+}
+
+BOOL CSettingFile::GetWholeValue(char *name,int *pi32data){
+	char temporary[8192];
+	if(!GetDataLine(name,temporary)) return 0;
+	*pi32data=atoi(temporary);
+	return 1;
+}
+BOOL CSettingFile::Get3WholeValue(char *name,int *pd1,int *pd2,int *pd3){
+	char temporary[8192];
+	if(!GetDataLine(name,temporary)) return 0;
+	sscanf(temporary,"%d,%d,%d",pd1,pd2,pd3);
+	return 1;
+}
+BOOL CSettingFile::GetRGBValue(char *name,COLORREF *prgb){
+	char temporary[8192];
+	if(!GetDataLine(name,temporary)) return 0;
+	sscanf(temporary,"%x",prgb);
+	return 1;
+}
+BOOL CSettingFile::GetStringValue(char *name,char *str){
+	if(!GetDataLine(name,str)) return 0;
+	return 1;
+}
+BOOL CSettingFile::GetRectValue(char *name,RECT *prc){
+	char temporary[8192];
+	if(!GetDataLine(name,temporary)) return 0;
+	sscanf(temporary,"%d,%d,%d,%d",&prc->left,&prc->top,&prc->right,&prc->bottom);
+	return 1;
+}
+BOOL CSettingFile::GetLogFont(char *name,LOGFONT *plf){
+	char temporary[8192];
+	if(!GetDataLine(name,temporary)) return 0;
+	sscanf(temporary,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
+		&plf->lfHeight,
+		&plf->lfWidth,
+		&plf->lfEscapement,
+		&plf->lfOrientation,
+		&plf->lfWeight,
+		&plf->lfItalic,
+		&plf->lfUnderline,
+		&plf->lfStrikeOut,
+		&plf->lfCharSet,
+		&plf->lfOutPrecision,
+		&plf->lfClipPrecision,
+		&plf->lfQuality,
+		&plf->lfPitchAndFamily);
+
+	int i;
+	for(i=lstrlen(temporary)-1;i>=0;i--){
+		if(temporary[i]==','){
+			i++;
+			break;
+		}
+	}
+	lstrcpy(plf->lfFaceName,temporary+i);
+	return 1;
+}
+BOOL CSettingFile::GetRebarBand(SAVEREBAR *psr,int num){
+	char name[32];
+	char temporary[8192];
+
+	sprintf(name,"RebarBand%d",num);
+	if(!GetDataLine(name,temporary)) return 0;
+
+	sscanf(temporary,"%d,%d,%d",&psr->RebarID,&psr->RebarLength,&psr->IsBandBreak);
+	return 1;
+}
+
+void CNonVolatile::load(){
+	extern METHODCHECKINFO MethodCheckInfo;
+
+	int i;
+	char temporary[MAX_PATH];
+
+
+	///////////////////////////////////
+	// 関連付け用の拡張子オブジェクト
+	///////////////////////////////////
+	sprintf(temporary,"%sUserSetting\\extlink.ini",pj_editor_Dir);
+	pobj_ExtLink->load(temporary);
+
+
+	//////////////////////////////////////
+	// Web検索用ドメイン管理オブジェクト
+	//////////////////////////////////////
+	pobj_DBDomain->load();
+
+
+	///////////////////////////////////////
+	// 「最近使ったファイル」オブジェクト
+	///////////////////////////////////////
+	sprintf(temporary,"%sUserSetting\\history.ini",pj_editor_Dir);
+	pobj_History->load(temporary);
+
+
+	////////////////////////////////////////////
+	// 「最近使ったプロジェクト」オブジェクト
+	////////////////////////////////////////////
+	sprintf(temporary,"%sUserSetting\\pj_history.ini",pj_editor_Dir);
+	pobj_ProjectHistory->load(temporary);
+
+
+
+	//開く
+	sprintf(temporary,"%sUserSetting\\editor.ini",pj_editor_Dir);
+	buffer=ReadBuffer_NonErrMsg(temporary);
+	if(!buffer){
+
+		//デフォルトの初期設定
+		InitToDefaultData();
+		return;
+	}
+
+	//関連付けを行うかどうか（この関数の最後に呼び出す）
+	if(!GetStringValue("LinkFile",temporary)){
+		ExtensionLink(NULL);
+	}
+
+	//ウィンドウサイズを保存するかしないか
+	if(!GetRectValue("WindowRect",&StartupWindowRect)){
+		StartupWindowRect.left=(int)((double)ScreenX*0.1);
+		StartupWindowRect.top=(int)((double)ScreenX*0.1);
+		StartupWindowRect.right=(int)((double)ScreenX*0.8);
+		StartupWindowRect.bottom=(int)((double)ScreenY*0.8);
+	}
+
+	//ウィンドウを最大化するか
+	if(!GetWholeValue("IsWindowMax",&bWindowMax)) bWindowMax=0;
+
+	//実行時のプロジェクトの保存確認の有無
+	if(!GetWholeValue("Project_SaveCheck",&bSaveCheckProject)) bSaveCheckProject=0;
+
+	//ラインアジャスタ
+	if(!GetWholeValue("Rad_LineAdjust",&bLineAdjust)) bLineAdjust=1;
+
+	//ProjectView位置情報
+	if(!GetRectValue("ProjectViewRect",&rectProjectView)){
+		rectProjectView.left=StartupWindowRect.right-270;
+		rectProjectView.right=StartupWindowRect.right-5;
+		rectProjectView.top=StartupWindowRect.top+60;
+		rectProjectView.bottom=StartupWindowRect.top+380;
+	}
+	if(rectProjectView.right<=0||
+		rectProjectView.left>=ScreenX||
+		rectProjectView.bottom<=0||
+		rectProjectView.top>=ScreenY||
+		rectProjectView.right-rectProjectView.left<10||
+		rectProjectView.bottom-rectProjectView.top<10){
+		//不正なデータは復元
+		rectProjectView.left=StartupWindowRect.right-270;
+		rectProjectView.right=StartupWindowRect.right-5;
+		rectProjectView.top=StartupWindowRect.top+60;
+		rectProjectView.bottom=StartupWindowRect.top+380;
+	}
+
+	//ProjectViewクリップ情報
+	if(!GetWholeValue("IsClipProjectView",&bClipProjectView)) bClipProjectView=1;
+	if(!GetWholeValue("width_ClipProjectView",&width_ClipProjectView)) width_ClipProjectView=200;
+
+	//デバッガビュー クリップ情報
+	if(!GetWholeValue("height_ClipDebuggerView",&height_ClipDebuggerView)) height_ClipDebuggerView=180;
+
+	//コンパイラビュー クリップ情報
+	if(!GetWholeValue("height_ClipCompileView",&height_ClipCompileView)) height_ClipCompileView=130;
+
+	//Web検索クリップ情報
+	if(!GetWholeValue("width_WebSearchView",&width_WebSearchView)) width_WebSearchView=230;
+
+
+	//Rebarバンド情報
+	for(i=0;i<MAX_REBARBANDS;i++){
+		if(!GetRebarBand(&SaveRebar[i],i)){
+			ResetRebarData();
+			break;
+		}
+	}
+
+	//Rebarバンドを固定するか
+	if(!GetWholeValue("IsNoGripper",&bNoGripper)) bNoGripper=0;
+
+
+	//ドキュメントを保存したときにタブを先頭に再配置するかどうか
+	if(!GetWholeValue("IsSaveTabToHead",&bSaveTabToHead)){
+#ifdef THETEXT
+		bSaveTabToHead=0;
+#else
+		bSaveTabToHead=1;
+#endif
+	}
+
+	//フォント
+	if(!GetLogFont("EditorFont",&lf)){
+		//読み込めなかったときは、デフォルトのエディタフォントをセット
+		GetDefaultEditFont(&lf);
+	}
+
+	//タブサイズ
+	if(!GetWholeValue("TabSize",&TabSize)) TabSize=4;
+
+	//エディタの行番号を表示するかどうか
+	if(!GetWholeValue("IsShowLineNumber",&bEditor_LineNumber)) bEditor_LineNumber=1;
+
+	//エディタのルーラーを表示するかどうか
+	if(!GetWholeValue("IsShowRuler",&bEditor_Ruler)) bEditor_Ruler=1;
+
+	//カーソル行を強調表示するかどうか
+	if(!GetWholeValue("IsCaretLine_BackGround",&bEditor_CaretLine_BackGround)) bEditor_CaretLine_BackGround=1;
+
+	//自動折り返し時の一行あたりの文字数
+	if(!GetWholeValue("MaxOneLineTextLength",&iMaxOneLineTextLength)) iMaxOneLineTextLength=75;
+
+	//コード補完機能を有効にするかどうか
+	if(!GetWholeValue("IsShowComplementWnd",&bShowComplementWnd)) bShowComplementWnd=1;
+
+	//ペアステートメント補完を有効にするかどうか
+	if(!GetWholeValue("BackNum_PairStatementComplement",&BackNum_PairStatementComplement)) BackNum_PairStatementComplement=100;
+
+	//パラメータヒント
+	if(!GetWholeValue("ParameterHint",(int *)&dwParameterHint)) dwParameterHint=1;
+
+	//パラメータ ヒント フォント
+	extern METHODCHECKINFO MethodCheckInfo;
+	if(!GetLogFont("HintFont",&MethodCheckInfo.LogFont)){
+		//読み込めなかったときは、デフォルトのヒントフォントをセット
+		GetDefaultHintFont(&MethodCheckInfo.LogFont);
+	}
+
+	//自動インデント
+	if(!GetWholeValue("IsAutoIndent",&bAutoIndent)) bAutoIndent=1;
+
+	//貼り付け時のインデント調整
+	if(!GetWholeValue("IsPasteIndent",&bPasteIndent)) bPasteIndent=0;
+
+	//検索・置換文字列を保存するかどうか
+	if(!GetWholeValue("IsSaveFindStr",&bSaveFindStr)) bSaveFindStr=1;
+
+	//自動折り返しをするかどうか
+	if(!GetWholeValue("IsRightTurn",&bRightTurn)) bRightTurn=0;
+
+	//Ctrlキーによるハイパーリンク
+	if(!GetWholeValue("IsCtrlKeyHyperLink",&bCtrlKeyHyperLink)) bCtrlKeyHyperLink=1;
+
+	//Web検索文字列を保存するかどうか
+	if(!GetWholeValue("IsSaveWebFindStr",&bSaveWebFindStr)) bSaveWebFindStr=1;
+
+	//初回のMDIウィンドウを最大化表示するか
+	if(!GetWholeValue("IsMDIZoomed",&bMDIZoomed)) bMDIZoomed=0;
+
+	//標準保存先ディレクトリ
+	if(!GetStringValue("DefSaveDir",DefSaveDir)) lstrcpy(DefSaveDir,pj_editor_Dir);
+
+	//プロジェクト保存ディレクトリ
+	if(!GetStringValue("ProjectSaveDir",ProjectSaveDir)) sprintf(ProjectSaveDir,"%sMyProjects",pj_editor_Dir);
+
+	//検索時に、大文字小文字を区別するか
+	if(!GetWholeValue("IsFindStrBigSmall",&bFindStrBigSmall)) bFindStrBigSmall=0;
+
+	//検索時に、正規表現を利用するかどうか
+	if(!GetWholeValue("IsRegExp",&bRegExp)) bRegExp=0;
+
+	//アクティブ デザイン テーマ
+	if(!GetStringValue("ActiveTheme",szActiveTheme)) lstrcpy(szActiveTheme,THEMENAME_CLASSIC);
+
+	//印刷用フォント
+	if(!GetLogFont("PrintFont",&lfPrint)){
+		//読み込めなかったときは、デフォルトのエディタフォントをセット
+		GetDefaultPrintFont(&lfPrint);
+	}
+
+	//印刷用フォントのポイントサイズ
+	if(!GetWholeValue("PrintFontPointSize",&iPrintFontPointSize)){
+		//読み込めなかったときは、デフォルトのポイントサイズをセット
+		iPrintFontPointSize=72;
+	}
+
+	//ページ番号を表示するかどうか
+	if(!GetWholeValue("IsShowPageNum",&bShowPageNum)) bShowPageNum=1;
+
+	//ページ番号文字列
+	if(!GetStringValue("PageStr",szPageStr)) lstrcpy(szPageStr,"ページ &n");
+
+	//インクルードディレクトリ
+	if(!GetStringValue("IncludeDir",szIncludeDir)) lstrcpy(szIncludeDir,".\\Include\\");
+
+	HeapDefaultFree(buffer);
+
+
+	/////////////////
+	// 検索文字列
+	/////////////////
+	int i2,i3;
+
+	sprintf(temporary,"%sUserSetting\\findstr.ini",pj_editor_Dir);
+	buffer=ReadBuffer_NonErrMsg(temporary);
+	if(buffer){
+		i2=0;
+		for(i=0;i<MAX_FINDLIST;i++){
+			for(i3=0;i3<MAX_PATH;i2++,i3++){
+				if(buffer[i2]=='\r'&&buffer[i2+1]=='\n'||buffer[i2]=='\0'){
+					FindStr[i][i3]=0;
+					break;
+				}
+				FindStr[i][i3]=buffer[i2];
+			}
+			if(buffer[i2]=='\r'&&buffer[i2+1]=='\n') i2+=2;
+		}
+
+		HeapDefaultFree(buffer);
+	}
+
+
+	/////////////////
+	// 置換文字列
+	/////////////////
+	sprintf(temporary,"%sUserSetting\\permustr.ini",pj_editor_Dir);
+	buffer=ReadBuffer_NonErrMsg(temporary);
+	if(buffer){
+		i2=0;
+		for(i=0;i<MAX_FINDLIST;i++){
+			for(i3=0;i3<MAX_PATH;i2++,i3++){
+				if(buffer[i2]=='\r'&&buffer[i2+1]=='\n'||buffer[i2]=='\0'){
+					PermutationStr[i][i3]=0;
+					break;
+				}
+				PermutationStr[i][i3]=buffer[i2];
+			}
+			if(buffer[i2]=='\r'&&buffer[i2+1]=='\n') i2+=2;
+		}
+
+		HeapDefaultFree(buffer);
+	}
+
+
+	/////////////////
+	// Web検索文字列
+	/////////////////
+	sprintf(temporary,"%sUserSetting\\webstr.ini",pj_editor_Dir);
+	buffer=ReadBuffer_NonErrMsg(temporary);
+	if(buffer){
+		i2=0;
+		for(i=0;i<MAX_FINDLIST;i++){
+			for(i3=0;i3<MAX_PATH;i2++,i3++){
+				if(buffer[i2]=='\r'&&buffer[i2+1]=='\n'||buffer[i2]=='\0'){
+					WebStr[i][i3]=0;
+					break;
+				}
+				WebStr[i][i3]=buffer[i2];
+			}
+			if(buffer[i2]=='\r'&&buffer[i2+1]=='\n') i2+=2;
+		}
+
+		HeapDefaultFree(buffer);
+	}
+}
+
+void CNonVolatile::InitToDefaultData(){
+	///////////////////////////////////
+	// デフォルトの初期設定
+	///////////////////////////////////
+
+	//検索・置換文字列を保存するかどうか
+	bSaveFindStr=1;
+
+	//自動折り返しをするかどうか
+	bRightTurn=0;
+
+	//Ctrlキーによるハイパーリンク
+	bCtrlKeyHyperLink=1;
+
+	//Web検索文字列を保存するかどうか
+	bSaveWebFindStr=1;
+
+	//アクティブ デザイン テーマ
+	lstrcpy(szActiveTheme,THEMENAME_CLASSIC);
+
+	//印刷用フォント
+	GetDefaultPrintFont(&lfPrint);
+
+	//印刷用フォントのポイントサイズ
+	iPrintFontPointSize=72;
+
+	//ページ番号を表示するかどうか
+	bShowPageNum=1;
+
+	//ページ番号文字列
+	lstrcpy(szPageStr,"ページ &n");
+
+	//インクルードディレクトリ
+	lstrcpy(szIncludeDir,".\\Include\\");
+
+	//ウィンドウ位置、サイズ
+	StartupWindowRect.left=(int)((double)ScreenX*0.1);
+	StartupWindowRect.top=(int)((double)ScreenX*0.1);
+	StartupWindowRect.right=(int)((double)ScreenX*0.8);
+	StartupWindowRect.bottom=(int)((double)ScreenY*0.8);
+
+	//ウィンドウを最大化するか
+	bWindowMax=1;
+
+	//実行時の、プロジェクトの保存確認の有無
+	bSaveCheckProject=0;
+
+	//RADツールのライン アジャスタ
+	bLineAdjust=1;
+
+	//ProjectView位置情報
+	rectProjectView.left=StartupWindowRect.right-270;
+	rectProjectView.right=StartupWindowRect.right-5;
+	rectProjectView.top=StartupWindowRect.top+60;
+	rectProjectView.bottom=StartupWindowRect.top+380;
+
+	//Rebar情報を初期化
+	ResetRebarData();
+
+	//エディタ フォント
+	GetDefaultEditFont(&lf);
+
+	//パラメータ ヒント フォント
+	extern METHODCHECKINFO MethodCheckInfo;
+	GetDefaultHintFont(&MethodCheckInfo.LogFont);
+
+	//タブサイズ
+	TabSize=4;
+
+	//行番号を表示するかどうか
+	bEditor_LineNumber=1;
+
+	//ルーラーを表示するかどうか
+	bEditor_Ruler=1;
+
+	//カーソル行を強調表示するかどうか
+	bEditor_CaretLine_BackGround=1;
+
+	//自動折り返しの文字数
+	iMaxOneLineTextLength=75;
+
+	//パラメータヒント
+	dwParameterHint=1;
+
+	//自動インデント
+	bAutoIndent=1;
+
+	//貼り付け時のインデント調整
+	bPasteIndent=0;
+
+	//初回のMDIウィンドウを最大化表示するか
+	bMDIZoomed=1;
+
+	//標準保存先ディレクトリ
+	lstrcpy(DefSaveDir,pj_editor_Dir);
+
+	//プロジェクト保存ディレクトリ
+	sprintf(ProjectSaveDir,"%sMyProjects",pj_editor_Dir);
+
+	bClipProjectView=1;
+	width_ClipProjectView=200;
+	height_ClipDebuggerView=180;
+	height_ClipCompileView=130;
+	width_WebSearchView=230;
+#ifdef THETEXT
+	bSaveTabToHead=0;
+#else
+	bSaveTabToHead=1;
+#endif
+
+	BackNum_PairStatementComplement=100;
+
+	//ファイルの関連付け
+	ExtensionLink(NULL);
+}
+
+void CSettingFile::SetWholeValue(char *name,long i32data){
+	sprintf(buffer+lstrlen(buffer),"%s=%d\r\n",name,i32data);
+}
+void CSettingFile::Set3WholeValue(char *name,long d1,long d2,long d3){
+	sprintf(buffer+lstrlen(buffer),"%s=%d,%d,%d\r\n",name,d1,d2,d3);
+}
+void CSettingFile::SetRGBValue(char *name,COLORREF rgb){
+	rgb=RGB(
+		LOBYTE(LOWORD(rgb)),
+		HIBYTE(LOWORD(rgb)),
+		LOBYTE(HIWORD(rgb))
+		);
+	sprintf(buffer+lstrlen(buffer),"%s=%x\r\n",name,rgb);
+}
+void CSettingFile::SetStringValue(char *name,char *str){
+	sprintf(buffer+lstrlen(buffer),"%s=%s\r\n",name,str);
+}
+void CSettingFile::SetRectValue(char *name,RECT *prc){
+	sprintf(buffer+lstrlen(buffer),"%s=%d,%d,%d,%d\r\n",name,prc->left,prc->top,prc->right,prc->bottom);
+}
+void CSettingFile::SetLogFont(char *name,LOGFONT *plf){
+	sprintf(buffer+lstrlen(buffer),"%s=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%s\r\n",name,
+		plf->lfHeight,
+		plf->lfWidth,
+		plf->lfEscapement,
+		plf->lfOrientation,
+		plf->lfWeight,
+		plf->lfItalic,
+		plf->lfUnderline,
+		plf->lfStrikeOut,
+		plf->lfCharSet,
+		plf->lfOutPrecision,
+		plf->lfClipPrecision,
+		plf->lfQuality,
+		plf->lfPitchAndFamily,
+		plf->lfFaceName);
+}
+void CSettingFile::SetRebarBand(SAVEREBAR *psr,int num){
+	char name[32];
+
+	sprintf(name,"RebarBand%d",num);
+	sprintf(buffer+lstrlen(buffer),"%s=%d,%d,%d\r\n",name,psr->RebarID,psr->RebarLength,psr->IsBandBreak);
+}
+
+void CNonVolatile::save(){
+	int i;
+	char temporary[MAX_PATH];
+
+	sprintf(temporary,"%sUserSetting",pj_editor_Dir);
+
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind==INVALID_HANDLE_VALUE){
+		//UserSettingディレクトリを作成
+		if(!CreateDirectory(temporary,NULL)){
+			MessageBox(hOwner,"UserSettingディレクトリの作成に失敗",APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+	}
+
+	buffer=(char *)HeapAlloc(hHeap,0,65536);
+	buffer[0]=0;
+
+
+	//ウィンドウサイズを保存するかしないか
+	SetRectValue("WindowRect",&StartupWindowRect);
+
+	//ウィンドウを最大化するか
+	SetWholeValue("IsWindowMax",bWindowMax);
+
+	//実行時のプロジェクトの保存確認の有無
+	SetWholeValue("Project_SaveCheck",bSaveCheckProject);
+
+	//ラインアジャスタ
+	SetWholeValue("Rad_LineAdjust",bLineAdjust);
+
+	//ProjectView位置情報
+	SetRectValue("ProjectViewRect",&rectProjectView);
+
+	//ProjectViewクリップ情報
+	SetWholeValue("IsClipProjectView",bClipProjectView);
+	SetWholeValue("width_ClipProjectView",width_ClipProjectView);
+
+	//デバッガビュー クリップ情報
+	SetWholeValue("height_ClipDebuggerView",height_ClipDebuggerView);
+
+	//コンパイラビュー クリップ情報
+	SetWholeValue("height_ClipCompileView",height_ClipCompileView);
+
+	//Web検索クリップ情報
+	SetWholeValue("width_WebSearchView",width_WebSearchView);
+
+
+	//Rebar情報
+	for(i=0;i<MAX_REBARBANDS;i++){
+		SetRebarBand(&SaveRebar[i],i);
+	}
+
+	//Rebarバンドを固定するか
+	SetWholeValue("IsNoGripper",bNoGripper);
+
+
+	//ドキュメントを保存したときにタブを先頭に再配置するかどうか
+	SetWholeValue("IsSaveTabToHead",bSaveTabToHead);
+
+	//フォント
+	SetLogFont("EditorFont",&lf);
+
+	//タブサイズ
+	SetWholeValue("TabSize",TabSize);
+
+	//エディタの行番号を表示するかどうか
+	SetWholeValue("IsShowLineNumber",bEditor_LineNumber);
+
+	//ルーラーを表示するかどうか
+	SetWholeValue("IsShowRuler",bEditor_Ruler);
+
+	//カーソル行を強調表示するかどうか
+	SetWholeValue("IsCaretLine_BackGround",bEditor_CaretLine_BackGround);
+
+	//自動折り返し時の一行あたりの文字数
+	SetWholeValue("MaxOneLineTextLength",iMaxOneLineTextLength);
+
+	//コード補完機能を有効にするかどうか
+	SetWholeValue("IsShowComplementWnd",bShowComplementWnd);
+
+	//ペアステートメント補完を有効にするかどうか
+	SetWholeValue("BackNum_PairStatementComplement",BackNum_PairStatementComplement);
+
+	//パラメータヒント
+	SetWholeValue("ParameterHint",dwParameterHint);
+
+	//パラメータ ヒント フォント
+	extern METHODCHECKINFO MethodCheckInfo;
+	SetLogFont("HintFont",&MethodCheckInfo.LogFont);
+
+	//検索・置換文字列を保存するかどうか
+	SetWholeValue("IsSaveFindStr",bSaveFindStr);
+
+	//自動インデント
+	SetWholeValue("IsAutoIndent",bAutoIndent);
+
+	//貼り付け時のインデント調整
+	SetWholeValue("IsPasteIndent",bPasteIndent);
+
+	//自動折り返しをするかどうか
+	SetWholeValue("IsRightTurn",bRightTurn);
+
+	//Ctrlキーによるハイパーリンク
+	SetWholeValue("IsCtrlKeyHyperLink",bCtrlKeyHyperLink);
+
+	//Web検索文字列を保存するかどうか
+	SetWholeValue("IsSaveWebFindStr",bSaveWebFindStr);
+
+	//初回のMDIウィンドウを最大化表示するか
+	SetWholeValue("IsMDIZoomed",bMDIZoomed);
+
+	//標準保存先ディレクトリ
+	SetStringValue("DefSaveDir",DefSaveDir);
+
+	//プロジェクト保存ディレクトリ
+	SetStringValue("ProjectSaveDir",ProjectSaveDir);
+
+	//検索時に、大文字小文字を区別するか
+	SetWholeValue("IsFindStrBigSmall",bFindStrBigSmall);
+
+	//検索時に、正規表現を利用するか
+	SetWholeValue("IsRegExp",bRegExp);
+
+	//次回起動時に関連付けダイアログを表示しないようにする
+	SetStringValue("LinkFile","ok");
+
+	//アクティブ デザイン テーマ
+	SetStringValue("ActiveTheme",szActiveTheme);
+
+	//印刷用フォント
+	SetLogFont("PrintFont",&lfPrint);
+
+	//印刷用フォントのポイントサイズ
+	SetWholeValue("PrintFontPointSize",iPrintFontPointSize);
+
+	//ページ番号を表示するかどうか
+	SetWholeValue("IsShowPageNum",bShowPageNum);
+
+	//ページ番号文字列
+	SetStringValue("PageStr",szPageStr);
+
+	//インクルードディレクトリ
+	SetStringValue("IncludeDir",szIncludeDir);
+
+
+	//保存
+	sprintf(temporary,"%sUserSetting\\editor.ini",pj_editor_Dir);
+	WriteBuffer(temporary,buffer,lstrlen(buffer));
+
+
+
+	/////////////////
+	// 検索文字列
+	/////////////////
+	buffer[0]=0;
+	if(pobj_nv->bSaveFindStr){
+		for(i=0;i<MAX_FINDLIST;i++){
+			lstrcat(buffer,FindStr[i]);
+			lstrcat(buffer,"\r\n");
+		}
+	}
+
+	//保存
+	sprintf(temporary,"%sUserSetting\\findstr.ini",pj_editor_Dir);
+	WriteBuffer(temporary,buffer,lstrlen(buffer));
+
+
+
+	/////////////////
+	// 置換文字列
+	/////////////////
+	buffer[0]=0;
+	if(pobj_nv->bSaveFindStr){
+		for(i=0;i<MAX_FINDLIST;i++){
+			lstrcat(buffer,PermutationStr[i]);
+			lstrcat(buffer,"\r\n");
+		}
+	}
+
+	//保存
+	sprintf(temporary,"%sUserSetting\\permustr.ini",pj_editor_Dir);
+	WriteBuffer(temporary,buffer,lstrlen(buffer));
+
+
+
+	/////////////////
+	// Web検索文字列
+	/////////////////
+	buffer[0]=0;
+	if(pobj_nv->bSaveWebFindStr){
+		for(i=0;i<MAX_FINDLIST;i++){
+			lstrcat(buffer,WebStr[i]);
+			lstrcat(buffer,"\r\n");
+		}
+	}
+
+	//保存
+	sprintf(temporary,"%sUserSetting\\webstr.ini",pj_editor_Dir);
+	WriteBuffer(temporary,buffer,lstrlen(buffer));
+
+	HeapDefaultFree(buffer);
+
+
+
+	///////////////////////////////////
+	// 関連付け用の拡張子オブジェクト
+	///////////////////////////////////
+	sprintf(temporary,"%sUserSetting\\extlink.ini",pj_editor_Dir);
+	pobj_ExtLink->save(temporary);
+
+
+	//////////////////////////////////////
+	// Web検索用ドメイン管理オブジェクト
+	//////////////////////////////////////
+	pobj_DBDomain->save();
+
+
+	///////////////////////////////////////
+	// 「最近使ったファイル」オブジェクト
+	///////////////////////////////////////
+	sprintf(temporary,"%sUserSetting\\history.ini",pj_editor_Dir);
+	pobj_History->save(temporary);
+
+	
+	///////////////////////////////////////
+	// 「最近使ったファイル」オブジェクト
+	///////////////////////////////////////
+	sprintf(temporary,"%sUserSetting\\pj_history.ini",pj_editor_Dir);
+	pobj_ProjectHistory->save(temporary);
+}
Index: /ProjectEditor/NonVolatile.h
===================================================================
--- /ProjectEditor/NonVolatile.h	(revision 3)
+++ /ProjectEditor/NonVolatile.h	(revision 3)
@@ -0,0 +1,137 @@
+
+
+class CNonVolatile:public CSettingFile{
+	void InitToDefaultData();
+
+public:
+	BOOL bSaveCheckProject;
+	BOOL bLineAdjust;
+	BOOL bWindowMax;
+	DWORD dwParameterHint;
+	BOOL bMDIZoomed;
+	char DefSaveDir[MAX_PATH];
+	char ProjectSaveDir[MAX_PATH];
+	RECT StartupWindowRect;
+	RECT rectProjectView;
+
+	//大文字・小文字検索を見分けるかどうか
+	BOOL bFindStrBigSmall;
+
+	//正規表現検索を行うかどうか
+	BOOL bRegExp;
+
+	//ProjectViewクリップ情報
+	BOOL bClipProjectView;
+	int width_ClipProjectView;
+
+	//デバッガビュー クリップ情報
+	int height_ClipDebuggerView;
+
+	//コンパイラビュー クリップ情報
+	int height_ClipCompileView;
+
+	//Web検索クリップ情報
+	int width_WebSearchView;
+
+	//レバー情報
+	SAVEREBAR SaveRebar[MAX_REBARBANDS];
+	BOOL bNoGripper;
+
+	//ドキュメントを保存したときにタブを先頭に再配置するかどうか
+	BOOL bSaveTabToHead;
+
+	//エディタフォント
+	LOGFONT lf;
+
+	//タブサイズ
+	int TabSize;
+
+	//行番号を表示するかどうか
+	BOOL bEditor_LineNumber;
+
+	//ルーラーを表示するかどうか
+	BOOL bEditor_Ruler;
+
+	//カーソル行を強調表示するかどうか
+	BOOL bEditor_CaretLine_BackGround;
+
+	//自動折り返し時の一行あたりの文字数
+	int iMaxOneLineTextLength;
+
+	//自動インデント
+	BOOL bAutoIndent;
+
+	//貼り付け時のインデント調整
+	BOOL bPasteIndent;
+
+	//コード補完機能を有効にするかどうか
+	BOOL bShowComplementWnd;
+
+	//ペアステートメント補完を有効にするかどうか
+	int BackNum_PairStatementComplement;
+
+	//検索・置換文字列を保存するかどうか
+	BOOL bSaveFindStr;
+
+	//自動折り返しをするかどうか
+	BOOL bRightTurn;
+
+	//Ctrlキーによるハイパーリンク
+	BOOL bCtrlKeyHyperLink;
+
+	//Web検索文字列を保存するかどうか
+	BOOL bSaveWebFindStr;
+
+	//文字色、背景色
+	char szActiveTheme[255];
+
+	//印刷用フォント
+	LOGFONT lfPrint;
+
+	//印刷用フォントのポイントサイズ
+	int iPrintFontPointSize;
+
+	//ページ番号を表示するかどうか
+	BOOL bShowPageNum;
+
+	//ページ番号文字列
+	char szPageStr[255];
+
+	//インクルードディレクトリ
+	char szIncludeDir[MAX_PATH];
+
+	//////////////////////////////////////////////////////////////
+
+
+
+	//検索、置換文字列（findstr.ini）
+	char FindStr[MAX_FINDLIST][MAX_PATH];
+	char PermutationStr[MAX_FINDLIST][MAX_PATH];
+
+
+	//Web検索文字列（premustr.ini）
+	char WebStr[MAX_FINDLIST][MAX_PATH];
+
+
+	//関連付けの拡張子オブジェクト（extlink.ini）
+	CExtLink *pobj_ExtLink;
+
+
+	//Web検索用ドメイン（webstr.ini）
+	CDBDomain *pobj_DBDomain;
+
+
+	//履歴（history.ini）
+	CHistory *pobj_History;
+
+
+	//プロジェクト履歴（pj_history.ini）
+	CHistory *pobj_ProjectHistory;
+
+
+	CNonVolatile();
+	~CNonVolatile();
+	void load();
+	void save();
+};
+extern CNonVolatile *pobj_nv;
Index: /ProjectEditor/ParameterHint.cpp
===================================================================
--- /ProjectEditor/ParameterHint.cpp	(revision 3)
+++ /ProjectEditor/ParameterHint.cpp	(revision 3)
@@ -0,0 +1,1284 @@
+#include "common.h"
+
+void ShowCommandMessage(void);
+
+BOOL CheckGrammar(char *buffer){
+	int i,IsStr,PareNum;
+
+	for(i=0,IsStr=0,PareNum=0;;i++){
+		if(buffer[i]=='\"') IsStr^=1;
+		else if(buffer[i]=='(') PareNum++;
+		else if(buffer[i]==')') PareNum--;
+		else if(buffer[i]=='\0'||(buffer[i]=='\r'&&buffer[i+1]=='\n')){
+			if(IsStr||PareNum) return 0;
+			if(buffer[i]=='\0') break;
+			i++;
+			continue;
+		}
+		else if(buffer[i]=='\''&&IsStr==0){
+			while(!(buffer[i]=='\0'||(buffer[i]=='\r'&&buffer[i+1]=='\n'))) i++;
+			i--;
+			continue;
+		}
+	}
+	return 1;
+}
+
+char *GetUserSourceCode(void){
+	//単体ファイルのときはそのファイルを、プロジェクトのときはpjname.abの内容を取得
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	char temporary[MAX_PATH],*pBuf;
+
+	if(ProjectInfo.name[0]){
+		//プロジェクトが開かれているとき
+		lstrcpy(temporary,ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->m_path);
+		GetFullPath(temporary,ProjectInfo.dir);
+
+		extern MDIINFO MdiInfo[MAX_WNDNUM];
+		for(i=0;i<MAX_WNDNUM;i++){
+			if(MdiInfo[i].hwnd){
+				if(lstrcmpi(MdiInfo[i].path,temporary)==0) break;
+			}
+		}
+		if(i==MAX_WNDNUM){
+			//ファイルから開く
+			pBuf=ReadBuffer(temporary);
+		}
+		else{
+			//エディタから読み込む
+			pBuf=(char *)HeapAlloc(hHeap,0,lstrlen(MdiInfo[i].pmti->buffer)+1);
+			lstrcpy(pBuf,MdiInfo[i].pmti->buffer);
+		}
+	}
+	else{
+		//単体ソースコードのとき
+		extern MDIINFO MdiInfo[MAX_WNDNUM];
+		int WndNum;
+
+		WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+		pBuf=(char *)HeapAlloc(hHeap,0,lstrlen(MdiInfo[WndNum].pmti->buffer)+1);
+		lstrcpy(pBuf,MdiInfo[WndNum].pmti->buffer);
+	}
+
+	//ファイルをインクルード
+	pBuf=IncludeFiles(pBuf);
+
+	return pBuf;
+}
+
+BOOL SetCommandMessageToMethodCheck(char *Command){
+	extern METHODCHECKINFO MethodCheckInfo;
+	int CmdValue;
+
+	CmdValue=IsBasicReservedWord(Command);
+	if(CmdValue==COM_ABSTRACT)			lstrcpy(MethodCheckInfo.msg,"Abstract Sub/Function ([arglist]) [As type]]");
+	else if(CmdValue==COM_BEEP)			lstrcpy(MethodCheckInfo.msg,"Beep");
+	else if(CmdValue==COM_CHDIR)		lstrcpy(MethodCheckInfo.msg,"ChDir directory$");
+	else if(CmdValue==COM_CIRCLE)		lstrcpy(MethodCheckInfo.msg,"Circle (x, y), radius, [color], [start], [end], [aspect], [f], [brushcolor]");
+	else if(CmdValue==COM_CLOSE)		lstrcpy(MethodCheckInfo.msg,"Close [filenumber]");
+	else if(CmdValue==COM_CLASS)		lstrcpy(MethodCheckInfo.msg,"Class name");
+	else if(CmdValue==COM_CLS)			lstrcpy(MethodCheckInfo.msg,"Cls [number]");
+	else if(CmdValue==COM_COLOR)		lstrcpy(MethodCheckInfo.msg,"Color color, [backcolor]");
+	else if(CmdValue==COM_CONST)		lstrcpy(MethodCheckInfo.msg,"Const constname = expression");
+	else if(CmdValue==COM_DEBUG)		lstrcpy(MethodCheckInfo.msg,"Debug");
+	else if(CmdValue==COM_DECLARE)		lstrcpy(MethodCheckInfo.msg,"Declare Sub/Function name Lib \"libname\" [Alias \"aliasname\"] ([arglist]) [As type]]");
+	else if(CmdValue==COM_DEF)			lstrcpy(MethodCheckInfo.msg,"Def func([parms] [,parms2])=expression");
+	else if(CmdValue==COM_DIM)			lstrcpy(MethodCheckInfo.msg,"Dim variable [(subscripts)] As type, ...");
+	else if(CmdValue==COM_END)			lstrcpy(MethodCheckInfo.msg,"End [type]");
+	else if(CmdValue==COM_ENUM)			lstrcpy(MethodCheckInfo.msg,"Enum name");
+	else if(CmdValue==COM_FIELD)		lstrcpy(MethodCheckInfo.msg,"Field #filenumber, fieldbyte");
+	else if(CmdValue==COM_FOR)			lstrcpy(MethodCheckInfo.msg,"For variable=start To end [Step step]");
+	else if(CmdValue==COM_FUNCTION)		lstrcpy(MethodCheckInfo.msg,"Function name ([arglist]) [As type]");
+	else if(CmdValue==COM_GET)			lstrcpy(MethodCheckInfo.msg,"Get #filenumber, recode, StrBuffer");
+	else if(CmdValue==COM_GOSUB)		lstrcpy(MethodCheckInfo.msg,"GoSub label");
+	else if(CmdValue==COM_GOTO)			lstrcpy(MethodCheckInfo.msg,"Goto label");
+	else if(CmdValue==COM_IF)			lstrcpy(MethodCheckInfo.msg,"If judgment Then truecommand [Else falsecommand]");
+	else if(CmdValue==COM_INHERITS)		lstrcpy(MethodCheckInfo.msg,"Inherits BaseClass");
+	else if(CmdValue==COM_INPUT)		lstrcpy(MethodCheckInfo.msg,"Input [# filenumber, ] variable, [...]");
+	else if(CmdValue==COM_INTERFACE)	lstrcpy(MethodCheckInfo.msg,"Interface name");
+	else if(CmdValue==COM_KILL)			lstrcpy(MethodCheckInfo.msg,"Kill filename$");
+	else if(CmdValue==COM_LET)			lstrcpy(MethodCheckInfo.msg,"[Let] variable = expression");
+	else if(CmdValue==COM_LINE)			lstrcpy(MethodCheckInfo.msg,"Line [(sx, sy)] -[Step] (ex, ey), [color], [B/Bf], [color2]");
+	else if(CmdValue==COM_LOCATE)		lstrcpy(MethodCheckInfo.msg,"Locate x, y");
+	else if(CmdValue==COM_LOOP)			lstrcpy(MethodCheckInfo.msg,"Loop while/until judgment");
+	else if(CmdValue==COM_MKDIR)		lstrcpy(MethodCheckInfo.msg,"MkDir directory$");
+	else if(CmdValue==COM_MSGBOX)		lstrcpy(MethodCheckInfo.msg,"MsgBox hWnd, String$, [Title$], [BoxType], [retAns]");
+	else if(CmdValue==COM_NEXT)			lstrcpy(MethodCheckInfo.msg,"Next");
+	else if(CmdValue==COM_OPEN)			lstrcpy(MethodCheckInfo.msg,"Open filename$ [For Input/Output/Append] As number");
+	else if(CmdValue==COM_PAINT)		lstrcpy(MethodCheckInfo.msg,"Paint (x, y), brushcolor, [linecolor]");
+	else if(CmdValue==COM_PRINT)		lstrcpy(MethodCheckInfo.msg,"Print outdata, [...]");
+	else if(CmdValue==COM_PRIVATE)		lstrcpy(MethodCheckInfo.msg,"Private");
+	else if(CmdValue==COM_PROTECTED)	lstrcpy(MethodCheckInfo.msg,"Protected");
+	else if(CmdValue==COM_PSET)			lstrcpy(MethodCheckInfo.msg,"PSet (x, y), [color]");
+	else if(CmdValue==COM_PUBLIC)		lstrcpy(MethodCheckInfo.msg,"Public");
+	else if(CmdValue==COM_PUT)			lstrcpy(MethodCheckInfo.msg,"Put #filenumber, recode, StrBuffer");
+	else if(CmdValue==COM_RANDOMIZE)	lstrcpy(MethodCheckInfo.msg,"Randomize [number]");
+	else if(CmdValue==COM_REM)			lstrcpy(MethodCheckInfo.msg,"Rem [comment]");
+	else if(CmdValue==COM_RETURN)		lstrcpy(MethodCheckInfo.msg,"Return");
+	else if(CmdValue==COM_SELECT)		lstrcpy(MethodCheckInfo.msg,"Select Case testexpression");
+	else if(CmdValue==COM_SUB)			lstrcpy(MethodCheckInfo.msg,"Sub name ([arglist])");
+	else if(CmdValue==COM_TYPE)			lstrcpy(MethodCheckInfo.msg,"Type name");
+	else if(CmdValue==COM_TYPEDEF)		lstrcpy(MethodCheckInfo.msg,"TypeDef newtype = basetype");
+	else if(CmdValue==COM_VIRTUAL)		lstrcpy(MethodCheckInfo.msg,"Virtual Sub/Function ([arglist]) [As type]]");
+	else if(CmdValue==COM_OVERRIDE)		lstrcpy(MethodCheckInfo.msg,"Override Sub/Function ([arglist]) [As type]]");
+	else if(CmdValue==COM_WEND)			lstrcpy(MethodCheckInfo.msg,"Wend");
+	else if(CmdValue==COM_WHILE)		lstrcpy(MethodCheckInfo.msg,"While judgment");
+	else if(CmdValue==COM_WINDOW)		lstrcpy(MethodCheckInfo.msg,"Window hWnd, OwnerWnd, x, y, width, height, title$, style, [class$], [ID], [callbackfunction], [ExStyle]");
+	else if(CmdValue==COM_WITH)			lstrcpy(MethodCheckInfo.msg,"With object");
+	else if(CmdValue==COM_WRITE)		lstrcpy(MethodCheckInfo.msg,"Write [data, ...]");
+	else return 0;
+	return 1;
+}
+
+void ChangeReturnCode(char *buffer){
+	//改行コードのCRLFをLFに変換
+	int i,i2;
+	for(i=0,i2=0;;i++,i2++){
+		if(buffer[i]=='\r'&&buffer[i+1]=='\n') i++;
+		buffer[i2]=buffer[i];
+		if(buffer[i]=='\0') break;
+	}
+}
+void DeleteComment(char *buffer){	//注釈「'」の取り除き
+	int i,i2,i3,IsStr;
+	char *temporary;
+	temporary=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(buffer)+1);
+	for(i=0,i2=0,i3=0,IsStr=0;;i++,i2++){
+		if(buffer[i]=='\"') IsStr^=1;
+		if(buffer[i]=='\n'||buffer[i]=='\0'){
+			i2--;
+			while(temporary[i2]==' '||temporary[i2]=='\t') i2--;
+			i2++;
+
+			if(i3){
+				//複数行に渡る注釈文の中に改行が存在するとき
+				memset(temporary+i2,'\n',i3);
+				i2+=i3;
+				i3=0;
+			}
+		}
+		if(buffer[i]=='\''&&IsStr==0){
+			//注釈文
+			i2--;
+			while(temporary[i2]==' '||temporary[i2]=='\t') i2--;
+			i2++;
+			while(buffer[i]!='\n'&&buffer[i]!='\0') i++;
+		}
+		if(buffer[i]=='/'&&buffer[i+1]=='*'&&IsStr==0){
+			//注釈文（複数行）
+			i+=2;
+			i3=0;
+			while(!(buffer[i]=='*'&&buffer[i+1]=='/')){
+				if(buffer[i]=='\n') i3++;
+				if(buffer[i]=='\0') break;
+				i++;
+			}
+			if(buffer[i]){
+				i+=2;
+			}
+			i--;
+			i2--;
+			continue;
+		}
+		temporary[i2]=buffer[i];
+		if(buffer[i]=='\0') break;
+	}
+	lstrcpy(buffer,temporary);
+	GlobalFree(temporary);
+}
+
+BOOL GetDefualtFunctionParameter(char *pBuf,char *FuncName,char *Parameter){
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	/////////////////////////////////////////
+	// ソースコードから関数定義位置を取得
+	/////////////////////////////////////////
+
+	for(i=0;;i++){
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+		if(memicmp(pBuf+i,"Class",5)==0&&(pBuf[i+5]==' '||pBuf[i+5]=='\t')||
+			memicmp(pBuf+i,"Interface",9)==0&&(pBuf[i+9]==' '||pBuf[i+9]=='\t')||
+			memicmp(pBuf+i,"Type",4)==0&&(pBuf[i+4]==' '||pBuf[i+4]=='\t')){
+			/* Class ～ End Class
+				Interface ～ End Interface
+				Type ～ End Type
+				は飛び越す */
+
+			while(1){
+				if(pBuf[i]=='\0'){
+					i2=0;
+					break;
+				}
+
+				if(memicmp(pBuf+i,"End",3)==0){
+					/*	End Class
+						End Interface
+						End Type
+						の検出 */
+					i+=3;
+					while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+					if(memicmp(pBuf+i,"Class",5)==0&&(!IsVariableChar(pBuf[i+5]))||
+						memicmp(pBuf+i,"Interface",9)==0&&(!IsVariableChar(pBuf[i+9]))||
+						memicmp(pBuf+i,"Type",4)==0&&(!IsVariableChar(pBuf[i+4]))){
+						i2=0;
+						break;
+					}
+				}
+
+				//次の行をサーチ
+				for(;;i++){
+					if(pBuf[i]=='\0') break;
+					i2=IsCommandDelimitation(pBuf,i);
+					if(i2){
+						i+=i2;
+						break;
+					}
+				}
+				JumpBlank(pBuf,&i);
+			}
+		}
+
+		if(memicmp(pBuf+i,"Declare",7)==0&&(pBuf[i+7]==' '||pBuf[i+7]=='\t')){
+			i+=8;
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+			if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')) i+=9;
+			else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')) i+=4;
+			else goto NextCommand;
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(pBuf[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=pBuf[i];
+			}
+			if(lstrcmp(temporary,FuncName)==0){
+				//関数名が一致したとき
+				break;
+			}
+		}
+		if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')){
+			if(pBuf[i]=='f'||pBuf[i]=='F') i+=9;
+			else i+=4;
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(pBuf[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=pBuf[i];
+			}
+			if(lstrcmpi(temporary,"Export")==0){
+				//"Export"を飛び越す
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				for(i2=0;;i++,i2++){
+					if(!IsVariableChar(pBuf[i])){
+						temporary[i2]=0;
+						break;
+					}
+					temporary[i2]=pBuf[i];
+				}
+			}
+			if(lstrcmp(temporary,FuncName)==0){
+				//関数名が一致したとき
+				break;
+			}
+
+		}
+
+NextCommand:
+		for(;;i++){
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				if(i2==2) i++;
+				break;
+			}
+		}
+
+		if(pBuf[i]=='\0') return 0;
+	}
+
+	for(;;i++){
+		if(pBuf[i]=='(') break;
+		if(IsCommandDelimitation(pBuf,i)) return 0;
+	}
+
+	//関数名をコピー
+	lstrcpy(Parameter,FuncName);
+	i2=lstrlen(Parameter);
+
+
+	//////////////////////////////////////////////////////
+	//パラメータをコピー
+	//（コメントの挿入、途中改行などの状況を考慮する）
+	//////////////////////////////////////////////////////
+
+	for(;;i++,i2++){
+		if(IsVariableChar(pBuf[i-1])==0&&pBuf[i-1]!=')'&&IS_BLANK(pBuf[i])||
+			pBuf[i]=='\''||
+			pBuf[i]=='/'&&pBuf[i+1]=='*')
+			JumpBlank(pBuf,&i);
+
+		if(IsCommandDelimitation(pBuf,i)){
+			if(IS_RETURN(pBuf,i)&&
+				pBuf[i-1]=='_'||pBuf[i-1]=='('||pBuf[i-1]==','){
+				//改行を許可
+				i2--;
+				if(Parameter[i2]=='_') i2--;
+
+				i+=2;
+				continue;
+			}
+
+			Parameter[i2]=0;
+			break;
+		}
+		Parameter[i2]=pBuf[i];
+	}
+
+
+	//文法チェック
+	if(!CheckGrammar(Parameter)) return 0;
+
+	
+	return 1;
+}
+BOOL GetClassMemberFunctionParameter(char *pBuf,char *ClassName,char *nest,char *Parameter){
+	extern HANDLE hHeap;
+	extern char *pHeaderBuf;
+	extern char *pUserSource;
+	int i,i2;
+	char temporary[8192];
+	DWORD dwClassType;
+	BOOL bRet;
+
+
+	/////////////////////////////////////////
+	// ソースコードからクラス定義位置を取得
+	/////////////////////////////////////////
+	i=GetClassPos(pBuf,ClassName,&dwClassType);
+	if(pBuf[i]=='\0') return 0;
+
+	//クラス、配列の構成要素を解析する
+	char VarName[VN_SIZE];		//変数名
+	char array[VN_SIZE];		//第1次配列
+	char lpPtrOffset[VN_SIZE];	//第2次配列
+	char NestMember[VN_SIZE];	//入れ子メンバ
+	int RefType;				//"."参照のときは0、"->"参照のときは1
+	lstrcpy(VarName,nest);
+	if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)) return 0;
+
+	if(RefType){
+		////////////////////
+		// 入れ子構造の場合
+		////////////////////
+
+		//メンバ変数の型であるクラスの名前を取得
+		char ClassName[VN_SIZE];
+		BOOL bArray;
+		if(!GetClassNameFromClassMember(pBuf,i,VarName,ClassName,&bArray)) return 0;
+
+		//TypeDef宣言を考慮してオリジナルなクラス名を取得
+		GetOriginalClassName(ClassName);
+
+		if(!CheckReferType(ClassName,bArray,array,RefType)) return 0;
+
+		//ユーザーのソースコードをサーチ
+		bRet=GetClassMemberFunctionParameter(pUserSource,ClassName,NestMember,Parameter);
+		if(!bRet){
+			//失敗したときはbasic.sbpをサーチ
+			bRet=GetClassMemberFunctionParameter(pHeaderBuf,ClassName,NestMember,Parameter);
+		}
+		return bRet;
+	}
+
+
+	////////////////////////
+	// メンバ情報を取得
+	////////////////////////
+	DWORD dwProc;
+
+	if(memicmp(pBuf+i,"Inherits",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')){
+		i+=9;
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+		////////////////////////
+		// 継承先クラスをサーチ
+		////////////////////////
+
+		for(i2=0;;i++,i2++){
+			if(!IsVariableChar(pBuf[i])){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=pBuf[i];
+		}
+
+		//ユーザーのソースコードをサーチ
+		bRet=GetClassMemberFunctionParameter(pUserSource,temporary,nest,Parameter);
+		if(!bRet){
+			//失敗したときはbasic.sbpをサーチ
+			bRet=GetClassMemberFunctionParameter(pHeaderBuf,temporary,nest,Parameter);
+		}
+		if(bRet) return 1;
+	}
+
+	//メンバ変数、関数を取得
+	while(1){
+		if(pBuf[i]=='\0') break;
+		if(memicmp(pBuf+i,"End",3)==0){
+			/*	End Class
+				End Interface
+				End Type
+				の検出 */
+			i2=i+3;
+			while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+
+			if(memicmp(pBuf+i2,"Class",5)==0&&(!IsVariableChar(pBuf[i2+5]))||
+				memicmp(pBuf+i2,"Interface",9)==0&&(!IsVariableChar(pBuf[i2+9]))||
+				memicmp(pBuf+i2,"Type",4)==0&&(!IsVariableChar(pBuf[i2+4]))) break;
+		}
+
+		if(memicmp(pBuf+i,"Abstract",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Virtual",7)==0&&(pBuf[i+7]==' '||pBuf[i+7]=='\t')||
+			memicmp(pBuf+i,"Override",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')){
+			//メンバ関数のとき
+			if(pBuf[i]=='a'||pBuf[i]=='A'){
+				i+=9;
+				dwProc=ESC_ABSTRACT;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')) i+=9;
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')) i+=4;
+			}
+			else if(pBuf[i]=='v'||pBuf[i]=='V'){
+				i+=8;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')){
+					i+=9;
+					dwProc=ESC_FUNCTION;
+				}
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')){
+					i+=4;
+					dwProc=ESC_SUB;
+				}
+			}
+			else if(pBuf[i]=='o'||pBuf[i]=='O'){
+				i+=9;
+
+				while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				if(memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')){
+					i+=9;
+					dwProc=ESC_FUNCTION;
+				}
+				else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')){
+					i+=4;
+					dwProc=ESC_SUB;
+				}
+			}
+			else if(pBuf[i]=='f'||pBuf[i]=='F'){
+				i+=9;
+				dwProc=ESC_FUNCTION;
+			}
+			else if(pBuf[i]=='s'||pBuf[i]=='S'){
+				i+=4;
+				dwProc=ESC_SUB;
+			}
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		}
+		else{
+			//メンバ変数のとき
+			dwProc=0;
+		}
+
+		if(dwProc){
+			//変数名または関数名を取得
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(pBuf[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=pBuf[i];
+			}
+
+			if(lstrcmp(temporary,nest)==0){
+				//ターゲットとなるメンバ関数が見つかったとき
+				for(;;i++){
+					if(pBuf[i]=='(') break;
+					if(IsCommandDelimitation(pBuf,i)) return 0;
+				}
+
+				lstrcpy(Parameter,nest);
+				i2=lstrlen(Parameter);
+				for(;;i++,i2++){
+					if(IsCommandDelimitation(pBuf,i)){
+						Parameter[i2]=0;
+						break;
+					}
+					Parameter[i2]=pBuf[i];
+				}
+
+				if(!CheckGrammar(Parameter)) return 0;
+
+				return 1;
+			}
+		}
+
+		//次の行をサーチ
+		for(;;i++){
+			if(pBuf[i]=='\0') break;
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				i+=i2;
+				break;
+			}
+		}
+		JumpBlank(pBuf,&i);
+
+		if((dwProc==ESC_SUB||dwProc==ESC_FUNCTION)&&dwClassType!=ESC_INTERFACE){
+			//End Sub、End Functionまでジャンプする
+
+			while(1){
+				if(pBuf[i]=='\0'){
+					i2=0;
+					break;
+				}
+
+				if(memicmp(pBuf+i,"End",3)==0){
+					/*	End Sub
+						End Function
+						の検出 */
+					i+=3;
+					while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+					if(memicmp(pBuf+i,"Sub",3)==0&&(!IsVariableChar(pBuf[i+3]))||
+						memicmp(pBuf+i,"Function",8)==0&&(!IsVariableChar(pBuf[i+8]))){
+						i2=1;
+						break;
+					}
+
+					if(memicmp(pBuf+i,"Class",5)==0&&(!IsVariableChar(pBuf[i+5]))||
+						memicmp(pBuf+i,"Interface",9)==0&&(!IsVariableChar(pBuf[i+9]))||
+						memicmp(pBuf+i,"Type",4)==0&&(!IsVariableChar(pBuf[i+4]))){
+						i2=0;
+						break;
+					}
+				}
+
+				//次の行をサーチ
+				for(;;i++){
+					if(pBuf[i]=='\0') break;
+					i2=IsCommandDelimitation(pBuf,i);
+					if(i2){
+						i+=i2;
+						break;
+					}
+				}
+				JumpBlank(pBuf,&i);
+			}
+
+			if(i2==0){
+				//コード解析が不正に終了
+				return 1;
+			}
+
+			//次の行をサーチ
+			for(;;i++){
+				if(pBuf[i]=='\0') break;
+				i2=IsCommandDelimitation(pBuf,i);
+				if(i2){
+					i+=i2;
+					break;
+				}
+			}
+			JumpBlank(pBuf,&i);
+		}
+	}
+
+	return 0;
+}
+BOOL GetParameterString(char *pEditBuf,int iPos,char *FuncName,char *Parameter){
+	extern char *pHeaderBuf;
+	extern char *pUserSource;
+	BOOL bRet;
+
+	//ユーザーソースコードを取得
+	if(pUserSource==0)
+		pUserSource=GetUserSourceCode();
+
+
+	//クラス、配列の構成要素を解析する
+	char VarName[VN_SIZE];		//変数名
+	char array[VN_SIZE];		//第1次配列
+	char lpPtrOffset[VN_SIZE];	//第2次配列
+	char NestMember[VN_SIZE];	//入れ子メンバ
+	int RefType;				//"."参照のときは0、"->"参照のときは1
+	lstrcpy(VarName,FuncName);
+	if(!GetVarFormatString(VarName,array,lpPtrOffset,NestMember,&RefType)) return 0;
+
+	if(RefType==0){
+		// キャレット位置のコード領域を判定（クラス/ローカル/グローバル）
+		int iProcPos;
+		char NowClass[VN_SIZE];
+		GetCodeAreaType(pEditBuf,iPos,&iProcPos,NowClass);
+
+		if(NowClass[0]&&iProcPos!=-1){
+			//クラスメンバ関数領域
+			bRet=GetClassMemberFunctionParameter(pUserSource,NowClass,FuncName,Parameter);
+			if(!bRet){
+				bRet=GetClassMemberFunctionParameter(pHeaderBuf,NowClass,FuncName,Parameter);
+			}
+
+			if(bRet) return 1;
+		}
+
+		//通常関数
+		bRet=GetDefualtFunctionParameter(pUserSource,FuncName,Parameter);
+		if(!bRet){
+			bRet=GetDefualtFunctionParameter(pHeaderBuf,FuncName,Parameter);
+		}
+	}
+	else{
+		//メンバ関数
+		char ClassName[VN_SIZE];
+		BOOL bArray;
+
+		//オブジェクトのクラス名を取得
+		if(!GetVariableClassName(pEditBuf,iPos,VarName,ClassName,&bArray)) return 0;
+
+		//TypeDef宣言を考慮してオリジナルなクラス名を取得
+		GetOriginalClassName(ClassName);
+
+		if(!CheckReferType(ClassName,bArray,array,RefType)) return 0;
+
+		bRet=GetClassMemberFunctionParameter(pUserSource,ClassName,NestMember,Parameter);
+		if(!bRet){
+			bRet=GetClassMemberFunctionParameter(pHeaderBuf,ClassName,NestMember,Parameter);
+		}
+	}
+
+	DeleteComment(Parameter);
+
+	return bRet;
+}
+
+void ShowParameterHint(int WndNum){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern METHODCHECKINFO MethodCheckInfo;
+	int i,i2,i3,IsStr,IsComment,PareNum,iPos;
+	char *pBuf;
+	char temp2[8192];
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	//キャレットが示すバッファインデックスを取得
+	iPos=GetBufferIndexFromCaretPos(
+		pBuf,
+		MdiInfo[WndNum].pmti->StartCaretPos.x,
+		MdiInfo[WndNum].pmti->StartCaretPos.y);
+
+	static int Before_StartCaretY;
+	BOOL Before_StartCaretSwitch=0;
+	if(MdiInfo[WndNum].pmti->StartCaretPos.y!=Before_StartCaretY){
+		Before_StartCaretY=MdiInfo[WndNum].pmti->StartCaretPos.y;
+		Before_StartCaretSwitch=1;
+	}
+
+	if(!MethodCheckInfo.hWnd){
+		////////////////////////////////////////////////
+		// 新規の場合は選択されている行の先頭位置を取得
+		////////////////////////////////////////////////
+
+		for(i=iPos;i>0;i--){
+			if(pBuf[i-1]=='\r'&&pBuf[i]=='\n'){
+				i++;
+				break;
+			}
+		}
+		MethodCheckInfo.HeadPos=i;
+
+		//注釈中かどうかを判定
+		for(i2=0,IsStr=0,IsComment=0;i2<MethodCheckInfo.HeadPos;i2++){
+			if(pBuf[i2]=='\"'){
+				i3=i2;
+				IsStr^=1;
+			}
+
+			//注釈（複数行）
+			if(pBuf[i2]=='/'&&pBuf[i2+1]=='*'&&IsStr==0&&IsComment==0){
+				i2+=2;
+				while(!(pBuf[i2]=='*'&&pBuf[i2+1]=='/')){
+					if(pBuf[i2]=='\0'){
+						i2--;
+						break;
+					}
+					i2++;
+					if(i2>=MethodCheckInfo.HeadPos) break;
+				}
+				if(i2>=MethodCheckInfo.HeadPos){
+					IsComment=1;
+					break;
+				}
+				continue;
+			}
+
+			//注釈（単行）
+			if(pBuf[i2]=='\''&&IsStr==0){
+				while(!(pBuf[i2]=='\r'&&pBuf[i2+1]=='\n')){
+					if(pBuf[i2]=='\0'){
+						i2--;
+						break;
+					}
+					i2++;
+					if(i2>=MethodCheckInfo.HeadPos) break;
+				}
+				if(i2>=MethodCheckInfo.HeadPos){
+					IsComment=1;
+					break;
+				}
+				continue;
+			}
+
+			if(pBuf[i2]=='\r'&&pBuf[i2+1]=='\n'){
+				IsComment=0;
+				IsStr=0;
+			}
+		}
+
+		if(IsComment){
+			//注釈文の位置のときは抜け出す
+			return;
+		}
+	}
+	else{
+		/*既存のパラメータヒントが存在し、
+			以前の先頭位置よりも手前にカーソルが移動されたときは破棄する*/
+		if(iPos<=MethodCheckInfo.HeadPos){
+			DestroyWindow(MethodCheckInfo.hWnd);
+			MethodCheckInfo.hWnd=0;
+		}
+	}
+
+
+	////////////////////////////////////////
+	// ダブルクォートの中かどうかを判別する
+	////////////////////////////////////////
+
+	IsStr=0;
+	IsComment=0;
+	PareNum=0;
+	for(i2=MethodCheckInfo.HeadPos;i2<iPos;i2++){
+		if(pBuf[i2]=='\"'){
+			i3=i2;
+			IsStr^=1;
+		}
+
+		if(pBuf[i2]=='('&&IsStr==0&&IsComment==0) PareNum++;
+		if(pBuf[i2]==')'&&IsStr==0&&IsComment==0) PareNum--;
+
+		//注釈（複数行）
+		if(pBuf[i2]=='/'&&pBuf[i2+1]=='*'&&IsStr==0&&IsComment==0){
+			i2+=2;
+			while(!(pBuf[i2]=='*'&&pBuf[i2+1]=='/')){
+				if(pBuf[i2]=='\0'){
+					i2--;
+					break;
+				}
+				i2++;
+				if(i2>=iPos) break;
+			}
+			if(i2>=iPos){
+				IsComment=1;
+				break;
+			}
+			continue;
+		}
+
+		//注釈（単行）
+		if(pBuf[i2]=='\''&&IsStr==0){
+			while(!(pBuf[i2]=='\r'&&pBuf[i2+1]=='\n')){
+				if(pBuf[i2]=='\0'){
+					i2--;
+					break;
+				}
+				i2++;
+				if(i2>=iPos) break;
+			}
+			if(i2>=iPos){
+				IsComment=1;
+				break;
+			}
+			continue;
+		}
+
+		if(pBuf[i2]=='\r'&&pBuf[i2+1]=='\n'){
+			if(PareNum==0){
+				//複数行にパラメータ記述がなされないとき
+				DestroyWindow(MethodCheckInfo.hWnd);
+				MethodCheckInfo.hWnd=0;
+				return;
+			}
+			IsComment=0;
+			IsStr=0;
+		}
+
+	}
+	if(IsStr){
+		if(!MethodCheckInfo.hWnd){
+			return;
+		}
+		i=i3-1;
+	}
+	else i=iPos-1;
+
+
+	for(PareNum=0;i>=MethodCheckInfo.HeadPos;i--){
+		if(pBuf[i]=='\"'){
+			i--;
+			while(pBuf[i]!='\"'){
+				i--;
+				if(i<MethodCheckInfo.HeadPos) break;
+			}
+			if(i<MethodCheckInfo.HeadPos) break;
+			continue;
+		}
+
+		//文の第一パラメータ時に表示する（すでに表示されている場合は無関係）
+		if((!MethodCheckInfo.hWnd)&&pBuf[i]==',') break;
+
+		if(pBuf[i]==')') PareNum--;
+		if(pBuf[i]=='('){
+			PareNum++;
+			if(PareNum>0){
+				i3=i+1;
+				i--;
+				while(pBuf[i]==' '||pBuf[i]=='\t') i--;
+				for(i2=0;i>=0;i--,i2++){
+					if(!IsVariableChar(pBuf[i])){
+						if(pBuf[i-1]=='-'&&pBuf[i]=='>'){
+							// "->" を含ませる
+							i--;
+							i2++;
+							continue;
+						}
+						break;
+					}
+				}
+				i++;
+				memcpy(temp2,pBuf+i,i2);
+				temp2[i2]=0;
+				if(i3<=iPos){
+					for(i2=0,IsStr=0,PareNum=0;i3<iPos;i3++){
+						if(pBuf[i3]=='\"') IsStr^=1;
+						if(pBuf[i3]=='('&&IsStr==0) PareNum++;
+						if(pBuf[i3]==')'&&IsStr==0){
+							PareNum--;
+							if(PareNum<0) break;
+						}
+						if(pBuf[i3]==','&&IsStr==0&&PareNum==0) i2++;
+					}
+					if(PareNum<0) i2=0x7FFFFFFF;
+				}
+				else i2=0x7FFFFFFF;
+
+				if(temp2[0]==0){
+					PareNum=0;
+					iPos=i;
+					continue;
+				}
+
+				if(lstrcmp(MethodCheckInfo.BeforeMethodName,temp2)!=0){
+					//新規の場合はパラメータ文字列を取得
+					if(!GetParameterString(pBuf,iPos,temp2,MethodCheckInfo.msg)){
+						PareNum=0;
+						iPos=i;
+						continue;
+					}
+				}
+				else if(MethodCheckInfo.ParmNum==i2&&Before_StartCaretSwitch==0){
+					//表示中のパラメータヒントに変更がないとき
+					//※行移動が行われた場合を除く
+					break;
+				}
+
+				//第何パラメータを太字にするかを示す
+				MethodCheckInfo.ParmNum=i2;
+
+				//パラメータヒントを表示
+				ShowCommandMessage();
+
+				lstrcpy(MethodCheckInfo.BeforeMethodName,temp2);
+				break;
+			}
+		}
+		if(i==MethodCheckInfo.HeadPos){
+
+			//行番号を飛び越す
+			while(pBuf[i]>='0'&&pBuf[i]<='9') i++;
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(pBuf[i])){
+					temp2[i2]=0;
+					break;
+				}
+				temp2[i2]=pBuf[i];
+			}
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+			if(pBuf[i]=='(') i++;
+			if(i<=iPos){
+				for(i2=0,IsStr=0,PareNum=0;i<iPos;i++){
+					if(pBuf[i]=='\"') IsStr^=1;
+					if(pBuf[i]=='('&&IsStr==0) PareNum++;
+					if(pBuf[i]==')'&&IsStr==0){
+						PareNum--;
+						if(PareNum<0) break;
+					}
+					if(pBuf[i]==','&&IsStr==0&&PareNum==0) i2++;
+				}
+				if(PareNum<0) temp2[0]=0;
+			}
+			else i2=0x7FFFFFFF;
+			if(SetCommandMessageToMethodCheck(temp2)){
+				//第何パラメータを太字にするかを示す
+				MethodCheckInfo.ParmNum=i2;
+
+				//パラメータヒントを表示
+				ShowCommandMessage();
+
+				lstrcpy(MethodCheckInfo.BeforeMethodName,temp2);
+			}
+			else{
+				if(MethodCheckInfo.hWnd){
+					UpdateWindow(MdiInfo[WndNum].pmti->hEdit);	//ちらつき防止
+
+					DestroyWindow(MethodCheckInfo.hWnd);
+					MethodCheckInfo.hWnd=0;
+				}
+			}
+			break;
+		}
+	}
+
+	extern char *pUserSource;
+	if(pUserSource){
+		HeapDefaultFree(pUserSource);
+		pUserSource=0;
+	}
+}
+
+
+//////////////////////////////////////
+// パラメータヒントのインターフェイス
+//////////////////////////////////////
+
+int DrawParam_StartScreenPosX;
+int DrawParam_PosY;
+int DrawParam_TextHeight;
+int DrawParam_MaxX;
+void TextOut_ToParmHint(HDC hdc,HFONT hFont,char *buffer,SIZE *pSize){
+	int i,i2;
+	HFONT hOldFont;
+
+	i=lstrlen(buffer);
+	hOldFont=(HFONT)SelectObject(hdc,hFont);
+
+	i2=pSize->cx;
+	GetTextExtentPoint32(hdc,buffer,i,pSize);
+	if(DrawParam_StartScreenPosX+i2+pSize->cx >= ScreenX){
+		DrawParam_PosY+=DrawParam_TextHeight;
+		i2=10;
+	}
+	TextOut(hdc,i2,DrawParam_PosY,buffer,i);
+	pSize->cx+=i2;
+
+	if(DrawParam_MaxX<pSize->cx) DrawParam_MaxX=pSize->cx;
+
+	SelectObject(hdc,hOldFont);
+}
+void DrawParameterHint(HDC hdc,SIZE *pSize){
+	extern METHODCHECKINFO MethodCheckInfo;
+	int i,i2,i3,counter;
+	char temporary[8192];
+	HFONT hOldFont;
+
+	SetBkMode(hdc,TRANSPARENT);
+
+	DrawParam_PosY=2;
+
+	//命令語、関数の識別名
+	for(i=0;;i++){
+		temporary[i]=MethodCheckInfo.msg[i];
+		if(MethodCheckInfo.msg[i]=='\0') break;
+		if(MethodCheckInfo.msg[i]==' '||MethodCheckInfo.msg[i]=='('){
+			i++;
+			temporary[i]=0;
+			break;
+		}
+	}
+	hOldFont=(HFONT)SelectObject(hdc,MethodCheckInfo.hFont);
+	TextOut(hdc,2,2,temporary,lstrlen(temporary));
+	GetTextExtentPoint32(hdc,temporary,lstrlen(temporary),pSize);
+	SelectObject(hdc,hOldFont);
+	pSize->cx+=2;
+	DrawParam_TextHeight=pSize->cy;
+
+	DrawParam_MaxX=pSize->cx;
+
+	for(i2=0,counter=0;;i++,i2++){
+		if(MethodCheckInfo.msg[i]=='('){
+			i3=GetStringInPare(temporary+i2,MethodCheckInfo.msg+i);
+			i+=i3-1;
+			i2+=i3-1;
+		}
+		if(MethodCheckInfo.msg[i]==','||
+			MethodCheckInfo.msg[i]==')'||
+			MethodCheckInfo.msg[i]=='\0'){
+			temporary[i2]=0;
+			if(MethodCheckInfo.ParmNum==counter){
+				//太字フォントパラメータ
+				TextOut_ToParmHint(hdc,MethodCheckInfo.hBoldFont,temporary,pSize);
+			}
+			else{
+				//通常フォントパラメータ
+				TextOut_ToParmHint(hdc,MethodCheckInfo.hFont,temporary,pSize);
+			}
+			counter++;
+
+			if(MethodCheckInfo.msg[i]==','){
+				temporary[0]=',';
+				temporary[1]=' ';
+				temporary[2]=0;
+
+				TextOut_ToParmHint(hdc,MethodCheckInfo.hFont,temporary,pSize);
+
+				i++;
+				while(MethodCheckInfo.msg[i]==' '||MethodCheckInfo.msg[i]=='\t') i++;
+				i--;
+			}
+			else if(MethodCheckInfo.msg[i]==')'){
+				lstrcpy(temporary,MethodCheckInfo.msg+i);
+
+				TextOut_ToParmHint(hdc,MethodCheckInfo.hFont,temporary,pSize);
+
+				break;
+			}
+			else if(MethodCheckInfo.msg[i]=='\0') break;
+
+			i2=-1;
+			continue;
+		}
+		temporary[i2]=MethodCheckInfo.msg[i];
+	}
+
+	pSize->cx=DrawParam_MaxX+20;
+	pSize->cy=DrawParam_PosY+DrawParam_TextHeight+2;
+}
+void ShowHelp_FromParamHint(void){
+	extern METHODCHECKINFO MethodCheckInfo;
+	int i;
+	char temporary[MAX_PATH],temp2[255];
+	HH_AKLINK ak;
+
+	for(i=0;;i++){
+		if(MethodCheckInfo.msg[i]=='('||MethodCheckInfo.msg[i]==' '||
+			MethodCheckInfo.msg[i]=='\0'){
+			temp2[i]=0;
+			break;
+		}
+		temp2[i]=MethodCheckInfo.msg[i];
+	}
+
+	memset(&ak, 0, sizeof(HH_AKLINK));
+	ak.cbStruct = sizeof(HH_AKLINK);
+	ak.pszKeywords = temp2;
+	ak.fIndexOnFail=1;
+
+	sprintf(temporary,"%sBasicHelp.chm",pj_editor_Dir);
+	HtmlHelp(NULL,temporary,HH_KEYWORD_LOOKUP,(DWORD)&ak);
+}
+LRESULT CALLBACK MethodCheckWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern METHODCHECKINFO MethodCheckInfo;
+	HDC hdc;
+	HPEN hOldPen;
+	HBRUSH hBrush,hOldBrush;
+	PAINTSTRUCT ps;
+	SIZE size;
+	RECT rect;
+	POINT pos;
+
+	switch(message){
+		case WM_CREATE:
+			GetCaretPos(&pos);
+			ClientToScreen(GetWindow(hClient,GW_CHILD),&pos);
+			DrawParam_StartScreenPosX=pos.x;
+
+			SetTimer(hwnd,1,50,0);
+			return 0;
+		case WM_PAINT:
+			hdc=BeginPaint(hwnd,&ps);
+
+			//枠を描画
+			GetClientRect(hwnd,&rect);
+			hBrush=CreateSolidBrush(RGB(255,255,180));
+			hOldPen=(HPEN)SelectObject(hdc,GetStockObject(BLACK_PEN));
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+			Rectangle(hdc,0,0,rect.right,rect.bottom);
+			SelectObject(hdc,hOldPen);
+			SelectObject(hdc,hOldBrush);
+			DeleteObject(hBrush);
+
+			//パラメータヒントを描画
+			DrawParameterHint(hdc,&size);
+
+			//[?]マークを描画
+			HBITMAP hBmp,hOldBmp;
+			HDC memdc;
+			hBmp=(HBITMAP)LoadImage(hResInst,MAKEINTRESOURCE(IDB_PARAMHINT_QUESTION),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE);
+			memdc=CreateCompatibleDC(hdc);
+			hOldBmp=(HBITMAP)SelectObject(memdc,hBmp);
+			GetClientRect(hwnd,&rect);
+			BitBlt(hdc,rect.right-14,rect.bottom-14,13,13,memdc,0,0,SRCCOPY);
+			SelectObject(memdc,hOldBmp);
+			DeleteDC(memdc);
+			DeleteObject(hBmp);
+
+			EndPaint(hwnd,&ps);
+			return 0;
+		case WM_TIMER:
+			//[?]マークを描画
+			static BOOL bOnMouse;
+			GetClientRect(hwnd,&rect);
+			GetCursorPos(&pos);
+			ScreenToClient(hwnd,&pos);
+			if(rect.right-14<=pos.x&&pos.x<=rect.right-1&&
+				rect.bottom-14<=pos.y&&pos.y<=rect.bottom-1){
+				if(bOnMouse) return 0;
+
+				hdc=GetDC(hwnd);
+
+				hBmp=(HBITMAP)LoadImage(hResInst,MAKEINTRESOURCE(IDB_PARAMHINT_QUESTION2),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE);
+				memdc=CreateCompatibleDC(hdc);
+				hOldBmp=(HBITMAP)SelectObject(memdc,hBmp);
+				GetClientRect(hwnd,&rect);
+				BitBlt(hdc,rect.right-14,rect.bottom-14,13,13,memdc,0,0,SRCCOPY);
+				SelectObject(memdc,hOldBmp);
+				DeleteDC(memdc);
+				DeleteObject(hBmp);
+
+				ReleaseDC(hwnd,hdc);
+
+				bOnMouse=1;
+			}
+			else{
+				if(!bOnMouse) return 0;
+
+				hdc=GetDC(hwnd);
+
+				hBmp=(HBITMAP)LoadImage(hResInst,MAKEINTRESOURCE(IDB_PARAMHINT_QUESTION),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE);
+				memdc=CreateCompatibleDC(hdc);
+				hOldBmp=(HBITMAP)SelectObject(memdc,hBmp);
+				GetClientRect(hwnd,&rect);
+				BitBlt(hdc,rect.right-14,rect.bottom-14,13,13,memdc,0,0,SRCCOPY);
+				SelectObject(memdc,hOldBmp);
+				DeleteDC(memdc);
+				DeleteObject(hBmp);
+
+				ReleaseDC(hwnd,hdc);
+				bOnMouse=0;
+			}
+			return 0;
+		case WM_ACTIVATE:
+			if(LOWORD(wParam)==WA_ACTIVE||LOWORD(wParam)==WA_CLICKACTIVE){
+				SetFocus(GetWindow(hClient,GW_CHILD));
+
+				if(LOWORD(wParam)==WA_CLICKACTIVE){
+					GetClientRect(hwnd,&rect);
+					GetCursorPos(&pos);
+					ScreenToClient(hwnd,&pos);
+					if(rect.right-14<=pos.x&&pos.x<=rect.right-1&&
+						rect.bottom-14<=pos.y&&pos.y<=rect.bottom-1){
+						ShowHelp_FromParamHint();
+					}
+				}
+			}
+			return 0;
+		case WM_DESTROY:
+			MethodCheckInfo.BeforeMethodName[0]=0;
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+void ShowCommandMessage(void){
+	extern METHODCHECKINFO MethodCheckInfo;
+	int i;
+	int sw;
+
+	if(pobj_nv->dwParameterHint==1){
+		//ポップアップ表示
+
+		extern HINSTANCE hInst;
+		extern METHODCHECKINFO MethodCheckInfo;
+		extern MDIINFO MdiInfo[MAX_WNDNUM];
+		HDC hdc,memdc;
+		RECT rect,rc2;
+		SIZE size;
+		POINT pos;
+		if(!MethodCheckInfo.hWnd){
+			MethodCheckInfo.hWnd=CreateWindow("MethodCheckWindow",NULL,WS_POPUP,
+				0,0,0,0,
+				hOwner,NULL,hInst,0);
+			sw=1;
+		}
+		else sw=0;
+		i=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+		hdc=GetDC(MethodCheckInfo.hWnd);
+		memdc=CreateCompatibleDC(hdc);
+		DrawParameterHint(memdc,&size);
+		DeleteDC(memdc);
+		ReleaseDC(MethodCheckInfo.hWnd,hdc);
+
+		GetWindowRect(MdiInfo[i].hwnd,&rect);
+		GetCaretPos(&pos);
+		ClientToScreen(MdiInfo[i].pmti->hEdit,&pos);
+		rect.left=pos.x-20;
+		rect.top=pos.y-pobj_nv->lf.lfHeight;
+		if(sw){
+			MoveWindow(MethodCheckInfo.hWnd,rect.left,rect.top,size.cx,size.cy,1);
+			ShowWindow(MethodCheckInfo.hWnd,SW_SHOWNOACTIVATE);
+		}
+		else{
+			GetWindowRect(MethodCheckInfo.hWnd,&rc2);
+
+			MoveWindow(MethodCheckInfo.hWnd,
+				rc2.left,
+				rect.top,
+				size.cx,
+				size.cy,
+				1);
+
+			InvalidateRect(MethodCheckInfo.hWnd,NULL,0);
+		}
+	}
+
+	//ステータスバーに表示
+	else if(pobj_nv->dwParameterHint==2)
+		SetStatusText(MethodCheckInfo.msg);
+}
Index: /ProjectEditor/Print.cpp
===================================================================
--- /ProjectEditor/Print.cpp	(revision 3)
+++ /ProjectEditor/Print.cpp	(revision 3)
@@ -0,0 +1,560 @@
+#include "common.h"
+
+
+int iPreviewNowPage;
+int iZoomNowPage;
+
+#define ZOOM_NUM 8
+#define ZOOM_INIT 4
+int array_Zoom[ZOOM_NUM]={
+	500,
+	200,
+	150,
+	100,
+	75,
+	50,
+	25,
+	10
+};
+
+
+CPage obj_Page;
+
+CPage::CPage(){
+	memset(&psd, 0, sizeof(PAGESETUPDLG));
+	psd.lStructSize = sizeof(PAGESETUPDLG);
+	psd.hwndOwner = hOwner;
+	psd.Flags = PSD_MARGINS |PSD_INHUNDREDTHSOFMILLIMETERS|PSD_DISABLEORIENTATION;
+	psd.rtMargin.left=2500;
+	psd.rtMargin.top=2500;
+	psd.rtMargin.right=2500;
+	psd.rtMargin.bottom=2500;
+	psd.ptPaperSize.x=21000;
+	psd.ptPaperSize.y=29700;
+}
+CPage::~CPage(){
+}
+
+BOOL CPage::SetupDlg(void){
+	//ページ設定ダイアログ
+	return PageSetupDlg(&psd);
+}
+
+void DrawPage(HDC memdc,BOOL bPreview,BOOL *lpbLastPage=0){
+	RECT rc;
+
+	//ページの幅、高さ（単位は0.1ミリメートル）
+	int iPageWidth,iPageHeight;
+	iPageWidth=obj_Page.psd.ptPaperSize.x/10;
+	iPageHeight=obj_Page.psd.ptPaperSize.y/10;
+
+	//マッピングモードをセット
+	SetMapMode(memdc,MM_LOMETRIC);
+
+	POINT px_pos;
+	px_pos.x=iPageWidth;
+	px_pos.y=iPageHeight;
+	LPtoDP(memdc,&px_pos,1);
+	px_pos.y=-px_pos.y;
+
+	int WndNum;
+	WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+	//フォント生成
+	LOGFONT lf;
+	lf=pobj_nv->lfPrint;
+	lf.lfHeight=-MulDiv(pobj_nv->iPrintFontPointSize,GetDeviceCaps(memdc, LOGPIXELSY),960);
+	HFONT hFont;
+	hFont=CreateFontIndirect(&lf);
+
+	//フォントをセット
+	HFONT hOldFont;
+	hOldFont=(HFONT)SelectObject(memdc,hFont);
+
+	//マージン（単位は0.1ミリメートル）
+	RECT rcMargin;
+	rcMargin.left=obj_Page.psd.rtMargin.left/10;
+	rcMargin.top=obj_Page.psd.rtMargin.top/10;
+	rcMargin.right=obj_Page.psd.rtMargin.right/10;
+	rcMargin.bottom=obj_Page.psd.rtMargin.bottom/10;
+
+	//タブ文字数
+	DRAWTEXTPARAMS dtp;
+	dtp.cbSize=sizeof(DRAWTEXTPARAMS);
+	dtp.iLeftMargin=0;
+	dtp.iRightMargin=0;
+	dtp.iTabLength=pobj_nv->TabSize;
+	dtp.uiLengthDrawn=0;
+
+	char *temp;
+	temp=(char *)malloc(65535);
+
+	char *buffer;
+	buffer=MdiInfo[WndNum].pmti->buffer;
+	int i=0,i2=0,iPage=0;
+	for(i=0,i2=0;;i++,i2++){
+		if(buffer[i]=='\0'||buffer[i]=='\r'&&buffer[i+1]=='\n'){
+			temp[i2]=0;
+
+			memset(&rc,0,sizeof(RECT));
+			rc.right=iPageWidth-(rcMargin.left + rcMargin.right);
+			DrawTextEx(memdc,temp,-1,&rc,DT_CALCRECT | DT_WORDBREAK|DT_TABSTOP|DT_EXPANDTABS|DT_NOPREFIX,&dtp);
+
+			if(rc.bottom<=-(iPageHeight-(rcMargin.top+rcMargin.bottom)) || buffer[i]=='\0'){
+
+				if(rc.bottom<-(iPageHeight-(rcMargin.top+rcMargin.bottom))){
+					i--;i2--;
+					while(i>0 && (!(buffer[i]=='\r'&&buffer[i+1]=='\n'))){
+						i--;
+						i2--;
+					}
+					temp[i2]=0;
+				}
+
+				rc.left=rcMargin.left;
+				rc.right=iPageWidth-rcMargin.right;
+				rc.top=-rcMargin.top;
+				rc.bottom=-(iPageHeight-rcMargin.bottom);
+
+				char szTempPage[255],*temp2,temp3[255];
+				lstrcpy(temp3,pobj_nv->szPageStr);
+				temp2=strstr(temp3,"&n");
+				if(temp2){
+					temp2[0]='%';
+					temp2[1]='d';
+
+					sprintf(szTempPage,temp3,iPage+1);
+				}
+
+				if(bPreview&&iPage==iPreviewNowPage || bPreview==0){
+					if(bPreview==0) StartPage(memdc);
+
+					DrawTextEx(memdc,temp,-1,&rc,DT_LEFT | DT_WORDBREAK|DT_TABSTOP|DT_EXPANDTABS|DT_NOPREFIX,&dtp);
+
+					if(pobj_nv->bShowPageNum){
+						//ページ番号
+						rc.top=-(iPageHeight-rcMargin.bottom);
+						rc.bottom=-iPageHeight;
+						DrawText(memdc,szTempPage,-1,&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX);
+					}
+
+					if(bPreview==0) EndPage(memdc);
+
+					if(lpbLastPage){
+						if(buffer[i]=='\0'){
+							*lpbLastPage=1;
+						}
+						else *lpbLastPage=0;
+					}
+
+					if(bPreview) break;
+				}
+
+				if(buffer[i]=='\0') break;
+
+				iPage++;
+
+				i++;
+				i2=-1;
+				continue;
+			}
+		}
+		temp[i2]=buffer[i];
+	}
+
+	free(temp);
+
+	SelectObject(memdc,hOldFont);
+}
+
+void CreatePreviewDCAndBmp(HDC *lphDC,HBITMAP *lphBmp,POINT *lpPxPos,BOOL *lpbLastPage){
+
+	//印刷ダイアログ
+	PRINTDLG pd;
+	memset(&pd,0,sizeof(PRINTDLG));
+	pd.lStructSize=sizeof(PRINTDLG);
+	pd.hwndOwner=hOwner;
+	pd.Flags=PD_RETURNDC|PD_RETURNDEFAULT;
+	pd.nFromPage=1;
+	pd.nToPage=1;
+	pd.nMinPage=1;
+	pd.nMaxPage=1;
+	pd.nCopies=1;
+	if(PrintDlg(&pd)==0){
+		return;
+	}
+
+	HDC memdc;
+	memdc=CreateCompatibleDC(pd.hDC);
+
+	//ページの幅、高さ（単位は0.1ミリメートル）
+	int iPageWidth,iPageHeight;
+	iPageWidth=obj_Page.psd.ptPaperSize.x/10;
+	iPageHeight=obj_Page.psd.ptPaperSize.y/10;
+
+	//マッピングモードをセット
+	SetMapMode(memdc,MM_LOMETRIC);
+
+	POINT px_pos;
+	px_pos.x=iPageWidth;
+	px_pos.y=iPageHeight;
+	LPtoDP(memdc,&px_pos,1);
+	px_pos.y=-px_pos.y;
+
+	HBITMAP hMemBmp;
+	hMemBmp=CreateCompatibleBitmap(pd.hDC,px_pos.x,px_pos.y);
+	SelectObject(memdc,hMemBmp);
+
+	//背景を初期化
+	HBRUSH hOldBrush;
+	hOldBrush=(HBRUSH)SelectObject(memdc,GetStockObject(WHITE_BRUSH));
+	PatBlt(memdc,0,0,px_pos.x,-px_pos.y,PATCOPY);
+	SelectObject(memdc,hOldBrush);
+
+	//メモリへ描画
+	DrawPage(memdc,1,lpbLastPage);
+
+	DeleteDC(pd.hDC);
+
+
+	*lphDC=memdc;
+	*lphBmp=hMemBmp;
+	*lpPxPos=px_pos;
+}
+
+void DrawPreview(HWND hPreview,HDC hdc,HDC memdc,POINT *lpPxPos){
+	SetMapMode(memdc,MM_TEXT);
+
+	POINT px_pos;
+	px_pos=*lpPxPos;
+
+	SIZE size;
+	RECT rc;
+	GetClientRect(hPreview,&rc);
+	size.cy=(long)((double)rc.bottom*0.9);
+	size.cx=(long)((double)size.cy*((double)obj_Page.psd.ptPaperSize.x/(double)obj_Page.psd.ptPaperSize.y));
+
+	SIZE size_hori;
+	size_hori.cx=(long)((double)rc.right*0.9);
+	size_hori.cy=(long)((double)size_hori.cx*((double)obj_Page.psd.ptPaperSize.y/(double)obj_Page.psd.ptPaperSize.x));
+
+	if(size.cx>size_hori.cx) size=size_hori;
+	size.cx=px_pos.x;
+	size.cy=px_pos.y;
+
+
+	//////////////////////////////////
+	// スクロールバー情報を取得
+	//////////////////////////////////
+
+	//垂直
+	SCROLLINFO si_vert;
+	si_vert.cbSize=sizeof(SCROLLINFO);
+	si_vert.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
+	GetScrollInfo(hPreview,SB_VERT,&si_vert);
+
+	//水平
+	SCROLLINFO si_horz;
+	si_horz.cbSize=sizeof(SCROLLINFO);
+	si_horz.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
+	GetScrollInfo(hPreview,SB_HORZ,&si_horz);
+
+
+
+	//表示率
+	double dblZoomRatio;
+	dblZoomRatio=((double)array_Zoom[iZoomNowPage]/(double)100)*0.18;
+
+
+	///////////////////////////
+	// メモリへ描画
+	///////////////////////////
+
+	HDC memdc2;
+	memdc2=CreateCompatibleDC(hdc);
+
+	HBITMAP hMemBmp;
+	hMemBmp=CreateCompatibleBitmap(hdc,(int)((double)size.cx*dblZoomRatio)+40, (int)((double)size.cy*dblZoomRatio)+40);
+
+	SelectObject(memdc2,hMemBmp);
+	RECT rc2;
+	rc2.left=0;rc2.top=0;
+	rc2.right=(int)((double)size.cx*dblZoomRatio)+40;
+	rc2.bottom=(int)((double)size.cy*dblZoomRatio)+40;
+	FillRect(memdc2,&rc2,(HBRUSH)GetStockObject(GRAY_BRUSH));
+
+	SetStretchBltMode(memdc2,HALFTONE);
+	StretchBlt(memdc2,
+		20, 20,
+		(int)((double)size.cx*dblZoomRatio), (int)((double)size.cy*dblZoomRatio),
+		memdc,0,0,px_pos.x,px_pos.y,SRCCOPY);
+
+	//画面へ描画
+	BitBlt(hdc,-si_horz.nPos,-si_vert.nPos,rc2.right,rc2.bottom,
+		memdc2,0,0,SRCCOPY);
+
+	DeleteDC(memdc2);
+	DeleteObject(hMemBmp);
+
+
+	//////////////////////////////
+	// スクロールバーを設定
+	//////////////////////////////
+	GetClientRect(hPreview,&rc);
+
+	//垂直
+	si_vert.nMin=0;
+	si_vert.nMax=rc2.bottom;
+	si_vert.nPage=rc.bottom;
+	SetScrollInfo(hPreview,SB_VERT,&si_vert,1);
+
+	//水平
+	si_horz.nMin=0;
+	si_horz.nMax=rc2.right;
+	si_horz.nPage=rc.right;
+	SetScrollInfo(hPreview,SB_HORZ,&si_horz,1);
+}
+#define WM_RESETPREVIEW WM_USER+100
+LRESULT CALLBACK PreviewWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	static HDC memdc;
+	static HBITMAP hMemBmp;
+	static POINT px_pos;
+	SCROLLINFO si;
+	int i;
+	RECT rc;
+	switch(message){
+		case WM_CREATE:
+			memdc=0;
+			hMemBmp=0;
+			SendMessage(hwnd,WM_RESETPREVIEW,0,0);
+			return 0;
+		case WM_PAINT:
+			HDC hdc;
+			PAINTSTRUCT ps;
+			hdc=BeginPaint(hwnd,&ps);
+			DrawPreview(hwnd,hdc,memdc,&px_pos);
+			EndPaint(hwnd,&ps);
+			return 0;
+		case WM_RESETPREVIEW:
+			if(memdc) DeleteDC(memdc);
+			if(hMemBmp) DeleteObject(hMemBmp);
+			BOOL bLastPage;
+			CreatePreviewDCAndBmp(&memdc,&hMemBmp,&px_pos,&bLastPage);
+			InvalidateRect(hwnd,NULL,1);
+
+			if(iPreviewNowPage==0) EnableWindow(GetDlgItem(GetParent(hwnd),IDC_PREV),0);
+			else EnableWindow(GetDlgItem(GetParent(hwnd),IDC_PREV),1);
+			if(bLastPage) EnableWindow(GetDlgItem(GetParent(hwnd),IDC_NEXT),0);
+			else EnableWindow(GetDlgItem(GetParent(hwnd),IDC_NEXT),1);
+
+			if(iZoomNowPage<=0) EnableWindow(GetDlgItem(GetParent(hwnd),IDC_ZOOMIN),0);
+			else EnableWindow(GetDlgItem(GetParent(hwnd),IDC_ZOOMIN),1);
+			if(iZoomNowPage>=ZOOM_NUM-1)
+				EnableWindow(GetDlgItem(GetParent(hwnd),IDC_ZOOMOUT),0);
+			else EnableWindow(GetDlgItem(GetParent(hwnd),IDC_ZOOMOUT),1);
+			return 0;
+		case WM_VSCROLL:
+		case WM_HSCROLL:
+			int fnBar;
+			if(message==WM_VSCROLL) fnBar=SB_VERT;
+			else fnBar=SB_HORZ;
+
+			si.cbSize=sizeof(SCROLLINFO);
+			si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+
+			GetScrollInfo(hwnd,fnBar,&si);
+			if(LOWORD(wParam)==SB_LINEUP) i=-1;
+			else if(LOWORD(wParam)==SB_LINEDOWN) i=1;
+			else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)si.nPage;
+			else if(LOWORD(wParam)==SB_PAGEDOWN) i=si.nPage;
+			else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-si.nPos;
+			else i=0;
+			GetClientRect(hwnd,&rc);
+			if(message==WM_VSCROLL)
+				i=max(-si.nPos,min(i,si.nMax-rc.bottom-si.nPos));
+			else
+				i=max(-si.nPos,min(i,si.nMax-rc.right-si.nPos));
+			if(i!=0){
+				si.nPos+=i;
+				SetScrollInfo(hwnd,fnBar,&si,1);
+
+				InvalidateRect(hwnd,NULL,0);
+			}
+			return 0;
+		case WM_DESTROY:
+			DeleteDC(memdc);
+			DeleteObject(hMemBmp);
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+BOOL CALLBACK DlgPreview(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	static HWND hPreview;
+	char temporary[255];
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(GetDesktopWindow(),hwnd);
+
+			hPreview=CreateWindowEx(WS_EX_STATICEDGE,"PreviewWindow",NULL,
+				WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL,
+				0,0,0,0,
+				hwnd,0,hInst,0);
+
+			RECT rc;
+			GetClientRect(hwnd,&rc);
+			SetWindowPos(hwnd,NULL,0,0,rc.right,rc.bottom,SWP_NOMOVE);
+
+			iPreviewNowPage=0;
+
+			SetDlgItemText(hwnd,IDC_FONT,pobj_nv->lfPrint.lfFaceName);
+
+			//ページ番号を表示するかどうか
+			if(pobj_nv->bShowPageNum) SendDlgItemMessage(hwnd,IDC_SHOWPAGENUM,BM_SETCHECK,BST_CHECKED,0);
+			SendMessage(hwnd,WM_COMMAND,IDC_SHOWPAGENUM,0);
+
+			//ページ番号文字列
+			SetDlgItemText(hwnd,IDC_PAGESTR,pobj_nv->szPageStr);
+
+			//拡大・縮小アイコンを表示
+			SendDlgItemMessage(hwnd,IDC_ZOOMOUT,BM_SETIMAGE,IMAGE_ICON ,
+				(LPARAM)LoadImage(hResInst,MAKEINTRESOURCE(IDI_ZOOMOUT),IMAGE_ICON,16,16,LR_SHARED));
+			SendDlgItemMessage(hwnd,IDC_ZOOMIN,BM_SETIMAGE,IMAGE_ICON ,
+				(LPARAM)LoadImage(hResInst,MAKEINTRESOURCE(IDI_ZOOMIN),IMAGE_ICON,16,16,LR_SHARED));
+			iZoomNowPage=ZOOM_INIT;
+
+			sprintf(temporary,"%d%%",array_Zoom[iZoomNowPage]);
+			SetDlgItemText(hwnd,IDC_ZOOMRATIO,temporary);
+
+			SendMessage(hPreview,WM_RESETPREVIEW,0,0);
+
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+
+				case IDC_PREV:
+					iPreviewNowPage--;
+					SendMessage(hPreview,WM_RESETPREVIEW,0,0);
+					return 1;
+				case IDC_NEXT:
+					iPreviewNowPage++;
+					SendMessage(hPreview,WM_RESETPREVIEW,0,0);
+					return 1;
+
+				case IDC_ZOOMOUT:
+				case IDC_ZOOMIN:
+					if(LOWORD(wParam)==IDC_ZOOMOUT)
+						iZoomNowPage++;
+					if(LOWORD(wParam)==IDC_ZOOMIN)
+						iZoomNowPage--;
+					SendMessage(hPreview,WM_RESETPREVIEW,0,0);
+
+					sprintf(temporary,"%d%%",array_Zoom[iZoomNowPage]);
+					SetDlgItemText(hwnd,IDC_ZOOMRATIO,temporary);
+					return 1;
+
+				case IDC_PRINT:
+					Printout();
+					return 1;
+
+				case IDC_PAGESET:
+					if(obj_Page.SetupDlg()){
+						//再描画
+						SendMessage(hPreview,WM_RESETPREVIEW,0,0);
+					}
+					return 1;
+
+				case IDC_FONT:
+					int iPointSize;
+					LOGFONT temp_lf;
+					temp_lf=pobj_nv->lfPrint;
+					if(!SetFontDialog(hwnd,&temp_lf,0,&iPointSize)) return 1;
+					pobj_nv->lfPrint=temp_lf;
+					pobj_nv->iPrintFontPointSize=iPointSize;
+
+					SetDlgItemText(hwnd,IDC_FONT,pobj_nv->lfPrint.lfFaceName);
+
+					//再描画
+					SendMessage(hPreview,WM_RESETPREVIEW,0,0);
+					return 1;
+
+				case IDC_SHOWPAGENUM:
+					//ページ番号を表示するかどうか
+					if(SendDlgItemMessage(hwnd,IDC_SHOWPAGENUM,BM_GETCHECK,0,0)){
+						EnableWindow(GetDlgItem(hwnd,IDC_PAGESTR),1);
+						pobj_nv->bShowPageNum=1;
+					}
+					else{
+						EnableWindow(GetDlgItem(hwnd,IDC_PAGESTR),0);
+						pobj_nv->bShowPageNum=0;
+					}
+					SendMessage(hPreview,WM_RESETPREVIEW,0,0);
+					return 1;
+
+				case IDC_PAGESTR:
+					//ページ番号文字列
+					GetDlgItemText(hwnd,IDC_PAGESTR,pobj_nv->szPageStr,255);
+					return 1;
+			}
+			return 0;
+
+		case WM_SIZE:
+			MoveWindow(hPreview,
+				140,40,
+				LOWORD(lParam)-155,
+				HIWORD(lParam)-55,0);
+			InvalidateRect(hwnd,NULL,0);
+			return 0;
+
+		case WM_DESTROY:
+			DestroyWindow(hPreview);
+			return 0;
+	}
+	return 0;
+}
+
+void Preview(void){
+	DialogBox(hResInst,MAKEINTRESOURCE(IDD_PREVIEW),hOwner,DlgPreview);
+}
+
+
+void Printout(void){
+	int WndNum;
+	WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+	//印刷ダイアログ
+	PRINTDLG pd;
+	memset(&pd,0,sizeof(PRINTDLG));
+	pd.lStructSize=sizeof(PRINTDLG);
+	pd.hwndOwner=hOwner;
+	pd.Flags=PD_ALLPAGES | PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE | PD_NOSELECTION | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE;
+	pd.nFromPage=1;
+	pd.nToPage=1;
+	pd.nMinPage=1;
+	pd.nMaxPage=1;
+	pd.nCopies=1;
+	if(PrintDlg(&pd)==0){
+		return;
+	}
+
+	//印刷ドキュメントをスタート
+	DOCINFO di;
+	memset(&di,0,sizeof(DOCINFO));
+	di.cbSize=sizeof(DOCINFO);
+	di.lpszDocName=MdiInfo[WndNum].title;
+	if(StartDoc(pd.hDC,&di)==0){
+		MessageBox(hOwner,"印刷できません。プリンターの状況を確認してください。",APPLICATION_NAME,MB_OK | MB_ICONEXCLAMATION);
+		return;
+	}
+
+	//紙へ描画
+	DrawPage(pd.hDC,0);
+
+	//印刷ドキュメントを終了
+	EndDoc(pd.hDC);
+
+	DeleteDC(pd.hDC);
+}
Index: /ProjectEditor/ProjectControl.cpp
===================================================================
--- /ProjectEditor/ProjectControl.cpp	(revision 3)
+++ /ProjectEditor/ProjectControl.cpp	(revision 3)
@@ -0,0 +1,2429 @@
+#include "Common.h"
+
+#if defined(JPN)
+//日本語
+#include "pj_msg_jpn.h"
+#else
+//英語
+#include "pj_msg_eng.h"
+#endif
+
+HWND hProjectViewTab;
+HWND hProcedureTreeView,hMaterialTreeView;
+HIMAGELIST hProcedureTreeViewImageList,hMaterialTreeViewImageList;
+WNDPROC OldProcedureTreeViewProc,OldMaterialTreeViewProc;
+WNDPROC OldTabProc;
+
+LRESULT CALLBACK ProcedureTreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	if(message==WM_CHAR&&wParam==VK_RETURN){
+		SendMessage(hProjectViewTab,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
+		//デフォルトのメッセージ処理をするとビープ音がしてしまうので避ける
+		return 0;
+	}
+	else if(message==WM_LBUTTONDBLCLK){
+		SendMessage(hProjectViewTab,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
+		return 0;
+	}
+	return CallWindowProc(OldProcedureTreeViewProc,hwnd,message,wParam,lParam);
+}
+LRESULT CALLBACK MaterialTreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	if(message==WM_CHAR&&wParam==VK_RETURN){
+		SendMessage(hProjectViewTab,WM_COMMAND,IDM_MATERIALTREE_OPEN,0);
+		//デフォルトのメッセージ処理をするとビープ音がしてしまうので避ける
+		return 0;
+	}
+	if(message==WM_KEYDOWN&&wParam==VK_DELETE) SendMessage(hProjectViewTab,WM_COMMAND,IDM_MATERIALTREE_DELETE,0);
+	return CallWindowProc(OldMaterialTreeViewProc,hwnd,message,wParam,lParam);
+}
+LRESULT CALLBACK TabProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern LPSTR DefFileFilter;
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,WndNum;
+	char str[MAX_PATH],temporary[MAX_PATH];
+	HWND hTree,hChild;
+	HTREEITEM hTreeItem,hTreeItem2;
+	TV_HITTESTINFO tvHitTestInfo;
+	TVITEM tvItem;
+
+	switch(message){
+		case WM_CONTEXTMENU:
+			i=TabCtrl_GetCurSel(hwnd);
+			if(i==0){
+				//ファイルツリー
+				POINT pos;
+				pos.x=LOWORD(lParam);
+				pos.y=HIWORD(lParam);
+				pobj_FileTree->ContextMenu(&pos);
+				return 0;
+			}
+			else if(i==1) hTree=hProcedureTreeView;
+			else if(i==2) hTree=hMaterialTreeView;
+			tvHitTestInfo.pt.x=LOWORD(lParam);
+			tvHitTestInfo.pt.y=HIWORD(lParam);
+			ScreenToClient(hTree,&tvHitTestInfo.pt);
+			hTreeItem=TreeView_HitTest(hTree,&tvHitTestInfo);
+			if(hTreeItem){
+				TreeView_SelectItem(hTree,hTreeItem);
+				if(i==1){
+					extern HMENU hProcedureTreeMenuBase;
+					if(TreeView_GetRoot(hTree)!=hTreeItem)
+						TrackPopupMenu(GetSubMenu(hProcedureTreeMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+				}
+				else if(i==2){
+					extern HMENU hMaterialTreeMenuBase;
+					hTreeItem2=TreeView_GetRoot(hTree);
+					for(i2=0;;i2++){
+						if(hTreeItem2==hTreeItem) break;
+						hTreeItem2=TreeView_GetNextSibling(hTree,hTreeItem2);
+						if(!hTreeItem2) break;
+					}
+					if(hTreeItem2){
+						if(i2==0)
+							TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,0),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+						else if(i2==1)
+							TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,2),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+						else if(i2==2)
+							TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,4),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+						else if(i2==3)
+							TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,6),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+						else if(i2==4)
+							TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,8),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+					}
+					else{
+						hTreeItem=TreeView_GetNextItem(hTree,hTreeItem,TVGN_PARENT);
+						hTreeItem2=TreeView_GetRoot(hTree);
+						for(i2=0;;i2++){
+							if(hTreeItem2==hTreeItem) break;
+							hTreeItem2=TreeView_GetNextSibling(hTree,hTreeItem2);
+							if(!hTreeItem2) break;
+						}
+						if(hTreeItem2){
+							if(i2==0)
+								TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+							else if(i2==1)
+								TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,3),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+							else if(i2==2)
+								TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,5),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+							else if(i2==3)
+								TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,7),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+							else if(i2==4)
+								TrackPopupMenu(GetSubMenu(hMaterialTreeMenuBase,9),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+						}
+					}
+				}
+			}
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+
+				case IDM_PROCEDURETREE_SHOW:
+					extern BOOL bSearchingClasses;
+					if(bSearchingClasses){
+						pobj_ClassTreeView->bShowSwitch=1;
+						break;
+					}
+
+					hTreeItem=TreeView_GetSelection(hProcedureTreeView);
+					for(i=0;i<pobj_ClassTreeView->NumberOfProcedures;i++){
+						if(pobj_ClassTreeView->pProcInfo[i].hTreeItem==hTreeItem){
+							lstrcpy(temporary,
+								ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[pobj_ClassTreeView->pProcInfo[i].FileNum]->m_path);
+							GetFullPath(temporary,ProjectInfo.dir);
+							hChild=OpenFileWithExtension(temporary);
+
+							//プロシージャの行を選択する
+							//ResetScrollbarが再描画時に呼び出されるので、再描画する
+							WndNum=GetWndNum(hChild);
+							InvalidateRect(MdiInfo[WndNum].pmti->hEdit,NULL,0);
+							UpdateWindow(MdiInfo[WndNum].pmti->hEdit);
+							TextEdit_SelectOneLine(WndNum,pobj_ClassTreeView->pProcInfo[i].code_pos,TRUE);
+
+							//タイマーをセット
+							// ※フォーカスをエディタにセットするため
+							// ※タイミングを遅らせてSetFocusを実行する必要あり
+							SetTimer(hwnd,100,10,NULL);
+
+							break;
+						}
+					}
+					break;
+
+				case IDM_MATERIALTREE_INSERTCURSOR:
+					Project_CursorResInsert();
+					break;
+				case IDM_MATERIALTREE_INSERTBITMAP:
+					Project_BitmapResInsert();
+					break;
+				case IDM_MATERIALTREE_INSERTICON:
+					Project_IconResInsert();
+					break;
+				case IDM_MATERIALTREE_INSERTMENU:
+					Project_Menu_Insert();
+					break;
+				case IDM_MATERIALTREE_INSERTWINDOW:
+					Project_Window_Insert();
+					break;
+				case IDM_MATERIALTREE_OPEN:
+					hTreeItem=TreeView_GetSelection(hMaterialTreeView);
+					for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+						if(ProjectInfo.pWindowInfo[i].hTreeItem==hTreeItem){
+							NewRadWindow(i);
+							break;
+						}
+					}
+					for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+						if(ProjectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
+							NewMenuWindow(&ProjectInfo.pMenuInfo[i]);
+							break;
+						}
+					}
+					for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+						if(ProjectInfo.res.pIconResInfo[i].hTreeItem==hTreeItem){
+							lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
+							GetFullPath(temporary,ProjectInfo.dir);
+							NewIconEditWindow(temporary);
+							break;
+						}
+					}
+					break;
+				case IDM_MATERIALTREE_DELETE:
+					hTreeItem=TreeView_GetSelection(hMaterialTreeView);
+					for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
+						if(ProjectInfo.res.pCursorResInfo[i].hTreeItem==hTreeItem){
+
+							//"%s カーソルをプロジェクトから削除します。よろしいですか？"
+							sprintf(str,STRING_PJ_CHECK_DELETECURSOR,ProjectInfo.res.pCursorResInfo[i].IdName);
+							if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
+
+							Project_Cursor_Delete(i);
+							break;
+						}
+					}
+					for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
+						if(ProjectInfo.res.pBitmapResInfo[i].hTreeItem==hTreeItem){
+
+							//"%s ビットマップをプロジェクトから削除します。よろしいですか？"
+							sprintf(str,STRING_PJ_CHECK_DELETEBITMAP,ProjectInfo.res.pBitmapResInfo[i].IdName);
+							if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
+
+							Project_Bitmap_Delete(i);
+							break;
+						}
+					}
+					for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+						if(ProjectInfo.res.pIconResInfo[i].hTreeItem==hTreeItem){
+
+							//"%s アイコンをプロジェクトから削除します。よろしいですか？"
+							sprintf(str,STRING_PJ_CHECK_DELETEICON,ProjectInfo.res.pIconResInfo[i].IdName);
+							if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
+
+							Project_Icon_Delete(i);
+							break;
+						}
+					}
+					for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+						if(ProjectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
+
+							//"%s メニューをプロジェクトから削除します。よろしいですか？"
+							sprintf(str,STRING_PJ_CHECK_DELETEMENU,ProjectInfo.pMenuInfo[i].IdName);
+							if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
+
+							Project_Menu_Delete(i);
+							break;
+						}
+					}
+					for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+						if(ProjectInfo.pWindowInfo[i].hTreeItem==hTreeItem){
+
+							//"%s ウィンドウをプロジェクトから削除します。よろしいですか？"
+							sprintf(str,STRING_PJ_CHECK_DELETEWINDOW,ProjectInfo.pWindowInfo[i].name);
+							if(IDCANCEL==MessageBox(hOwner,str,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
+
+							Project_Window_Delete(i);
+							break;
+						}
+					}
+					break;
+				case IDM_MENUTREE_RENAMEID:
+					extern char NewIdName[MAX_PATH];
+					hTreeItem=TreeView_GetSelection(hMaterialTreeView);
+					for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
+						if(ProjectInfo.res.pCursorResInfo[i].hTreeItem==hTreeItem){
+							Project_Cursor_RenameID(i);
+							break;
+						}
+					}
+					for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
+						if(ProjectInfo.res.pBitmapResInfo[i].hTreeItem==hTreeItem){
+							Project_Bitmap_RenameID(i);
+							break;
+						}
+					}
+					for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+						if(ProjectInfo.res.pIconResInfo[i].hTreeItem==hTreeItem){
+							Project_Icon_RenameID(i);
+						}
+					}
+					for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+						if(ProjectInfo.pMenuInfo[i].hTreeItem==hTreeItem){
+							if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,DlgProject_MenuID_Input,(long)ProjectInfo.pMenuInfo[i].IdName)) break;
+
+							//重複チェック
+							for(i2=0;i2<ProjectInfo.NumberOfMenu;i2++){
+								if(i2==i) continue;
+								if(lstrcmp(NewIdName,ProjectInfo.pMenuInfo[i2].IdName)==0){
+									//"ID \"%s\" は既にプロジェクト内に存在します。"
+									sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
+									MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+									return 0;
+								}
+							}
+
+							HeapDefaultFree(ProjectInfo.pMenuInfo[i].IdName);
+							ProjectInfo.pMenuInfo[i].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
+							lstrcpy(ProjectInfo.pMenuInfo[i].IdName,NewIdName);
+
+							tvItem.hItem=hTreeItem;
+							tvItem.mask=TVIF_TEXT;
+							tvItem.pszText=ProjectInfo.pMenuInfo[i].IdName;
+							tvItem.cchTextMax=lstrlen(ProjectInfo.pMenuInfo[i].IdName)+1;
+							TreeView_SetItem(hMaterialTreeView,&tvItem);
+
+							ProjectInfo.ModifyOfMaterial=1;
+
+							TreeView_SortChildren(hMaterialTreeView,
+								TreeView_GetParent(hMaterialTreeView,hTreeItem),
+								0);
+							break;
+						}
+					}
+					break;
+				case IDM_MATERIALTREE_ICON_SETMAIN:
+					RESITEMINFO TempIconResInfo;
+					hTreeItem=TreeView_GetSelection(hMaterialTreeView);
+					for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+						if(ProjectInfo.res.pIconResInfo[i].hTreeItem==hTreeItem){
+							if(i==0) break;
+
+							TempIconResInfo=ProjectInfo.res.pIconResInfo[i];
+							for(;i>0;i--)
+								ProjectInfo.res.pIconResInfo[i]=ProjectInfo.res.pIconResInfo[i-1];
+							ProjectInfo.res.pIconResInfo[0]=TempIconResInfo;
+
+							tvItem.hItem=ProjectInfo.res.pIconResInfo[1].hTreeItem;
+							tvItem.mask=TVIF_TEXT;
+							tvItem.pszText=ProjectInfo.res.pIconResInfo[1].IdName;
+							tvItem.cchTextMax=lstrlen(ProjectInfo.res.pIconResInfo[1].IdName)+1;
+							TreeView_SetItem(hMaterialTreeView,&tvItem);
+
+							tvItem.hItem=ProjectInfo.res.pIconResInfo[0].hTreeItem;
+							tvItem.mask=TVIF_TEXT;
+							sprintf(temporary,"%s (Main)",ProjectInfo.res.pIconResInfo[0].IdName);
+							tvItem.pszText=temporary;
+							tvItem.cchTextMax=lstrlen(temporary)+1;
+							TreeView_SetItem(hMaterialTreeView,&tvItem);
+
+							ProjectInfo.ModifuOfResource=1;
+							break;
+						}
+					}
+					break;
+			}
+			break;
+		case WM_TIMER:
+			KillTimer(hwnd,wParam);
+
+			//フォーカスをエディタにセット
+			SetFocus(GetWindow(GetWindow(hClient,GW_CHILD),GW_CHILD));
+			break;
+		case WM_NOTIFY:
+			NMHDR *hdr;
+			hdr=(NMHDR *)lParam;
+			if(hdr->code==NM_DBLCLK){
+				if(hdr->hwndFrom==hProcedureTreeView) SendMessage(hwnd,WM_COMMAND,IDM_PROCEDURETREE_SHOW,0);
+				else if(hdr->hwndFrom==hMaterialTreeView) SendMessage(hwnd,WM_COMMAND,IDM_MATERIALTREE_OPEN,0);
+			}
+			if(hdr->code==TVN_ITEMEXPANDEDW||hdr->code==TVN_ITEMEXPANDED){
+				NMTREEVIEW *nmTreeView;
+				TVITEM tvItem;
+				nmTreeView=(NMTREEVIEW *)lParam;
+				tvItem.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+				tvItem.hItem=nmTreeView->itemNew.hItem;
+				TreeView_GetItem(nmTreeView->hdr.hwndFrom,&tvItem);
+				if(tvItem.iImage==0||tvItem.iImage==1){
+					if(nmTreeView->action==TVE_EXPAND){
+						tvItem.iImage=1;
+						tvItem.iSelectedImage=1;
+					}
+					else if(nmTreeView->action==TVE_COLLAPSE){
+						tvItem.iImage=0;
+						tvItem.iSelectedImage=0;
+					}
+					tvItem.hItem=nmTreeView->itemNew.hItem;
+					TreeView_SetItem(nmTreeView->hdr.hwndFrom,&tvItem);
+				}
+			}
+			break;
+	}
+	return CallWindowProc(OldTabProc,hwnd,message,wParam,lParam);
+}
+void ResizeProjectView_ToolWindow(void){
+	extern HWND hProjectView_ToolWindow;
+	RECT rect;
+	GetClientRect(hProjectView_ToolWindow,&rect);
+	SendMessage(hProjectView_ToolWindow,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
+}
+LRESULT CALLBACK ProjectView_ToolWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HWND hProjectView;
+	switch(message){
+		case WM_SIZE:
+			MoveWindow(hProjectView,0,0,
+				LOWORD(lParam),
+				HIWORD(lParam),1);
+			return 0;
+		case WM_CLOSE:
+			SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+LRESULT CALLBACK ProjectViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HINSTANCE hInst,hResInst;
+	extern PROJECTINFO ProjectInfo;
+	extern HWND hTabOfProjectView;
+	extern HFONT hStatusFont;
+	extern HWND hProjectView_ToolWindow;
+	int i;
+	RECT rect;
+	HWND hButton;
+
+	switch(message){
+		case WM_CREATE:
+			hProjectViewTab=CreateWindow(WC_TABCONTROL,NULL,
+				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
+				0,0,0,0,hwnd,0,hInst,0);
+			SendMessage(hProjectViewTab,WM_SETFONT,(long)hStatusFont,0);
+
+			hButton=CreateWindow("BUTTON","↓",WS_CHILD|WS_VISIBLE,
+				0,0,30,13,
+				hwnd,(HMENU)IDC_CLIP,hInst,0);
+			SendMessage(hButton,WM_SETFONT,(long)hStatusFont,0);
+
+			OldTabProc=(WNDPROC)GetWindowLong(hProjectViewTab,GWL_WNDPROC);
+			SetWindowLong(hProjectViewTab,GWL_WNDPROC,(long)TabProc);
+
+			//タブを設定
+			TC_ITEM tcItem;
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="File";
+			TabCtrl_InsertItem(hProjectViewTab,0,&tcItem);
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="Class";
+			TabCtrl_InsertItem(hProjectViewTab,1,&tcItem);
+			tcItem.mask=TCIF_TEXT;
+			tcItem.pszText="Material";
+			TabCtrl_InsertItem(hProjectViewTab,2,&tcItem);
+
+			//ファイルツリービューを作成
+			pobj_FileTree=new CFileTree(hProjectViewTab);
+
+			//クラスツリービューを作成
+			hProcedureTreeView=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+				WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hProjectViewTab,0,hInst,0);
+			OldProcedureTreeViewProc=(WNDPROC)GetWindowLong(hProcedureTreeView,GWL_WNDPROC);
+			SetWindowLong(hProcedureTreeView,GWL_WNDPROC,(long)ProcedureTreeViewProc);
+			//イメージリスト読み込み、設定
+			hProcedureTreeViewImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,8,0);
+			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
+			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
+			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_PROCEDURE)));
+			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_PROGRAM_FOLDER)));
+			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_VARIABLE)));
+			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_FUNCTION)));
+			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_VARIABLE)));
+			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_FUNCTION)));
+			TreeView_SetImageList(hProcedureTreeView,hProcedureTreeViewImageList,TVSIL_NORMAL);
+
+			//マテリアルツリービューを作成
+			hMaterialTreeView=CreateWindowEx(WS_EX_CLIENTEDGE,WC_TREEVIEW,"",
+				WS_CHILD|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS,
+				0,0,0,0,
+				hProjectViewTab,0,hInst,0);
+			OldMaterialTreeViewProc=(WNDPROC)GetWindowLong(hMaterialTreeView,GWL_WNDPROC);
+			SetWindowLong(hMaterialTreeView,GWL_WNDPROC,(long)MaterialTreeViewProc);
+			//イメージリスト読み込み、設定
+			hMaterialTreeViewImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,3,0);
+			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
+			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
+			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_WINDOW)));
+			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MENU)));
+			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_ICON)));
+			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_BMP)));
+			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_CURSOR)));
+			TreeView_SetImageList(hMaterialTreeView,hMaterialTreeViewImageList,TVSIL_NORMAL);
+
+			ShowWindow(pobj_FileTree->hTree,SW_SHOW);
+			GetClientRect(hwnd,&rect);
+			SendMessage(hwnd,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
+			return 0;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_CLIP:
+					if(pobj_nv->bClipProjectView==0){
+						pobj_nv->bClipProjectView=1;
+
+						SetWindowLong(hwnd,GWL_EXSTYLE,WS_EX_STATICEDGE);
+						SetParent(hwnd,hOwner);
+						ResizeOwnerWnd();
+
+						ShowWindow(hProjectView_ToolWindow,SW_HIDE);
+					}
+					else{
+						pobj_nv->bClipProjectView=0;
+
+						SetWindowLong(hwnd,GWL_EXSTYLE,0);
+
+						SetParent(hwnd,hProjectView_ToolWindow);
+
+						ResizeOwnerWnd();
+						ResizeProjectView_ToolWindow();
+
+						ShowWindow(hProjectView_ToolWindow,SW_SHOW);
+					}
+					return 0;
+			}
+			break;
+		case WM_NOTIFY:
+			NMHDR *hdr;
+			hdr=(NMHDR *)lParam;
+			if(hdr->hwndFrom==hProjectViewTab&&hdr->code==TCN_SELCHANGE){
+				i=TabCtrl_GetCurSel(hProjectViewTab);
+				if(i==0){
+					ShowWindow(pobj_FileTree->hTree,SW_SHOW);
+					ShowWindow(hProcedureTreeView,SW_HIDE);
+					ShowWindow(hMaterialTreeView,SW_HIDE);
+				}
+				else if(i==1){
+					ShowWindow(pobj_FileTree->hTree,SW_HIDE);
+					ShowWindow(hMaterialTreeView,SW_HIDE);
+					ShowWindow(hProcedureTreeView,SW_SHOW);
+				}
+				else if(i==2){
+					ShowWindow(pobj_FileTree->hTree,SW_HIDE);
+					ShowWindow(hProcedureTreeView,SW_HIDE);
+					ShowWindow(hMaterialTreeView,SW_SHOW);
+				}
+			}
+			return 0;
+		case WM_PAINT:
+			PAINTSTRUCT ps;
+			HDC hdc;
+			HFONT hOldFont;
+			SIZE size;
+			HBRUSH hBrush,hOldBrush;
+			HPEN hPen,hOldPen;
+			char temporary[MAX_PATH];
+
+			if(pobj_nv->bClipProjectView==0) break;
+
+			hBrush=CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW));
+
+			hdc=BeginPaint(hwnd,&ps);
+
+			hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
+			sprintf(temporary,"%s \'%s\'",STRING_PROJECT,ProjectInfo.name);
+
+			GetTextExtentPoint32(hdc,temporary,lstrlen(temporary),&size);
+			GetClientRect(hwnd,&rect);
+			rect.left++;
+			rect.top++;
+			rect.right--;
+			rect.bottom=size.cy+2;
+
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+			hOldPen=(HPEN)SelectObject(hdc,hPen);
+			Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
+			SelectObject(hdc,hOldBrush);
+			SelectObject(hdc,hPen);
+
+			rect.top++;
+			rect.bottom--;
+			SetBkMode(hdc,OPAQUE);
+			SetBkColor(hdc,GetSysColor(COLOR_3DSHADOW));
+			SetTextColor(hdc,GetSysColor(COLOR_3DHILIGHT));
+			DrawText(hdc,temporary,lstrlen(temporary),&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
+
+			EndPaint(hwnd,&ps);
+
+			DeleteObject(hBrush);
+			DeleteObject(hPen);
+			return 0;
+		case WM_SIZE:
+			if(pobj_nv->bClipProjectView){
+				MoveWindow(hProjectViewTab,
+					LEVER_THICK,
+					LEVER_THICK+11,
+					LOWORD(lParam)-LEVER_THICK*2,
+					HIWORD(lParam)-LEVER_THICK*2-21,1);
+
+				GetClientRect(hProjectViewTab,&rect);
+				TabCtrl_AdjustRect(hProjectViewTab,FALSE,&rect);
+				rect.left-=2;
+				rect.right++;
+				rect.bottom++;
+
+				pobj_FileTree->resize(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top);
+				MoveWindow(hProcedureTreeView,
+					rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+				MoveWindow(hMaterialTreeView,
+					rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+
+				GetClientRect(GetDlgItem(hwnd,IDC_CLIP),&rect);
+				MoveWindow(GetDlgItem(hwnd,IDC_CLIP),LOWORD(lParam)-rect.right,HIWORD(lParam)-rect.bottom,rect.right,rect.bottom,1);
+				InvalidateRect(GetDlgItem(hwnd,IDC_CLIP),NULL,0);
+			}
+			else{
+				MoveWindow(hProjectViewTab,0,0,
+					LOWORD(lParam),
+					HIWORD(lParam)-15,1);
+
+				GetClientRect(hProjectViewTab,&rect);
+				TabCtrl_AdjustRect(hProjectViewTab,FALSE,&rect);
+
+				pobj_FileTree->resize(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top);
+				MoveWindow(hProcedureTreeView,
+					rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+				MoveWindow(hMaterialTreeView,
+					rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,1);
+
+				GetClientRect(GetDlgItem(hwnd,IDC_CLIP),&rect);
+				MoveWindow(GetDlgItem(hwnd,IDC_CLIP),LOWORD(lParam)-rect.right,HIWORD(lParam)-rect.bottom,rect.right,rect.bottom,1);
+			}
+			return 0;
+		case WM_CLOSE:
+			SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
+			return 0;
+		case WM_DESTROY:
+			delete pobj_FileTree;
+			ImageList_Destroy(hProcedureTreeViewImageList);
+			ImageList_Destroy(hMaterialTreeViewImageList);
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+
+void Project_File_Insert(char *path){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	char temporary[MAX_PATH],temp2[MAX_PATH];
+
+	GetRelationalPath(path,ProjectInfo.dir);
+
+	//重複チェック
+	if(ProjectInfo.pobj_DBFileInfo->dupli_check(path)){
+		//"\"%s\" ファイルは既にプロジェクト内に存在します。"
+		sprintf(temporary,STRING_DUPLICATIONERROR_FILE_IN_PROJECT,path);
+		MessageBox(hOwner,temporary,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+		return;
+	}
+
+
+	//////////////////////
+	//ツリービューに追加
+	HTREEITEM hTreeItem;
+	_splitpath(path,0,0,temporary,temp2);
+	lstrcat(temporary,temp2);
+	hTreeItem=pobj_FileTree->insert(temporary);
+
+
+	//ProjectInfo.ppobj_DBFileInfoオブジェクトに追加
+	ProjectInfo.pobj_DBFileInfo->add(path,hTreeItem);
+
+
+	ProjectInfo.modify=1;
+
+	//ファイル操作によるクラスビューの再表示
+	ResetClassTree(-1);
+}
+void Project_File_Delete(HTREEITEM hTreeItem){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+
+	if(ProjectInfo.pobj_DBFileInfo->IsMainFile(hTreeItem)){
+		//"このファイルはプロジェクトのメイン ファイルです。プロジェクト内から削除することはできません。"
+		MessageBox(hOwner,STRING_ERROR_CANT_MAINFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+		return;
+	}
+
+	//ツリービューから削除
+	TreeView_DeleteItem(pobj_FileTree->hTree,hTreeItem);
+
+	//ProjectInfo.pobj_DBFileInfoオブジェクトから削除
+	ProjectInfo.pobj_DBFileInfo->del(hTreeItem);
+
+	ProjectInfo.modify=1;
+
+	//ファイル操作によるクラスビューの再表示
+	ResetClassTree(-1);
+}
+
+void MakeNewProject(){
+	extern HANDLE hHeap;
+	extern NEWPROJECTINFO NewProjectInfo;
+	int i;
+	char buffer[GENERAL_SIZE],dir[MAX_PATH],temporary[MAX_PATH],*pTemp;
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+
+	//既にプロジェクトが開かれている場合は閉じる
+	extern PROJECTINFO ProjectInfo;
+	if(ProjectInfo.name[0]){
+		if(!CloseProject()) return;
+	}
+
+	//ワークディレクトリを作成
+	i=lstrlen(pobj_nv->ProjectSaveDir);
+	if(pobj_nv->ProjectSaveDir[i-1]=='\\'&&pobj_nv->ProjectSaveDir[i-2]!=':') pobj_nv->ProjectSaveDir[i-1]=0;
+	sprintf(dir,"%s\\%s\\",pobj_nv->ProjectSaveDir,NewProjectInfo.name);
+	i=0;
+	while(!(dir[i]==':'||(dir[i-1]=='\\'&&dir[i]=='\\'))) i++;
+	if(dir[i]==':') i++;
+	else{
+		i++;
+		while(dir[i]!='\\') i++;
+	}
+	for(i++;;i++){
+		if(dir[i]=='\\'){
+			lstrcpy(temporary,dir);
+			temporary[i]=0;
+			hFind=FindFirstFile(temporary,&wfd);
+			if(hFind==INVALID_HANDLE_VALUE){
+				if(!CreateDirectory(temporary,NULL)){
+					MessageBox(hOwner,"ディレクトリを作成できませんでした",APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+					return;
+				}
+			}
+			else FindClose(hFind);
+		}
+		if(dir[i]=='\0') break;
+	}
+
+
+	//////////////////////////////////////
+	// プロジェクトファイル（*.pj）を作成
+	//////////////////////////////////////
+
+	//先頭の注釈
+	lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
+	i=lstrlen(buffer);
+
+	//プロジェクトのフォーマットバージョン
+	sprintf(buffer+i,"#VERSION=%d\r\n\r\n",PROJECT_VERSION);
+	i+=lstrlen(buffer+i);
+
+	//モジュールタイプ（EXEならば0、DLLならば1）
+	if(NewProjectInfo.dwTypeID==IDC_DLL) lstrcpy(buffer+i,"#MODULETYPE=1\r\n\r\n");
+	else lstrcpy(buffer+i,"#MODULETYPE=0\r\n\r\n");
+	i+=lstrlen(buffer+i);
+
+	//プロジェクト名
+	sprintf(buffer+i,"#NAME=%s\r\n\r\n",NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+
+	lstrcpy(buffer+i,"#PLATFORM=32\r\n\r\n");
+	i+=lstrlen(buffer+i);
+
+	//RADウィンドウの数
+	if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
+		NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
+		lstrcpy(buffer+i,"#USEWINDOW=1\r\n\r\n");
+	else lstrcpy(buffer+i,"#USEWINDOW=0\r\n\r\n");
+	i+=lstrlen(buffer+i);
+
+	//プロジェクトオプション
+	sprintf(buffer+i,"#OPTION=&H%08x\r\n\r\n",NewProjectInfo.dwOption);
+	i+=lstrlen(buffer+i);
+
+	//出力先（Release）
+	if(NewProjectInfo.dwTypeID==IDC_DLL)
+		sprintf(buffer+i,"#OUTPUT_RELEASE=.\\%s.dll\r\n\r\n",NewProjectInfo.name);
+	else sprintf(buffer+i,"#OUTPUT_RELEASE=.\\%s.exe\r\n\r\n",NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+
+	//出力先（Debug）
+	if(NewProjectInfo.dwTypeID==IDC_DLL)
+		sprintf(buffer+i,"#OUTPUT_DEBUG=.\\%s.dll\r\n\r\n",NewProjectInfo.name);
+	else sprintf(buffer+i,"#OUTPUT_DEBUG=.\\%s_debug.exe\r\n\r\n",NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+
+	//マニフェスト
+	sprintf(buffer+i,"#MANIFEST=%s.manifest.xml\r\n\r\n",NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+
+	//デバッグ用（コマンドライン）
+	lstrcpy(buffer+i,"#DEBUG_CMD_LINE=\r\n\r\n");
+	i+=lstrlen(buffer+i);
+
+	//デバッグ用（DLL用の実行ファイル）
+	lstrcpy(buffer+i,"#DEBUG_EXE_PATH=\r\n\r\n");
+	i+=lstrlen(buffer+i);
+
+	//リソースファイル
+	lstrcpy(buffer+i,"#RESOURCE=0\r\n\r\n");
+	i+=lstrlen(buffer+i);
+
+	//ソースファイル
+	sprintf(buffer+i,"#SOURCE\r\n%s.ab\r\n",NewProjectInfo.name);
+	i+=lstrlen(buffer+i);
+	if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
+		NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+		lstrcpy(buffer+i,"MainWnd.ab\r\n");
+		i+=lstrlen(buffer+i);
+	}
+	if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+		lstrcpy(buffer+i,"dx_graphics.sbp\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"dx_input.sbp\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"dx_music.sbp\r\n");
+		i+=lstrlen(buffer+i);
+	}
+
+	//保存
+	sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
+	if(hFind=FindFirstFile(temporary,&wfd)){
+		if(hFind!=INVALID_HANDLE_VALUE){
+			FindClose(hFind);
+
+			//"指定したディレクトリにはすでにプロジェクトが存在します。上書きしますか？"
+			if(MessageBox(hOwner,STRING_ERROR_PROJECT_OVERWRITE,APPLICATION_NAME,MB_YESNO|MB_ICONEXCLAMATION)==IDNO) return;
+		}
+	}
+	if(!WriteBuffer(temporary,buffer,i)) return;
+
+
+	///////////////////////////////////////////
+	//メインプログラムファイル（*.ab）を作成
+	if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
+		sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
+		i=lstrlen(buffer);
+		lstrcpy(buffer+i,"'---------------------------\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"'  Window Message Loop\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"'---------------------------\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"Dim msgMain As MSG, iResult As Long\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"Do\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\tiResult=GetMessage(msgMain,0,0,0)\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\tIf iResult=0 or iResult=-1 Then Exit Do\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\tTranslateMessage(msgMain)\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\tDispatchMessage(msgMain)\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"Loop\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"' Call destructores and exit process\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"End\r\n");
+		i+=lstrlen(buffer+i);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_PROMPTBASE){
+		sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
+		i=lstrlen(buffer);
+		lstrcpy(buffer+i,"#N88BASIC\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		if(NewProjectInfo.ShowHelloWorld){
+			lstrcpy(buffer+i,"Print \"Hello World!\"\r\n");
+			i+=lstrlen(buffer+i);
+		}
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_DOSPROMPTBASE){
+		sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
+		i=lstrlen(buffer);
+		lstrcpy(buffer+i,"#console\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
+		i+=lstrlen(buffer+i);
+		if(NewProjectInfo.ShowHelloWorld){
+			lstrcpy(buffer+i,"Print \"Hello World!\"\r\n");
+			i+=lstrlen(buffer+i);
+		}
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_NOBASE){
+		sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
+		i=lstrlen(buffer);
+		lstrcpy(buffer+i,"' ↓ ここからプログラムが実行されます\r\n\r\n");
+		i+=lstrlen(buffer+i);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+		sprintf(temporary,"%sSubOperation\\dx\\main_exe_directx.abp",pj_editor_Dir);
+		pTemp=ReadBuffer(temporary);
+
+		//#name#をプロジェクト名に置換
+		pTemp=PermutationWndPgmTemplate(pTemp,NewProjectInfo.name,0,0,0);
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_DLL){
+		sprintf(buffer,"#include \"%s.idx\"\r\n\r\n",NewProjectInfo.name);
+		i=lstrlen(buffer);
+		lstrcpy(buffer+i,"'-------------------------------------------------------------------\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"' メモ - このファイルには、DLLの構成要素を記述します。\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"'        （例：関数定義、グローバル変数、定数定義など）\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"'\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"'        エクスポートが必要な関数には、\"Export\" 修飾子を指定します。\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"'        （例：Function Export FuncName() As Long）\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"'-------------------------------------------------------------------\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\t'DLLエントリポイント\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\tSelect Case fdwReason\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\t\tCase DLL_PROCESS_ATTACH\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\t\t\t'DLLがプロセス空間にロードされた時に実行されます。\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\t\t\t_System_StartupProgram()\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\t\t\tDllMain=1\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\t\tCase DLL_PROCESS_DETACH\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\t\t\t_System_Call_Destructor_of_GlobalObject()\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\tEnd Select\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"End Function\r\n");
+		i+=lstrlen(buffer+i);
+		lstrcpy(buffer+i,"\r\n");
+		i+=lstrlen(buffer+i);
+	}
+
+	//保存
+	if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+		sprintf(temporary,"%s%s.ab",dir,NewProjectInfo.name);
+		WriteBuffer(temporary,pTemp,lstrlen(pTemp));
+
+		HeapDefaultFree(pTemp);
+	}
+	else{
+		sprintf(temporary,"%s%s.ab",dir,NewProjectInfo.name);
+		if(!WriteBuffer(temporary,buffer,i)) return;
+	}
+
+
+	/////////////////////
+	// MainWnd.abを作成
+	/////////////////////
+
+	if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
+#if defined(JPN)
+		//日本語ファイル
+		sprintf(temporary,"%sSubOperation\\MainWnd_exe_windowbase.sbp",pj_editor_Dir);
+#else
+		//英語ファイル
+		sprintf(temporary,"%sSubOperation\\MainWnd_exe_windowbase_e.sbp",pj_editor_Dir);
+#endif
+	}
+	else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
+		sprintf(temporary,"%sSubOperation\\dx\\MainWnd_exe_directx.sbp",pj_editor_Dir);
+	else
+		temporary[0]=0;
+
+	if(temporary[0]){
+		pTemp=ReadBuffer(temporary);
+
+		//#name#をプロジェクト名に置換
+		pTemp=PermutationWndPgmTemplate(pTemp,
+			NewProjectInfo.name,
+			"MainWnd",
+			"hMainWnd",
+			"MainWndProc");
+
+		if(NewProjectInfo.ShowHelloWorld){
+			//Hello World!表示
+			i=0;
+			lstrcpy(buffer+i,"\r\nSub MainWnd_Paint(hDC As HDC)\r\n");
+			i+=lstrlen(buffer+i);
+			lstrcpy(buffer+i,"\tDim rect As RECT\r\n");
+			i+=lstrlen(buffer+i);
+			lstrcpy(buffer+i,"\tGetClientRect(hMainWnd,rect)\r\n");
+			i+=lstrlen(buffer+i);
+			lstrcpy(buffer+i,"\tDrawText(hDC,\"Hello World!\",-1,rect,DT_CENTER or DT_VCENTER or DT_SINGLELINE)\r\n");
+			i+=lstrlen(buffer+i);
+			lstrcpy(buffer+i,"End Sub\r\n");
+			i+=lstrlen(buffer+i);
+
+			pTemp=(char *)HeapReAlloc(hHeap,0,pTemp,lstrlen(pTemp)+lstrlen(buffer)+1);
+			lstrcat(pTemp,buffer);
+		}
+
+		sprintf(temporary,"%sMainWnd.ab",dir,NewProjectInfo.name);
+		WriteBuffer(temporary,pTemp,lstrlen(pTemp));
+
+		HeapDefaultFree(pTemp);
+	}
+
+
+	if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+		///////////////////////////
+		// DirextX対応アプリのとき
+		///////////////////////////
+
+		//dx_graphics.sbpをコピー
+		sprintf(temporary,"%sSubOperation\\dx\\dx_graphics.sbp",pj_editor_Dir);
+		pTemp=ReadBuffer(temporary);
+		sprintf(temporary,"%sdx_graphics.sbp",dir,NewProjectInfo.name);
+		WriteBuffer(temporary,pTemp,lstrlen(pTemp));
+		HeapDefaultFree(pTemp);
+
+		//dx_input.sbpをコピー
+		sprintf(temporary,"%sSubOperation\\dx\\dx_input.sbp",pj_editor_Dir);
+		pTemp=ReadBuffer(temporary);
+		sprintf(temporary,"%sdx_input.sbp",dir,NewProjectInfo.name);
+		WriteBuffer(temporary,pTemp,lstrlen(pTemp));
+		HeapDefaultFree(pTemp);
+
+		//dx_music.sbpをコピー
+		sprintf(temporary,"%sSubOperation\\dx\\dx_music.sbp",pj_editor_Dir);
+		pTemp=ReadBuffer(temporary);
+		sprintf(temporary,"%sdx_music.sbp",dir,NewProjectInfo.name);
+		WriteBuffer(temporary,pTemp,lstrlen(pTemp));
+		HeapDefaultFree(pTemp);
+
+		//dx9abm.dllをコピー
+		sprintf(temporary,"%sRuntime\\dx9abm.dll",pj_editor_Dir);
+		sprintf(buffer,"%sdx9abm.dll",dir,NewProjectInfo.name);
+		CopyFile(temporary,buffer,0);
+	}
+
+
+	if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE||
+		NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX){
+		/////////////////////////////////////////
+		// ウィンドウ定義ファイル（*.wnd）を作成
+		/////////////////////////////////////////
+		WINDOW_INFO WindowInfo[1];
+		WindowInfo[0].name="MainWnd";
+		WindowInfo[0].HandleName="hMainWnd";
+		WindowInfo[0].pos.x=CW_USEDEFAULT;
+		WindowInfo[0].pos.y=CW_USEDEFAULT;
+		WindowInfo[0].size.cx=480;
+		WindowInfo[0].size.cy=360;
+		WindowInfo[0].caption=NewProjectInfo.name;
+		if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE)
+			WindowInfo[0].style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_VISIBLE;
+		else if(NewProjectInfo.dwTypeID==IDC_EXE_DIRECTX)
+			WindowInfo[0].style=WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU;
+		WindowInfo[0].ExStyle=0;
+		WindowInfo[0].MenuID=0;
+		WindowInfo[0].id=0;
+		WindowInfo[0].bgColor=COLOR_3DFACE;
+		GetDefaultWindowFont(&WindowInfo[0].LogFont);
+		WindowInfo[0].IconResName=0;
+		WindowInfo[0].ClassName="NORMAL";
+		WindowInfo[0].CallBackName="MainWndProc";
+		WindowInfo[0].type=WNDTYPE_DEFAULT;
+		WindowInfo[0].filepath="MainWnd.ab";
+		WindowInfo[0].NumberOfChildWindows=0;
+		sprintf(temporary,"%s%s.wnd",dir,NewProjectInfo.name);
+
+		ProjectInfo.NumberOfMenu=0;
+		SaveWindowFile(temporary,WindowInfo,1);
+	}
+
+
+	////////////////////////
+	// ワークファイルを作成
+	////////////////////////
+	lstrcpy(buffer,"case4\r\n\r\n");
+	if(NewProjectInfo.dwTypeID==IDC_EXE_WINDOWBASE){
+		lstrcat(buffer,"rad,MainWnd\r\n\r\n");
+	}
+	else{
+		sprintf(buffer+lstrlen(buffer),"text,\"%s.ab\",0,0,0,0\r\n\r\n",NewProjectInfo.name);
+	}
+	lstrcat(buffer,"0\r\n0\r\n0\r\n0,0");
+	//保存
+	sprintf(temporary,"%s%s.wrk",dir,NewProjectInfo.name);
+	if(!WriteBuffer(temporary,buffer,lstrlen(buffer))) return;
+
+
+	//マニフェストを作成
+	char temp2[MAX_PATH];
+	sprintf(temporary,"%sSubOperation\\manifest_temp.xml",pj_editor_Dir);
+	sprintf(temp2,"%s%s.manifest.xml",dir,NewProjectInfo.name);
+	CopyFile(temporary,temp2,0);
+
+
+	sprintf(temporary,"%s%s.pj",dir,NewProjectInfo.name);
+	OpenProject(temporary);
+	SaveProject();
+}
+void SetTreeViewForProjectInfo(){
+	extern HANDLE hHeap;
+	extern HWND hProjectView;
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	char temporary[MAX_PATH];
+	TV_INSERTSTRUCT tv;
+
+	sprintf(temporary,"%s ",ProjectInfo.name);
+	lstrcat(temporary,STRING_PROJECT);
+	SetWindowText(hProjectView,temporary);
+
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+
+	//ファイル ツリー
+	ProjectInfo.pobj_DBFileInfo->ResetTree();
+
+	//関数ツリー
+	ResetClassTree(-1);
+
+	/////////////////////
+	// マテリアル ツリー
+
+	//Cursorリソース フォルダ
+	sprintf(temporary,"Cursor %s",STRING_RESOURCE);
+	tv.hParent=TVI_ROOT;
+	tv.item.iImage=0;
+	tv.item.iSelectedImage=0;
+	tv.item.pszText=temporary;
+	tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
+	ProjectInfo.res.hCursorTreeItem=tv.hParent;
+	for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
+		tv.item.iImage=6;
+		tv.item.iSelectedImage=6;
+		tv.item.pszText=ProjectInfo.res.pCursorResInfo[i].IdName;
+		ProjectInfo.res.pCursorResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
+	}
+
+	//Bitmapリソース フォルダ
+	sprintf(temporary,"Bitmap %s",STRING_RESOURCE);
+	tv.hParent=TVI_ROOT;
+	tv.item.iImage=0;
+	tv.item.iSelectedImage=0;
+	tv.item.pszText=temporary;
+	tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
+	ProjectInfo.res.hBitmapTreeItem=tv.hParent;
+	for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
+		tv.item.iImage=5;
+		tv.item.iSelectedImage=5;
+		tv.item.pszText=ProjectInfo.res.pBitmapResInfo[i].IdName;
+		ProjectInfo.res.pBitmapResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
+	}
+
+	//Iconリソース フォルダ
+	sprintf(temporary,"Icon %s",STRING_RESOURCE);
+	tv.hParent=TVI_ROOT;
+	tv.item.iImage=0;
+	tv.item.iSelectedImage=0;
+	tv.item.pszText=temporary;
+	tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
+	ProjectInfo.res.hIconTreeItem=tv.hParent;
+	for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+		tv.item.iImage=4;
+		tv.item.iSelectedImage=4;
+		if(i==0){
+			sprintf(temporary,"%s (Main)",ProjectInfo.res.pIconResInfo[i].IdName);
+			tv.item.pszText=temporary;
+		}
+		else tv.item.pszText=ProjectInfo.res.pIconResInfo[i].IdName;
+		ProjectInfo.res.pIconResInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
+	}
+
+	//Menuフォルダ
+	tv.hParent=TVI_ROOT;
+	tv.item.iImage=0;
+	tv.item.iSelectedImage=0;
+	tv.item.pszText="Menu";
+	tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
+	ProjectInfo.hMenuTreeItem=tv.hParent;
+	for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+		tv.item.iImage=3;
+		tv.item.iSelectedImage=3;
+		tv.item.pszText=ProjectInfo.pMenuInfo[i].IdName;
+		ProjectInfo.pMenuInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
+	}
+
+	//Windowフォルダ
+	tv.hParent=TVI_ROOT;
+	tv.item.iImage=0;
+	tv.item.iSelectedImage=0;
+	tv.item.pszText="Window";
+	tv.hParent=TreeView_InsertItem(hMaterialTreeView,&tv);
+	ProjectInfo.hWindowTreeItem=tv.hParent;
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		tv.item.iImage=2;
+		tv.item.iSelectedImage=2;
+		tv.item.pszText=ProjectInfo.pWindowInfo[i].name;
+		ProjectInfo.pWindowInfo[i].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
+	}
+}
+void OpenProject(char *path){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	char *buffer,temporary[MAX_PATH],temp2[MAX_PATH];
+
+	//既にプロジェクトが開かれている場合は閉じる
+	if(ProjectInfo.name[0]){
+		if(!CloseProject()) return;
+	}
+	memset(&ProjectInfo,0,sizeof(PROJECTINFO));
+
+	//プロジェクトの作業ディレクトリを取得
+	_splitpath(path,ProjectInfo.dir,temporary,0,0);
+	lstrcat(ProjectInfo.dir,temporary);
+
+	//ファイルを開く、保存の初期ディレクトリをセット
+	lstrcpy(pobj_nv->DefSaveDir,ProjectInfo.dir);
+
+
+	//////////////////////////////////////////
+	// リソースデータ用領域を確保
+	ProjectInfo.res.pCursorResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
+	ProjectInfo.res.NumberOfCursorRes=0;
+	ProjectInfo.res.pBitmapResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
+	ProjectInfo.res.NumberOfBitmapRes=0;
+	ProjectInfo.res.pIconResInfo=(RESITEMINFO *)HeapAlloc(hHeap,0,1);
+	ProjectInfo.res.NumberOfIconRes=0;
+
+
+	//////////////////////////////////////////
+	//プロジェクトファイル（*.pj）をオープン
+	buffer=ReadBuffer(path);
+	if(!buffer) return;
+
+	//解析
+	ProjectInfo.pobj_DBFileInfo=new CDBFileInfo();
+	for(i=0;;i++){
+		if(buffer[i]=='\0') break;
+		if(buffer[i]=='\r'&&buffer[i+1]=='\n'&&buffer[i+2]=='#'){
+			for(i+=3,i2=0;;i++,i2++){
+				if(!IsVariableChar(buffer[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			if(lstrcmpi(temporary,"VERSION")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				ProjectInfo.dwVersion=GetValue(temporary);
+			}
+			else if(lstrcmpi(temporary,"MODULETYPE")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				ProjectInfo.dwModuleType=atoi(temporary);
+			}
+			else if(lstrcmpi(temporary,"NAME")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						ProjectInfo.name[i2]=0;
+						break;
+					}
+					ProjectInfo.name[i2]=buffer[i];
+				}
+			}
+			else if(lstrcmpi(temporary,"PLATFORM")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				i2=atoi(temporary);
+				extern HWND hSelectCompilerCombo;
+				if(i2==32){
+					//プラットフォームにWin32を選択
+					SendMessage(hSelectCompilerCombo,CB_SETCURSEL,0,0);
+				}
+				else if(i2==64){
+					//プラットフォームにWin64を選択
+					SendMessage(hSelectCompilerCombo,CB_SETCURSEL,1,0);
+				}
+				SendMessage(hSelectCompilerCombo,WM_COMMAND,MAKELONG(0,CBN_SELCHANGE),0);
+			}
+			else if(lstrcmpi(temporary,"USEWINDOW")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				ProjectInfo.NumberOfWindows=atoi(temporary);
+			}
+			else if(lstrcmpi(temporary,"OPTION")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				ProjectInfo.dwOption=GetValue(temporary);
+			}
+			else if(lstrcmpi(temporary,"OUTPUT_RELEASE")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				lstrcpy(ProjectInfo.lpszOutput_Release,temporary);
+			}
+			else if(lstrcmpi(temporary,"OUTPUT_DEBUG")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				lstrcpy(ProjectInfo.lpszOutput_Debug,temporary);
+			}
+			else if(lstrcmpi(temporary,"MANIFEST")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				lstrcpy(ProjectInfo.szManifestPath,temporary);
+			}
+			else if(lstrcmpi(temporary,"DEBUG_CMD_LINE")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				lstrcpy(ProjectInfo.szCmdLine,temporary);
+			}
+			else if(lstrcmpi(temporary,"DEBUG_EXE_PATH")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				lstrcpy(ProjectInfo.szExePath,temporary);
+			}
+			else if(lstrcmpi(temporary,"RESOURCE")==0&&buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temporary[i2]=0;
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+					temporary[i2]=buffer[i];
+				}
+				if(temporary[0]!='\0'&&(!(temporary[0]=='0'&&temporary[1]=='\0'))){
+					lstrcpy(ProjectInfo.ResourceFileName,temporary);
+					GetResourceData();
+				}
+				else{
+					sprintf(ProjectInfo.ResourceFileName,"%s.rc",ProjectInfo.name);
+				}
+			}
+			else if(lstrcmpi(temporary,"SOURCE")==0&&buffer[i]=='\r'&&buffer[i+1]=='\n'){
+				while(1){
+					for(i+=2,i2=0;;i++,i2++){
+						if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+							temporary[i2]=0;
+							break;
+						}
+						temporary[i2]=buffer[i];
+					}
+					if(temporary[0]=='\0') break;
+					ProjectInfo.pobj_DBFileInfo->add(temporary,0);
+
+					if(buffer[i]=='\0') break;
+				}
+			}
+			else{
+				//不明なパラメータは無視
+				for(i++;;i++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						if(buffer[i]=='\r'&&buffer[i+1]=='\n') i-=2;
+						break;
+					}
+				}
+			}
+			if(buffer[i]=='\0') break;
+		}
+	}
+	HeapDefaultFree(buffer);
+
+	//古いバージョンファイルを考慮
+	if(ProjectInfo.dwVersion<=4){
+		if(ProjectInfo.dwModuleType==MT_DLL)
+			sprintf(ProjectInfo.lpszOutput_Release,".\\%s.dll",ProjectInfo.name);
+		else sprintf(ProjectInfo.lpszOutput_Release,".\\%s.exe",ProjectInfo.name);
+		sprintf(ProjectInfo.lpszOutput_Debug,".\\%s_debug.exe",ProjectInfo.name);
+	}
+
+	//ブレークポイントを初期化
+	ProjectInfo.pobj_DBBreakPoint=new CDBBreakPoint();
+
+
+	if(ProjectInfo.NumberOfWindows){
+		/////////////////////////////////////////////
+		//ウィンドウ定義ファイル（*.wnd）をオープン
+		sprintf(temp2,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
+		if(!OpenWindowFile(temp2)) return;
+	}
+	else{
+		ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+
+		ProjectInfo.NumberOfMenu=0;
+		ProjectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+	}
+
+
+	//プロジェクト ビューを設定、表示
+	extern HWND hProjectView;
+	SetTreeViewForProjectInfo();
+	if(!IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
+
+
+	//メニュー状態を設定
+	ResetState_DocMenu();
+
+
+	//////////////////////////////////////////
+	//ワークファイル（*.wrk）をオープン
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HTREEITEM hTreeItem;
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+	HWND hChild;
+	int WndNum;
+	sprintf(temp2,"%s%s.wrk",ProjectInfo.dir,ProjectInfo.name);
+	hFind=FindFirstFile(temp2,&wfd);
+	if(hFind!=INVALID_HANDLE_VALUE){
+		FindClose(hFind);
+		buffer=ReadBuffer(temp2);
+		if(!buffer) return;
+
+		//解析、反映
+		memcpy(temporary,buffer,5);
+		temporary[5]=0;
+		if(lstrcmp(temporary,"case4")==0){
+
+			LockWindowUpdate(hOwner);
+			for(i=9,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					if(i2!=0){
+						temporary[i2]=0;
+						for(i3=0;;i3++){
+							if(temporary[i3]==','||temporary[i3]=='\0') break;
+						}
+						if(temporary[i3]=='\0') goto EndToSetWorkFile;
+						lstrcpy(temp2,temporary+i3+1);
+						temporary[i3]=0;
+						if(lstrcmpi(temporary,"text")==0){
+							if(temp2[0]!='\"') goto EndToSetWorkFile;
+
+							//ファイルを開く
+							i2=1;
+							for(i3=0;;i2++,i3++){
+								if(temp2[i2]=='\"'||temp2[i2]=='\0'){
+									temporary[i3]=0;
+									break;
+								}
+								temporary[i3]=temp2[i2];
+							}
+							GetFullPath(temporary,ProjectInfo.dir);
+							hChild=OpenFileWithExtension(temporary);
+							WndNum=GetWndNum(hChild);
+							if(WndNum==-1){
+								goto EndToSetWorkFile;
+							}
+
+							//ResetScrollbarが再描画時に呼び出されるので、再描画する
+							InvalidateRect(MdiInfo[WndNum].pmti->hEdit,NULL,0);
+							UpdateWindow(MdiInfo[WndNum].pmti->hEdit);
+
+							if(temp2[i2]=='\0') goto EndToSetWorkFile;
+							if(temp2[i2+1]!=',') goto EndToSetWorkFile;
+
+							//以前のスクロール位置を復元
+							SCROLLINFO si;
+							POINT pos;
+							for(i2+=2,i3=0;;i2++,i3++){
+								if(temp2[i2]==','||temp2[i2]=='\0'){
+									temporary[i3]=0;
+									break;
+								}
+								temporary[i3]=temp2[i2];
+							}
+							sscanf(temporary,"%d",&pos.x);
+							if(temp2[i2]=='\0') goto EndToSetWorkFile;
+							for(i2++,i3=0;;i2++,i3++){
+								if(temp2[i2]==','||temp2[i2]=='\0'){
+									temporary[i3]=0;
+									break;
+								}
+								temporary[i3]=temp2[i2];
+							}
+							sscanf(temporary,"%d",&pos.y);
+							si.cbSize=sizeof(SCROLLINFO);
+							si.fMask=SIF_POS;
+							si.nPos=pos.x;
+							SetScrollInfo(MdiInfo[WndNum].pmti->hEdit,SB_HORZ,&si,1);
+							si.nPos=pos.y;
+							SetScrollInfo(MdiInfo[WndNum].pmti->hEdit,SB_VERT,&si,1);
+
+							if(temp2[i2]=='\0') goto EndToSetWorkFile;
+
+							//キャレット位置をセット
+							for(i2++,i3=0;;i2++,i3++){
+								if(temp2[i2]==','||temp2[i2]=='\0'){
+									temporary[i3]=0;
+									break;
+								}
+								temporary[i3]=temp2[i2];
+							}
+							sscanf(temporary,"%d",&pos.x);
+							if(temp2[i2]=='\0') goto EndToSetWorkFile;
+							for(i2++,i3=0;;i2++,i3++){
+								if(temp2[i2]==','||temp2[i2]=='\0'){
+									temporary[i3]=0;
+									break;
+								}
+								temporary[i3]=temp2[i2];
+							}
+							sscanf(temporary,"%d",&pos.y);
+							TextEdit_SetSel(WndNum,pos.x,pos.y);
+						}
+						else if(lstrcmpi(temporary,"rad")==0){
+							for(i3=0;i3<ProjectInfo.NumberOfWindows;i3++){
+								if(lstrcmpi(ProjectInfo.pWindowInfo[i3].name,temp2)==0){
+									NewRadWindow(i3);
+									break;
+								}
+							}
+						}
+						else if(lstrcmpi(temporary,"menu")==0){
+							for(i3=0;i3<ProjectInfo.NumberOfMenu;i3++){
+								if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,temp2)==0){
+									NewMenuWindow(&ProjectInfo.pMenuInfo[i3]);
+									break;
+								}
+							}
+						}
+						else if(lstrcmpi(temporary,"icon")==0){
+							for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
+								if(lstrcmpi(ProjectInfo.res.pIconResInfo[i3].path,temp2)==0){
+									GetFullPath(temp2,ProjectInfo.dir);
+									NewIconEditWindow(temp2);
+									break;
+								}
+							}
+						}
+						i++;
+						i2=-1;
+						continue;
+					}
+					else break;
+				}
+				temporary[i2]=buffer[i];
+			}
+
+			for(i+=2,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			sscanf(temporary,"%d",&i2);
+			TabCtrl_SetCurSel(hProjectViewTab,i2);
+			if(i2==0){
+				ShowWindow(pobj_FileTree->hTree,SW_SHOW);
+				ShowWindow(hProcedureTreeView,SW_HIDE);
+				ShowWindow(hMaterialTreeView,SW_HIDE);
+			}
+			else if(i2==1){
+				ShowWindow(pobj_FileTree->hTree,SW_HIDE);
+				ShowWindow(hMaterialTreeView,SW_HIDE);
+				ShowWindow(hProcedureTreeView,SW_SHOW);
+			}
+			else if(i2==2){
+				ShowWindow(pobj_FileTree->hTree,SW_HIDE);
+				ShowWindow(hProcedureTreeView,SW_HIDE);
+				ShowWindow(hMaterialTreeView,SW_SHOW);
+			}
+			if(buffer[i]=='\0') goto EndToSetWorkFile;
+
+			for(i+=2,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
+
+			for(i+=2,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			if(temporary[0]=='1') TreeView_Expand(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),TVE_EXPAND);
+
+			for(i+=2,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			hTreeItem=TreeView_GetRoot(hMaterialTreeView);
+			i2=0;
+			while(hTreeItem){
+				i2=GetOneParameter(temporary,i2,temp2);
+				if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
+				hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
+			}
+		}
+		else if(lstrcmp(temporary,"case3")==0){
+			////////////////////////////////////////
+			// 古いフォーマットのワークファイル
+
+			LockWindowUpdate(hOwner);
+			for(i=9,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					if(i2!=0){
+						temporary[i2]=0;
+						for(i3=0;;i3++){
+							if(temporary[i3]==','||temporary[i3]=='\0') break;
+						}
+						if(temporary[i3]=='\0') goto EndToSetWorkFile;
+						lstrcpy(temp2,temporary+i3+1);
+						temporary[i3]=0;
+						if(lstrcmpi(temporary,"text")==0){
+							for(i3=0;;i3++){
+								if(temp2[i3]==','||temp2[i3]=='\0') break;
+							}
+							if(temp2[i3]=='\0') goto EndToSetWorkFile;
+							lstrcpy(temporary,temp2+i3+1);
+							temp2[i3]=0;
+							GetFullPath(temporary,ProjectInfo.dir);
+							sscanf(temp2,"%d",&i3);
+
+							//ファイルを開く
+							hChild=OpenFileWithExtension(temporary);
+							WndNum=GetWndNum(hChild);
+
+							//キャレット位置をセット
+							TextEdit_SetSel(WndNum,i3,i3);
+						}
+						else if(lstrcmpi(temporary,"rad")==0){
+							for(i3=0;i3<ProjectInfo.NumberOfWindows;i3++){
+								if(lstrcmpi(ProjectInfo.pWindowInfo[i3].name,temp2)==0){
+									NewRadWindow(i3);
+									break;
+								}
+							}
+						}
+						else if(lstrcmpi(temporary,"menu")==0){
+							for(i3=0;i3<ProjectInfo.NumberOfMenu;i3++){
+								if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,temp2)==0){
+									NewMenuWindow(&ProjectInfo.pMenuInfo[i3]);
+									break;
+								}
+							}
+						}
+						else if(lstrcmpi(temporary,"icon")==0){
+							for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
+								if(lstrcmpi(ProjectInfo.res.pIconResInfo[i3].path,temp2)==0){
+									GetFullPath(temp2,ProjectInfo.dir);
+									NewIconEditWindow(temp2);
+									break;
+								}
+							}
+						}
+						i++;
+						i2=-1;
+						continue;
+					}
+					else break;
+				}
+				temporary[i2]=buffer[i];
+			}
+
+			for(i+=2,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			sscanf(temporary,"%d",&i2);
+			TabCtrl_SetCurSel(hProjectViewTab,i2);
+			if(i2==0){
+				ShowWindow(hProcedureTreeView,SW_HIDE);
+				ShowWindow(hMaterialTreeView,SW_HIDE);
+				ShowWindow(pobj_FileTree->hTree,SW_SHOW);
+			}
+			else if(i2==1){
+				ShowWindow(pobj_FileTree->hTree,SW_HIDE);
+				ShowWindow(hMaterialTreeView,SW_HIDE);
+				ShowWindow(hProcedureTreeView,SW_SHOW);
+			}
+			else if(i2==2){
+				ShowWindow(pobj_FileTree->hTree,SW_HIDE);
+				ShowWindow(hProcedureTreeView,SW_HIDE);
+				ShowWindow(hMaterialTreeView,SW_SHOW);
+			}
+			if(buffer[i]=='\0') goto EndToSetWorkFile;
+
+			for(i+=2,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			if(temporary[0]=='1') TreeView_Expand(pobj_FileTree->hTree,TreeView_GetRoot(pobj_FileTree->hTree),TVE_EXPAND);
+
+			for(i+=2,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			if(temporary[0]=='1') TreeView_Expand(hProcedureTreeView,TreeView_GetRoot(hProcedureTreeView),TVE_EXPAND);
+
+			for(i+=2,i2=0;;i++,i2++){
+				if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			hTreeItem=TreeView_GetRoot(hMaterialTreeView);
+			i2=0;
+			while(hTreeItem){
+				i2=GetOneParameter(temporary,i2,temp2);
+				if(GetValue(temp2)) TreeView_Expand(hMaterialTreeView,hTreeItem,TVE_EXPAND);
+				hTreeItem=TreeView_GetNextSibling(hMaterialTreeView,hTreeItem);
+			}
+		}
+EndToSetWorkFile:
+		LockWindowUpdate(NULL);
+		HeapDefaultFree(buffer);
+	}
+
+
+	//ウィンドウ タイトルを変更
+	sprintf(temporary,"%s - %s",ProjectInfo.name,APPLICATION_NAME);
+	SetWindowText(hOwner,temporary);
+
+
+	ProjectInfo.modify=0;
+	ProjectInfo.ModifyOfMaterial=0;
+	ProjectInfo.ModifuOfResource=0;
+}
+BOOL ProjectModifyCheck(BOOL bRun){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,WndNum,sw;
+	HWND hChild;
+	char temporary[MAX_PATH];
+	if(ProjectInfo.modify||ProjectInfo.ModifyOfMaterial||ProjectInfo.ModifuOfResource){
+		if(bRun==0||pobj_nv->bSaveCheckProject){
+			//"\"%s\" プロジェクトは変更されています。保存しますか？"
+			sprintf(temporary,STRING_MODIFYCHECK_PROJECT,ProjectInfo.name);
+			i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
+
+			if(i==IDCANCEL) return 0;
+			if(i==IDYES) SaveProject();
+		}
+		else SaveProject();
+		return 1;
+	}
+	hChild=GetWindow(hClient,GW_CHILD);
+	while(hChild){
+		WndNum=GetWndNum(hChild);
+		sw=0;
+		if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+			if(MdiInfo[WndNum].pmti->bModify){
+				for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
+					ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
+					if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
+				}
+			}
+		}
+		else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+			if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
+				for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+					lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
+					GetFullPath(temporary,ProjectInfo.dir);
+					if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) sw=1;
+				}
+			}
+		}
+
+		if(sw){
+			if(bRun==0||pobj_nv->bSaveCheckProject){
+				//"\"%s\" プロジェクトは変更されています。保存しますか？"
+				sprintf(temporary,STRING_MODIFYCHECK_PROJECT,ProjectInfo.name);
+				i=MessageBox(hOwner,temporary,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONEXCLAMATION);
+
+				if(i==IDCANCEL) return 0;
+				if(i==IDYES) SaveProject();
+			}
+			else SaveProject();
+			return 1;
+		}
+		hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+	}
+	return 2;
+}
+_int8 CloseProject(void){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,WndNum;
+	HWND hChild,hCloseChild;
+	char temporary[MAX_PATH];
+
+
+	//保存確認
+	i=ProjectModifyCheck(0);
+	if(i==0) return 0;
+	else if(i==2) MakeWorkFile();
+
+	//プロジェクトに関するMDIウィンドウをすべて閉じる
+	hChild=GetWindow(hClient,GW_CHILD);
+	while(hChild){
+		hCloseChild=hChild;
+		hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+		WndNum=GetWndNum(hCloseChild);
+		if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+			for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
+				ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
+				if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
+					MdiInfo[WndNum].pmti->bModify=0;
+					SendMessage(hCloseChild,WM_CLOSE,0,0);
+					break;
+				}
+			}
+		}
+		else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+			for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+				if(lstrcmp(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[i].name)==0){
+					SendMessage(hCloseChild,WM_CLOSE,0,0);
+					break;
+				}
+			}
+		}
+		else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
+			for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+				if(lstrcmp(MdiInfo[WndNum].path,ProjectInfo.pMenuInfo[i].IdName)==0){
+					SendMessage(hCloseChild,WM_CLOSE,0,0);
+					break;
+				}
+			}
+		}
+		else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+			for(i=0;ProjectInfo.res.NumberOfIconRes;i++){
+				lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
+				GetFullPath(temporary,ProjectInfo.dir);
+				if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
+					SendMessage(hCloseChild,WM_CLOSE,0,0);
+					break;
+				}
+			}
+		}
+	}
+
+	//ファイル情報のメモリを解放
+	delete ProjectInfo.pobj_DBFileInfo;
+
+	//ブレークポイントのオブジェクトを解放
+	delete ProjectInfo.pobj_DBBreakPoint;
+
+	//ウィンドウ情報のメモリを解放
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		HeapDefaultFree(ProjectInfo.pWindowInfo[i].name);
+		HeapDefaultFree(ProjectInfo.pWindowInfo[i].HandleName);
+		HeapDefaultFree(ProjectInfo.pWindowInfo[i].caption);
+		HeapDefaultFree(ProjectInfo.pWindowInfo[i].ClassName);
+		HeapDefaultFree(ProjectInfo.pWindowInfo[i].CallBackName);
+		HeapDefaultFree(ProjectInfo.pWindowInfo[i].filepath);
+		if(ProjectInfo.pWindowInfo[i].MenuID)
+			HeapDefaultFree(ProjectInfo.pWindowInfo[i].MenuID);
+		if(ProjectInfo.pWindowInfo[i].IconResName)
+			HeapDefaultFree(ProjectInfo.pWindowInfo[i].IconResName);
+
+		//子ウィンドウのメモリを解放
+		for(i2=0;i2<ProjectInfo.pWindowInfo[i].NumberOfChildWindows;i2++){
+			HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].IdName);
+			HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].caption);
+			if(ProjectInfo.pWindowInfo[i].pChildInfo[i2].Control==CT_IMAGEBOX){
+				//イメージ ボックスの場合
+				HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo[i2].ImageCtrlInfo.path);
+			}
+		}
+		HeapDefaultFree(ProjectInfo.pWindowInfo[i].pChildInfo);
+	}
+	HeapDefaultFree(ProjectInfo.pWindowInfo);
+
+	//メニュー情報のメモリを解放
+	HeapMenuDataFree(ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu,0);
+	HeapDefaultFree(ProjectInfo.pMenuInfo);
+
+	//リソースのメモリを解放
+	for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
+		HeapDefaultFree(ProjectInfo.res.pCursorResInfo[i].IdName);
+		HeapDefaultFree(ProjectInfo.res.pCursorResInfo[i].path);
+	}
+	HeapDefaultFree(ProjectInfo.res.pCursorResInfo);
+	for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
+		HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[i].IdName);
+		HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[i].path);
+	}
+	HeapDefaultFree(ProjectInfo.res.pBitmapResInfo);
+	for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+		HeapDefaultFree(ProjectInfo.res.pIconResInfo[i].IdName);
+		HeapDefaultFree(ProjectInfo.res.pIconResInfo[i].path);
+	}
+	HeapDefaultFree(ProjectInfo.res.pIconResInfo);
+
+	//プロジェクト ビューを非表示にする
+	extern HWND hProjectView;
+	if(IsWindowVisible(hProjectView)) SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
+	SetWindowText(hProjectView,"Project View");
+
+	TreeView_DeleteAllItems(pobj_FileTree->hTree);
+	TreeView_DeleteAllItems(hProcedureTreeView);
+	TreeView_DeleteAllItems(hMaterialTreeView);
+
+	//ウィンドウ タイトルを変更
+	SetWindowText(hOwner,APPLICATION_NAME);
+
+	ProjectInfo.name[0]=0;
+
+	//メニュー状態を設定
+	ResetState_DocMenu();
+
+	return 1;
+}
+void MakeWorkFile(void){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,WndNum;
+	char temporary[MAX_PATH],buffer[32767];
+	HWND hChild;
+	CHARRANGE CharRange;
+
+	//ワークファイル（*.wrk）を作成
+	lstrcpy(buffer,"case4\r\n\r\n");
+	i2=lstrlen(buffer);
+
+
+	///////////////////////
+	//MDIウィンドウの並び
+	hChild=GetWindow(GetWindow(hClient,GW_CHILD),GW_HWNDLAST);
+	while(hChild){
+		WndNum=GetWndNum(hChild);
+		if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+			for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
+				ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
+				if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
+					TextEdit_GetSel(WndNum,&CharRange);
+
+					SCROLLINFO si;
+					POINT pos;
+					si.cbSize=sizeof(SCROLLINFO);
+					si.fMask=SIF_POS;
+					GetScrollInfo(MdiInfo[WndNum].pmti->hEdit,SB_HORZ,&si);
+					pos.x=si.nPos;
+					GetScrollInfo(MdiInfo[WndNum].pmti->hEdit,SB_VERT,&si);
+					pos.y=si.nPos;
+
+					sprintf(buffer+i2,"text,\"%s\",%d,%d,%d,%d\r\n",
+						ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path,
+						pos.x,
+						pos.y,
+						CharRange.cpMin,
+						CharRange.cpMax);
+					i2+=lstrlen(buffer+i2);
+					break;
+				}
+			}
+		}
+		else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+			for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+				if(lstrcmpi(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[i].name)==0){
+					sprintf(buffer+i2,"rad,%s\r\n",MdiInfo[WndNum].path);
+					i2+=lstrlen(buffer+i2);
+					break;
+				}
+			}
+		}
+		else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
+			for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+				if(lstrcmpi(MdiInfo[WndNum].path,ProjectInfo.pMenuInfo[i].IdName)==0){
+					sprintf(buffer+i2,"menu,%s\r\n",MdiInfo[WndNum].path);
+					i2+=lstrlen(buffer+i2);
+					break;
+				}
+			}
+		}
+		else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+			for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+				lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
+				GetFullPath(temporary,ProjectInfo.dir);
+				if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
+					sprintf(buffer+i2,"icon,%s\r\n",ProjectInfo.res.pIconResInfo[i].path);
+					i2+=lstrlen(buffer+i2);
+					break;
+				}
+			}
+		}
+		hChild=GetNextWindow(hChild,GW_HWNDPREV);
+	}
+	lstrcpy(buffer+i2,"\r\n");
+	i2+=2;
+
+
+	//////////////////////////
+	//ツリービューの展開状況
+	sprintf(buffer+i2,"%d\r\n",TabCtrl_GetCurSel(hProjectViewTab));
+	i2+=lstrlen(buffer+i2);
+	TVITEM tvItem;
+	memset(&tvItem,0,sizeof(TVITEM));
+	tvItem.mask=TVIF_HANDLE|TVIF_STATE;
+	tvItem.hItem=TreeView_GetRoot(pobj_FileTree->hTree);
+	TreeView_GetItem(pobj_FileTree->hTree,&tvItem);
+	if(tvItem.state&TVIS_EXPANDED) i=1;
+	else i=0;
+	sprintf(buffer+i2,"%d\r\n",i);
+	i2+=lstrlen(buffer+i2);
+
+	tvItem.hItem=TreeView_GetRoot(hProcedureTreeView);
+	TreeView_GetItem(hProcedureTreeView,&tvItem);
+	if(tvItem.state&TVIS_EXPANDED) i=1;
+	else i=0;
+	sprintf(buffer+i2,"%d\r\n",i);
+	i2+=lstrlen(buffer+i2);
+
+	tvItem.hItem=TreeView_GetRoot(hMaterialTreeView);
+	while(tvItem.hItem){
+		TreeView_GetItem(hMaterialTreeView,&tvItem);
+		if(tvItem.state&TVIS_EXPANDED) i=1;
+		else i=0;
+		sprintf(buffer+i2,"%d",i);
+		i2+=lstrlen(buffer+i2);
+
+		tvItem.hItem=TreeView_GetNextSibling(hMaterialTreeView,tvItem.hItem);
+		if(tvItem.hItem){
+			lstrcpy(buffer+i2,",");
+			i2+=lstrlen(buffer+i2);
+		}
+	}
+
+
+	//保存
+	sprintf(temporary,"%s%s.wrk",ProjectInfo.dir,ProjectInfo.name);
+	WriteBuffer(temporary,buffer,i2);
+}
+void SaveProject(void){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,WndNum;
+	char temporary[MAX_PATH],buffer[32767];
+	HWND hChild;
+
+	//"プロジェクトを保存中..."
+	SetStatusText(STRING_PROJECT_SAVING);
+
+	//プロジェクトファイルのバージョンを設定
+	ProjectInfo.dwVersion=PROJECT_VERSION;
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	while(hChild){
+		WndNum=GetWndNum(hChild);
+		if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+			if(MdiInfo[WndNum].pmti->bModify){
+				for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
+					ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
+					if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
+						SaveDocument(hChild,NULL);
+						break;
+					}
+				}
+			}
+		}
+		if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+			if(MdiInfo[WndNum].MdiIconEditInfo->bModify){
+				for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+					lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i].path);
+					GetFullPath(temporary,ProjectInfo.dir);
+					if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0){
+						SaveDocument(hChild,NULL);
+						break;
+					}
+				}
+			}
+		}
+		hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+	}
+
+
+	//////////////////////////////////////
+	//プロジェクトファイル（*.pj）を作成
+	lstrcpy(buffer,"\' ActiveBasic Project file.\r\n\r\n");
+	i2=lstrlen(buffer);
+	sprintf(buffer+i2,"#VERSION=%d\r\n\r\n",ProjectInfo.dwVersion);
+	i2+=lstrlen(buffer+i2);
+	sprintf(buffer+i2,"#MODULETYPE=%d\r\n\r\n",ProjectInfo.dwModuleType);
+	i2+=lstrlen(buffer+i2);
+	sprintf(buffer+i2,"#NAME=%s\r\n\r\n",ProjectInfo.name);
+	i2+=lstrlen(buffer+i2);
+	extern HWND hSelectCompilerCombo;
+	if(SendMessage(hSelectCompilerCombo,CB_GETCURSEL,0,0)==0){
+		sprintf(buffer+i2,"#PLATFORM=32\r\n\r\n",ProjectInfo.name);
+		i2+=lstrlen(buffer+i2);
+	}
+	else{
+		sprintf(buffer+i2,"#PLATFORM=64\r\n\r\n",ProjectInfo.name);
+		i2+=lstrlen(buffer+i2);
+	}
+	sprintf(buffer+i2,"#USEWINDOW=%d\r\n\r\n",ProjectInfo.NumberOfWindows);
+	i2+=lstrlen(buffer+i2);
+	sprintf(buffer+i2,"#OPTION=&H%08x\r\n\r\n",ProjectInfo.dwOption);
+	i2+=lstrlen(buffer+i2);
+	sprintf(buffer+i2,"#OUTPUT_RELEASE=%s\r\n\r\n",ProjectInfo.lpszOutput_Release);
+	i2+=lstrlen(buffer+i2);
+	sprintf(buffer+i2,"#OUTPUT_DEBUG=%s\r\n\r\n",ProjectInfo.lpszOutput_Debug);
+	i2+=lstrlen(buffer+i2);
+	sprintf(buffer+i2,"#MANIFEST=%s\r\n\r\n",ProjectInfo.szManifestPath);
+	i2+=lstrlen(buffer+i2);
+	sprintf(buffer+i2,"#DEBUG_CMD_LINE=%s\r\n\r\n",ProjectInfo.szCmdLine);
+	i2+=lstrlen(buffer+i2);
+	sprintf(buffer+i2,"#DEBUG_EXE_PATH=%s\r\n\r\n",ProjectInfo.szExePath);
+	i2+=lstrlen(buffer+i2);
+	if(ProjectInfo.ResourceFileName[0]){
+		sprintf(buffer+i2,"#RESOURCE=%s\r\n\r\n",ProjectInfo.ResourceFileName);
+		i2+=lstrlen(buffer+i2);
+	}
+	else{
+		lstrcpy(buffer+i2,"#RESOURCE=0\r\n\r\n");
+		i2+=lstrlen(buffer+i2);
+	}
+	sprintf(buffer+i2,"#SOURCE\r\n");
+	i2+=lstrlen(buffer+i2);
+	for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
+		sprintf(buffer+i2,"%s\r\n",ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
+		i2+=lstrlen(buffer+i2);
+	}
+
+	//保存
+	sprintf(temporary,"%s%s.pj",ProjectInfo.dir,ProjectInfo.name);
+	WriteBuffer(temporary,buffer,i2);
+
+
+	//////////////////////////////////
+	// リソースファイル（*.rc、resource.ab）を作成
+	if(ProjectInfo.ResourceFileName[0]){
+		i2=0;
+		i3=101;
+		for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++,i3++){
+			sprintf(buffer+i2,"Const %s=%d\r\n",
+				ProjectInfo.res.pCursorResInfo[i].IdName,
+				i3);
+			i2+=lstrlen(buffer+i2);
+		}
+		for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++,i3++){
+			sprintf(buffer+i2,"Const %s=%d\r\n",
+				ProjectInfo.res.pBitmapResInfo[i].IdName,
+				i3);
+			i2+=lstrlen(buffer+i2);
+		}
+		for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++,i3++){
+			sprintf(buffer+i2,"Const %s=%d\r\n",
+				ProjectInfo.res.pIconResInfo[i].IdName,
+				i3);
+			i2+=lstrlen(buffer+i2);
+		}
+
+		//保存（resource.ab）
+		lstrcpy(temporary,"resource.ab");
+		GetFullPath(temporary,ProjectInfo.dir);
+		WriteBuffer(temporary,buffer,i2);
+
+		i2=0;
+		for(i=0;i<ProjectInfo.res.NumberOfCursorRes;i++){
+			sprintf(buffer+i2,"%s CURSOR \"%s\"\r\n",
+				ProjectInfo.res.pCursorResInfo[i].IdName,
+				ProjectInfo.res.pCursorResInfo[i].path);
+			i2+=lstrlen(buffer+i2);
+		}
+		for(i=0;i<ProjectInfo.res.NumberOfBitmapRes;i++){
+			sprintf(buffer+i2,"%s BITMAP \"%s\"\r\n",
+				ProjectInfo.res.pBitmapResInfo[i].IdName,
+				ProjectInfo.res.pBitmapResInfo[i].path);
+			i2+=lstrlen(buffer+i2);
+		}
+		for(i=0;i<ProjectInfo.res.NumberOfIconRes;i++){
+			sprintf(buffer+i2,"%s ICON \"%s\"\r\n",
+				ProjectInfo.res.pIconResInfo[i].IdName,
+				ProjectInfo.res.pIconResInfo[i].path);
+			i2+=lstrlen(buffer+i2);
+		}
+
+		//マニフェスト
+		if(ProjectInfo.dwOption&PJ_OP_RC_MANIFEST){
+			sprintf(buffer+i2,"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST \"%s\"\r\n",
+				ProjectInfo.szManifestPath);
+			i2+=lstrlen(buffer+i2);
+		}
+
+		//保存
+		lstrcpy(temporary,ProjectInfo.ResourceFileName);
+		GetFullPath(temporary,ProjectInfo.dir);
+		WriteBuffer(temporary,buffer,i2);
+	}
+
+
+	///////////////////////////////////////
+	//インデックスファイル（*.idx）を作成
+	buffer[0]=0;
+	lstrcpy(buffer,"' インデックス プログラム\r\n");
+	i2=lstrlen(buffer);
+	if(ProjectInfo.dwOption&PJ_OP_SOURCE_MASK){
+		if(ProjectInfo.dwOption&PJ_OP_STRICT){
+		lstrcpy(buffer+i2,"\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"#strict");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\r\n");
+		i2+=lstrlen(buffer+i2);
+		}
+		lstrcpy(buffer+i2,"\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"'Win32APIの定義ファイル\r\n");
+		i2+=lstrlen(buffer+i2);
+		if(ProjectInfo.dwOption&PJ_OP_MMSYSTEM){
+			lstrcpy(buffer+i2,"#include <api_mmsys.sbp>\r\n");
+			i2+=lstrlen(buffer+i2);
+		}
+		if(ProjectInfo.dwOption&PJ_OP_COMMCTRL){
+			lstrcpy(buffer+i2,"#include <api_commctrl.sbp>\r\n");
+			i2+=lstrlen(buffer+i2);
+		}
+		if(ProjectInfo.dwOption&PJ_OP_RICHEDIT){
+			lstrcpy(buffer+i2,"#include <api_richedit.sbp>\r\n");
+			i2+=lstrlen(buffer+i2);
+		}
+		if(ProjectInfo.dwOption&PJ_OP_WINSOCK){
+			lstrcpy(buffer+i2,"#include <api_winsock2.sbp>\r\n");
+			i2+=lstrlen(buffer+i2);
+		}
+	}
+	if(ProjectInfo.NumberOfWindows){
+		lstrcpy(buffer+i2,"\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ制御プログラム\r\n");
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"#include \"Callback.wbp\"\r\n");
+		i2+=lstrlen(buffer+i2);
+	}
+	if(ProjectInfo.pobj_DBFileInfo->iNum>1){
+		lstrcpy(buffer+i2,"\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"'プロジェクト内のプログラム ファイル\r\n");
+		i2+=lstrlen(buffer+i2);
+		for(i=1;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
+			//メインファイルは含まない
+			sprintf(buffer+i2,"#include \"%s\"\r\n",ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->m_path);
+			i2+=lstrlen(buffer+i2);
+		}
+	}
+	if(ProjectInfo.NumberOfWindows){
+		lstrcpy(buffer+i2,"\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"'RADツールが生成するウィンドウ生成プログラム\r\n");
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"#include \"MakeWindow.wbp\"\r\n");
+		i2+=lstrlen(buffer+i2);
+	}
+	if(ProjectInfo.ResourceFileName[0]){
+		//リソースファイルが含まれる場合
+		lstrcpy(buffer+i2,"\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"'リソースファイル\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"#include \"resource.ab\"\r\n");
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"#resource \"%s.rc\"\r\n",ProjectInfo.name);
+		i2+=lstrlen(buffer+i2);
+	}
+
+	//保存
+	sprintf(temporary,"%s%s.idx",ProjectInfo.dir,ProjectInfo.name);
+	WriteBuffer(temporary,buffer,i2);
+
+
+	if(ProjectInfo.NumberOfWindows){
+		/////////////////////////////////////////////////////
+		//ウィンドウ関連ファイル（*.wnd）を作成、保存
+		if(ProjectInfo.ModifyOfMaterial){
+			sprintf(temporary,"%s%s.wnd",ProjectInfo.dir,ProjectInfo.name);
+			SaveWindowFile(temporary,ProjectInfo.pWindowInfo,ProjectInfo.NumberOfWindows);
+		}
+
+		//.wbpファイルを生成
+		SaveWindowProgram();
+	}
+
+
+	MakeWorkFile();
+
+	SetStatusText("");
+
+	ProjectInfo.modify=0;
+	ProjectInfo.ModifuOfResource=0;
+}
+
+BOOL SetProjectToRun(void){
+	extern PROJECTINFO ProjectInfo;
+	char temporary[MAX_PATH];
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+
+	if(ProjectInfo.pobj_DBFileInfo->iNum==0){
+		//"プログラム ファイルがプロジェクトに存在しません。"
+		MessageBox(hOwner,STRING_ERROR_NOFILE,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+		return 0;
+	}
+
+	extern char *lpszCompilerName;
+	sprintf(temporary,"%s%s",pj_editor_Dir,lpszCompilerName);
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind==INVALID_HANDLE_VALUE){
+		//"BasicCompiler.exe が見つかりません"
+		MessageBox(hOwner,STRING_ERROR_NOBASICCOMPILER,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+		return 0;
+	}
+	FindClose(hFind);
+
+	//プロジェクト構造のバージョンが違う時は、再保存する
+	if(ProjectInfo.dwVersion<PROJECT_VERSION)
+		ProjectInfo.ModifyOfMaterial=1;
+
+	//保存確認
+	if(!ProjectModifyCheck(1)) return 0;
+
+	return 1;
+}
+BOOL IsNeedCompileForProject(BOOL bDebug){
+	extern PROJECTINFO ProjectInfo;
+	int i2;
+	char temporary[MAX_PATH];
+	HANDLE hFind,hFile;
+	WIN32_FIND_DATA wfd;
+	FILETIME SourceTime,ExeTime;
+
+	if(bDebug) lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
+	else lstrcpy(temporary,ProjectInfo.lpszOutput_Release);
+	GetFullPath(temporary,ProjectInfo.dir);
+
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind==INVALID_HANDLE_VALUE) return 1;
+	FindClose(hFind);
+
+	hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	GetFileTime(hFile,NULL,NULL,&ExeTime);
+	CloseHandle(hFile);
+
+	for(i2=0;i2<ProjectInfo.pobj_DBFileInfo->iNum;i2++){
+		ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i2]->GetFullPath(temporary);
+		hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+		GetFileTime(hFile,NULL,NULL,&SourceTime);
+		CloseHandle(hFile);
+
+		if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
+			SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
+			SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
+	}
+	if(ProjectInfo.NumberOfWindows){
+		//CallBack.wbp
+		lstrcpy(temporary,"CallBack.wbp");
+		GetFullPath(temporary,ProjectInfo.dir);
+		hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+		GetFileTime(hFile,NULL,NULL,&SourceTime);
+		CloseHandle(hFile);
+		if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
+			SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
+			SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
+
+		//MakeWindow.wbp
+		lstrcpy(temporary,"MakeWindow.wbp");
+		GetFullPath(temporary,ProjectInfo.dir);
+		hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+		GetFileTime(hFile,NULL,NULL,&SourceTime);
+		CloseHandle(hFile);
+		if(SourceTime.dwHighDateTime>ExeTime.dwHighDateTime||
+			SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
+			SourceTime.dwLowDateTime>ExeTime.dwLowDateTime) return 1;
+	}
+	return 0;
+}
Index: /ProjectEditor/ProjectEditor.cpp
===================================================================
--- /ProjectEditor/ProjectEditor.cpp	(revision 3)
+++ /ProjectEditor/ProjectEditor.cpp	(revision 3)
@@ -0,0 +1,3062 @@
+#include "ProjectEditor.h"
+
+
+#if defined HeapAlloc
+#define MEM_MAX 65536
+LPVOID pCheckMem[MEM_MAX];
+int now;
+#undef HeapAlloc
+#undef HeapReAlloc
+LPVOID CheckHeapAlloc(HANDLE hf,DWORD dwFlags,DWORD dwBytes){
+	LPVOID ret;
+	ret=HeapAlloc(hf,dwFlags,dwBytes);
+	pCheckMem[now]=ret;
+
+	//この部分にnowのチェックを挿入
+
+
+	now++;
+	if(now>=MEM_MAX){
+		MessageBox(0,"pCheckMemの最大値を超えました","Check",0);
+	}
+	return ret;
+}
+LPVOID CheckHeapReAlloc(HANDLE hf,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes){
+	int i;
+	LPVOID ret;
+	for(i=0;;i++){
+		if(lpMem==pCheckMem[i]) break;
+		if(i>=MEM_MAX){
+			MessageBox(0,"エラー","CheckHeapReAlloc",0);
+			break;
+		}
+	}
+	ret=HeapReAlloc(hf,dwFlags,lpMem,dwBytes);
+	pCheckMem[i]=ret;
+	return ret;
+}
+void HeapDefaultFree(LPVOID lpMem){
+	int i;
+	for(i=0;;i++){
+		if(lpMem==pCheckMem[i]) break;
+		if(i>=MEM_MAX){
+			MessageBox(0,"エラー","HeapDefaultFree",0);
+			break;
+		}
+	}
+	pCheckMem[i]=0;
+	HeapFree(hHeap,0,lpMem);
+}
+void CheckHeapCheck(){
+	int i,i2;
+	char temp[100];
+	temp[0]=0;
+	for(i=0,i2=0;i<MEM_MAX;i++){
+		if(pCheckMem[i]){
+			sprintf(temp+lstrlen(temp),"%d\r\n",i);
+			i2++;
+			if(i2==10){
+				lstrcat(temp,"これ以上の未解放が確認されています");
+				break;
+			}
+		}
+	}
+	if(temp[0]) MessageBox(0,temp,"Check - BasicCompiler.exe",0);
+}
+#define HeapAlloc CheckHeapAlloc
+#define HeapReAlloc CheckHeapReAlloc
+#else
+void HeapDefaultFree(LPVOID lpMem){
+	HeapFree(hHeap,0,lpMem);
+}
+#endif
+
+#ifdef DeleteObject
+#undef DeleteObject
+BOOL CheckDeleteObject(HGDIOBJ hObject){
+	BOOL bRet;
+	bRet=DeleteObject(hObject);
+
+	if(bRet==0){
+		MessageBox(0,"DeleteObject Error","Check",0);
+	}
+	return bRet;
+}
+#define DeleteObject CheckDeleteObject
+#endif
+
+
+void ToBigChar(char str[]){
+	int i;
+	for(i=0;TRUE;i++){
+		str[i]=(char)toupper((int)str[i]);
+		if(str[i]=='\0') break;
+	}
+}
+int GetWndNum(HWND hChild){
+	int i;
+	if(!IsWindow(hChild)) return -1;
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(hChild==MdiInfo[i].hwnd) break;
+	}
+	if(i==MAX_WNDNUM) i=-1;
+	return i;
+}
+int GetNowWndNum(void){
+	return GetWndNum(GetWindow(hClient,GW_CHILD));
+}
+int GetFileNum(int WndNum){
+	int i;
+	char temporary[MAX_PATH];
+	for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
+
+		ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
+
+		if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) return i;
+	}
+	return -1;
+}
+
+void SendTextEditResizeEvent(HWND hwnd){
+	RECT rect;
+	GetClientRect(hwnd,&rect);
+	ResizeTextEditWnd(hwnd,rect.right,rect.bottom);
+}
+
+void RedrawAllWindow(void){
+	HWND hChild;
+	hChild=GetWindow(hClient,GW_CHILD);
+	if(hChild) ResetTextEditFont(GetWindow(hChild,GW_CHILD));
+	while(hChild){
+		int WndNum;
+		WndNum=GetWndNum(hChild);
+		if(WndNum==-1) break;
+
+		if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+			//コントロールタブスペースの幅と行番号の文字数を更新
+			MdiInfo[WndNum].pmti->iWidth_ControlTabSpace=
+				GetControlTabSpace(WndNum,&MdiInfo[WndNum].pmti->iLineNumberTextCount);
+
+			InvalidateRect(MdiInfo[WndNum].pmti->hEdit,NULL,0);
+			InvalidateRect(MdiInfo[WndNum].pmti->pobj_Ruler->hRulerWnd,NULL,0);
+
+			SendTextEditResizeEvent(MdiInfo[WndNum].hwnd);
+		}
+		else{
+			HWND hEdit;
+			hEdit=GetWindow(hChild,GW_CHILD);
+			InvalidateRect(hEdit,NULL,0);
+		}
+
+		hChild=GetWindow(hChild,GW_HWNDNEXT);
+	}
+}
+
+int DocumentModifyCheck(HWND hChild){	//終了保存確認
+	int BoxID,WndNum,sw;
+	char str[MAX_PATH],temporary[MAX_PATH];
+
+	WndNum=GetWndNum(hChild);
+	sw=0;
+	if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+		if(MdiInfo[WndNum].pmti->bModify) sw=1;
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+		if(MdiInfo[WndNum].MdiIconEditInfo->bModify) sw=1;
+	}
+
+	if(sw){
+		GetWindowText(hChild,temporary,MAX_PATH);
+
+		//"\"%s\" ファイルは変更されています。保存しますか？"
+		sprintf(str,STRING_MODIFYCHECK_FILE,temporary);
+		BoxID=MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONINFORMATION);
+
+		if(BoxID==IDYES){
+			if(!SaveDocument(hChild,NULL)) return 0;
+		}
+		else if(BoxID==IDCANCEL) return 0;
+	}
+	return 1;
+}
+void SetStatusText(char *MenuText){
+	//////////////////////////
+	// ステータスバーの更新
+	//////////////////////////
+
+	int WndNum;
+	double BufSize;
+	char temporary[255];
+	HWND hChild;
+
+	if(MenuText){
+		SendMessage(hStatusBar,SB_SETTEXT,0,(long)MenuText);
+		if((char *)MenuText!=(char *)CmdMsg) CmdMsg[0]=0;
+	}
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	WndNum=GetWndNum(hChild);
+	if(WndNum==-1) return;
+	hChild=GetWindow(hChild,GW_CHILD);
+	if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+		//////////////////////
+		// テキストエディタ
+		//////////////////////
+
+		//サイズ
+		BufSize=(double)lstrlen(MdiInfo[WndNum].pmti->buffer);
+		if(IsWindow(hChild)){
+			if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize);
+			else if(BufSize<1024*1024){
+				BufSize/=1024;
+				sprintf(temporary,"%s: %.2fKB",STRING_SIZE,BufSize);
+			}
+			else{
+				BufSize/=1024*1024;
+				sprintf(temporary,"%s: %.2fMB",STRING_SIZE,BufSize);
+			}
+		}
+		else temporary[0]=0;
+		SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
+
+		//行と桁
+		if(IsWindow(hChild)){
+#if defined(JPN)
+			//日本語
+			sprintf(temporary,"%d 行、%d 列",
+				MdiInfo[WndNum].pmti->StartCaretPos.y+1,
+				MdiInfo[WndNum].pmti->StartCaretPos.x+1);
+#else
+			//英語
+			sprintf(temporary,"%d : %d",
+				MdiInfo[WndNum].pmti->StartCaretPos.y+1,
+				MdiInfo[WndNum].pmti->StartCaretPos.x+1);
+#endif
+		}
+		else temporary[0]=0;
+		SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
+
+		//文字コード
+		nkf.GetCharCodeName(MdiInfo[WndNum].pmti->iCharCode,temporary);
+		SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary);
+
+		//文字コード
+		nkf.GetLfCodeName(MdiInfo[WndNum].pmti->iLfCode,temporary);
+		SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary);
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+		////////////////
+		// RADツール
+		////////////////
+
+		int WndInfoNum;
+		WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+		if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){
+			sprintf(temporary,"pos %d, %d",
+				RadInfo.DraggingRect[0].left-MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
+				RadInfo.DraggingRect[0].top-MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
+			SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
+			sprintf(temporary,"size %d * %d",
+				RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left,
+				RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
+			SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
+		}
+		else if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+			SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0");
+			sprintf(temporary,"size %d * %d",ProjectInfo.pWindowInfo[WndInfoNum].size.cx,ProjectInfo.pWindowInfo[WndInfoNum].size.cy);
+			SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
+		}
+		else{
+			sprintf(temporary,"pos %d, %d",
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x,
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y);
+			SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
+			sprintf(temporary,"size %d * %d",
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cx,
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cy);
+			SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
+		}
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
+		//////////////////
+		// MENU エディタ
+		//////////////////
+
+		SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
+		SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+		//////////////////
+		// ICON エディタ
+		//////////////////
+
+		SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
+		SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
+	}
+}
+void ResetState_UndoMenu(void){				//「元に戻す、やり直し」のメニュー表示制御
+	int i,i2;
+	HWND hChild;
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	i=GetWndNum(hChild);
+	if(i==-1){
+		pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+		pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
+		pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+		pobj_StandardToolbar->EnableItem(IDM_REDO,0);
+	}
+	else if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
+		i2=MdiInfo[i].edit_undo->NowPos-1;
+		if(i2==-1) i2=MAX_UNDONUM-1;
+		if(!MdiInfo[i].edit_undo->Command[i2]){
+			pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
+		}
+		else{
+			pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
+		}
+		if(!MdiInfo[i].edit_undo->Command[MdiInfo[i].edit_undo->NowPos]){
+			pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_REDO,0);
+		}
+		else{
+			pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_REDO,1);
+		}
+	}
+	else if(MdiInfo[i].DocType==WNDTYPE_RAD){
+		i2=MdiInfo[i].MdiRadInfo->undo.NowPos-1;
+		if(i2==-1) i2=MAX_UNDONUM-1;
+		if(!MdiInfo[i].MdiRadInfo->undo.Command[i2]){
+			pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
+		}
+		else{
+			pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
+		}
+		if(!MdiInfo[i].MdiRadInfo->undo.Command[MdiInfo[i].MdiRadInfo->undo.NowPos]){
+			pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_REDO,0);
+		}
+		else{
+			pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_REDO,1);
+		}
+	}
+	else if(MdiInfo[i].DocType==WNDTYPE_MENU){
+		pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+		pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
+
+		pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+		pobj_StandardToolbar->EnableItem(IDM_REDO,0);
+	}
+	else if(MdiInfo[i].DocType==WNDTYPE_ICONEDIT){
+		i2=MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos-1;
+		if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1;
+		if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[i2]){
+			pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
+		}
+		else{
+			pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
+		}
+		if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos]){
+			pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_REDO,0);
+		}
+		else{
+			pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_REDO,1);
+		}
+	}
+}
+void ResetState_ConvMenu(BOOL bEnable){
+	int MenuMsg;
+	if(bEnable)
+		MenuMsg=MF_BYCOMMAND|MF_ENABLED;
+	else MenuMsg=MF_BYCOMMAND|MF_GRAYED;
+
+	pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_SMALL,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_BIG,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CONV_HALF,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CONV_MULTI,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CONV_KATAKANA,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CONV_HIRAGANA,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CONV_SPACE,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CONV_TAB,MenuMsg);
+#ifdef THETEXT
+	pobj_MainMenu->EnableItem(IDM_CONV_HASRETURN,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CONV_QUOTE,MenuMsg);
+#else
+	pobj_MainMenu->EnableItem(IDM_CODEFORMAT,MenuMsg);
+#endif
+}
+void ResetState_PrintMenu(void);
+void ResetState_EditMenu(void){				//編集メニューの表示制御
+	HWND hChild;
+	int WndNum;
+	long MenuMsg,ToolbarMsg;
+
+	//印刷メニューの状態を設定
+	ResetState_PrintMenu();
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	if(!IsWindow(hChild)){
+		pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
+#ifdef THETEXT
+		pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
+#endif
+		pobj_StandardToolbar->EnableItem(IDM_FIND,0);
+
+		pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
+		pobj_StandardToolbar->EnableItem(IDM_CUT,0);
+		pobj_StandardToolbar->EnableItem(IDM_COPY,0);
+		pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
+
+		ResetState_ConvMenu(0);
+
+		ResetState_UndoMenu();
+		return;
+	}
+	WndNum=GetWndNum(hChild);
+	if(WndNum==-1) return;
+	if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+		pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
+		pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED);
+		pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_ENABLED);
+#ifdef THETEXT
+		pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_ENABLED);
+#endif
+		pobj_StandardToolbar->EnableItem(IDM_FIND,1);
+
+		BOOL bConvEnable;
+		hChild=GetWindow(hChild,GW_CHILD);
+		if(!(
+			MdiInfo[WndNum].pmti->StartCaretPos.x==MdiInfo[WndNum].pmti->EndCaretPos.x&&
+			MdiInfo[WndNum].pmti->StartCaretPos.y==MdiInfo[WndNum].pmti->EndCaretPos.y
+			)){
+			MenuMsg=MF_BYCOMMAND|MF_ENABLED;
+			ToolbarMsg=1;
+
+			bConvEnable=1;
+		}
+		else{
+			MenuMsg=MF_BYCOMMAND|MF_GRAYED;
+			ToolbarMsg=0;
+
+			bConvEnable=0;
+		}
+		pobj_MainMenu->EnableItem(IDM_CUT,MenuMsg);
+		pobj_MainMenu->EnableItem(IDM_COPY,MenuMsg);
+		pobj_MainMenu->EnableItem(IDM_DELETE,MenuMsg);
+		EnableMenuItem(hEditMenu,IDM_CUT,MenuMsg);
+		EnableMenuItem(hEditMenu,IDM_COPY,MenuMsg);
+		EnableMenuItem(hEditMenu,IDM_DELETE,MenuMsg);
+		pobj_StandardToolbar->EnableItem(IDM_CUT,ToolbarMsg);
+		pobj_StandardToolbar->EnableItem(IDM_COPY,ToolbarMsg);
+
+		if(IsClipboardFormatAvailable(CF_TEXT)){
+			pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
+		}
+		else{
+			pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
+		}
+
+
+		//変換コマンド
+		ResetState_ConvMenu(bConvEnable);
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+		//検索、置換、文字カウントを無効化
+		pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
+#ifdef THETEXT
+		pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
+#endif
+		pobj_StandardToolbar->EnableItem(IDM_FIND,0);
+
+		if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+			//切り取り、コピー、削除を有効化
+			pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
+			pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
+			pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_CUT,0);
+			pobj_StandardToolbar->EnableItem(IDM_COPY,0);
+		}
+		else{
+			//切り取り、コピー、削除を無効化
+			pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
+			pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
+			pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_CUT,1);
+			pobj_StandardToolbar->EnableItem(IDM_COPY,1);
+		}
+
+		//すべて選択を有効化
+		pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
+
+		if(IsClipboardFormatAvailable(dwRadClipboardID)){
+			pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
+		}
+		else{
+			pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
+		}
+
+		ResetState_ConvMenu(0);
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
+		//検索、置換、文字カウントを無効化
+		pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
+#ifdef THETEXT
+		pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
+#endif
+		pobj_StandardToolbar->EnableItem(IDM_FIND,0);
+
+		pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
+		EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
+		pobj_StandardToolbar->EnableItem(IDM_CUT,0);
+		pobj_StandardToolbar->EnableItem(IDM_COPY,0);
+		pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
+
+		ResetState_ConvMenu(0);
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+		//検索、置換、文字カウントを無効化
+		pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
+		pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
+#ifdef THETEXT
+		pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
+#endif
+		pobj_StandardToolbar->EnableItem(IDM_FIND,0);
+
+		if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==0){
+			//切り取り、コピー、削除を無効化
+			pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
+			pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
+			pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
+			EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_CUT,0);
+			pobj_StandardToolbar->EnableItem(IDM_COPY,0);
+		}
+		else{
+			//切り取り、コピー、削除を有効化
+			pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
+			pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
+			pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
+			EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_CUT,1);
+			pobj_StandardToolbar->EnableItem(IDM_COPY,1);
+		}
+
+		//すべて選択を有効化
+		pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
+
+		if(IsClipboardFormatAvailable(CF_BITMAP)){
+			//貼り付けを有効化
+			pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
+			pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
+		}
+		else{
+			//貼り付けを無効化
+			pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
+			pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
+		}
+
+		ResetState_ConvMenu(0);
+	}
+
+	ResetState_UndoMenu();
+}
+void ResetState_ViewMenu(void){
+	// 表示 メニューの状態を設定
+
+
+#ifdef THETEXT
+	pobj_MainMenu->CheckMenu(IDM_RIGHT_TURN,pobj_nv->bRightTurn);
+#endif
+}
+void ResetState_PrintMenu(void){				//編集メニューの表示制御
+	HWND hChild;
+	int WndNum;
+	hChild=GetWindow(hClient,GW_CHILD);
+	if(!IsWindow(hChild)){
+		pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
+
+		if(bProfessional){
+			pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
+		}
+
+		pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
+		return;
+	}
+	WndNum=GetWndNum(hChild);
+	if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+		pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED);
+
+		if(bProfessional){
+			pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED);
+		}
+
+		pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_ENABLED);
+	}
+	else{
+		pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
+
+		if(bProfessional){
+			pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
+		}
+
+		pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
+	}
+}
+void ResetState_DocMenu(void){
+	long MenuMsg,ToolbarMsg;
+	HWND hChild;
+
+	hChild=GetWindow(hClient,GW_CHILD);
+
+
+	/////////////////////////////////////////
+	// 共通ドキュメント メニューの状態を設定
+	/////////////////////////////////////////
+
+	if(!IsWindow(hChild)){
+		MenuMsg=MF_GRAYED;
+		ToolbarMsg=0;
+	}
+	else{
+		MenuMsg=MF_ENABLED;
+		ToolbarMsg=1;
+	}
+	pobj_MainMenu->EnableItem(IDM_CLOSE,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_SAVE,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_NEWSAVE,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_CODE_SAVE,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_ALLSAVE,MenuMsg);
+
+	pobj_StandardToolbar->EnableItem(IDM_CLOSE,ToolbarMsg);
+	pobj_StandardToolbar->EnableItem(IDM_SAVE,ToolbarMsg);
+	pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,ToolbarMsg);
+
+
+#ifndef THETEXT
+	/////////////////////////////////////////////////
+	// プロジェクトドキュメント メニューの状態を設定
+	/////////////////////////////////////////////////
+
+	if(ProjectInfo.name[0]){
+		pobj_MainMenu->EnableItem(IDM_ALLSAVE,MF_ENABLED);
+		pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,1);
+
+		MenuMsg=MF_ENABLED;
+		ToolbarMsg=TBSTATE_ENABLED;
+	}
+	else{
+		MenuMsg=MF_GRAYED;
+		ToolbarMsg=TBSTATE_INDETERMINATE;
+	}
+	pobj_MainMenu->EnableItem(IDM_PROJECT_SAVE,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_PROJECT_CLOSE,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_PROJECT_FOLDER_OPEN,MenuMsg);
+	pobj_MainMenu->EnableItem(IDM_PROJECT_OPTION,MenuMsg);
+
+	//デバッガ メニューの状態を設定
+	pobj_Debugger->ResetCommandEnabled();
+#endif
+
+
+	//編集メニューの状態を設定
+	ResetState_EditMenu();
+
+	//表示メニューの状態を設定
+	ResetState_ViewMenu();
+}
+void DuplicateTitleCheck(char *lpszTitle){
+	int i;
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd){
+			if(lstrcmpi(MdiInfo[i].title,lpszTitle)==0){
+				lstrcat(lpszTitle,"_");
+				DuplicateTitleCheck(lpszTitle);
+				return;
+			}
+		}
+	}
+}
+HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor){
+	int i;
+	char str[MAX_PATH],str2[32],*buffer;
+	HWND hChild,hEdit;
+	RECT rect;
+	int iCharCode=NKF_SHIFT_JIS;
+	int iLfCode=LFCODE_CRLF;
+
+	if(filepath){
+
+		//すでに指定されたファイルが開かれている場合
+		hChild=GetWindow(hClient,GW_CHILD);
+		while(hChild){
+			i=GetWndNum(hChild);
+			if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
+				if(lstrcmpi(MdiInfo[i].path,filepath)==0) break;
+			}
+			hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+		}
+		if(hChild){
+			//前面に表示して終了
+			BringWindowToTop(hChild);
+			return hChild;
+		}
+
+
+		//////////////////////////////////////////////////////
+		//ファイル読み込み（正常に読み込めるかの確認も含む）
+		//////////////////////////////////////////////////////
+
+		HANDLE hFile;
+		hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+		if(hFile==INVALID_HANDLE_VALUE){
+			sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);
+			MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return 0;
+		}
+		int length;
+		length=GetFileSize(hFile,NULL);
+
+		char *temp;
+		temp=(char *)HeapAlloc(hHeap,0,length+1);
+		DWORD dw;
+		ReadFile(hFile,temp,length,&dw,NULL);
+		CloseHandle(hFile);
+		for(i=0;i<length;i++){
+			if(temp[i]=='\0') temp[i]=' ';
+		}
+		temp[length]=0;
+
+
+		///////////////////////
+		// 改行コードを判別
+		///////////////////////
+
+		char *temp2;
+		for(i=0;i<length;i++){
+			if(temp[i]=='\r'){
+				if(temp[i+1]=='\n')
+					iLfCode=LFCODE_CRLF;
+				else
+					iLfCode=LFCODE_CR;
+				break;
+			}
+			if(temp[i]=='\n'){
+				iLfCode=LFCODE_LF;
+				break;
+			}
+		}
+
+		//改行コードを変換
+		if(iLfCode==LFCODE_CR||iLfCode==LFCODE_LF){
+			temp2=nkf.ToCRLF(iLfCode,temp);
+			HeapDefaultFree(temp);
+			temp=temp2;
+
+			length=lstrlen(temp);
+		}
+
+
+		/////////////////////
+		// Shift-JISに変換
+		/////////////////////
+
+		buffer=(char *)HeapAlloc(hHeap,0,length*2+1);
+		nkf.pSetNkfOption("-sx");	//Shift-JISに変換（xは半角カタカナを全角に変換しないオプション）
+		nkf.pNkfConvert(buffer,temp);
+		buffer=(char *)HeapReAlloc(hHeap,0,buffer,lstrlen(buffer)+1);
+		HeapDefaultFree(temp);
+
+		//変換前の文字コードを判別
+		iCharCode=nkf.pNkfGetKanjiCode();
+		if(iCharCode<NKF_CODE_MIN||NKF_CODE_MAX<iCharCode){
+			//判別不能な場合は、Shift-JISにする
+			iCharCode=NKF_SHIFT_JIS;
+		}
+		else if(iCharCode==NKF_EUC||iCharCode==NKF_ISO_2022_JP){
+			//EUC、JISの場合で、判別不能な場合は、Shift-JISを優先
+			for(i=0;;i++){
+				if(buffer[i]=='\0'){
+					//半角コードのみ
+					iCharCode=NKF_SHIFT_JIS;
+					break;
+				}
+				if(IsDBCSLeadByte(buffer[i])) break;
+			}
+		}
+
+
+		//////////////////////////
+		// ファイルパスをセット
+		//////////////////////////
+
+		_splitpath(filepath,NULL,NULL,str,str2);
+		lstrcat(str,str2);
+	}
+	else{
+		buffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+		DocumentCounter++;
+		sprintf(str,"Document[%d]",DocumentCounter);
+	}
+
+	MDICREATESTRUCT mdic;
+	mdic.szClass="MDIClientWindow_TextEdit";
+	mdic.hOwner=hInst;
+	mdic.x=CW_USEDEFAULT;
+	mdic.y=CW_USEDEFAULT;
+	mdic.cx=CW_USEDEFAULT;
+	mdic.cy=CW_USEDEFAULT;
+	mdic.szTitle=str;
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	if(IsWindow(hChild)){
+		if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
+		else mdic.style=0;
+	}
+	else{
+		if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE;
+		else mdic.style=0;
+	}
+
+	//ファイルアイコンをセット
+	SHFILEINFO shfi;
+	if(filepath)
+		SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
+	else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);;
+	mdic.lParam=(LPARAM)shfi.hIcon;
+
+	mdic.style|=WS_CLIPCHILDREN;
+	hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic);	//ウィンドウ作成
+
+	//TextEditorコントロールを設置
+	GetClientRect(hChild,&rect);
+	hEdit=CreateWindow("TextEditor",NULL,
+		WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE,
+		0,0,0,0,
+		hChild,NULL,hInst,NULL);
+
+	//ウィンドウのID登録
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd==0){
+			MdiInfo[i].hwnd=hChild;
+			MdiInfo[i].DocType=DocumentType;
+			DuplicateTitleCheck(str);
+			MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(str)+1);
+			lstrcpy(MdiInfo[i].title,str);
+			if(filepath){
+				MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(filepath)+1);
+				lstrcpy(MdiInfo[i].path,filepath);
+			}
+			else{
+				MdiInfo[i].path=(char *)GlobalAlloc(GPTR,1);
+			}
+
+			MdiInfo[i].pmti=(MDITEXTEDITINFO *)HeapAlloc(hHeap,0,sizeof(MDITEXTEDITINFO));
+
+			MdiInfo[i].pmti->hEdit=hEdit;
+			MdiInfo[i].pmti->pobj_WebResult=new CWebResult(hChild);
+			MdiInfo[i].pmti->pobj_Ruler=new CRuler(hChild,i);
+			MdiInfo[i].pmti->hIcon=shfi.hIcon;
+			MdiInfo[i].pmti->buffer=buffer;
+			MdiInfo[i].pmti->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
+			MdiInfo[i].pmti->iUnderStart=-1;
+			MdiInfo[i].pmti->iUnderEnd=-1;
+			MdiInfo[i].pmti->StartCaretPos.x=0;
+			MdiInfo[i].pmti->StartCaretPos.y=0;
+			MdiInfo[i].pmti->EndCaretPos.x=0;
+			MdiInfo[i].pmti->EndCaretPos.y=0;
+			MdiInfo[i].pmti->Temp_UpDown_CaretXPos=-1;
+			MdiInfo[i].pmti->bAutoScroll=0;
+			MdiInfo[i].pmti->iWidth_ControlTabSpace=
+				GetControlTabSpace(i,&MdiInfo[i].pmti->iLineNumberTextCount);
+			MdiInfo[i].pmti->iCharCode=iCharCode;
+			MdiInfo[i].pmti->iLfCode=iLfCode;
+			MdiInfo[i].pmti->bModify=0;
+
+			MdiInfo[i].IndentStr=0;
+
+			MdiInfo[i].edit_undo=(TEXTEDIT_UNDOSTATE *)GlobalAlloc(GPTR,sizeof(TEXTEDIT_UNDOSTATE));
+			MdiInfo[i].edit_undo->NowPos=0;
+
+			int flag;
+			if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED;
+			else flag=0;
+			SendTextEditResizeEvent(hChild);
+			break;
+		}
+	}
+
+	//ワードカラーをセット
+	if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(i);
+
+	//Docコンボボックスに追加
+	extern HWND hDocCombo;
+	i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
+	SendMessage(hDocCombo,CB_SETCURSEL,i,0);
+
+	//タブに追加
+	pobj_MainTab->insert(str,1,TabColor);
+
+	SetFocus(hEdit);
+	SetStatusText(NULL);
+
+	//メニュー状態を設定
+	ResetState_DocMenu();
+
+	return hChild;
+}
+void CreateNewFile(void){
+
+#ifdef THETEXT
+	NewTextEditWindow(NULL,WNDTYPE_TEXT);
+	return;
+#else
+	int FileType;
+	BOOL bAddToProject;
+	char temporary[MAX_PATH];
+
+	FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,DlgNewFile);
+	if(FileType==-1) return;
+
+	if(FileType&0x00008000){
+		bAddToProject=1;
+		FileType&=0x0FFF;
+		lstrcpy(temporary,NewFileName);
+		if(!strstr(temporary,".")) lstrcat(temporary,".ab");
+		GetFullPath(temporary,ProjectInfo.dir);
+	}
+	else bAddToProject=0;
+
+	switch(FileType){
+		case FT_BASICPROGRAM:		//Basicプログラム
+		case FT_SUBPROGRAM:
+			if(bAddToProject){
+				WriteBuffer(temporary,0,0);
+				NewTextEditWindow(temporary,WNDTYPE_BASIC);
+				Project_File_Insert(temporary);
+			}
+			else NewTextEditWindow(NULL,WNDTYPE_BASIC);
+			break;
+
+		case FT_PROJECT:
+			DlgNewProjectWizard(hOwner);
+			break;
+
+		case FT_TEXT:
+			NewTextEditWindow(NULL,WNDTYPE_TEXT);
+			break;
+
+		case FT_HTML:
+			NewTextEditWindow(NULL,WNDTYPE_HTML);
+			break;
+
+		case FT_ICON:
+			NewIconEditWindow(NULL);
+			break;
+	}
+#endif
+}
+void CloseDocWindow(int WndNum){
+	int i2,i3;
+
+	MdiInfo[WndNum].hwnd=0;
+
+	//ドキュメントコンボボックスから文字列を消去
+	extern HWND hDocCombo;
+	i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
+	SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
+	InvalidateRect(hDocCombo,NULL,1);
+
+	//タブコントロールからアイテムを消去
+	if(pobj_MainTab) pobj_MainTab->delete_item(MdiInfo[WndNum].title,1);
+
+
+	GlobalFree(MdiInfo[WndNum].title);
+	GlobalFree(MdiInfo[WndNum].path);
+
+	if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+		////////////////////////////
+		// テキストエディタを閉じる
+		////////////////////////////
+
+		extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+		if(ComplementWndInfo.hWnd){
+			//コード補完リストを破棄する
+			DestroyWindow(ComplementWndInfo.hWnd);
+			ComplementWndInfo.hWnd=0;
+		}
+
+		for(i2=0;i2<MAX_UNDONUM;i2++){
+			if(MdiInfo[WndNum].edit_undo->Command[i2])
+				TextEdit_DeleteUndoData(WndNum,i2);
+		}
+		GlobalFree(MdiInfo[WndNum].edit_undo);
+
+		HeapDefaultFree(MdiInfo[WndNum].pmti->buffer);
+		HeapDefaultFree(MdiInfo[WndNum].pmti->pColorRef);
+
+		if(MdiInfo[WndNum].IndentStr) HeapDefaultFree(MdiInfo[WndNum].IndentStr);
+
+		//エディットコントロールを破棄
+		DestroyWindow(MdiInfo[WndNum].pmti->hEdit);
+
+		//Web検索ウィンドウを破棄
+		delete MdiInfo[WndNum].pmti->pobj_WebResult;
+		MdiInfo[WndNum].pmti->pobj_WebResult=0;
+
+		//ルーラーウィンドウを破棄
+		delete MdiInfo[WndNum].pmti->pobj_Ruler;
+		MdiInfo[WndNum].pmti->pobj_Ruler=0;
+
+		//アイコンを破棄
+		if(MdiInfo[WndNum].pmti->hIcon) DestroyIcon(MdiInfo[WndNum].pmti->hIcon);
+
+		HeapDefaultFree(MdiInfo[WndNum].pmti);
+		MdiInfo[WndNum].pmti=0;
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+		/////////////////////
+		// RADツールを閉じる
+		/////////////////////
+
+		for(i2=0;i2<MAX_UNDONUM;i2++){
+			if(MdiInfo[WndNum].MdiRadInfo->undo.Command[i2])
+				Rad_DeleteUndoData(WndNum,i2);
+		}
+		DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hTools);
+		DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hRad);
+		SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,MdiInfo[WndNum].MdiRadInfo->hOldBitmap);
+		DeleteDC(MdiInfo[WndNum].MdiRadInfo->hMemDC);
+		DeleteObject(MdiInfo[WndNum].MdiRadInfo->hBitmap);
+		GlobalFree(MdiInfo[WndNum].MdiRadInfo);
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
+		////////////////////////////
+		// メニューエディタを閉じる
+		////////////////////////////
+
+		DestroyWindow(MdiInfo[WndNum].MdiMenuInfo->hList);
+		GlobalFree(MdiInfo[WndNum].MdiMenuInfo);
+	}
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+		////////////////////////////
+		// アイコンエディタを閉じる
+		////////////////////////////
+
+		for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
+			for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
+				if(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3])
+					HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3]);
+			}
+		}
+
+		DeleteDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
+		DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hMemBmp);
+		DestroyWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain);
+		for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
+			HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]);
+		}
+		HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo);
+	}
+}
+void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
+	int WndNum;
+	WndNum=GetWndNum(hwnd);
+	if(WndNum==-1) return;
+
+	int WebResultWndHeight;
+	WebResultWndHeight=LINK_ITEM_HEIGHT;
+	//未完成
+	WebResultWndHeight=0;
+
+	int iHeightRuler;
+	if(pobj_nv->bEditor_Ruler){
+		//ルーラー
+		MdiInfo[WndNum].pmti->pobj_Ruler->resize(
+			0,
+			0,
+			cx,
+			HEIGHT_RULER);
+
+		iHeightRuler=HEIGHT_RULER;
+
+		ShowWindow(MdiInfo[WndNum].pmti->pobj_Ruler->hRulerWnd,SW_SHOW);
+	}
+	else{
+		iHeightRuler=0;
+
+		ShowWindow(MdiInfo[WndNum].pmti->pobj_Ruler->hRulerWnd,SW_HIDE);
+	}
+
+	//エディットウィンドウ
+	MoveWindow(MdiInfo[WndNum].pmti->hEdit,
+		0,
+		iHeightRuler,
+		cx,
+		cy-WebResultWndHeight-iHeightRuler,
+		1);
+
+	//Web検索ウィンドウ
+	MdiInfo[WndNum].pmti->pobj_WebResult->resize(
+		0,
+		cy-WebResultWndHeight,
+		cx,
+		WebResultWndHeight);
+}
+LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	int i,i2;
+	HWND hEdit;
+
+	switch(message){
+		case WM_CREATE:
+			CREATESTRUCT *lpcs;
+			lpcs=(CREATESTRUCT *)lParam;
+			MDICREATESTRUCT *lpmcs;
+			lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
+			SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
+			break;
+		case WM_MDIACTIVATE:
+			//以前のMDIウィンドウのパラメータ ヒントを破棄する
+			if(MethodCheckInfo.hWnd){
+				DestroyWindow(MethodCheckInfo.hWnd);
+				MethodCheckInfo.hWnd=0;
+			}
+
+			//以前のコード補完リストを破棄する
+			if(ComplementWndInfo.hWnd){
+				DestroyWindow(ComplementWndInfo.hWnd);
+				ComplementWndInfo.hWnd=0;
+			}
+
+			if(!lParam) return 0;
+			i=GetWndNum((HWND)lParam);
+			if(i==-1) return 0;	//ウィンドウが初期状態の場合
+
+#ifndef THETEXT
+			//デバッガ メニューの状態を設定
+			pobj_Debugger->ResetCommandEnabled();
+#endif
+
+			//ドキュメント セレクト コンボボックス
+			extern HWND hDocCombo;
+			i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
+			SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
+
+			//タブコントロール
+			pobj_MainTab->MdiActiveEvent(MdiInfo[i].title);
+
+			return 0;
+		case WM_SETFOCUS:
+			hEdit=GetWindow(hwnd,GW_CHILD);
+			SetFocus(hEdit);
+			SetStatusText(CmdMsg);
+			ResetState_EditMenu();
+			ResetState_ViewMenu();
+			break;
+		case WM_SIZE:
+			ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
+			break;
+		case WM_CLOSE:
+			if(!DocumentModifyCheck(hwnd)) return 0;
+			CloseDocWindow(GetWndNum(hwnd));
+			pobj_nv->bMDIZoomed=IsZoomed(hwnd);
+			i=DefMDIChildProc(hwnd,message,wParam,lParam);
+
+			//メニュー状態を設定
+			ResetState_DocMenu();
+
+			return i;
+	}
+	return DefMDIChildProc(hwnd,message,wParam,lParam);
+}
+void ResizeOwnerWnd(void){
+	int width_owner,height_owner;
+	int height_Rebar;
+	int height_MdiClient;
+	RECT rect,StatusRect,RebarRect;
+
+	GetClientRect(hOwner,&rect);
+	width_owner=rect.right;
+	height_owner=rect.bottom;
+
+	//Rebar
+	SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
+	UpdateWindow(pobj_Rebar->hRebar);
+
+	//Status bar
+#define STATUSBAR_PARTS_NUM 5
+	int sb_size[STATUSBAR_PARTS_NUM];
+	sb_size[0]=width_owner-340;
+	sb_size[1]=width_owner-220;
+	sb_size[2]=width_owner-120;
+	sb_size[3]=width_owner-50;
+	sb_size[4]=width_owner;
+	SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size);
+	SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
+	UpdateWindow(hStatusBar);
+
+	//Status bar
+	int height_Statusbar;
+	SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect);
+	height_Statusbar=StatusRect.bottom;
+
+	GetWindowRect(pobj_Rebar->hRebar,&RebarRect);
+	height_Rebar=RebarRect.bottom-RebarRect.top+2;
+
+	int height_dv;	//Width of Debugger View
+	int height_cv;	//Width of Compiler View
+	height_dv=0;
+	height_cv=0;
+#ifndef THETEXT
+	if(bClipCompileView){
+		if(pobj_Debugger->IsDebuggerView()){
+			//デバッガビューが表示されているとき
+			height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK;
+		}
+		if(hCompileView){
+			//コンパイラビューが表示されているとき
+			height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK;
+		}
+	}
+#endif
+
+	int width_pjv=0;	//Width of Project View
+	if(pobj_nv->bClipProjectView){
+		if(IsWindowVisible(hProjectView)){
+			//プロジェクトビューが表示されているとき
+			width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK;
+		}
+	}
+
+	int width_SideWeb=0;
+	if(pobj_SideWeb->bShow){
+		width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK;
+	}
+
+	//MDIクライアントの高さ
+	height_MdiClient=height_owner-(
+		height_Rebar+
+		height_dv+
+		height_cv+
+		height_Statusbar
+		);
+
+	//タブコントロール
+	int tab_height;
+	if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0;
+	else{
+		RECT rc;
+		TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc);
+		tab_height=rc.bottom-rc.top;
+	}
+	MoveWindow(pobj_MainTab->hTab,
+		width_pjv,
+		height_Rebar,
+		width_owner-width_pjv-width_SideWeb,
+		tab_height,
+		1);
+
+	//MDIクライアント
+	MoveWindow(hClient,
+		width_pjv,
+		height_Rebar+tab_height,
+		width_owner-width_pjv-width_SideWeb,
+		height_MdiClient-tab_height,
+		1);
+
+	if(pobj_SideWeb->bShow){
+		//SideWeb
+		pobj_SideWeb->resize(
+			width_owner - pobj_nv->width_WebSearchView,
+			height_Rebar,
+			pobj_nv->width_WebSearchView,
+			height_MdiClient);
+	}
+	else pobj_SideWeb->resize(0,0,0,0);
+
+	if(width_pjv){
+		//プロジェクトビュー
+		MoveWindow(hProjectView,
+			0,
+			height_Rebar,
+			pobj_nv->width_ClipProjectView,
+			height_MdiClient,
+			1);
+		InvalidateRect(hProjectView,NULL,0);
+	}
+
+	if(height_dv){
+#ifndef THETEXT
+		//デバッガビュー
+		pobj_Debugger->resize(
+			0,
+			height_Rebar+height_MdiClient+LEVER_THICK,
+			width_owner,
+			pobj_nv->height_ClipDebuggerView);
+#endif
+	}
+	if(height_cv){
+		//コンパイラビュー
+		MoveWindow(hCompileView,
+			0,
+			height_Rebar+height_MdiClient+height_dv+LEVER_THICK,
+			width_owner,
+			pobj_nv->height_ClipCompileView,
+			1);
+	}
+}
+LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	int i,i2,i3,WndNum;
+	char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],temp3[MAX_PATH],*pTemp;
+	HWND hChild,hEdit;
+	RECT rect;
+	POINT pos;
+	LPTOOLTIPTEXT TipText;
+	LPNMHDR lpnmhdr;
+	NMPGCALCSIZE *lpCalcSize;
+	NMPGSCROLL *lpScroll;
+	HDROP hDrop;
+	HGLOBAL hGlobal;
+	CHARRANGE CharRange;
+	HANDLE hFile;
+	BOOL bChecked;
+
+	static COLORREF colorUser=RGB(255,255,255);
+
+	if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
+		//「最近使ったファイル」メニューコマンド
+		lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
+		OpenFileWithExtension(str);
+		return 0;
+	}
+
+	if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
+		//「最近使ったプロジェクト」メニューコマンド
+		lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
+		OpenFileWithExtension(str);
+		return 0;
+	}
+
+	switch(message){
+		case WM_CREATE:
+			SetupWindow(hwnd);
+
+			//テキストエディタフォント設定
+			ResetTextEditFont(hwnd);
+
+			if(bProfessional){
+				//Pro版は自動バックアップ及び復元機能を有効にする
+
+				//バックアップ用タイマーを設定（10秒に一回）
+				SetTimer(hwnd,ID_TIMER_BACKUP,10000,NULL);
+			}
+
+			return 0;
+
+
+		case WM_TIMER:
+			if(wParam==ID_TIMER_BACKUP){
+				if(bProfessional){
+					//Pro版は自動バックアップ及び復元機能を有効にする
+					_beginthread(backup,0,0);
+				}
+			}
+
+#ifndef THETEXT
+			if(wParam==ID_DEBUGSAFTY){
+				//BasicCompiler.exeが強制終了しているかどうかを検証
+				pobj_Debugger->SaftyCheck();
+			}
+#endif
+
+			return 0;
+
+
+		case WM_DRAWCLIPBOARD:
+			ResetState_EditMenu();
+			return 0;
+
+		case WM_MENUSELECT:
+			MenuAdvice(wParam);
+			return 0;
+		case WM_INITMENU:
+			pobj_nv->pobj_History->ResetFileMenu(pobj_FileHistoryMenu,1);
+#ifndef THETEXT
+			pobj_nv->pobj_ProjectHistory->ResetFileMenu(pobj_ProjectHistoryMenu,0);
+#endif
+			return 0;
+		case WM_MEASUREITEM:
+			LPMEASUREITEMSTRUCT lpMI;
+			lpMI = (LPMEASUREITEMSTRUCT)lParam;
+			if(lpMI->CtlType==ODT_MENU){
+				SIZE size;
+				CMenuItemData *pobj_MenuItemData;
+				pobj_MenuItemData=(CMenuItemData *)lpMI->itemData;
+				if(pobj_MenuItemData->pobj_ThisMenu->hMenu==pobj_MainMenu->hMenu){
+					//メインメニューの親アイテム
+					pobj_MainMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
+					lpMI->itemWidth = size.cx;
+					lpMI->itemHeight = size.cy;
+				}
+				else{
+					//メインメニューにぶらさがるサブメニュー
+					pobj_MenuItemData->pobj_ThisMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
+					lpMI->itemWidth = size.cx;
+					lpMI->itemHeight = size.cy;
+				}
+			}
+			return 0;
+
+		case WM_DRAWITEM:
+			DRAWITEMSTRUCT *pdis;
+			pdis=(DRAWITEMSTRUCT *)lParam;
+
+			if(pdis->CtlType==ODT_MENU){
+				if(!pobj_MainMenu) return 0;
+
+				CMenuItemData *pobj_MenuItemData;
+				pobj_MenuItemData=(CMenuItemData *)pdis->itemData;
+				if(pobj_MainMenu->hMenu==pobj_MenuItemData->pobj_ThisMenu->hMenu){
+					//メインメニューの親アイテム
+					pobj_MainMenu->OwnerDrawMenu(pdis->hDC,
+						&pdis->rcItem,
+						(pdis->itemState&ODS_SELECTED)!=0,
+						pobj_MenuItemData->item_index);
+				}
+				else{
+					//メインメニューにぶらさがるサブメニュー
+					pobj_MainMenu->OwnerDrawSubMenu(pobj_MenuItemData->pobj_ThisMenu->hMenu,
+						pdis->hDC,
+						&pdis->rcItem,
+						(pdis->itemState&ODS_SELECTED)!=0,
+						pobj_MenuItemData->item_index);
+				}
+			}
+			return 0;
+
+		case WM_NOTIFY:
+			if(!lParam) return 0;
+			TipText=(LPTOOLTIPTEXT)lParam;
+			if(TipText->hdr.code==TTN_NEEDTEXT) ShowToolTipText(TipText);
+			lpnmhdr=(LPNMHDR)lParam;
+
+			extern HWND hStandardToolbarPager;
+			extern HWND hDebuggerToolbarPager;
+			if(pobj_Rebar){
+				//レバーオブジェクトが存在するとき
+				if(lpnmhdr->hwndFrom==pobj_Rebar->hRebar&&lpnmhdr->code==RBN_HEIGHTCHANGE){
+					ResizeOwnerWnd();
+					return 0;
+				}
+			}
+			if(lpnmhdr->hwndFrom==hStandardToolbarPager){
+				if(lpnmhdr->code==PGN_CALCSIZE){
+					lpCalcSize=(LPNMPGCALCSIZE)lParam;
+					if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
+						lpCalcSize->iWidth=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8;
+				}
+				else if(lpnmhdr->code==PGN_SCROLL){
+					lpScroll=(LPNMPGSCROLL)lParam;
+					lpScroll->iScroll=20;
+				}
+			}
+			else if(lpnmhdr->hwndFrom==hDebuggerToolbarPager){
+				if(lpnmhdr->code==PGN_CALCSIZE){
+					lpCalcSize=(LPNMPGCALCSIZE)lParam;
+					if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
+						lpCalcSize->iWidth=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8;
+				}
+				else if(lpnmhdr->code==PGN_SCROLL){
+					lpScroll=(LPNMPGSCROLL)lParam;
+					lpScroll->iScroll=20;
+				}
+			}
+
+			NMHDR *hdr;
+			hdr=(NMHDR *)lParam;
+			if(pobj_MainTab){
+				if(hdr->hwndFrom==pobj_MainTab->hTab){
+					if(hdr->code==TCN_SELCHANGE)
+						pobj_MainTab->SelChangeEvent();
+
+					if(hdr->code==NM_RCLICK){
+
+						if(!bProfessional){
+							//フリー版の場合はタブの右クリックメニューを排除する
+							return 0;
+						}
+
+
+						TCHITTESTINFO tcHitTest;
+						GetCursorPos(&tcHitTest.pt);
+						ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
+						i=TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
+						if(i==-1) return 0;
+
+						TabCtrl_SetCurSel(pobj_MainTab->hTab,i);
+
+						pobj_MainTab->SelChangeEvent();
+
+
+						/////////////////////
+						// メニューを表示
+						/////////////////////
+
+						hChild=GetWindow(hClient,GW_CHILD);
+						WndNum=GetWndNum(hChild);
+
+						//保存コマンドの文字列をセット
+						MENUITEMINFO mii;
+						mii.cbSize=sizeof(MENUITEMINFO);
+						mii.fMask=MIIM_TYPE;
+						mii.dwTypeData=temporary;
+						mii.fType=MFT_STRING;
+						if(MdiInfo[WndNum].path[0]){
+							_splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
+							lstrcat(temporary,temp2);
+							lstrcat(temporary," を保存(&S)");
+						}
+						else{
+							lstrcpy(temporary,"保存(&S)");
+						}
+						SetMenuItemInfo(hTabMenu,IDM_SAVE,FALSE,&mii);
+
+						/*「絶対パスをコピー」「フォルダを開く」「ファイルを削除」
+														コマンドを場合によって無効化にする */
+						if(MdiInfo[WndNum].path[0]){
+							EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_ENABLED);
+							EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_ENABLED);
+							EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_ENABLED);
+						}
+						else{
+							EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_GRAYED);
+							EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_GRAYED);
+							EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_GRAYED);
+						}
+
+						POINT MousePos;
+						GetCursorPos(&MousePos);
+						TrackPopupMenu(hTabMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL);
+					}
+				}
+			}
+			if(pobj_SideWeb){
+				if(hdr->hwndFrom==pobj_SideWeb->hTab&&hdr->code==TCN_SELCHANGE){
+					pobj_SideWeb->SelChangeEvent();
+				}
+			}
+
+			return 0;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDM_NEW:
+					CreateNewFile();
+					return 0;
+				case IDM_OPEN:
+					//"ファイルを指定してください"
+					if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return 0;
+
+					OpenFileWithExtension(str);
+					return 0;
+				case IDM_CLOSE:
+					hChild=GetWindow(hClient,GW_CHILD);
+					if(IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0);
+					return 0;
+#ifndef THETEXT
+				case IDM_PROJECT_OPEN:
+					//"プロジェクト ファイルを指定して下さい"
+					if(!GetFilePathDialog(hwnd,str,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE)) return 0;
+
+					OpenProject(str);
+					return 0;
+				case IDM_PROJECT_SAVE:
+					SaveProject();
+					return 0;
+				case IDM_PROJECT_CLOSE:
+					CloseProject();
+					return 0;
+				case IDM_PROJECT_FOLDER_OPEN:
+					ShellExecute(hwnd,"explore",ProjectInfo.dir,NULL,NULL,SW_SHOWNORMAL);
+					return 0;
+#endif
+				case IDM_SAVE:
+					SaveDocument(GetWindow(hClient,GW_CHILD),NULL);
+					return 0;
+				case IDM_NEWSAVE:
+					//"保存先のファイルを指定してください"
+					if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return 0;
+
+					SaveDocument(GetWindow(hClient,GW_CHILD),str);
+					return 0;
+				case IDM_CODE_SAVE:
+					//文字コードを指定して保存
+					DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),hOwner,nkfDlgCodeSave);
+					return 0;
+				case IDM_ALLSAVE:
+					for(i=0;i<MAX_WNDNUM;i++){
+						if(MdiInfo[i].hwnd) SaveDocument(MdiInfo[i].hwnd,NULL);
+					}
+					if(ProjectInfo.name[0]) SaveProject();
+					return 0;
+
+				case IDM_PAGESET:
+					//ページ設定
+					obj_Page.SetupDlg();
+					return 0;
+
+				case IDM_PREVIEW:
+					//プレビュー（Pro版のみ）
+					Preview();
+					return 0;
+
+				case IDM_PRINTOUT:
+					//印刷
+					Printout();
+					return 0;
+
+				case IDM_EXIT:
+					SendMessage(hwnd,WM_CLOSE,0,0);
+					return 0;
+				case IDM_UNDO:
+				case (WORD)IDM_ACCEL_UNDO:
+					hChild=GetWindow(hClient,GW_CHILD);
+					if(!hChild) return 0;
+					WndNum=GetWndNum(hChild);
+					if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
+						TextEdit_UndoCommand(WndNum);
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
+						Rad_UndoCommand(WndNum);
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
+						IconEdit_UndoCommand(WndNum);
+					return 0;
+				case IDM_REDO:
+				case (WORD)IDM_ACCEL_REDO:
+					hChild=GetWindow(hClient,GW_CHILD);
+					if(!hChild) return 0;
+					WndNum=GetWndNum(hChild);
+					if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
+						TextEdit_RedoCommand(WndNum);
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
+						Rad_RedoCommand(WndNum);
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
+						IconEdit_RedoCommand(WndNum);
+					return 0;
+				case IDM_CUT:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+					if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+						hEdit=GetWindow(hChild,GW_CHILD);
+
+						TextEdit_GetSel(WndNum,&CharRange);
+
+						hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
+						pTemp=(char *)GlobalLock(hGlobal);
+						memcpy(pTemp,MdiInfo[WndNum].pmti->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
+						pTemp[CharRange.cpMax-CharRange.cpMin]=0;
+						GlobalUnlock(hGlobal);
+
+						//クリップボードに保存
+						OpenClipboard(hwnd);
+						EmptyClipboard();
+						SetClipboardData(CF_TEXT,hGlobal);
+						CloseClipboard();
+
+						//選択文字列を消去
+						SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0);
+					}
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+						i2=GetWndInfoNum(MdiInfo[WndNum].path);
+
+						//クリップボードに格納するためのデータを用意する
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x-=17;
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y-=10;
+						hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x+=17;
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y+=10;
+
+						OpenClipboard(hwnd);
+						EmptyClipboard();
+						SetClipboardData(dwRadClipboardID,hGlobal);
+						CloseClipboard();
+
+						SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
+					}
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+						//クリップボードに格納するためのデータを用意する
+						hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
+						if(hGlobal==0) return 0;
+
+						OpenClipboard(hwnd);
+						EmptyClipboard();
+						SetClipboardData(CF_BITMAP,hGlobal);
+						CloseClipboard();
+
+						DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
+						MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
+
+						IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
+					}
+					return 0;
+				case IDM_COPY:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+					if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+						hEdit=GetWindow(hChild,GW_CHILD);
+
+						TextEdit_GetSel(WndNum,&CharRange);
+
+						hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
+						pTemp=(char *)GlobalLock(hGlobal);
+						memcpy(pTemp,MdiInfo[WndNum].pmti->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
+						pTemp[CharRange.cpMax-CharRange.cpMin]=0;
+						GlobalUnlock(hGlobal);
+
+						//クリップボードに保存
+						OpenClipboard(hwnd);
+						EmptyClipboard();
+						SetClipboardData(CF_TEXT,hGlobal);
+						CloseClipboard();
+					}
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+						i2=GetWndInfoNum(MdiInfo[WndNum].path);
+
+						//クリップボードに格納するためのデータを用意する
+						hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2);
+
+						OpenClipboard(hwnd);
+						EmptyClipboard();
+						SetClipboardData(dwRadClipboardID,hGlobal);
+						CloseClipboard();
+					}
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+						//クリップボードに格納するためのデータを用意する
+						hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
+
+						OpenClipboard(hwnd);
+						EmptyClipboard();
+						SetClipboardData(CF_BITMAP,hGlobal);
+						CloseClipboard();
+					}
+					return 0;
+				case IDM_PASTE:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+					if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+						hEdit=GetWindow(hChild,GW_CHILD);
+
+						//クリップボードを開く
+						OpenClipboard(hwnd);
+						hGlobal=GetClipboardData(CF_TEXT);
+						if(!hGlobal){
+							CloseClipboard();
+							return 0;
+						}
+
+
+						if(pobj_nv->bPasteIndent){
+							//インデント整形
+							pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
+							GlobalUnlock(hGlobal);
+						}
+						else pTemp=(char *)GlobalLock(hGlobal);
+
+
+						//テキストエディタの文字列をリプレイス
+						TextEdit_ReplaceUpdateUndoData(WndNum,
+							pTemp,
+							1,
+							1);
+
+						if(pobj_nv->bPasteIndent)
+							HeapDefaultFree(pTemp);
+						else
+							GlobalUnlock(hGlobal);
+
+						//クリップボードを閉じる
+						CloseClipboard();
+
+
+						//キャレット位置までスクロールする
+						TextEdit_ScrollCaret(WndNum,0);
+						ResetCaretPos(WndNum);
+					}
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+						OpenClipboard(hwnd);
+						hGlobal=GetClipboardData(dwRadClipboardID);
+						if(!hGlobal){
+							CloseClipboard();
+							return 0;
+						}
+						Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
+						CloseClipboard();
+					}
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
+						OpenClipboard(hwnd);
+						hGlobal=GetClipboardData(CF_BITMAP);
+						if(!hGlobal){
+							CloseClipboard();
+							return 0;
+						}
+						IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
+						CloseClipboard();
+					}
+					return 0;
+				case IDM_DELETE:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+					if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+						hEdit=GetWindow(hChild,GW_CHILD);
+						TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
+					}
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
+						SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
+					return 0;
+				case IDM_ALLSELECT:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+					if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+						hEdit=GetWindow(hChild,GW_CHILD);
+
+						MdiInfo[WndNum].pmti->StartCaretPos.x=0;
+						MdiInfo[WndNum].pmti->StartCaretPos.y=0;
+
+						GetCaretPosFromBufferIndex(
+							MdiInfo[WndNum].pmti->buffer,
+							lstrlen(MdiInfo[WndNum].pmti->buffer),
+							&MdiInfo[WndNum].pmti->EndCaretPos);
+
+						InvalidateRect(hEdit,NULL,0);
+
+						ResetState_EditMenu();
+					}
+					else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
+						i2=GetWndInfoNum(MdiInfo[WndNum].path);
+						for(i3=0;i3<ProjectInfo.pWindowInfo[i2].NumberOfChildWindows;i3++){
+							MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
+						}
+						DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]);
+					}
+					return 0;
+				case IDM_FIND:
+					DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),hOwner,DlgFind);
+					return 0;
+				case IDM_PERMUTATION:
+					DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),hOwner,DlgPermutation);
+					return 0;
+
+
+				///////////////////////
+				// 変換メニュー
+				///////////////////////
+				case IDM_CONV_ALPHA_SMALL:
+				case IDM_CONV_ALPHA_BIG:
+				case IDM_CONV_HALF:
+				case IDM_CONV_MULTI:
+				case IDM_CONV_KATAKANA:
+				case IDM_CONV_HIRAGANA:
+				case IDM_CONV_SPACE:
+				case IDM_CONV_TAB:
+#ifdef THETEXT
+				case IDM_CONV_HASRETURN:
+				case IDM_CONV_QUOTE:
+#else
+				case IDM_CODEFORMAT:
+#endif
+					TextEdit_Convert(LOWORD(wParam));
+					return 0;
+
+#ifdef THETEXT
+				///////////////////////
+				// ツールメニュー
+				///////////////////////
+				case IDM_STRING_COUNT:
+					DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,DlgStringCount,0);
+					return 0;
+				case IDM_SEL_STRING_COUNT:
+					DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,DlgStringCount,1);
+					return 0;
+#endif //THETEXT
+
+				case IDM_PROJECTVIEW:
+					if(pobj_nv->bClipProjectView){
+						if(IsWindowVisible(hProjectView)){
+							ShowWindow(hProjectView,SW_HIDE);
+							bChecked=0;
+						}
+						else{
+							ShowWindow(hProjectView,SW_SHOW);
+							bChecked=1;
+						}
+					}
+					else{
+						if(IsWindowVisible(hProjectView_ToolWindow)){
+							ShowWindow(hProjectView_ToolWindow,SW_HIDE);
+							bChecked=0;
+						}
+						else{
+							ShowWindow(hProjectView_ToolWindow,SW_SHOW);
+							ShowWindow(hProjectView,SW_SHOW);
+							bChecked=1;
+						}
+					}
+					pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,bChecked);
+
+					//再配置
+					ResizeOwnerWnd();
+
+					ShowWindow(hClient,SW_SHOW);
+					return 0;
+				case IDM_PROJECT_OPTION:
+					DlgProjectOptionSetting(hwnd);
+					return 0;
+				case IDM_TOPMOST:
+					if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
+						SetWindowPos(hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
+						pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
+					}
+					else{
+						SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
+						pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
+					}
+					return 0;
+
+#ifdef THETEXT
+				case IDM_RIGHT_TURN:
+					pobj_nv->bRightTurn^=1;
+					ResetState_ViewMenu();
+
+					//トップのウィンドウを再描画
+					RedrawAllWindow();
+
+					return 0;
+#endif
+
+				case IDM_SET:
+					DlgOptionSetting(hwnd);
+					return 0;
+
+#ifndef THETEXT
+				case IDM_DEBUG:
+					if(pobj_Debugger->IsDebugging()){
+						pobj_Debugger->DebugContinue();
+						return 0;
+					}
+
+					hChild=GetWindow(hClient,GW_CHILD);
+					if(ProjectInfo.name[0]){
+						//プロジェクトが開かれている場合
+						if(!SetProjectToRun()) return 0;
+
+						//デバッグ用のコマンドライン及び実行可能ファイル（DLLのみ）
+						sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
+						sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
+						hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
+						DWORD dwAccessBytes;
+						WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
+						CloseHandle(hFile);
+
+						//ソースファイル名をtemp2へ
+						ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
+
+						//出力ファイル名をtemp3へ
+						lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
+						GetFullPath(temp3,ProjectInfo.dir);
+
+						if(IsNeedCompileForProject(1))
+							sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd);
+						else
+							sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd);
+
+						//DLLオプション
+						if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
+
+						//ブレークポイントをセーブ
+						ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
+					}
+					else{
+						//単独ソースコード
+						if(!SetRunning(hChild)) return 0;
+						if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
+							sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
+						else
+							sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
+
+						//ブレークポイントをセーブ
+						pobj_DBBreakPoint->SaveToTempFile();
+					}
+
+					//コンパイルビューをクリップするかどうか
+					if(bClipCompileView){
+						lstrcat(temporary," /clip_compile_view");
+
+						//コンパイラビューを閉じる
+						if(hCompileView==(HWND)-1) return 0;
+						if(hCompileView){
+							hChild=hCompileView;
+							hCompileView=(HWND)-1;
+							SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
+						}
+
+						//重複起動防止のため
+						hCompileView=(HWND)-1;
+					}
+
+					sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
+					ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL);
+					return 0;
+				case IDM_DEBUGCOMPILE:
+					hChild=GetWindow(hClient,GW_CHILD);
+					if(ProjectInfo.name[0]){
+						//プロジェクトが開かれている場合
+						if(!SetProjectToRun()) return 0;
+
+						//ソースファイル名をtemp2へ
+						ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
+
+						//出力ファイル名をtemp3へ
+						lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
+						GetFullPath(temp3,ProjectInfo.dir);
+
+						sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);
+
+						//DLLオプション
+						if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
+					}
+					else{
+						//単独ソースコード
+						if(!SetRunning(hChild)) return 0;
+						sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
+					}
+
+					//コンパイルビューをクリップするかどうか
+					if(bClipCompileView){
+						lstrcat(temporary," /clip_compile_view");
+
+						//コンパイラビューを閉じる
+						if(hCompileView==(HWND)-1) return 0;
+						if(hCompileView){
+							hChild=hCompileView;
+							hCompileView=(HWND)-1;
+							SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
+						}
+
+						//重複起動防止のため
+						hCompileView=(HWND)-1;	
+					}
+
+					//インクルードディレクトリ
+					sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
+					lstrcat(temporary,temp2);
+
+					sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
+					ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL);
+
+					return 0;
+				case IDM_ATTACH:
+					int idProcess;
+					DWORD dwPlatform;
+					idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,DlgAttach,(LPARAM)&dwPlatform);
+					if(idProcess==0) return 0;
+
+					sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);
+
+					//コンパイルビューをクリップするかどうか
+					if(bClipCompileView){
+						lstrcat(temporary," /clip_compile_view");
+
+						//コンパイラビューを閉じる
+						if(hCompileView==(HWND)-1) return 0;
+						if(hCompileView){
+							hChild=hCompileView;
+							hCompileView=(HWND)-1;
+							SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
+						}
+
+						//重複起動防止のため
+						hCompileView=(HWND)-1;
+					}
+
+					//インクルードディレクトリ
+					sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
+					lstrcat(temporary,temp2);
+
+					if(dwPlatform==IMAGE_FILE_MACHINE_I386)
+						sprintf(str,"%s%s",pj_editor_Dir,WIN32_COMPILER_NAME);
+					else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
+						sprintf(str,"%s%s",pj_editor_Dir,WIN64_COMPILER_NAME);
+
+					ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL);
+					return 0;
+				case IDM_RELEASECOMPILE:
+					hChild=GetWindow(hClient,GW_CHILD);
+					if(ProjectInfo.name[0]){
+						//プロジェクトが開かれている場合
+						if(!SetProjectToRun()) return 0;
+
+						//ソースファイル名をtemp2へ
+						ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
+
+						//出力ファイル名をtemp3へ
+						lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
+						GetFullPath(temp3,ProjectInfo.dir);
+
+						sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);
+
+						//DLLオプション
+						if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
+					}
+					else{
+						//単独ソースコード
+						if(!SetRunning(hChild)) return 0;
+						sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
+					}
+
+					//コンパイルビューをクリップするかどうか
+					if(bClipCompileView){
+						lstrcat(temporary," /clip_compile_view");
+
+						//コンパイラビューを閉じる
+						if(hCompileView==(HWND)-1) return 0;
+						if(hCompileView){
+							hChild=hCompileView;
+							hCompileView=(HWND)-1;
+							SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
+						}
+
+						//重複起動防止のため
+						hCompileView=(HWND)-1;
+					}
+
+					//インクルードディレクトリ
+					sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
+					lstrcat(temporary,temp2);
+
+					sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
+					ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL);
+					return 0;
+				case IDM_RELEASERUN:
+					hChild=GetWindow(hClient,GW_CHILD);
+					if(ProjectInfo.name[0]){
+/*						//プロジェクトが開かれている場合
+						if(!SetProjectToRun()) return 0;
+
+						//必要であればリリースコンパイル
+						if(IsNeedCompileForProject(0))
+							SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
+
+						if(ProjectInfo.dwModuleType==MT_DLL){
+							lstrcpy(temporary,ProjectInfo.szExePath);
+						}
+						else{
+							lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
+							GetFullPath(temporary,ProjectInfo.dir);
+						}
+					}
+					else{
+/*						//必要であればリリースコンパイル
+						if(!SetRunning(hChild)) return 0;
+
+						if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
+							SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
+
+						//単独ソースコード
+						_splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
+						lstrcat(temporary,temp2);
+						lstrcat(temporary,temp3);
+						lstrcat(temporary,".exe");
+					}
+
+					//インクルードディレクトリ
+					sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
+					lstrcat(temporary,temp2);
+
+					ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
+					return 0;
+
+
+				////////////////////////
+				// デバッグ コマンド
+				////////////////////////
+
+				case IDM_STEP_IN:
+					pobj_Debugger->StepIn();
+					break;
+				case IDM_STEP_OVER:
+					pobj_Debugger->StepOver();
+					break;
+				case IDM_STEP_CURSOR:
+					pobj_Debugger->StepToCursor();
+					break;
+				case IDM_BREAKPOINT:
+					if(ProjectInfo.name[0]){
+						ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
+					}
+					else{
+						pobj_DBBreakPoint->Event_BreakPoint();
+					}
+					break;
+				case IDM_DEBUG_STOP:
+					pobj_Debugger->DebugStop();
+					break;
+				case IDM_DEBUG_PAUSE:
+					pobj_Debugger->DebugPause();
+					break;
+
+
+				case IDM_COMMUNITY:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case IDM_COMMU_SEARCH:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/search.php",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case IDM_COMMU_PM:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/privmsg.php?folder=inbox",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case ID_COMMU_FORUM1:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/viewforum.php?f=1",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case ID_COMMU_FORUM2:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/viewforum.php?f=2",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case ID_COMMU_FORUM3:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/viewforum.php?f=5",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case ID_COMMU_FORUM4:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/viewforum.php?f=3",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case ID_COMMU_FORUM5:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/viewforum.php?f=6",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case ID_COMMU_FORUM6:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/viewforum.php?f=8",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case ID_COMMU_FORUM7:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/viewforum.php?f=4",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+				case ID_COMMU_FORUM8:
+					ShellExecute(hwnd,"open","iexplore.exe",
+						"http://www.activebasic.com/forum/viewforum.php?f=7",
+						NULL,SW_SHOWNORMAL);
+					return 0;
+#endif //THETEXT
+
+
+				case IDM_TOPIC:
+#ifdef THETEXT
+					sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
+					ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
+#else
+					sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
+					HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
+#endif
+					return 0;
+
+#ifdef THETEXT
+				case IDM_DSHOMEPAGE:
+					ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
+					return 0;
+#else
+				case IDM_AB_WEBSITE:
+					ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
+					return 0;
+				case IDM_ACTBDL:
+					ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
+					return 0;
+#endif
+
+				case IDM_ABOUT:
+					DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,DialogAbout);
+					return 0;
+
+				case IDM_WEB_SEARCH:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+					if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+						extern HWND hWebSearchCombo;
+						SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
+					}
+					return 0;
+
+
+
+				//////////////////////////////////////////////////////
+				// レバーコントロールのサブメニューコマンド（レバー追加）
+				//////////////////////////////////////////////////////
+
+				case IDM_DOCSELECTBAND:
+					pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
+					return 0;
+				case IDM_STANDARDBAND:
+					pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
+					return 0;
+#ifndef THETEXT
+				case IDM_RELEASEBAND:
+					pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
+					return 0;
+				case IDM_DEBUGBAND:
+					pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
+					return 0;
+				case IDM_SELECTCOMPILERBAND:
+					pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
+					return 0;
+#endif
+				case IDM_BANDMENU_WEB_SEARCH:
+					pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
+					return 0;
+				case IDM_NOGRIPPER:
+					if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
+					else pobj_nv->bNoGripper=1;
+
+					//レバーコントロールを再生成
+					pobj_Rebar->ResetRebar();
+
+					//メニュー状態を設定
+					ResetState_DocMenu();
+					return 0;
+				case IDM_RESET_REBAR:
+					//"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか？"
+					if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
+
+					//レバーコントロールを再生成
+					pobj_Rebar->ResetInitRebar();
+
+					//メニュー状態を設定
+					ResetState_DocMenu();
+					return 0;
+
+
+
+				////////////////////////////////////////////////////
+				// メイン タブ コントロールのサブメニューコマンド
+				////////////////////////////////////////////////////
+
+				case IDM_ALLCLOSE_OMIT_MYSELF:
+					//このウィンドウ以外をすべて閉じる(&A)
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+					for(i=0;i<MAX_WNDNUM;i++){
+						if(i==WndNum) continue;
+						if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
+					}
+					return 0;
+
+				case IDM_PATH_COPY:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+
+					//絶対パスをコピー
+					hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
+					pTemp=(char *)GlobalLock(hGlobal);
+					lstrcpy(pTemp,MdiInfo[WndNum].path);
+					GlobalUnlock(hGlobal);
+
+					//クリップボードに保存
+					OpenClipboard(hwnd);
+					EmptyClipboard();
+					SetClipboardData(CF_TEXT,hGlobal);
+					CloseClipboard();
+					return 0;
+
+				case IDM_FOLDER_OPEN:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+
+					_splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
+					lstrcat(temporary,temp2);
+
+					ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
+					return 0;
+
+				case IDM_DELETE_FILE:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+
+					_splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
+					lstrcat(temporary,temp2);
+
+					lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか？");
+					if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
+
+					//ゴミ箱へ
+					SHFILEOPSTRUCT fo;
+					fo.hwnd=hwnd;
+					fo.wFunc=FO_DELETE;
+					fo.pFrom =MdiInfo[WndNum].path;
+					fo.pTo="\0";
+					fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
+					SHFileOperation(&fo);
+
+					//閉じる
+					MdiInfo[WndNum].pmti->bModify=0;
+					SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
+
+					return 0;
+
+				case IDM_USER_COLOR:
+					{
+						CHOOSECOLOR cc;
+						COLORREF CusColors[16]={
+							RGB(255,255,255),
+							RGB(0,0,0),
+							RGB(128,128,128),
+							RGB(192,192,192),
+							RGB(128,0,0),
+							RGB(255,0,0),
+							RGB(128,128,0),
+							RGB(255,255,0),
+							RGB(0,128,0),
+							RGB(0,255,0),
+							RGB(0,128,128),
+							RGB(0,255,255),
+							RGB(0,0,128),
+							RGB(0,0,255),
+							RGB(128,0,128),
+							RGB(255,0,255)};
+						cc.lStructSize=sizeof(CHOOSECOLOR);
+						cc.hwndOwner=hwnd;
+						cc.rgbResult=colorUser;
+						cc.lpCustColors=CusColors;
+						cc.Flags=CC_RGBINIT|CC_FULLOPEN;
+						if(!ChooseColor(&cc)){
+							return 0;
+						}
+						colorUser=cc.rgbResult;
+					}
+				case IDM_GRAY:
+				case IDM_WHITE:
+				case IDM_RED:
+				case IDM_GREEN:
+				case IDM_BLUE:
+				case IDM_YELLOW:
+					hChild=GetWindow(hClient,GW_CHILD);
+					WndNum=GetWndNum(hChild);
+
+					TC_ITEM tcItem;
+					tcItem.mask=TCIF_PARAM;
+					if(LOWORD(wParam)==IDM_GRAY)	tcItem.lParam=TABCOLOR_GRAY;
+					if(LOWORD(wParam)==IDM_WHITE)	tcItem.lParam=TABCOLOR_WHITE;
+					if(LOWORD(wParam)==IDM_RED)		tcItem.lParam=TABCOLOR_RED;
+					if(LOWORD(wParam)==IDM_GREEN)	tcItem.lParam=TABCOLOR_GREEN;
+					if(LOWORD(wParam)==IDM_BLUE)	tcItem.lParam=TABCOLOR_BLUE;
+					if(LOWORD(wParam)==IDM_YELLOW)	tcItem.lParam=TABCOLOR_YELLOW;
+					if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
+					TabCtrl_SetItem(pobj_MainTab->hTab,
+						TabCtrl_GetCurSel(pobj_MainTab->hTab),
+						&tcItem);
+					InvalidateRect(pobj_MainTab->hTab,NULL,0);
+					return 0;
+
+
+
+				//////////////////////////////////
+				// SideWeb
+				//////////////////////////////////
+
+				case IDC_CLIP:
+					pobj_SideWeb->bShow=0;
+					ResizeOwnerWnd();
+					return 0;
+			}
+			break;
+		case WM_DROPFILES:
+			hDrop=(HDROP)wParam;
+
+			i2=DragQueryFile(hDrop,-1,0,0);
+			for(i=0;i<i2;i++){
+				DragQueryFile(hDrop,i,str,MAX_PATH);
+				OpenFileWithExtension(str);
+			}
+			DragFinish(hDrop);
+			return 0;
+		case WM_SHOWERROR:
+			//エラー部分を反転表示
+			DWORD AccBytes;
+			HANDLE fh;
+			sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
+			fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+			ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
+			CloseHandle(fh);
+			temporary[AccBytes]=0;
+			hChild=GetWindow(hClient,GW_CHILD);
+			while(hChild){
+				WndNum=GetWndNum(hChild);
+				if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+					if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
+				}
+				hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+			}
+			if(!hChild){
+				hChild=OpenFileWithExtension(temporary);
+				WndNum=GetWndNum(hChild);
+			}
+
+			if(WndNum==-1) return 0;
+
+			//ウィンドウを最前面に表示
+			BringWindowToTop(hChild);
+			UpdateWindow(hChild);
+
+			pTemp=MdiInfo[WndNum].pmti->buffer;
+
+			//行の先頭インデックスを取得（取得する行の番号はwParamで渡される）
+			for(i=0,i2=0;;i++){
+				if(i2>=(int)wParam) break;
+				if(pTemp[i]=='\0') break;
+				if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
+					i++;
+					i2++;
+				}
+			}
+			pos.x=i;
+
+			//行の終端インデックスを取得
+			for(;;i++){
+				if(pTemp[i]=='\0') break;
+				if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
+			}
+			pos.y=i;
+
+			//行を選択する
+			TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
+
+			return 0;
+
+#ifndef THETEXT
+		case WM_SETCOMPILEVIEW:
+			//コンパイラウィンドウ（埋め込み型）が表示されたとき
+			hCompileView=(HWND)lParam;
+			ResizeOwnerWnd();
+			return 0;
+		case WM_DESTROYCOMPILEVIEW:
+			//コンパイラウィンドウ（埋め込み型）が破棄されたとき
+			if((int)hCompileView==-1){
+				//すぐに次のコンパイラウィンドウが起動するとき
+				hCompileView=0;
+			}
+			else{
+				//完全にコンパイラウィンドウを閉じたときはリサイズ
+				hCompileView=0;
+				
+				ResizeOwnerWnd();
+			}
+			return 0;
+
+		case WM_SETDEBUGGERBASE:
+			//デバッガベースウィンドウ（埋め込み型）が表示されたとき
+			pobj_Debugger->begin();
+
+			//BasicCompiler.exeの強制終了を考慮
+			SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
+
+			return 0;
+		case WM_DESTROYDEBUGGERBASE:
+			//BasicCompiler.exeの強制終了を考慮
+			KillTimer(hOwner,ID_DEBUGSAFTY);
+
+			//デバッガベースウィンドウ（埋め込み型）が破棄されたとき
+			pobj_Debugger->end();
+
+			return 0;
+
+		case WM_SETDEBUGGERVIEW:
+			//デバッガウィンドウ（埋め込み型）が表示されたとき
+			pobj_Debugger->watch_start((HWND)lParam);
+			ResizeOwnerWnd();
+			return 0;
+		case WM_DESTROYDEBUGGERVIEW:
+			//デバッガウィンドウ（埋め込み型）が破棄されたとき
+			pobj_Debugger->watch_quit();
+			ResizeOwnerWnd();
+			return 0;
+#endif
+
+		case WM_SIZE:
+			ResizeOwnerWnd();
+			return 0;
+
+
+		case WM_MOUSEMOVE:
+			static DWORD dwDragLever;
+			static POINT PrevMousePos;
+			static int start;
+
+			pos.x=(long)(short)LOWORD(lParam);
+			pos.y=(long)(short)HIWORD(lParam);
+			ClientToScreen(hwnd,&pos);
+
+			if(dwDragLever){
+				GetClientRect(hwnd,&rect);
+
+				if(dwDragLever==1){
+					//プロジェクトビューをリサイズ中
+					pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
+					if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
+					if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
+				}
+				else if(dwDragLever==2){
+					//デバッガビューをリサイズ中
+					pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
+					if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
+					if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
+						pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
+				}
+				else if(dwDragLever==3){
+					//コンパイラビューをリサイズ中
+					pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
+					if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
+					if(rect.bottom-100<pobj_nv->height_ClipCompileView)
+						pobj_nv->height_ClipCompileView=rect.bottom-100;
+				}
+				else if(dwDragLever==4){
+					//SideWebをリサイズ中
+					pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
+					if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
+					if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
+				}
+
+				ResizeOwnerWnd();
+				UpdateWindow(hwnd);
+			}
+			if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
+				//プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
+				GetWindowRect(hProjectView,&rect);
+				if(rect.top<=pos.y&&pos.y<=rect.bottom&&
+					rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
+					SetCursor(LoadCursor(0,IDC_SIZEWE));
+				}
+			}
+#ifndef THETEXT
+			if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
+				//デバッガビューとMDIクライアントの境目のサイズ変更ライン
+				GetWindowRect(pobj_Debugger->hwnd,&rect);
+				if(rect.left<=pos.x&&pos.x<=rect.right&&
+					rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
+					SetCursor(LoadCursor(0,IDC_SIZENS));
+				}
+			}
+			if(bClipCompileView&&IsWindowVisible(hCompileView)){
+				//コンパイラビューとMDIクライアントの境目のサイズ変更ライン
+				GetWindowRect(hCompileView,&rect);
+				if(rect.left<=pos.x&&pos.x<=rect.right&&
+					rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
+					SetCursor(LoadCursor(0,IDC_SIZENS));
+				}
+			}
+#endif
+			if(pobj_SideWeb->bShow){
+				//SideWebとMDIクライアントの境目のサイズ変更ライン
+				pobj_SideWeb->GetRect(&rect);
+				ClientToScreen(hwnd,&rect);
+				if(rect.top<=pos.y&&pos.y<=rect.bottom&&
+					rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
+					SetCursor(LoadCursor(0,IDC_SIZEWE));
+				}
+			}
+			return 0;
+		case WM_LBUTTONDOWN:
+			pos.x=LOWORD(lParam);
+			pos.y=HIWORD(lParam);
+			ClientToScreen(hwnd,&pos);
+
+			if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
+				//プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
+				GetWindowRect(hProjectView,&rect);
+				if(rect.top<=pos.y&&pos.y<=rect.bottom&&
+					rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
+					SetCursor(LoadCursor(0,IDC_SIZEWE));
+
+					dwDragLever=1;
+					SetCapture(hwnd);
+
+					PrevMousePos=pos;
+					start=pobj_nv->width_ClipProjectView;
+				}
+			}
+#ifndef THETEXT
+			if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
+				//デバッガビューとMDIクライアントの境目のサイズ変更ライン
+				GetWindowRect(pobj_Debugger->hwnd,&rect);
+				if(rect.left<=pos.x&&pos.x<=rect.right&&
+					rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
+					SetCursor(LoadCursor(0,IDC_SIZENS));
+
+					dwDragLever=2;
+					SetCapture(hwnd);
+
+					PrevMousePos=pos;
+					start=pobj_nv->height_ClipDebuggerView;
+				}
+			}
+			if(bClipCompileView&&IsWindowVisible(hCompileView)){
+				//コンパイラビューとMDIクライアントの境目のサイズ変更ライン
+				GetWindowRect(hCompileView,&rect);
+				if(rect.left<=pos.x&&pos.x<=rect.right&&
+					rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
+					SetCursor(LoadCursor(0,IDC_SIZENS));
+
+					dwDragLever=3;
+					SetCapture(hwnd);
+
+					PrevMousePos=pos;
+					start=pobj_nv->height_ClipCompileView;
+				}
+			}
+#endif
+			if(pobj_SideWeb->bShow){
+				//SideWebとMDIクライアントの境目のサイズ変更ライン
+				pobj_SideWeb->GetRect(&rect);
+				ClientToScreen(hwnd,&rect);
+				if(rect.top<=pos.y&&pos.y<=rect.bottom&&
+					rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
+					SetCursor(LoadCursor(0,IDC_SIZENS));
+
+					dwDragLever=4;
+					SetCapture(hwnd);
+
+					PrevMousePos=pos;
+					start=pobj_nv->width_WebSearchView;
+				}
+			}
+			return 0;
+		case WM_LBUTTONUP:
+			if(dwDragLever){
+				dwDragLever=0;
+				ReleaseCapture();
+			}
+			return 0;
+
+
+		case WM_SYSCOMMAND:
+			//ウィンドウの最小化前にウィンドウ位置を保存
+			if(wParam==SC_MINIMIZE){
+				if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
+				else if(!IsIconic(hwnd)){
+					pobj_nv->bWindowMax=0;
+					GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
+				}
+			}
+			break;	//処理をDefFrameProcへ
+		case WM_QUERYENDSESSION:
+		case WM_CLOSE:
+			extern BOOL bSearchingClasses;
+			if(bSearchingClasses){
+				pobj_ClassTreeView->bCloseSwitch=1;
+				return 0;
+			}
+
+			//コンパイラビューを閉じる
+			if(hCompileView)
+				SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
+
+			//次回起動時にMDIウィンドウを最大化させるかを判定
+			hChild=GetWindow(hClient,GW_CHILD);
+			pobj_nv->bMDIZoomed=IsZoomed(hChild);
+
+			//プロジェクトを閉じる
+			if(ProjectInfo.name[0]){
+				if(!CloseProject()) return 0;
+			}
+
+			//MDIウィンドウの保存確認
+			hChild=GetWindow(hClient,GW_CHILD);
+			while(hChild){
+				i=GetWndNum(hChild);
+				if(!DocumentModifyCheck(hChild)) return 0;
+				hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+			}
+
+
+			if(bProfessional){
+				//Pro版は自動バックアップ及び復元機能を有効にする
+				KillTimer(hwnd,ID_TIMER_BACKUP);
+			}
+
+
+			//ProjectViewの位置を保存、ProjectViewを破棄
+			GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
+			DestroyWindow(hProjectView);
+			DestroyWindow(hProjectView_ToolWindow);
+
+			//Rebarの位置を保存、Rebarを破棄
+			delete pobj_Rebar;
+			pobj_Rebar=0;
+
+			//タブコントロールを破棄
+			delete pobj_MainTab;
+			pobj_MainTab=0;
+
+			//SideWebを破棄
+			delete pobj_SideWeb;
+			pobj_SideWeb=0;
+
+			//メインウィンドウの最大化有無、座標を保存
+			if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
+			else if(!IsIconic(hwnd)){
+				pobj_nv->bWindowMax=0;
+				GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
+			}
+
+			hChild=GetWindow(hClient,GW_CHILD);
+			while(hChild){
+				CloseDocWindow(GetWndNum(hChild));
+				DestroyWindow(hChild);
+				hChild=GetWindow(hClient,GW_CHILD);
+			}
+
+			EndProjectEditor();		//ProjectEditorの情報を保存
+
+			//エディタ用フォントを破棄
+			extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
+			if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
+			if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
+
+			DestroyWindow(hwnd);
+			return 0;
+
+		case WM_DESTROY:
+			PostQuitMessage(0);
+			return 0;
+	}
+	return DefFrameProc(hwnd,hClient,message,wParam,lParam);
+}
+
+int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
+	WNDCLASSEX wcl;
+
+	wcl.cbSize=sizeof(WNDCLASSEX);
+	wcl.hInstance=hInst;
+	wcl.lpszClassName=lpClassName;
+	wcl.lpfnWndProc=WndProc;
+
+	if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
+	else wcl.style=0;
+
+	wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
+	wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
+
+	if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
+	else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
+
+	wcl.lpszMenuName=NULL;
+	wcl.cbClsExtra=0;
+	wcl.cbWndExtra=0;
+	wcl.hbrBackground=hBackBrush;
+
+	return RegisterClassEx(&wcl);
+}
+int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
+	int i,i2,IsStr;
+	char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
+	MSG msg;
+	HACCEL hAccel;
+
+	hInst=hThisInst;
+	if(!SetupProjectEditor()) return 0;
+
+	HBRUSH hGrayBrush_LineNumber;
+	hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
+
+	if(!RegWndClass(WindowFunc,"ProjectEditor",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
+	if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
+	if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
+
+	//Web検索用のウィンドウクラス
+	if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
+	if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
+
+	//ルーラーのウィンドウクラス
+	if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
+
+	//SideWebのウィンドウクラス
+	if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
+
+
+
+	hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
+
+	//メインウィンドウ
+	RECT *prc;
+	prc=&pobj_nv->StartupWindowRect;
+	hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditor",APPLICATION_NAME,
+		WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
+		prc->left, prc->top,
+		prc->right-prc->left, prc->bottom-prc->top,
+		HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
+
+	SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
+	SetClipboardViewer(hOwner);
+
+	if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
+	else ShowWindow(hOwner,ShowCmd);
+	UpdateWindow(hOwner);
+
+	int open_sw=0;
+	if(lstrlen(lpCmdLine)>0){
+		lstrcpy(dummy,lpCmdLine);
+		for(i=0,i2=0,IsStr=0;;i++,i2++){
+			if(dummy[i]=='\"'){
+				if(IsStr==0) IsStr=1;
+				else IsStr=0;
+				i++;
+			}
+			if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
+				str[i2]=0;
+				if(!(strstr(str,":")||strstr(str,"\\\\"))){
+					lstrcpy(str2,str);
+					GetCurrentDirectory(MAX_PATH,str);
+					lstrcat(str,"\\");
+					lstrcat(str,str2);
+				}
+				ShortPathToLongPath(str,str2);
+				OpenFileWithExtension(str2);
+				open_sw=1;
+				if(dummy[i]=='\0') break;
+				i2=-1;
+				continue;
+			}
+			str[i2]=dummy[i];
+		}
+	}
+
+	BOOL bRestore=0;
+
+
+	if(bProfessional){
+		//Pro版は自動バックアップ及び復元機能を有効にする
+
+		//必要であれば復元
+		bRestore=restore();
+	}
+
+
+#ifdef THETEXT
+	if(open_sw==0&&bRestore==0){
+		//ファイルが開かれなかったとき
+		NewTextEditWindow(NULL,WNDTYPE_TEXT);
+	}
+#endif
+
+
+	while(GetMessage(&msg,NULL,0,0)){
+
+		if(!TranslateAccelerator(hOwner,hAccel,&msg)){
+			if(ProjectInfo.name[0]){
+				for(i=0,i2=0;i<MAX_WNDNUM;i++){
+					if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
+						if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
+					}
+				}
+				if(i2==0){
+					if(!TranslateMDISysAccel(hClient,&msg)){
+						TranslateMessage(&msg);
+						DispatchMessage(&msg);
+					}
+				}
+			}
+			else{
+				if(!TranslateMDISysAccel(hClient,&msg)){
+					TranslateMessage(&msg);
+					DispatchMessage(&msg);
+				}
+			}
+		}
+	}
+
+	DeleteObject(hGrayBrush_LineNumber);
+
+#if defined HeapAlloc
+	CheckHeapCheck();
+#endif
+
+	return msg.wParam;
+}
Index: /ProjectEditor/ProjectEditor.h
===================================================================
--- /ProjectEditor/ProjectEditor.h	(revision 3)
+++ /ProjectEditor/ProjectEditor.h	(revision 3)
@@ -0,0 +1,109 @@
+#include "Common.h"
+
+#ifdef JPN
+//日本語
+
+#ifdef THETEXT
+LPSTR DefFileFilter="テキスト ファイル(*.txt)\0*.txt\0HTMLファイル(*.htm;*html)\0*.htm;*html\0CGIファイル(*.cgi;*.pl)\0*.cgi;*.pl\0PHPファイル(*.php)\0*.php\0テンプレート ファイル(*.tpl)\0*.tpl\0すべてのファイル(*.*)\0*\0\0";
+#else
+LPSTR DefFileFilter="プログラム ファイル(*.ab;*.abp;*.bas;*.sbp)\0*.ab;*.abp;*.bas;*sbp\0プロジェクト(*.pj)\0*.pj\0テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0";
+#endif
+
+LPSTR HtmlFileFilter="HTMLファイル(*.html;*.htm)\0*.html;*.htm\0すべてのファイル(*.*)\0*\0\0";
+LPSTR TextFileFilter="テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0";
+
+LPSTR ProjectFileFilter="プロジェクト(*.pj)\0*.pj\0\0";
+LPSTR BitmapFileFilter="ビットマップ(*.bmp)\0*.bmp\0\0";
+LPSTR IconFileFilter="アイコン(*.ico)\0*.ico\0\0";
+LPSTR CursorFileFilter="カーソル(*.cur)\0*.cur\0\0";
+
+LPSTR ExeFileFilter="実行可能ファイル(*.exe)\0*.exe\0\0";
+
+#else
+//英語
+LPSTR DefFileFilter="Program files (*.ab;*.abp;*.bas;*.sbp)\0*.ab;*.abp;*.bas;*sbp\0Project templates (*.pj)\0*.pj\0Text files (*.txt)\0*.txt\0All files(*.*)\0*\0\0";
+LPSTR ProjectFileFilter="Project templates (*.pj)\0*.pj\0\0";
+LPSTR BitmapFileFilter="Bitmap files (*.bmp)\0*.bmp\0\0";
+LPSTR IconFileFilter="Icon files (*.ico)\0*.ico\0\0";
+LPSTR CursorFileFilter="Cursor files (*.cur)\0*.cur\0\0";
+#endif
+
+HINSTANCE hInst,hResInst,hIconResInst;
+HANDLE hHeap;
+HFONT hStatusFont;
+HFONT hHyperLinkFont;
+HFONT hFont_LineNumber;
+HFONT hRulerFont;
+SIZE sizeLineNumberFont;
+HICON hOwnerIcon,hBasicProgramIcon,hTextDocumentIcon,hWindowDocumentIcon;
+HBRUSH h3DFaceBackBrush;
+DWORD dwRadClipboardID;
+char *lpszCompilerName;
+
+FWINLAYER SetLayeredWindowAttributes;
+HINSTANCE hUser32Lib;
+
+/* 各ウィンドウ */
+HWND hOwner;					//オーナーウィンドウ
+HWND hClient;					//MDIクライアントウィンドウ
+HWND hStatusBar;				//ステータスバー
+MDIINFO MdiInfo[MAX_WNDNUM];	//MDIドキュメントウィンドウ情報
+
+/* メニュー */
+HMENU hFirstMainMenu;
+HMENU hEditMenuBase,hEditMenu;
+HMENU hRebarMenuBase,hRebarMenu;
+HMENU hTabMenuBase,hTabMenu,hTabColorMenu;
+HMENU hFileTreeMenuBase;
+HMENU hProcedureTreeMenuBase;
+HMENU hMaterialTreeMenuBase;
+HMENU hRadMenuBase;
+CSubMenuEx *pobj_FileHistoryMenu;
+#ifndef THETEXT
+CSubMenuEx *pobj_ProjectHistoryMenu;
+#endif
+
+
+//エディタ文字情報
+METHODCHECKINFO MethodCheckInfo;
+COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+
+//プロジェクト情報
+NEWPROJECTINFO NewProjectInfo;
+PROJECTINFO ProjectInfo;
+HWND hProjectView;		//プロジェクト ビュー
+HWND hProjectView_ToolWindow;
+
+//コンパイラビュー情報
+HWND hCompileView;
+BOOL bClipCompileView=1;
+
+//RADツール情報
+RADINFO RadInfo;
+HWND hTools;			//コントロール挿入用のツールウィンドウ
+
+//不揮発性データ（レジストリに保存される）
+CNonVolatile *pobj_nv;
+
+TEXTEDIT_COLOR_INFO tci;
+
+int ScreenX,ScreenY;
+int DocumentCounter;
+_int8 IsCheckLineColor;
+
+char pj_editor_Dir[MAX_PATH];
+char CmdMsg[255];
+char NewIdName[MAX_PATH];
+char NewFileName[MAX_PATH];	//新規作成ダイアログのプロジェクト追加用
+char *pHeaderBuf;
+char *pUserSource=0;
+
+
+
+//Professional or Standard
+BOOL bProfessional=0;
+
+
+
+//Break point
+CDBBreakPoint *pobj_DBBreakPoint;
Index: /ProjectEditor/ProjectEditor.rc
===================================================================
--- /ProjectEditor/ProjectEditor.rc	(revision 3)
+++ /ProjectEditor/ProjectEditor.rc	(revision 3)
@@ -0,0 +1,97 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// 日本語 resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
+#ifdef _WIN32
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+#pragma code_page(932)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+#if defined(APSTUDIO_INVOKED) || defined(PROJECTEDITOR)
+#if defined(APSTUDIO_INVOKED)
+IDI_MAIN$(PROJECTEDITOR) ICON    DISCARDABLE     "icon1.ico"
+#else
+IDI_MAIN                ICON    DISCARDABLE     "icon1.ico"
+#endif
+#endif
+IDI_BASICPROGRAM        ICON    DISCARDABLE     "BasicProgram.ico"
+IDI_TEXTDOCUMENT        ICON    DISCARDABLE     "TextDocument.ico"
+IDI_FOLDER_CLOSE        ICON    DISCARDABLE     "folder_close.ico"
+IDI_FOLDER_OPEN         ICON    DISCARDABLE     "folder_open.ico"
+IDI_WINDOW              ICON    DISCARDABLE     "Window.ico"
+IDI_PROCEDURE           ICON    DISCARDABLE     "Procedure.ico"
+IDI_FILE_PJ             ICON    DISCARDABLE     "file_pj.ico"
+IDI_FILE_BAS            ICON    DISCARDABLE     "file_bas.ico"
+IDI_FILE_SBP            ICON    DISCARDABLE     "file_sbp.ico"
+IDI_FILE_ICON           ICON    DISCARDABLE     "file_icon.ico"
+IDI_FILE_BMP            ICON    DISCARDABLE     "file_bmp.ico"
+IDI_FILE_CURSOR         ICON    DISCARDABLE     "ico00001.ico"
+#if defined(APSTUDIO_INVOKED) || defined(THETEXT)
+#if defined(APSTUDIO_INVOKED)
+IDI_MAIN$(THETEXT)      ICON    DISCARDABLE     "main.ico"
+#else
+IDI_MAIN                ICON    DISCARDABLE     "main.ico"
+#endif
+#endif
+#endif    // 日本語 resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
Index: /ProjectEditor/ProjectEditor.sln
===================================================================
--- /ProjectEditor/ProjectEditor.sln	(revision 3)
+++ /ProjectEditor/ProjectEditor.sln	(revision 3)
@@ -0,0 +1,35 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ProjectEditor", "ProjectEditor.vcproj", "{DC1B787E-510F-4F7D-8F9A-182600904D83}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		AB_Debug|Win32 = AB_Debug|Win32
+		AB_Release|Win32 = AB_Release|Win32
+		English_Rel|Win32 = English_Rel|Win32
+		TheText_Debug|Win32 = TheText_Debug|Win32
+		TheText_Release|Win32 = TheText_Release|Win32
+		TheText_Share_Debug|Win32 = TheText_Share_Debug|Win32
+		TheText_Share_Release|Win32 = TheText_Share_Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.AB_Debug|Win32.ActiveCfg = AB_Debug|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.AB_Debug|Win32.Build.0 = AB_Debug|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.AB_Release|Win32.ActiveCfg = AB_Release|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.AB_Release|Win32.Build.0 = AB_Release|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.English_Rel|Win32.ActiveCfg = English_Rel|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.English_Rel|Win32.Build.0 = English_Rel|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.TheText_Debug|Win32.ActiveCfg = TheText_Debug|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.TheText_Debug|Win32.Build.0 = TheText_Debug|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.TheText_Release|Win32.ActiveCfg = TheText_Release|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.TheText_Release|Win32.Build.0 = TheText_Release|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.TheText_Share_Debug|Win32.ActiveCfg = TheText_Share_Debug|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.TheText_Share_Debug|Win32.Build.0 = TheText_Share_Debug|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.TheText_Share_Release|Win32.ActiveCfg = TheText_Share_Release|Win32
+		{DC1B787E-510F-4F7D-8F9A-182600904D83}.TheText_Share_Release|Win32.Build.0 = TheText_Share_Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /ProjectEditor/ProjectEditor.vcproj
===================================================================
--- /ProjectEditor/ProjectEditor.vcproj	(revision 3)
+++ /ProjectEditor/ProjectEditor.vcproj	(revision 3)
@@ -0,0 +1,4455 @@
+<?xml version="1.0" encoding="shift_jis"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="ProjectEditor"
+	ProjectGUID="{DC1B787E-510F-4F7D-8F9A-182600904D83}"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="English_Rel|Win32"
+			OutputDirectory=".\English_Rel"
+			IntermediateDirectory=".\English_Rel"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\English_Rel/ProjectEditor.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;ENGLISH_REL;_WINDOWS"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\English_Rel/ProjectEditor.pch"
+				AssemblerListingLocation=".\English_Rel/"
+				ObjectFile=".\English_Rel/"
+				ProgramDataBaseFileName=".\English_Rel/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="ENG,PROJECTEDITOR"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib"
+				OutputFile="../ActiveBasic/ProjectEditor.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\English_Rel/ProjectEditor.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\English_Rel/ProjectEditor.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="TheText_Share_Debug|Win32"
+			OutputDirectory=".\ProjectEditor___Win32_TheText_Share_Debug"
+			IntermediateDirectory=".\ProjectEditor___Win32_TheText_Share_Debug"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\ProjectEditor___Win32_TheText_Share_Debug/ProjectEditor.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;JPN;THETEXT;SHAREWARE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				PrecompiledHeaderFile=".\ProjectEditor___Win32_TheText_Share_Debug/ProjectEditor.pch"
+				AssemblerListingLocation=".\ProjectEditor___Win32_TheText_Share_Debug/"
+				ObjectFile=".\ProjectEditor___Win32_TheText_Share_Debug/"
+				ProgramDataBaseFileName=".\ProjectEditor___Win32_TheText_Share_Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="JPN,THETEXT"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib rpcrt4.lib"
+				OutputFile="../TheText/TheText.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\ProjectEditor___Win32_TheText_Share_Debug/TheText.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\ProjectEditor___Win32_TheText_Share_Debug/ProjectEditor.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="TheText_Release|Win32"
+			OutputDirectory=".\ProjectEditor___Win32_TheText_Release"
+			IntermediateDirectory=".\ProjectEditor___Win32_TheText_Release"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\ProjectEditor___Win32_TheText_Release/ProjectEditor.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN;THETEXT"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\ProjectEditor___Win32_TheText_Release/ProjectEditor.pch"
+				AssemblerListingLocation=".\ProjectEditor___Win32_TheText_Release/"
+				ObjectFile=".\ProjectEditor___Win32_TheText_Release/"
+				ProgramDataBaseFileName=".\ProjectEditor___Win32_TheText_Release/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="JPN,THETEXT"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib rpcrt4.lib"
+				OutputFile="../TheText_Standard/TheText.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\ProjectEditor___Win32_TheText_Release/TheText.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\ProjectEditor___Win32_TheText_Release/ProjectEditor.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="AB_Debug|Win32"
+			OutputDirectory=".\ProjectEditor___Win32_AB_Debug"
+			IntermediateDirectory=".\ProjectEditor___Win32_AB_Debug"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\ProjectEditor___Win32_AB_Debug/ProjectEditor.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;JPN"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				PrecompiledHeaderFile=".\ProjectEditor___Win32_AB_Debug/ProjectEditor.pch"
+				AssemblerListingLocation=".\ProjectEditor___Win32_AB_Debug/"
+				ObjectFile=".\ProjectEditor___Win32_AB_Debug/"
+				ProgramDataBaseFileName=".\ProjectEditor___Win32_AB_Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="JPN,PROJECTEDITOR"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib rpcrt4.lib"
+				OutputFile="../ActiveBasic/abdev.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\ProjectEditor___Win32_AB_Debug/abdev.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\ProjectEditor___Win32_AB_Debug/ProjectEditor.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="TheText_Share_Release|Win32"
+			OutputDirectory=".\ProjectEditor___Win32_TheText_Share_Release"
+			IntermediateDirectory=".\ProjectEditor___Win32_TheText_Share_Release"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\ProjectEditor___Win32_TheText_Share_Release/ProjectEditor.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN;THETEXT;SHAREWARE"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\ProjectEditor___Win32_TheText_Share_Release/ProjectEditor.pch"
+				AssemblerListingLocation=".\ProjectEditor___Win32_TheText_Share_Release/"
+				ObjectFile=".\ProjectEditor___Win32_TheText_Share_Release/"
+				ProgramDataBaseFileName=".\ProjectEditor___Win32_TheText_Share_Release/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="JPN,THETEXT"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib rpcrt4.lib"
+				OutputFile="../TheText/TheText.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\ProjectEditor___Win32_TheText_Share_Release/TheText.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\ProjectEditor___Win32_TheText_Share_Release/ProjectEditor.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="AB_Release|Win32"
+			OutputDirectory=".\ProjectEditor___Win32_AB_Release"
+			IntermediateDirectory=".\ProjectEditor___Win32_AB_Release"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\ProjectEditor___Win32_AB_Release/ProjectEditor.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\ProjectEditor___Win32_AB_Release/ProjectEditor.pch"
+				AssemblerListingLocation=".\ProjectEditor___Win32_AB_Release/"
+				ObjectFile=".\ProjectEditor___Win32_AB_Release/"
+				ProgramDataBaseFileName=".\ProjectEditor___Win32_AB_Release/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="JPN,PROJECTEDITOR"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib rpcrt4.lib"
+				OutputFile="../ActiveBasic/abdev.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				ProgramDatabaseFile=".\ProjectEditor___Win32_AB_Release/abdev.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\ProjectEditor___Win32_AB_Release/ProjectEditor.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="TheText_Debug|Win32"
+			OutputDirectory=".\ProjectEditor___Win32_TheText_Debug"
+			IntermediateDirectory=".\ProjectEditor___Win32_TheText_Debug"
+			ConfigurationType="1"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\ProjectEditor___Win32_TheText_Debug/ProjectEditor.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;JPN;THETEXT"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				PrecompiledHeaderFile=".\ProjectEditor___Win32_TheText_Debug/ProjectEditor.pch"
+				AssemblerListingLocation=".\ProjectEditor___Win32_TheText_Debug/"
+				ObjectFile=".\ProjectEditor___Win32_TheText_Debug/"
+				ProgramDataBaseFileName=".\ProjectEditor___Win32_TheText_Debug/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="JPN,THETEXT"
+				Culture="1041"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib comctl32.lib imm32.lib htmlhelp.lib rpcrt4.lib"
+				OutputFile="../TheText_Standard/TheText.exe"
+				LinkIncremental="2"
+				SuppressStartupBanner="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\ProjectEditor___Win32_TheText_Debug/TheText.pdb"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				AdditionalManifestFiles="$(ProjectDir)\manifest.xml"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\ProjectEditor___Win32_TheText_Debug/ProjectEditor.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="Backup.cpp"
+				>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="DialogBoxes.cpp"
+				>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="DocumentAdvice.cpp"
+				>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="FileOperation.cpp"
+				>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="History.cpp"
+				>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="ProjectEditor.cpp"
+				>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="ProjectEditor.rc"
+				>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Debug|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Release|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Debug|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Release|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Release|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Debug|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="SubOperation.cpp"
+				>
+				<FileConfiguration
+					Name="English_Rel|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Share_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="AB_Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="TheText_Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<Filter
+				Name="コンパイラ・デバッガ通信"
+				>
+				<File
+					RelativePath="Attach.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="Attach.h"
+					>
+				</File>
+				<File
+					RelativePath="Debugger.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="Debugger.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="プロジェクト解析"
+				>
+				<File
+					RelativePath="ProjectControl.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="Resource.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="WindowControl.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<Filter
+					Name="クラスビュー"
+					>
+					<File
+						RelativePath="CClassInfo.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="ClassTree.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="ファイルビュー"
+					>
+					<File
+						RelativePath="CFileInfo.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="FileTree.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="FileTree.h"
+						>
+					</File>
+				</Filter>
+			</Filter>
+			<Filter
+				Name="RADエディタ"
+				>
+				<File
+					RelativePath="DrawWindow.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="MessageCallOperation.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="Rad_UndoRedo.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="RadProc.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="RadSupport.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="RadToolsAndPropertyProc.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+			<Filter
+				Name="メニューエディタ"
+				>
+				<File
+					RelativePath="MenuProc.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+			<Filter
+				Name="アイコンエディタ"
+				>
+				<File
+					RelativePath="IconEditor.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="IconEditor_Color.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="IconEditor_Main.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="IconEditor_Tool.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="IconEditor_UndoRedo.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+			<Filter
+				Name="テキストエディタ"
+				>
+				<File
+					RelativePath="Caret.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="DrawBuffer.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="Print.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="Replace.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="Search.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="TextEditor.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="TextEditor_UndoRedo.cpp"
+					>
+					<FileConfiguration
+						Name="English_Rel|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Share_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="AB_Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="TheText_Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions=""
+						/>
+					</FileConfiguration>
+				</File>
+				<Filter
+					Name="イベントプロシージャ"
+					>
+					<File
+						RelativePath="TextEditor_EventProc.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="TextEditor_ImeEvent.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="TextEditor_KeyEvent.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="TextEditor_MouseEvent.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="コード解析(Basic)"
+					>
+					<File
+						RelativePath="analysis.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath=".\CodeFormatter.cpp"
+						>
+					</File>
+					<File
+						RelativePath="Complement.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="EndPairCommandComplement.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="ParameterHint.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="コード解析(HTML)"
+					>
+					<File
+						RelativePath="HtmlAnalysis.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="HtmlAnalysis.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="文字コード変換"
+					>
+					<File
+						RelativePath="nkf_class.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="nkf_class.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="Web検索"
+					>
+					<File
+						RelativePath="CIEsink.h"
+						>
+					</File>
+					<File
+						RelativePath="WebSearch.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="WebSearch.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="文字カウント"
+					>
+					<File
+						RelativePath="StringCount.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="ルーラー"
+					>
+					<File
+						RelativePath="Ruler.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="Ruler.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="正規表現"
+					>
+					<File
+						RelativePath="BREGEXP.H"
+						>
+					</File>
+					<File
+						RelativePath="reg_exp.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+			</Filter>
+			<Filter
+				Name="全般"
+				>
+				<Filter
+					Name="デザイン テーマ"
+					>
+					<File
+						RelativePath="DesignTheme.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="DesignTheme.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="関連付け"
+					>
+					<File
+						RelativePath="ExtensionLink.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="ExtensionLink.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="タブコントロール"
+					>
+					<File
+						RelativePath="TabCtrl.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="TabCtrl.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="レバーコントロール"
+					>
+					<File
+						RelativePath="ChildWndOnRebar.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="rebar.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+				</Filter>
+				<Filter
+					Name="メニューコントロール"
+					>
+					<File
+						RelativePath="menu.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="menu.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="LuxCtrl"
+					>
+					<File
+						RelativePath="LuxCtrl.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="LuxCtrl.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="ユーザーデータ"
+					>
+					<File
+						RelativePath="NonVolatile.cpp"
+						>
+						<FileConfiguration
+							Name="English_Rel|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Share_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="AB_Release|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+						<FileConfiguration
+							Name="TheText_Debug|Win32"
+							>
+							<Tool
+								Name="VCCLCompilerTool"
+								PreprocessorDefinitions=""
+							/>
+						</FileConfiguration>
+					</File>
+					<File
+						RelativePath="NonVolatile.h"
+						>
+					</File>
+				</Filter>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="Common.h"
+				>
+			</File>
+			<File
+				RelativePath="ProjectEditor.h"
+				>
+			</File>
+			<Filter
+				Name="言語対応文字列"
+				>
+				<Filter
+					Name="RAD"
+					>
+					<File
+						RelativePath="rad_msg_eng.h"
+						>
+					</File>
+					<File
+						RelativePath="rad_msg_jpn.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="一般"
+					>
+					<File
+						RelativePath="common_msg_eng.h"
+						>
+					</File>
+					<File
+						RelativePath="common_msg_jpn.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="プロジェクト管理"
+					>
+					<File
+						RelativePath="pj_msg_eng.h"
+						>
+					</File>
+					<File
+						RelativePath="pj_msg_jpn.h"
+						>
+					</File>
+				</Filter>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="リソースファイル"
+			>
+			<File
+				RelativePath="BasicProgram.ico"
+				>
+			</File>
+			<File
+				RelativePath="file_bas.ico"
+				>
+			</File>
+			<File
+				RelativePath="file_bmp.ico"
+				>
+			</File>
+			<File
+				RelativePath="file_icon.ico"
+				>
+			</File>
+			<File
+				RelativePath="file_pj.ico"
+				>
+			</File>
+			<File
+				RelativePath="file_sbp.ico"
+				>
+			</File>
+			<File
+				RelativePath="folder_close.ico"
+				>
+			</File>
+			<File
+				RelativePath="folder_open.ico"
+				>
+			</File>
+			<File
+				RelativePath="ico00001.ico"
+				>
+			</File>
+			<File
+				RelativePath="icon1.ico"
+				>
+			</File>
+			<File
+				RelativePath="Procedure.ico"
+				>
+			</File>
+			<File
+				RelativePath="TextDocument.ico"
+				>
+			</File>
+			<File
+				RelativePath="Window.ico"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="main.ico"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /ProjectEditor/RadProc.cpp
===================================================================
--- /ProjectEditor/RadProc.cpp	(revision 3)
+++ /ProjectEditor/RadProc.cpp	(revision 3)
@@ -0,0 +1,1783 @@
+
+#include "common.h"
+
+void NewRadWindow(int WndInfoNum){
+	extern HINSTANCE hInst,hResInst;
+	extern HWND hDocCombo;
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	HWND hChild;
+	RECT rect;
+	MDICREATESTRUCT mdic;
+	WINDOW_INFO *pWindowInfo;
+
+	pWindowInfo=&ProjectInfo.pWindowInfo[WndInfoNum];
+
+	//すでに指定されたファイルが開かれている場合
+	hChild=GetWindow(hClient,GW_CHILD);
+	while(hChild){
+		i=GetWndNum(hChild);
+		if(MdiInfo[i].DocType==WNDTYPE_RAD){
+			if(lstrcmpi(MdiInfo[i].path,pWindowInfo->name)==0) break;
+		}
+		hChild=GetNextWindow(hChild,GW_HWNDNEXT);
+	}
+	if(hChild){
+		BringWindowToTop(hChild);
+		return;
+	}
+
+	mdic.szTitle=pWindowInfo->name;
+	mdic.szClass="MDIClientWindow_Rad";
+	mdic.hOwner=hInst;
+	mdic.x=CW_USEDEFAULT;
+	mdic.y=CW_USEDEFAULT;
+	mdic.cx=CW_USEDEFAULT;
+	mdic.cy=CW_USEDEFAULT;
+
+	hChild=GetWindow(hClient,GW_CHILD);
+	if(IsWindow(hChild)){
+		if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE|WS_CLIPCHILDREN;
+		else mdic.style=0;
+	}
+	else{
+		if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE|WS_CLIPCHILDREN;
+		else mdic.style=0;
+	}
+
+	mdic.lParam=0;
+	hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic);	//ウィンドウ作成
+
+
+	//////////////////////
+	// 子ウィンドウを作成
+	//////////////////////
+
+	//ツールウィンドウを作成
+	HWND hTools;
+	hTools=CreateWindow("RadToolsWindow",NULL,
+		WS_CHILD|WS_VSCROLL|WS_VISIBLE|WS_CLIPCHILDREN,
+		0,0,0,0,
+		hChild,NULL,hInst,NULL);
+
+	//プロパティウィンドウを作成
+	HWND hProperty;
+	hProperty=CreateWindowEx(WS_EX_CLIENTEDGE,"RadPropertyWindow",NULL,
+		WS_CHILD|WS_VSCROLL|WS_VISIBLE|WS_CLIPCHILDREN,
+		0,0,0,0,
+		hChild,NULL,hInst,NULL);
+
+	//内部RADウィンドウを作成
+	HWND hRad;
+	hRad=CreateWindowEx(WS_EX_CLIENTEDGE,"RadWindow",NULL,
+		WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE|WS_CLIPCHILDREN,
+		0,0,0,0,
+		hChild,NULL,hInst,NULL);
+
+	//サポートウィンドウを作成
+	HWND hSupport;
+	hSupport=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_SUPPORT),hChild,DlgRadSupport);
+
+	//ウィンドウのID登録
+	HDC hdc;
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd==0){
+			MdiInfo[i].hwnd=hChild;
+			MdiInfo[i].DocType=WNDTYPE_RAD;
+			MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pWindowInfo->name)+1);
+			lstrcpy(MdiInfo[i].title,pWindowInfo->name);
+			MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(pWindowInfo->name)+1);
+			lstrcpy(MdiInfo[i].path,pWindowInfo->name);
+
+
+			////////////////////////////
+			// MDIRADINFO構造体をセット
+			////////////////////////////
+
+			MdiInfo[i].MdiRadInfo=(MDIRADINFO *)GlobalAlloc(GPTR,sizeof(MDIRADINFO));
+
+			MdiInfo[i].MdiRadInfo->hTools=hTools;
+			MdiInfo[i].MdiRadInfo->hProperty=hProperty;
+			MdiInfo[i].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_WINDOW),hProperty,RadProperty_WindowProc);
+
+			SCROLLINFO ScrollInfo;
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_POS;
+			ScrollInfo.nPos=0;
+			SetScrollInfo(MdiInfo[i].MdiRadInfo->hProperty,SB_VERT,&ScrollInfo,1);
+
+			MdiInfo[i].MdiRadInfo->hRad=hRad;
+
+			MdiInfo[i].MdiRadInfo->hSupport=hSupport;
+
+			hdc=GetDC(hRad);
+			MdiInfo[i].MdiRadInfo->hBitmap=CreateCompatibleBitmap(hdc,ScreenX*2,ScreenY*2);
+			MdiInfo[i].MdiRadInfo->hMemDC=CreateCompatibleDC(hdc);
+			MdiInfo[i].MdiRadInfo->hOldBitmap=
+				(HBITMAP)SelectObject(MdiInfo[i].MdiRadInfo->hMemDC,MdiInfo[i].MdiRadInfo->hBitmap);
+			ReleaseDC(hRad,hdc);
+
+			for(i2=0;i2<MAX_RAD_SELITEM;i2++) MdiInfo[i].MdiRadInfo->SelectingItem[i2]=-1;
+			MdiInfo[i].MdiRadInfo->ButtonSelect=IDC_TOOL_MOUSE;
+
+			//変更情報を初期化
+			MdiInfo[i].MdiRadInfo->undo.NowPos=0;
+			memset(MdiInfo[i].MdiRadInfo->undo.Command,0,sizeof(int)*MAX_UNDONUM);
+
+
+			DrawRadWindow(i,pWindowInfo);
+
+			//サポートダイアログの内容をセット
+			SetSupportDlgData(i,WndInfoNum);
+
+			break;
+		}
+	}
+
+	ShowWindow(hSupport,SW_SHOW);
+
+	//ウィンドウ位置を初期化
+	GetClientRect(hChild,&rect);
+	ResizeToRadToolWindows(i,rect.right,rect.bottom);
+
+	i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)pWindowInfo->name);	//Docコンボボックスに追加
+	SendMessage(hDocCombo,CB_SETCURSEL,i,0);
+
+	//タブに追加
+	pobj_MainTab->insert(pWindowInfo->name,1);
+
+	//メニュー状態を設定
+	ResetState_DocMenu();
+
+	SetFocus(hRad);
+}
+
+int InsertDlgItem(int WndNum,int WndInfoNum,int ItemNum,POINT *pPos,SIZE *pSize,char *IdName,char *caption,DWORD style_or_WndNum,DWORD ExStyle,int Control,int ImageType,char *ImagePath,DWORD dwInsertType){
+	//dwInsertType
+	//0 … 元に戻す、やり直し
+	//1 … 通常の挿入
+	//2 … 貼り付け
+
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,NewItemNum;
+	char temporary[MAX_PATH];
+	CHILDINFO *pChildInfo;
+
+	ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo,(ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows+1)*sizeof(WINDOW_INFO));
+	if(ItemNum==-1)
+		NewItemNum=ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;
+	else{
+		for(i=ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;i>ItemNum;i--)
+			ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i]=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i-1];
+		NewItemNum=ItemNum;
+	}
+	pChildInfo=&ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[NewItemNum];
+
+	//ID
+	if(ItemNum==-1){
+		for(i=lstrlen(IdName)-1;i>=0;i--){
+			if(!('0'<=IdName[i]&&IdName[i]<='9')) break;
+		}
+		i++;
+
+		if(IdName[i]!='\0'){
+			i2=atoi(IdName+i)+1;
+			if(dwInsertType==2) i2--;
+			IdName[i]=0;
+		}
+		else{
+			if(dwInsertType==2) i2=0;
+			else i2=1;
+		}
+
+		if(i2==0) lstrcpy(temporary,IdName);
+		else sprintf(temporary,"%s%d",IdName,i2);
+SearchStart:
+		for(i=0;i<ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;i++){
+			if(i!=NewItemNum){
+				if(lstrcmp(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].IdName,temporary)==0){
+					i2++;
+					sprintf(temporary,"%s%d",IdName,i2);
+					goto SearchStart;
+				}
+			}
+		}
+	}
+	else lstrcpy(temporary,IdName);
+	pChildInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(pChildInfo->IdName,temporary);
+
+	//位置
+	pChildInfo->pos=*pPos;
+	pChildInfo->size=*pSize;
+	//小さすぎる場合は、最小の大きさに調整
+	if(pChildInfo->size.cx<MIN_ITEM_X) pChildInfo->size.cx=MIN_ITEM_X;
+	if(pChildInfo->size.cy<MIN_ITEM_Y) pChildInfo->size.cy=MIN_ITEM_Y;
+
+	//テキスト
+	if(ItemNum==-1){
+		if(dwInsertType==1){
+			if(caption[0]) sprintf(temporary,"%s%d",caption,i2);
+			else temporary[0]=0;
+		}
+		else lstrcpy(temporary,caption);
+	}
+	else lstrcpy(temporary,caption);
+	pChildInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(pChildInfo->caption,temporary);
+
+	//スタイル
+	pChildInfo->style=style_or_WndNum;
+
+	//拡張スタイル
+	pChildInfo->ExStyle=ExStyle;
+
+	//クラス名
+	pChildInfo->Control=Control;
+
+	if(Control==CT_IMAGEBOX){
+		//イメージ ボックスの場合
+		pChildInfo->ImageCtrlInfo.type=ImageType;
+		if(!ImagePath)
+			pChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+		else{
+			pChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,lstrlen(ImagePath)+1);
+			lstrcpy(pChildInfo->ImageCtrlInfo.path,ImagePath);
+		}
+	}
+
+	//変更情報
+	if(dwInsertType!=0)
+		Rad_NoticeChanging(WndNum,RAD_UNDO_INSERTITEM,NewItemNum,(DWORD)pChildInfo);
+
+	ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows++;
+
+	DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+	return NewItemNum;
+}
+void DeleteDlgItem(int WndNum,int WndInfoNum,int ItemNum,BOOL bNoticeChanging){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i;
+
+	//変更情報
+	if(bNoticeChanging)
+		Rad_NoticeChanging(WndNum,RAD_UNDO_DELETEITEM,ItemNum,(DWORD)&ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[ItemNum]);
+
+	//子ウィンドウのメモリを解放
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[ItemNum].IdName);
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[ItemNum].caption);
+	if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[ItemNum].Control==CT_IMAGEBOX){
+		//イメージ ボックスの場合
+		HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[ItemNum].ImageCtrlInfo.path);
+	}
+
+	ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows--;
+	for(i=ItemNum;i<ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;i++)
+		ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i]=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i+1];
+	if(ProjectInfo.NumberOfWindows==0) ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo,1);
+	else ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo,ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows*sizeof(CHILDINFO));
+
+	DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+
+
+	//////////////////////////////
+	//プロパティウィンドウを設定
+	DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hProp_Dlg);
+	MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_WINDOW),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_WindowProc);
+
+	SCROLLINFO ScrollInfo;
+	ScrollInfo.cbSize=sizeof(SCROLLINFO);
+	ScrollInfo.fMask=SIF_POS;
+	ScrollInfo.nPos=0;
+	SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hProperty,SB_VERT,&ScrollInfo,1);
+
+	RECT rect;
+	GetClientRect(MdiInfo[WndNum].MdiRadInfo->hProperty,&rect);
+	SendMessage(MdiInfo[WndNum].MdiRadInfo->hProperty,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
+}
+
+void CursorPos_GlobalToLocal(HWND hwnd,long *x,long *y){
+	SCROLLINFO VertScrollInfo,HorzScrollInfo;
+
+	VertScrollInfo.cbSize=sizeof(SCROLLINFO);
+	VertScrollInfo.fMask=SIF_RANGE|SIF_POS;
+	GetScrollInfo(hwnd,SB_VERT,&VertScrollInfo);
+	HorzScrollInfo.cbSize=sizeof(SCROLLINFO);
+	HorzScrollInfo.fMask=SIF_RANGE|SIF_POS;
+	GetScrollInfo(hwnd,SB_HORZ,&HorzScrollInfo);
+
+	*x-=HorzScrollInfo.nPos;
+	*y-=VertScrollInfo.nPos;
+}
+void CursorPos_LocalToGlobal(HWND hwnd,long *x,long *y){
+	SCROLLINFO VertScrollInfo,HorzScrollInfo;
+
+	VertScrollInfo.cbSize=sizeof(SCROLLINFO);
+	VertScrollInfo.fMask=SIF_RANGE|SIF_POS;
+	GetScrollInfo(hwnd,SB_VERT,&VertScrollInfo);
+	HorzScrollInfo.cbSize=sizeof(SCROLLINFO);
+	HorzScrollInfo.fMask=SIF_RANGE|SIF_POS;
+	GetScrollInfo(hwnd,SB_HORZ,&HorzScrollInfo);
+
+	*x+=HorzScrollInfo.nPos;
+	*y+=VertScrollInfo.nPos;
+}
+void DrawFrame(HWND hwnd,int WndNum,int WndInfoNum,RECT *NewRect,RECT *OldRect,BOOL bLA){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	static int swLineStop;
+	int i,sw;
+	int x,y;
+	HDC hdc;
+	HPEN hPen,hOldPen;
+	HBRUSH hOldBrush;
+	RECT rect;
+
+	hdc=GetDC(hwnd);
+
+	sw=0;
+	if(pobj_nv->bLineAdjust&&bLA){
+		for(i=0;i<ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;i++){
+			if(i==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]) continue;
+			if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].Control !=
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control) continue;
+
+			if(NewRect->left<OldRect->left){
+				if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x
+											>
+					NewRect->left - MdiInfo[WndNum].MdiRadInfo->ClientPos.x
+					&&
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x-10
+											<
+					NewRect->left - MdiInfo[WndNum].MdiRadInfo->ClientPos.x){
+
+					//左側をストップする
+					x=NewRect->right-NewRect->left;
+					NewRect->left=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x + MdiInfo[WndNum].MdiRadInfo->ClientPos.x;
+					NewRect->right=NewRect->left+x;
+
+					hPen=CreatePen(PS_SOLID,0,RGB(100,100,100));
+					hOldPen=(HPEN)SelectObject(hdc,hPen);
+					MoveToEx(hdc,NewRect->left,0,NULL);
+					LineTo(hdc,NewRect->left,ScreenX);
+					SelectObject(hdc,hOldPen);
+					DeleteObject(hPen);
+
+					swLineStop=1;
+					sw=1;
+				}
+			}
+			if(NewRect->top<OldRect->top){
+				if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y
+											>
+					NewRect->top - MdiInfo[WndNum].MdiRadInfo->ClientPos.y
+					&&
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y-10
+											<
+					NewRect->top - MdiInfo[WndNum].MdiRadInfo->ClientPos.y){
+
+					//左側をストップする
+					y=NewRect->bottom-NewRect->top;
+					NewRect->top=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y + MdiInfo[WndNum].MdiRadInfo->ClientPos.y;
+					NewRect->bottom=NewRect->top+y;
+
+					hPen=CreatePen(PS_SOLID,0,RGB(100,100,100));
+					hOldPen=(HPEN)SelectObject(hdc,hPen);
+					MoveToEx(hdc,0,NewRect->top,NULL);
+					LineTo(hdc,ScreenY,NewRect->top);
+					SelectObject(hdc,hOldPen);
+					DeleteObject(hPen);
+
+					swLineStop=1;
+					sw=1;
+				}
+			}
+		}
+	}
+
+	//以前の選択フレームを消去
+	RectNaturalFormat(OldRect,&rect);
+	x=rect.left;
+	y=rect.top;
+	CursorPos_GlobalToLocal(hwnd,&rect.left,&rect.top);
+	CursorPos_GlobalToLocal(hwnd,&rect.right,&rect.bottom);
+	if(swLineStop&&sw==0){
+		BitBlt(hdc,0,0,ScreenX*2,ScreenY*2,
+			MdiInfo[WndNum].MdiRadInfo->hMemDC,0,0,SRCCOPY);
+		swLineStop=0;
+	}
+	else{
+		BitBlt(hdc,rect.left-LEVER_THICK, rect.top-LEVER_THICK,
+			rect.right-rect.left+LEVER_THICK*2, rect.bottom-rect.top+LEVER_THICK*2,
+			MdiInfo[WndNum].MdiRadInfo->hMemDC,x-LEVER_THICK,y-LEVER_THICK,SRCCOPY);
+	}
+
+	//新しい選択フレームを描画
+	RectNaturalFormat(NewRect,&rect);
+	CursorPos_GlobalToLocal(hwnd,&rect.left,&rect.top);
+	CursorPos_GlobalToLocal(hwnd,&rect.right,&rect.bottom);
+
+	hPen=CreatePen(PS_DOT,0,RGB(0,0,0));
+	SetBkMode(hdc,TRANSPARENT);
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+	hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
+	Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);
+	SelectObject(hdc,hOldBrush);
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+
+	ReleaseDC(hwnd,hdc);
+
+	*OldRect=*NewRect;
+}
+void GetSelectingRect(int WndNum,int WndInfoNum,int num,RECT *rect){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]==SELECT_WINDOW){
+		//ウィンドウ軸を選択
+		rect->left=0;
+		rect->top=0;
+		rect->right=ProjectInfo.pWindowInfo[WndInfoNum].size.cx+(LEVER_THICK*2);
+		rect->bottom=ProjectInfo.pWindowInfo[WndInfoNum].size.cy+(LEVER_THICK*2);
+	}
+	else{
+		//子ウィンドウを選択
+		rect->left=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.x-LEVER_THICK;
+		rect->top=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.y-LEVER_THICK;
+		rect->right=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].size.cx+LEVER_THICK;
+		rect->bottom=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].pos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[num]].size.cy+LEVER_THICK;
+	}
+}
+void DrawSelectingRect(HWND hwnd,int WndNum,int WndInfoNum,int ButtonSelect){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern RADINFO RadInfo;
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	HDC hdc;
+	HPEN hPen,hOldPen;
+	HBRUSH hOldBrush;
+	COLORREF rgb;
+	RECT rect,tempRect;
+
+	hdc=GetDC(hwnd);
+	if(ButtonSelect==IDC_TOOL_MOUSE) rgb=RGB(255,60,30);
+	else if(ButtonSelect==NON_TOOL) rgb=RGB(100,100,100);
+	hPen=CreatePen(PS_SOLID,0,rgb);
+	SetBkMode(hdc,TRANSPARENT);
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+	i=0;
+	while(MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]!=-1||i==0){
+		GetSelectingRect(WndNum,WndInfoNum,i,&tempRect);
+		RectNaturalFormat(&tempRect,&rect);
+		CursorPos_GlobalToLocal(hwnd,&rect.left,&rect.top);
+		CursorPos_GlobalToLocal(hwnd,&rect.right,&rect.bottom);
+
+		//主線
+		hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
+		Rectangle(hdc,
+			rect.left+2, rect.top+2,
+			rect.right-2, rect.bottom-2);
+		SelectObject(hdc,hOldBrush);
+
+
+		hOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(WHITE_BRUSH));
+
+		Rectangle(hdc,
+			rect.left,rect.top,
+			rect.left+5,rect.top+5);
+		Rectangle(hdc,
+			rect.left,rect.bottom-5,
+			rect.left+5,rect.bottom);
+		Rectangle(hdc,
+			rect.right-5,rect.top,
+			rect.right,rect.top+5);
+		Rectangle(hdc,
+			rect.right-5,rect.bottom-5,
+			rect.right,rect.bottom);
+
+		i2=(rect.right-rect.left)/2;
+		i3=(rect.bottom-rect.top)/2;
+		Rectangle(hdc,
+			rect.left+i2-2,rect.top,
+			rect.left+i2+3,rect.top+5);
+		Rectangle(hdc,
+			rect.left+i2-2,rect.bottom-5,
+			rect.left+i2+3,rect.bottom);
+		Rectangle(hdc,
+			rect.left,rect.top+i3-2,
+			rect.left+5,rect.top+i3+3);
+		Rectangle(hdc,
+			rect.right-5,rect.top+i3-2,
+			rect.right,rect.top+i3+3);
+
+		SelectObject(hdc,hOldBrush);
+
+		//移動時の選択フレームの消去用範囲
+		RadInfo.OldDraggingRect[i]=rect;
+
+		i++;
+	}
+
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+
+	ReleaseDC(hwnd,hdc);
+}
+void ChangePropertyWindow(int WndNum,int WndInfoNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	RECT rect;
+	SCROLLINFO ScrollInfo;
+
+	DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hProp_Dlg);
+	if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+		MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_WINDOW),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_WindowProc);
+
+		ScrollInfo.cbSize=sizeof(SCROLLINFO);
+		ScrollInfo.fMask=SIF_POS;
+		ScrollInfo.nPos=0;
+		SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hProperty,SB_VERT,&ScrollInfo,1);
+
+		GetClientRect(MdiInfo[WndNum].MdiRadInfo->hProperty,&rect);
+		SendMessage(MdiInfo[WndNum].MdiRadInfo->hProperty,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
+	}
+	else{
+		if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_BUTTON)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_BUTTON),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_ButtonProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_CHECKBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_CheckBoxProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_COMBOBOX)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_COMBOBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_ComboBoxProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_EDIT)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_EDIT),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_EditProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_GROUPBOX)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_GROUPBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_GroupBoxProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_HSCROLLBAR)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_SCROLLBAR),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_ScrollBarProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_IMAGEBOX)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_IMAGEBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_ImageBoxProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTBOX)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_LISTBOX),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_ListBoxProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_LISTVIEW)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_LISTVIEW),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_ListViewProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_PROGRESSBAR)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_PROGRESSBAR),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_ProgressBarProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_RADIOBUTTON),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_RadioButtonProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_STATIC),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_StaticProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TRACKBAR)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_TRACKBAR),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_TrackBarProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_TREEVIEW)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_TREEVIEW),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_TreeViewProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_UPDOWN)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_UPDOWN),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_UpDownProc);
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_VSCROLLBAR)
+			MdiInfo[WndNum].MdiRadInfo->hProp_Dlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_SCROLLBAR),MdiInfo[WndNum].MdiRadInfo->hProperty,RadProperty_ScrollBarProc);
+
+		ScrollInfo.cbSize=sizeof(SCROLLINFO);
+		ScrollInfo.fMask=SIF_POS;
+		ScrollInfo.nPos=0;
+		SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hProperty,SB_VERT,&ScrollInfo,1);
+
+		GetClientRect(MdiInfo[WndNum].MdiRadInfo->hProperty,&rect);
+		SendMessage(MdiInfo[WndNum].MdiRadInfo->hProperty,WM_SIZE,0,MAKELONG(rect.right,rect.bottom));
+	}
+}
+int GetItemNumOnMouse(int WndNum,int WndInfoNum,int x,int y){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i;
+
+	for(i=ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows-1;i>=0;i--){
+		if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].Control==CT_COMBOBOX&&
+			(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].style&0x000F)!=CBS_SIMPLE){
+			//コンボ ボックスの場合は表示部分をターゲットに選択する（高さ20pixel）
+			if(x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x&&
+				x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cx&&
+				y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y&&
+				y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y+20){
+				break;
+			}
+		}
+		else if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].Control==CT_GROUPBOX){
+			//グループ ボックスの場合は中央をあける
+			if((
+				x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x&&
+				x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cx&&
+				y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y&&
+				y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cy
+				)&&
+				(!(
+				x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x+LEVER_THICK*2&&
+				x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cx-LEVER_THICK*2&&
+				y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y+LEVER_THICK*3&&
+				y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cy-LEVER_THICK*2
+				))
+				){
+				break;
+			}
+		}
+		else if(x>=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x&&
+			x<=MdiInfo[WndNum].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cx&&
+			y>=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y&&
+			y<=MdiInfo[WndNum].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cy){
+			break;
+		}
+	}
+	return i;
+}
+void SelectItemNumOnMouse(int WndNum,int WndInfoNum,int x,int y){
+	//マウス座標をもとにコントロールアイテムを選択
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i;
+
+	for(i=1;i<MAX_RAD_SELITEM;i++) MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]=-1;
+	i=GetItemNumOnMouse(WndNum,WndInfoNum,x,y);
+
+	if(i==-1){
+		if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
+			MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=SELECT_WINDOW;
+			ChangePropertyWindow(WndNum,WndInfoNum);
+		}
+	}
+	else{
+		MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=i;
+		ChangePropertyWindow(WndNum,WndInfoNum);
+	}
+
+	SetStatusText(NULL);
+
+	//サポートダイアログの内容をセット
+	SetSupportDlgData(WndNum,WndInfoNum);
+}
+void SetItemNumOnFrame(int WndNum,int WndInfoNum,RECT *pRect){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2,sw;
+	RECT rect;
+
+	for(i=1;i<MAX_RAD_SELITEM;i++) MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]=-1;
+	RectNaturalFormat(pRect,&rect);
+	if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW) sw=0;
+	else sw=1;
+	for(i=ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows-1,i2=0;i>=0;i--){
+		if(rect.left <= ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x+MdiInfo[WndNum].MdiRadInfo->ClientPos.x&&
+			rect.top <= ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y+MdiInfo[WndNum].MdiRadInfo->ClientPos.y&&
+			rect.right >= ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.x+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cx+MdiInfo[WndNum].MdiRadInfo->ClientPos.x&&
+			rect.bottom >= ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].pos.y+ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].size.cy+MdiInfo[WndNum].MdiRadInfo->ClientPos.y){
+			MdiInfo[WndNum].MdiRadInfo->SelectingItem[i2]=i;
+			i2++;
+		}
+	}
+	if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW||
+		(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW&&sw)){
+		ChangePropertyWindow(WndNum,WndInfoNum);
+	}
+}
+int GetStateOfDraggingFrame(int WndNum,int WndInfoNum,int x,int y){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	RECT rect;
+
+	if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[1]!=-1){
+		i=0;
+		while(MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]!=-1||i==0){
+			GetSelectingRect(WndNum,WndInfoNum,i,&rect);
+
+			if(x>=rect.left+LEVER_THICK&&x<=rect.right-LEVER_THICK&&
+				y>=rect.top+LEVER_THICK&&y<=rect.bottom-LEVER_THICK){
+				if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[i]].Control==CT_GROUPBOX){
+					//グループボックスの場合は中央をあける
+					if(!(x>=rect.left+LEVER_THICK*2&&x<=rect.right-LEVER_THICK*2&&
+						y>=rect.top+LEVER_THICK*3&&y<=rect.bottom-LEVER_THICK*2)){
+						return FRAME_INSIDE;
+					}
+				}
+				else return FRAME_INSIDE;
+			}
+			i++;
+		}
+	}
+	else{
+		GetSelectingRect(WndNum,WndInfoNum,0,&rect);
+
+		if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
+			if(x>=rect.left+LEVER_THICK&&x<=rect.right-LEVER_THICK&&
+				y>=rect.top+LEVER_THICK&&y<=rect.bottom-LEVER_THICK){
+				if(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].Control==CT_GROUPBOX){
+					//グループ ボックスの場合は中央をあける
+					if(!(x>=rect.left+LEVER_THICK*3&&x<=rect.right-LEVER_THICK*3&&
+						y>=rect.top+LEVER_THICK*4&&y<=rect.bottom-LEVER_THICK*3)){
+						return FRAME_INSIDE;
+					}
+				}
+				else return FRAME_INSIDE;
+			}
+			else if(x>=rect.left&&x<=rect.left+LEVER_THICK&&
+				y>=rect.top&&y<=rect.top+LEVER_THICK)				return FRAME_UPPER_LEFT;
+			else if(x>=rect.right-LEVER_THICK&&x<=rect.right&&
+				y>=rect.top&&y<=rect.top+LEVER_THICK)				return FRAME_UPPER_RIGHT;
+			else if(x>=rect.left&&x<=rect.left+LEVER_THICK&&
+				y>=rect.bottom-LEVER_THICK&&y<=rect.bottom)			return FRAME_LOWER_LEFT;
+			else if(x>=rect.left&&x<=rect.left+LEVER_THICK&&
+				y>=rect.top+LEVER_THICK&&y<=rect.bottom-LEVER_THICK)return FRAME_LEFT;
+			else if(x>=rect.left+LEVER_THICK&&x<=rect.right-LEVER_THICK&&
+				y>=rect.top&&y<=rect.top+LEVER_THICK)				return FRAME_UPPER;
+		}
+		if(x>=rect.right-LEVER_THICK&&x<=rect.right&&
+			y>=rect.bottom-LEVER_THICK&&y<=rect.bottom)				return FRAME_LOWER_RIGHT;
+		else if(x>=rect.right-LEVER_THICK&&x<=rect.right&&
+			y>=rect.top+LEVER_THICK&&y<=rect.bottom-LEVER_THICK)	return FRAME_RIGHT;
+		else if(x>=rect.left+LEVER_THICK&&x<=rect.right-LEVER_THICK&&
+			y>=rect.bottom-LEVER_THICK&&y<=rect.bottom)				return FRAME_LOWER;
+	}
+	return 0;
+}
+void ResetScrollbarOfRadEditor(int WndNum,int weight,int height){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int WndInfoNum;
+	SCROLLINFO ScrollInfo;
+	SIZE NeedSize;
+
+	WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+
+	//必要な幅、高さを共に100ピクセル余裕を持たせる
+	NeedSize.cx=ProjectInfo.pWindowInfo[WndInfoNum].size.cx+(LEVER_THICK*2)+100;
+	NeedSize.cy=ProjectInfo.pWindowInfo[WndInfoNum].size.cy+(LEVER_THICK*2)+100;
+
+	ScrollInfo.cbSize=sizeof(SCROLLINFO);
+	ScrollInfo.fMask=SIF_PAGE|SIF_RANGE|SIF_POS|SIF_DISABLENOSCROLL;
+
+	//垂直スクロールバーの設定
+	GetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hRad,SB_VERT,&ScrollInfo);
+	ScrollInfo.nMin=0;
+	if(height>NeedSize.cy) ScrollInfo.nMax=0;
+	else{
+		ScrollInfo.nMax=NeedSize.cy;
+		ScrollInfo.nPage=height;
+	}
+	SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hRad,SB_VERT,&ScrollInfo,1);
+
+	//水平スクロールバーの設定
+	GetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hRad,SB_VERT,&ScrollInfo);
+	ScrollInfo.nMin=0;
+	if(weight>NeedSize.cx) ScrollInfo.nMax=0;
+	else{
+		ScrollInfo.nMax=NeedSize.cx;
+		ScrollInfo.nPage=weight;
+	}
+	SetScrollInfo(MdiInfo[WndNum].MdiRadInfo->hRad,SB_HORZ,&ScrollInfo,1);
+}
+LRESULT CALLBACK RadWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	extern RADINFO RadInfo;
+	int i,i2,i3,i4;
+	char temporary[MAX_PATH],temp2[MAX_PATH];
+	HWND hParent;
+	HDC hdc;
+	RECT rect;
+	POINT mouse,pos;
+	SIZE size;
+	SCROLLINFO ScrollInfo,si2;
+	PAINTSTRUCT ps;
+	POINTANDSIZE PointAndSize;
+
+	switch(message){
+		case WM_LBUTTONDOWN:
+			SetCapture(hwnd);
+
+			SetFocus(hwnd);
+			mouse.x=LOWORD(lParam);
+			mouse.y=HIWORD(lParam);
+			CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
+
+			i=GetWndNum(GetParent(hwnd));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
+				if(((wParam&MK_CONTROL)||(wParam&MK_SHIFT))&&
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
+
+					//Shiftキー、Ctrlキーによる複数選択
+					for(i3=0;;i3++){
+						if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1){
+							MdiInfo[i].MdiRadInfo->SelectingItem[i3]=GetItemNumOnMouse(i,i2,mouse.x,mouse.y);
+							InvalidateRect(hwnd,NULL,0);
+
+							//サポートダイアログの内容をセット
+							SetSupportDlgData(i,i2);
+							break;
+						}
+					}
+				}
+				else{
+					RadInfo.NowDragging=GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y);
+					if(!RadInfo.NowDragging){
+						SelectItemNumOnMouse(i,i2,mouse.x,mouse.y);
+						InvalidateRect(hwnd,NULL,0);
+						RadInfo.NowDragging=GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y);
+					}
+					if(RadInfo.NowDragging){
+						//アイテム選択中。サイズ、位置変更開始
+
+						if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+							RadInfo.DraggingRect[0].left=LEVER_THICK;
+							RadInfo.DraggingRect[0].top=LEVER_THICK;
+							RadInfo.DraggingRect[0].right=ProjectInfo.pWindowInfo[i2].size.cx+LEVER_THICK;
+							RadInfo.DraggingRect[0].bottom=ProjectInfo.pWindowInfo[i2].size.cy+LEVER_THICK;
+							RadInfo.DragStartRect[0]=RadInfo.DraggingRect[0];
+						}
+						else{
+							i3=0;
+							while(MdiInfo[i].MdiRadInfo->SelectingItem[i3]!=-1){
+								RadInfo.DraggingRect[i3].left=MdiInfo[i].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x;
+								RadInfo.DraggingRect[i3].top=MdiInfo[i].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y;
+								RadInfo.DraggingRect[i3].right=MdiInfo[i].MdiRadInfo->ClientPos.x+ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x+ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx;
+								RadInfo.DraggingRect[i3].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y+ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cy;
+								RadInfo.DragStartRect[i3]=RadInfo.DraggingRect[i3];
+								i3++;
+							}
+						}
+					}
+					else{
+						//範囲選択
+
+						RadInfo.NowDragging=SELECTING_FRAME;
+						RadInfo.OldDraggingRect[0].left=LEVER_THICK;
+						RadInfo.OldDraggingRect[0].top=LEVER_THICK;
+						RadInfo.OldDraggingRect[0].right=ProjectInfo.pWindowInfo[i2].size.cx+LEVER_THICK;
+						RadInfo.OldDraggingRect[0].bottom=ProjectInfo.pWindowInfo[i2].size.cy+LEVER_THICK;
+					}
+					RadInfo.DragStartPos.x=mouse.x;
+					RadInfo.DragStartPos.y=mouse.y;
+				}
+				SetCursorByState(RadInfo.NowDragging);
+			}
+			else{
+				RadInfo.DraggingRect[0].left=mouse.x;
+				RadInfo.DraggingRect[0].top=mouse.y;
+				RadInfo.NowDragging=ITEM_MAKING;
+			}
+			return 0;
+		case WM_LBUTTONUP:
+			ReleaseCapture();
+
+			SetFocus(hwnd);
+			mouse.x=(int)(short)LOWORD(lParam);
+			mouse.y=(int)(short)HIWORD(lParam);
+			CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
+
+			hParent=GetParent(hwnd);
+			i=GetWndNum(hParent);
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
+				if(RadInfo.NowDragging){
+					if(RadInfo.DragStartPos.x==mouse.x&&RadInfo.DragStartPos.y==mouse.y){
+						RadInfo.NowDragging=0;
+						InvalidateRect(hwnd,NULL,0);
+						ResetState_EditMenu();
+						return 0;
+					}
+
+					if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+						if(RadInfo.NowDragging==SELECTING_FRAME){
+							SetItemNumOnFrame(i,i2,&RadInfo.DraggingRect[0]);
+							InvalidateRect(hwnd,NULL,1);
+						}
+						else{
+							//ウィンドウ枠の調整完了
+							PointAndSize.size=ProjectInfo.pWindowInfo[i2].size;
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+							ProjectInfo.pWindowInfo[i2].size.cx=RadInfo.DraggingRect[0].right-LEVER_THICK;
+							ProjectInfo.pWindowInfo[i2].size.cy=RadInfo.DraggingRect[0].bottom-LEVER_THICK;
+							DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+							InvalidateRect(hwnd,NULL,1);
+
+							GetClientRect(hwnd,&rect);
+							ResetScrollbarOfRadEditor(i,rect.right,rect.bottom);
+						}
+					}
+					else{
+						i3=0;
+						while(MdiInfo[i].MdiRadInfo->SelectingItem[i3]!=-1){
+							//アイテム枠の調整完了
+							PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
+							PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x=RadInfo.DraggingRect[i3].left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y=RadInfo.DraggingRect[i3].top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx=RadInfo.DraggingRect[i3].right-RadInfo.DraggingRect[i3].left;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cy=RadInfo.DraggingRect[i3].bottom-RadInfo.DraggingRect[i3].top;
+							DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+							i3++;
+						}
+					}
+
+					SetStatusText(NULL);
+
+					//サポートダイアログの内容をセット
+					SetSupportDlgData(i,i2);
+				}
+			}
+			else if(RadInfo.NowDragging==ITEM_MAKING){
+				if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_BUTTON){
+					//ボタン コントロール作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=44;
+						RadInfo.DraggingRect[0].right=mouse.x+44;
+						RadInfo.DraggingRect[0].top-=10;
+						RadInfo.DraggingRect[0].bottom=mouse.y+11;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"CommandButton","Button",WS_CHILD|WS_VISIBLE,0,CT_BUTTON,0,0,1);
+				}
+				if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_CHECKBOX){
+					//チェック ボックス作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=33;
+						RadInfo.DraggingRect[0].right=mouse.x+34;
+						RadInfo.DraggingRect[0].top-=7;
+						RadInfo.DraggingRect[0].bottom=mouse.y+8;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"CheckBox","Check",WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,0,CT_CHECKBOX,0,0,1);
+				}
+				if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_COMBOBOX){
+					//コンボ ボックス作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=42;
+						RadInfo.DraggingRect[0].right=mouse.x+42;
+						RadInfo.DraggingRect[0].top-=42;
+						RadInfo.DraggingRect[0].bottom=mouse.y+42;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ComboBox","",WS_CHILD|WS_VISIBLE|CBS_DROPDOWN|CBS_SORT|WS_VSCROLL,0,CT_COMBOBOX,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_EDIT){
+					//エディット コントロール作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=35;
+						RadInfo.DraggingRect[0].right=mouse.x+35;
+						RadInfo.DraggingRect[0].top-=10;
+						RadInfo.DraggingRect[0].bottom=mouse.y+11;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"EditBox","",WS_CHILD|WS_VISIBLE,WS_EX_CLIENTEDGE,CT_EDIT,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_GROUPBOX){
+					//グループ ボックス作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=42;
+						RadInfo.DraggingRect[0].right=mouse.x+42;
+						RadInfo.DraggingRect[0].top-=30;
+						RadInfo.DraggingRect[0].bottom=mouse.y+30;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"GroupBox","Group",WS_CHILD|WS_VISIBLE|BS_GROUPBOX,0,CT_GROUPBOX,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_HSCROLLBAR){
+					//水平スクロールバー作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=35;
+						RadInfo.DraggingRect[0].right=mouse.x+35;
+						RadInfo.DraggingRect[0].top-=8;
+						RadInfo.DraggingRect[0].bottom=mouse.y+9;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"HScrollBar","",WS_CHILD|WS_VISIBLE|SBS_HORZ,0,CT_HSCROLLBAR,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_IMAGEBOX){
+					//イメージ ボックス作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=16;
+						RadInfo.DraggingRect[0].right=mouse.x+16;
+						RadInfo.DraggingRect[0].top-=16;
+						RadInfo.DraggingRect[0].bottom=mouse.y+16;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ImageBox","",WS_CHILD|WS_VISIBLE|SS_BLACKFRAME,0,CT_IMAGEBOX,IMGTYPE_FILE,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_LISTBOX){
+					//リスト ボックス作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=42;
+						RadInfo.DraggingRect[0].right=mouse.x+42;
+						RadInfo.DraggingRect[0].top-=30;
+						RadInfo.DraggingRect[0].bottom=mouse.y+30;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ListBox","",WS_CHILD|WS_VISIBLE|WS_VSCROLL|LBS_SORT|LBS_NOTIFY,WS_EX_CLIENTEDGE,CT_LISTBOX,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_LISTVIEW){
+					//リスト ビュー作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=52;
+						RadInfo.DraggingRect[0].right=mouse.x+53;
+						RadInfo.DraggingRect[0].top-=37;
+						RadInfo.DraggingRect[0].bottom=mouse.y+38;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ListView","",WS_CHILD|WS_VISIBLE,WS_EX_CLIENTEDGE,CT_LISTVIEW,0,0,1);
+				}
+				if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_PROGRESSBAR){
+					//プロバレス バー作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=70;
+						RadInfo.DraggingRect[0].right=mouse.x+70;
+						RadInfo.DraggingRect[0].top-=10;
+						RadInfo.DraggingRect[0].bottom=mouse.y+11;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"ProgressBar","",WS_CHILD|WS_VISIBLE,WS_EX_STATICEDGE,CT_PROGRESSBAR,0,0,1);
+				}
+				if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_RADIOBUTTON){
+					//ラジオ ボタン作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=31;
+						RadInfo.DraggingRect[0].right=mouse.x+32;
+						RadInfo.DraggingRect[0].top-=7;
+						RadInfo.DraggingRect[0].bottom=mouse.y+8;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"RadioButton","radio",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,0,CT_RADIOBUTTON,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_STATIC){
+					//スタティック コントロール作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=25;
+						RadInfo.DraggingRect[0].right=mouse.x+25;
+						RadInfo.DraggingRect[0].top-=6;
+						RadInfo.DraggingRect[0].bottom=mouse.y+6;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"Static","Text",WS_CHILD|WS_VISIBLE,0,CT_STATIC,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_TRACKBAR){
+					//トラック バー作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=87;
+						RadInfo.DraggingRect[0].right=mouse.x+88;
+						RadInfo.DraggingRect[0].top-=11;
+						RadInfo.DraggingRect[0].bottom=mouse.y+12;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"TrackBar","",WS_CHILD|WS_VISIBLE|TBS_BOTH|TBS_NOTICKS,0,CT_TRACKBAR,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_TREEVIEW){
+					//ツリー ビュー作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=52;
+						RadInfo.DraggingRect[0].right=mouse.x+53;
+						RadInfo.DraggingRect[0].top-=37;
+						RadInfo.DraggingRect[0].bottom=mouse.y+38;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"TreeView","",WS_CHILD|WS_VISIBLE,WS_EX_CLIENTEDGE,CT_TREEVIEW,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_UPDOWN){
+					//アップ ダウン コントロール作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=8;
+						RadInfo.DraggingRect[0].right=mouse.x+8;
+						RadInfo.DraggingRect[0].top-=10;
+						RadInfo.DraggingRect[0].bottom=mouse.y+11;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"UpDown","",WS_CHILD|WS_VISIBLE,0,CT_UPDOWN,0,0,1);
+				}
+				else if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_VSCROLLBAR){
+					//垂直スクロールバー作成
+					if(RadInfo.DraggingRect[0].left==mouse.x&&RadInfo.DraggingRect[0].top==mouse.y){
+						RadInfo.DraggingRect[0].left-=9;
+						RadInfo.DraggingRect[0].right=mouse.x+9;
+						RadInfo.DraggingRect[0].top-=30;
+						RadInfo.DraggingRect[0].bottom=mouse.y+30;
+					}
+					else{
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+					}
+					RectNaturalFormat(&RadInfo.DraggingRect[0],&rect);
+					pos.x=rect.left-MdiInfo[i].MdiRadInfo->ClientPos.x;
+					pos.y=rect.top-MdiInfo[i].MdiRadInfo->ClientPos.y;
+					size.cx=rect.right-rect.left;
+					size.cy=rect.bottom-rect.top;
+					MdiInfo[i].MdiRadInfo->SelectingItem[0]=InsertDlgItem(i,i2,-1,&pos,&size,"VScrollBar","",WS_CHILD|WS_VISIBLE|SBS_VERT,0,CT_VSCROLLBAR,0,0,1);
+				}
+				SendMessage(GetWindow(MdiInfo[i].MdiRadInfo->hTools,GW_CHILD),WM_COMMAND,IDC_TOOL_MOUSE,0);
+				SendMessage(GetWindow(GetWindow(MdiInfo[i].MdiRadInfo->hTools,GW_CHILD),GW_CHILD),TB_CHECKBUTTON,IDC_TOOL_MOUSE,TRUE);
+				ChangePropertyWindow(i,i2);
+
+				//複数選択を解除
+				MdiInfo[i].MdiRadInfo->SelectingItem[1]=-1;
+			}
+
+			RadInfo.NowDragging=0;
+
+			ResetState_EditMenu();
+			return 0;
+		case WM_MOUSEMOVE:
+			mouse.x=(int)(short)LOWORD(lParam);
+			mouse.y=(int)(short)HIWORD(lParam);
+			CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
+
+			hParent=GetParent(hwnd);
+			i=GetWndNum(hParent);
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
+				if(wParam&MK_LBUTTON&&RadInfo.NowDragging){
+					////////////////////////////////////////////////
+					// ドラッグ中の場合（コントロールのサイズ変更）
+
+					if(RadInfo.NowDragging==FRAME_UPPER_LEFT){
+						if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
+							RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
+						else if(mouse.x+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.x)
+							RadInfo.DraggingRect[0].left=MdiInfo[i].MdiRadInfo->ClientPos.x;
+						else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
+
+						if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK))
+							RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
+						else if(mouse.y+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.y)
+							RadInfo.DraggingRect[0].top=MdiInfo[i].MdiRadInfo->ClientPos.y;
+						else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					else if(RadInfo.NowDragging==FRAME_UPPER_RIGHT){
+						if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
+							RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
+						else if(mouse.x>MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx)
+							RadInfo.DraggingRect[0].right=MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx;
+						else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
+
+						if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK)) RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
+						else if(mouse.y+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.y)
+							RadInfo.DraggingRect[0].top=MdiInfo[i].MdiRadInfo->ClientPos.y;
+						else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					else if(RadInfo.NowDragging==FRAME_LOWER_LEFT){
+						if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
+							RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
+						else if(mouse.x+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.x)
+							RadInfo.DraggingRect[0].left=MdiInfo[i].MdiRadInfo->ClientPos.x;
+						else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
+
+						if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top)
+							RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
+						else if(mouse.y>MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy)
+							RadInfo.DraggingRect[0].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy;
+						else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					else if(RadInfo.NowDragging==FRAME_LOWER_RIGHT){
+						if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
+							RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
+						else if((mouse.x>MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx)&&MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
+							RadInfo.DraggingRect[0].right=MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx;
+						else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
+
+						if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top)
+							RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
+						else if((mouse.y>MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy)&&MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
+							RadInfo.DraggingRect[0].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy;
+						else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					else if(RadInfo.NowDragging==FRAME_LEFT){
+						if(RadInfo.DraggingRect[0].right-MIN_ITEM_X<=(mouse.x+LEVER_THICK))
+							RadInfo.DraggingRect[0].left=RadInfo.DraggingRect[0].right-MIN_ITEM_X;
+						else if(mouse.x+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.x)
+							RadInfo.DraggingRect[0].left=MdiInfo[i].MdiRadInfo->ClientPos.x;
+						else RadInfo.DraggingRect[0].left=mouse.x+LEVER_THICK;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					else if(RadInfo.NowDragging==FRAME_RIGHT){
+						if(mouse.x-LEVER_THICK-MIN_ITEM_X<=RadInfo.DraggingRect[0].left)
+							RadInfo.DraggingRect[0].right=RadInfo.DraggingRect[0].left+MIN_ITEM_X;
+						else if((mouse.x>MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx)&&MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
+							RadInfo.DraggingRect[0].right=MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx;
+						else RadInfo.DraggingRect[0].right=mouse.x-LEVER_THICK;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					else if(RadInfo.NowDragging==FRAME_UPPER){
+						if(RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y<=(mouse.y+LEVER_THICK))
+							RadInfo.DraggingRect[0].top=RadInfo.DraggingRect[0].bottom-MIN_ITEM_Y;
+						else if(mouse.y+LEVER_THICK<MdiInfo[i].MdiRadInfo->ClientPos.y)
+							RadInfo.DraggingRect[0].top=MdiInfo[i].MdiRadInfo->ClientPos.y;
+						else RadInfo.DraggingRect[0].top=mouse.y+LEVER_THICK;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					else if(RadInfo.NowDragging==FRAME_LOWER){
+						if(mouse.y-LEVER_THICK-MIN_ITEM_Y<=RadInfo.DraggingRect[0].top) 
+							RadInfo.DraggingRect[0].bottom=RadInfo.DraggingRect[0].top+MIN_ITEM_Y;
+						else if((mouse.y>MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy)&&MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW)
+							RadInfo.DraggingRect[0].bottom=MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy;
+						else RadInfo.DraggingRect[0].bottom=mouse.y-LEVER_THICK;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					else if(RadInfo.NowDragging==FRAME_INSIDE){
+						i3=0;
+						while(MdiInfo[i].MdiRadInfo->SelectingItem[i3]!=-1){
+							i4=RadInfo.DragStartRect[i3].left+mouse.x-RadInfo.DragStartPos.x;
+
+							if(i4>MdiInfo[i].MdiRadInfo->ClientPos.x){
+								i4=RadInfo.DragStartRect[i3].right+mouse.x-RadInfo.DragStartPos.x;
+								if(i4<MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx) i4=0;
+								else i4-=MdiInfo[i].MdiRadInfo->ClientPos.x+MdiInfo[i].MdiRadInfo->ClientSize.cx;
+							}
+							else i4-=MdiInfo[i].MdiRadInfo->ClientPos.x;
+							//i4は枠外に出たときのポインタと壁にあたったコントロールとの差
+							RadInfo.DraggingRect[i3].left=RadInfo.DragStartRect[i3].left+mouse.x-RadInfo.DragStartPos.x-i4;
+							RadInfo.DraggingRect[i3].right=RadInfo.DragStartRect[i3].right+mouse.x-RadInfo.DragStartPos.x-i4;
+
+							i4=RadInfo.DragStartRect[i3].top+mouse.y-RadInfo.DragStartPos.y;
+							if(i4>MdiInfo[i].MdiRadInfo->ClientPos.y){
+								i4=RadInfo.DragStartRect[i3].bottom+mouse.y-RadInfo.DragStartPos.y;
+								if(i4<MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy) i4=0;
+								else i4-=MdiInfo[i].MdiRadInfo->ClientPos.y+MdiInfo[i].MdiRadInfo->ClientSize.cy;
+							}
+							else i4-=MdiInfo[i].MdiRadInfo->ClientPos.y;
+							RadInfo.DraggingRect[i3].top=RadInfo.DragStartRect[i3].top+mouse.y-RadInfo.DragStartPos.y-i4;
+							RadInfo.DraggingRect[i3].bottom=RadInfo.DragStartRect[i3].bottom+mouse.y-RadInfo.DragStartPos.y-i4;
+
+							if(MdiInfo[i].MdiRadInfo->SelectingItem[1]==-1) i4=1;
+							else i4=0;
+							DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[i3],&RadInfo.OldDraggingRect[i3],i4);
+							i3++;
+						}
+					}
+					else if(RadInfo.NowDragging==SELECTING_FRAME){
+						RadInfo.DraggingRect[0].left=RadInfo.DragStartPos.x;
+						RadInfo.DraggingRect[0].top=RadInfo.DragStartPos.y;
+						RadInfo.DraggingRect[0].right=mouse.x;
+						RadInfo.DraggingRect[0].bottom=mouse.y;
+						DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+					}
+					SetCursorByState(RadInfo.NowDragging);
+
+					SetStatusText(NULL);
+
+					//サポートダイアログの内容をセット
+					SetSupportDlgData(i,i2);
+				}
+				else{
+					//ドラッグ中でないとき
+					SetCursorByState(GetStateOfDraggingFrame(i,i2,mouse.x,mouse.y));
+				}
+			}
+			else{
+				//アイテム（子ウィンドウ作成中）
+				if(wParam&MK_LBUTTON&&RadInfo.NowDragging==ITEM_MAKING){
+					//ドラッグ中の場合
+
+					RadInfo.DraggingRect[0].right=mouse.x;
+					RadInfo.DraggingRect[0].bottom=mouse.y;
+					DrawFrame(hwnd,i,i2,&RadInfo.DraggingRect[0],&RadInfo.OldDraggingRect[0],0);
+				}
+			}
+			return 0;
+		case WM_LBUTTONDBLCLK:
+			mouse.x=LOWORD(lParam);
+			mouse.y=HIWORD(lParam);
+			CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
+
+			hParent=GetParent(hwnd);
+			i=GetWndNum(hParent);
+			i2=GetWndInfoNum(MdiInfo[i].path);
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
+				if(MdiInfo[i].MdiRadInfo->SelectingItem[0]!=SELECT_WINDOW){
+					temp2[0]=0;
+					if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_BUTTON||
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX||
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_IMAGEBOX||
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON||
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC){
+						sprintf(temporary,"%s_%s_Click",ProjectInfo.pWindowInfo[i2].name,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+					}
+					else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_COMBOBOX)
+						sprintf(temporary,"%s_%s_EditChange",ProjectInfo.pWindowInfo[i2].name,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+					else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_EDIT)
+						sprintf(temporary,"%s_%s_Change",ProjectInfo.pWindowInfo[i2].name,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+					else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_LISTBOX)
+						sprintf(temporary,"%s_%s_SelChange",ProjectInfo.pWindowInfo[i2].name,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+					else temporary[0]=0;
+					if(temporary[0]) SelectProcedureOfMessageCall(i2,temporary,temp2);
+				}
+			}
+			return 0;
+		case WM_KEYDOWN:
+			hParent=GetParent(hwnd);
+			i=GetWndNum(hParent);
+			i2=GetWndInfoNum(MdiInfo[i].path);
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
+				if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+					PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pos;
+					PointAndSize.size=ProjectInfo.pWindowInfo[i2].size;
+					if(GetKeyState(VK_SHIFT)&0x8000){
+						if(wParam==VK_RIGHT||wParam==VK_LEFT||wParam==VK_DOWN||wParam==VK_UP)
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+
+						if(wParam==VK_RIGHT)
+							ProjectInfo.pWindowInfo[i2].size.cx++;
+						else if(wParam==VK_LEFT)
+							ProjectInfo.pWindowInfo[i2].size.cx--;
+						else if(wParam==VK_DOWN)
+							ProjectInfo.pWindowInfo[i2].size.cy++;
+						else if(wParam==VK_UP)
+							ProjectInfo.pWindowInfo[i2].size.cy--;
+
+						if(wParam==VK_RIGHT||wParam==VK_LEFT||wParam==VK_DOWN||wParam==VK_UP){
+							DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+
+							SetStatusText(NULL);
+
+							//サポートダイアログの内容をセット
+							SetSupportDlgData(i,i2);
+						}
+					}
+				}
+				else{
+					PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].pos;
+					PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size;
+					if(wParam==VK_RIGHT){
+						if(GetKeyState(VK_SHIFT)&0x8000){
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx++;
+						}
+						else{
+							for(i3=0;;i3++){
+								if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+								PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
+								PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
+								Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
+
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x++;
+							}
+						}
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						SetStatusText(NULL);
+
+						//サポートダイアログの内容をセット
+						SetSupportDlgData(i,i2);
+					}
+					else if(wParam==VK_LEFT){
+						if(GetKeyState(VK_SHIFT)&0x8000){
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx--;
+						}
+						else{
+							for(i3=0;;i3++){
+								if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+								PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
+								PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
+								Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
+
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x--;
+							}
+						}
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						SetStatusText(NULL);
+
+						//サポートダイアログの内容をセット
+						SetSupportDlgData(i,i2);
+					}
+					else if(wParam==VK_UP){
+						if(GetKeyState(VK_SHIFT)&0x8000){
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cy--;
+						}
+						else{
+							for(i3=0;;i3++){
+								if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+								PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
+								PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
+								Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
+
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y--;
+							}
+						}
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						SetStatusText(NULL);
+
+						//サポートダイアログの内容をセット
+						SetSupportDlgData(i,i2);
+					}
+					else if(wParam==VK_DOWN){
+						if(GetKeyState(VK_SHIFT)&0x8000){
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cy++;
+						}
+						else{
+							for(i3=0;;i3++){
+								if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+								PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
+								PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
+								Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
+
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y++;
+							}
+						}
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						SetStatusText(NULL);
+
+						//サポートダイアログの内容をセット
+						SetSupportDlgData(i,i2);
+					}
+					else if(wParam==VK_DELETE)
+						SendMessage(hwnd,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
+				}
+			}
+			return 0;
+		case WM_SETFOCUS:
+			i=GetWndNum(GetParent(hwnd));
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==NON_TOOL)
+				MdiInfo[i].MdiRadInfo->ButtonSelect=IDC_TOOL_MOUSE;
+			InvalidateRect(hwnd,NULL,0);
+			return 0;
+		case WM_KILLFOCUS:
+			i=GetWndNum(GetParent(hwnd));
+			if(i==-1) return 0;	//ウィンドウが破棄された場合
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE)
+				MdiInfo[i].MdiRadInfo->ButtonSelect=NON_TOOL;
+			InvalidateRect(hwnd,NULL,0);
+			return 0;
+		case WM_PAINT:
+			i=GetWndNum(GetParent(hwnd));
+			if(i==-1) return 0;	//ウィンドウが初期状態の場合
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_RANGE|SIF_POS;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			si2.cbSize=sizeof(SCROLLINFO);
+			si2.fMask=SIF_RANGE|SIF_POS;
+			GetScrollInfo(hwnd,SB_HORZ,&si2);
+
+			hdc=BeginPaint(hwnd,&ps);
+			BitBlt(hdc,0,0,ScreenX*2,ScreenY*2,
+				MdiInfo[i].MdiRadInfo->hMemDC,si2.nPos,ScrollInfo.nPos,SRCCOPY);
+			EndPaint(hwnd,&ps);
+
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE||MdiInfo[i].MdiRadInfo->ButtonSelect==NON_TOOL)
+				DrawSelectingRect(hwnd,i,i2,MdiInfo[i].MdiRadInfo->ButtonSelect);
+			return 0;
+		case WM_CONTEXTMENU:
+			if(RadInfo.NowDragging) return 0;
+
+			hParent=GetParent(hwnd);
+			BringWindowToTop(hParent);
+			SetFocus(hwnd);
+			i=GetWndNum(hParent);
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			if(MdiInfo[i].MdiRadInfo->ButtonSelect==IDC_TOOL_MOUSE){
+				mouse.x=LOWORD(lParam);
+				mouse.y=HIWORD(lParam);
+				ScreenToClient(hwnd,&mouse);
+				CursorPos_LocalToGlobal(hwnd,&mouse.x,&mouse.y);
+				SelectItemNumOnMouse(i,i2,mouse.x,mouse.y);
+				InvalidateRect(hwnd,NULL,0);
+				extern HMENU hRadMenuBase;
+				if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+					TrackPopupMenu(GetSubMenu(hRadMenuBase,0),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+				else TrackPopupMenu(GetSubMenu(hRadMenuBase,1),TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hwnd,0);
+			}
+			return 0;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDM_RAD_WINDOW_EVENTCODE:
+					i=GetWndNum(GetParent(hwnd));
+					DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_RAD_EVENTCODE),hwnd,DlgEventCode,0);
+					break;
+				case IDM_RAD_WINDOW_MENUEVENTCODE:
+					i=GetWndNum(GetParent(hwnd));
+					DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_RAD_EVENTCODE),hwnd,DlgEventCode,1);
+					break;
+				case IDM_RAD_ITEM_DELETE:
+					hParent=GetParent(hwnd);
+					i=GetWndNum(hParent);
+					i2=GetWndInfoNum(MdiInfo[i].path);
+
+					//削除順序を考慮しなければならないので、バブルソートを行う
+					int i5,i6;
+					for(i5=0;;i5++){
+						if(MdiInfo[i].MdiRadInfo->SelectingItem[i5]==-1) break;
+					}
+					for(i3=0;i3<i5-1;i3++){
+						for(i4=i5-1;i4>i3;i4--){
+							if(MdiInfo[i].MdiRadInfo->SelectingItem[i4] >
+								MdiInfo[i].MdiRadInfo->SelectingItem[i4-1]){
+								i6=MdiInfo[i].MdiRadInfo->SelectingItem[i4];
+								MdiInfo[i].MdiRadInfo->SelectingItem[i4]=
+									MdiInfo[i].MdiRadInfo->SelectingItem[i4-1];
+								MdiInfo[i].MdiRadInfo->SelectingItem[i4-1]=i6;
+							}
+						}
+					}
+
+
+					for(i3=0;;i3++){
+						if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+						DeleteDlgItem(i,i2,MdiInfo[i].MdiRadInfo->SelectingItem[i3],1);
+					}
+					for(i3=0;i3<MAX_RAD_SELITEM;i3++) MdiInfo[i].MdiRadInfo->SelectingItem[i3]=-1;
+
+					ResetState_EditMenu();
+					break;
+			}
+			return 0;
+		case WM_VSCROLL:
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			if(LOWORD(wParam)==SB_LINEUP) i=-20;
+			else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
+			else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
+			else i=0;
+			GetClientRect(hwnd,&rect);
+			i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
+			if(i!=0){
+				ScrollInfo.nPos+=i;
+				SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
+				ScrollWindow(hwnd,0,-i,NULL,NULL);
+				UpdateWindow(hwnd);
+			}
+			return 0;
+		case WM_HSCROLL:
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+			GetScrollInfo(hwnd,SB_HORZ,&ScrollInfo);
+			if(LOWORD(wParam)==SB_LINEUP) i=-20;
+			else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
+			else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
+			else i=0;
+			GetClientRect(hwnd,&rect);
+			i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.right-ScrollInfo.nPos));
+			if(i!=0){
+				ScrollInfo.nPos+=i;
+				SetScrollInfo(hwnd,SB_HORZ,&ScrollInfo,1);
+				ScrollWindow(hwnd,-i,0,NULL,NULL);
+				UpdateWindow(hwnd);
+			}
+			return 0;
+		case WM_SIZE:
+			i=GetWndNum(GetParent(hwnd));
+			if(i==-1) break;	//ウィンドウが初期状態の場合
+			ResetScrollbarOfRadEditor(i,LOWORD(lParam),HIWORD(lParam));
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+void ResizeToRadToolWindows(int WndNum,int weight,int height){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2;
+	RECT rect;
+
+	if(height<200){
+		i=100;
+		i2=100;
+	}
+	else{
+		//ツールボタンウィンドウ(長さ、i)
+		GetClientRect(GetWindow(MdiInfo[WndNum].MdiRadInfo->hTools,GW_CHILD),&rect);
+		if(height>rect.bottom+1) i=rect.bottom+1;
+		else i=height;
+
+		//プロパティウィンドウ(長さ、i2)
+		GetClientRect(GetWindow(MdiInfo[WndNum].MdiRadInfo->hProperty,GW_CHILD),&rect);
+		i2=height-i;
+
+		if(i2<100){
+			i=height-100;
+			i2=100;
+		}
+	}
+	MoveWindow(MdiInfo[WndNum].MdiRadInfo->hTools,weight-172,0,172,i,1);
+	MoveWindow(MdiInfo[WndNum].MdiRadInfo->hProperty,weight-172,i,172,i2,1);
+
+	GetWindowRect(MdiInfo[WndNum].MdiRadInfo->hSupport,&rect);
+	rect.right-=rect.left;
+	rect.bottom-=rect.top;
+
+	//RADウィンドウ
+	MoveWindow(MdiInfo[WndNum].MdiRadInfo->hRad,0,0,weight-172,height-rect.bottom,1);
+
+	//サポートウィンドウ
+	MoveWindow(MdiInfo[WndNum].MdiRadInfo->hSupport,0,height-rect.bottom,weight-172,rect.bottom,1);
+}
+LRESULT CALLBACK MDIClientWindow_Rad(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HWND hDocCombo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,WndNum;
+
+	switch(message){
+		case WM_CREATE:
+			extern HICON hWindowDocumentIcon;
+			SendMessage(hwnd,WM_SETICON,ICON_SMALL,(long)hWindowDocumentIcon);
+			break;
+		case WM_MDIACTIVATE:
+			if(!lParam) return 0;
+			i=GetWndNum((HWND)lParam);
+			if(i==-1) return 0;	//ウィンドウが初期状態の場合
+
+			i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
+			SendMessage(hDocCombo,CB_SETCURSEL,i,0);
+			SetStatusText(NULL);
+			ResetState_EditMenu();
+			return 0;
+		case WM_SIZE:
+			WndNum=GetWndNum(hwnd);
+			if(WndNum==-1) break;
+			ResizeToRadToolWindows(WndNum,LOWORD(lParam),HIWORD(lParam));
+			break;
+		case WM_CLOSE:
+			CloseDocWindow(GetWndNum(hwnd));
+			pobj_nv->bMDIZoomed=IsZoomed(hwnd);
+			i=DefMDIChildProc(hwnd,message,wParam,lParam);
+
+			//メニュー状態を設定
+			ResetState_DocMenu();
+
+			return i;
+	}
+	return DefMDIChildProc(hwnd,message,wParam,lParam);
+}
Index: /ProjectEditor/RadSupport.cpp
===================================================================
--- /ProjectEditor/RadSupport.cpp	(revision 3)
+++ /ProjectEditor/RadSupport.cpp	(revision 3)
@@ -0,0 +1,364 @@
+#include "common.h"
+
+#if defined(JPN)
+//日本語
+#include "rad_msg_jpn.h"
+#else
+//英語
+#include "rad_msg_eng.h"
+#endif
+
+int bSupportDlg_NoChange;
+
+LRESULT CALLBACK TestWindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_CREATE:
+			SetPosCenter(hwnd);
+			break;
+		case WM_KEYDOWN:
+			if(wParam==VK_ESCAPE) DestroyWindow(hwnd);
+			break;
+		case WM_PAINT:
+			break;
+		case WM_CLOSE:
+			DestroyWindow(hwnd);
+			break;
+		case WM_DESTROY:
+			PostQuitMessage(0);
+			break;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+
+void ShowTestWindow(int WndInfoNum){
+	extern HINSTANCE hInst;
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	static HWND hWnd;
+	WINDOW_INFO *pWindowInfo;
+	HWND hChild;
+	HFONT *lphFont;
+	HANDLE *lphImage;
+	int i2,i3;
+	char temporary[MAX_PATH];
+
+	if(hWnd){
+		OpenIcon(hWnd);
+
+		_endthread();
+		return;
+	}
+
+	pWindowInfo=&ProjectInfo.pWindowInfo[WndInfoNum];
+
+	if(pWindowInfo->style&WS_CHILD){
+		//"チャイルドウィンドウをテスト表示することはできません"
+		MessageBox(hOwner,STRING_RAD_ERROR_CANT_CHILDTEST,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+
+		_endthread();
+		return;
+	}
+
+	lphFont=(HFONT *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,pWindowInfo->NumberOfChildWindows*sizeof(DWORD));
+	lphImage=(HANDLE *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,pWindowInfo->NumberOfChildWindows*sizeof(DWORD));
+
+	//テスト用のメインウィンドウを作成
+	hWnd=CreateWindowEx(pWindowInfo->ExStyle,
+		"TestWindow",
+		pWindowInfo->name,
+		pWindowInfo->style|WS_VISIBLE,
+		CW_USEDEFAULT,CW_USEDEFAULT,
+		pWindowInfo->size.cx,pWindowInfo->size.cy,
+		hOwner,NULL,hInst,NULL);
+
+	//子ウィンドウ作成
+	for(i2=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
+		if(pWindowInfo->pChildInfo[i2].Control==CT_UPDOWN){
+			CreateUpDownControl(
+				pWindowInfo->pChildInfo[i2].style,
+				pWindowInfo->pChildInfo[i2].pos.x,pWindowInfo->pChildInfo[i2].pos.y,
+				pWindowInfo->pChildInfo[i2].size.cx,pWindowInfo->pChildInfo[i2].size.cy,
+				hWnd,0,hInst,
+				0,0,100,0);
+		}
+		else{
+			GetItemClassName(temporary,pWindowInfo->pChildInfo[i2].Control);
+			hChild=CreateWindowEx(
+				pWindowInfo->pChildInfo[i2].ExStyle,
+				temporary,
+				pWindowInfo->pChildInfo[i2].caption,
+				pWindowInfo->pChildInfo[i2].style,
+				pWindowInfo->pChildInfo[i2].pos.x,
+				pWindowInfo->pChildInfo[i2].pos.y,
+				pWindowInfo->pChildInfo[i2].size.cx,
+				pWindowInfo->pChildInfo[i2].size.cy,
+				hWnd,0,hInst,0);
+
+			lphFont[i2]=CreateFontIndirect(&pWindowInfo->LogFont);
+			SendMessage(hChild,WM_SETFONT,(long)lphFont[i2],0);
+
+			if(pWindowInfo->pChildInfo[i2].Control==CT_IMAGEBOX){
+				///////////////////////////
+				// イメージ ボックスの場合
+				///////////////////////////
+				if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_ICON){
+					if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_FILE)
+						lstrcpy(temporary,pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
+					else{
+						for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
+							if(lstrcmp(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,
+								ProjectInfo.res.pIconResInfo[i3].IdName)==0) break;
+						}
+						if(i3==ProjectInfo.res.NumberOfIconRes) temporary[0]=0;
+						else lstrcpy(temporary,ProjectInfo.res.pIconResInfo[i3].path);
+					}
+					if(temporary[0]){
+						GetFullPath(temporary,ProjectInfo.dir);
+						lphImage[i2]=LoadImage(hInst,temporary,IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
+
+						SendMessage(hChild,STM_SETICON,(long)lphImage[i2],0);
+					}
+				}
+				else if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_BITMAP){
+					if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_FILE)
+						lstrcpy(temporary,pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
+					else{
+						for(i3=0;i3<ProjectInfo.res.NumberOfBitmapRes;i3++){
+							if(lstrcmp(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,
+								ProjectInfo.res.pBitmapResInfo[i3].IdName)==0) break;
+						}
+						if(i3==ProjectInfo.res.NumberOfBitmapRes) temporary[0]=0;
+						else lstrcpy(temporary,ProjectInfo.res.pBitmapResInfo[i3].path);
+					}
+					if(temporary[0]){
+						GetFullPath(temporary,ProjectInfo.dir);
+						lphImage[i2]=LoadImage(hInst,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
+
+						SendMessage(hChild,STM_SETIMAGE,IMAGE_BITMAP,(long)lphImage[i2]);
+					}
+				}
+			}
+		}
+	}
+
+	MSG msg;
+	while(GetMessage(&msg,NULL,0,0)){
+		if(IsDialogMessage(hWnd,&msg)) continue;
+		TranslateMessage(&msg);
+		DispatchMessage(&msg);
+	}
+
+	//フォントハンドルを破棄
+	for(i2=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
+		if(lphFont[i2]) DeleteObject(lphFont[i2]);
+	}
+	HeapDefaultFree(lphFont);
+
+	//イメージハンドルを破棄
+	for(i2=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
+		if(lphImage[i2]){
+			if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_ICON)
+				DestroyIcon((HICON)lphImage[i2]);
+			else if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_BITMAP)
+				DeleteObject(lphImage[i2]);
+		}
+	}
+	HeapDefaultFree(lphImage);
+
+	hWnd=0;
+
+	_endthread();
+}
+
+void SetSupportDlgData(int WndNum,int WndInfoNum){
+	////////////////////////////////////
+	// サポートダイアログの内容をセット
+	////////////////////////////////////
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern RADINFO RadInfo;
+	char temporary[255];
+	HWND hSupport;
+
+	bSupportDlg_NoChange=1;
+
+	hSupport=MdiInfo[WndNum].MdiRadInfo->hSupport;
+
+	if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END&&
+		(!(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]!=-1&&MdiInfo[WndNum].MdiRadInfo->SelectingItem[1]!=-1))){
+		sprintf(temporary,"%d",RadInfo.DraggingRect[0].left-MdiInfo[WndNum].MdiRadInfo->ClientPos.x);
+		SetDlgItemText(hSupport,IDC_XPOS,temporary);
+
+		sprintf(temporary,"%d",RadInfo.DraggingRect[0].top-MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
+		SetDlgItemText(hSupport,IDC_YPOS,temporary);
+
+		sprintf(temporary,"%d",RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left);
+		SetDlgItemText(hSupport,IDC_WIDTH,temporary);
+
+		sprintf(temporary,"%d",RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
+		SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
+	}
+	else if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+		EnableWindow(GetDlgItem(hSupport,IDC_XPOS),0);
+		EnableWindow(GetDlgItem(hSupport,IDC_YPOS),0);
+		EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),0);
+		EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),0);
+		EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),1);
+		EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),1);
+
+		SetDlgItemText(hSupport,IDC_XPOS,"");
+		SetDlgItemText(hSupport,IDC_YPOS,"");
+
+		sprintf(temporary,"%d",ProjectInfo.pWindowInfo[WndInfoNum].size.cx);
+		SetDlgItemText(hSupport,IDC_WIDTH,temporary);
+
+		sprintf(temporary,"%d",ProjectInfo.pWindowInfo[WndInfoNum].size.cy);
+		SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
+	}
+	else{
+		EnableWindow(GetDlgItem(hSupport,IDC_XPOS),1);
+		EnableWindow(GetDlgItem(hSupport,IDC_YPOS),1);
+
+		if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[1]!=-1){
+			EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),0);
+			EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),0);
+			EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),0);
+			EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),0);
+
+			SetDlgItemText(hSupport,IDC_XPOS,"");
+			SetDlgItemText(hSupport,IDC_YPOS,"");
+			SetDlgItemText(hSupport,IDC_WIDTH,"");
+			SetDlgItemText(hSupport,IDC_HEIGHT,"");
+		}
+		else{
+			EnableWindow(GetDlgItem(hSupport,IDC_SPIN1),1);
+			EnableWindow(GetDlgItem(hSupport,IDC_SPIN2),1);
+			EnableWindow(GetDlgItem(hSupport,IDC_SPIN3),1);
+			EnableWindow(GetDlgItem(hSupport,IDC_SPIN4),1);
+
+			sprintf(temporary,"%d",ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x);
+			SetDlgItemText(hSupport,IDC_XPOS,temporary);
+
+			sprintf(temporary,"%d",ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y);
+			SetDlgItemText(hSupport,IDC_YPOS,temporary);
+
+			sprintf(temporary,"%d",ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cx);
+			SetDlgItemText(hSupport,IDC_WIDTH,temporary);
+
+			sprintf(temporary,"%d",ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cy);
+			SetDlgItemText(hSupport,IDC_HEIGHT,temporary);
+		}
+	}
+
+	bSupportDlg_NoChange=0;
+}
+
+BOOL CALLBACK DlgRadSupport(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	static BOOL bTimer;
+	int i,i2,i3;
+	char temporary[255];
+	POINTANDSIZE PointAndSize;
+	RECT rect;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SendDlgItemMessage(hwnd,IDC_SPIN1,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_XPOS),0);
+			SendDlgItemMessage(hwnd,IDC_SPIN2,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_YPOS),0);
+			SendDlgItemMessage(hwnd,IDC_SPIN3,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_WIDTH),0);
+			SendDlgItemMessage(hwnd,IDC_SPIN4,UDM_SETBUDDY,(long)GetDlgItem(hwnd,IDC_HEIGHT),0);
+
+			SendDlgItemMessage(hwnd,IDC_SPIN1,UDM_SETRANGE32,0,0x7FFF);
+			SendDlgItemMessage(hwnd,IDC_SPIN2,UDM_SETRANGE32,0,0x7FFF);
+			SendDlgItemMessage(hwnd,IDC_SPIN3,UDM_SETRANGE32,0,0x7FFF);
+			SendDlgItemMessage(hwnd,IDC_SPIN4,UDM_SETRANGE32,0,0x7FFF);
+			return 0;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_TEST:
+					_beginthread(
+						(void (__cdecl *)(void *))ShowTestWindow,
+						0,
+						(void *)GetWndInfoNum(MdiInfo[GetWndNum(GetParent(hwnd))].path));
+					return 1;
+				case IDC_XPOS:
+				case IDC_YPOS:
+				case IDC_WIDTH:
+				case IDC_HEIGHT:
+					if(HIWORD(wParam)==EN_UPDATE){
+						if(bSupportDlg_NoChange) return 1;
+
+						if(bTimer) KillTimer(hwnd,0);
+
+						bTimer=1;
+						SetTimer(hwnd,0,650,NULL);
+					}
+					return 1;
+			}
+			break;
+		case WM_TIMER:
+			KillTimer(hwnd,0);
+			bTimer=0;
+
+			i=GetWndNum(GetParent(hwnd));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			for(i3=0;;i3++){
+				if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+				PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos;
+				PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size;
+				Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[i3],(DWORD)&PointAndSize);
+			}
+
+			GetDlgItemText(hwnd,IDC_XPOS,temporary,255);
+			if(temporary[0]){
+				for(i3=0;;i3++){
+					if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+					ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.x=atol(temporary);
+				}
+			}
+
+			GetDlgItemText(hwnd,IDC_YPOS,temporary,255);
+			if(temporary[0]){
+				for(i3=0;;i3++){
+					if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+					ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].pos.y=atol(temporary);
+				}
+			}
+
+			GetDlgItemText(hwnd,IDC_WIDTH,temporary,255);
+			if(temporary[0]){
+				if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+					ProjectInfo.pWindowInfo[i2].size.cx=atol(temporary);
+				else{
+					for(i3=0;;i3++){
+						if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cx=atol(temporary);
+					}
+				}
+			}
+
+			GetDlgItemText(hwnd,IDC_HEIGHT,temporary,255);
+			if(temporary[0]){
+				if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+					ProjectInfo.pWindowInfo[i2].size.cy=atol(temporary);
+				else{
+					for(i3=0;;i3++){
+						if(MdiInfo[i].MdiRadInfo->SelectingItem[i3]==-1) break;
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[i3]].size.cy=atol(temporary);
+					}
+				}
+			}
+
+			//描画
+			DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+
+			//スクロールバーをリセット
+			GetClientRect(MdiInfo[i].MdiRadInfo->hRad,&rect);
+			ResetScrollbarOfRadEditor(i,rect.right,rect.bottom);
+
+			return 1;
+	}
+	return 0;
+}
Index: /ProjectEditor/RadToolsAndPropertyProc.cpp
===================================================================
--- /ProjectEditor/RadToolsAndPropertyProc.cpp	(revision 3)
+++ /ProjectEditor/RadToolsAndPropertyProc.cpp	(revision 3)
@@ -0,0 +1,4624 @@
+#include "Common.h"
+
+#if defined(JPN)
+//日本語
+#include "rad_msg_jpn.h"
+#else
+//英語
+#include "rad_msg_eng.h"
+#endif
+
+void ShowControlAdvice(int Control){
+	if(Control==IDC_TOOL_MOUSE) SetStatusText("");
+
+#if defined(JPN)
+	//日本語
+	else if(Control==IDC_TOOL_BUTTON) SetStatusText("[ボタン] クリックすることができるボタンです。");
+	else if(Control==IDC_TOOL_CHECKBOX) SetStatusText("[チェック ボックス] ON/OFFの設定ができるボタンです。");
+	else if(Control==IDC_TOOL_COMBOBOX) SetStatusText("[コンボ ボックス] ドロップダウン リストの中から項目を選択することができます。");
+	else if(Control==IDC_TOOL_EDIT) SetStatusText("[エディット ボックス] ユーザーが文字列の編集操作を行うことができます。");
+	else if(Control==IDC_TOOL_GROUPBOX) SetStatusText("[グループ ボックス] 複数のコントロールを囲むことができます。");
+	else if(Control==IDC_TOOL_HSCROLLBAR) SetStatusText("[水平スクロールバー] 現在位置を表示、設定します。");
+	else if(Control==IDC_TOOL_IMAGEBOX) SetStatusText("[イメージ ボックス] 四角形やビットマップ、アイコンを表示します。");
+	else if(Control==IDC_TOOL_LISTBOX) SetStatusText("[リスト ボックス] 複数の項目を表示、選択できるリストです。");
+	else if(Control==IDC_TOOL_LISTVIEW) SetStatusText("[リスト ビュー] リスト ボックス内にアイコンやテキストを並べて表示するビューです。");
+	else if(Control==IDC_TOOL_PROGRESSBAR) SetStatusText("[プログレス バー] 進行状況を表示するバー。");
+	else if(Control==IDC_TOOL_RADIOBUTTON) SetStatusText("[ラジオ ボタン] 複数の項目から１つを選択するボタンです。");
+	else if(Control==IDC_TOOL_STATIC) SetStatusText("[スタティック テキスト] テキストを表示します。");
+	else if(Control==IDC_TOOL_TRACKBAR) SetStatusText("[トラック バー] 目盛が付いた移動バー。");
+	else if(Control==IDC_TOOL_TREEVIEW) SetStatusText("[ツリー ビュー] リストを階層構造で表示します。");
+	else if(Control==IDC_TOOL_UPDOWN) SetStatusText("[アップ ダウン コントロール] 上下のボタンで数値を設定します。");
+	else if(Control==IDC_TOOL_VSCROLLBAR) SetStatusText("[垂直スクロールバー] 現在位置を表示、設定します。");
+#else
+	//英語
+	else if(Control==IDC_TOOL_BUTTON) SetStatusText("[Button] The button which can be clicked");
+	else if(Control==IDC_TOOL_CHECKBOX) SetStatusText("[CheckBox] The button which can switch on/off");
+	else if(Control==IDC_TOOL_COMBOBOX) SetStatusText("[ComboBox] Choose an item from drop down lists");
+	else if(Control==IDC_TOOL_EDIT) SetStatusText("[EditBox] A user can edit a character sequence");
+	else if(Control==IDC_TOOL_GROUPBOX) SetStatusText("[GroupBox] Two or more control can be packed");
+	else if(Control==IDC_TOOL_HSCROLLBAR) SetStatusText("[Horizontal Scrollbar] The present position is displayed and setup");
+	else if(Control==IDC_TOOL_IMAGEBOX) SetStatusText("[ImageBox] A rectangle, a bitmap, and an icon are displayed.");
+	else if(Control==IDC_TOOL_LISTBOX) SetStatusText("[ListBox] The list which can display and choose two or more items");
+	else if(Control==IDC_TOOL_LISTVIEW) SetStatusText("[ListView] The view which displays an icon and a text in a list box");
+	else if(Control==IDC_TOOL_PROGRESSBAR) SetStatusText("[Progressbar] The bar which displays an advance situation");
+	else if(Control==IDC_TOOL_RADIOBUTTON) SetStatusText("[RadioButton] The button which chooses one from two or more items");
+	else if(Control==IDC_TOOL_STATIC) SetStatusText("[StaticText] Display the text messages");
+	else if(Control==IDC_TOOL_TRACKBAR) SetStatusText("[Trackbar] The bar to which the scale was attached");
+	else if(Control==IDC_TOOL_TREEVIEW) SetStatusText("[TreeView] Lists are displayed by the layered structure");
+	else if(Control==IDC_TOOL_UPDOWN) SetStatusText("[Up/Down Control] A numerical value is set up with a up/down button");
+	else if(Control==IDC_TOOL_VSCROLLBAR) SetStatusText("[Vertical Scrollbar] The present position is displayed and setup");
+#endif
+}
+
+char *GetControlName(DWORD id){
+	char *pTemp;
+	pTemp="";
+
+#if defined(JPN)
+	//日本語
+	if(id==IDC_TOOL_MOUSE) pTemp="選択";
+	else if(id==IDC_TOOL_STATIC) pTemp="スタティック テキスト";
+	else if(id==IDC_TOOL_EDIT) pTemp="エディット ボックス";
+	else if(id==IDC_TOOL_GROUPBOX) pTemp="グループ ボックス";
+	else if(id==IDC_TOOL_COMBOBOX) pTemp="コンボ ボックス";
+	else if(id==IDC_TOOL_LISTBOX) pTemp="リスト ボックス";
+	else if(id==IDC_TOOL_BUTTON) pTemp="ボタン";
+	else if(id==IDC_TOOL_CHECKBOX) pTemp="チェック ボックス";
+	else if(id==IDC_TOOL_RADIOBUTTON) pTemp="ラジオ ボタン";
+	else if(id==IDC_TOOL_LISTVIEW) pTemp="リスト ビュー";
+	else if(id==IDC_TOOL_TREEVIEW) pTemp="ツリー ビュー";
+	else if(id==IDC_TOOL_HSCROLLBAR) pTemp="水平スクロール バー";
+	else if(id==IDC_TOOL_VSCROLLBAR) pTemp="垂直スクロール バー";
+	else if(id==IDC_TOOL_UPDOWN) pTemp="アップ ダウン コントロール";
+	else if(id==IDC_TOOL_IMAGEBOX) pTemp="イメージ ボックス";
+	else if(id==IDC_TOOL_TRACKBAR) pTemp="トラック バー";
+	else if(id==IDC_TOOL_PROGRESSBAR) pTemp="プログレス バー";
+#else
+	//英語
+	if(id==IDC_TOOL_MOUSE) pTemp="Tool";
+	else if(id==IDC_TOOL_STATIC) pTemp="StaticText";
+	else if(id==IDC_TOOL_EDIT) pTemp="EditBox";
+	else if(id==IDC_TOOL_GROUPBOX) pTemp="GroupBox";
+	else if(id==IDC_TOOL_COMBOBOX) pTemp="ComboBox";
+	else if(id==IDC_TOOL_LISTBOX) pTemp="ListBox";
+	else if(id==IDC_TOOL_BUTTON) pTemp="Button";
+	else if(id==IDC_TOOL_CHECKBOX) pTemp="CheckBox";
+	else if(id==IDC_TOOL_RADIOBUTTON) pTemp="RadioButton";
+	else if(id==IDC_TOOL_LISTVIEW) pTemp="ListView";
+	else if(id==IDC_TOOL_TREEVIEW) pTemp="TreeView";
+	else if(id==IDC_TOOL_HSCROLLBAR) pTemp="Horizontal Scrollbar";
+	else if(id==IDC_TOOL_VSCROLLBAR) pTemp="Vertical Scrollbar";
+	else if(id==IDC_TOOL_UPDOWN) pTemp="Up/Down Control";
+	else if(id==IDC_TOOL_IMAGEBOX) pTemp="ImageBox";
+	else if(id==IDC_TOOL_TRACKBAR) pTemp="Trackbar";
+	else if(id==IDC_TOOL_PROGRESSBAR) pTemp="Progressbar";
+#endif
+
+	return pTemp;
+}
+BOOL CALLBACK RadToolButtonsProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,WndNum;
+	HWND hParent;
+	HWND hToolBar;
+	RECT rect;
+	TBBUTTON CtrlToolBar[]={
+		{0,IDC_TOOL_MOUSE,TBSTATE_ENABLED|TBSTATE_WRAP|TBSTATE_CHECKED,TBSTYLE_CHECKGROUP,0,0},
+		{1,IDC_TOOL_STATIC,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{2,IDC_TOOL_EDIT,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{3,IDC_TOOL_GROUPBOX,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{BMPNUM_RADTOOLBAR-1,0,TBSTATE_INDETERMINATE,TBSTYLE_CHECKGROUP,0,0},
+		{4,IDC_TOOL_COMBOBOX,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{5,IDC_TOOL_LISTBOX,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
+		{6,IDC_TOOL_BUTTON,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{7,IDC_TOOL_CHECKBOX,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{8,IDC_TOOL_RADIOBUTTON,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{BMPNUM_RADTOOLBAR-1,0,TBSTATE_INDETERMINATE,TBSTYLE_CHECKGROUP,0,0},
+		{9,IDC_TOOL_LISTVIEW,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{10,IDC_TOOL_TREEVIEW,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
+		{11,IDC_TOOL_HSCROLLBAR,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{12,IDC_TOOL_VSCROLLBAR,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{13,IDC_TOOL_UPDOWN,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{BMPNUM_RADTOOLBAR-1,0,TBSTATE_INDETERMINATE,TBSTYLE_CHECKGROUP,0,0},
+		{14,IDC_TOOL_IMAGEBOX,TBSTATE_ENABLED|TBSTATE_WRAP,TBSTYLE_CHECKGROUP,0,0},
+		{15,IDC_TOOL_TRACKBAR,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+		{16,IDC_TOOL_PROGRESSBAR,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0},
+	};
+	TOOLTIPTEXT *pTipText;
+
+	switch(message){
+		case WM_INITDIALOG:
+			hToolBar=CreateToolbarEx(hwnd,WS_CHILD|WS_VISIBLE|CCS_NODIVIDER|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS,
+				NULL,
+				BMPNUM_RADTOOLBAR,	/*ビットマップの個数*/
+				hResInst,(unsigned int)MAKEINTRESOURCE(IDR_CONTROL),CtrlToolBar,
+				(BMPNUM_RADTOOLBAR-1)+SEPNUM_RADTOOLBAR,	/*アイテムの個数*/
+				0,0,16,15,sizeof(TBBUTTON));
+
+			//Windows9x系OSでの不具合を防ぐため
+			PostMessage(hwnd,WM_USER+120,0,0);
+
+			break;
+		case WM_USER+120:
+			GetClientRect(hwnd,&rect);
+			MoveWindow(hwnd,5,22,rect.right,rect.bottom,1);
+			MoveWindow(GetWindow(hwnd,GW_CHILD),0,0,rect.right,rect.bottom,1);
+			return 1;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_TOOL_MOUSE:
+					ShowControlAdvice(LOWORD(wParam));
+					hParent=GetParent(GetParent(hwnd));
+					BringWindowToTop(hParent);
+					i=GetWndNum(hParent);
+					i2=GetWndInfoNum(MdiInfo[i].path);
+					MdiInfo[i].MdiRadInfo->ButtonSelect=IDC_TOOL_MOUSE;
+					DrawSelectingRect(MdiInfo[i].MdiRadInfo->hRad,i,i2,IDC_TOOL_MOUSE);
+					SetFocus(MdiInfo[i].MdiRadInfo->hRad);
+					return 1;
+				case IDC_TOOL_BUTTON:
+				case IDC_TOOL_CHECKBOX:
+				case IDC_TOOL_COMBOBOX:
+				case IDC_TOOL_EDIT:
+				case IDC_TOOL_GROUPBOX:
+				case IDC_TOOL_HSCROLLBAR:
+				case IDC_TOOL_IMAGEBOX:
+				case IDC_TOOL_LISTBOX:
+				case IDC_TOOL_LISTVIEW:
+				case IDC_TOOL_PROGRESSBAR:
+				case IDC_TOOL_RADIOBUTTON:
+				case IDC_TOOL_STATIC:
+				case IDC_TOOL_TRACKBAR:
+				case IDC_TOOL_TREEVIEW:
+				case IDC_TOOL_UPDOWN:
+				case IDC_TOOL_VSCROLLBAR:
+					ShowControlAdvice(LOWORD(wParam));
+					hParent=GetParent(GetParent(hwnd));
+					BringWindowToTop(hParent);
+					WndNum=GetWndNum(hParent);
+					MdiInfo[WndNum].MdiRadInfo->ButtonSelect=LOWORD(wParam);
+					InvalidateRect(MdiInfo[WndNum].MdiRadInfo->hRad,NULL,0);
+					return 1;
+			}
+			break;
+		case WM_NOTIFY:
+			pTipText=(TOOLTIPTEXT *)lParam;
+			if(pTipText->hdr.code==TTN_NEEDTEXT){
+				//ステータスバーに説明文を表示
+				ShowControlAdvice(pTipText->hdr.idFrom);
+
+				//コントロール名を取得し、ツールヒントとして表示する
+				pTipText->lpszText=GetControlName(pTipText->hdr.idFrom);
+			}
+			break;
+	}
+	return 0;
+}
+LRESULT CALLBACK RadToolsWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	extern HFONT hStatusFont;
+	int i;
+	RECT rect;
+	SCROLLINFO ScrollInfo;
+	HDC hdc;
+	PAINTSTRUCT ps;
+	HFONT hOldFont;
+	POINT pos;
+
+	switch(message){
+		case WM_CREATE:
+			CreateDialog(hResInst,MAKEINTRESOURCE(IDD_RAD_CTRLBUTTONS),hwnd,(DLGPROC)RadToolButtonsProc);
+			return 0;
+		case WM_VSCROLL:
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			if(LOWORD(wParam)==SB_LINEUP) i=-20;
+			else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
+			else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
+			else i=0;
+			GetClientRect(hwnd,&rect);
+			i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
+			if(i!=0){
+				ScrollInfo.nPos+=i;
+				SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
+				ScrollWindow(hwnd,0,-i,NULL,NULL);
+				UpdateWindow(hwnd);
+			}
+			return 0;
+		case WM_SIZE:
+			GetClientRect(GetWindow(hwnd,GW_CHILD),&rect);
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
+
+			//垂直スクロールバーの設定
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			ScrollInfo.nMin=0;
+			ScrollInfo.nMax=rect.bottom;
+			ScrollInfo.nPage=HIWORD(lParam);
+			SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
+
+			i=ScrollInfo.nPos;
+			ScrollInfo.fMask=SIF_POS;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			if(i>ScrollInfo.nPos){
+				ScrollWindow(hwnd,0,i-ScrollInfo.nPos,NULL,NULL);
+				UpdateWindow(hwnd);
+			}
+			return 0;
+		case WM_PAINT:
+			hdc=BeginPaint(hwnd,&ps);
+			hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
+			SetBkMode(hdc,TRANSPARENT);
+			pos.x=30;
+			pos.y=3;
+			CursorPos_GlobalToLocal(hwnd,&pos.x,&pos.y);
+#if defined(JPN)
+			//日本語
+			TextOut(hdc,pos.x,pos.y,"- コントロール -",lstrlen("- コントロール -"));
+#else
+			//英語
+			TextOut(hdc,pos.x,pos.y,"-   Control   -",lstrlen("-   Control   -"));
+#endif
+			SelectObject(hdc,hOldFont);
+			EndPaint(hwnd,&ps);
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+
+
+/////////////////////////
+//ウィンドウ プロパティ
+
+void RadProperty_Window_Caption_StylingOrder(HWND hwnd,DWORD *style){
+	if((*style&WS_CAPTION)==WS_CAPTION){
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_SYSMENU),1);
+		if(!(*style&WS_CHILD)){
+			EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MINIMIZEBOX),1);
+			EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MAXIMIZEBOX),1);
+		}
+		if(SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_GETCURSEL,0,0)==0){
+			if(*style&WS_THICKFRAME) SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_SETCURSEL,1,0);
+		}
+	}
+	else{
+		*style&=~(WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX);
+		SendDlgItemMessage(hwnd,IDC_STYLE_SYSMENU,BM_SETCHECK,BST_UNCHECKED,0);
+		SendDlgItemMessage(hwnd,IDC_STYLE_MINIMIZEBOX,BM_SETCHECK,BST_UNCHECKED,0);
+		SendDlgItemMessage(hwnd,IDC_STYLE_MAXIMIZEBOX,BM_SETCHECK,BST_UNCHECKED,0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_SYSMENU),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MINIMIZEBOX),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MAXIMIZEBOX),0);
+	}
+}
+void RadProperty_Window_Border_StylingOrder(HWND hwnd,DWORD *style){
+	if(*style&(WS_BORDER|WS_THICKFRAME)){
+		if(*style&(WS_POPUP|WS_CHILD)) EnableWindow(GetDlgItem(hwnd,IDC_STYLE_CAPTION),1);
+		else{
+			*style|=WS_CAPTION;
+			SendDlgItemMessage(hwnd,IDC_STYLE_CAPTION,BM_SETCHECK,BST_CHECKED,0);
+			EnableWindow(GetDlgItem(hwnd,IDC_STYLE_CAPTION),0);
+		}
+	}
+	else{
+		*style&=~WS_CAPTION;
+		SendDlgItemMessage(hwnd,IDC_STYLE_CAPTION,BM_SETCHECK,BST_UNCHECKED,0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_CAPTION),0);
+	}
+	RadProperty_Window_Caption_StylingOrder(hwnd,style);
+}
+void RadProperty_Window_Window_StylingOrder(HWND hwnd,DWORD *style){
+	if(*style&WS_POPUP){
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_CAPTION),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MINIMIZEBOX),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MAXIMIZEBOX),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MINIMIZE),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MAXIMIZE),1);
+	}
+	else if(*style&WS_CHILD){
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_CAPTION),1);
+
+		*style&=~(WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_MINIMIZE|WS_MAXIMIZE);
+		SendDlgItemMessage(hwnd,IDC_STYLE_MINIMIZEBOX,BM_SETCHECK,BST_UNCHECKED,0);
+		SendDlgItemMessage(hwnd,IDC_STYLE_MAXIMIZEBOX,BM_SETCHECK,BST_UNCHECKED,0);
+		SendDlgItemMessage(hwnd,IDC_STYLE_MINIMIZE,BM_SETCHECK,BST_UNCHECKED,0);
+		SendDlgItemMessage(hwnd,IDC_STYLE_MAXIMIZE,BM_SETCHECK,BST_UNCHECKED,0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MINIMIZEBOX),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MAXIMIZEBOX),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MINIMIZE),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MAXIMIZE),0);
+	}
+	else{
+		if(*style&WS_BORDER){
+			*style|=WS_CAPTION;
+			SendDlgItemMessage(hwnd,IDC_STYLE_CAPTION,BM_SETCHECK,BST_CHECKED,0);
+			EnableWindow(GetDlgItem(hwnd,IDC_STYLE_CAPTION),0);
+
+			EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MINIMIZEBOX),1);
+			EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MAXIMIZEBOX),1);
+			EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MINIMIZE),1);
+			EnableWindow(GetDlgItem(hwnd,IDC_STYLE_MAXIMIZE),1);
+		}
+	}
+	RadProperty_Window_Border_StylingOrder(hwnd,style);
+}
+BOOL CALLBACK DlgRadProperty_Window_Rename(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HWND hClient,hOwner;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	char temporary[MAX_PATH],temp2[MAX_PATH];
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			i=GetWndNum(GetWindow(hClient,GW_CHILD));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+			sprintf(temporary,"h%s",ProjectInfo.pWindowInfo[i2].name);
+			sprintf(temp2,"%sProc",ProjectInfo.pWindowInfo[i2].name);
+			if(lstrcmp(temporary,ProjectInfo.pWindowInfo[i2].HandleName)==0&&
+				lstrcmp(temp2,ProjectInfo.pWindowInfo[i2].CallBackName)==0){
+				SendDlgItemMessage(hwnd,IDC_AUTOSET,BM_SETCHECK,BST_CHECKED,0);
+				SendMessage(hwnd,WM_COMMAND,IDC_AUTOSET,0);
+			}
+			SetDlgItemText(hwnd,IDC_WINDOWNAME,ProjectInfo.pWindowInfo[i2].name);
+			SetDlgItemText(hwnd,IDC_WINDOWHANDLE,ProjectInfo.pWindowInfo[i2].HandleName);
+			SetDlgItemText(hwnd,IDC_WINDOWPROC,ProjectInfo.pWindowInfo[i2].CallBackName);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					if(GetWindowTextLength(GetDlgItem(hwnd,IDC_WINDOWNAME))==0){
+						//MsgBox "ウィンドウ識別名を入力して下さい。"
+						MessageBox(hOwner,STRING_WINDOW_RENAME_MUST_WINDOWNAME,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+						break;
+					}
+					if(GetWindowTextLength(GetDlgItem(hwnd,IDC_WINDOWHANDLE))==0){
+						//MsgBox "ハンドル名を入力して下さい。"
+						MessageBox(hOwner,STRING_WINDOW_RENAME_MUST_HANDLENAME,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+						break;
+					}
+					if(GetWindowTextLength(GetDlgItem(hwnd,IDC_WINDOWPROC))==0){
+						//MsgBox "プロシージャ名を入力して下さい。"
+						MessageBox(hOwner,STRING_WINDOW_RENAME_MUST_PROCEDURENAME,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+						break;
+					}
+
+					i=GetWndNum(GetWindow(hClient,GW_CHILD));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+
+					RAD_UNDOSTATE_NAME names,NoticeNames;
+					i3=GetWindowTextLength(GetDlgItem(hwnd,IDC_WINDOWNAME))+1;
+					names.name=(char *)HeapAlloc(hHeap,0,i3);
+					GetDlgItemText(hwnd,IDC_WINDOWNAME,names.name,i3);
+
+					i3=GetWindowTextLength(GetDlgItem(hwnd,IDC_WINDOWHANDLE))+1;
+					names.HandleName=(char *)HeapAlloc(hHeap,0,i3);
+					GetDlgItemText(hwnd,IDC_WINDOWHANDLE,names.HandleName,i3);
+
+					i3=GetWindowTextLength(GetDlgItem(hwnd,IDC_WINDOWPROC))+1;
+					names.CallBackName=(char *)HeapAlloc(hHeap,0,i3);
+					GetDlgItemText(hwnd,IDC_WINDOWPROC,names.CallBackName,i3);
+
+					if(lstrcmp(names.name,ProjectInfo.pWindowInfo[i2].name)==0&&
+						lstrcmp(names.HandleName,ProjectInfo.pWindowInfo[i2].HandleName)==0&&
+						lstrcmp(names.CallBackName,ProjectInfo.pWindowInfo[i2].CallBackName)==0){
+						HeapDefaultFree(names.name);
+						HeapDefaultFree(names.HandleName);
+						HeapDefaultFree(names.CallBackName);
+						SendMessage(hwnd,WM_COMMAND,IDCANCEL,0);
+						return 1;
+					}
+
+					//MsgBox "これらのウィンドウ識別名を変更すると、ソースコード内の識別子は手動で変換する必要があります。変更しますか？"
+					if(IDCANCEL==MessageBox(hwnd,STRING_WINDOW_RENAME_CHECK,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) return 1;
+
+					//変更情報を更新
+					NoticeNames.name=ProjectInfo.pWindowInfo[i2].name;
+					NoticeNames.HandleName=ProjectInfo.pWindowInfo[i2].HandleName;
+					NoticeNames.CallBackName=ProjectInfo.pWindowInfo[i2].CallBackName;
+					Rad_NoticeChanging(i,RAD_UNDO_NAME,SELECT_WINDOW,(DWORD)&NoticeNames);
+
+					HeapDefaultFree(ProjectInfo.pWindowInfo[i2].name);
+					ProjectInfo.pWindowInfo[i2].name=names.name;
+					GlobalFree(MdiInfo[i].path);
+					MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(names.name));
+					lstrcpy(MdiInfo[i].path,names.name);
+
+					HeapDefaultFree(ProjectInfo.pWindowInfo[i2].HandleName);
+					ProjectInfo.pWindowInfo[i2].HandleName=names.HandleName;
+
+					HeapDefaultFree(ProjectInfo.pWindowInfo[i2].CallBackName);
+					ProjectInfo.pWindowInfo[i2].CallBackName=names.CallBackName;
+
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+				case IDC_WINDOWNAME:
+					if(HIWORD(wParam)==EN_CHANGE) SendMessage(hwnd,WM_COMMAND,IDC_AUTOSET,0);
+					return 1;
+				case IDC_AUTOSET:
+					if(SendDlgItemMessage(hwnd,IDC_AUTOSET,BM_GETCHECK,0,0)){
+						SendDlgItemMessage(hwnd,IDC_WINDOWHANDLE,EM_SETREADONLY,1,0);
+						SendDlgItemMessage(hwnd,IDC_WINDOWPROC,EM_SETREADONLY,1,0);
+						GetDlgItemText(hwnd,IDC_WINDOWNAME,temporary,MAX_PATH);
+						if(temporary[0]){
+							sprintf(temp2,"h%s",temporary);
+							SetDlgItemText(hwnd,IDC_WINDOWHANDLE,temp2);
+							sprintf(temp2,"%sProc",temporary);
+							SetDlgItemText(hwnd,IDC_WINDOWPROC,temp2);
+						}
+						else{
+							SetDlgItemText(hwnd,IDC_WINDOWHANDLE,"");
+							SetDlgItemText(hwnd,IDC_WINDOWPROC,"");
+						}
+					}
+					else{
+						SendDlgItemMessage(hwnd,IDC_WINDOWHANDLE,EM_SETREADONLY,0,0);
+						SendDlgItemMessage(hwnd,IDC_WINDOWPROC,EM_SETREADONLY,0,0);
+					}
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgRadProperty_Window_ExStyle(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			i=GetWndNum(GetWindow(hClient,GW_CHILD));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_TOPMOST) SendDlgItemMessage(hwnd,IDC_EXSTYLE_TOPMOST,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_ACCEPTFILES) SendDlgItemMessage(hwnd,IDC_EXSTYLE_ACCEPTFILES,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_TRANSPARENT) SendDlgItemMessage(hwnd,IDC_EXSTYLE_TRANSPARENT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_TOOLWINDOW) SendDlgItemMessage(hwnd,IDC_EXSTYLE_TOOLWINDOW,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_CLIENTEDGE) SendDlgItemMessage(hwnd,IDC_EXSTYLE_CLIENTEDGE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_STATICEDGE) SendDlgItemMessage(hwnd,IDC_EXSTYLE_STATICEDGE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_NOPARENTNOTIFY) SendDlgItemMessage(hwnd,IDC_EXSTYLE_NOPARENTNOTIFY,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_CONTEXTHELP) SendDlgItemMessage(hwnd,IDC_EXSTYLE_CONTEXTHELP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].ExStyle&WS_EX_CONTROLPARENT) SendDlgItemMessage(hwnd,IDC_EXSTYLE_CONTROLPARENT,BM_SETCHECK,BST_CHECKED,0);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					i=GetWndNum(GetWindow(hClient,GW_CHILD));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+
+					DWORD style;
+					style=0;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_TOPMOST,BM_GETCHECK,0,0))
+						style|=WS_EX_TOPMOST;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_ACCEPTFILES,BM_GETCHECK,0,0))
+						style|=WS_EX_ACCEPTFILES;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_TRANSPARENT,BM_GETCHECK,0,0))
+						style|=WS_EX_TRANSPARENT;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_TOOLWINDOW,BM_GETCHECK,0,0))
+						style|=WS_EX_TOOLWINDOW;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_CLIENTEDGE,BM_GETCHECK,0,0))
+						style|=WS_EX_CLIENTEDGE;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_STATICEDGE,BM_GETCHECK,0,0))
+						style|=WS_EX_STATICEDGE;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_NOPARENTNOTIFY,BM_GETCHECK,0,0))
+						style|=WS_EX_NOPARENTNOTIFY;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_CONTEXTHELP,BM_GETCHECK,0,0))
+						style|=WS_EX_CONTEXTHELP;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_CONTROLPARENT,BM_GETCHECK,0,0))
+						style|=WS_EX_CONTROLPARENT;
+
+					if(style==ProjectInfo.pWindowInfo[i2].ExStyle){
+						SendMessage(hwnd,WM_COMMAND,IDCANCEL,0);
+						return 1;
+					}
+
+					//変更情報
+					Rad_NoticeChanging(i,RAD_UNDO_EXSTYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].ExStyle);
+
+					ProjectInfo.pWindowInfo[i2].ExStyle=style;
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+BOOL CALLBACK RadProperty_WindowProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,i4;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_WINDOWNAME,ProjectInfo.pWindowInfo[i2].name);
+			SetDlgItemText(hwnd,IDC_HANDLE,ProjectInfo.pWindowInfo[i2].HandleName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].caption);
+
+			//"3D FACE（標準）"
+			SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_BGCOLOR1);
+			//"色指定"
+			SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_BGCOLOR2);
+
+			for(i3=0;i3<ProjectInfo.res.NumberOfBitmapRes;i3++)
+				SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_ADDSTRING,0,(long)ProjectInfo.res.pBitmapResInfo[i3].IdName);
+			if(ProjectInfo.pWindowInfo[i2].type==WNDTYPE_MODALDLG||
+				ProjectInfo.pWindowInfo[i2].type==WNDTYPE_MODELESSDLG){
+				SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_SETCURSEL,0,0);
+				EnableWindow(GetDlgItem(hwnd,IDC_BGCOLOR),0);
+			}
+			else{
+				if(ProjectInfo.pWindowInfo[i2].bgColor==COLOR_3DFACE){
+					//3DFACE
+					SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_SETCURSEL,0,0);
+				}
+				else if(ProjectInfo.pWindowInfo[i2].bgColor<=0){
+					//色指定
+					SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_SETCURSEL,1,0);
+				}
+				else if(ProjectInfo.pWindowInfo[i2].bgColor>=0x1000){
+					//ビットマップ指定
+					SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_SETCURSEL,2+ProjectInfo.pWindowInfo[i2].bgColor-0x1000,0);
+				}
+			}
+
+
+			////////////
+			// メニュー
+			////////////
+
+			//"なし"
+			SendDlgItemMessage(hwnd,IDC_WINDOWMENU,CB_ADDSTRING,0,(long)STRING_NONE);
+
+			for(i3=0,i4=0;i3<ProjectInfo.NumberOfMenu;i3++){
+				if(ProjectInfo.pWindowInfo[i2].MenuID){
+					if(lstrcmpi(ProjectInfo.pMenuInfo[i3].IdName,ProjectInfo.pWindowInfo[i2].MenuID)==0)
+						i4=i3+1;
+				}
+				SendDlgItemMessage(hwnd,IDC_WINDOWMENU,CB_ADDSTRING,0,(long)ProjectInfo.pMenuInfo[i3].IdName);
+			}
+			if(i4==0&&ProjectInfo.pWindowInfo[i2].MenuID){
+				//メニューが存在しない場合、無効にする
+				HeapDefaultFree(ProjectInfo.pWindowInfo[i2].MenuID);
+				ProjectInfo.pWindowInfo[i2].MenuID=0;
+				DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+			}
+			SendDlgItemMessage(hwnd,IDC_WINDOWMENU,CB_SETCURSEL,i4,0);
+
+
+			////////////
+			// アイコン
+			////////////
+
+			//"Windowsロゴ（標準）"
+			SendDlgItemMessage(hwnd,IDC_ICONRES,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_ICONDEFAULT);
+
+			for(i3=0,i4=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
+				SendDlgItemMessage(hwnd,IDC_ICONRES,CB_ADDSTRING,0,(long)ProjectInfo.res.pIconResInfo[i3].IdName);
+
+				if(lstrcmp(ProjectInfo.pWindowInfo[i2].IconResName,ProjectInfo.res.pIconResInfo[i3].IdName)==0)
+					i4=i3+1;
+			}
+			if(i4==0&&ProjectInfo.pWindowInfo[i2].IconResName){
+				//アイコンが存在しない場合、無効にする
+				HeapDefaultFree(ProjectInfo.pWindowInfo[i2].IconResName);
+				ProjectInfo.pWindowInfo[i2].IconResName=0;
+				DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+			}
+			SendDlgItemMessage(hwnd,IDC_ICONRES,CB_SETCURSEL,i4,0);
+
+
+			////////////
+			// スタイル
+			////////////
+
+			//"オーバーラップ"
+			SendDlgItemMessage(hwnd,IDC_WINDOWSTYLE,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_STYLE_OVERLAPPED);
+			//"ポップアップ"
+			SendDlgItemMessage(hwnd,IDC_WINDOWSTYLE,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_STYLE_POPUP);
+			//"チャイルド"
+			SendDlgItemMessage(hwnd,IDC_WINDOWSTYLE,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_STYLE_CHILD);
+
+			if(ProjectInfo.pWindowInfo[i2].style&WS_POPUP) SendDlgItemMessage(hwnd,IDC_WINDOWSTYLE,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].style&WS_CHILD) SendDlgItemMessage(hwnd,IDC_WINDOWSTYLE,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_WINDOWSTYLE,CB_SETCURSEL,0,0);
+
+			//"枠なし"
+			SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_STYLE_FRAME_NONE);
+			//"細枠"
+			SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_STYLE_FRAME_THICK);
+			//"サイズ変更枠"
+			SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_ADDSTRING,0,(long)STRING_WINDOWPROP_STYLE_FRAME_BORDER);
+
+			//WS_CAPTION（WS_BORDER含む）を考慮してWS_THICKFRAMEを最初に比較する
+			if(ProjectInfo.pWindowInfo[i2].style&WS_THICKFRAME) SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_SETCURSEL,2,0);
+			else if(ProjectInfo.pWindowInfo[i2].style&WS_BORDER) SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_SETCURSEL,1,0);
+			else SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_SETCURSEL,0,0);
+
+			if(ProjectInfo.pWindowInfo[i2].style&WS_CAPTION) SendDlgItemMessage(hwnd,IDC_STYLE_CAPTION,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_SYSMENU) SendDlgItemMessage(hwnd,IDC_STYLE_SYSMENU,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_MINIMIZEBOX) SendDlgItemMessage(hwnd,IDC_STYLE_MINIMIZEBOX,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_MAXIMIZEBOX) SendDlgItemMessage(hwnd,IDC_STYLE_MAXIMIZEBOX,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_MINIMIZE) SendDlgItemMessage(hwnd,IDC_STYLE_MINIMIZE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_MAXIMIZE) SendDlgItemMessage(hwnd,IDC_STYLE_MAXIMIZE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_HSCROLL) SendDlgItemMessage(hwnd,IDC_STYLE_HSCROLLBAR,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_VSCROLL) SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLLBAR,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_CLIPSIBLINGS) SendDlgItemMessage(hwnd,IDC_STYLE_CLIPSIBLINGS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_CLIPCHILDREN) SendDlgItemMessage(hwnd,IDC_STYLE_CLIPCHILDREN,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+
+			SetDlgItemText(hwnd,IDC_SETFONT,ProjectInfo.pWindowInfo[i2].LogFont.lfFaceName);
+
+			RadProperty_Window_Window_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].style);
+
+
+			//////////
+			//タイプ
+			switch(ProjectInfo.pWindowInfo[i2].type){
+				case WNDTYPE_DEFAULT:
+					SendDlgItemMessage(hwnd,IDC_DEFWINDOW,BM_SETCHECK,BST_CHECKED,0);
+					break;
+				case WNDTYPE_MODALDLG:
+					SendDlgItemMessage(hwnd,IDC_MODALDLG,BM_SETCHECK,BST_CHECKED,0);
+					break;
+				case WNDTYPE_MODELESSDLG:
+					SendDlgItemMessage(hwnd,IDC_MODELESSDLG,BM_SETCHECK,BST_CHECKED,0);
+					break;
+			}
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_RENAMEWINDOW:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_WINDOW_RENAME),hwnd,DlgRadProperty_Window_Rename)) return 1;
+					i=GetWndNum(GetParent(GetParent(hwnd)));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+					SetDlgItemText(hwnd,IDC_WINDOWNAME,ProjectInfo.pWindowInfo[i2].name);
+					SetDlgItemText(hwnd,IDC_HANDLE,ProjectInfo.pWindowInfo[i2].HandleName);
+					return 1;
+				case IDC_RENAMECAPTION:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_RENAMECAPTION),hwnd,DlgRadProperty_Item_RenameCaption)) return 1;
+					i=GetWndNum(GetParent(GetParent(hwnd)));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+					SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].caption);
+					return 1;
+				case IDC_SETFONT:
+					i=GetWndNum(GetParent(GetParent(hwnd)));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+					LOGFONT lf;
+					lf=ProjectInfo.pWindowInfo[i2].LogFont;
+					if(!SetFontDialog(hwnd,&ProjectInfo.pWindowInfo[i2].LogFont,0)) return 1;
+
+					//変更情報
+					Rad_NoticeChanging(i,RAD_UNDO_FONT,SELECT_WINDOW,(DWORD)&lf);
+
+					SetDlgItemText(hwnd,IDC_SETFONT,ProjectInfo.pWindowInfo[i2].LogFont.lfFaceName);
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+				case IDC_BGCOLOR:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_GETCURSEL,0,0);
+						if(i3==0){
+							//3DFACE
+
+							//変更情報
+							Rad_NoticeChanging(i,RAD_UNDO_BGCOLOR,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].bgColor);
+
+							ProjectInfo.pWindowInfo[i2].bgColor=COLOR_3DFACE;
+						}
+						else if(i3==1){
+							//色指定
+							CHOOSECOLOR cc;
+							COLORREF CusColors[16]={
+								RGB(255,255,255),
+								RGB(0,0,0),
+								RGB(128,128,128),
+								RGB(192,192,192),
+								RGB(128,0,0),
+								RGB(255,0,0),
+								RGB(128,128,0),
+								RGB(255,255,0),
+								RGB(0,128,0),
+								RGB(0,255,0),
+								RGB(0,128,128),
+								RGB(0,255,255),
+								RGB(0,0,128),
+								RGB(0,0,255),
+								RGB(128,0,128),
+								RGB(255,0,255)};
+							cc.lStructSize=sizeof(CHOOSECOLOR);
+							cc.hwndOwner=hwnd;
+							if(ProjectInfo.pWindowInfo[i2].bgColor<=0)
+								cc.rgbResult=-ProjectInfo.pWindowInfo[i2].bgColor;
+							else cc.rgbResult=RGB(255,255,255);
+							cc.lpCustColors=CusColors;
+							cc.Flags=CC_RGBINIT|CC_FULLOPEN;
+							if(!ChooseColor(&cc)){
+								//キャンセル動作
+								if(ProjectInfo.pWindowInfo[i2].bgColor==COLOR_3DFACE){
+									//3DFACE
+									SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_SETCURSEL,0,0);
+								}
+								else if(ProjectInfo.pWindowInfo[i2].bgColor<=0){
+									//色指定
+									SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_SETCURSEL,1,0);
+								}
+								else if(ProjectInfo.pWindowInfo[i2].bgColor>=0x1000){
+									//ビットマップ指定
+									SendDlgItemMessage(hwnd,IDC_BGCOLOR,CB_SETCURSEL,2+ProjectInfo.pWindowInfo[i2].bgColor-0x1000,0);
+								}
+								return 1;
+							}
+
+							//変更情報
+							Rad_NoticeChanging(i,RAD_UNDO_BGCOLOR,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].bgColor);
+
+							ProjectInfo.pWindowInfo[i2].bgColor=-(int)cc.rgbResult;
+						}
+						else{
+							//ビットマップ
+							i3-=2;
+
+							//変更情報
+							Rad_NoticeChanging(i,RAD_UNDO_BGCOLOR,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].bgColor);
+
+							ProjectInfo.pWindowInfo[i2].bgColor=0x1000+i3;
+						}
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_WINDOWMENU:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_WINDOWMENU,SELECT_WINDOW,(long)ProjectInfo.pWindowInfo[i2].MenuID);
+
+						i3=SendDlgItemMessage(hwnd,IDC_WINDOWMENU,CB_GETCURSEL,0,0);
+						if(ProjectInfo.pWindowInfo[i2].MenuID)
+							HeapDefaultFree(ProjectInfo.pWindowInfo[i2].MenuID);
+						if(i3==0) ProjectInfo.pWindowInfo[i2].MenuID=0;
+						else{
+							ProjectInfo.pWindowInfo[i2].MenuID=(char *)HeapAlloc(hHeap,0,SendDlgItemMessage(hwnd,IDC_WINDOWMENU,CB_GETLBTEXTLEN,i3,0)+1);
+							SendDlgItemMessage(hwnd,IDC_WINDOWMENU,CB_GETLBTEXT,i3,(long)ProjectInfo.pWindowInfo[i2].MenuID);
+						}
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ICONRES:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_ICONRES,SELECT_WINDOW,(long)ProjectInfo.pWindowInfo[i2].IconResName);
+
+						i3=SendDlgItemMessage(hwnd,IDC_ICONRES,CB_GETCURSEL,0,0);
+						if(ProjectInfo.pWindowInfo[i2].IconResName)
+							HeapDefaultFree(ProjectInfo.pWindowInfo[i2].IconResName);
+						if(i3==0) ProjectInfo.pWindowInfo[i2].IconResName=0;
+						else{
+							ProjectInfo.pWindowInfo[i2].IconResName=(char *)HeapAlloc(hHeap,0,SendDlgItemMessage(hwnd,IDC_ICONRES,CB_GETLBTEXTLEN,i3,0)+1);
+							SendDlgItemMessage(hwnd,IDC_ICONRES,CB_GETLBTEXT,i3,(long)ProjectInfo.pWindowInfo[i2].IconResName);
+						}
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_WINDOWSTYLE:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_WINDOWSTYLE,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].style&=0x3FFFFFFF;
+						if(i3==1) ProjectInfo.pWindowInfo[i2].style|=WS_POPUP;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].style|=WS_CHILD;
+						RadProperty_Window_Window_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].style);
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BORDERSTYLE:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BORDERSTYLE,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].style&=~(WS_BORDER|WS_THICKFRAME);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].style|=WS_BORDER;
+						else if(i3==2){
+							ProjectInfo.pWindowInfo[i2].style|=WS_BORDER;
+							ProjectInfo.pWindowInfo[i2].style|=WS_THICKFRAME;
+						}
+						RadProperty_Window_Border_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].style);
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_STYLE_CAPTION:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_CAPTION,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_CAPTION;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_CAPTION;
+						RadProperty_Window_Caption_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].style);
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_SYSMENU:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_SYSMENU,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_SYSMENU;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_SYSMENU;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_MINIMIZEBOX:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_MINIMIZEBOX,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_MINIMIZEBOX;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_MINIMIZEBOX;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_MAXIMIZEBOX:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_MAXIMIZEBOX,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_MAXIMIZEBOX;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_MAXIMIZEBOX;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_MINIMIZE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_MINIMIZE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_MINIMIZE;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_MINIMIZE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_MAXIMIZE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_MAXIMIZE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_MAXIMIZE;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_MAXIMIZE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+				case IDC_STYLE_HSCROLLBAR:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_HSCROLLBAR,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_HSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_HSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+				case IDC_STYLE_VSCROLLBAR:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLLBAR,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_VSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_VSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_DISABLED:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_DISABLED;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_DISABLED;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_CLIPSIBLINGS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_CLIPSIBLINGS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_CLIPSIBLINGS;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_CLIPSIBLINGS;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_CLIPCHILDREN:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_CLIPCHILDREN,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_CLIPCHILDREN;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_CLIPCHILDREN;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_VISIBLE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].style|=WS_VISIBLE;
+						else
+							ProjectInfo.pWindowInfo[i2].style&=~WS_VISIBLE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_WINDOW_EXSTYLE),hwnd,DlgRadProperty_Window_ExStyle)) return 1;
+					i=GetWndNum(GetParent(GetParent(hwnd)));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+
+				case IDC_DEFWINDOW:
+				case IDC_MODALDLG:
+				case IDC_MODELESSDLG:
+					if(HIWORD(wParam)==BN_CLICKED){
+						i=GetWndNum(GetParent(GetParent(hwnd)));
+						i2=GetWndInfoNum(MdiInfo[i].path);
+
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_TYPE,SELECT_WINDOW,ProjectInfo.pWindowInfo[i2].type);
+
+						if(SendDlgItemMessage(hwnd,IDC_DEFWINDOW,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].type=WNDTYPE_DEFAULT;
+						else if(SendDlgItemMessage(hwnd,IDC_MODALDLG,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].type=WNDTYPE_MODALDLG;
+						else if(SendDlgItemMessage(hwnd,IDC_MODELESSDLG,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].type=WNDTYPE_MODELESSDLG;
+						return 1;
+					}
+					break;
+			}
+			break;
+	}
+	return 0;
+}
+
+BOOL CALLBACK DlgRadProperty_Item_RenameCaption(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	char *temporary;
+	POINTANDSIZE PointAndSize;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			i=GetWndNum(GetWindow(hClient,GW_CHILD));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+			if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+				SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].caption);
+			else
+				SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					i=GetWndNum(GetWindow(hClient,GW_CHILD));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+
+					i3=GetWindowTextLength(GetDlgItem(hwnd,IDC_CAPTION))+1;
+					temporary=(char *)HeapAlloc(hHeap,0,i3);
+					GetDlgItemText(hwnd,IDC_CAPTION,temporary,i3);
+					if(MdiInfo[i].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
+						if(lstrcmp(temporary,ProjectInfo.pWindowInfo[i2].caption)==0){
+							HeapDefaultFree(temporary);
+							SendMessage(hwnd,WM_COMMAND,IDCANCEL,0);
+							return 1;
+						}
+
+						//変更情報を更新
+						Rad_NoticeChanging(i,RAD_UNDO_CAPTION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)ProjectInfo.pWindowInfo[i2].caption);
+
+						HeapDefaultFree(ProjectInfo.pWindowInfo[i2].caption);
+						ProjectInfo.pWindowInfo[i2].caption=temporary;
+					}
+					else{
+						if(lstrcmp(temporary,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption)==0){
+							HeapDefaultFree(temporary);
+							SendMessage(hwnd,WM_COMMAND,IDCANCEL,0);
+							return 1;
+						}
+
+						//変更情報を更新
+						Rad_NoticeChanging(i,RAD_UNDO_CAPTION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+						HeapDefaultFree(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption=temporary;
+
+						if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_STATIC){
+							//スタティック テキスト
+							//テキストが表示できるようにサイズを拡大する
+
+							PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].pos;
+							PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size;
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+
+							HFONT hFont,hOldFont;
+							hFont=CreateFontIndirect(&ProjectInfo.pWindowInfo[i2].LogFont);
+							hOldFont=(HFONT)SelectObject(MdiInfo[i].MdiRadInfo->hMemDC,hFont);
+							GetTextExtentPoint32(MdiInfo[i].MdiRadInfo->hMemDC,temporary,lstrlen(temporary),&PointAndSize.size);
+							SelectObject(MdiInfo[i].MdiRadInfo->hMemDC,hOldFont);
+							DeleteObject(hFont);
+
+							//テキストの終端に余裕を持たせる
+							PointAndSize.size.cx+=5;
+
+							if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx<PointAndSize.size.cx)
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx=PointAndSize.size.cx;
+						}
+						if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_CHECKBOX){
+							//チェック ボックス
+							//テキストが表示できるようにサイズを拡大する
+
+							PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].pos;
+							PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size;
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+
+							HFONT hFont,hOldFont;
+							hFont=CreateFontIndirect(&ProjectInfo.pWindowInfo[i2].LogFont);
+							hOldFont=(HFONT)SelectObject(MdiInfo[i].MdiRadInfo->hMemDC,hFont);
+							GetTextExtentPoint32(MdiInfo[i].MdiRadInfo->hMemDC,temporary,lstrlen(temporary),&PointAndSize.size);
+							SelectObject(MdiInfo[i].MdiRadInfo->hMemDC,hOldFont);
+							DeleteObject(hFont);
+
+							//テキストの終端に余裕を持たせる
+							PointAndSize.size.cx+=21;
+
+							if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx<PointAndSize.size.cx)
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx=PointAndSize.size.cx;
+						}
+						if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].Control==CT_RADIOBUTTON){
+							//ラジオ ボックス
+							//テキストが表示できるようにサイズを拡大する
+
+							PointAndSize.pos=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].pos;
+							PointAndSize.size=ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size;
+							Rad_NoticeChanging(i,RAD_UNDO_POSITION,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&PointAndSize);
+
+							HFONT hFont,hOldFont;
+							hFont=CreateFontIndirect(&ProjectInfo.pWindowInfo[i2].LogFont);
+							hOldFont=(HFONT)SelectObject(MdiInfo[i].MdiRadInfo->hMemDC,hFont);
+							GetTextExtentPoint32(MdiInfo[i].MdiRadInfo->hMemDC,temporary,lstrlen(temporary),&PointAndSize.size);
+							SelectObject(MdiInfo[i].MdiRadInfo->hMemDC,hOldFont);
+							DeleteObject(hFont);
+
+							//テキストの終端に余裕を持たせる
+							PointAndSize.size.cx+=20;
+
+							if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx<PointAndSize.size.cx)
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].size.cx=PointAndSize.size.cx;
+						}
+					}
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgRadProperty_Item_RenameID(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HWND hClient,hOwner;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	char *temporary;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			i=GetWndNum(GetWindow(hClient,GW_CHILD));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					i=GetWndNum(GetWindow(hClient,GW_CHILD));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+
+					i3=GetWindowTextLength(GetDlgItem(hwnd,IDC_IDNAME))+1;
+					if(i3==1){
+						//MsgBox "ID名を入力して下さい。"
+						MessageBox(hOwner,STRING_ITEM_RENAME_MUST_ID,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+						break;
+					}
+					temporary=(char *)HeapAlloc(hHeap,0,i3);
+					GetDlgItemText(hwnd,IDC_IDNAME,temporary,i3);
+					if(lstrcmp(temporary,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName)==0){
+						HeapDefaultFree(temporary);
+						SendMessage(hwnd,WM_COMMAND,IDCANCEL,0);
+						return 1;
+					}
+
+					//MsgBox "アイテムのID名を変更すると、ソースコード内のID名は手動で変換する必要があります。変更しますか？"
+					if(IDCANCEL==MessageBox(hwnd,STRING_ITEM_RENAME_CHECK,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) return 1;
+
+					//変更情報を更新
+					Rad_NoticeChanging(i,RAD_UNDO_NAME,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+
+					HeapDefaultFree(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+					ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName=temporary;
+
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+BOOL DefaultItemStyles(HWND hwnd,int WndNum,int WndInfoNum,WPARAM wParam){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+
+	switch(LOWORD(wParam)){
+		case IDC_RENAMEID:
+			if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_RENAMEID),hwnd,DlgRadProperty_Item_RenameID)) return 1;
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].IdName);
+			return 1;
+		case IDC_RENAMECAPTION:
+			if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_RENAMECAPTION),hwnd,DlgRadProperty_Item_RenameCaption)) return 1;
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].caption);
+			return 1;
+		case IDC_STYLE_DISABLED:
+			if(HIWORD(wParam)==BN_CLICKED){
+				//変更情報
+				Rad_NoticeChanging(WndNum,RAD_UNDO_STYLE,MdiInfo[WndNum].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style);
+
+				if(SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_GETCHECK,0,0))
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style|=WS_DISABLED;
+				else
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style&=~WS_DISABLED;
+				DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+				return 1;
+			}
+			break;
+		case IDC_STYLE_VISIBLE:
+			if(HIWORD(wParam)==BN_CLICKED){
+				//変更情報
+				Rad_NoticeChanging(WndNum,RAD_UNDO_STYLE,MdiInfo[WndNum].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style);
+
+				if(SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_GETCHECK,0,0))
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style|=WS_VISIBLE;
+				else
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style&=~WS_VISIBLE;
+				return 1;
+			}
+			break;
+		case IDC_STYLE_GROUP:
+			if(HIWORD(wParam)==BN_CLICKED){
+				//変更情報
+				Rad_NoticeChanging(WndNum,RAD_UNDO_STYLE,MdiInfo[WndNum].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style);
+
+				if(SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_GETCHECK,0,0))
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style|=WS_GROUP;
+				else
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style&=~WS_GROUP;
+				return 1;
+			}
+			break;
+		case IDC_STYLE_TABSTOP:
+			if(HIWORD(wParam)==BN_CLICKED){
+				//変更情報
+				Rad_NoticeChanging(WndNum,RAD_UNDO_STYLE,MdiInfo[WndNum].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style);
+
+				if(SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_GETCHECK,0,0))
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style|=WS_TABSTOP;
+				else
+					ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].style&=~WS_TABSTOP;
+				return 1;
+			}
+			break;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgRadProperty_Item_ExStyle(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			i=GetWndNum(GetWindow(hClient,GW_CHILD));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ExStyle&WS_EX_ACCEPTFILES) SendDlgItemMessage(hwnd,IDC_EXSTYLE_ACCEPTFILES,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ExStyle&WS_EX_TRANSPARENT) SendDlgItemMessage(hwnd,IDC_EXSTYLE_TRANSPARENT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ExStyle&WS_EX_DLGMODALFRAME) SendDlgItemMessage(hwnd,IDC_EXSTYLE_DLGMODALFRAME,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ExStyle&WS_EX_CLIENTEDGE) SendDlgItemMessage(hwnd,IDC_EXSTYLE_CLIENTEDGE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ExStyle&WS_EX_STATICEDGE) SendDlgItemMessage(hwnd,IDC_EXSTYLE_STATICEDGE,BM_SETCHECK,BST_CHECKED,0);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					i=GetWndNum(GetWindow(hClient,GW_CHILD));
+					i2=GetWndInfoNum(MdiInfo[i].path);
+
+					DWORD style;
+					style=0;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_ACCEPTFILES,BM_GETCHECK,0,0))
+						style|=WS_EX_ACCEPTFILES;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_TRANSPARENT,BM_GETCHECK,0,0))
+						style|=WS_EX_TRANSPARENT;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_DLGMODALFRAME,BM_GETCHECK,0,0))
+						style|=WS_EX_DLGMODALFRAME;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_CLIENTEDGE,BM_GETCHECK,0,0))
+						style|=WS_EX_CLIENTEDGE;
+					if(SendDlgItemMessage(hwnd,IDC_EXSTYLE_STATICEDGE,BM_GETCHECK,0,0))
+						style|=WS_EX_STATICEDGE;
+
+					if(style==ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ExStyle){
+						SendMessage(hwnd,WM_COMMAND,IDCANCEL,0);
+						return 1;
+					}
+
+					//変更情報
+					Rad_NoticeChanging(i,RAD_UNDO_EXSTYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ExStyle);
+
+					ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ExStyle=style;
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+/////////////////////
+// BUTTON プロパティ
+
+BOOL CALLBACK RadProperty_ButtonProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+
+			////////////
+			//スタイル
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_OWNERDRAW)==BS_OWNERDRAW) SendDlgItemMessage(hwnd,IDC_BS_OWNERDRAW,BM_SETCHECK,BST_CHECKED,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_DEFPUSHBUTTON) SendDlgItemMessage(hwnd,IDC_BS_DEFPUSHBUTTON,BM_SETCHECK,BST_CHECKED,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_ICON) SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_BITMAP) SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_MULTILINE) SendDlgItemMessage(hwnd,IDC_BS_MULTILINE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_NOTIFY) SendDlgItemMessage(hwnd,IDC_BS_NOTIFY,BM_SETCHECK,BST_CHECKED,0);
+
+
+			//////////////////
+			// 水平方向の配置
+			//////////////////
+
+			//"デフォルト"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_DEFAULT);
+			//"左端"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_LEFT);
+			//"右端"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_RIGHT);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_CENTER);
+
+			//ビットを考慮してBS_CENTERを最初に比較する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_CENTER)==BS_CENTER) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,3,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_LEFT) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_RIGHT) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,0,0);
+
+
+			//////////////////
+			// 垂直方向の配置
+			//////////////////
+
+			//"デフォルト"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_DEFAULT);
+			//"上端"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_TOP);
+			//"下端"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_BOTTOM);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_CENTER);
+
+			//ビットを考慮してBS_VCENTERを最初に比較する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_VCENTER)==BS_VCENTER) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,3,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_TOP) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_BOTTOM) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,0,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_BS_DEFPUSHBUTTON:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_DEFPUSHBUTTON,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_OWNERDRAW;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_DEFPUSHBUTTON;
+							SendDlgItemMessage(hwnd,IDC_BS_OWNERDRAW,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_DEFPUSHBUTTON;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_OWNERDRAW:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_OWNERDRAW,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_DEFPUSHBUTTON;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_OWNERDRAW;
+							SendDlgItemMessage(hwnd,IDC_BS_DEFPUSHBUTTON,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_OWNERDRAW;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_ICON:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_ICON;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_BITMAP;
+							SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_ICON;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_BITMAP:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_BITMAP;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_ICON;
+							SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_BITMAP;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_MULTILINE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_MULTILINE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_MULTILINE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_MULTILINE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_NOTIFY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_NOTIFY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_NOTIFY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_NOTIFY;
+						return 1;
+					}
+					break;
+
+				case IDC_BS_HPOS:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(BS_LEFT|BS_RIGHT|BS_CENTER);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_LEFT;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_RIGHT;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_CENTER;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_VPOS:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(BS_TOP|BS_BOTTOM|BS_VCENTER);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_TOP;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_BOTTOM;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_VCENTER;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+////////////////////////
+// CHECKBOX プロパティ
+BOOL CALLBACK RadProperty_CheckBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+
+			////////////
+			//スタイル
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_AUTOCHECKBOX)==BS_AUTOCHECKBOX) SendDlgItemMessage(hwnd,IDC_BS_AUTO,BM_SETCHECK,BST_CHECKED,0);
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_AUTO3STATE)==BS_AUTO3STATE){
+				SendDlgItemMessage(hwnd,IDC_BS_AUTO,BM_SETCHECK,BST_CHECKED,0);
+				SendDlgItemMessage(hwnd,IDC_BS_3STATE,BM_SETCHECK,BST_CHECKED,0);
+			}
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_3STATE)==BS_3STATE) SendDlgItemMessage(hwnd,IDC_BS_3STATE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_PUSHLIKE) SendDlgItemMessage(hwnd,IDC_BS_PUSHLIKE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_LEFTTEXT) SendDlgItemMessage(hwnd,IDC_BS_LEFTTEXT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_ICON) SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_BITMAP) SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_MULTILINE) SendDlgItemMessage(hwnd,IDC_BS_MULTILINE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_NOTIFY) SendDlgItemMessage(hwnd,IDC_BS_NOTIFY,BM_SETCHECK,BST_CHECKED,0);
+
+
+			//////////////////
+			// 水平方向の配置
+			//////////////////
+
+			//"デフォルト"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_DEFAULT);
+			//"左端"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_LEFT);
+			//"右端"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_RIGHT);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_CENTER);
+
+			//ビットを考慮してBS_CENTERを最初に比較する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_CENTER)==BS_CENTER) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,3,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_LEFT) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_RIGHT) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,0,0);
+
+
+			//////////////////
+			// 垂直方向の配置
+			//////////////////
+
+			//"デフォルト"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_DEFAULT);
+			//"上端"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_TOP);
+			//"下端"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_BOTTOM);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_CENTER);
+
+			//ビットを考慮してBS_VCENTERを最初に比較する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_VCENTER)==BS_VCENTER) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,3,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_TOP) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_BOTTOM) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,0,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_BS_AUTO:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_AUTO,BM_GETCHECK,0,0)){
+							if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x04){
+								//3state
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_AUTO3STATE;
+							}
+							else{
+								//2state
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_AUTOCHECKBOX;
+							}
+						}
+						else{
+							if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x04){
+								//3state
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_3STATE;
+							}
+							else{
+								//2state
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_CHECKBOX;
+							}
+						}
+						return 1;
+					}
+					break;
+				case IDC_BS_3STATE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_3STATE,BM_GETCHECK,0,0)){
+							if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0F)==BS_CHECKBOX){
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_3STATE;
+							}
+							else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0F)==BS_AUTOCHECKBOX){
+								//自動チェック
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_AUTO3STATE;
+							}
+						}
+						else{
+							if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0F)==BS_3STATE){
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_CHECKBOX;
+							}
+							else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0F)==BS_AUTO3STATE){
+								//自動チェック
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+								ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_AUTOCHECKBOX;
+							}
+						}
+						return 1;
+					}
+					break;
+				case IDC_BS_PUSHLIKE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_PUSHLIKE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_PUSHLIKE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_PUSHLIKE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_LEFTTEXT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_LEFTTEXT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_LEFTTEXT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_LEFTTEXT;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_ICON:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_ICON;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_BITMAP;
+							SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_ICON;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_BITMAP:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_BITMAP;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_ICON;
+							SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_BITMAP;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_MULTILINE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_MULTILINE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_MULTILINE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_MULTILINE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_NOTIFY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_NOTIFY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_NOTIFY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_NOTIFY;
+						return 1;
+					}
+					break;
+
+				case IDC_BS_HPOS:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(BS_LEFT|BS_RIGHT|BS_CENTER);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_LEFT;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_RIGHT;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_CENTER;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_VPOS:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(BS_TOP|BS_BOTTOM|BS_VCENTER);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_TOP;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_BOTTOM;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_VCENTER;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+	}
+	return 0;
+}
+
+
+///////////////////////
+// COMBOBOX プロパティ
+
+void RadProperty_ComboBox_StylingOrder(HWND hwnd,DWORD *style){
+	if(!(*style&(CBS_OWNERDRAWFIXED|CBS_OWNERDRAWVARIABLE))){
+		*style&=~(CBS_HASSTRINGS);
+		SendDlgItemMessage(hwnd,IDC_CBS_HASSTRINGS,BM_SETCHECK,BST_UNCHECKED,0);
+		EnableWindow(GetDlgItem(hwnd,IDC_CBS_HASSTRINGS),0);
+	}
+	else EnableWindow(GetDlgItem(hwnd,IDC_CBS_HASSTRINGS),1);
+}
+BOOL CALLBACK RadProperty_ComboBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+
+
+			/////////////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			////////
+			// 選択
+			////////
+
+			//"デフォルト"
+			SendDlgItemMessage(hwnd,IDC_CBS_TYPE,CB_ADDSTRING,0,(long)STRING_DEFAULT);
+			//"ドロップ ダウン"
+			SendDlgItemMessage(hwnd,IDC_CBS_TYPE,CB_ADDSTRING,0,(long)STRING_COMBOBOXPROP_STYLE_DROPDOWN);
+			//"ドロップ ダウン リスト"
+			SendDlgItemMessage(hwnd,IDC_CBS_TYPE,CB_ADDSTRING,0,(long)STRING_COMBOBOXPROP_STYLE_DROPDOWNLIST);
+
+			//ビットを考慮してCBS_DROPDOWNLISTを最初に比較する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_DROPDOWNLIST)==CBS_DROPDOWNLIST) SendDlgItemMessage(hwnd,IDC_CBS_TYPE,CB_SETCURSEL,2,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_SIMPLE) SendDlgItemMessage(hwnd,IDC_CBS_TYPE,CB_SETCURSEL,0,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_DROPDOWN) SendDlgItemMessage(hwnd,IDC_CBS_TYPE,CB_SETCURSEL,1,0);
+
+
+			////////////////
+			// オーナー描画
+			////////////////
+
+			//"なし"
+			SendDlgItemMessage(hwnd,IDC_CBS_OWNERDRAW,CB_ADDSTRING,0,(long)STRING_NONE);
+			//"固定"
+			SendDlgItemMessage(hwnd,IDC_CBS_OWNERDRAW,CB_ADDSTRING,0,(long)STRING_OWNERDRAW_FIXED);
+			//"可変"
+			SendDlgItemMessage(hwnd,IDC_CBS_OWNERDRAW,CB_ADDSTRING,0,(long)STRING_OWNERDRAW_VARIABLE);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_OWNERDRAWFIXED) SendDlgItemMessage(hwnd,IDC_CBS_OWNERDRAW,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_OWNERDRAWVARIABLE) SendDlgItemMessage(hwnd,IDC_CBS_OWNERDRAW,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_CBS_OWNERDRAW,CB_SETCURSEL,0,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_HASSTRINGS) SendDlgItemMessage(hwnd,IDC_CBS_HASSTRINGS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_SORT) SendDlgItemMessage(hwnd,IDC_CBS_SORT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_NOINTEGRALHEIGHT) SendDlgItemMessage(hwnd,IDC_CBS_NOINTEGRALHEIGHT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_OEMCONVERT) SendDlgItemMessage(hwnd,IDC_CBS_OEMCONVERT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VSCROLL) SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_AUTOHSCROLL) SendDlgItemMessage(hwnd,IDC_CBS_AUTOHSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_DISABLENOSCROLL) SendDlgItemMessage(hwnd,IDC_CBS_DISABLENOSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_UPPERCASE) SendDlgItemMessage(hwnd,IDC_CBS_UPPERCASE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&CBS_LOWERCASE) SendDlgItemMessage(hwnd,IDC_CBS_LOWERCASE,BM_SETCHECK,BST_CHECKED,0);
+
+			RadProperty_ComboBox_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_CBS_TYPE:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_CBS_TYPE,CB_GETCURSEL,0,0);
+						//CBS_DROPDOWNLIST=CBS_SIMPLE | CBS_DROPDOWN
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(CBS_DROPDOWNLIST);
+						if(i3==0) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_SIMPLE;
+						else if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_DROPDOWN;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_DROPDOWNLIST;
+
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_CBS_OWNERDRAW:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_CBS_OWNERDRAW,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(CBS_OWNERDRAWFIXED|CBS_OWNERDRAWVARIABLE);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_OWNERDRAWFIXED;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_OWNERDRAWVARIABLE;
+
+						RadProperty_ComboBox_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+						return 1;
+					}
+					break;
+
+				case IDC_CBS_HASSTRINGS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_CBS_HASSTRINGS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_HASSTRINGS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~CBS_HASSTRINGS;
+						return 1;
+					}
+					break;
+				case IDC_CBS_SORT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_CBS_SORT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_SORT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~CBS_SORT;
+						return 1;
+					}
+					break;
+				case IDC_CBS_NOINTEGRALHEIGHT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_CBS_NOINTEGRALHEIGHT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_NOINTEGRALHEIGHT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~CBS_NOINTEGRALHEIGHT;
+						return 1;
+					}
+					break;
+				case IDC_CBS_OEMCONVERT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_CBS_OEMCONVERT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_OEMCONVERT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~CBS_OEMCONVERT;
+						return 1;
+					}
+					break;
+				case IDC_STYLE_VSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=WS_VSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~WS_VSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_CBS_AUTOHSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_CBS_AUTOHSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_AUTOHSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~CBS_AUTOHSCROLL;
+						return 1;
+					}
+					break;
+				case IDC_CBS_DISABLENOSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_CBS_DISABLENOSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_DISABLENOSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~CBS_DISABLENOSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_CBS_UPPERCASE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_CBS_UPPERCASE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_UPPERCASE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~CBS_UPPERCASE;
+						return 1;
+					}
+					break;
+				case IDC_CBS_LOWERCASE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_CBS_LOWERCASE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=CBS_LOWERCASE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~CBS_LOWERCASE;
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+/////////////////////
+// EDIT プロパティ
+
+void RadProperty_Edit_StylingOrder(HWND hwnd,DWORD *style){
+	if(*style&ES_MULTILINE){
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_HSCROLL),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_VSCROLL),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_ES_AUTOVSCROLL),1);
+
+		*style&=~(ES_PASSWORD);
+		SendDlgItemMessage(hwnd,IDC_ES_PASSWORD,BM_SETCHECK,BST_UNCHECKED,0);
+		EnableWindow(GetDlgItem(hwnd,IDC_ES_PASSWORD),0);
+	}
+	else{
+		EnableWindow(GetDlgItem(hwnd,IDC_ES_PASSWORD),1);
+
+		*style&=~(WS_HSCROLL|WS_VSCROLL|ES_AUTOVSCROLL);
+		SendDlgItemMessage(hwnd,IDC_STYLE_HSCROLL,BM_SETCHECK,BST_UNCHECKED,0);
+		SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLL,BM_SETCHECK,BST_UNCHECKED,0);
+		SendDlgItemMessage(hwnd,IDC_ES_AUTOVSCROLL,BM_SETCHECK,BST_UNCHECKED,0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_HSCROLL),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_STYLE_VSCROLL),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_ES_AUTOVSCROLL),0);
+	}
+}
+BOOL CALLBACK RadProperty_EditProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+
+			////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_MULTILINE) SendDlgItemMessage(hwnd,IDC_ES_MULTILINE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_NUMBER) SendDlgItemMessage(hwnd,IDC_ES_NUMBER,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_HSCROLL) SendDlgItemMessage(hwnd,IDC_STYLE_HSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_AUTOHSCROLL) SendDlgItemMessage(hwnd,IDC_ES_AUTOHSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VSCROLL) SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_AUTOVSCROLL) SendDlgItemMessage(hwnd,IDC_ES_AUTOVSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_PASSWORD) SendDlgItemMessage(hwnd,IDC_ES_PASSWORD,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_NOHIDESEL) SendDlgItemMessage(hwnd,IDC_ES_NOHIDESEL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_OEMCONVERT) SendDlgItemMessage(hwnd,IDC_ES_OEMCONVERT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_WANTRETURN) SendDlgItemMessage(hwnd,IDC_ES_WANTRETURN,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_UPPERCASE) SendDlgItemMessage(hwnd,IDC_ES_UPPERCASE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_LOWERCASE) SendDlgItemMessage(hwnd,IDC_ES_LOWERCASE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_READONLY) SendDlgItemMessage(hwnd,IDC_ES_READONLY,BM_SETCHECK,BST_CHECKED,0);
+
+
+			//////////////////
+			// テキストの配置
+			//////////////////
+
+			//"左端"
+			SendDlgItemMessage(hwnd,IDC_ES_TEXTPOS,CB_ADDSTRING,0,(long)STRING_LEFT);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_ES_TEXTPOS,CB_ADDSTRING,0,(long)STRING_CENTER);
+			//"右端"
+			SendDlgItemMessage(hwnd,IDC_ES_TEXTPOS,CB_ADDSTRING,0,(long)STRING_RIGHT);
+
+			//ビットを考慮してES_LEFTを最後に検討する
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_CENTER) SendDlgItemMessage(hwnd,IDC_ES_TEXTPOS,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&ES_RIGHT) SendDlgItemMessage(hwnd,IDC_ES_TEXTPOS,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_ES_TEXTPOS,CB_SETCURSEL,0,0);
+
+			RadProperty_Edit_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_ES_MULTILINE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_MULTILINE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_MULTILINE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_MULTILINE;
+						RadProperty_Edit_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_NUMBER:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_NUMBER,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_NUMBER;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_NUMBER;
+						return 1;
+					}
+					break;
+				case IDC_STYLE_HSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_HSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=WS_HSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~WS_HSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_AUTOHSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_AUTOHSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_AUTOHSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_AUTOHSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_VSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=WS_VSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~WS_VSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_AUTOVSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_AUTOVSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_AUTOVSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_AUTOVSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_PASSWORD:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_PASSWORD,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_PASSWORD;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_PASSWORD;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_NOHIDESEL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_NOHIDESEL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_NOHIDESEL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_NOHIDESEL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_OEMCONVERT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_OEMCONVERT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_OEMCONVERT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_OEMCONVERT;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_WANTRETURN:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_WANTRETURN,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_WANTRETURN;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_WANTRETURN;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_UPPERCASE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_UPPERCASE,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_LOWERCASE;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_UPPERCASE;
+							SendDlgItemMessage(hwnd,IDC_ES_LOWERCASE,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_UPPERCASE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_LOWERCASE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_LOWERCASE,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_UPPERCASE;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_LOWERCASE;
+							SendDlgItemMessage(hwnd,IDC_ES_UPPERCASE,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_LOWERCASE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_ES_READONLY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_ES_READONLY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_READONLY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~ES_READONLY;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_ES_TEXTPOS:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_ES_TEXTPOS,CB_GETCURSEL,0,0);
+						//ES_LEFT=0
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(ES_CENTER|ES_RIGHT);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_CENTER;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=ES_RIGHT;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+////////////////////////
+// GROUPBOX プロパティ
+
+BOOL CALLBACK RadProperty_GroupBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+
+			/////////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+
+			//////////////////
+			// 水平方向の配置
+			//////////////////
+
+			//"デフォルト"
+			SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_ADDSTRING,0,(long)STRING_DEFAULT);
+			//"左端"
+			SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_ADDSTRING,0,(long)STRING_LEFT);
+			//"右端"
+			SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_ADDSTRING,0,(long)STRING_RIGHT);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_ADDSTRING,0,(long)STRING_CENTER);
+
+			//ビットを考慮してBS_CENTERを最初に検討する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_CENTER)==BS_CENTER) SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_SETCURSEL,3,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_LEFT) SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_RIGHT) SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_SETCURSEL,0,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_ICON) SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_BITMAP) SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_NOTIFY) SendDlgItemMessage(hwnd,IDC_BS_NOTIFY,BM_SETCHECK,BST_CHECKED,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_BS_POSITION:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BS_POSITION,CB_GETCURSEL,0,0);
+						//BS_CENTER=BS_LEFT | BS_RIGHT
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(BS_CENTER);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_LEFT;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_RIGHT;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_CENTER;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_BS_ICON:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_ICON;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_ICON;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_BITMAP:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_BITMAP;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_BITMAP;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_NOTIFY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_NOTIFY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_NOTIFY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_NOTIFY;
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+////////////////////////
+// IMAGEBOX プロパティ
+
+void RadProperty_ImageBox_StylingOrder(HWND hwnd,DWORD *style){
+	if((*style&0x000F)==SS_ICON||
+		(*style&0x000F)==SS_BITMAP){
+		EnableWindow(GetDlgItem(hwnd,IDC_PATH),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_CHANGEPATH),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_SS_CENTERIMAGE),1);
+		EnableWindow(GetDlgItem(hwnd,IDC_SS_RIGHTJUST),1);
+	}
+	else{
+		EnableWindow(GetDlgItem(hwnd,IDC_PATH),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_CHANGEPATH),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_SS_CENTERIMAGE),0);
+		EnableWindow(GetDlgItem(hwnd,IDC_SS_RIGHTJUST),0);
+	}
+}
+BOOL CALLBACK RadProperty_ImageBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	char temporary[MAX_PATH];
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+
+
+			/////////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			//////////
+			// タイプ
+			//////////
+
+			//"フレーム（黒）"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_FRAME_BLACK);
+			//"フレーム（灰色）"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_FRAME_GRAY);
+			//"フレーム（白）"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_FRAME_WHITE);
+			//"フレーム（縁取り）"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_FRAME_ETCHED);
+			//"四角形（黒）"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_RECT_BLACK);
+			//"四角形（灰色）"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_RECT_GRAY);
+			//"四角形（白）"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_RECT_WHITE);
+			//"アイコン"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_ICON);
+			//"ビットマップ"
+			SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_ADDSTRING,0,(long)STRING_IMAGEBOXPROP_STYLE_BITMAP);
+
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_BLACKFRAME) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,0,0);
+			else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_GRAYFRAME) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,1,0);
+			else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_WHITEFRAME) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,2,0);
+			else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000001F)==SS_ETCHEDFRAME) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,3,0);
+			else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_BLACKRECT) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,4,0);
+			else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_GRAYRECT) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,5,0);
+			else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_WHITERECT) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,6,0);
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_ICON||
+				(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_BITMAP){
+				if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_ICON) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,7,0);
+				else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_BITMAP) SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_SETCURSEL,8,0);
+
+				//リソース／ファイル スイッチチェックを表示
+				ShowWindow(GetDlgItem(hwnd,IDC_FILE),SW_SHOW);
+				ShowWindow(GetDlgItem(hwnd,IDC_RESOURCE),SW_SHOW);
+				
+				//イメージ状態テキストを表示
+				ShowWindow(GetDlgItem(hwnd,IDC_IMAGE_SITUATION),SW_SHOW);
+
+				if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type==IMGTYPE_FILE){
+					//ファイル指定を表示
+					ShowWindow(GetDlgItem(hwnd,IDC_PATH),SW_SHOW);
+					ShowWindow(GetDlgItem(hwnd,IDC_CHANGEPATH),SW_SHOW);
+					SetDlgItemText(hwnd,IDC_PATH,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path);
+
+					//イメージ状態テキスト
+					//"ファイル指定:"
+					SetDlgItemText(hwnd,IDC_IMAGE_SITUATION,STRING_IMAGEBOXPROP_STYLE_FROMFILE);
+
+					SendDlgItemMessage(hwnd,IDC_FILE,BM_SETCHECK,BST_CHECKED,0);
+				}
+				else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type==IMGTYPE_RES){
+					//リソース指定を表示
+					ShowWindow(GetDlgItem(hwnd,IDC_RESCOMBO),SW_SHOW);
+
+					//イメージ状態テキスト
+					//"リソース指定:"
+					SetDlgItemText(hwnd,IDC_IMAGE_SITUATION,STRING_IMAGEBOXPROP_STYLE_FROMRESOURCE);
+
+					SendDlgItemMessage(hwnd,IDC_RESOURCE,BM_SETCHECK,BST_CHECKED,0);
+
+					SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_RESETCONTENT,0,0);
+
+					if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_ICON){
+						//アイコンリソースをコンボボックスに挿入
+						for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++)
+							SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_ADDSTRING,0,(long)ProjectInfo.res.pIconResInfo[i3].IdName);
+					}
+					else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_BITMAP){
+						//ビットマップリソースをコンボボックスに挿入
+						for(i3=0;i3<ProjectInfo.res.NumberOfBitmapRes;i3++)
+							SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_ADDSTRING,0,(long)ProjectInfo.res.pBitmapResInfo[i3].IdName);
+					}
+
+					//リストから選択
+					i3=SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_FINDSTRING,0,(long)ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path);
+					SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_SETCURSEL,i3,0);
+				}
+			}
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SS_NOTIFY) SendDlgItemMessage(hwnd,IDC_SS_NOTIFY,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SS_CENTERIMAGE) SendDlgItemMessage(hwnd,IDC_SS_CENTERIMAGE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SS_RIGHTJUST) SendDlgItemMessage(hwnd,IDC_SS_RIGHTJUST,BM_SETCHECK,BST_CHECKED,0);
+
+			RadProperty_ImageBox_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_IMAGE_TYPE:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_IMAGE_TYPE,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(0x0000001F);
+						if(i3==0) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_BLACKFRAME;
+						else if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_GRAYFRAME;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_WHITEFRAME;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_ETCHEDFRAME;
+						else if(i3==4) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_BLACKRECT;
+						else if(i3==5) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_GRAYRECT;
+						else if(i3==6) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_WHITERECT;
+						else if(i3==7) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_ICON;
+						else if(i3==8) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_BITMAP;
+
+						if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_ICON||
+							(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_BITMAP){
+							//リソース／ファイル スイッチチェックを表示
+							ShowWindow(GetDlgItem(hwnd,IDC_FILE),SW_SHOW);
+							ShowWindow(GetDlgItem(hwnd,IDC_RESOURCE),SW_SHOW);
+
+							//イメージ状態テキストを表示
+							ShowWindow(GetDlgItem(hwnd,IDC_IMAGE_SITUATION),SW_SHOW);
+
+							if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type==IMGTYPE_FILE){
+								//ファイル指定を表示
+								ShowWindow(GetDlgItem(hwnd,IDC_PATH),SW_SHOW);
+								ShowWindow(GetDlgItem(hwnd,IDC_CHANGEPATH),SW_SHOW);
+								SetDlgItemText(hwnd,IDC_PATH,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path);
+
+								//イメージ状態テキスト
+								//"ファイル指定:"
+								SetDlgItemText(hwnd,IDC_IMAGE_SITUATION,STRING_IMAGEBOXPROP_STYLE_FROMFILE);
+
+								SendDlgItemMessage(hwnd,IDC_FILE,BM_SETCHECK,BST_CHECKED,0);
+							}
+							else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type==IMGTYPE_RES){
+								//リソース指定を表示
+								ShowWindow(GetDlgItem(hwnd,IDC_RESCOMBO),SW_SHOW);
+
+								//イメージ状態テキスト
+								//"リソース指定:"
+								SetDlgItemText(hwnd,IDC_IMAGE_SITUATION,STRING_IMAGEBOXPROP_STYLE_FROMRESOURCE);
+
+								SendDlgItemMessage(hwnd,IDC_RESOURCE,BM_SETCHECK,BST_CHECKED,0);
+
+								SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_RESETCONTENT,0,0);
+
+								if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_ICON){
+									//アイコンリソースをコンボボックスに挿入
+									for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++){
+										SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_ADDSTRING,0,(long)ProjectInfo.res.pIconResInfo[i3].IdName);
+
+										if(lstrcmp(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path,ProjectInfo.res.pIconResInfo[i3].IdName)==0)
+											SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_SETCURSEL,i3,0);
+									}
+								}
+								else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_BITMAP){
+									//ビットマップリソースをコンボボックスに挿入
+									for(i3=0;i3<ProjectInfo.res.NumberOfBitmapRes;i3++){
+										SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_ADDSTRING,0,(long)ProjectInfo.res.pBitmapResInfo[i3].IdName);
+
+										if(lstrcmp(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path,ProjectInfo.res.pBitmapResInfo[i3].IdName)==0)
+											SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_SETCURSEL,i3,0);
+									}
+								}
+							}
+						}
+						else{
+							//リソース／ファイル スイッチチェックを非表示
+							ShowWindow(GetDlgItem(hwnd,IDC_FILE),SW_HIDE);
+							ShowWindow(GetDlgItem(hwnd,IDC_RESOURCE),SW_HIDE);
+
+							//イメージ状態テキストを非表示
+							ShowWindow(GetDlgItem(hwnd,IDC_IMAGE_SITUATION),SW_HIDE);
+
+							//ファイル指定を非表示
+							ShowWindow(GetDlgItem(hwnd,IDC_PATH),SW_HIDE);
+							ShowWindow(GetDlgItem(hwnd,IDC_CHANGEPATH),SW_HIDE);
+
+							//リソース指定を非表示
+							ShowWindow(GetDlgItem(hwnd,IDC_RESCOMBO),SW_HIDE);
+						}
+
+						RadProperty_ImageBox_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_FILE:
+					if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type==IMGTYPE_FILE){
+						//変更無し
+						break;
+					}
+
+					//変更情報
+					Rad_NoticeChanging(i,RAD_UNDO_IMAGESTATE,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo);
+
+					ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type=IMGTYPE_FILE;
+
+					//ファイル指定を表示
+					ShowWindow(GetDlgItem(hwnd,IDC_PATH),SW_SHOW);
+					ShowWindow(GetDlgItem(hwnd,IDC_CHANGEPATH),SW_SHOW);
+					SetDlgItemText(hwnd,IDC_PATH,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path);
+
+					//リソース指定を非表示
+					ShowWindow(GetDlgItem(hwnd,IDC_RESCOMBO),SW_HIDE);
+
+					//イメージ状態テキスト
+					//"ファイル指定:"
+					SetDlgItemText(hwnd,IDC_IMAGE_SITUATION,STRING_IMAGEBOXPROP_STYLE_FROMFILE);
+
+					SendDlgItemMessage(hwnd,IDC_FILE,BM_SETCHECK,BST_CHECKED,0);
+					break;
+
+				case IDC_RESOURCE:
+					if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type==IMGTYPE_RES){
+						//変更無し
+						break;
+					}
+
+					//変更情報
+					Rad_NoticeChanging(i,RAD_UNDO_IMAGESTATE,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo);
+
+					ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type=IMGTYPE_RES;
+
+					//ファイル指定を非表示
+					ShowWindow(GetDlgItem(hwnd,IDC_PATH),SW_HIDE);
+					ShowWindow(GetDlgItem(hwnd,IDC_CHANGEPATH),SW_HIDE);
+
+					//リソース指定を表示
+					ShowWindow(GetDlgItem(hwnd,IDC_RESCOMBO),SW_SHOW);
+
+					//イメージ状態テキスト
+					//"リソース指定:"
+					SetDlgItemText(hwnd,IDC_IMAGE_SITUATION,STRING_IMAGEBOXPROP_STYLE_FROMRESOURCE);
+
+					SendDlgItemMessage(hwnd,IDC_RESOURCE,BM_SETCHECK,BST_CHECKED,0);
+
+					SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_RESETCONTENT,0,0);
+
+					if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_ICON){
+						//アイコンリソースをコンボボックスに挿入
+						for(i3=0;i3<ProjectInfo.res.NumberOfIconRes;i3++)
+							SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_ADDSTRING,0,(long)ProjectInfo.res.pIconResInfo[i3].IdName);
+					}
+					else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x0000000F)==SS_BITMAP){
+						//ビットマップリソースをコンボボックスに挿入
+						for(i3=0;i3<ProjectInfo.res.NumberOfBitmapRes;i3++)
+							SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_ADDSTRING,0,(long)ProjectInfo.res.pBitmapResInfo[i3].IdName);
+					}
+					break;
+
+				case IDC_RESCOMBO:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_IMAGESTATE,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo);
+
+						i3=SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_GETCURSEL,0,0);
+						SendDlgItemMessage(hwnd,IDC_RESCOMBO,CB_GETLBTEXT,i3,(long)temporary);
+
+						HeapDefaultFree(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+						lstrcpy(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path,temporary);
+
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					}
+					break;
+
+				case IDC_CHANGEPATH:
+					if(HIWORD(wParam)==BN_CLICKED){
+						if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.type==IMGTYPE_FILE){
+							if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x000F)==SS_ICON){
+								extern LPSTR IconFileFilter;
+								//"アイコン ファイルを指定して下さい"
+								if(!GetFilePathDialog(hwnd,temporary,IconFileFilter,STRING_IMAGEBOXPROP_GETPATH_ICON,1)) return 1;
+							}
+							else if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&0x000F)==SS_BITMAP){
+								extern LPSTR BitmapFileFilter;
+								//"ビットマップ ファイルを指定して下さい"
+								if(!GetFilePathDialog(hwnd,temporary,BitmapFileFilter,STRING_IMAGEBOXPROP_GETPATH_BITMAP,1)) return 1;
+							}
+
+							//変更情報
+							Rad_NoticeChanging(i,RAD_UNDO_IMAGESTATE,MdiInfo[i].MdiRadInfo->SelectingItem[0],(DWORD)&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo);
+
+							GetRelationalPath(temporary,ProjectInfo.dir);
+							HeapDefaultFree(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path);
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+							lstrcpy(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].ImageCtrlInfo.path,temporary);
+
+							SetDlgItemText(hwnd,IDC_PATH,temporary);
+							DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						}
+						return 1;
+					}
+					break;
+
+				case IDC_SS_NOTIFY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_SS_NOTIFY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_NOTIFY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~SS_NOTIFY;
+						return 1;
+					}
+					break;
+				case IDC_SS_CENTERIMAGE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_SS_CENTERIMAGE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_CENTERIMAGE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~SS_CENTERIMAGE;
+						return 1;
+					}
+					break;
+				case IDC_SS_RIGHTJUST:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_SS_RIGHTJUST,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_RIGHTJUST;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~SS_RIGHTJUST;
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+////////////////////////
+// LISTVIEW プロパティ
+BOOL CALLBACK RadProperty_ListViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+
+
+			/////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			////////
+			// 表示
+			////////
+
+			//"アイコン"
+			SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_ADDSTRING,0,(long)STRING_LISTVIEWPROP_STYLE_ICON);
+			//"小さいアイコン"
+			SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_ADDSTRING,0,(long)STRING_LISTVIEWPROP_STYLE_SMALLICON);
+			//"リスト"
+			SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_ADDSTRING,0,(long)STRING_LISTVIEWPROP_STYLE_LIST);
+			//"レポート"
+			SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_ADDSTRING,0,(long)STRING_LISTVIEWPROP_STYLE_REPORT);
+
+			//ビットを考慮してLVS_LISTを最初に比較する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_LIST)==LVS_LIST) SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_SETCURSEL,2,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_SMALLICON) SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_REPORT) SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_SETCURSEL,3,0);
+			else SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_SETCURSEL,0,0);
+
+
+			////////
+			// 配置
+			////////
+
+			//"上端"
+			SendDlgItemMessage(hwnd,IDC_LVS_POSITION,CB_ADDSTRING,0,(long)STRING_TOP);
+			//"左端"
+			SendDlgItemMessage(hwnd,IDC_LVS_POSITION,CB_ADDSTRING,0,(long)STRING_LEFT);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_ALIGNLEFT) SendDlgItemMessage(hwnd,IDC_LVS_POSITION,CB_SETCURSEL,1,0);
+			else SendDlgItemMessage(hwnd,IDC_LVS_POSITION,CB_SETCURSEL,0,0);
+
+
+			//////////
+			// ソート
+			//////////
+
+			//"なし"
+			SendDlgItemMessage(hwnd,IDC_LVS_SORT,CB_ADDSTRING,0,(long)STRING_NONE);
+			//"昇順"
+			SendDlgItemMessage(hwnd,IDC_LVS_SORT,CB_ADDSTRING,0,(long)STRING_SORT_ASCENDING);
+			//"降順"
+			SendDlgItemMessage(hwnd,IDC_LVS_SORT,CB_ADDSTRING,0,(long)STRING_SORT_DESCENDING);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_SORTASCENDING) SendDlgItemMessage(hwnd,IDC_LVS_SORT,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_SORTDESCENDING) SendDlgItemMessage(hwnd,IDC_LVS_SORT,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_LVS_SORT,CB_SETCURSEL,0,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_SINGLESEL) SendDlgItemMessage(hwnd,IDC_LVS_SINGLESEL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_AUTOARRANGE) SendDlgItemMessage(hwnd,IDC_LVS_AUTOARRANGE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_NOLABELWRAP) SendDlgItemMessage(hwnd,IDC_LVS_NOLABELWRAP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_EDITLABELS) SendDlgItemMessage(hwnd,IDC_LVS_EDITLABELS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_NOSCROLL) SendDlgItemMessage(hwnd,IDC_LVS_NOSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_NOCOLUMNHEADER) SendDlgItemMessage(hwnd,IDC_LVS_NOCOLUMNHEADER,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_NOSORTHEADER) SendDlgItemMessage(hwnd,IDC_LVS_NOSORTHEADER,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_SHOWSELALWAYS) SendDlgItemMessage(hwnd,IDC_LVS_SHOWSELALWAYS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_OWNERDRAWFIXED) SendDlgItemMessage(hwnd,IDC_LVS_OWNERDRAWFIXED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LVS_SHAREIMAGELISTS) SendDlgItemMessage(hwnd,IDC_LVS_SHAREIMAGELISTS,BM_SETCHECK,BST_CHECKED,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_LVS_VIEW:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_LVS_VIEW,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(LVS_SMALLICON|LVS_LIST|LVS_REPORT);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_SMALLICON;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_LIST;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_REPORT;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_LVS_POSITION:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_LVS_POSITION,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(LVS_ALIGNLEFT);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_ALIGNLEFT;
+						return 1;
+					}
+					break;
+				case IDC_LVS_SORT:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_LVS_SORT,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(LVS_SORTASCENDING|LVS_SORTDESCENDING);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_SORTASCENDING;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_SORTDESCENDING;
+						return 1;
+					}
+					break;
+
+				case IDC_LVS_SINGLESEL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_SINGLESEL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_SINGLESEL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_SINGLESEL;
+						return 1;
+					}
+					break;
+				case IDC_LVS_AUTOARRANGE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_AUTOARRANGE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_AUTOARRANGE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_AUTOARRANGE;
+						return 1;
+					}
+					break;
+				case IDC_LVS_NOLABELWRAP:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_NOLABELWRAP,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_NOLABELWRAP;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_NOLABELWRAP;
+						return 1;
+					}
+					break;
+				case IDC_LVS_EDITLABELS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_EDITLABELS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_EDITLABELS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_EDITLABELS;
+						return 1;
+					}
+					break;
+				case IDC_LVS_NOSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_NOSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_NOSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_NOSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_LVS_NOCOLUMNHEADER:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_NOCOLUMNHEADER,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_NOCOLUMNHEADER;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_NOCOLUMNHEADER;
+						return 1;
+					}
+					break;
+				case IDC_LVS_NOSORTHEADER:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_NOSORTHEADER,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_NOSORTHEADER;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_NOSORTHEADER;
+						return 1;
+					}
+					break;
+				case IDC_LVS_SHOWSELALWAYS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_SHOWSELALWAYS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_SHOWSELALWAYS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_SHOWSELALWAYS;
+						return 1;
+					}
+					break;
+				case IDC_LVS_OWNERDRAWFIXED:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_OWNERDRAWFIXED,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_OWNERDRAWFIXED;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_OWNERDRAWFIXED;
+						return 1;
+					}
+					break;
+				case IDC_LVS_SHAREIMAGELISTS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LVS_SHAREIMAGELISTS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LVS_SHAREIMAGELISTS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LVS_SHAREIMAGELISTS;
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+///////////////////////
+// LISTBOX プロパティ
+
+void RadProperty_ListBox_StylingOrder(HWND hwnd,DWORD *style){
+	if(*style&LBS_OWNERDRAWVARIABLE){
+		*style&=~(LBS_MULTICOLUMN);
+		SendDlgItemMessage(hwnd,IDC_LBS_MULTICOLUMN,BM_SETCHECK,BST_UNCHECKED,0);
+		EnableWindow(GetDlgItem(hwnd,IDC_LBS_MULTICOLUMN),0);
+	}
+	else
+		EnableWindow(GetDlgItem(hwnd,IDC_LBS_MULTICOLUMN),1);
+
+	if(!(*style&(LBS_OWNERDRAWFIXED|LBS_OWNERDRAWVARIABLE))){
+		*style&=~(LBS_HASSTRINGS);
+		SendDlgItemMessage(hwnd,IDC_LBS_HASSTRINGS,BM_SETCHECK,BST_UNCHECKED,0);
+		EnableWindow(GetDlgItem(hwnd,IDC_LBS_HASSTRINGS),0);
+	}
+	else
+		EnableWindow(GetDlgItem(hwnd,IDC_LBS_HASSTRINGS),1);
+}
+BOOL CALLBACK RadProperty_ListBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+
+
+			////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			////////
+			// 選択
+			////////
+
+			//"シングル"
+			SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_ADDSTRING,0,(long)STRING_LISTBOXPROP_STYLE_SEL_SINGLE);
+			//"マルチ"
+			SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_ADDSTRING,0,(long)STRING_LISTBOXPROP_STYLE_SEL_MULTI);
+			//"拡張"
+			SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_ADDSTRING,0,(long)STRING_LISTBOXPROP_STYLE_SEL_EXTENDED);
+			//"なし"
+			SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_ADDSTRING,0,(long)STRING_NONE);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_MULTIPLESEL) SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_EXTENDEDSEL) SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_SETCURSEL,2,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_NOSEL) SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_SETCURSEL,3,0);
+			else SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_SETCURSEL,0,0);
+
+
+			////////////////
+			// オーナー描画
+			////////////////
+
+			//"なし"
+			SendDlgItemMessage(hwnd,IDC_LBS_OWNERDRAW,CB_ADDSTRING,0,(long)STRING_NONE);
+			//"固定"
+			SendDlgItemMessage(hwnd,IDC_LBS_OWNERDRAW,CB_ADDSTRING,0,(long)STRING_OWNERDRAW_FIXED);
+			//"可変"
+			SendDlgItemMessage(hwnd,IDC_LBS_OWNERDRAW,CB_ADDSTRING,0,(long)STRING_OWNERDRAW_VARIABLE);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_OWNERDRAWFIXED) SendDlgItemMessage(hwnd,IDC_LBS_OWNERDRAW,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_OWNERDRAWVARIABLE) SendDlgItemMessage(hwnd,IDC_LBS_OWNERDRAW,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_LBS_OWNERDRAW,CB_SETCURSEL,0,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_HASSTRINGS) SendDlgItemMessage(hwnd,IDC_LBS_HASSTRINGS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_SORT) SendDlgItemMessage(hwnd,IDC_LBS_SORT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_NOTIFY) SendDlgItemMessage(hwnd,IDC_LBS_NOTIFY,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_MULTICOLUMN) SendDlgItemMessage(hwnd,IDC_LBS_MULTICOLUMN,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_HSCROLL) SendDlgItemMessage(hwnd,IDC_STYLE_HSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VSCROLL) SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_DISABLENOSCROLL) SendDlgItemMessage(hwnd,IDC_LBS_DISABLENOSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_NOREDRAW) SendDlgItemMessage(hwnd,IDC_LBS_NOREDRAW,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_USETABSTOPS) SendDlgItemMessage(hwnd,IDC_LBS_USETABSTOPS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&LBS_WANTKEYBOARDINPUT) SendDlgItemMessage(hwnd,IDC_LBS_WANTKEYBOARDINPUT,BM_SETCHECK,BST_CHECKED,0);
+
+			RadProperty_ListBox_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_LBS_SELECT:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_LBS_SELECT,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(LBS_MULTIPLESEL|LBS_EXTENDEDSEL|LBS_NOSEL);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_MULTIPLESEL;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_EXTENDEDSEL;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_NOSEL;
+						return 1;
+					}
+					break;
+				case IDC_LBS_OWNERDRAW:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_LBS_OWNERDRAW,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(LBS_OWNERDRAWFIXED|LBS_OWNERDRAWVARIABLE);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_OWNERDRAWFIXED;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_OWNERDRAWVARIABLE;
+
+						RadProperty_ListBox_StylingOrder(hwnd,&ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+						return 1;
+					}
+					break;
+
+				case IDC_LBS_HASSTRINGS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LBS_HASSTRINGS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_HASSTRINGS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LBS_HASSTRINGS;
+						return 1;
+					}
+					break;
+				case IDC_LBS_SORT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LBS_SORT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_SORT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LBS_SORT;
+						return 1;
+					}
+					break;
+				case IDC_LBS_NOTIFY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LBS_NOTIFY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_NOTIFY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LBS_NOTIFY;
+						return 1;
+					}
+					break;
+				case IDC_LBS_MULTICOLUMN:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LBS_MULTICOLUMN,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_MULTICOLUMN;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LBS_MULTICOLUMN;
+						return 1;
+					}
+					break;
+				case IDC_STYLE_HSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_HSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=WS_HSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~WS_HSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_STYLE_VSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_STYLE_VSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=WS_VSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~WS_VSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_LBS_DISABLENOSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LBS_DISABLENOSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_DISABLENOSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LBS_DISABLENOSCROLL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_LBS_NOREDRAW:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LBS_NOREDRAW,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_NOREDRAW;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LBS_NOREDRAW;
+						return 1;
+					}
+					break;
+				case IDC_LBS_USETABSTOPS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LBS_USETABSTOPS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_USETABSTOPS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LBS_USETABSTOPS;
+						return 1;
+					}
+					break;
+				case IDC_LBS_WANTKEYBOARDINPUT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_LBS_WANTKEYBOARDINPUT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=LBS_WANTKEYBOARDINPUT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~LBS_WANTKEYBOARDINPUT;
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+///////////////////////////
+// PROGRESSBAR プロパティ
+BOOL CALLBACK RadProperty_ProgressBarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+
+			////////////
+			//スタイル
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&PBS_VERTICAL) SendDlgItemMessage(hwnd,IDC_PBS_VERTICAL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&PBS_SMOOTH) SendDlgItemMessage(hwnd,IDC_PBS_SMOOTH,BM_SETCHECK,BST_CHECKED,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_PBS_VERTICAL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_PBS_VERTICAL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=PBS_VERTICAL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~PBS_VERTICAL;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_PBS_SMOOTH:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_PBS_SMOOTH,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=PBS_SMOOTH;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~PBS_SMOOTH;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+	}
+	return 0;
+}
+
+
+///////////////////////////
+// RADIOBUTTON プロパティ
+
+BOOL CALLBACK RadProperty_RadioButtonProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+
+			/////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_AUTORADIOBUTTON)==BS_AUTORADIOBUTTON) SendDlgItemMessage(hwnd,IDC_BS_AUTO,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_PUSHLIKE) SendDlgItemMessage(hwnd,IDC_BS_PUSHLIKE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_LEFTTEXT) SendDlgItemMessage(hwnd,IDC_BS_LEFTTEXT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_ICON) SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_BITMAP) SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_MULTILINE) SendDlgItemMessage(hwnd,IDC_BS_MULTILINE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_NOTIFY) SendDlgItemMessage(hwnd,IDC_BS_NOTIFY,BM_SETCHECK,BST_CHECKED,0);
+
+
+			//////////////////
+			// 水平方向の配置
+			//////////////////
+
+			//"デフォルト"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_DEFAULT);
+			//"左端"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_LEFT);
+			//"右端"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_RIGHT);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_ADDSTRING,0,(long)STRING_CENTER);
+
+			//ビットを考慮してBS_CENTERを最初に比較する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_CENTER)==BS_CENTER) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,3,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_LEFT) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_RIGHT) SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_SETCURSEL,0,0);
+
+
+			//////////////////
+			// 垂直方向の配置
+			//////////////////
+
+			//"デフォルト"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_DEFAULT);
+			//"上端"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_TOP);
+			//"下端"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_BOTTOM);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_ADDSTRING,0,(long)STRING_CENTER);
+
+			//ビットを考慮してBS_VCENTERを最初に比較する
+			if((ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_VCENTER)==BS_VCENTER) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,3,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_TOP) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&BS_BOTTOM) SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_SETCURSEL,0,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_BS_AUTO:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_AUTO,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_AUTORADIOBUTTON;
+						}
+						else{
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=0xFFFFFFF0;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_RADIOBUTTON;
+						}
+						return 1;
+					}
+					break;
+				case IDC_BS_PUSHLIKE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_PUSHLIKE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_PUSHLIKE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_PUSHLIKE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_LEFTTEXT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_LEFTTEXT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_LEFTTEXT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_LEFTTEXT;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_ICON:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_ICON;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_BITMAP;
+							SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_ICON;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_BITMAP:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_BITMAP,BM_GETCHECK,0,0)){
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_BITMAP;
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_ICON;
+							SendDlgItemMessage(hwnd,IDC_BS_ICON,BM_SETCHECK,BST_UNCHECKED,0);
+						}
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_BITMAP;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_MULTILINE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_MULTILINE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_MULTILINE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_MULTILINE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_NOTIFY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_BS_NOTIFY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_NOTIFY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~BS_NOTIFY;
+						return 1;
+					}
+					break;
+
+				case IDC_BS_HPOS:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BS_HPOS,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(BS_LEFT|BS_RIGHT|BS_CENTER);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_LEFT;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_RIGHT;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_CENTER;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_BS_VPOS:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_BS_VPOS,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(BS_TOP|BS_BOTTOM|BS_VCENTER);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_TOP;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_BOTTOM;
+						else if(i3==3) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=BS_VCENTER;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+/////////////////////////
+// SCROLLBAR プロパティ
+
+BOOL CALLBACK RadProperty_ScrollBarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+
+
+			////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+
+			////////
+			// 配置
+			////////
+
+			//"指定無し"
+			SendDlgItemMessage(hwnd,IDC_SBS_POSITION,CB_ADDSTRING,0,(long)STRING_SCROLLBARPROP_STYLE_FREE);
+			//"上/左"
+			SendDlgItemMessage(hwnd,IDC_SBS_POSITION,CB_ADDSTRING,0,(long)STRING_SCROLLBARPROP_STYLE_TOPORLEFT);
+			//"下/右"
+			SendDlgItemMessage(hwnd,IDC_SBS_POSITION,CB_ADDSTRING,0,(long)STRING_SCROLLBARPROP_STYLE_BOTTOMORRIGHT);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SBS_TOPALIGN) SendDlgItemMessage(hwnd,IDC_SBS_POSITION,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SBS_BOTTOMALIGN) SendDlgItemMessage(hwnd,IDC_SBS_POSITION,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_SBS_POSITION,CB_SETCURSEL,0,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_SBS_POSITION:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_SBS_POSITION,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(SBS_TOPALIGN|SBS_BOTTOMALIGN);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SBS_TOPALIGN;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SBS_BOTTOMALIGN;
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+//////////////////////
+// STATIC プロパティ
+
+BOOL CALLBACK RadProperty_StaticProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+
+			////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SS_NOPREFIX) SendDlgItemMessage(hwnd,IDC_SS_NOPREFIX,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SS_LEFTNOWORDWRAP) SendDlgItemMessage(hwnd,IDC_SS_LEFTNOWORDWRAP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SS_NOTIFY) SendDlgItemMessage(hwnd,IDC_SS_NOTIFY,BM_SETCHECK,BST_CHECKED,0);
+
+
+			//////////////////
+			// テキストの配置
+			//////////////////
+
+			//"左端"
+			SendDlgItemMessage(hwnd,IDC_SS_TEXTPOS,CB_ADDSTRING,0,(long)STRING_LEFT);
+			//"中央"
+			SendDlgItemMessage(hwnd,IDC_SS_TEXTPOS,CB_ADDSTRING,0,(long)STRING_CENTER);
+			//"右端"
+			SendDlgItemMessage(hwnd,IDC_SS_TEXTPOS,CB_ADDSTRING,0,(long)STRING_RIGHT);
+
+			//ビットを考慮してSS_LEFTを最後に検討する
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SS_CENTER) SendDlgItemMessage(hwnd,IDC_SS_TEXTPOS,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&SS_RIGHT) SendDlgItemMessage(hwnd,IDC_SS_TEXTPOS,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_SS_TEXTPOS,CB_SETCURSEL,0,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_SS_NOPREFIX:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_SS_NOPREFIX,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_NOPREFIX;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~SS_NOPREFIX;
+						return 1;
+					}
+					break;
+				case IDC_SS_LEFTNOWORDWRAP:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_SS_LEFTNOWORDWRAP,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_LEFTNOWORDWRAP;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~SS_LEFTNOWORDWRAP;
+
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_SS_NOTIFY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_SS_NOTIFY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_NOTIFY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~SS_NOTIFY;
+						return 1;
+					}
+					break;
+
+				case IDC_SS_TEXTPOS:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_SS_TEXTPOS,CB_GETCURSEL,0,0);
+						//SS_LEFT=0
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(SS_CENTER|SS_RIGHT);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_CENTER;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=SS_RIGHT;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+////////////////////////
+// TRACKBAR プロパティ
+BOOL CALLBACK RadProperty_TrackBarProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+
+
+			///////////////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+
+			////////
+			// 表示
+			////////
+
+			//"水平方向"
+			SendDlgItemMessage(hwnd,IDC_TBS_SITUATION,CB_ADDSTRING,0,(long)STRING_DIRECTION_HORIZONTAL);
+			//"垂直方向"
+			SendDlgItemMessage(hwnd,IDC_TBS_SITUATION,CB_ADDSTRING,0,(long)STRING_DIRECTION_VERTICAL);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TBS_VERT) SendDlgItemMessage(hwnd,IDC_TBS_SITUATION,CB_SETCURSEL,1,0);
+			else SendDlgItemMessage(hwnd,IDC_TBS_SITUATION,CB_SETCURSEL,0,0);
+
+
+			////////////
+			// ポイント
+			////////////
+
+			//"両方"
+			SendDlgItemMessage(hwnd,IDC_TBS_POINT,CB_ADDSTRING,0,(long)STRING_TRACKBARPROP_STYLE_POSITION_BOTH);
+			//"上/左"
+			SendDlgItemMessage(hwnd,IDC_TBS_POINT,CB_ADDSTRING,0,(long)STRING_TRACKBARPROP_STYLE_POSITION_TOPORLEFT);
+			//"下/右"
+			SendDlgItemMessage(hwnd,IDC_TBS_POINT,CB_ADDSTRING,0,(long)STRING_TRACKBARPROP_STYLE_POSITION_BOTTOMORRIGHT);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TBS_BOTH) SendDlgItemMessage(hwnd,IDC_TBS_POINT,CB_SETCURSEL,0,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TBS_TOP) SendDlgItemMessage(hwnd,IDC_TBS_POINT,CB_SETCURSEL,1,0);
+			else SendDlgItemMessage(hwnd,IDC_TBS_POINT,CB_SETCURSEL,2,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TBS_NOTICKS) SendDlgItemMessage(hwnd,IDC_TBS_NOTICKS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TBS_AUTOTICKS) SendDlgItemMessage(hwnd,IDC_TBS_AUTOTICKS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TBS_ENABLESELRANGE) SendDlgItemMessage(hwnd,IDC_TBS_ENABLESELRANGE,BM_SETCHECK,BST_CHECKED,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_TBS_SITUATION:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_TBS_SITUATION,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TBS_VERT;
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TBS_VERT;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_TBS_POINT:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_TBS_POINT,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(TBS_BOTH|TBS_TOP);
+						if(i3==0) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TBS_BOTH;
+						else if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TBS_TOP;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_TBS_NOTICKS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TBS_NOTICKS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TBS_NOTICKS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TBS_NOTICKS;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_TBS_AUTOTICKS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TBS_AUTOTICKS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TBS_AUTOTICKS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TBS_AUTOTICKS;
+						return 1;
+					}
+					break;
+				case IDC_TBS_ENABLESELRANGE:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TBS_ENABLESELRANGE,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TBS_ENABLESELRANGE;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TBS_ENABLESELRANGE;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+//////////////////////////
+// TREEVIEW プロパティ
+BOOL CALLBACK RadProperty_TreeViewProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+
+
+			////////////
+			//スタイル
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_HASBUTTONS) SendDlgItemMessage(hwnd,IDC_TVS_HASBUTTONS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_HASLINES) SendDlgItemMessage(hwnd,IDC_TVS_HASLINES,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_LINESATROOT) SendDlgItemMessage(hwnd,IDC_TVS_LINESATROOT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_EDITLABELS) SendDlgItemMessage(hwnd,IDC_TVS_EDITLABELS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_DISABLEDRAGDROP) SendDlgItemMessage(hwnd,IDC_TVS_DISABLEDRAGDROP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_SHOWSELALWAYS) SendDlgItemMessage(hwnd,IDC_TVS_SHOWSELALWAYS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_NOSCROLL) SendDlgItemMessage(hwnd,IDC_TVS_NOSCROLL,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_NOTOOLTIPS) SendDlgItemMessage(hwnd,IDC_TVS_NOTOOLTIPS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_CHECKBOXES) SendDlgItemMessage(hwnd,IDC_TVS_CHECKBOXES,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_FULLROWSELECT) SendDlgItemMessage(hwnd,IDC_TVS_FULLROWSELECT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_TRACKSELECT) SendDlgItemMessage(hwnd,IDC_TVS_TRACKSELECT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&TVS_SINGLEEXPAND) SendDlgItemMessage(hwnd,IDC_TVS_SINGLEEXPAND,BM_SETCHECK,BST_CHECKED,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_TVS_HASBUTTONS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_HASBUTTONS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_HASBUTTONS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_HASBUTTONS;
+						return 1;
+					}
+					break;
+				case IDC_TVS_HASLINES:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_HASLINES,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_HASLINES;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_HASLINES;
+						return 1;
+					}
+					break;
+				case IDC_TVS_LINESATROOT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_LINESATROOT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_LINESATROOT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_LINESATROOT;
+						return 1;
+					}
+					break;
+				case IDC_TVS_EDITLABELS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_EDITLABELS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_EDITLABELS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_EDITLABELS;
+						return 1;
+					}
+					break;
+				case IDC_TVS_DISABLEDRAGDROP:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_DISABLEDRAGDROP,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_DISABLEDRAGDROP;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_DISABLEDRAGDROP;
+						return 1;
+					}
+					break;
+				case IDC_TVS_SHOWSELALWAYS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_SHOWSELALWAYS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_SHOWSELALWAYS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_SHOWSELALWAYS;
+						return 1;
+					}
+					break;
+				case IDC_TVS_NOSCROLL:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_NOSCROLL,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_NOSCROLL;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_NOSCROLL;
+						return 1;
+					}
+					break;
+				case IDC_TVS_NOTOOLTIPS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_NOTOOLTIPS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_NOTOOLTIPS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_NOTOOLTIPS;
+						return 1;
+					}
+					break;
+				case IDC_TVS_CHECKBOXES:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_CHECKBOXES,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_CHECKBOXES;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_CHECKBOXES;
+						return 1;
+					}
+					break;
+				case IDC_TVS_FULLROWSELECT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_FULLROWSELECT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_FULLROWSELECT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_FULLROWSELECT;
+						return 1;
+					}
+					break;
+				case IDC_TVS_TRACKSELECT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_TRACKSELECT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_TRACKSELECT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_TRACKSELECT;
+						return 1;
+					}
+					break;
+				case IDC_TVS_SINGLEEXPAND:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_TVS_SINGLEEXPAND,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=TVS_SINGLEEXPAND;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~TVS_SINGLEEXPAND;
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+
+
+//////////////////////
+// UPDOWN プロパティ
+BOOL CALLBACK RadProperty_UpDownProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3;
+	static BOOL bInitial;
+
+	switch(message){
+		case WM_INITDIALOG:
+			bInitial=1;
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].IdName);
+			SetDlgItemText(hwnd,IDC_CAPTION,ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].caption);
+
+
+			//////////////////
+			// スタイル
+			////////////
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_DISABLED) SendDlgItemMessage(hwnd,IDC_STYLE_DISABLED,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_VISIBLE) SendDlgItemMessage(hwnd,IDC_STYLE_VISIBLE,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_GROUP) SendDlgItemMessage(hwnd,IDC_STYLE_GROUP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&WS_TABSTOP) SendDlgItemMessage(hwnd,IDC_STYLE_TABSTOP,BM_SETCHECK,BST_CHECKED,0);
+
+
+			////////
+			// 方向
+			////////
+
+			//"水平方向"
+			SendDlgItemMessage(hwnd,IDC_UDS_SITUATION,CB_ADDSTRING,0,(long)STRING_DIRECTION_HORIZONTAL);
+			//"垂直方向"
+			SendDlgItemMessage(hwnd,IDC_UDS_SITUATION,CB_ADDSTRING,0,(long)STRING_DIRECTION_VERTICAL);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&UDS_HORZ) SendDlgItemMessage(hwnd,IDC_UDS_SITUATION,CB_SETCURSEL,0,0);
+			else SendDlgItemMessage(hwnd,IDC_UDS_SITUATION,CB_SETCURSEL,1,0);
+
+			////////////
+			// アタッチ
+			////////////
+
+			//"なし"
+			SendDlgItemMessage(hwnd,IDC_UDS_ATTACH,CB_ADDSTRING,0,(long)STRING_NONE);
+			//"左端"
+			SendDlgItemMessage(hwnd,IDC_UDS_ATTACH,CB_ADDSTRING,0,(long)STRING_LEFT);
+			//"右端"
+			SendDlgItemMessage(hwnd,IDC_UDS_ATTACH,CB_ADDSTRING,0,(long)STRING_RIGHT);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&UDS_ALIGNLEFT) SendDlgItemMessage(hwnd,IDC_UDS_ATTACH,CB_SETCURSEL,1,0);
+			else if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&UDS_ALIGNRIGHT) SendDlgItemMessage(hwnd,IDC_UDS_ATTACH,CB_SETCURSEL,2,0);
+			else SendDlgItemMessage(hwnd,IDC_UDS_ATTACH,CB_SETCURSEL,0,0);
+
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&UDS_AUTOBUDDY) SendDlgItemMessage(hwnd,IDC_UDS_AUTOBUDDY,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&UDS_SETBUDDYINT) SendDlgItemMessage(hwnd,IDC_UDS_SETBUDDYINT,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&UDS_NOTHOUSANDS) SendDlgItemMessage(hwnd,IDC_UDS_NOTHOUSANDS,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&UDS_WRAP) SendDlgItemMessage(hwnd,IDC_UDS_WRAP,BM_SETCHECK,BST_CHECKED,0);
+			if(ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&UDS_ARROWKEYS) SendDlgItemMessage(hwnd,IDC_UDS_ARROWKEYS,BM_SETCHECK,BST_CHECKED,0);
+
+
+			bInitial=0;
+			break;
+		case WM_COMMAND:
+
+			i=GetWndNum(GetParent(GetParent(hwnd)));
+			if(i==-1) return 1;
+			i2=GetWndInfoNum(MdiInfo[i].path);
+
+			//共通スタイル
+			if(bInitial==0){
+				if(DefaultItemStyles(hwnd,i,i2,wParam)) return 1;
+			}
+
+			switch(LOWORD(wParam)){
+				case IDC_UDS_SITUATION:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_UDS_SITUATION,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~UDS_HORZ;
+						if(i3==0) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=UDS_HORZ;
+						DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+						return 1;
+					}
+					break;
+				case IDC_UDS_ATTACH:
+					if(HIWORD(wParam)==CBN_SELCHANGE){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						i3=SendDlgItemMessage(hwnd,IDC_UDS_ATTACH,CB_GETCURSEL,0,0);
+						ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~(UDS_ALIGNLEFT|UDS_ALIGNRIGHT);
+						if(i3==1) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=UDS_ALIGNLEFT;
+						else if(i3==2) ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=UDS_ALIGNRIGHT;
+						return 1;
+					}
+					break;
+
+				case IDC_UDS_AUTOBUDDY:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_UDS_AUTOBUDDY,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=UDS_AUTOBUDDY;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~UDS_AUTOBUDDY;
+						return 1;
+					}
+					break;
+				case IDC_UDS_SETBUDDYINT:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_UDS_SETBUDDYINT,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=UDS_SETBUDDYINT;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~UDS_SETBUDDYINT;
+						return 1;
+					}
+					break;
+				case IDC_UDS_NOTHOUSANDS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_UDS_NOTHOUSANDS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=UDS_NOTHOUSANDS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~UDS_NOTHOUSANDS;
+						return 1;
+					}
+					break;
+				case IDC_UDS_WRAP:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_UDS_WRAP,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=UDS_WRAP;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~UDS_WRAP;
+						return 1;
+					}
+					break;
+				case IDC_UDS_ARROWKEYS:
+					if(HIWORD(wParam)==BN_CLICKED){
+						//変更情報
+						Rad_NoticeChanging(i,RAD_UNDO_STYLE,MdiInfo[i].MdiRadInfo->SelectingItem[0],ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style);
+
+						if(SendDlgItemMessage(hwnd,IDC_UDS_ARROWKEYS,BM_GETCHECK,0,0))
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style|=UDS_ARROWKEYS;
+						else
+							ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[i].MdiRadInfo->SelectingItem[0]].style&=~UDS_ARROWKEYS;
+						return 1;
+					}
+					break;
+
+				case IDC_EXSTYLE:
+					if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_RAD_PROP_ITEM_EXSTYLE),hwnd,DlgRadProperty_Item_ExStyle)) return 1;
+					DrawRadWindow(i,&ProjectInfo.pWindowInfo[i2]);
+					return 1;
+			}
+	}
+	return 0;
+}
+
+
+LRESULT CALLBACK RadPropertyWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	RECT rect;
+	SCROLLINFO ScrollInfo;
+
+	switch(message){
+		case WM_MOUSEACTIVATE:
+			BringWindowToTop(GetParent(hwnd));
+			return 0;
+		case WM_VSCROLL:
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			if(LOWORD(wParam)==SB_LINEUP) i=-20;
+			else if(LOWORD(wParam)==SB_LINEDOWN) i=20;
+			else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_PAGEDOWN) i=ScrollInfo.nPage;
+			else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-ScrollInfo.nPos;
+			else i=0;
+			GetClientRect(hwnd,&rect);
+			i=max(-ScrollInfo.nPos,min(i,ScrollInfo.nMax-rect.bottom-ScrollInfo.nPos));
+			if(i!=0){
+				ScrollInfo.nPos+=i;
+				SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
+				ScrollWindow(hwnd,0,-i,NULL,NULL);
+				UpdateWindow(hwnd);
+			}
+			return 0;
+		case WM_SIZE:
+			i=GetWndNum(GetParent(hwnd));
+			if(i==-1) return 0;	//ウィンドウが初期状態の場合
+			ScrollInfo.cbSize=sizeof(SCROLLINFO);
+			ScrollInfo.fMask=SIF_PAGE|SIF_RANGE|SIF_POS;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			GetClientRect(MdiInfo[i].MdiRadInfo->hProp_Dlg,&rect);
+			ScrollInfo.nMin=0;
+			ScrollInfo.nMax=rect.bottom;
+			ScrollInfo.nPage=HIWORD(lParam);
+			SetScrollInfo(hwnd,SB_VERT,&ScrollInfo,1);
+
+			i=ScrollInfo.nPos;
+			ScrollInfo.fMask=SIF_POS;
+			GetScrollInfo(hwnd,SB_VERT,&ScrollInfo);
+			if(i>ScrollInfo.nPos){
+				ScrollWindow(hwnd,0,i-ScrollInfo.nPos,NULL,NULL);
+				UpdateWindow(hwnd);
+			}
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
Index: /ProjectEditor/Rad_UndoRedo.cpp
===================================================================
--- /ProjectEditor/Rad_UndoRedo.cpp	(revision 3)
+++ /ProjectEditor/Rad_UndoRedo.cpp	(revision 3)
@@ -0,0 +1,559 @@
+#include "Common.h"
+
+void Rad_UndoCommand(int WndNum){
+	extern HINSTANCE hInst;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,WndInfoNum;
+	DWORD dw;
+	char *temporary;
+	RAD_UNDOSTATE *pUndoState;
+
+	pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
+	i=pUndoState->NowPos-1;
+	if(i==-1) i=MAX_UNDONUM-1;
+	if(!pUndoState->Command[i]){
+		MessageBeep(0);
+		return;
+	}
+	pUndoState->NowPos=i;
+
+	WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+	switch(pUndoState->Command[pUndoState->NowPos]){
+		case RAD_UNDO_INSERTITEM:
+			DeleteDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],0);
+			MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=-1;
+			break;
+		case RAD_UNDO_DELETEITEM:
+			CHILDINFO *pChildInfo;
+			RECT rect;
+			pChildInfo=(CHILDINFO *)pUndoState->lpdwData[pUndoState->NowPos];
+			rect.left=pChildInfo->pos.x;
+			rect.top=pChildInfo->pos.y;
+			rect.right=pChildInfo->pos.x+pChildInfo->size.cx;
+			rect.bottom=pChildInfo->pos.y+pChildInfo->size.cy;
+			InsertDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],
+				&pChildInfo->pos,&pChildInfo->size,
+				pChildInfo->IdName,pChildInfo->caption,pChildInfo->style,pChildInfo->ExStyle,pChildInfo->Control,pChildInfo->ImageCtrlInfo.type,pChildInfo->ImageCtrlInfo.path,0);
+			break;
+		case RAD_UNDO_NAME:
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				RAD_UNDOSTATE_NAME *names;
+				names=(RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
+
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].name;
+				ProjectInfo.pWindowInfo[WndInfoNum].name=names->name;
+				names->name=temporary;
+				GlobalFree(MdiInfo[WndNum].path);
+				MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(ProjectInfo.pWindowInfo[WndInfoNum].name)+1);
+				lstrcpy(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[WndInfoNum].name);
+
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].HandleName;
+				ProjectInfo.pWindowInfo[WndInfoNum].HandleName=names->HandleName;
+				names->HandleName=temporary;
+
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].CallBackName;
+				ProjectInfo.pWindowInfo[WndInfoNum].CallBackName=names->CallBackName;
+				names->CallBackName=temporary;
+			}
+			else{
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			}
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			break;
+		case RAD_UNDO_CAPTION:
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].caption;
+				ProjectInfo.pWindowInfo[WndInfoNum].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			}
+			else{
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			}
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_FONT:
+			LOGFONT *pLogFont,lf;
+			pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
+			lf=ProjectInfo.pWindowInfo[WndInfoNum].LogFont;
+			ProjectInfo.pWindowInfo[WndInfoNum].LogFont=*pLogFont;
+			*pLogFont=lf;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_BGCOLOR:
+			dw=ProjectInfo.pWindowInfo[WndInfoNum].bgColor;
+			ProjectInfo.pWindowInfo[WndInfoNum].bgColor=pUndoState->lpdwData[pUndoState->NowPos];
+			pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_WINDOWMENU:
+			temporary=ProjectInfo.pWindowInfo[WndInfoNum].MenuID;
+			ProjectInfo.pWindowInfo[WndInfoNum].MenuID=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			break;
+		case RAD_UNDO_ICONRES:
+			temporary=ProjectInfo.pWindowInfo[WndInfoNum].IconResName;
+			ProjectInfo.pWindowInfo[WndInfoNum].IconResName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			break;
+		case RAD_UNDO_STYLE:
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				dw=ProjectInfo.pWindowInfo[WndInfoNum].style;
+				ProjectInfo.pWindowInfo[WndInfoNum].style=pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			}
+			else{
+				dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style=pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			}
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_EXSTYLE:
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				dw=ProjectInfo.pWindowInfo[WndInfoNum].ExStyle;
+				ProjectInfo.pWindowInfo[WndInfoNum].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			}
+			else{
+				dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			}
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_POSITION:
+			POINTANDSIZE PointAndSize,*pReadPointAndSize;
+			pReadPointAndSize=(POINTANDSIZE *)pUndoState->lpdwData[pUndoState->NowPos];
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				PointAndSize.size=ProjectInfo.pWindowInfo[WndInfoNum].size;
+				ProjectInfo.pWindowInfo[WndInfoNum].size=pReadPointAndSize->size;
+			}
+			else{
+				PointAndSize.pos=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].pos;
+				PointAndSize.size=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].size;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].pos=pReadPointAndSize->pos;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].size=pReadPointAndSize->size;
+			}
+			*pReadPointAndSize=PointAndSize;
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			SetStatusText(NULL);
+
+			//サポートダイアログの内容をセット
+			SetSupportDlgData(WndNum,WndInfoNum);
+			break;
+		case RAD_UNDO_IMAGESTATE:
+			IMAGECTRLINFO *pImageCtrlInfo;
+			pImageCtrlInfo=(IMAGECTRLINFO *)pUndoState->lpdwData[pUndoState->NowPos];
+
+			dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type;
+			ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type=pImageCtrlInfo->type;
+			pImageCtrlInfo->type=dw;
+
+			dw=(DWORD)ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path;
+			ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path=pImageCtrlInfo->path;
+			pImageCtrlInfo->path=(char *)dw;
+
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_TYPE:
+			dw=ProjectInfo.pWindowInfo[WndInfoNum].type;
+			ProjectInfo.pWindowInfo[WndInfoNum].type=pUndoState->lpdwData[pUndoState->NowPos];
+			pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			break;
+	}
+
+	ProjectInfo.ModifyOfMaterial=1;
+
+	ResetState_UndoMenu();
+}
+void Rad_RedoCommand(int WndNum){
+	extern HINSTANCE hInst;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int WndInfoNum;
+	DWORD dw;
+	char *temporary;
+	RAD_UNDOSTATE *pUndoState;
+	CHILDINFO *pChildInfo;
+	RECT rect;
+
+	pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
+	if(!pUndoState->Command[pUndoState->NowPos]){
+		MessageBeep(0);
+		return;
+	}
+
+	WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+	switch(pUndoState->Command[pUndoState->NowPos]){
+		case RAD_UNDO_INSERTITEM:
+			pChildInfo=(CHILDINFO *)pUndoState->lpdwData[pUndoState->NowPos];
+			rect.left=pChildInfo->pos.x;
+			rect.top=pChildInfo->pos.y;
+			rect.right=pChildInfo->pos.x+pChildInfo->size.cx;
+			rect.bottom=pChildInfo->pos.y+pChildInfo->size.cy;
+			InsertDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],
+				&pChildInfo->pos,&pChildInfo->size,
+				pChildInfo->IdName,pChildInfo->caption,pChildInfo->style,pChildInfo->ExStyle,pChildInfo->Control,pChildInfo->ImageCtrlInfo.type,pChildInfo->ImageCtrlInfo.path,0);
+			break;
+		case RAD_UNDO_DELETEITEM:
+			DeleteDlgItem(WndNum,WndInfoNum,pUndoState->SelectItemNum[pUndoState->NowPos],0);
+			MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]=-1;
+			break;
+		case RAD_UNDO_NAME:
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				RAD_UNDOSTATE_NAME *names;
+				names=(RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pUndoState->NowPos];
+
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].name;
+				ProjectInfo.pWindowInfo[WndInfoNum].name=names->name;
+				names->name=temporary;
+				GlobalFree(MdiInfo[WndNum].path);
+				MdiInfo[WndNum].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(ProjectInfo.pWindowInfo[WndInfoNum].name)+1);
+				lstrcpy(MdiInfo[WndNum].path,ProjectInfo.pWindowInfo[WndInfoNum].name);
+
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].HandleName;
+				ProjectInfo.pWindowInfo[WndInfoNum].HandleName=names->HandleName;
+				names->HandleName=temporary;
+
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].CallBackName;
+				ProjectInfo.pWindowInfo[WndInfoNum].CallBackName=names->CallBackName;
+				names->CallBackName=temporary;
+			}
+			else{
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].IdName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			}
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			break;
+		case RAD_UNDO_CAPTION:
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].caption;
+				ProjectInfo.pWindowInfo[WndInfoNum].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			}
+			else{
+				temporary=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].caption=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			}
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_FONT:
+			LOGFONT *pLogFont,lf;
+			pLogFont=(LOGFONT *)pUndoState->lpdwData[pUndoState->NowPos];
+			lf=ProjectInfo.pWindowInfo[WndInfoNum].LogFont;
+			ProjectInfo.pWindowInfo[WndInfoNum].LogFont=*pLogFont;
+			*pLogFont=lf;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_BGCOLOR:
+			dw=ProjectInfo.pWindowInfo[WndInfoNum].bgColor;
+			ProjectInfo.pWindowInfo[WndInfoNum].bgColor=pUndoState->lpdwData[pUndoState->NowPos];
+			pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_WINDOWMENU:
+			temporary=ProjectInfo.pWindowInfo[WndInfoNum].MenuID;
+			ProjectInfo.pWindowInfo[WndInfoNum].MenuID=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			break;
+		case RAD_UNDO_ICONRES:
+			temporary=ProjectInfo.pWindowInfo[WndInfoNum].IconResName;
+			ProjectInfo.pWindowInfo[WndInfoNum].IconResName=(char *)pUndoState->lpdwData[pUndoState->NowPos];
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temporary;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			break;
+		case RAD_UNDO_STYLE:
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				dw=ProjectInfo.pWindowInfo[WndInfoNum].style;
+				ProjectInfo.pWindowInfo[WndInfoNum].style=pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			}
+			else{
+				dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].style=pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			}
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_EXSTYLE:
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				dw=ProjectInfo.pWindowInfo[WndInfoNum].ExStyle;
+				ProjectInfo.pWindowInfo[WndInfoNum].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			}
+			else{
+				dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ExStyle=pUndoState->lpdwData[pUndoState->NowPos];
+				pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			}
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_POSITION:
+			POINTANDSIZE PointAndSize,*pReadPointAndSize;
+			pReadPointAndSize=(POINTANDSIZE *)pUndoState->lpdwData[pUndoState->NowPos];
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==SELECT_WINDOW){
+				PointAndSize.size=ProjectInfo.pWindowInfo[WndInfoNum].size;
+				ProjectInfo.pWindowInfo[WndInfoNum].size=pReadPointAndSize->size;
+			}
+			else{
+				PointAndSize.pos=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].pos;
+				PointAndSize.size=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].size;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].pos=pReadPointAndSize->pos;
+				ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].size=pReadPointAndSize->size;
+			}
+			*pReadPointAndSize=PointAndSize;
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			SetStatusText(NULL);
+
+			//サポートダイアログの内容をセット
+			SetSupportDlgData(WndNum,WndInfoNum);
+			break;
+		case RAD_UNDO_IMAGESTATE:
+			IMAGECTRLINFO *pImageCtrlInfo;
+			pImageCtrlInfo=(IMAGECTRLINFO *)pUndoState->lpdwData[pUndoState->NowPos];
+
+			dw=ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type;
+			ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.type=pImageCtrlInfo->type;
+			pImageCtrlInfo->type=dw;
+
+			dw=(DWORD)ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path;
+			ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[pUndoState->SelectItemNum[pUndoState->NowPos]].ImageCtrlInfo.path=pImageCtrlInfo->path;
+			pImageCtrlInfo->path=(char *)dw;
+
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[WndInfoNum]);
+			break;
+		case RAD_UNDO_TYPE:
+			dw=ProjectInfo.pWindowInfo[WndInfoNum].type;
+			ProjectInfo.pWindowInfo[WndInfoNum].type=pUndoState->lpdwData[pUndoState->NowPos];
+			pUndoState->lpdwData[pUndoState->NowPos]=dw;
+			if(pUndoState->SelectItemNum[pUndoState->NowPos]==MdiInfo[WndNum].MdiRadInfo->SelectingItem[0])
+				ChangePropertyWindow(WndNum,WndInfoNum);
+			break;
+	}
+
+	pUndoState->NowPos++;
+	if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
+
+	ProjectInfo.ModifyOfMaterial=1;
+
+	ResetState_UndoMenu();
+}
+void Rad_DeleteUndoData(int WndNum,int pos){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	RAD_UNDOSTATE *pUndoState;
+
+	pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
+	switch(pUndoState->Command[pos]){
+		case RAD_UNDO_INSERTITEM:
+		case RAD_UNDO_DELETEITEM:
+			CHILDINFO *pChildInfo;
+			pChildInfo=(CHILDINFO *)pUndoState->lpdwData[pos];
+			HeapDefaultFree(pChildInfo->IdName);
+			HeapDefaultFree(pChildInfo->caption);
+			if(pChildInfo->Control==CT_IMAGEBOX){
+				//イメージ ボックスの場合
+				HeapDefaultFree(pChildInfo->ImageCtrlInfo.path);
+			}
+			HeapDefaultFree(pChildInfo);
+			break;
+		case RAD_UNDO_NAME:
+			if(pUndoState->SelectItemNum[pos]==SELECT_WINDOW){
+				RAD_UNDOSTATE_NAME *names;
+				names=(RAD_UNDOSTATE_NAME *)pUndoState->lpdwData[pos];
+				HeapDefaultFree(names->name);
+				HeapDefaultFree(names->HandleName);
+				HeapDefaultFree(names->CallBackName);
+				HeapDefaultFree(names);
+			}
+			else HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
+			break;
+		case RAD_UNDO_CAPTION:
+			HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
+			break;
+		case RAD_UNDO_FONT:
+			HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
+			break;
+		case RAD_UNDO_WINDOWMENU:
+			if(pUndoState->lpdwData[pos])
+				HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
+			break;
+		case RAD_UNDO_ICONRES:
+			if(pUndoState->lpdwData[pos])
+				HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
+			break;
+		case RAD_UNDO_POSITION:
+			HeapDefaultFree((void *)pUndoState->lpdwData[pos]);
+			break;
+		case RAD_UNDO_IMAGESTATE:
+			IMAGECTRLINFO *pImageCtrlInfo;
+			pImageCtrlInfo=(IMAGECTRLINFO *)pUndoState->lpdwData[pos];
+			HeapDefaultFree(pImageCtrlInfo->path);
+			HeapDefaultFree(pImageCtrlInfo);
+			break;
+	}
+	pUndoState->Command[pos]=0;
+}
+void Rad_NoticeChanging(int WndNum,int Command,int SelectItemNum,DWORD dwData){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	char *temporary,*temp2;
+	RAD_UNDOSTATE *pUndoState;
+
+	pUndoState=&MdiInfo[WndNum].MdiRadInfo->undo;
+
+	//Redoされた場合の不要なデータを削除する
+	for(i=pUndoState->NowPos;;i++){
+		if(i==MAX_UNDONUM) i=0;
+		if(pUndoState->Command[i]==0) break;
+		Rad_DeleteUndoData(WndNum,i);
+	}
+
+	pUndoState->Command[pUndoState->NowPos]=Command;
+	pUndoState->SelectItemNum[pUndoState->NowPos]=SelectItemNum;
+	switch(Command){
+		case RAD_UNDO_INSERTITEM:
+		case RAD_UNDO_DELETEITEM:
+			CHILDINFO *pChildInfo,*pSaveChildInfo;
+			pChildInfo=(CHILDINFO *)dwData;
+			pSaveChildInfo=(CHILDINFO *)HeapAlloc(hHeap,0,sizeof(CHILDINFO));
+			pSaveChildInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->IdName)+1);
+			lstrcpy(pSaveChildInfo->IdName,pChildInfo->IdName);
+			pSaveChildInfo->pos=pChildInfo->pos;
+			pSaveChildInfo->size=pChildInfo->size;
+			pSaveChildInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->caption)+1);
+			lstrcpy(pSaveChildInfo->caption,pChildInfo->caption);
+			pSaveChildInfo->style=pChildInfo->style;
+			pSaveChildInfo->ExStyle=pChildInfo->ExStyle;
+			pSaveChildInfo->Control=pChildInfo->Control;
+			if(pChildInfo->Control==CT_IMAGEBOX){
+				//イメージ ボックスの場合
+				pSaveChildInfo->ImageCtrlInfo.type=pChildInfo->ImageCtrlInfo.type;
+				pSaveChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,0,lstrlen(pChildInfo->ImageCtrlInfo.path)+1);
+				lstrcpy(pSaveChildInfo->ImageCtrlInfo.path,pChildInfo->ImageCtrlInfo.path);
+			}
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveChildInfo;
+			break;
+		case RAD_UNDO_NAME:
+			if(SelectItemNum==SELECT_WINDOW){
+				RAD_UNDOSTATE_NAME *names,*SaveNames;
+				names=(RAD_UNDOSTATE_NAME *)dwData;
+				SaveNames=(RAD_UNDOSTATE_NAME *)HeapAlloc(hHeap,0,sizeof(RAD_UNDOSTATE_NAME));
+				SaveNames->name=(char *)HeapAlloc(hHeap,0,lstrlen(names->name)+1);
+				lstrcpy(SaveNames->name,names->name);
+				SaveNames->HandleName=(char *)HeapAlloc(hHeap,0,lstrlen(names->HandleName)+1);
+				lstrcpy(SaveNames->HandleName,names->HandleName);
+				SaveNames->CallBackName=(char *)HeapAlloc(hHeap,0,lstrlen(names->CallBackName)+1);
+				lstrcpy(SaveNames->CallBackName,names->CallBackName);
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)SaveNames;
+			}
+			else{
+				temporary=(char *)dwData;
+				temp2=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+				lstrcpy(temp2,temporary);
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temp2;
+			}
+			break;
+		case RAD_UNDO_CAPTION:
+			temporary=(char *)dwData;
+			temp2=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+			lstrcpy(temp2,temporary);
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temp2;
+			break;
+		case RAD_UNDO_FONT:
+			LOGFONT *pLogFont,*pSaveLogFont;
+			pLogFont=(LOGFONT *)dwData;
+			pSaveLogFont=(LOGFONT *)HeapAlloc(hHeap,0,sizeof(LOGFONT));
+			*pSaveLogFont=*pLogFont;
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveLogFont;
+			break;
+		case RAD_UNDO_BGCOLOR:
+			pUndoState->lpdwData[pUndoState->NowPos]=dwData;
+			break;
+		case RAD_UNDO_WINDOWMENU:
+		case RAD_UNDO_ICONRES:
+			if(!dwData) pUndoState->lpdwData[pUndoState->NowPos]=0;
+			else{
+				temporary=(char *)dwData;
+				temp2=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+				lstrcpy(temp2,temporary);
+				pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)temp2;
+			}
+			break;
+		case RAD_UNDO_STYLE:
+		case RAD_UNDO_EXSTYLE:
+			pUndoState->lpdwData[pUndoState->NowPos]=dwData;
+			break;
+		case RAD_UNDO_POSITION:
+			POINTANDSIZE *pPointAndSize,*pSavePointAndSize;
+			pPointAndSize=(POINTANDSIZE *)dwData;
+			pSavePointAndSize=(POINTANDSIZE *)HeapAlloc(hHeap,0,sizeof(POINTANDSIZE));
+			pSavePointAndSize->pos=pPointAndSize->pos;
+			pSavePointAndSize->size=pPointAndSize->size;
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSavePointAndSize;
+			break;
+		case RAD_UNDO_IMAGESTATE:
+			IMAGECTRLINFO *pImageCtrlInfo,*pSaveImageCtrlInfo;
+			pImageCtrlInfo=(IMAGECTRLINFO *)dwData;
+			pSaveImageCtrlInfo=(IMAGECTRLINFO *)HeapAlloc(hHeap,0,sizeof(IMAGECTRLINFO));
+			pSaveImageCtrlInfo->type=pImageCtrlInfo->type;
+			pSaveImageCtrlInfo->path=(char *)HeapAlloc(hHeap,0,lstrlen(pImageCtrlInfo->path)+1);
+			lstrcpy(pSaveImageCtrlInfo->path,pImageCtrlInfo->path);
+			pUndoState->lpdwData[pUndoState->NowPos]=(DWORD)pSaveImageCtrlInfo;
+			break;
+		case RAD_UNDO_TYPE:
+			pUndoState->lpdwData[pUndoState->NowPos]=dwData;
+			break;
+	}
+
+	pUndoState->NowPos++;
+	if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
+	if(pUndoState->Command[pUndoState->NowPos]){
+		//一番古い情報を切り捨てる
+		Rad_DeleteUndoData(WndNum,pUndoState->NowPos);
+	}
+
+	extern PROJECTINFO ProjectInfo;
+	ProjectInfo.ModifyOfMaterial=1;
+
+	ResetState_UndoMenu();
+}
Index: /ProjectEditor/Replace.cpp
===================================================================
--- /ProjectEditor/Replace.cpp	(revision 3)
+++ /ProjectEditor/Replace.cpp	(revision 3)
@@ -0,0 +1,490 @@
+#include "common.h"
+
+void TextEdit_ResetWordColor(int WndNum,CHARRANGE *pCharRange,int DocType){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2,IsStr;
+	char *pBuf,*pTemp;
+	CHARRANGE Range,cr2;
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	//行の先頭位置を取得
+	i=pCharRange->cpMin;
+	for(;i>0;i--){
+		if(pBuf[i-1]=='\r'&&pBuf[i]=='\n'){
+			i++;
+			break;
+		}
+	}
+	Range.cpMin=i;
+
+	//行の末端位置を取得
+	i=pCharRange->cpMax;
+	for(;;i++){
+		if(pBuf[i]=='\0') break;
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n') break;
+	}
+	Range.cpMax=i;
+
+	//初期化（すべて黒色に戻す）
+	for(i=Range.cpMin;i<Range.cpMax;i++){
+		MdiInfo[WndNum].pmti->pColorRef[i]=tci.rgbDefault;
+	}
+
+	if(DocType==WNDTYPE_TEXT) return;
+
+	if(!bProfessional){
+		//Standard版ではHTMLタグの色分け機能を排除
+		if(DocType==WNDTYPE_HTML) return;
+	}
+
+	pTemp=(char *)HeapAlloc(hHeap,0,Range.cpMax-Range.cpMin+1);
+
+	for(i=Range.cpMin,IsStr=0;i<Range.cpMax;i++){
+		if((IsVariableTopChar(pBuf[i])||pBuf[i]=='#')&&IsStr==0){
+			cr2.cpMin=i;
+			for(i2=0;;i++,i2++){
+				if((!IsVariableChar(pBuf[i]))||pBuf[i]=='.'){
+					pTemp[i2]=0;
+					break;
+				}
+				pTemp[i2]=pBuf[i];
+			}
+			cr2.cpMax=i;
+
+			//予約語（青色）
+			BOOL bResult=0;
+			if(DocType==WNDTYPE_BASIC){
+				i2=IsBasicReservedWord(pTemp);
+				bResult=IsManagementCommand(i2);
+			}
+			else if(DocType==WNDTYPE_HTML) bResult=IsHtmlReservedWord(pTemp);
+
+			if(bResult){
+				for(i2=cr2.cpMin;i2<cr2.cpMax;i2++){
+					MdiInfo[WndNum].pmti->pColorRef[i2]=tci.rgbStatement;
+				}
+			}
+		}
+		if(IsStr||pBuf[i]=='\"'&&IsStr==0){
+			//文字列カラー（""で囲まれる範囲）
+			MdiInfo[WndNum].pmti->pColorRef[i]=tci.rgbString;
+		}
+		if(pBuf[i]=='\0') break;
+		if(pBuf[i]=='\"') IsStr^=1;
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+			i++;
+			IsStr=0;
+		}
+	}
+
+	HeapDefaultFree(pTemp);
+}
+
+void TextEdit_Replace(int WndNum,char *str,BOOL bRedraw){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	CHARRANGE Range,DelRange;
+
+	TextEdit_GetSel(WndNum,&DelRange);
+
+	Range.cpMin=DelRange.cpMin;
+	Range.cpMax=DelRange.cpMin+lstrlen(str);
+
+	//バッファ長を取得
+	int length;
+	length=lstrlen(MdiInfo[WndNum].pmti->buffer);
+
+	int delta;
+	delta=DelRange.cpMin-DelRange.cpMax+(Range.cpMax-Range.cpMin);
+	if(0<delta){
+		////////////////////
+		// バッファを再確保
+		////////////////////
+
+		MdiInfo[WndNum].pmti->buffer=(char *)HeapReAlloc(hHeap,
+			0,
+			MdiInfo[WndNum].pmti->buffer,
+			length+1+delta);
+
+		MdiInfo[WndNum].pmti->pColorRef=(COLORREF *)HeapReAlloc(hHeap,
+			0,
+			MdiInfo[WndNum].pmti->pColorRef,
+			(length+1+delta)*sizeof(COLORREF));
+	}
+
+
+	//ブレークポイントのオフセット分を計算
+	if(ProjectInfo.name[0]){
+		ProjectInfo.pobj_DBBreakPoint->replace(
+			MdiInfo[WndNum].path,
+			MdiInfo[WndNum].pmti->buffer,
+			&DelRange,
+			&Range,
+			str);
+	}
+	else{
+		extern CDBBreakPoint *pobj_DBBreakPoint;
+		pobj_DBBreakPoint->replace(
+			MdiInfo[WndNum].path,
+			MdiInfo[WndNum].pmti->buffer,
+			&DelRange,
+			&Range,
+			str);
+	}
+
+
+	//文字列バッファをスライドして、挿入
+	SlideString(MdiInfo[WndNum].pmti->buffer+DelRange.cpMax,
+		delta);
+	memcpy(MdiInfo[WndNum].pmti->buffer+Range.cpMin,str,lstrlen(str));
+
+	//文字カラーバッファをスライド
+	SlideBuffer(((char *)MdiInfo[WndNum].pmti->pColorRef)+DelRange.cpMax*sizeof(COLORREF),
+		(length-DelRange.cpMax) * sizeof(COLORREF),
+		delta*sizeof(COLORREF));
+	//色づけ
+	TextEdit_ResetWordColor(WndNum,&Range,MdiInfo[WndNum].DocType);
+
+	//新しいキャレット位置に変更
+	GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+		Range.cpMax,
+		&MdiInfo[WndNum].pmti->StartCaretPos);
+	MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+
+	//コントロールタブスペースの幅と行番号の文字数を更新
+	MdiInfo[WndNum].pmti->iWidth_ControlTabSpace=
+		GetControlTabSpace(WndNum,&MdiInfo[WndNum].pmti->iLineNumberTextCount);
+
+	if(bRedraw){
+		///////////////
+		// 再描画
+		///////////////
+
+		if(!TextEdit_ScrollCaret(WndNum,0)){
+			UpdateWindow(MdiInfo[WndNum].pmti->hEdit);	//ちらつき防止
+			InvalidateRect(MdiInfo[WndNum].pmti->hEdit,NULL,0);
+		}
+
+		ResetCaretPos(WndNum,1);
+	}
+
+	//上下キャレット移動時の左右位置保持機能を解除
+	MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=-1;
+
+	//編集メニューをリセット
+	ResetState_EditMenu();
+
+	//変更フラグをセット
+	MdiInfo[WndNum].pmti->bModify=1;
+
+
+	if(ProjectInfo.name[0]){
+		//プロジェクトが開かれているとき
+		if(MdiInfo[WndNum].DocType==WNDTYPE_BASIC){
+			//クラスツリーを再表示
+			ResetClassTree(GetFileNum(WndNum));
+		}
+	}
+}
+void TextEdit_ReplaceUpdateUndoData(int WndNum,char *str,BOOL bPaste,BOOL bRedraw){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int Command;
+	char *KeyStr,*DelStr;
+	char temporary[255];
+	CHARRANGE Range,DelRange;
+
+	if(MdiInfo[WndNum].IndentStr){
+		//自動インデントを有効にする
+		lstrcpy(temporary,MdiInfo[WndNum].IndentStr);
+
+		CancelBeforeAutoIndent(WndNum);
+		TextEdit_ReplaceUpdateUndoData(WndNum,temporary,0,1);
+	}
+
+	TextEdit_GetSel(WndNum,&DelRange);
+	if(DelRange.cpMin!=DelRange.cpMax){
+		Command=TEXTEDIT_UNDO_SELKEY;
+		DelStr=(char *)HeapAlloc(hHeap,0,DelRange.cpMax-DelRange.cpMin+1);
+
+		TextEdit_GetSelText(WndNum,&DelRange,DelStr);
+
+		Range.cpMin=DelRange.cpMin;
+		Range.cpMax=DelRange.cpMin;
+	}
+	else{
+		if(bPaste) Command=TEXTEDIT_UNDO_PASTE;
+		else Command=TEXTEDIT_UNDO_KEY;
+		DelStr=0;
+
+		Range=DelRange;
+	}
+	if(str[0]){
+		KeyStr=(char *)HeapAlloc(hHeap,0,lstrlen(str)+1);
+		lstrcpy(KeyStr,str);
+		Range.cpMax+=lstrlen(KeyStr);
+	}
+	else KeyStr=0;
+	TextEdit_NoticeChanging(WndNum,Command,KeyStr,DelStr,&Range,&DelRange);
+
+	TextEdit_Replace(WndNum,str,bRedraw);
+}
+
+
+void TextEdit_Convert(int id){
+	int i,i2;
+
+	int WndNum;
+	WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+	CHARRANGE CharRange;
+	int length;
+	TextEdit_GetSel(WndNum,&CharRange);
+
+#ifdef THETEXT
+	if(id==IDM_CONV_HASRETURN||id==IDM_CONV_QUOTE){
+#else
+	if(id==IDM_CODEFORMAT){
+#endif
+		char *pBuf;
+		pBuf=MdiInfo[WndNum].pmti->buffer;
+
+		//行全体を選択(min)
+		for(i=CharRange.cpMin;i>0;i--){
+			if(pBuf[i-1]=='\r'&&pBuf[i]=='\n'){
+				i++;
+				break;
+			}
+		}
+		CharRange.cpMin=i;
+
+		//行全体を選択(max)
+		for(i=CharRange.cpMax;;i++){
+			if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'||pBuf[i]=='\0') break;
+		}
+		CharRange.cpMax=i;
+
+		TextEdit_SetSel(WndNum,CharRange.cpMin,CharRange.cpMax,0);
+	}
+
+	length=CharRange.cpMax-CharRange.cpMin;
+
+	char *buffer,*temporary;
+	buffer=(char *)HeapAlloc(hHeap,0,length*3+1024);
+	temporary=(char *)HeapAlloc(hHeap,0,length*3+1024);
+	memcpy(buffer,MdiInfo[WndNum].pmti->buffer+CharRange.cpMin,length);
+	buffer[length]=0;
+
+	int x=0;
+	switch(id){
+		case IDM_CONV_ALPHA_SMALL:
+			CharLower(buffer);
+			break;
+		case IDM_CONV_ALPHA_BIG:
+			CharUpper(buffer);
+			break;
+		case IDM_CONV_HALF:
+			LCMapString(GetUserDefaultLCID(),LCMAP_HALFWIDTH,buffer,length+1,temporary,length*2+1);
+			lstrcpy(buffer,temporary);
+			break;
+		case IDM_CONV_MULTI:
+			LCMapString(GetUserDefaultLCID(),LCMAP_FULLWIDTH,buffer,length+1,temporary,length*2+1);
+			lstrcpy(buffer,temporary);
+			break;
+		case IDM_CONV_KATAKANA:
+			LCMapString(GetUserDefaultLCID(),LCMAP_KATAKANA,buffer,length+1,temporary,length*2+1);
+			lstrcpy(buffer,temporary);
+			break;
+		case IDM_CONV_HIRAGANA:
+			LCMapString(GetUserDefaultLCID(),LCMAP_HIRAGANA,buffer,length+1,temporary,length*2+1);
+			lstrcpy(buffer,temporary);
+			break;
+		case IDM_CONV_SPACE:
+			temporary=(char *)HeapReAlloc(hHeap,0,temporary,length*pobj_nv->TabSize+1);
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,length*pobj_nv->TabSize+1);
+			for(i=0,i2=0;;i++,i2++){
+				if(buffer[i]=='\t'){
+					memset(temporary+i2,' ',pobj_nv->TabSize);
+					i2+=pobj_nv->TabSize-1;
+					continue;
+				}
+				temporary[i2]=buffer[i];
+				if(buffer[i]=='\0') break;
+			}
+
+			lstrcpy(buffer,temporary);
+			break;
+		case IDM_CONV_TAB:
+			char szSpaceTemp[255];
+			memset(szSpaceTemp,' ',pobj_nv->TabSize);
+			szSpaceTemp[pobj_nv->TabSize]=0;
+
+			for(i=0,i2=0;;i++,i2++){
+				if(memcmp(buffer+i,szSpaceTemp,pobj_nv->TabSize)==0){
+					temporary[i2]='\t';
+					i+=pobj_nv->TabSize-1;
+					continue;
+				}
+				temporary[i2]=buffer[i];
+				if(buffer[i]=='\0') break;
+			}
+
+			lstrcpy(buffer,temporary);
+			break;
+
+#ifdef THETEXT
+		case IDM_CONV_HASRETURN:
+			//折り返し改行を挿入
+			int i3;
+			for(i=0,i2=0,x=0;;i++,i2++,x++){
+				if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
+					temporary[i2++]=buffer[i++];
+					temporary[i2]=buffer[i];
+					x=-1;
+					continue;
+				}
+				if(x>pobj_nv->iMaxOneLineTextLength-2){
+					//自動改行（英単語を考慮）
+					int i3=0;
+					while(IsVariableChar(buffer[i-1])){
+						i--;
+						i2--;
+						x--;
+						i3++;
+						if(x==1){
+							i+=i3;
+							i2+=i3;
+							x+=i3;
+							break;
+						}
+					}
+					if(i3==1){
+						i++;
+						i2++;
+						x++;
+					}
+					temporary[i2++]='\r';
+					temporary[i2]='\n';
+					i--;
+					x=-1;
+					continue;
+				}
+
+				if(IsDBCSLeadByte(buffer[i])){
+					temporary[i2++]=buffer[i++];
+					temporary[i2]=buffer[i];
+					x++;
+				}
+				else{
+					temporary[i2]=buffer[i];
+
+					if(buffer[i]=='\t'){
+						//タブ文字
+						int tab;
+						tab=pobj_nv->TabSize;
+
+						if(x%tab==0) i3=tab;
+						else i3=tab-x%tab;
+						x+=i3-1;
+					}
+				}
+
+				if(buffer[i]=='\0') break;
+			}
+
+			lstrcpy(buffer,temporary);
+			break;
+		case IDM_CONV_QUOTE:
+			//引用文に変換
+			for(i=0,i2=0,x=0;;i++,i2++,x++){
+				if(x==0){
+					//"> " を挿入
+					temporary[i2++]='>';
+					temporary[i2++]=' ';
+				}
+				if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
+					temporary[i2++]=buffer[i++];
+					temporary[i2]=buffer[i];
+					x=-1;
+					continue;
+				}
+				if(x>pobj_nv->iMaxOneLineTextLength-4){
+					//自動改行（英単語を考慮）
+					int i3=0;
+					while(IsVariableChar(buffer[i-1])){
+						i--;
+						i2--;
+						x--;
+						i3++;
+						if(x==1){
+							i+=i3;
+							i2+=i3;
+							x+=i3;
+							break;
+						}
+					}
+					if(i3==1){
+						i++;
+						i2++;
+						x++;
+					}
+					temporary[i2++]='\r';
+					temporary[i2]='\n';
+					i--;
+					x=-1;
+					continue;
+				}
+
+				if(IsDBCSLeadByte(buffer[i])){
+					temporary[i2++]=buffer[i++];
+					temporary[i2]=buffer[i];
+					x++;
+				}
+				else{
+					temporary[i2]=buffer[i];
+					if(buffer[i]=='\t'){
+						//タブ文字
+						int tab;
+						tab=pobj_nv->TabSize;
+
+						if(x%tab==0) i3=tab;
+						else i3=tab-x%tab;
+						x+=i3-1;
+					}
+				}
+
+				if(buffer[i]=='\0') break;
+			}
+
+			lstrcpy(buffer,temporary);
+			break;
+
+#else	//ProjectEditor
+
+		case IDM_CODEFORMAT:
+			char *temp2;
+			temp2=CodeFormatter(buffer);
+			HeapDefaultFree(buffer);
+			buffer=temp2;
+			break;
+
+#endif
+	}
+
+
+
+	//テキストエディタの文字列をリプレイス
+	TextEdit_ReplaceUpdateUndoData(WndNum,
+		buffer,
+		1,
+		1);
+
+	HeapDefaultFree(buffer);
+	HeapDefaultFree(temporary);
+
+	//キャレット位置までスクロールする
+	TextEdit_ScrollCaret(WndNum,0);
+	ResetCaretPos(WndNum);
+}
Index: /ProjectEditor/Resource.cpp
===================================================================
--- /ProjectEditor/Resource.cpp	(revision 3)
+++ /ProjectEditor/Resource.cpp	(revision 3)
@@ -0,0 +1,529 @@
+#include "common.h"
+
+#if defined(JPN)
+//日本語
+#include "pj_msg_jpn.h"
+#else
+//英語
+#include "pj_msg_eng.h"
+#endif
+
+void GetResourceData(void){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i2,i3;
+	char *buffer,temporary[MAX_PATH],temp2[MAX_PATH],temp3[MAX_PATH];
+	HANDLE hFile;
+
+	lstrcpy(temporary,ProjectInfo.ResourceFileName);
+	GetFullPath(temporary,ProjectInfo.dir);
+
+	hFile=CreateFile(temporary,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE) return;
+	i2=GetFileSize(hFile,NULL);
+	buffer=(char *)HeapAlloc(hHeap,0,i2+i2+1);
+	ReadFile(hFile,buffer,i2,(DWORD *)&i3,NULL);
+	CloseHandle(hFile);
+	buffer[i3]=0;
+	ChangeReturnCode(buffer);
+
+	i2=0;
+	while(1){
+		//ID
+		while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+		for(i3=0;;i2++,i3++){
+			if(!IsVariableChar(buffer[i2])){
+				temp3[i3]=0;
+				break;
+			}
+			temp3[i3]=buffer[i2];
+		}
+		if(temp3[0]=='\0') break;
+
+		//Type
+		while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+		for(i3=0;;i2++,i3++){
+			if(!IsVariableChar(buffer[i2])){
+				temporary[i3]=0;
+				break;
+			}
+			temporary[i3]=buffer[i2];
+		}
+
+		//FileName
+		while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+		if(buffer[i2]!='\"'){
+			//エラー
+			return;
+		}
+		for(i2++,i3=0;;i2++,i3++){
+			if(buffer[i2]=='\"'){
+				temp2[i3]=0;
+				break;
+			}
+			temp2[i3]=buffer[i2];
+		}
+
+		if(lstrcmpi(temporary,"CURSOR")==0){
+			ProjectInfo.res.pCursorResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,ProjectInfo.res.pCursorResInfo,(ProjectInfo.res.NumberOfCursorRes+1)*sizeof(RESITEMINFO));
+
+			ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].IdName=
+				(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+			lstrcpy(ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].IdName,temp3);
+
+			ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].path=
+				(char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
+			lstrcpy(ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].path,temp2);
+
+			ProjectInfo.res.NumberOfCursorRes++;
+		}
+		else if(lstrcmpi(temporary,"BITMAP")==0){
+			ProjectInfo.res.pBitmapResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,ProjectInfo.res.pBitmapResInfo,(ProjectInfo.res.NumberOfBitmapRes+1)*sizeof(RESITEMINFO));
+
+			ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].IdName=
+				(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+			lstrcpy(ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].IdName,temp3);
+
+			ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].path=
+				(char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
+			lstrcpy(ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].path,temp2);
+
+			ProjectInfo.res.NumberOfBitmapRes++;
+		}
+		else if(lstrcmpi(temporary,"ICON")==0){
+			ProjectInfo.res.pIconResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,ProjectInfo.res.pIconResInfo,(ProjectInfo.res.NumberOfIconRes+1)*sizeof(RESITEMINFO));
+
+			ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].IdName=
+				(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+			lstrcpy(ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].IdName,temp3);
+
+			ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].path=
+				(char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
+			lstrcpy(ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].path,temp2);
+
+			ProjectInfo.res.NumberOfIconRes++;
+		}
+		else if(lstrcmpi(temporary,"RT_MANIFEST")==0){
+			//無視
+		}
+		else{
+			//エラー
+			return;
+		}
+
+		i2++;
+		while(buffer[i2]==' '||buffer[i2]=='\t') i2++;
+		if(buffer[i2]=='\0') break;
+		else if(buffer[i2]!='\n'){
+			//エラー
+			return;
+		}
+		i2++;
+	}
+
+	//リソースが空の場合
+	if(ProjectInfo.res.NumberOfCursorRes==0&&
+		ProjectInfo.res.NumberOfBitmapRes==0&&
+		ProjectInfo.res.NumberOfIconRes==0)
+		ProjectInfo.ResourceFileName[0]=0;
+
+	HeapDefaultFree(buffer);
+}
+
+void Project_CursorResInsert(void){
+	extern HANDLE hHeap;
+	extern LPSTR CursorFileFilter;
+	extern PROJECTINFO ProjectInfo;
+	int i2,i3;
+	char temporary[MAX_PATH];
+
+	if(!ProjectInfo.ResourceFileName[0])
+		sprintf(ProjectInfo.ResourceFileName,"%s.rc",ProjectInfo.name);
+
+	//"カーソル ファイルを指定してください"
+	if(!GetFilePathDialog(hOwner,temporary,CursorFileFilter,STRING_FILEOPENTITLE_CURSOR,TRUE)) return;
+
+	GetRelationalPath(temporary,ProjectInfo.dir);
+
+	ProjectInfo.res.pCursorResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,ProjectInfo.res.pCursorResInfo,(ProjectInfo.res.NumberOfCursorRes+1)*sizeof(RESITEMINFO));
+
+	ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].path=
+		(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].path,temporary);
+
+	for(i3=1;;i3++){
+		sprintf(temporary,"IDC_CURSOR%d",i3);
+		for(i2=0;i2<ProjectInfo.res.NumberOfCursorRes;i2++){
+			if(lstrcmp(temporary,ProjectInfo.res.pCursorResInfo[i2].IdName)==0) break;
+		}
+		if(i2==ProjectInfo.res.NumberOfCursorRes) break;
+	}
+
+	ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].IdName=
+		(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].IdName,temporary);
+
+	//ツリービューに追加
+	extern HWND hMaterialTreeView;
+	TV_INSERTSTRUCT tv;
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.item.iImage=6;
+	tv.item.iSelectedImage=6;
+	tv.hParent=ProjectInfo.res.hCursorTreeItem;
+	tv.item.pszText=temporary;
+
+	ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].hTreeItem=
+		TreeView_InsertItem(hMaterialTreeView,&tv);
+
+	TreeView_SelectItem(hMaterialTreeView,ProjectInfo.res.pCursorResInfo[ProjectInfo.res.NumberOfCursorRes].hTreeItem);
+
+	ProjectInfo.res.NumberOfCursorRes++;
+	ProjectInfo.ModifuOfResource=1;
+}
+void Project_Cursor_Delete(int CursorInfoNum){
+	extern PROJECTINFO ProjectInfo;
+	int i;
+
+	//ツリービューから削除
+	extern HWND hMaterialTreeView;
+	TreeView_DeleteItem(hMaterialTreeView,ProjectInfo.res.pCursorResInfo[CursorInfoNum].hTreeItem);
+
+	//ProjectInfo.pCursorInfo構造体から削除
+	HeapDefaultFree(ProjectInfo.res.pCursorResInfo[CursorInfoNum].IdName);
+	HeapDefaultFree(ProjectInfo.res.pCursorResInfo[CursorInfoNum].path);
+	ProjectInfo.res.NumberOfCursorRes--;
+	for(i=CursorInfoNum;i<ProjectInfo.res.NumberOfCursorRes;i++)
+		ProjectInfo.res.pCursorResInfo[i]=ProjectInfo.res.pCursorResInfo[i+1];
+
+	ProjectInfo.ModifuOfResource=1;
+}
+void Project_Cursor_RenameID(int CursorInfoNum){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	extern char NewIdName[MAX_PATH];
+	extern HWND hMaterialTreeView;
+	int i2;
+	char temporary[MAX_PATH];
+	TVITEM tvItem;
+
+	if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,DlgProject_ResourceID_Input,(long)ProjectInfo.res.pCursorResInfo[CursorInfoNum].IdName)) return;
+
+	//重複チェック
+	for(i2=0;i2<ProjectInfo.res.NumberOfCursorRes;i2++){
+		if(i2==CursorInfoNum) continue;
+		if(lstrcmp(NewIdName,ProjectInfo.res.pCursorResInfo[i2].IdName)==0){
+			//"ID \"%s\" は既にプロジェクト内に存在します。"
+			sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
+			MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+	}
+
+	HeapDefaultFree(ProjectInfo.res.pCursorResInfo[CursorInfoNum].IdName);
+	ProjectInfo.res.pCursorResInfo[CursorInfoNum].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
+	lstrcpy(ProjectInfo.res.pCursorResInfo[CursorInfoNum].IdName,NewIdName);
+
+	tvItem.hItem=ProjectInfo.res.pCursorResInfo[CursorInfoNum].hTreeItem;
+	tvItem.mask=TVIF_TEXT;
+	tvItem.pszText=ProjectInfo.res.pCursorResInfo[CursorInfoNum].IdName;
+	tvItem.cchTextMax=lstrlen(ProjectInfo.res.pCursorResInfo[CursorInfoNum].IdName)+1;
+	TreeView_SetItem(hMaterialTreeView,&tvItem);
+
+	ProjectInfo.ModifuOfResource=1;
+
+	TreeView_SortChildren(hMaterialTreeView,
+		TreeView_GetParent(hMaterialTreeView,ProjectInfo.res.pCursorResInfo[CursorInfoNum].hTreeItem),
+		0);
+}
+
+void Project_BitmapResInsert(void){
+	extern HANDLE hHeap;
+	extern LPSTR BitmapFileFilter;
+	extern PROJECTINFO ProjectInfo;
+	int i2,i3;
+	char temporary[MAX_PATH];
+
+	if(!ProjectInfo.ResourceFileName[0])
+		sprintf(ProjectInfo.ResourceFileName,"%s.rc",ProjectInfo.name);
+
+	//"ビットマップ ファイルを指定してください"
+	if(!GetFilePathDialog(hOwner,temporary,BitmapFileFilter,STRING_FILEOPENTITLE_BITMAP,TRUE)) return;
+
+	GetRelationalPath(temporary,ProjectInfo.dir);
+
+	ProjectInfo.res.pBitmapResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,ProjectInfo.res.pBitmapResInfo,(ProjectInfo.res.NumberOfBitmapRes+1)*sizeof(RESITEMINFO));
+
+	ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].path=
+		(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].path,temporary);
+
+	for(i3=1;;i3++){
+		sprintf(temporary,"IDB_BITMAP%d",i3);
+		for(i2=0;i2<ProjectInfo.res.NumberOfBitmapRes;i2++){
+			if(lstrcmp(temporary,ProjectInfo.res.pBitmapResInfo[i2].IdName)==0) break;
+		}
+		if(i2==ProjectInfo.res.NumberOfBitmapRes) break;
+	}
+
+	ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].IdName=
+		(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].IdName,temporary);
+
+	//ツリービューに追加
+	extern HWND hMaterialTreeView;
+	TV_INSERTSTRUCT tv;
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.item.iImage=5;
+	tv.item.iSelectedImage=5;
+	tv.hParent=ProjectInfo.res.hBitmapTreeItem;
+	tv.item.pszText=temporary;
+
+	ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].hTreeItem=
+		TreeView_InsertItem(hMaterialTreeView,&tv);
+
+	TreeView_SelectItem(hMaterialTreeView,ProjectInfo.res.pBitmapResInfo[ProjectInfo.res.NumberOfBitmapRes].hTreeItem);
+
+	ProjectInfo.res.NumberOfBitmapRes++;
+	ProjectInfo.ModifuOfResource=1;
+
+
+	////////////////////////////////
+	// ウィンドウ プロパティを更新
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	for(i2=0;i2<MAX_WNDNUM;i2++){
+		if(MdiInfo[i2].hwnd&&MdiInfo[i2].DocType==WNDTYPE_RAD){
+			if(MdiInfo[i2].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+				ChangePropertyWindow(i2,GetWndInfoNum(MdiInfo[i2].path));
+		}
+	}
+}
+void Project_Bitmap_Delete(int BitmapInfoNum){
+	extern PROJECTINFO ProjectInfo;
+	int i;
+
+	//ツリービューから削除
+	extern HWND hMaterialTreeView;
+	TreeView_DeleteItem(hMaterialTreeView,ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].hTreeItem);
+
+	//ProjectInfo.pBitmapInfo構造体から削除
+	HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName);
+	HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].path);
+	ProjectInfo.res.NumberOfBitmapRes--;
+	for(i=BitmapInfoNum;i<ProjectInfo.res.NumberOfBitmapRes;i++)
+		ProjectInfo.res.pBitmapResInfo[i]=ProjectInfo.res.pBitmapResInfo[i+1];
+
+	ProjectInfo.ModifuOfResource=1;
+}
+void Project_Bitmap_RenameID(int BitmapInfoNum){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	extern char NewIdName[MAX_PATH];
+	extern HWND hMaterialTreeView;
+	int i2;
+	char temporary[MAX_PATH];
+	TVITEM tvItem;
+
+	if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,DlgProject_ResourceID_Input,(long)ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName)) return;
+
+	//重複チェック
+	for(i2=0;i2<ProjectInfo.res.NumberOfBitmapRes;i2++){
+		if(i2==BitmapInfoNum) continue;
+		if(lstrcmp(NewIdName,ProjectInfo.res.pBitmapResInfo[i2].IdName)==0){
+			//"ID \"%s\" は既にプロジェクト内に存在します。"
+			sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
+			MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+	}
+
+	HeapDefaultFree(ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName);
+	ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
+	lstrcpy(ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName,NewIdName);
+
+	tvItem.hItem=ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].hTreeItem;
+	tvItem.mask=TVIF_TEXT;
+	tvItem.pszText=ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName;
+	tvItem.cchTextMax=lstrlen(ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].IdName)+1;
+	TreeView_SetItem(hMaterialTreeView,&tvItem);
+
+	ProjectInfo.ModifuOfResource=1;
+
+	TreeView_SortChildren(hMaterialTreeView,
+		TreeView_GetParent(hMaterialTreeView,ProjectInfo.res.pBitmapResInfo[BitmapInfoNum].hTreeItem),
+		0);
+}
+void Project_IconResInsert(void){
+	extern HANDLE hHeap;
+	extern LPSTR IconFileFilter;
+	extern PROJECTINFO ProjectInfo;
+	int i2,i3;
+	char temporary[MAX_PATH];
+
+	if(!ProjectInfo.ResourceFileName[0])
+		sprintf(ProjectInfo.ResourceFileName,"%s.rc",ProjectInfo.name);
+
+	//"アイコン ファイルを指定してください"
+	if(!GetFilePathDialog(hOwner,temporary,IconFileFilter,STRING_FILEOPENTITLE_ICON,TRUE)) return;
+
+	GetRelationalPath(temporary,ProjectInfo.dir);
+
+	ProjectInfo.res.pIconResInfo=(RESITEMINFO *)HeapReAlloc(hHeap,0,ProjectInfo.res.pIconResInfo,(ProjectInfo.res.NumberOfIconRes+1)*sizeof(RESITEMINFO));
+
+	ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].path=
+		(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].path,temporary);
+
+	for(i3=1;;i3++){
+		sprintf(temporary,"IDI_ICON%d",i3);
+		for(i2=0;i2<ProjectInfo.res.NumberOfIconRes;i2++){
+			if(lstrcmp(temporary,ProjectInfo.res.pIconResInfo[i2].IdName)==0) break;
+		}
+		if(i2==ProjectInfo.res.NumberOfIconRes) break;
+	}
+
+	ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].IdName=
+		(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].IdName,temporary);
+
+	//ツリービューに追加
+	extern HWND hMaterialTreeView;
+	TV_INSERTSTRUCT tv;
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.item.iImage=4;
+	tv.item.iSelectedImage=4;
+	tv.hParent=ProjectInfo.res.hIconTreeItem;
+	if(ProjectInfo.res.NumberOfIconRes==0) lstrcat(temporary," (Main)");
+	tv.item.pszText=temporary;
+
+	ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].hTreeItem=
+		TreeView_InsertItem(hMaterialTreeView,&tv);
+
+	TreeView_SelectItem(hMaterialTreeView,ProjectInfo.res.pIconResInfo[ProjectInfo.res.NumberOfIconRes].hTreeItem);
+
+	ProjectInfo.res.NumberOfIconRes++;
+	ProjectInfo.ModifuOfResource=1;
+
+	////////////////////////////////
+	// ウィンドウ プロパティを更新
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	for(i2=0;i2<MAX_WNDNUM;i2++){
+		if(MdiInfo[i2].hwnd&&MdiInfo[i2].DocType==WNDTYPE_RAD){
+			if(MdiInfo[i2].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+				ChangePropertyWindow(i2,GetWndInfoNum(MdiInfo[i2].path));
+		}
+	}
+}
+void Project_Icon_Delete(int IconInfoNum){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i2;
+	char temporary[MAX_PATH];
+	TVITEM tv;
+
+	//ツリービューから削除
+	extern HWND hMaterialTreeView;
+	TreeView_DeleteItem(hMaterialTreeView,ProjectInfo.res.pIconResInfo[IconInfoNum].hTreeItem);
+
+	//ProjectInfo.pIconInfo構造体から削除
+	HeapDefaultFree(ProjectInfo.res.pIconResInfo[IconInfoNum].IdName);
+	HeapDefaultFree(ProjectInfo.res.pIconResInfo[IconInfoNum].path);
+	ProjectInfo.res.NumberOfIconRes--;
+	for(i2=IconInfoNum;i2<ProjectInfo.res.NumberOfIconRes;i2++) ProjectInfo.res.pIconResInfo[i2]=ProjectInfo.res.pIconResInfo[i2+1];
+
+	if(IconInfoNum==0&&ProjectInfo.res.NumberOfIconRes){
+		tv.mask=TVIF_TEXT|TVIF_HANDLE;
+		tv.pszText=temporary;
+		tv.cchTextMax=MAX_PATH;
+		tv.hItem=ProjectInfo.res.pIconResInfo[0].hTreeItem;
+		TreeView_GetItem(hMaterialTreeView,&tv);
+		lstrcat(tv.pszText," (Main)");
+		TreeView_SetItem(hMaterialTreeView,&tv);
+	}
+
+	ProjectInfo.ModifuOfResource=1;
+
+	////////////////////////////////
+	// ウィンドウ プロパティを更新
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	for(i2=0;i2<MAX_WNDNUM;i2++){
+		if(MdiInfo[i2].hwnd&&MdiInfo[i2].DocType==WNDTYPE_RAD){
+			if(MdiInfo[i2].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW)
+				ChangePropertyWindow(i2,GetWndInfoNum(MdiInfo[i2].path));
+		}
+	}
+}
+void Project_Icon_RenameID(int IconInfoNum){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	extern char NewIdName[MAX_PATH];
+	extern HWND hMaterialTreeView;
+	int i2;
+	char temporary[MAX_PATH];
+	TVITEM tvItem;
+
+	if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_INPUTID),hOwner,DlgProject_ResourceID_Input,(long)ProjectInfo.res.pIconResInfo[IconInfoNum].IdName)) return;
+
+	//重複チェック
+	for(i2=0;i2<ProjectInfo.res.NumberOfIconRes;i2++){
+		if(i2==IconInfoNum) continue;
+		if(lstrcmp(NewIdName,ProjectInfo.res.pIconResInfo[i2].IdName)==0){
+			//"ID \"%s\" は既にプロジェクト内に存在します。"
+			sprintf(temporary,STRING_DUPLICATIONERROR_ID_IN_PROJECT,NewIdName);
+			MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+	}
+
+	HeapDefaultFree(ProjectInfo.res.pIconResInfo[IconInfoNum].IdName);
+	ProjectInfo.res.pIconResInfo[IconInfoNum].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(NewIdName)+1);
+	lstrcpy(ProjectInfo.res.pIconResInfo[IconInfoNum].IdName,NewIdName);
+
+	tvItem.hItem=ProjectInfo.res.pIconResInfo[IconInfoNum].hTreeItem;
+	tvItem.mask=TVIF_TEXT;
+	if(IconInfoNum==0){
+		sprintf(temporary,"%s (Main)",ProjectInfo.res.pIconResInfo[IconInfoNum].IdName);
+		tvItem.pszText=temporary;
+	}
+	else tvItem.pszText=ProjectInfo.res.pIconResInfo[IconInfoNum].IdName;
+	tvItem.cchTextMax=lstrlen(ProjectInfo.res.pIconResInfo[IconInfoNum].IdName)+1;
+	TreeView_SetItem(hMaterialTreeView,&tvItem);
+
+	ProjectInfo.ModifuOfResource=1;
+
+	TreeView_SortChildren(hMaterialTreeView,
+		TreeView_GetParent(hMaterialTreeView,ProjectInfo.res.pIconResInfo[IconInfoNum].hTreeItem),
+		0);
+}
+
+BOOL CALLBACK DlgProject_ResourceID_Input(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern char NewIdName[MAX_PATH];
+	switch(message){
+		case WM_INITDIALOG:
+			//"IDの変更"
+			SetWindowText(hwnd,STRING_RENAME_ID);
+
+			SetDlgItemText(hwnd,IDC_IDNAME,(char *)lParam);
+			SetPosCenter(hwnd);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					GetDlgItemText(hwnd,IDC_IDNAME,NewIdName,MAX_PATH);
+					if(!NewIdName[0]){
+						//"ID名を入力して下さい。"
+						MessageBox(hwnd,STRING_ERROR_MUST_IDNAME,APPLICATION_NAME,MB_OK);
+						return 1;
+					}
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
Index: /ProjectEditor/Ruler.cpp
===================================================================
--- /ProjectEditor/Ruler.cpp	(revision 3)
+++ /ProjectEditor/Ruler.cpp	(revision 3)
@@ -0,0 +1,117 @@
+#include "common.h"
+
+LRESULT CALLBACK RulerProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_PAINT:
+			CRuler *pobj_Ruler;
+			pobj_Ruler=(CRuler *)GetWindowLong(hwnd,GWL_USERDATA);
+
+			HDC hdc;
+			PAINTSTRUCT ps;
+			hdc=BeginPaint(hwnd,&ps);
+
+			pobj_Ruler->draw(hdc);
+
+			EndPaint(hwnd,&ps);
+			break;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+
+CRuler::CRuler(HWND hParent,int WndNum){
+	m_WndNum=WndNum;
+
+	hRulerWnd=CreateWindowEx(0,"Ruler","Ruler",
+		WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE,
+		0,0,0,0,
+		hParent,0,hInst,0);
+	SetWindowLong(hRulerWnd,GWL_USERDATA,(long)this);
+
+	HDC hdc;
+	hdc=GetDC(hRulerWnd);
+
+	memdc=CreateCompatibleDC(hdc);
+	hMemBmp=CreateCompatibleBitmap(hdc,ScreenX,HEIGHT_RULER);
+	SelectObject(memdc,hMemBmp);
+
+	ReleaseDC(hRulerWnd,hdc);
+}
+CRuler::~CRuler(){
+	DeleteDC(memdc);
+	DeleteObject(hMemBmp);
+
+	DestroyWindow(hRulerWnd);
+}
+
+void CRuler::resize(int x,int y,int cx,int cy){
+	MoveWindow(hRulerWnd,x,y,cx,cy,1);
+}
+void CRuler::draw(HDC hdc){
+	int i;
+
+	//スクロールバーによるベースポジションを取得
+	int BaseX,BaseY;
+	BaseX=0;
+	BaseY=0;
+	GetScrollBaseCaretPos(m_WndNum,&BaseX,&BaseY);
+
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[m_WndNum].pmti->iWidth_ControlTabSpace;
+
+	HBRUSH hBrush,hOldBrush;
+	hBrush=CreateSolidBrush(RGB(230,230,230));
+
+	HPEN hPen,hOldPen;
+	hPen=CreatePen(PS_SOLID,0,RGB(60,60,60));
+
+	//背景色を塗りつぶす
+	hOldBrush=(HBRUSH)SelectObject(memdc,hBrush);
+	PatBlt(memdc,0,0,ScreenX,HEIGHT_RULER,PATCOPY);
+	SelectObject(memdc,hOldBrush);
+
+
+	extern HFONT hRulerFont;
+	HFONT hOldFont;
+	hOldFont=(HFONT)SelectObject(memdc,hRulerFont);
+
+	hOldPen=(HPEN)SelectObject(memdc,hPen);
+
+	//ラインを描画
+	extern int font_width;
+	int x;
+	for(x=iControlTabSpace,i=-BaseX;x<ScreenX;x+=font_width,i++){
+		if(i%10==0){
+			MoveToEx(memdc,x,0,NULL);
+			LineTo(memdc,x,HEIGHT_RULER);
+		}
+		else if(i%5==0){
+			MoveToEx(memdc,x,HEIGHT_RULER/2,NULL);
+			LineTo(memdc,x,HEIGHT_RULER);
+		}
+		else{
+			MoveToEx(memdc,x,HEIGHT_RULER-3,NULL);
+			LineTo(memdc,x,HEIGHT_RULER);
+		}
+	}
+
+	//桁番号を描画
+	char temporary[32];
+	SetBkColor(memdc,RGB(230,230,230));
+	SetTextColor(memdc,RGB(60,60,60));
+	for(x=iControlTabSpace,i=-BaseX;x<ScreenX;x+=font_width,i++){
+		if(i%10==0){
+			sprintf(temporary,"%d",i);
+			TextOut(memdc,x+2,0,temporary,lstrlen(temporary));
+		}
+	}
+
+	SelectObject(memdc,hOldPen);
+	SelectObject(memdc,hOldFont);
+
+
+	//画面に描画
+	BitBlt(hdc,0,0,ScreenX,HEIGHT_RULER,memdc,0,0,SRCCOPY);
+
+	DeleteObject(hBrush);
+	DeleteObject(hPen);
+}
Index: /ProjectEditor/Ruler.h
===================================================================
--- /ProjectEditor/Ruler.h	(revision 3)
+++ /ProjectEditor/Ruler.h	(revision 3)
@@ -0,0 +1,17 @@
+
+#define HEIGHT_RULER 10
+
+LRESULT CALLBACK RulerProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+class CRuler{
+	int m_WndNum;
+	HDC memdc;
+	HBITMAP hMemBmp;
+public:
+	HWND hRulerWnd;
+	CRuler(HWND hParent,int WndNum);
+	~CRuler();
+
+	void resize(int x,int y,int cx,int cy);
+	void draw(HDC hdc);
+};
Index: /ProjectEditor/Search.cpp
===================================================================
--- /ProjectEditor/Search.cpp	(revision 3)
+++ /ProjectEditor/Search.cpp	(revision 3)
@@ -0,0 +1,503 @@
+#include "common.h"
+
+long *pFindPos;
+int FindPosCounter;
+
+char *CompareSuper(HWND hDlg,char *buffer,char *szFind,BOOL IsBigSmall,BOOL IsRegExp,int *pLength){
+	char *pTemp;
+
+	if(buffer[0]=='\0') return 0;
+
+	if(IsRegExp){
+		//正規表現を有効にしながら検索
+		pTemp=obj_RegExp.compare(hDlg,buffer,szFind,IsBigSmall,pLength);
+	}
+	else{
+		//通常の検索
+		pTemp=ComparisonString(buffer,szFind,IsBigSmall);
+
+		*pLength=lstrlen(szFind);
+	}
+
+	return pTemp;
+}
+
+void SetSearchData(HWND hDlg,char *str,_int8 IsBigSmall){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2,i3,i4,i5,length;
+	int WndNum;
+	char *buffer,*FindStr,*LineStr;
+	HWND hEdit;
+
+	WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+	if(WndNum==-1) return;
+	hEdit=GetWindow(GetWindow(hClient,GW_CHILD),GW_CHILD);
+
+	i=lstrlen(MdiInfo[WndNum].pmti->buffer)+1;
+
+	buffer=(char *)HeapAlloc(hHeap,0,i);
+	lstrcpy(buffer,MdiInfo[WndNum].pmti->buffer);
+
+	LineStr=(char *)HeapAlloc(hHeap,0,i+64);
+
+	pFindPos[0]=(long)hEdit;
+	i=0;
+	i3=1;
+	while(1){
+		FindStr=CompareSuper(hDlg,buffer+i,str,IsBigSmall,pobj_nv->bRegExp,&length);
+		if(FindStr==(char *)-1){
+			//エラー
+			return;
+		}
+		if(!FindStr) break;
+
+		i=FindStr-buffer;
+		for(i4=0,i5=1;i>i4;i4++){
+			if(buffer[i4-1]=='\r'&&buffer[i4]=='\n') i5++;
+		}
+		for(;i>0;i--){
+			if(buffer[i-2]=='\r'&&buffer[i-1]=='\n') break;
+		}
+
+		FindPosCounter+=sizeof(long);
+		pFindPos=(long *)HeapReAlloc(hHeap,0,pFindPos,FindPosCounter);
+		pFindPos[i3]=i;
+
+		sprintf(LineStr,"Line:%d  ",i5);
+		for(i2=lstrlen(LineStr);;i++,i2++){
+			if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+				LineStr[i2]=0;
+				break;
+			}
+			LineStr[i2]=buffer[i];
+		}
+		SendDlgItemMessage(hDlg,IDC_FINDLIST,LB_ADDSTRING,0,(long)LineStr);
+		i3++;
+	}
+	HeapDefaultFree(buffer);
+	HeapDefaultFree(LineStr);
+}
+BOOL CALLBACK DlgFindAll(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,WndNum;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_SHOWITEM:
+					i=SendDlgItemMessage(hwnd,IDC_FINDLIST,LB_GETCURSEL,0,0);
+					if(i==LB_ERR) return 1;
+					i++;
+
+					if(!IsWindow((HWND)pFindPos[0])){
+						MessageBeep(0);
+						return 1;
+					}
+
+					WndNum=GetWndNum(GetParent((HWND)pFindPos[0]));
+					if(WndNum==-1) return 1;
+
+					CHARRANGE CharRange;
+					CharRange.cpMin=pFindPos[i];
+
+					char *pBuf;
+					pBuf=MdiInfo[WndNum].pmti->buffer;
+
+					//行の末端位置を取得
+					for(i=CharRange.cpMin;;i++){
+						if(pBuf[i]=='\0') break;
+						if(pBuf[i]=='\r'&&pBuf[i+1]=='\n') break;
+					}
+					CharRange.cpMax=i;
+
+					TextEdit_SetSel(WndNum,CharRange.cpMin,CharRange.cpMax,TRUE);
+
+					SetFocus((HWND)pFindPos[0]);
+					return 1;
+				case IDCANCEL:
+					HeapDefaultFree(pFindPos);
+					EndDialog(hwnd,0);
+					return 1;
+				case IDC_FINDLIST:
+					if(HIWORD(wParam)==LBN_DBLCLK) SendMessage(hwnd,WM_COMMAND,IDC_SHOWITEM,0);
+					return 1;
+			}
+			break;
+		case WM_SIZE:
+			RECT rect;
+			GetClientRect(hwnd,&rect);
+			MoveWindow(GetDlgItem(hwnd,IDC_FINDLIST),rect.left,26,rect.right,rect.bottom-26,1);
+			return 1;
+	}
+	return 0;
+}
+BOOL StartSearch(HWND hDlg,char *FindString,_int8 IsBigSmall,BOOL IsShowMessage){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	char *pBuf,msg[255];
+	CHARRANGE CharRange;
+
+	int WndNum;
+	WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+	if(WndNum==-1) return 0;
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	TextEdit_GetSel(WndNum,&CharRange);
+	i=CharRange.cpMax;
+
+FindStart:
+
+	int length;
+
+	i=(int)CompareSuper(hDlg,pBuf+i,FindString,IsBigSmall,pobj_nv->bRegExp,&length);
+	if(i==-1){
+		//エラー
+		return 0;
+	}
+
+	if(i){
+		//検索文字列を反転表示
+		i-=(int)pBuf;
+		CharRange.cpMin=i;
+		CharRange.cpMax=i+length;
+		TextEdit_SetSel(WndNum,CharRange.cpMin,CharRange.cpMax,TRUE);
+
+		return 1;
+	}
+	else{
+		if(!IsShowMessage) return 0;
+
+		i=(int)CompareSuper(hDlg,pBuf,FindString,IsBigSmall,pobj_nv->bRegExp,&length);
+		if(i==-1){
+			//エラー
+			return 0;
+		}
+
+		if(i){
+			//"ファイルの最初から検索しますか？"
+			if(MessageBox(hDlg,STRING_SEARCH_AGAIN,"ProjectEditor - Search",MB_YESNO|MB_ICONINFORMATION)==IDYES){
+				i=0;
+				goto FindStart;
+			}
+		}
+		else{
+			//"文字列 \"%s\" が見つかりません"
+			sprintf(msg,STRING_SEARCH_NOTFOUND,FindString);
+			MessageBox(hDlg,msg,"ProjectEditor - Search",MB_OK|MB_ICONINFORMATION);
+		}
+	}
+	return 0;
+}
+void AddFindData(HWND hwnd,char ppData[MAX_FINDLIST][MAX_PATH],char *str){
+	int i;
+	for(i=0;i<MAX_FINDLIST;i++){
+		if(lstrcmp(ppData[i],str)==0) break;
+	}
+	if(i==MAX_FINDLIST) i--;
+	for(;i>0;i--) lstrcpy(ppData[i],ppData[i-1]);
+	lstrcpy(ppData[0],str);
+	SendMessage(hwnd,CB_RESETCONTENT,0,0);
+	for(i=0;i<MAX_FINDLIST;i++){
+		if(ppData[i][0]=='\0') break;
+		SendMessage(hwnd,CB_ADDSTRING,0,(long)ppData[i]);
+	}
+	SendMessage(hwnd,CB_SETCURSEL,0,0);
+}
+BOOL CALLBACK DlgFind(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HWND FindAllDlg;
+	int i,WndNum;
+	char temporary[8192],*pTemp;
+	CHARRANGE CharRange;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+			//大文字・小文字
+			if(pobj_nv->bFindStrBigSmall) SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_SETCHECK,BST_CHECKED,0);
+
+			//正規表現
+			if(pobj_nv->bRegExp) SendDlgItemMessage(hwnd,IDC_REGEXP,BM_SETCHECK,BST_CHECKED,0);
+
+			//検索文字列コンボボックスを初期化
+			SendDlgItemMessage(hwnd,IDC_FINDSTR,CB_RESETCONTENT,0,0);
+			for(i=0;i<MAX_FINDLIST;i++){
+				if(pobj_nv->FindStr[i][0]=='\0') break;
+				SendDlgItemMessage(hwnd,IDC_FINDSTR,CB_ADDSTRING,0,(long)pobj_nv->FindStr[i]);
+			}
+			SendDlgItemMessage(hwnd,IDC_FINDSTR,CB_LIMITTEXT,8192,0);
+
+			WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+			//選択されている文字列を取得
+			TextEdit_GetSel(WndNum,&CharRange);
+			pTemp=(char *)HeapAlloc(hHeap,0,CharRange.cpMax-CharRange.cpMin+1);
+			memcpy(pTemp,
+				MdiInfo[WndNum].pmti->buffer+CharRange.cpMin,
+				CharRange.cpMax-CharRange.cpMin);
+			pTemp[CharRange.cpMax-CharRange.cpMin]=0;
+
+			if(pTemp[0]) SetDlgItemText(hwnd,IDC_FINDSTR,pTemp);
+			else SendDlgItemMessage(hwnd,IDC_FINDSTR,CB_SETCURSEL,0,0);
+
+			HeapDefaultFree(pTemp);
+
+			SetFocus(GetDlgItem(hwnd,IDC_FINDSTR));
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					GetDlgItemText(hwnd,IDC_FINDSTR,temporary,MAX_PATH);
+					if(temporary[0]==0) return 1;
+					AddFindData(GetDlgItem(hwnd,IDC_FINDSTR),pobj_nv->FindStr,temporary);
+
+					//大文字・小文字
+					if(SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_GETCHECK,0,0)) pobj_nv->bFindStrBigSmall=1;
+					else pobj_nv->bFindStrBigSmall=0;
+
+					//正規表現
+					if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
+					else pobj_nv->bRegExp=0;
+
+					StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,1);
+					return 1;
+				case IDC_FINDALL:
+					GetDlgItemText(hwnd,IDC_FINDSTR,temporary,MAX_PATH);
+					if(temporary[0]==0) return 1;
+					AddFindData(GetDlgItem(hwnd,IDC_FINDSTR),pobj_nv->FindStr,temporary);
+
+					//大文字・小文字
+					if(SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_GETCHECK,0,0)) pobj_nv->bFindStrBigSmall=1;
+					else pobj_nv->bFindStrBigSmall=0;
+
+					//正規表現
+					if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
+					else pobj_nv->bRegExp=0;
+
+					FindAllDlg=CreateDialog(hResInst,MAKEINTRESOURCE(IDD_FINDALL),GetWindow(hwnd,GW_OWNER),(DLGPROC)DlgFindAll);
+					ShowWindow(FindAllDlg,SW_SHOW);
+
+					FindPosCounter=sizeof(long);
+					pFindPos=(long *)HeapAlloc(hHeap,0,FindPosCounter);
+					SetSearchData(FindAllDlg,temporary,pobj_nv->bFindStrBigSmall);
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+BOOL CALLBACK DlgPermutation(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HINSTANCE hInst;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	int WndNum;
+	char temporary[8192],temp2[8192],*pTemp;
+	CHARRANGE CharRange;
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+			//大文字・小文字
+			if(pobj_nv->bFindStrBigSmall) SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_SETCHECK,BST_CHECKED,0);
+
+			//正規表現
+			if(pobj_nv->bRegExp) SendDlgItemMessage(hwnd,IDC_REGEXP,BM_SETCHECK,BST_CHECKED,0);
+
+
+			//検索文字列コンボボックスを初期化
+			SendDlgItemMessage(hwnd,IDC_FINDSTR,CB_RESETCONTENT,0,0);
+			for(i=0;i<MAX_FINDLIST;i++){
+				if(pobj_nv->FindStr[i][0]=='\0') break;
+				SendDlgItemMessage(hwnd,IDC_FINDSTR,CB_ADDSTRING,0,(long)pobj_nv->FindStr[i]);
+			}
+			SendDlgItemMessage(hwnd,IDC_FINDSTR,CB_LIMITTEXT,8192,0);
+
+			WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+			//選択されている文字列を取得
+			TextEdit_GetSel(WndNum,&CharRange);
+			pTemp=(char *)HeapAlloc(hHeap,0,CharRange.cpMax-CharRange.cpMin+1);
+			memcpy(pTemp,
+				MdiInfo[WndNum].pmti->buffer+CharRange.cpMin,
+				CharRange.cpMax-CharRange.cpMin);
+			pTemp[CharRange.cpMax-CharRange.cpMin]=0;
+
+			if(pTemp[0]) SetDlgItemText(hwnd,IDC_FINDSTR,pTemp);
+			else SendDlgItemMessage(hwnd,IDC_FINDSTR,CB_SETCURSEL,0,0);
+
+			HeapDefaultFree(pTemp);
+
+			//置換文字列コンボボックスを初期化
+			SendDlgItemMessage(hwnd,IDC_PERMUTATIONSTR,CB_RESETCONTENT,0,0);
+			for(i=0;i<MAX_FINDLIST;i++){
+				if(pobj_nv->PermutationStr[i][0]=='\0') break;
+				SendDlgItemMessage(hwnd,IDC_PERMUTATIONSTR,CB_ADDSTRING,0,(long)pobj_nv->PermutationStr[i]);
+			}
+			SendDlgItemMessage(hwnd,IDC_PERMUTATIONSTR,CB_SETCURSEL,0,0);
+			SendDlgItemMessage(hwnd,IDC_PERMUTATIONSTR,CB_LIMITTEXT,8192,0);
+
+			SetFocus(GetDlgItem(hwnd,IDC_FINDSTR));
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDC_FIND:
+					//大文字・小文字
+					if(SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_GETCHECK,0,0)) pobj_nv->bFindStrBigSmall=1;
+					else pobj_nv->bFindStrBigSmall=0;
+
+					//正規表現
+					if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
+					else pobj_nv->bRegExp=0;
+
+					GetDlgItemText(hwnd,IDC_FINDSTR,temporary,MAX_PATH);
+					if(temporary[0]==0) return 1;
+					AddFindData(GetDlgItem(hwnd,IDC_FINDSTR),pobj_nv->FindStr,temporary);
+
+					StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,1);
+					return 1;
+				case IDC_PERMUTATIONNEXT:
+					//////////
+					// 置換
+					//////////
+
+					//大文字・小文字
+					if(SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_GETCHECK,0,0)) pobj_nv->bFindStrBigSmall=1;
+					else pobj_nv->bFindStrBigSmall=0;
+
+					//正規表現
+					if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
+					else pobj_nv->bRegExp=0;
+
+					//検索する文字列を取得
+					GetDlgItemText(hwnd,IDC_FINDSTR,temporary,MAX_PATH);
+					if(temporary[0]==0) return 1;
+					AddFindData(GetDlgItem(hwnd,IDC_FINDSTR),pobj_nv->FindStr,temporary);
+
+					//置換する文字列を取得
+					GetDlgItemText(hwnd,IDC_PERMUTATIONSTR,temp2,MAX_PATH);
+					AddFindData(GetDlgItem(hwnd,IDC_PERMUTATIONSTR),pobj_nv->PermutationStr,temp2);
+
+					WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+					//選択されている文字列を取得
+					TextEdit_GetSel(WndNum,&CharRange);
+					pTemp=(char *)HeapAlloc(hHeap,0,CharRange.cpMax-CharRange.cpMin+1);
+					memcpy(pTemp,
+						MdiInfo[WndNum].pmti->buffer+CharRange.cpMin,
+						CharRange.cpMax-CharRange.cpMin);
+					pTemp[CharRange.cpMax-CharRange.cpMin]=0;
+
+					int length;
+					i=(int)CompareSuper(hwnd,pTemp,temporary,pobj_nv->bFindStrBigSmall,pobj_nv->bRegExp,&length);
+					if(i==-1){
+						HeapDefaultFree(pTemp);
+						return 1;
+					}
+
+					if(i){
+						if(pobj_nv->bRegExp){
+							char *pTempPermu;
+
+							//正規表現の結果文字列を取得（置換後用の文字列を取得）
+							pTempPermu=obj_RegExp.GetPermuStr(hwnd,pTemp,temporary,temp2,pobj_nv->bFindStrBigSmall);
+							if(pTempPermu==(char *)-1||pTempPermu==0){
+								HeapDefaultFree(pTemp);
+								return 1;
+							}
+
+							//置換する
+							TextEdit_ReplaceUpdateUndoData(WndNum,pTempPermu,0,1);
+
+							HeapDefaultFree(pTempPermu);
+						}
+						else{
+							//置換する
+							TextEdit_ReplaceUpdateUndoData(WndNum,temp2,0,1);
+						}
+					}
+					HeapDefaultFree(pTemp);
+
+					//次を検索
+					SendMessage(hwnd,WM_COMMAND,IDC_FIND,0);
+
+					return 1;
+				case IDC_PERMUTATIONALL:
+					//////////////
+					// すべて置換
+					//////////////
+
+					//大文字・小文字
+					if(SendDlgItemMessage(hwnd,IDC_ISBIGSMALL,BM_GETCHECK,0,0)) pobj_nv->bFindStrBigSmall=1;
+					else pobj_nv->bFindStrBigSmall=0;
+
+					//正規表現
+					if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
+					else pobj_nv->bRegExp=0;
+
+					//検索する文字列を取得
+					GetDlgItemText(hwnd,IDC_FINDSTR,temporary,MAX_PATH);
+					if(temporary[0]==0) return 1;
+					AddFindData(GetDlgItem(hwnd,IDC_FINDSTR),pobj_nv->FindStr,temporary);
+
+					//置換する文字列を取得
+					GetDlgItemText(hwnd,IDC_PERMUTATIONSTR,temp2,MAX_PATH);
+					AddFindData(GetDlgItem(hwnd,IDC_PERMUTATIONSTR),pobj_nv->PermutationStr,temp2);
+
+					//正規表現
+					if(SendDlgItemMessage(hwnd,IDC_REGEXP,BM_GETCHECK,0,0)) pobj_nv->bRegExp=1;
+					else pobj_nv->bRegExp=0;
+
+					WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+					TextEdit_SetSel(WndNum,0,0,TRUE);
+
+					while(StartSearch(hwnd,temporary,pobj_nv->bFindStrBigSmall,0)){
+						if(pobj_nv->bRegExp){
+							//選択されている文字列を取得
+							TextEdit_GetSel(WndNum,&CharRange);
+							pTemp=(char *)HeapAlloc(hHeap,0,CharRange.cpMax-CharRange.cpMin+1);
+							memcpy(pTemp,
+								MdiInfo[WndNum].pmti->buffer+CharRange.cpMin,
+								CharRange.cpMax-CharRange.cpMin);
+							pTemp[CharRange.cpMax-CharRange.cpMin]=0;
+
+							char *pTempPermu;
+
+							//正規表現の結果文字列を取得（置換後用の文字列を取得）
+							pTempPermu=obj_RegExp.GetPermuStr(hwnd,pTemp,temporary,temp2,pobj_nv->bFindStrBigSmall);
+							if(pTempPermu==(char *)-1||pTempPermu==0){
+								HeapDefaultFree(pTemp);
+								return 1;
+							}
+
+							//置換する
+							TextEdit_ReplaceUpdateUndoData(WndNum,pTempPermu,0,1);
+
+							HeapDefaultFree(pTempPermu);
+							HeapDefaultFree(pTemp);
+						}
+						else{
+							//置換する
+							TextEdit_ReplaceUpdateUndoData(WndNum,temp2,0,1);
+						}
+					}
+
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
Index: /ProjectEditor/StringCount.cpp
===================================================================
--- /ProjectEditor/StringCount.cpp	(revision 3)
+++ /ProjectEditor/StringCount.cpp	(revision 3)
@@ -0,0 +1,98 @@
+#include "common.h"
+
+#ifdef THETEXT
+
+BOOL CALLBACK DlgStringCount(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	if(message==WM_INITDIALOG){
+		SetPosCenter(hwnd);
+
+		int i,WndNum;
+
+		WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+
+		char *pBuf;
+		if(lParam){
+			//選択範囲
+			CHARRANGE CharRange;
+			TextEdit_GetSel(WndNum,&CharRange);
+			pBuf=(char *)HeapAlloc(hHeap,0,(CharRange.cpMax-CharRange.cpMin)+1);
+			TextEdit_GetSelText(WndNum,&CharRange,pBuf);
+
+			SetWindowText(hwnd,"選択範囲の文字カウント");
+		}
+		else{
+			//すべての範囲
+			pBuf=(char *)HeapAlloc(hHeap,0,lstrlen(MdiInfo[WndNum].pmti->buffer)+1);
+			lstrcpy(pBuf,MdiInfo[WndNum].pmti->buffer);
+		}
+
+		//総バイト数を取得
+		int iByte;
+		iByte=lstrlen(pBuf);
+
+		//文字数（スペースを含めない）を取得
+		int iOmitSpace=0;
+		for(i=0;i<iByte;i++){
+			if(pBuf[i]==' '||pBuf[i]=='\t') continue;
+			if(pBuf[i]==(char)0x81&&pBuf[i+1]==(char)0x40){
+				i++;
+				continue;
+			}
+			if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+				i++;
+				continue;
+			}
+			iOmitSpace++;
+			if(IsDBCSLeadByte(pBuf[i])){
+				i++;
+				continue;
+			}
+		}
+
+		//文字数（スペースを含む）を取得
+		int iWithSpace=0,iLineNum=0;
+		for(i=0;i<iByte;i++){
+			if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+
+				//行数
+				iLineNum++;
+
+				i++;
+				continue;
+			}
+			iWithSpace++;
+			if(IsDBCSLeadByte(pBuf[i])){
+				i++;
+				continue;
+			}
+		}
+
+		if(iByte) iLineNum++;
+
+		char temporary[255];
+
+		//総バイト数
+		Digit(iByte,temporary);
+		SetDlgItemText(hwnd,IDC_SCOUNT_BYTE,temporary);
+
+		//文字数（スペースを含めない）
+		Digit(iOmitSpace,temporary);
+		SetDlgItemText(hwnd,IDC_SCOUNT_OMIT_SPACE,temporary);
+
+		//文字数（スペースを含む）
+		Digit(iWithSpace,temporary);
+		SetDlgItemText(hwnd,IDC_SCOUNT_WITH_SPACE,temporary);
+
+		//行数
+		Digit(iLineNum,temporary);
+		SetDlgItemText(hwnd,IDC_SCOUNT_LINENUM,temporary);
+
+
+		HeapDefaultFree(pBuf);
+	}
+	if(message==WM_COMMAND&&LOWORD(wParam)==IDCANCEL) EndDialog(hwnd,NULL);
+	return 0;
+}
+
+#endif //THETEXT
+
Index: /ProjectEditor/SubOperation.cpp
===================================================================
--- /ProjectEditor/SubOperation.cpp	(revision 3)
+++ /ProjectEditor/SubOperation.cpp	(revision 3)
@@ -0,0 +1,1529 @@
+#include "Common.h"
+
+
+void ScreenToClient(HWND hwnd,RECT *pRect){
+	ScreenToClient(hwnd,(POINT *)pRect);
+	ScreenToClient(hwnd,(POINT *)(((long)(void *)pRect)+sizeof(POINT)));
+}
+void ClientToScreen(HWND hwnd,RECT *pRect){
+	ClientToScreen(hwnd,(POINT *)pRect);
+	ClientToScreen(hwnd,(POINT *)(((long)(void *)pRect)+sizeof(POINT)));
+}
+
+
+typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE hProcess,PBOOL Wow64Process);
+BOOL IsWow64(void){
+	///////////////////////////////////////////////////////////
+	// ProjectEditor.exeがWOW64技術で動作しているのかどうか
+	///////////////////////////////////////////////////////////
+	BOOL bIsWow64 = FALSE;
+	LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process");
+
+	if (NULL != fnIsWow64Process)
+	{
+		if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
+		{
+			// handle error
+			bIsWow64 = FALSE;
+		}
+	}
+	return bIsWow64;
+}
+
+void URLEncode(LPSTR pszSrc){
+	char *temp;
+	temp=(char *)malloc(65535);
+
+	int i,i2;
+	for (i = 0,i2=0; ; i++,i2++)
+	{
+		if(pszSrc[i]=='\0'){
+			temp[i2] = 0;
+			break;
+		}
+
+		// 英数字 _ . - は変換しないでそのまま
+		if (isalnum((BYTE)pszSrc[i]) || pszSrc[i] == '_' || pszSrc[i] == '.' || pszSrc[i] == '-'){
+			temp[i2] = pszSrc[i];
+		}
+		// それ以外は %3B のような形式に変換
+		else{
+			sprintf(temp+i2,"%%%02X", (BYTE)pszSrc[i]);
+			i2+=lstrlen(temp+i2);
+			i2--;
+		}
+	}
+
+	lstrcpy(pszSrc,temp);
+	free(temp);
+}
+
+void Digit(int num,char *buffer){
+	char temporary[255];
+	int i,iPos;
+
+	sprintf(temporary,"%d",abs(num));
+
+	//カンマが不要の場合は抜ける
+	if(lstrlen(temporary)<=3){
+		wsprintf(buffer,"%d",num);
+		return;
+	}
+
+	//合計の文字数からバッファを確保
+	if(num<0){
+		buffer[0]='-';
+		iPos=1;
+	}
+	else{
+		buffer[0]=0;
+		iPos=0;
+	}
+
+	//3桁毎にカンマを加えながら文字列をコピーする
+	int iFirst;
+	iFirst=lstrlen(temporary)%3;
+	if(iFirst==0) iFirst=3;
+	memcpy(buffer+iPos,temporary,iFirst);
+	iPos+=iFirst;
+
+	int i2;
+	i2=(lstrlen(temporary)-4)/3;
+
+	for(i=0;i<=i2;i++){
+		buffer[iPos]=',';
+		iPos++;
+		memcpy(buffer+iPos,temporary+i*3+iFirst,3);
+		iPos+=3;
+		buffer[iPos]=0;
+	}
+}
+
+void RectNaturalFormat(RECT *ReadRect,RECT *CopyRect){
+	if(ReadRect->left > ReadRect->right){
+		CopyRect->left=ReadRect->right;
+		CopyRect->right=ReadRect->left;
+	}
+	else{
+		CopyRect->left=ReadRect->left;
+		CopyRect->right=ReadRect->right;
+	}
+	if(ReadRect->top > ReadRect->bottom){
+		CopyRect->top=ReadRect->bottom;
+		CopyRect->bottom=ReadRect->top;
+	}
+	else{
+		CopyRect->top=ReadRect->top;
+		CopyRect->bottom=ReadRect->bottom;
+	}
+}
+void RectNaturalFormat(int *x1,int *y1,int *x2,int *y2){
+	int temp;
+	if(*x1>*x2){
+		temp=*x1;
+		*x1=*x2;
+		*x2=temp;
+	}
+	if(*y1>*y2){
+		temp=*y1;
+		*y1=*y2;
+		*y2=temp;
+	}
+}
+void KillSpaces(char *str1,char *str2){
+	int i,i2,IsStr;
+	for(i=0,i2=0,IsStr=0;;i++,i2++){
+		while((str1[i]==' '||str1[i]=='\t')&&IsStr==0&&str1[i]!='\0') i++;
+		if(str1[i]=='\"') IsStr^=1;
+		str2[i2]=str1[i];
+		if(str1[i]=='\0') break;
+	}
+}
+void RemoveStringQuotes(char *str){
+	int i;
+	if(str[0]!='\"') return;
+	for(i=0;;i++){
+		str[i]=str[i+1];
+		if(str[i]=='\"') break;
+	}
+	str[i]=0;
+}
+void SlideString(char *buffer, int slide){
+	char *temp;
+	temp=(char *)malloc(lstrlen(buffer)+1);
+	lstrcpy(temp,buffer);
+	lstrcpy(buffer+slide,temp);
+	free(temp);
+}
+void SlideBuffer(char *buffer,int length,int slide){
+	void *temp;
+	temp=malloc(length+1);
+	memcpy(temp,buffer,length);
+	memcpy(buffer+slide,temp,length);
+	free(temp);
+}
+BOOL IsVariableTopChar(char c){
+	if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||c=='_') return 1;
+	return 0;
+}
+BOOL IsVariableChar(char c){
+	if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9')||
+		c=='_'||c=='.'||c=='$') return 1;
+	return 0;
+}
+
+BOOL IsCommandBackDelimitation(char *buffer,int pos){
+	if(buffer[pos]=='\n'||buffer[pos]==':') return 1;
+	return 0;
+}
+BOOL IsCommandDelimitation(char *buffer,int p){
+	if(buffer[p]=='\r'&&buffer[p+1]=='\n') return 2;
+	if(buffer[p]=='\n'||buffer[p]==':'||buffer[p]=='\0') return 1;
+	return 0;
+}
+
+char *ComparisonString(char *str1,char *str2,BOOL bBigSmall){
+	int i,i2,i3,len1,len2;
+	len1=lstrlen(str1);
+	len2=lstrlen(str2);
+	for(i=0;i<len1-len2+1;i++){
+		for(i2=0,i3=i;i2<len2;i2++,i3++){
+			if(bBigSmall){
+				if(str1[i3]!=str2[i2]) break;
+			}
+			else{
+				if((char)CharUpper((LPTSTR)MAKELONG(str1[i3],0))!=(char)CharUpper((LPTSTR)MAKELONG(str2[i2],0))) break;
+			}
+		}
+		if(IsDBCSLeadByte(str1[i])) i++;
+		if(i2==len2) return str1+i3-i2;
+	}
+	return 0;
+}
+int GetOneParameter(char *Parameter,int pos,char *retAns){
+	int i,i2,IsStr,PareNum;
+	for(i=pos,i2=0,IsStr=0,PareNum=0;;i++,i2++){
+		if(IsDBCSLeadByte(Parameter[i])){
+			retAns[i2]=Parameter[i];
+			retAns[++i2]=Parameter[++i];
+			continue;
+		}
+		if(Parameter[i]=='\"') IsStr^=1;
+		if(Parameter[i]=='('&&IsStr==0) PareNum++;
+		if(Parameter[i]==')'&&IsStr==0) PareNum--;
+		if(Parameter[i]==','&&IsStr==0&&PareNum==0){
+			retAns[i2]=0;
+			break;
+		}
+		retAns[i2]=Parameter[i];
+		if(Parameter[i]=='\0'||Parameter[i]=='\r'&&Parameter[i+1]=='\n'){
+			retAns[i2]=0;
+			break;
+		}
+	}
+	if(Parameter[i]==',') i++;
+	return i;
+}
+int GetStringInPare(char *buffer,char *ReadBuffer){
+	int i,IsStr,PareNum;
+	for(i=0,IsStr=0,PareNum=0;;i++){
+		buffer[i]=ReadBuffer[i];
+		if(ReadBuffer[i]=='\"') IsStr^=1;
+		else if(ReadBuffer[i]=='('&&IsStr==0) PareNum++;
+		else if(ReadBuffer[i]==')'&&IsStr==0){
+			PareNum--;
+			if(PareNum==0){
+				i++;
+				buffer[i]=0;
+				break;
+			}
+		}
+		else if(ReadBuffer[i]=='\0') return 0;
+	}
+	return i;
+}
+int GetStringInBracket(char *buffer,char *ReadBuffer){
+	int i,IsStr,PareNum;
+	for(i=0,IsStr=0,PareNum=0;;i++){
+		buffer[i]=ReadBuffer[i];
+		if(IsDBCSLeadByte(ReadBuffer[i])){
+			i++;
+			buffer[i]=ReadBuffer[i];
+			continue;
+		}
+		if(ReadBuffer[i]=='\"') IsStr^=1;
+		else if(ReadBuffer[i]=='['&&IsStr==0) PareNum++;
+		else if(ReadBuffer[i]==']'&&IsStr==0){
+			PareNum--;
+			if(PareNum==0){
+				i++;
+				buffer[i]=0;
+				break;
+			}
+		}
+		else if(ReadBuffer[i]=='\0') return 0;
+	}
+	return i;
+}
+void JumpBlank(char *pBuf,int *piPos){
+	int i;
+	i=*piPos;
+
+	while(1){
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		if(pBuf[i]=='\0') break;
+		if(pBuf[i]=='\''){
+			//注釈文（一行）
+			for(i++;;i++){
+				if(pBuf[i]=='\0') break;
+				if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+					i+=2;
+					break;
+				}
+			}
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		}
+		if(pBuf[i]=='/'&&pBuf[i+1]=='*'){
+			//注釈文（複数行）
+			i+=2;
+			while(!(pBuf[i]=='*'&&pBuf[i+1]=='/')){
+				i++;
+				if(pBuf[i]=='\0') break;
+			}
+			if(pBuf[i]){
+				i+=2;
+			}
+		}
+		while(pBuf[i]=='\r'&&pBuf[i+1]=='\n') i+=2;
+
+		if(!(
+			pBuf[i]==' '||
+			pBuf[i]=='\t'||
+			pBuf[i]=='\''||
+			(pBuf[i]=='/'&&pBuf[i+1]=='*')
+			)) break;
+	}
+
+	*piPos=i;
+}
+
+BOOL CheckParenthesis(char *buffer){
+	int i,IsStr,PareNum,sw;
+	_int8 bracket[1024];
+
+	for(i=0,IsStr=0,PareNum=0,sw=0;;i++){
+		if(buffer[i]=='\"'){
+			IsStr^=1;
+			continue;
+		}
+
+		else if(buffer[i]=='('&&IsStr==0){
+			bracket[PareNum]=0;
+			PareNum++;
+		}
+		else if(buffer[i]=='['&&IsStr==0){
+			bracket[PareNum]=1;
+			PareNum++;
+		}
+
+		else if(buffer[i]==')'&&IsStr==0){
+			PareNum--;
+			if(bracket[PareNum]!=0||PareNum<0){
+				//"カッコ \'( )\'"
+				return 0;
+			}
+		}
+		else if(buffer[i]==']'&&IsStr==0){
+			PareNum--;
+			if(bracket[PareNum]!=1||PareNum<0){
+				//"カッコ \'( )\'"
+				return 0;
+			}
+		}
+
+		else if(buffer[i]=='\n'||buffer[i]=='\0'){
+
+			//"カッコ \'( )\'"
+			if(buffer[i]=='\0'){
+				if(PareNum!=0){
+					return 0;
+				}
+
+				if(IsStr!=0){
+					return 0;
+				}
+			}
+			if(buffer[i]=='\0') break;
+
+			sw=0;
+		}
+	}
+	return 1;
+}
+
+DWORD GetValue(char *value){
+	unsigned long ans;
+	if(value[0]=='&'){
+		if(value[1]=='o'||value[1]=='O') sscanf(value+2,"%o",&ans);
+		if(value[1]=='h'||value[1]=='H') sscanf(value+2,"%x",&ans);
+	}
+	else ans=atol(value);
+	return ans;
+}
+BOOL IsManagementCommand(int ComNum){
+	switch(ComNum){
+		case -1:
+		case COM_ABSTRACT:
+		case COM_CLASS:
+		case COM_CONST:
+		case COM_DEBUG:
+		case COM_DECLARE:
+		case COM_DEF:
+		case COM_DIM:
+		case COM_DO:
+		case COM_END:
+		case COM_ENUM:
+		case COM_FOR:
+		case COM_FUNCTION:
+		case COM_GOSUB:
+		case COM_GOTO:
+		case COM_IF:
+		case COM_INHERITS:
+		case COM_INTERFACE:
+		case COM_LOOP:
+		case COM_NEXT:
+		case COM_PRIVATE:
+		case COM_PROTECTED:
+		case COM_PUBLIC:
+		case COM_RETURN:
+		case COM_SELECT:
+		case COM_SUB:
+		case COM_TYPE:
+		case COM_TYPEDEF:
+		case COM_VIRTUAL:
+		case COM_OVERRIDE:
+		case COM_WEND:
+		case COM_WHILE:
+		case COM_WITH:
+			return 1;
+		default:
+			break;
+	}
+	return 0;
+}
+int IsBasicReservedWord(char *str){
+	if(str[0]=='a'||str[0]=='A'){
+		if(lstrcmpi(str,"Abstract")==0) return COM_ABSTRACT;
+	}
+	else if(str[0]=='b'||str[0]=='B'){
+		if(lstrcmpi(str,"Beep")==0) return COM_BEEP;
+	}
+	else if(str[0]=='c'||str[0]=='C'){
+		if(lstrcmpi(str,"Case")==0) return -1;
+		if(lstrcmpi(str,"ChDir")==0) return COM_CHDIR;
+		if(lstrcmpi(str,"Circle")==0) return COM_CIRCLE;
+		if(lstrcmpi(str,"Class")==0) return COM_CLASS;
+		if(lstrcmpi(str,"Close")==0) return COM_CLOSE;
+		if(lstrcmpi(str,"Cls")==0) return COM_CLS;
+		if(lstrcmpi(str,"Color")==0) return COM_COLOR;
+		if(lstrcmpi(str,"Const")==0) return COM_CONST;
+		if(lstrcmpi(str,"Continue")==0) return -1;
+	}
+	else if(str[0]=='d'||str[0]=='D'){
+		if(lstrcmpi(str,"Debug")==0) return COM_DEBUG;
+		if(lstrcmpi(str,"Declare")==0) return COM_DECLARE;
+		if(lstrcmpi(str,"Def")==0) return COM_DEF;
+		if(lstrcmpi(str,"Delete")==0) return -1;
+		if(lstrcmpi(str,"DelWnd")==0) return COM_DELWND;
+		if(lstrcmpi(str,"Dim")==0) return COM_DIM;
+		if(lstrcmpi(str,"Do")==0) return COM_DO;
+	}
+	else if(str[0]=='e'||str[0]=='E'){
+		if(lstrcmpi(str,"Else")==0) return -1;
+		if(lstrcmpi(str,"ElseIf")==0) return -1;
+		if(lstrcmpi(str,"End")==0) return COM_END;
+		if(lstrcmpi(str,"EndIf")==0) return -1;
+		if(lstrcmpi(str,"EndFunction")==0) return -1;
+		if(lstrcmpi(str,"EndSub")==0) return -1;
+		if(lstrcmpi(str,"EndType")==0) return -1;
+		if(lstrcmpi(str,"EndSelect")==0) return -1;
+		if(lstrcmpi(str,"EndWith")==0) return -1;
+		if(lstrcmpi(str,"Enum")==0) return COM_ENUM;
+		if(lstrcmpi(str,"Exit")==0) return -1;
+		if(lstrcmpi(str,"ExitDo")==0) return -1;
+		if(lstrcmpi(str,"ExitFor")==0) return -1;
+		if(lstrcmpi(str,"ExitFunction")==0) return -1;
+		if(lstrcmpi(str,"ExitSub")==0) return -1;
+		if(lstrcmpi(str,"ExitWhile")==0) return -1;
+	}
+	else if(str[0]=='f'||str[0]=='F'){
+		if(lstrcmpi(str,"Field")==0) return COM_FIELD;
+		if(lstrcmpi(str,"For")==0) return COM_FOR;
+		if(lstrcmpi(str,"Function")==0) return COM_FUNCTION;
+	}
+	else if(str[0]=='g'||str[0]=='G'){
+		if(lstrcmpi(str,"Get")==0) return COM_GET;
+		if(lstrcmpi(str,"GoSub")==0) return COM_GOSUB;
+		if(lstrcmpi(str,"Goto")==0) return COM_GOTO;
+	}
+	else if(str[0]=='i'||str[0]=='I'){
+		if(lstrcmpi(str,"If")==0) return COM_IF;
+		if(lstrcmpi(str,"Inherits")==0) return COM_INHERITS;
+		if(lstrcmpi(str,"Input")==0) return COM_INPUT;
+		if(lstrcmpi(str,"Interface")==0) return COM_INTERFACE;
+	}
+	else if(str[0]=='k'||str[0]=='K'){
+		if(lstrcmpi(str,"Kill")==0) return COM_KILL;
+	}
+	else if(str[0]=='l'||str[0]=='L'){
+		if(lstrcmpi(str,"Let")==0) return COM_LET;
+		if(lstrcmpi(str,"Line")==0) return COM_LINE;
+		if(lstrcmpi(str,"Locate")==0) return COM_LOCATE;
+		if(lstrcmpi(str,"Loop")==0) return COM_LOOP;
+	}
+	else if(str[0]=='m'||str[0]=='M'){
+		if(lstrcmpi(str,"MkDir")==0) return COM_MKDIR;
+		if(lstrcmpi(str,"MsgBox")==0) return COM_MSGBOX;
+	}
+	else if(str[0]=='n'||str[0]=='N'){
+		if(lstrcmpi(str,"Next")==0) return COM_NEXT;
+		if(lstrcmpi(str,"New")==0) return -1;
+	}
+	else if(str[0]=='o'||str[0]=='O'){
+		if(lstrcmpi(str,"Open")==0) return COM_OPEN;
+		if(lstrcmpi(str,"Override")==0) return COM_OVERRIDE;
+	}
+	else if(str[0]=='p'||str[0]=='P'){
+		if(lstrcmpi(str,"Paint")==0) return COM_PAINT;
+		if(lstrcmpi(str,"Print")==0) return COM_PRINT;
+		if(lstrcmpi(str,"Private")==0) return COM_PRIVATE;
+		if(lstrcmpi(str,"Protected")==0) return COM_PROTECTED;
+		if(lstrcmpi(str,"PSet")==0) return COM_PSET;
+		if(lstrcmpi(str,"Put")==0) return COM_PUT;
+		if(lstrcmpi(str,"Public")==0) return COM_PUBLIC;
+	}
+	else if(str[0]=='r'||str[0]=='R'){
+		if(lstrcmpi(str,"Randomize")==0) return COM_RANDOMIZE;
+		if(lstrcmpi(str,"Rem")==0) return COM_REM;
+		if(lstrcmpi(str,"Return")==0) return COM_RETURN;
+	}
+	else if(str[0]=='s'||str[0]=='S'){
+		if(lstrcmpi(str,"Select")==0) return COM_SELECT;
+		if(lstrcmpi(str,"SelectCase")==0) return COM_SELECT;
+		if(lstrcmpi(str,"Sleep")==0) return COM_SLEEP;
+		if(lstrcmpi(str,"Static")==0) return -1;
+		if(lstrcmpi(str,"Sub")==0) return COM_SUB;
+		if(lstrcmpi(str,"Super")==0) return -1;
+	}
+	else if(str[0]=='t'||str[0]=='T'){
+		if(lstrcmpi(str,"Then")==0) return -1;
+		if(lstrcmpi(str,"Type")==0) return COM_TYPE;
+		if(lstrcmpi(str,"TypeDef")==0) return COM_TYPEDEF;
+	}
+	else if(str[0]=='u'||str[0]=='U'){
+		if(lstrcmpi(str,"Until")==0) return -1;
+	}
+	else if(str[0]=='v'||str[0]=='V'){
+		if(lstrcmpi(str,"Virtual")==0) return COM_VIRTUAL;
+	}
+	else if(str[0]=='w'||str[0]=='W'){
+		if(lstrcmpi(str,"Wend")==0) return COM_WEND;
+		if(lstrcmpi(str,"While")==0) return COM_WHILE;
+		if(lstrcmpi(str,"Window")==0) return COM_WINDOW;
+		if(lstrcmpi(str,"With")==0) return COM_WITH;
+		if(lstrcmpi(str,"Write")==0) return COM_WRITE;
+	}
+	else if(str[0]=='#'){
+		if(lstrcmpi(str,"#include")==0) return -1;
+		if(lstrcmpi(str,"#strict")==0) return -1;
+		if(lstrcmpi(str,"#console")==0) return -1;
+		if(lstrcmpi(str,"#prompt")==0) return -1;
+		if(lstrcmpi(str,"#N88BASIC")==0) return -1;
+		if(lstrcmpi(str,"#define")==0) return -1;
+		if(lstrcmpi(str,"#ifdef")==0) return -1;
+		if(lstrcmpi(str,"#ifndef")==0) return -1;
+		if(lstrcmpi(str,"#else")==0) return -1;
+		if(lstrcmpi(str,"#endif")==0) return -1;
+	}
+	return 0;
+}
+
+HBITMAP CreateGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2){
+	//グラデーションビットマップを生成
+
+	BITMAPINFO BitmapInfo;
+	memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
+	BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+	BitmapInfo.bmiHeader.biWidth=pSize->cx;
+	BitmapInfo.bmiHeader.biHeight=pSize->cy;
+	BitmapInfo.bmiHeader.biPlanes=1;
+	BitmapInfo.bmiHeader.biBitCount=24;
+
+	HDC hdc;
+	hdc=GetDC(GetDesktopWindow());
+
+	HBITMAP hBitmap;
+	BYTE *pByte;
+	hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0);
+
+	int i,i2,x,y;
+	COLORREF rgb;
+	i=BitmapInfo.bmiHeader.biWidth*3;
+	if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
+	for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
+		if(y<BitmapInfo.bmiHeader.biHeight/2-2) rgb=color2;
+		else if(y>BitmapInfo.bmiHeader.biHeight/2+2) rgb=color1;
+		else{
+			double ratio;
+			ratio=((double)y-((double)BitmapInfo.bmiHeader.biHeight/(double)2-(double)2))/(double)4;
+			//ratio=(double)y/(double)BitmapInfo.bmiHeader.biHeight;
+			rgb=RGB(
+				LOBYTE(LOWORD(color2))+(int)(double)(LOBYTE(LOWORD(color1))-LOBYTE(LOWORD(color2)))*(ratio),	//赤要素
+				HIBYTE(LOWORD(color2))+(int)(double)(HIBYTE(LOWORD(color1))-HIBYTE(LOWORD(color2)))*(ratio),	//緑要素
+				LOBYTE(HIWORD(color2))+(int)(double)(LOBYTE(HIWORD(color1))-LOBYTE(HIWORD(color2)))*(ratio)		//青要素
+				);
+		}
+		for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
+			i2=y*i+x*3;
+			pByte[i2+2]=LOBYTE(LOWORD(rgb));
+			pByte[i2+1]=HIBYTE(LOWORD(rgb));
+			pByte[i2]=LOBYTE(HIWORD(rgb));
+		}
+	}
+
+	DeleteDC(hdc);
+
+	return hBitmap;
+}
+HBITMAP CreateVertGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2){
+	//グラデーションビットマップを生成
+
+	BITMAPINFO BitmapInfo;
+	memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
+	BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+	BitmapInfo.bmiHeader.biWidth=pSize->cx;
+	BitmapInfo.bmiHeader.biHeight=pSize->cy;
+	BitmapInfo.bmiHeader.biPlanes=1;
+	BitmapInfo.bmiHeader.biBitCount=24;
+
+	HDC hdc;
+	hdc=GetDC(GetDesktopWindow());
+
+	HBITMAP hBitmap;
+	BYTE *pByte;
+	hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0);
+
+	int i,i2,x,y;
+	COLORREF rgb;
+	i=BitmapInfo.bmiHeader.biWidth*3;
+	if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
+	for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
+		if(y<BitmapInfo.bmiHeader.biHeight/2-2) rgb=color2;
+		else if(y>BitmapInfo.bmiHeader.biHeight/2+2) rgb=color1;
+		else{
+			double ratio;
+			ratio=(double)y/(double)BitmapInfo.bmiHeader.biHeight;
+			rgb=RGB(
+				LOBYTE(LOWORD(color2))+(int)(double)(LOBYTE(LOWORD(color1))-LOBYTE(LOWORD(color2)))*(ratio),	//赤要素
+				HIBYTE(LOWORD(color2))+(int)(double)(HIBYTE(LOWORD(color1))-HIBYTE(LOWORD(color2)))*(ratio),	//緑要素
+				LOBYTE(HIWORD(color2))+(int)(double)(LOBYTE(HIWORD(color1))-LOBYTE(HIWORD(color2)))*(ratio)		//青要素
+				);
+		}
+		for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
+			i2=y*i+x*3;
+			pByte[i2+2]=LOBYTE(LOWORD(rgb));
+			pByte[i2+1]=HIBYTE(LOWORD(rgb));
+			pByte[i2]=LOBYTE(HIWORD(rgb));
+		}
+	}
+
+	DeleteDC(hdc);
+
+	return hBitmap;
+}
+HBITMAP CreateHorzGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2){
+	//グラデーションビットマップを生成
+
+	BITMAPINFO BitmapInfo;
+	memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
+	BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+	BitmapInfo.bmiHeader.biWidth=pSize->cx;
+	BitmapInfo.bmiHeader.biHeight=pSize->cy;
+	BitmapInfo.bmiHeader.biPlanes=1;
+	BitmapInfo.bmiHeader.biBitCount=24;
+
+	HDC hdc;
+	hdc=GetDC(GetDesktopWindow());
+
+	HBITMAP hBitmap;
+	BYTE *pByte;
+	hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0);
+
+	int i,i2,x,y;
+	COLORREF rgb;
+	i=BitmapInfo.bmiHeader.biWidth*3;
+	if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
+	for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
+		double ratio;
+		ratio=(double)x/(double)BitmapInfo.bmiHeader.biWidth;
+		rgb=RGB(
+			LOBYTE(LOWORD(color1))+(int)(double)(LOBYTE(LOWORD(color2))-LOBYTE(LOWORD(color1)))*(ratio),	//赤要素
+			HIBYTE(LOWORD(color1))+(int)(double)(HIBYTE(LOWORD(color2))-HIBYTE(LOWORD(color1)))*(ratio),	//緑要素
+			LOBYTE(HIWORD(color1))+(int)(double)(LOBYTE(HIWORD(color2))-LOBYTE(HIWORD(color1)))*(ratio)		//青要素
+			);
+		for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
+			i2=y*i+x*3;
+			pByte[i2+2]=LOBYTE(LOWORD(rgb));
+			pByte[i2+1]=HIBYTE(LOWORD(rgb));
+			pByte[i2]=LOBYTE(HIWORD(rgb));
+		}
+	}
+
+	DeleteDC(hdc);
+
+	return hBitmap;
+}
+HICON CreateGrayIcon(HICON hBaseIcon){
+	////////////////////////
+	// 淡色アイコンを生成
+	////////////////////////
+
+	HICON hGrayIcon;
+
+	ICONINFO IconInfo;
+	GetIconInfo(hBaseIcon,&IconInfo);
+
+
+	//ビットマップを加工
+	BITMAP Bitmap;
+	GetObject(IconInfo.hbmColor,sizeof(Bitmap),&Bitmap);
+
+	BITMAPINFO BitmapInfo;
+	memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
+	BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+	BitmapInfo.bmiHeader.biWidth=Bitmap.bmWidth;
+	BitmapInfo.bmiHeader.biHeight=Bitmap.bmHeight;
+	BitmapInfo.bmiHeader.biPlanes=1;
+	BitmapInfo.bmiHeader.biBitCount=24;
+	BitmapInfo.bmiHeader.biCompression=BI_RGB;
+
+	HDC hdc;
+	hdc=GetDC(GetDesktopWindow());
+
+	BYTE *pByte;
+	pByte=(BYTE *)HeapAlloc(hHeap,0,Bitmap.bmWidth*Bitmap.bmHeight*sizeof(COLORREF));
+	GetDIBits(hdc,
+		IconInfo.hbmColor,
+		0,
+		Bitmap.bmHeight,
+		(void *)pByte,
+		&BitmapInfo,
+		DIB_RGB_COLORS);
+
+	int i,i2,x,y;
+	i=BitmapInfo.bmiHeader.biWidth*3;
+	if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
+	for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
+		for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
+			i2=y*i+x*3;
+			if(pByte[i2+2]==0&&pByte[i2+1]==0&&pByte[i2]==0){
+				//透明色
+				//何もしない
+			}
+			else{
+				double ratio=0.5;	//明るさ
+
+				pByte[i2+2]+=(BYTE)((double)(255-pByte[i2+2])*ratio);
+				pByte[i2+1]+=(BYTE)((double)(255-pByte[i2+1])*ratio);
+				pByte[i2]+=(BYTE)((double)(255-pByte[i2])*ratio);
+
+				pByte[i2+2]=(BYTE)(((int)pByte[i2+2]+(int)pByte[i2+1]+(int)pByte[i2])/3);
+				pByte[i2+1]=pByte[i2+2];
+				pByte[i2]=pByte[i2+2];
+			}
+		}
+	}
+
+	SetDIBits(hdc,
+		IconInfo.hbmColor,
+		0,
+		Bitmap.bmHeight,
+		(void *)pByte,
+		&BitmapInfo,
+		DIB_RGB_COLORS);
+
+	HeapDefaultFree(pByte);
+
+	DeleteDC(hdc);
+
+
+	hGrayIcon=CreateIconIndirect(&IconInfo);
+
+	//不要なビットマップを破棄
+	DeleteObject(IconInfo.hbmMask);
+	DeleteObject(IconInfo.hbmColor);
+
+	return hGrayIcon;
+}
+void GetSize(SIZE *pSize,RECT *pRect){
+	pSize->cx=pRect->right-pRect->left;
+	pSize->cy=pRect->bottom-pRect->top;
+}
+BOOL HitTest(RECT *pRect,POINT *pPos){
+	if(pRect->left<=pPos->x&&pPos->x<pRect->right&&
+		pRect->top<=pPos->y&&pPos->y<pRect->bottom) return 1;
+	return 0;
+}
+BOOL Rectangle(HDC hdc,RECT *pRect){
+	return Rectangle(hdc,pRect->left,pRect->top,pRect->right,pRect->bottom);
+}
+
+void ComboBox_SetSelText(HWND hCombo,char *lpszText){
+	SendMessage(hCombo,CB_SETCURSEL,
+		SendMessage(hCombo,CB_FINDSTRINGEXACT,0,(LPARAM)lpszText),
+		0);
+}
+
+void SetCursorByState(int state){
+	if(state==FRAME_UPPER_LEFT||state==FRAME_LOWER_RIGHT) SetCursor(LoadCursor(0,IDC_SIZENWSE));
+	else if(state==FRAME_UPPER_RIGHT||state==FRAME_LOWER_LEFT) SetCursor(LoadCursor(0,IDC_SIZENESW));
+	else if(state==FRAME_LEFT||state==FRAME_RIGHT) SetCursor(LoadCursor(0,IDC_SIZEWE));
+	else if(state==FRAME_UPPER||state==FRAME_LOWER) SetCursor(LoadCursor(0,IDC_SIZENS));
+	else if(state==FRAME_INSIDE) SetCursor(LoadCursor(0,IDC_SIZEALL));
+	else SetCursor(LoadCursor(0,IDC_ARROW));
+}
+
+void SetTextEditColorDesign(TEXTEDIT_COLOR_INFO *pColorInfo,CTheme *pobj_Theme,BOOL bRedraw){
+	pColorInfo->rgbDefault=pobj_Theme->TextColorInfo.rgbDefault;
+	pColorInfo->rgbComment=pobj_Theme->TextColorInfo.rgbComment;
+	pColorInfo->rgbStatement=pobj_Theme->TextColorInfo.rgbStatement;
+	pColorInfo->rgbString=pobj_Theme->TextColorInfo.rgbString;
+	pColorInfo->rgbCursorBack=pobj_Theme->TextColorInfo.rgbCursorBack;
+	pColorInfo->rgbBackground=pobj_Theme->TextColorInfo.rgbBackground;
+
+	//アクティブテーマにセット
+	lstrcpy(pobj_nv->szActiveTheme,pobj_Theme->m_name);
+
+	//テーマ依存の描画リソースを取得
+	pobj_DBTheme->unlock();
+	pobj_DBTheme->lock();
+
+	if(bRedraw){
+		//再描画
+		extern MDIINFO MdiInfo[MAX_WNDNUM];
+		int i;
+		for(i=0;i<MAX_WNDNUM;i++){
+			if(MdiInfo[i].hwnd){
+				if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
+					SetTextEditWordColor(i);
+					InvalidateRect(MdiInfo[i].pmti->hEdit,NULL,0);
+				}
+			}
+		}
+	}
+}
+
+BOOL SerialCheck(char *buffer){
+	_int64 i64;
+	i64=_atoi64(buffer);
+	i64=(i64*2-129374);
+	i64=(i64*3-34564);
+	i64=(i64*4-2334);
+
+	if(i64==SERIAL_HASH_64) return 1;
+	return 0;
+}
+void SerialCheck_IniFile(void){
+	char temporary[MAX_PATH];
+	sprintf(temporary,"%sUserSetting\\sh.ini",pj_editor_Dir);
+	char *buffer;
+	buffer=ReadBuffer_NonErrMsg(temporary);
+	if(buffer){
+		_int64 i64;
+		i64=_atoi64(buffer);
+		if(i64==SERIAL_HASH_64){
+			bProfessional=1;
+		}
+		HeapDefaultFree(buffer);
+	}
+}
+void WriteSerialHash(void){
+	MakeUserSettingDir();
+
+	char temporary[MAX_PATH],temp2[255];
+	sprintf(temporary,"%sUserSetting\\sh.ini",pj_editor_Dir);
+
+	_i64toa(SERIAL_HASH_64,temp2,10);
+	WriteBuffer(temporary,temp2,lstrlen(temp2));
+}
+BOOL SetupProjectEditor(void){
+	extern HINSTANCE hInst;
+	int i;
+	char str[MAX_PATH],temporary[MAX_PATH];
+
+
+	//リソース用DLLをマッピング
+#if defined(JPN)
+	//日本語リソース
+	sprintf(temporary,"%sSubOperation\\res.dll",pj_editor_Dir);
+#else
+	//英語リソース
+	sprintf(temporary,"%sSubOperation\\res_e.dll",pj_editor_Dir);
+#endif
+	hResInst=LoadLibrary(temporary);
+
+	//アイコンリソースDLLをマッピング
+	sprintf(temporary,"%sSubOperation\\icon_res.dll",pj_editor_Dir);
+	hIconResInst=LoadLibrary(temporary);
+
+	//LuxCtrl.dllをマッピング
+	sprintf(temporary,"%sSubOperation\\LuxCtrl.dll",pj_editor_Dir);
+	hLib_LuxCtrl=LoadLibrary(temporary);
+	if(!hLib_LuxCtrl){
+		MessageBox(0,"LuxCtrl.dllの読み込みに失敗しました。",APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+		return 0;
+	}
+	LuxToolbar_CreateInstance=
+		(PROC_LuxToolbar_CreateInstance)GetProcAddress(hLib_LuxCtrl,"LuxToolbar_CreateInstance");
+
+
+	//モジュールディレクトリを取得
+	GetModuleFileName(hInst,temporary,MAX_PATH);
+	_splitpath(temporary,pj_editor_Dir,str,NULL,NULL);
+	lstrcat(pj_editor_Dir,str);
+
+	//ヒープオブジェクトを作成
+	extern HANDLE hHeap;
+	hHeap=HeapCreate(HEAP_GENERATE_EXCEPTIONS,0,0);
+
+
+	///////////////////////////////
+	// シリアルIDの確認
+	///////////////////////////////
+#ifdef SHAREWARE
+	//Pro版の場合はシリアル確認を行う
+	SerialCheck_IniFile();
+
+	if(bProfessional==0){
+		if(DialogBox(hResInst,MAKEINTRESOURCE(IDD_PASSWORD),0,DlgPassword)){
+			bProfessional=1;
+			WriteSerialHash();
+
+			DialogBox(hResInst,MAKEINTRESOURCE(IDD_PROFESSIONAL_START),0,DlgProfessionalStart);
+		}
+		else{
+			MessageBox(0,"機能制限がかかったスタンダードモードで起動します。",APPLICATION_NAME,MB_OK);
+		}
+	}
+#endif
+#ifndef THETEXT
+	//ProjectEditorの場合はシリアル確認を行う
+	SerialCheck_IniFile();
+#endif
+
+
+
+	if(bProfessional){
+		//Pro版は自動バックアップ及び復元機能を有効にする
+
+		//自動バックアップ用のディレクトリを生成
+		CreateBackupDir();
+	}
+
+	//COMを初期化
+	CoInitialize(0);
+
+	//スクリーンサイズを取得
+	ScreenX=GetSystemMetrics(SM_CXSCREEN);
+	ScreenY=GetSystemMetrics(SM_CYSCREEN);
+
+	//コンパイラ名をセット（デフォルトはWin32）
+	extern char *lpszCompilerName;
+	lpszCompilerName=WIN32_COMPILER_NAME;
+
+	//不揮発性のデータを取得
+	pobj_nv=new CNonVolatile;
+	pobj_nv->load();
+
+
+	if(!bProfessional){
+		//フリー版ではWeb検索の結果を残さない
+		pobj_nv->bSaveWebFindStr=0;
+
+		//フリー版ではCtrlキーによるリンク
+		pobj_nv->bCtrlKeyHyperLink=0;
+	}
+
+
+	//アルファブレンド用のAPIを取得
+	extern FWINLAYER SetLayeredWindowAttributes;
+	extern HINSTANCE hUser32Lib;
+	hUser32Lib=LoadLibrary("user32.dll");
+	SetLayeredWindowAttributes=(FWINLAYER)GetProcAddress(hUser32Lib,"SetLayeredWindowAttributes");
+
+
+
+
+	/////////////////////
+	// フォントを定義
+	/////////////////////
+
+	//パラメータ ヒント フォント
+	extern METHODCHECKINFO MethodCheckInfo;
+	MethodCheckInfo.hFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
+	i=MethodCheckInfo.LogFont.lfWeight;
+	MethodCheckInfo.LogFont.lfWeight=FW_BOLD;
+	MethodCheckInfo.hBoldFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
+	MethodCheckInfo.LogFont.lfWeight=i;
+
+	//ステータスバー フォント
+	LOGFONT LogFont;
+	extern HFONT hStatusFont;
+	LogFont.lfHeight=-12;
+	LogFont.lfWidth=0;
+	LogFont.lfEscapement=0;
+	LogFont.lfOrientation=0;
+	LogFont.lfWeight=FW_REGULAR;
+	LogFont.lfItalic=NULL;
+	LogFont.lfUnderline=NULL;
+	LogFont.lfStrikeOut=NULL;
+	LogFont.lfCharSet=SHIFTJIS_CHARSET;
+	LogFont.lfOutPrecision=OUT_STRING_PRECIS;
+	LogFont.lfClipPrecision=CLIP_STROKE_PRECIS;
+	LogFont.lfQuality=DRAFT_QUALITY;
+	LogFont.lfPitchAndFamily=VARIABLE_PITCH;
+	sprintf(LogFont.lfFaceName,"ＭＳ Ｐゴシック");
+	hStatusFont=CreateFontIndirect(&LogFont);
+
+	//ハイパーリンク フォント
+	extern HFONT hHyperLinkFont;
+	LogFont.lfHeight=-12;
+	LogFont.lfWidth=0;
+	LogFont.lfEscapement=0;
+	LogFont.lfOrientation=0;
+	LogFont.lfWeight=FW_REGULAR;
+	LogFont.lfItalic=NULL;
+	LogFont.lfUnderline=TRUE;
+	LogFont.lfStrikeOut=NULL;
+	LogFont.lfCharSet=SHIFTJIS_CHARSET;
+	LogFont.lfOutPrecision=OUT_STRING_PRECIS;
+	LogFont.lfClipPrecision=CLIP_STROKE_PRECIS;
+	LogFont.lfQuality=DRAFT_QUALITY;
+	LogFont.lfPitchAndFamily=VARIABLE_PITCH;
+	sprintf(LogFont.lfFaceName,"ＭＳ Ｐゴシック");
+	hHyperLinkFont=CreateFontIndirect(&LogFont);
+
+	//ルーラー フォント
+	extern HFONT hRulerFont;
+	LogFont.lfHeight=-10;
+	LogFont.lfWidth=0;
+	LogFont.lfEscapement=0;
+	LogFont.lfOrientation=0;
+	LogFont.lfWeight=FW_REGULAR;
+	LogFont.lfItalic=NULL;
+	LogFont.lfUnderline=0;
+	LogFont.lfStrikeOut=NULL;
+	LogFont.lfCharSet=SHIFTJIS_CHARSET;
+	LogFont.lfOutPrecision=OUT_STRING_PRECIS;
+	LogFont.lfClipPrecision=CLIP_STROKE_PRECIS;
+	LogFont.lfQuality=DRAFT_QUALITY;
+	LogFont.lfPitchAndFamily=VARIABLE_PITCH;
+	sprintf(LogFont.lfFaceName,"ＭＳ ゴシック");
+	hRulerFont=CreateFontIndirect(&LogFont);
+
+	//行番号の描画用
+	extern HFONT hFont_LineNumber;
+	LogFont.lfHeight=-11;
+	LogFont.lfWidth=0;
+	LogFont.lfEscapement=0;
+	LogFont.lfOrientation=0;
+	LogFont.lfWeight=FW_BOLD;
+	LogFont.lfItalic=NULL;
+	LogFont.lfUnderline=NULL;
+	LogFont.lfStrikeOut=NULL;
+	LogFont.lfCharSet=ANSI_CHARSET;
+	LogFont.lfOutPrecision=OUT_STRING_PRECIS;
+	LogFont.lfClipPrecision=CLIP_STROKE_PRECIS;
+	LogFont.lfQuality=DRAFT_QUALITY;
+	LogFont.lfPitchAndFamily=VARIABLE_PITCH;
+	sprintf(LogFont.lfFaceName,"Courier New");
+	hFont_LineNumber=CreateFontIndirect(&LogFont);
+
+	//メニューフォント
+    NONCLIENTMETRICS NCMetrics;
+    NCMetrics.cbSize = sizeof( NONCLIENTMETRICS );
+    SystemParametersInfo( SPI_GETNONCLIENTMETRICS, sizeof( NONCLIENTMETRICS ), &NCMetrics, 0 );
+	hMenuFont=CreateFontIndirect(&NCMetrics.lfMenuFont);
+
+
+
+	//背景ブラシ
+	extern HBRUSH h3DFaceBackBrush;
+	h3DFaceBackBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
+
+	//アイコン
+	extern HICON hOwnerIcon,hBasicProgramIcon,hTextDocumentIcon,hWindowDocumentIcon;
+	hOwnerIcon=(HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MAIN),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
+	hBasicProgramIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_BASICPROGRAM),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
+	hTextDocumentIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
+	hWindowDocumentIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_WINDOW),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
+
+
+
+
+	//メインメニュー
+	pobj_MainMenu=new CMenuEx(LoadMenu(hResInst,MAKEINTRESOURCE(IDR_MAINMENU)));
+
+	if(!bProfessional){
+		//フリー版の場合はプレビュー機能を削除する
+		RemoveMenu(GetSubMenu(pobj_MainMenu->hMenu,0),IDM_PREVIEW,MF_BYCOMMAND);
+	}
+
+	pobj_MainMenu->InitOwnerDraw(1);			//オーナー描画の初期化
+
+	CSubMenuEx *pobj_FileMenu;
+	pobj_FileMenu=pobj_MainMenu->ppobj_MenuItemData[0]->pobj_SubMenu;
+
+	//未完成
+	extern HMENU hFirstMainMenu;
+	hFirstMainMenu=0;
+
+	//「最近使ったファイル」サブメニューを取得（と同時にも正規のメニュー文字列を指定）
+	for(i=0;i<pobj_FileMenu->iMenuItemNum;i++){
+		if(pobj_FileMenu->ppobj_MenuItemData[i]->str){
+			if(lstrcmp(pobj_FileMenu->ppobj_MenuItemData[i]->str,"FileHistory")==0){
+				pobj_FileMenu->RenameMenuItem(i,"最近使ったファイル(&F)");
+
+				extern CSubMenuEx *pobj_FileHistoryMenu;
+				pobj_FileHistoryMenu=pobj_FileMenu->ppobj_MenuItemData[i]->pobj_SubMenu;
+			}
+
+#ifndef THETEXT
+			//「最近使ったプロジェクト」サブメニューを取得（と同時にも正規のメニュー文字列を指定）
+			//※ProjectEditorのみ
+			if(lstrcmp(pobj_FileMenu->ppobj_MenuItemData[i]->str,"ProjectHistory")==0){
+				pobj_FileMenu->RenameMenuItem(i,"最近使ったプロジェクト(&J)");
+
+				extern CSubMenuEx *pobj_ProjectHistoryMenu;
+				pobj_ProjectHistoryMenu=pobj_FileMenu->ppobj_MenuItemData[i]->pobj_SubMenu;
+			}
+#endif
+		}
+	}
+
+#define ICONSET(itemID,iconID) pobj_MainMenu->SetIcon(itemID,(HICON)LoadImage(hIconResInst,MAKEINTRESOURCE(iconID),IMAGE_ICON,16,16,0));
+	//メニューアイコンをセット
+
+	//ファイル
+	ICONSET(IDM_NEW,IDI_NEW);
+	ICONSET(IDM_OPEN,IDI_OPEN);
+	ICONSET(IDM_SAVE,IDI_SAVE);
+	ICONSET(IDM_ALLSAVE,IDI_ALLSAVE);
+	ICONSET(IDM_PREVIEW,IDI_PREVIEW);
+	ICONSET(IDM_PRINTOUT,IDI_PRINT);
+
+	//編集
+	ICONSET(IDM_CUT,IDI_CUT);
+	ICONSET(IDM_COPY,IDI_COPY);
+	ICONSET(IDM_PASTE,IDI_PASTE);
+	ICONSET(IDM_UNDO,IDI_UNDO);
+	ICONSET(IDM_REDO,IDI_REDO);
+	ICONSET(IDM_FIND,IDI_FIND);
+
+	//表示
+	ICONSET(IDM_SET,IDI_OPTION);
+
+	//変換
+	ICONSET(IDM_CONV_ALPHA_SMALL,IDI_CONV_ALPHA_SMALL);
+	ICONSET(IDM_CONV_ALPHA_BIG,IDI_CONV_ALPHA_BIG);
+	ICONSET(IDM_CONV_HALF,IDI_CONV_HALF);
+	ICONSET(IDM_CONV_MULTI,IDI_CONV_MULTI);
+	ICONSET(IDM_CONV_KATAKANA,IDI_CONV_KATAKANA);
+	ICONSET(IDM_CONV_HIRAGANA,IDI_CONV_HIRAGANA);
+
+	//ヘルプ
+	ICONSET(IDM_TOPIC,IDI_HELP);
+
+#ifdef THETEXT
+	//TheTextのみの機能
+	ICONSET(IDM_STRING_COUNT,IDI_STRINGCOUNT);
+#else
+	//ProjectEditorのみの機能
+
+	//リリース
+	ICONSET(IDM_RELEASECOMPILE,IDI_RELEASECOMPILE);
+	ICONSET(IDM_RELEASERUN,IDI_RELEASERUN);
+
+	//デバッグ
+	ICONSET(IDM_ATTACH,IDI_ATTACH);
+	ICONSET(IDM_DEBUGCOMPILE,IDI_DEBUGCOMPILE);
+	ICONSET(IDM_DEBUG,IDI_DEBUGRUN);
+	ICONSET(IDM_BREAKPOINT,IDI_BREAKPOINT);
+	ICONSET(IDM_STEP_IN,IDI_STEPIN);
+	ICONSET(IDM_STEP_OVER,IDI_STEPOVER);
+	ICONSET(IDM_STEP_CURSOR,IDI_STEPTOCURSOR);
+	ICONSET(IDM_DEBUG_PAUSE,IDI_DEBUGPAUSE);
+	ICONSET(IDM_DEBUG_STOP,IDI_DEBUGSTOP);
+
+	//コミュニティ
+	ICONSET(IDM_COMMUNITY,IDI_COMMUNITY_MAIN);
+	ICONSET(IDM_COMMU_SEARCH,IDI_COMMUNITY_FIND);
+	ICONSET(IDM_COMMU_PM,IDI_COMMUNITY_PRIVATEMSG);
+	ICONSET(ID_COMMU_FORUM1,IDI_COMMUNITY_FORUM);
+	ICONSET(ID_COMMU_FORUM2,IDI_COMMUNITY_FORUM);
+	ICONSET(ID_COMMU_FORUM3,IDI_COMMUNITY_FORUM);
+	ICONSET(ID_COMMU_FORUM4,IDI_COMMUNITY_FORUM);
+	ICONSET(ID_COMMU_FORUM5,IDI_COMMUNITY_FORUM);
+	ICONSET(ID_COMMU_FORUM6,IDI_COMMUNITY_FORUM_SECRET);
+	ICONSET(ID_COMMU_FORUM7,IDI_COMMUNITY_FORUM);
+	ICONSET(ID_COMMU_FORUM8,IDI_COMMUNITY_FORUM);
+#endif
+
+#undef ICONSET
+
+
+
+
+	extern HMENU hEditMenuBase,hEditMenu;
+	hEditMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_EDITMENU));
+	hEditMenu=GetSubMenu(hEditMenuBase,0);
+
+	extern HMENU hRebarMenuBase,hRebarMenu;
+	hRebarMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_REBARMENU));
+	hRebarMenu=GetSubMenu(hRebarMenuBase,0);
+
+	extern HMENU hTabMenuBase,hTabMenu,hTabColorMenu;
+	hTabMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_TABMENU));
+	hTabMenu=GetSubMenu(hTabMenuBase,0);
+	hTabColorMenu=GetSubMenu(hTabMenu,0);
+
+	extern HMENU hFileTreeMenuBase;
+	hFileTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_FILETREEMENU));
+
+	extern HMENU hProcedureTreeMenuBase;
+	hProcedureTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_PROCEDURETREEMENU));
+
+	extern HMENU hMaterialTreeMenuBase;
+	hMaterialTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_MATERIALTREEMENU));
+
+	extern HMENU hRadMenuBase;
+	hRadMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_RADCONTEXTMENU));
+
+	//クリップボードのデータ形式（RAD用）を新規登録
+	extern DWORD dwRadClipboardID;
+	dwRadClipboardID=RegisterClipboardFormat("ProjectEditor-RAD");
+
+	//256色の標準パレットを読み込む
+	extern RGBQUAD DefaultColorTable256[256];
+	HANDLE hFile;
+	DWORD dw;
+	sprintf(temporary,"%sSubOperation\\8bit.plt",pj_editor_Dir);
+	hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	if(hFile==INVALID_HANDLE_VALUE){
+		//"\"%s\" ファイルの読み込みに失敗しました。"
+		sprintf(str,STRING_ERROR_CANT_FILEOPEN,temporary);
+		MessageBox(NULL,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+		return 0;
+	}
+	ReadFile(hFile,DefaultColorTable256,sizeof(RGBQUAD)*256,&dw,NULL);
+	CloseHandle(hFile);
+
+
+
+	//デザインテーマオブジェクトを生成
+	pobj_DBTheme=new CDBTheme();
+
+
+	/////////////////////////
+	// カラーデザインを設定
+	CTheme *pobj_Theme;
+	pobj_Theme=pobj_DBTheme->GetActiveTheme();
+	if(!pobj_Theme) pobj_Theme=pobj_DBTheme->ppobj_Theme[0];
+
+	SetTextEditColorDesign(&tci,pobj_Theme,0);
+
+
+#ifndef THETEXT
+	/////////////////////////////////////////////////////
+	// ProjectEditorのみ
+	/////////////////////////////////////////////////////
+
+
+	//クラスビュー管理オブジェクトを生成
+	pobj_ClassTreeView=new CClassTreeView();
+
+
+	/////////////////////////
+	// basic.sbpの内容を取得
+	/////////////////////////
+
+	extern char *pHeaderBuf;
+	sprintf(temporary,"%sInclude\\basic.sbp",pj_editor_Dir);
+	pHeaderBuf=ReadBuffer(temporary);
+
+	//ファイルをインクルード
+	pHeaderBuf=IncludeFiles(pHeaderBuf);
+
+
+	//デバッガ管理オブジェクトを生成
+	pobj_Debugger=new CDebugger();
+
+
+	//ブレークポイント管理オブジェクトを生成
+	extern CDBBreakPoint *pobj_DBBreakPoint;
+	pobj_DBBreakPoint=new CDBBreakPoint();
+#endif
+
+
+	return 1;
+}
+void EndProjectEditor(void){
+
+#ifndef THETEXT
+	/////////////////////////////////////////////////////
+	// ProjectEditorのみ
+	/////////////////////////////////////////////////////
+
+
+	//クラスビュー管理オブジェクトを破棄
+	delete pobj_ClassTreeView;
+	pobj_ClassTreeView=0;
+
+	//basic.sbpのソースコードバッファを解放
+	extern char *pHeaderBuf;
+	HeapDefaultFree(pHeaderBuf);
+
+	//デバッガ管理オブジェクトを破棄
+	delete pobj_Debugger;
+
+	//ブレークポイント管理オブジェクトを破棄
+	extern CDBBreakPoint *pobj_DBBreakPoint;
+	delete pobj_DBBreakPoint;
+#endif
+
+	//デザインテーマオブジェクトを破棄
+	delete pobj_DBTheme;
+
+	//不揮発性のデータを保存
+	pobj_nv->save();
+	delete pobj_nv;
+	pobj_nv=0;
+
+	//メインメニューオブジェクトを破棄
+	delete pobj_MainMenu;
+	pobj_MainMenu=0;
+
+	extern HFONT hStatusFont;
+	DeleteObject(hStatusFont);
+	extern HFONT hHyperLinkFont;
+	DeleteObject(hHyperLinkFont);
+	extern HFONT hRulerFont;
+	DeleteObject(hRulerFont);
+	extern HFONT hFont_LineNumber;
+	DeleteObject(hFont_LineNumber);
+	extern METHODCHECKINFO MethodCheckInfo;
+	DeleteObject(MethodCheckInfo.hFont);
+	DeleteObject(MethodCheckInfo.hBoldFont);
+	extern HICON hOwnerIcon,hBasicProgramIcon,hTextDocumentIcon,hWindowDocumentIcon;
+	DestroyIcon(hOwnerIcon);
+	DestroyIcon(hBasicProgramIcon);
+	DestroyIcon(hTextDocumentIcon);
+	DestroyIcon(hWindowDocumentIcon);
+	extern HMENU hEditMenuBase,hRebarMenuBase,hTabMenuBase;
+	DestroyMenu(hEditMenuBase);
+	DestroyMenu(hRebarMenuBase);
+	DestroyMenu(hTabMenuBase);
+	extern HMENU hFileTreeMenuBase;
+	DestroyMenu(hFileTreeMenuBase);
+	extern HMENU hProcedureTreeMenuBase;
+	DestroyMenu(hProcedureTreeMenuBase);
+	extern HMENU hMaterialTreeMenuBase;
+	DestroyMenu(hMaterialTreeMenuBase);
+	extern HMENU hRadMenuBase;
+	DestroyMenu(hRadMenuBase);
+
+	//背景ブラシ
+	extern HBRUSH h3DFaceBackBrush;
+	DeleteObject(h3DFaceBackBrush);
+
+	//スタンダードツールバーを破棄
+	if(pobj_StandardToolbar){
+		pobj_StandardToolbar->Release();
+		pobj_StandardToolbar=0;
+	}
+
+	//ビルドツールバーを破棄
+	if(pobj_ReleaseToolbar){
+		pobj_ReleaseToolbar->Release();
+		pobj_ReleaseToolbar=0;
+	}
+
+	//デバッガ用ツールバーを破棄
+	if(pobj_DebuggerToolbar){
+		pobj_DebuggerToolbar->Release();
+		pobj_DebuggerToolbar=0;
+	}
+
+	//ヒープオブジェクトを解放
+	extern HANDLE hHeap;
+	HeapDestroy(hHeap);
+
+	//DLLを解放
+	FreeLibrary(hResInst);
+	FreeLibrary(hIconResInst);
+	FreeLibrary(hLib_LuxCtrl);
+
+	//アルファブレンド用のAPIを解放
+	extern HINSTANCE hUser32Lib;
+	FreeLibrary(hUser32Lib);
+
+
+
+
+	if(bProfessional){
+		//Pro版は自動バックアップ及び復元機能を有効にする
+
+		//////////////////////////////////////
+		// バックアップ用ファイルを削除
+		//////////////////////////////////////
+		extern char szBackupDirPath[MAX_PATH];
+		RemoveDirectoryStrong(szBackupDirPath);
+	}
+
+}
+
+//各ウィンドウ生成
+void SetupWindow(HWND hwnd){
+	extern HINSTANCE hInst;
+	extern HMENU hFirstMainMenu;
+	RECT rect;
+	CLIENTCREATESTRUCT ccs;
+
+	INITCOMMONCONTROLSEX InitCommCtrl;
+	InitCommCtrl.dwSize=sizeof(INITCOMMONCONTROLSEX);
+	InitCommCtrl.dwICC=ICC_COOL_CLASSES|ICC_PAGESCROLLER_CLASS|ICC_WIN95_CLASSES|ICC_TAB_CLASSES;
+	InitCommonControlsEx(&InitCommCtrl);
+
+	//タブウィンドウ
+	pobj_MainTab=new CMainTab(hwnd);
+
+	//MDIの親ウィンドウ（クライアントウィンドウ）を作成
+	ccs.hWindowMenu=hFirstMainMenu;
+	ccs.idFirstChild=ID_FIRSTCHILD;
+	GetClientRect(hwnd,&rect);
+	hClient=CreateWindowEx(WS_EX_CLIENTEDGE,"MDICLIENT",NULL,
+		WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE,
+		0,0,0,0,
+		hwnd,(HMENU)1,hInst,(LPSTR)&ccs);
+
+	//レバーオブジェクトを生成
+	pobj_Rebar=new CMainRebar(hwnd);
+
+	//ステータスバー
+	extern HWND hStatusBar;
+	extern HFONT hStatusFont;
+	hStatusBar=CreateStatusWindow(
+		WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBARS_SIZEGRIP|CCS_BOTTOM,
+		NULL,hwnd,NULL);
+	SendMessage(hStatusBar,WM_SETFONT,(long)hStatusFont,0);
+
+	//プロジェクト ビュー
+	extern HWND hProjectView;
+	extern HWND hProjectView_ToolWindow;
+	RECT *prc;
+	prc=&pobj_nv->rectProjectView;
+	hProjectView_ToolWindow=CreateWindowEx(WS_EX_TOOLWINDOW,"ProjectView_ToolWindow","ProjectView",
+		WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_CLIPCHILDREN,
+		prc->left,prc->top,prc->right-prc->left,prc->bottom-prc->top,
+		hwnd,0,hInst,0);
+	hProjectView=CreateWindowEx(WS_EX_STATICEDGE,"ProjectView","ProjectView",
+		WS_CHILD|WS_CLIPCHILDREN,
+		0,0,0,0,
+		hwnd,0,hInst,0);
+	if(pobj_nv->bClipProjectView==0){
+		SetWindowLong(hProjectView,GWL_EXSTYLE,0);
+		SetParent(hProjectView,hProjectView_ToolWindow);
+		ResizeProjectView_ToolWindow();
+	}
+
+	//メニュー状態を設定
+	ResetState_DocMenu();
+
+
+	//SideWebを生成
+	pobj_SideWeb=new CSideWeb(hwnd);
+}
+
+//実行コマンド
+BOOL SetRunning(HWND hChild){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern LPSTR DefFileFilter;
+	int WndNum;
+	char temporary[MAX_PATH],temp2[MAX_PATH];
+	HANDLE hFind;
+	WIN32_FIND_DATA wfd;
+
+	extern char *lpszCompilerName;
+	sprintf(temporary,"%s%s",pj_editor_Dir,lpszCompilerName);
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind==INVALID_HANDLE_VALUE){
+		//"BasicCompiler.exe が見つかりません"
+		MessageBox(hOwner,STRING_ERROR_NOBASICCOMPILER,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+		return FALSE;
+	}
+	FindClose(hFind);
+
+	WndNum=GetWndNum(hChild);
+	if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+		if(MdiInfo[WndNum].path[0]=='\0'){
+			//"保存先のファイルを指定してください"
+			if(!GetFilePathDialog(hOwner,temp2,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,0)) return FALSE;
+
+			if(!SaveDocument(hChild,temp2)) return 0;
+		}
+		else{
+			if(MdiInfo[WndNum].pmti->bModify){
+				if(!SaveDocument(hChild,NULL)) return 0;
+			}
+			else{
+				if(hFind=FindFirstFile(MdiInfo[WndNum].path,&wfd)){
+					if(hFind==INVALID_HANDLE_VALUE){
+						if(!SaveDocument(hChild,NULL)) return 0;
+					}
+					else FindClose(hFind);
+				}
+			}
+		}
+	}
+	return 1;
+}
+
+BOOL IsNeedCompile(char *FileName,BOOL bDebug){
+	char temporary[MAX_PATH],temp2[MAX_PATH],temp3[MAX_PATH];
+	HANDLE hFind,hFile;
+	WIN32_FIND_DATA wfd;
+	FILETIME SourceTime,ExeTime;
+
+	_splitpath(FileName,temporary,temp2,temp3,NULL);
+	lstrcat(temporary,temp2);
+	lstrcat(temporary,temp3);
+	if(bDebug) lstrcat(temporary,"_debug.exe");
+	else lstrcat(temporary,".exe");
+
+	hFind=FindFirstFile(temporary,&wfd);
+	if(hFind==INVALID_HANDLE_VALUE) return 1;
+	FindClose(hFind);
+
+	hFile=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	GetFileTime(hFile,NULL,NULL,&SourceTime);
+	CloseHandle(hFile);
+
+	hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+	GetFileTime(hFile,NULL,NULL,&ExeTime);
+	CloseHandle(hFile);
+
+	if(SourceTime.dwHighDateTime<ExeTime.dwHighDateTime) return 0;
+	else if(SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
+		SourceTime.dwLowDateTime<=ExeTime.dwLowDateTime) return 0;
+	return 1;
+}
Index: /ProjectEditor/TabCtrl.cpp
===================================================================
--- /ProjectEditor/TabCtrl.cpp	(revision 3)
+++ /ProjectEditor/TabCtrl.cpp	(revision 3)
@@ -0,0 +1,359 @@
+#include "Common.h"
+
+
+CMainTab *pobj_MainTab=0;
+WNDPROC OldMainTabWndProc;
+
+
+LRESULT CALLBACK MainTabWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	static BOOL indexDrag=-1;
+	TCHITTESTINFO tcHitTest;
+	int iNewPos;
+	char temporary[MAX_PATH];
+	switch(message){
+		case WM_LBUTTONDOWN:
+			//クリックされたアイテムインデックスを取得
+			GetCursorPos(&tcHitTest.pt);
+			ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
+			indexDrag=TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
+			if(indexDrag==-1) break;
+
+			SetCapture(hwnd);
+			break;
+		case WM_LBUTTONUP:
+			indexDrag=-1;
+			ReleaseCapture();
+			break;
+		case WM_MOUSEMOVE:
+			if(indexDrag!=-1){
+				GetCursorPos(&tcHitTest.pt);
+				ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
+				iNewPos=TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
+				if(iNewPos==-1) break;
+				if(indexDrag!=iNewPos){
+					LockWindowUpdate(hOwner);
+
+					TC_ITEM tcItem;
+					tcItem.mask=TCIF_TEXT|TCIF_PARAM;
+					tcItem.pszText=temporary;
+					tcItem.cchTextMax=MAX_PATH;
+					TabCtrl_GetItem(pobj_MainTab->hTab,indexDrag,&tcItem);
+
+					TabCtrl_DeleteItem(pobj_MainTab->hTab,indexDrag);
+
+					TabCtrl_InsertItem(pobj_MainTab->hTab,iNewPos,&tcItem);
+
+					int iTemp;
+					iTemp=TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
+					if(iTemp!=iNewPos){
+						TabCtrl_DeleteItem(pobj_MainTab->hTab,iNewPos);
+						TabCtrl_InsertItem(pobj_MainTab->hTab,indexDrag,&tcItem);
+
+						LockWindowUpdate(0);
+						break;
+					}
+
+					indexDrag=iNewPos;
+
+					LockWindowUpdate(0);
+				}
+			}
+			return 0;
+		case WM_PAINT:
+			HDC hdc;
+			PAINTSTRUCT ps;
+			hdc=BeginPaint(hwnd,&ps);
+			if(pobj_MainTab)
+				pobj_MainTab->draw(hdc);
+			EndPaint(hwnd,&ps);
+			return 0;
+	}
+	return CallWindowProc(OldMainTabWndProc,hwnd,message,wParam,lParam);
+}
+
+
+int CMainTab::search(char *lpszText){
+	int i2,i3;
+	char temporary[MAX_PATH];
+
+	i3=TabCtrl_GetItemCount(hTab);
+
+	TC_ITEM tcItem;
+	tcItem.mask=TCIF_TEXT;
+	tcItem.pszText=temporary;
+	tcItem.cchTextMax=MAX_PATH;
+
+	for(i2=0;i2<i3;i2++){
+		TabCtrl_GetItem(hTab,i2,&tcItem);
+		if(lstrcmpi(lpszText,tcItem.pszText)==0) break;
+	}
+	if(i2==i3) return -1;
+
+	return i2;
+}
+
+
+CMainTab::CMainTab(HWND hParent){
+	extern HFONT hStatusFont;
+	hTab=CreateWindowEx(0,WC_TABCONTROL,NULL,
+		WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|TCS_OWNERDRAWFIXED,
+		0,0,0,0,
+		hParent,0,hInst,0);
+
+	TabCtrl_SetPadding(hTab,5,4);
+
+	DWORD dwStyle;
+    dwStyle = TabCtrl_GetExtendedStyle(hTab);
+    dwStyle &= ~TCS_EX_FLATSEPARATORS;
+    TabCtrl_SetExtendedStyle(hTab, dwStyle);
+
+
+	//サブクラス化
+	OldMainTabWndProc=(WNDPROC)GetWindowLong(hTab,GWL_WNDPROC);
+	SetWindowLong(hTab,GWL_WNDPROC,(LONG_PTR)MainTabWndProc);
+
+	//ボールド体フォントを生成
+	LOGFONT lf;
+	GetObject(hStatusFont,sizeof(LOGFONT),&lf);
+	lf.lfWeight=FW_BOLD;
+	hBoldFont=CreateFontIndirect(&lf);
+
+	SendMessage(hTab,WM_SETFONT,(long)hBoldFont,0);
+}
+
+CMainTab::~CMainTab(){
+	DeleteObject(hBoldFont);
+}
+
+void CMainTab::insert(char *lpszText,BOOL bResize,COLORREF color){
+	int sw=0;
+	if(TabCtrl_GetItemCount(hTab)==0) sw=1;
+
+	if(color==-1) color=RGB(230,230,230);
+
+	TC_ITEM tcItem;
+	tcItem.mask=TCIF_TEXT|TCIF_PARAM;
+	tcItem.pszText=lpszText;
+	tcItem.lParam=color;
+	TabCtrl_InsertItem(hTab,0,&tcItem);
+	TabCtrl_SetCurSel(hTab,0);
+
+	if(bResize){
+		if(sw) ResizeOwnerWnd();
+	}
+}
+
+void CMainTab::delete_item(char *lpszText,BOOL bResize){
+	int i2;
+	i2=search(lpszText);
+	if(i2==-1) return;
+
+	TabCtrl_DeleteItem(hTab,i2);
+
+	if(bResize){
+		if(TabCtrl_GetItemCount(hTab)==0) ResizeOwnerWnd();
+	}
+}
+
+void CMainTab::reset_item(char *lpszOldText,char *lpszNewText){
+	int i2;
+	i2=search(lpszOldText);
+	if(i2==-1) return;
+
+	TC_ITEM tcItem;
+	tcItem.mask=TCIF_TEXT;
+	tcItem.pszText=lpszNewText;
+	tcItem.cchTextMax=MAX_PATH;
+
+	TabCtrl_SetItem(hTab,i2,&tcItem);
+}
+
+COLORREF CMainTab::GetItemColor(char *lpszText){
+	int i2,i3;
+	char temporary[MAX_PATH];
+
+	i3=TabCtrl_GetItemCount(hTab);
+
+	TC_ITEM tcItem;
+	tcItem.mask=TCIF_TEXT|TCIF_PARAM;
+	tcItem.pszText=temporary;
+	tcItem.cchTextMax=MAX_PATH;
+
+	for(i2=0;i2<i3;i2++){
+		TabCtrl_GetItem(hTab,i2,&tcItem);
+		if(lstrcmpi(lpszText,tcItem.pszText)==0) return tcItem.lParam;
+	}
+	return -1;
+}
+
+void CMainTab::SelChangeEvent(){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	char temporary[MAX_PATH];
+
+	int i;
+	i=TabCtrl_GetCurSel(hTab);
+
+	TC_ITEM tcItem;
+	tcItem.mask=TCIF_TEXT;
+	tcItem.pszText=temporary;
+	tcItem.cchTextMax=MAX_PATH;
+	TabCtrl_GetItem(hTab,i,&tcItem);
+
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(lstrcmpi(temporary,MdiInfo[i].title)==0) break;
+	}
+	BringWindowToTop(MdiInfo[i].hwnd);
+}
+void CMainTab::MdiActiveEvent(char *lpszText){
+	int i2;
+	i2=search(lpszText);
+	if(i2==-1) return;
+
+	TabCtrl_SetCurSel(hTab,i2);
+}
+
+void CMainTab::draw(HDC hdc){
+	COLORREF colorGray;
+	HBRUSH hGrayBrush;
+
+	int nMaxPage;
+	nMaxPage=TabCtrl_GetItemCount(hTab);
+
+	//ペンを生成
+	HPEN hPen,hOldPen;
+	COLORREF colorPen;
+	colorPen=RGB(127,140,155);
+	hPen=CreatePen(PS_SOLID,0,colorPen);
+	hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+	//描画領域を塗りつぶす
+	RECT rc;
+	GetClientRect(hTab,&rc);
+	FillRect(hdc,&rc,GetSysColorBrush(COLOR_3DFACE));
+
+	//リージョンを生成
+	HRGN hDefaultRgn;
+	hDefaultRgn=CreateRectRgnIndirect(&rc);
+
+	int i;
+	char temporary[MAX_PATH];
+	HFONT hOldFont;
+	TCITEM item;
+	memset(&item,0,sizeof(TCITEM));
+	item.mask=TCIF_TEXT|TCIF_PARAM;
+	item.pszText=temporary;
+	item.cchTextMax=MAX_PATH;
+	for(i=nMaxPage-1;i>=0;i--){
+		if(i==TabCtrl_GetCurSel(hTab)){
+			//フォーカスを持つタブは最後に描画するため、飛び越す
+			continue;
+		}
+
+		TabCtrl_GetItem(hTab,i,&item);
+
+		//座標取得
+		TabCtrl_GetItemRect(hTab,i,&rc);
+
+
+
+		////////////////////////////
+		// タブ枠を描画
+		////////////////////////////
+		colorGray=item.lParam;
+
+		//ブラシを生成
+		hGrayBrush=CreateSolidBrush(colorGray);
+
+		SetBkColor(hdc,colorGray);
+
+		HBRUSH hOldBrush;
+		hOldBrush=(HBRUSH)SelectObject(hdc,hGrayBrush);
+
+		HRGN hRgn1,hRgn2;
+		hRgn1=CreateRectRgn(rc.left,rc.top,rc.right-20,rc.bottom);
+		hRgn2=CreateRectRgn(rc.right-20,rc.top,rc.right+2,rc.bottom);
+
+		SelectObject(hdc,hRgn1);
+		RoundRect(hdc,rc.left,rc.top,rc.right+2,rc.bottom+20,20,15);
+		SelectObject(hdc,hRgn2);
+		RoundRect(hdc,rc.left,rc.top,rc.right+2,rc.bottom+20,3,3);
+		SelectObject(hdc,hDefaultRgn);
+
+		DeleteObject(hRgn1);
+		DeleteObject(hRgn2);
+
+		SelectObject(hdc,hOldBrush);
+		DeleteObject(hGrayBrush);
+
+
+		extern HFONT hStatusFont;
+		hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
+
+
+
+		//文字を描画
+		DrawText(hdc,item.pszText,-1,&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
+
+
+		SelectObject(hdc,hOldFont);
+	}
+
+
+	/////////////////////////////////
+	// フォーカスを持つタブを描画
+	/////////////////////////////////
+	i=TabCtrl_GetCurSel(hTab);
+
+	TabCtrl_GetItem(hTab,i,&item);
+
+	//座標取得
+	TabCtrl_GetItemRect(hTab,i,&rc);
+
+	{
+		rc.top-=2;
+		////////////////////////////
+		// タブ枠を描画
+		////////////////////////////
+		colorGray=item.lParam;
+
+		//ブラシを生成
+		hGrayBrush=CreateSolidBrush(colorGray);
+
+		SetBkColor(hdc,colorGray);
+
+		HBRUSH hOldBrush;
+		hOldBrush=(HBRUSH)SelectObject(hdc,hGrayBrush);
+
+		HRGN hRgn1,hRgn2;
+		hRgn1=CreateRectRgn(rc.left,rc.top,rc.right-20,rc.bottom);
+		hRgn2=CreateRectRgn(rc.right-20,rc.top,rc.right+2,rc.bottom);
+
+		SelectObject(hdc,hRgn1);
+		RoundRect(hdc,rc.left,rc.top,rc.right+2,rc.bottom+20,20,15);
+		SelectObject(hdc,hRgn2);
+		RoundRect(hdc,rc.left,rc.top,rc.right+2,rc.bottom+20,3,3);
+		SelectObject(hdc,hDefaultRgn);
+
+		DeleteObject(hRgn1);
+		DeleteObject(hRgn2);
+
+		SelectObject(hdc,hOldBrush);
+		DeleteObject(hGrayBrush);
+
+		rc.top+=2;
+	}
+
+	hOldFont=(HFONT)SelectObject(hdc,hBoldFont);
+
+	//文字を描画
+	DrawText(hdc,item.pszText,-1,&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
+
+	SelectObject(hdc,hOldFont);
+
+
+
+	SelectObject(hdc,hOldPen);
+	DeleteObject(hPen);
+
+	DeleteObject(hDefaultRgn);
+}
Index: /ProjectEditor/TabCtrl.h
===================================================================
--- /ProjectEditor/TabCtrl.h	(revision 3)
+++ /ProjectEditor/TabCtrl.h	(revision 3)
@@ -0,0 +1,25 @@
+
+
+class CMainTab{
+	HFONT hBoldFont;
+
+	int search(char *lpszText);
+
+public:
+	HWND hTab;
+
+	CMainTab(HWND hParent);
+	~CMainTab();
+
+	void insert(char *lpszText,BOOL bResize,COLORREF color=-1);
+	void delete_item(char *lpszText,BOOL bResize);
+	void reset_item(char *lpszOldText,char *lpszNewText);
+
+	COLORREF GetItemColor(char *lpszText);
+
+	void SelChangeEvent();
+	void MdiActiveEvent(char *lpszText);
+
+	void draw(HDC hdc);
+};
+extern CMainTab *pobj_MainTab;
Index: /ProjectEditor/TextEditor.cpp
===================================================================
--- /ProjectEditor/TextEditor.cpp	(revision 3)
+++ /ProjectEditor/TextEditor.cpp	(revision 3)
@@ -0,0 +1,355 @@
+#include "Common.h"
+
+extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
+extern int font_width,font_height;
+
+
+int GetControlTabSpace(int WndNum,int *piCount){
+	if(pobj_nv->bEditor_LineNumber){
+		extern MDIINFO MdiInfo[MAX_WNDNUM];
+
+		char *pBuf;
+		pBuf=MdiInfo[WndNum].pmti->buffer;
+
+		int i,iNum=1,x=0;
+		for(i=0;;i++,x++){
+			if(IsRightTurn(pBuf,i,x)){
+				//右端で折り返す
+				iNum++;
+				x=-1;
+				i--;
+				continue;
+			}
+			if(pBuf[i]=='\0') break;
+			if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+				iNum++;
+
+				x=-1;
+			}
+		}
+		char temporary[255];
+		sprintf(temporary,"%d",iNum);
+
+		extern SIZE sizeLineNumberFont;
+
+		i=lstrlen(temporary);
+		if(piCount) *piCount=i;
+
+		return sizeLineNumberFont.cx*(i+2);
+	}
+
+	return CONTROL_TAB_SPACE_DEFAULT;
+}
+
+void ResetTextEditFont(HWND hwnd){
+	if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
+	hFont_TextEdit=CreateFontIndirect(&pobj_nv->lf);
+
+	//下線フォント
+	LOGFONT lf;
+	lf=pobj_nv->lf;
+	lf.lfUnderline=TRUE;
+	if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
+	hFont_HyperLink_TextEdit=CreateFontIndirect(&lf);
+
+	HDC hdc;
+	HFONT hOldFont;
+	hdc=GetDC(hwnd);
+
+
+	hOldFont=(HFONT)SelectObject(hdc,hFont_TextEdit);
+
+	//単位文字の幅、高さ
+	SIZE size;
+	GetTextExtentPoint32(hdc,"A",1,&size);
+	font_width=size.cx;
+	font_height=size.cy;
+
+	SelectObject(hdc,hOldFont);
+
+
+	//行番号表示用フォントのサイズ
+	extern HFONT hFont_LineNumber;
+	hOldFont=(HFONT)SelectObject(hdc,hFont_LineNumber);
+	extern SIZE sizeLineNumberFont;
+	GetTextExtentPoint32(hdc,"A",1,&sizeLineNumberFont);
+	SelectObject(hdc, hOldFont);
+	
+	
+	ReleaseDC(hwnd,hdc);
+}
+void SetTextEditWordColor(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,i2,i3,IsStr;
+	char str[255];
+	char *pBuf;
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	if(MdiInfo[WndNum].DocType==WNDTYPE_TEXT){
+		//通常のテキストはすべてをデフォルトカラー（標準で黒）にする
+		for(i=0;;i++){
+			if(pBuf[i]=='\0') break;
+			MdiInfo[WndNum].pmti->pColorRef[i]=tci.rgbDefault;
+		}
+		return;
+	}
+
+
+	if(!bProfessional){
+		//Standard版ではHTMLタグの色分け機能を排除
+		if(MdiInfo[WndNum].DocType==WNDTYPE_HTML){
+			for(i=0;;i++){
+				if(pBuf[i]=='\0') break;
+				MdiInfo[WndNum].pmti->pColorRef[i]=tci.rgbDefault;
+			}
+			return;
+		}
+	}
+
+	for(i=0,IsStr=0;;i++){
+		if(pBuf[i]=='\0') break;
+
+		if((IsVariableTopChar(pBuf[i]))&&IsStr==0){
+			for(i2=0;;i++,i2++){
+				if((!IsVariableChar(pBuf[i]))||pBuf[i]=='.'){
+					str[i2]=0;
+					break;
+				}
+				str[i2]=pBuf[i];
+			}
+
+			BOOL bResult=0;
+			if(MdiInfo[WndNum].DocType==WNDTYPE_BASIC){
+				i3=IsBasicReservedWord(str);
+				bResult=IsManagementCommand(i3);
+			}
+			else if(MdiInfo[WndNum].DocType==WNDTYPE_HTML){
+				bResult=IsHtmlReservedWord(str);
+			}
+
+			if(bResult){
+				for(i3=i-i2;i3<i;i3++){
+					MdiInfo[WndNum].pmti->pColorRef[i3]=tci.rgbStatement;
+				}
+			}
+			else{
+				for(i3=i-i2;i3<i;i3++){
+					MdiInfo[WndNum].pmti->pColorRef[i3]=tci.rgbDefault;
+				}
+			}
+			i--;
+			continue;
+		}
+		else{
+			if(IsStr||pBuf[i]=='\"'&&IsStr==0){
+				//文字列カラー（""で囲まれる範囲）
+				MdiInfo[WndNum].pmti->pColorRef[i]=tci.rgbString;
+			}
+			else{
+				//通常カラー
+				MdiInfo[WndNum].pmti->pColorRef[i]=tci.rgbDefault;
+			}
+		}
+
+		if(pBuf[i]=='\"') IsStr^=1;
+
+		if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+			IsStr=0;
+			continue;
+		}
+	}
+}
+void ResetScrollbar(int WndNum,int max_x,int max_y){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	RECT rect;
+
+	//エディタ画面左端のコントロールタブ
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+	HWND hEdit;
+	hEdit=GetWindow(MdiInfo[WndNum].hwnd,GW_CHILD);
+	GetClientRect(hEdit,&rect);
+
+	SCROLLINFO si;
+	si.cbSize=sizeof(SCROLLINFO);
+	si.fMask=SIF_PAGE|SIF_RANGE|SIF_DISABLENOSCROLL;
+
+	//垂直スクロールバーの設定
+	GetScrollInfo(hEdit,SB_VERT,&si);
+	si.nPage=(rect.bottom/font_height)-1;
+	si.nMin=0;
+	si.nMax=max_y+si.nPage/5*3;
+	SetScrollInfo(hEdit,SB_VERT,&si,1);
+
+	//水平スクロールバーの設定
+	GetScrollInfo(hEdit,SB_HORZ,&si);
+	si.nMin=0;
+	si.nPage=(rect.right-iControlTabSpace)/font_width   -1;
+	si.nMax=max_x+si.nPage/3;
+	SetScrollInfo(hEdit,SB_HORZ,&si,1);
+
+	//ルーラーを再描画
+	InvalidateRect(MdiInfo[WndNum].pmti->pobj_Ruler->hRulerWnd,NULL,0);
+	UpdateWindow(MdiInfo[WndNum].pmti->pobj_Ruler->hRulerWnd);
+}
+
+#define HIRA_START	(unsigned char)0x9F		//ひらがなの2バイト目の範囲
+#define HIRA_END	(unsigned char)0xF1
+#define KATA_START	(unsigned char)0x40		//カタカナの2バイト目の範囲
+#define KATA_END	(unsigned char)0x96
+BOOL IsHiragana(char *pBuf){
+	if((unsigned char)pBuf[0]==(unsigned char)0x82&&
+		HIRA_START<=(unsigned char)pBuf[1]&&(unsigned char)pBuf[1]<=HIRA_END) return 1;
+	return 0;
+}
+BOOL IsKatakana(char *pBuf){
+	if(((unsigned char)pBuf[0]==(unsigned char)0x83&&
+		KATA_START<=(unsigned char)pBuf[1]&&(unsigned char)pBuf[1]<=KATA_END)||
+		(unsigned char)pBuf[0]==(unsigned char)0x81&&(unsigned char)pBuf[1]==(unsigned char)0x5B) return 1;
+	return 0;
+}
+BOOL IsKanji(char *pBuf){
+	if((unsigned char)0x88<=(unsigned char)pBuf[0] && (unsigned char)pBuf[0]<=(unsigned char)0xEA) return 1;
+	return 0;
+}
+BOOL IsAlphabet(char c){
+	if('a'<=c&&c<='z'||'A'<=c&&c<='Z') return 1;
+	return 0;
+}
+BOOL IsReturnCode(char *pBuf){
+	if(pBuf[0]=='\r'&&pBuf[1]=='\n') return 1;
+	return 0;
+}
+void TextEdit_GetWordCaret(HWND hwnd,int WndNum,POINT *pPos,int *piStart,int *piEnd,BOOL bBeforeAfterFlag){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i,start,end;
+	char *pBuf;
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+	//ダブルクリック位置を取得（バッファインデックス）
+	i=GetBufferIndexFromCaretPos(pBuf,
+		pPos->x,
+		pPos->y);
+
+	if(IsDBCSLeadByte(pBuf[i])){
+		///////////////////
+		// 全角文字のとき
+		///////////////////
+
+		if(IsHiragana(pBuf+i)){
+			//ひらがな
+
+			//単語の先頭位置を取得
+			start=i;
+			for(;;start-=2){
+				if(0>start){
+					start+=2;
+					break;
+				}
+				if(!IsHiragana(pBuf+start)){
+					start+=2;
+					break;
+				}
+			}
+
+			//単語の終端位置を取得
+			end=i;
+			for(;;end+=2){
+				if(!IsHiragana(pBuf+end)) break;
+			}
+		}
+		else if(IsKatakana(pBuf+i)){
+			//カタカナ
+
+			//単語の先頭位置を取得
+			start=i;
+			for(;;start-=2){
+				if(0>start){
+					start+=2;
+					break;
+				}
+				if(!IsKatakana(pBuf+start)){
+					start+=2;
+					break;
+				}
+			}
+
+			//単語の終端位置を取得
+			end=i;
+			for(;;end+=2){
+				if(!IsKatakana(pBuf+end)) break;
+			}
+		}
+		else if(IsKanji(pBuf+i)){
+			//漢字
+
+			//単語の先頭位置を取得
+			start=i;
+			for(;;start-=2){
+				if(0>start){
+					start+=2;
+					break;
+				}
+				if(!IsKanji(pBuf+start)){
+					start+=2;
+					break;
+				}
+			}
+
+			//単語の終端位置を取得
+			end=i;
+			for(;;end+=2){
+				if(!IsKanji(pBuf+end)) break;
+			}
+		}
+		else{
+			//漢字とその他の全角文字
+			start=i;
+			end=start+2;
+		}
+	}
+	else{
+		///////////////////
+		// 半角文字のとき
+		///////////////////
+
+		//単語の先頭位置を取得
+		start=i;
+		for(;0<=start;start--){
+			if(!(IsVariableChar(pBuf[start])&&pBuf[start]!='.')){
+				break;
+			}
+		}
+		start++;
+
+		//単語の終端位置を取得
+		end=i;
+		for(;;end++){
+			if(!(IsVariableChar(pBuf[end])&&pBuf[end]!='.')) break;
+		}
+	}
+
+	*piStart=start;
+	*piEnd=end;
+}
+void CancelBeforeAutoIndent(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+
+	i=GetBufferIndexFromCaretPos(
+		MdiInfo[WndNum].pmti->buffer,
+		MdiInfo[WndNum].pmti->StartCaretPos.x,
+		MdiInfo[WndNum].pmti->StartCaretPos.y);
+	GetCaretPosFromBufferIndex(
+		MdiInfo[WndNum].pmti->buffer,
+		i-lstrlen(MdiInfo[WndNum].IndentStr),
+		&MdiInfo[WndNum].pmti->StartCaretPos);
+
+	TextEdit_Replace(WndNum,"",1);
+
+	HeapDefaultFree(MdiInfo[WndNum].IndentStr);
+	MdiInfo[WndNum].IndentStr=0;
+}
Index: /ProjectEditor/TextEditor_EventProc.cpp
===================================================================
--- /ProjectEditor/TextEditor_EventProc.cpp	(revision 3)
+++ /ProjectEditor/TextEditor_EventProc.cpp	(revision 3)
@@ -0,0 +1,271 @@
+#include "Common.h"
+
+
+//IME関連のイベント
+void TextEditEvent_IME_StartComposition(HWND hwnd);
+BOOL TextEditEvent_IME_Composition(HWND hwnd,LPARAM lParam);
+
+//マウス関連のイベント
+void TextEditEvent_LButtonDown(HWND hwnd,POINT *pMousePos);
+void TextEditEvent_LButtonUp(HWND hwnd,POINT *pMousePos);
+void TextEditEvent_MouseMove(HWND hwnd,POINT *pMousePos);
+void TextEditEvent_LButtonDblClk(HWND hwnd,POINT *pMousePos);
+
+//キーボード関連のイベント
+void TextEditEvent_KeyUp(HWND hwnd,int nVirtualKey);
+void TextEditEvent_Char(HWND hwnd,int nVirtualKey);
+void TextEditEvent_KeyDown(HWND hwnd,int nVirtualKey,int lKeyData);
+
+
+
+HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
+int font_width,font_height;
+
+//改行時のキャレットちらつき防止用
+int hide_caret_switch;
+
+LRESULT CALLBACK TextEditProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern HANDLE hHeap;
+	extern HWND hDocCombo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	static DWORD dwAutoScroll;
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	int i,WndNum;
+	SCROLLINFO si;
+	RECT rect;
+	POINT pos;
+
+	switch(message){
+		case WM_MDIACTIVATE:
+			if(!lParam) return 0;
+			i=GetWndNum((HWND)lParam);
+			if(i==-1) return 0;	//ウィンドウが初期状態の場合
+
+			i=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
+			SendMessage(hDocCombo,CB_SETCURSEL,i,0);
+			SetStatusText(NULL);
+			ResetState_EditMenu();
+			return 0;
+
+
+
+		///////////////////////
+		// IME関連のイベント
+		///////////////////////
+
+		case WM_IME_STARTCOMPOSITION:
+			TextEditEvent_IME_StartComposition(hwnd);
+			//デフォルト処理を行う
+			break;
+		case WM_IME_CHAR:
+			//デフォルト処理を行わない（WM_CHARを呼び出さないため）
+			return 0;
+		case WM_IME_COMPOSITION:
+			if(!TextEditEvent_IME_Composition(hwnd,lParam)) return 0;
+
+			//デフォルト処理を行う
+			break;
+
+
+
+		//////////////////////////
+		// マウス関連のイベント
+		//////////////////////////
+
+		case WM_LBUTTONDOWN:
+			pos.x=LOWORD(lParam);
+			pos.y=HIWORD(lParam);
+			TextEditEvent_LButtonDown(hwnd,&pos);
+			return 0;
+		case WM_LBUTTONUP:
+			pos.x=LOWORD(lParam);
+			pos.y=HIWORD(lParam);
+			TextEditEvent_LButtonUp(hwnd,&pos);
+			return 0;
+		case WM_MOUSEMOVE:
+			pos.x=LOWORD(lParam);
+			pos.y=HIWORD(lParam);
+			TextEditEvent_MouseMove(hwnd,&pos);
+			return 0;
+		case WM_LBUTTONDBLCLK:
+			pos.x=LOWORD(lParam);
+			pos.y=HIWORD(lParam);
+			TextEditEvent_LButtonDblClk(hwnd,&pos);
+			return 0;
+		case WM_RBUTTONUP:
+			pos.x=LOWORD(lParam);
+			pos.y=HIWORD(lParam);
+			ClientToScreen(hwnd,&pos);
+
+			//ポップアップメニューを表示
+			extern HMENU hEditMenu;
+			TrackPopupMenu(hEditMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,0,hOwner,NULL);
+			return 0;
+
+
+
+		//////////////////////////////
+		// キーボード関係のイベント
+		//////////////////////////////
+
+		case WM_KEYUP:
+			TextEditEvent_KeyUp(hwnd,wParam);
+			return 0;
+		case WM_CHAR:
+			TextEditEvent_Char(hwnd,wParam);
+			return 0;
+		case WM_KEYDOWN:
+			TextEditEvent_KeyDown(hwnd,wParam,lParam);
+			return 0;
+
+
+
+		case WM_PAINT:
+			PAINTSTRUCT ps;
+			HDC hdc;
+
+			WndNum=GetWndNum(GetParent(hwnd));
+			if(WndNum==-1) return 0;
+
+			hdc=BeginPaint(hwnd,&ps);
+			TextEdit_DrawBuffer(hdc,WndNum);
+			EndPaint(hwnd,&ps);
+			return 0;
+		case WM_SETFOCUS:
+			WndNum=GetWndNum(GetParent(hwnd));
+			if(WndNum==-1) return 0;
+
+			//線型キャレットを作成
+			CreateCaret(hwnd,NULL,1,font_height);
+
+			//キャレットポジションを設定
+			ResetCaretPos(WndNum);
+
+			//キャレットを表示（改行の処理中のキャレットちらつきを防止の考慮に注意）
+			if(hide_caret_switch==0) ShowCaret(hwnd);
+			return 0;
+		case WM_RESETCARETPOS:
+			WndNum=GetWndNum(GetParent(hwnd));
+			ResetCaretPos(WndNum);
+			return 0;
+		case WM_KILLFOCUS:
+			HideCaret(hwnd);
+			DestroyCaret();
+			return 0;
+		case WM_MOUSEWHEEL:
+			int zDelta;
+			zDelta= (short) HIWORD(wParam);
+
+			WndNum=GetWndNum(GetParent(hwnd));
+			si.cbSize=sizeof(SCROLLINFO);
+			si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+			GetScrollInfo(hwnd,SB_VERT,&si);
+
+			i=0;
+			if(zDelta>=120){
+				//上へスクロール
+				i=-3;
+			}
+			else if(zDelta<=-120){
+				//下へスクロール
+				i=3;
+			}
+
+			if(i){
+				GetClientRect(hwnd,&rect);
+				i=max(-si.nPos,min(i,si.nMax-(rect.bottom/font_height-2)-si.nPos));
+				if(i!=0){
+					si.nPos+=i;
+					SetScrollInfo(hwnd,SB_VERT,&si,1);
+
+					InvalidateRect(hwnd,NULL,0);
+				}
+				ResetCaretPos(WndNum);
+			}
+			return 0;
+		case WM_SIZE:
+			WndNum=GetWndNum(GetParent(hwnd));
+			if(WndNum==-1) return 0;
+			InvalidateRect(hwnd,NULL,0);
+			return 0;
+		case WM_VSCROLL:
+			WndNum=GetWndNum(GetParent(hwnd));
+			si.cbSize=sizeof(SCROLLINFO);
+			si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+			GetScrollInfo(hwnd,SB_VERT,&si);
+			if(LOWORD(wParam)==SB_LINEUP) i=-1;
+			else if(LOWORD(wParam)==SB_LINEDOWN) i=1;
+			else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)si.nPage;
+			else if(LOWORD(wParam)==SB_PAGEDOWN) i=si.nPage;
+			else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-si.nPos;
+			else i=0;
+			GetClientRect(hwnd,&rect);
+			i=max(-si.nPos,min(i,si.nMax-(rect.bottom/font_height-2)-si.nPos));
+			if(i!=0){
+				si.nPos+=i;
+				SetScrollInfo(hwnd,SB_VERT,&si,1);
+
+				InvalidateRect(hwnd,NULL,0);
+			}
+			ResetCaretPos(WndNum);
+			return 0;
+		case WM_HSCROLL:
+			WndNum=GetWndNum(GetParent(hwnd));
+			si.cbSize=sizeof(SCROLLINFO);
+			si.fMask=SIF_POS|SIF_PAGE|SIF_RANGE;
+			GetScrollInfo(hwnd,SB_HORZ,&si);
+			if(LOWORD(wParam)==SB_LINEUP) i=-1;
+			else if(LOWORD(wParam)==SB_LINEDOWN) i=1;
+			else if(LOWORD(wParam)==SB_PAGEUP) i=-(signed int)si.nPage;
+			else if(LOWORD(wParam)==SB_PAGEDOWN) i=si.nPage;
+			else if(LOWORD(wParam)==SB_THUMBTRACK) i=HIWORD(wParam)-si.nPos;
+			else i=0;
+
+			GetClientRect(hwnd,&rect);
+
+			int iControlTabSpace;
+			iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+			i=max(-si.nPos,min(i,si.nMax-((rect.right-iControlTabSpace)/font_width)-si.nPos));
+			if(i!=0){
+				si.nPos+=i;
+				SetScrollInfo(hwnd,SB_HORZ,&si,1);
+
+				InvalidateRect(hwnd,NULL,0);
+			}
+			ResetCaretPos(WndNum);
+
+			//ルーラーを再描画
+			InvalidateRect(MdiInfo[WndNum].pmti->pobj_Ruler->hRulerWnd,NULL,0);
+			UpdateWindow(MdiInfo[WndNum].pmti->pobj_Ruler->hRulerWnd);
+
+			return 0;
+		case WM_CLOSE:
+			CloseDocWindow(GetWndNum(hwnd));
+			pobj_nv->bMDIZoomed=IsZoomed(hwnd);
+			i=DefMDIChildProc(hwnd,message,wParam,lParam);
+
+			//メニュー状態を設定
+			ResetState_DocMenu();
+
+			return i;
+
+
+
+		case WM_SEARCH_TAB_CREATE:
+			HWND hOneTabWnd;
+			hOneTabWnd=CreateWindowEx(0,"OneTab","OneTab",
+				WS_CHILD|WS_VISIBLE,
+				0,0,0,0,
+				MdiInfo[wParam].pmti->pobj_WebResult->hwnd,0,hInst,0);
+
+			SetWindowLong(hOneTabWnd,GWL_USERDATA,(long)lParam);
+
+			return (LRESULT)hOneTabWnd;
+		case WM_SEARCH_TAB_CLOSE:
+			DestroyWindow((HWND)lParam);
+			return 0;
+	}
+	return DefMDIChildProc(hwnd,message,wParam,lParam);
+}
Index: /ProjectEditor/TextEditor_ImeEvent.cpp
===================================================================
--- /ProjectEditor/TextEditor_ImeEvent.cpp	(revision 3)
+++ /ProjectEditor/TextEditor_ImeEvent.cpp	(revision 3)
@@ -0,0 +1,73 @@
+#include "common.h"
+
+extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
+extern int font_width,font_height;
+
+void TextEditEvent_IME_StartComposition(HWND hwnd){
+	int WndNum;
+	WndNum=GetWndNum(GetParent(hwnd));
+
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+	HIMC hIMC;
+	hIMC=ImmGetContext(hwnd);
+
+	//コンポジションをセット
+	POINT pos;
+	COMPOSITIONFORM CompForm;
+	CompForm.dwStyle=CFS_POINT;
+	pos=MdiInfo[WndNum].pmti->StartCaretPos;
+	GetScrollBaseCaretPos(WndNum,(int *)&pos.x,(int *)&pos.y);
+	CompForm.ptCurrentPos.x=pos.x*font_width+iControlTabSpace;
+	CompForm.ptCurrentPos.y=pos.y*font_height;
+	ImmSetCompositionWindow(hIMC, &CompForm);
+
+	//フォントをセット
+	ImmSetCompositionFont(hIMC,&pobj_nv->lf);
+
+	ImmReleaseContext(hwnd,hIMC);
+}
+
+BOOL TextEditEvent_IME_Composition(HWND hwnd,LPARAM lParam){
+	if(lParam&GCS_RESULTSTR){
+		int WndNum;
+		WndNum=GetWndNum(GetParent(hwnd));
+
+		int iControlTabSpace;
+		iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+		////////////////////
+		// 確定文字列を取得
+		////////////////////
+
+		//コンテキストを取得
+		HIMC hIMC;
+		hIMC=ImmGetContext(hwnd);
+
+		int i;
+		char temporary[4096];
+		i=ImmGetCompositionString(hIMC, GCS_RESULTSTR, temporary,4096);
+		if(i==0) return 0;
+		temporary[i]=0;
+
+		//バッファをリプレイス
+		TextEdit_ReplaceUpdateUndoData(WndNum,temporary,0,1);
+		UpdateWindow(hwnd);
+
+		//コンポジションをセット（立て続けにIME入力が行われる場合を考慮）
+		POINT pos;
+		COMPOSITIONFORM CompForm;
+		CompForm.dwStyle=CFS_POINT;
+		pos=MdiInfo[WndNum].pmti->StartCaretPos;
+		GetScrollBaseCaretPos(WndNum,(int *)&pos.x,(int *)&pos.y);
+		CompForm.ptCurrentPos.x=pos.x*font_width+iControlTabSpace;
+		CompForm.ptCurrentPos.y=pos.y*font_height;
+		ImmSetCompositionWindow(hIMC, &CompForm);
+
+		//コンテキストを解放
+		ImmReleaseContext(hwnd,hIMC);
+	}
+
+	return 1;
+}
Index: /ProjectEditor/TextEditor_KeyEvent.cpp
===================================================================
--- /ProjectEditor/TextEditor_KeyEvent.cpp	(revision 3)
+++ /ProjectEditor/TextEditor_KeyEvent.cpp	(revision 3)
@@ -0,0 +1,990 @@
+#include "common.h"
+#include "HtmlAnalysis.h"
+
+
+void TextEditEvent_StartAnalysis_Basic(HWND hwnd,int WndNum,int nVirtualKey);
+void TextEditEvent_StartAnalysis_Html(HWND hwnd,int WndNum,int nVirtualKey);
+
+
+void TextEditEvent_KeyUp(HWND hwnd,int nVirtualKey){
+	if(nVirtualKey==VK_CONTROL&&pobj_nv->bCtrlKeyHyperLink){
+		int WndNum;
+		WndNum=GetWndNum(GetParent(hwnd));
+
+		if(MdiInfo[WndNum].pmti->iUnderStart!=-1){
+			//ハイパーリンク下線の表示を解除
+			MdiInfo[WndNum].pmti->iUnderStart=-1;
+			MdiInfo[WndNum].pmti->iUnderEnd=-1;
+
+			//再描画
+			InvalidateRect(hwnd,NULL,0);
+			UpdateWindow(hwnd);
+		}
+
+		obj_WebStrings.clear();
+	}
+}
+
+
+int IsIndentAdditionCommand_FromBuffer(char *buffer){
+	int i;
+	char temporary[255];
+
+	for(i=0;;i++){
+		if(!IsVariableChar(buffer[i])){
+			temporary[i]=0;
+			break;
+		}
+		temporary[i]=buffer[i];
+	}
+
+	if(lstrcmpi(temporary,"If")==0){
+		//If文の場合はブロック形式の有無を判定
+
+		for(;;i++){
+			if(buffer[i]=='\''||
+				IsCommandDelimitation(buffer,i)){
+				i--;
+				break;
+			}
+		}
+
+		while(buffer[i]==' '||buffer[i]=='\t') i--;
+
+		if(memicmp(buffer+i-3,"Then",4)==0){
+			//ブロック形式のIf
+			return 1;
+		}
+		else{
+			//一行のみのIf
+			return 0;
+		}
+	}
+
+	if(
+		lstrcmpi(temporary,"Case")==0||
+		lstrcmpi(temporary,"Class")==0||
+		lstrcmpi(temporary,"Do")==0||
+		lstrcmpi(temporary,"Else")==0||
+		lstrcmpi(temporary,"ElseIf")==0||
+		lstrcmpi(temporary,"Enum")==0||
+		lstrcmpi(temporary,"For")==0||
+		lstrcmpi(temporary,"Function")==0||
+		lstrcmpi(temporary,"Override")==0||
+		lstrcmpi(temporary,"Sub")==0||
+		lstrcmpi(temporary,"Type")==0||
+		lstrcmpi(temporary,"Virtual")==0||
+		lstrcmpi(temporary,"Static")==0||
+		lstrcmpi(temporary,"While")==0||
+		lstrcmpi(temporary,"With")==0||
+
+		lstrcmpi(temporary,"Private")==0||
+		lstrcmpi(temporary,"Protected")==0||
+		lstrcmpi(temporary,"Public")==0
+		) return 1;
+	else if(lstrcmpi(temporary,"Select")==0) return 2;
+	else if(lstrcmpi(temporary,"Interface")==0) return 3;
+
+	return 0;
+}
+int IsIndentDecreaseCommand_FromBuffer(char *buffer){
+	int i;
+	char temporary[255];
+
+	for(i=0;;i++){
+		if(!IsVariableChar(buffer[i])){
+			temporary[i]=0;
+			break;
+		}
+		temporary[i]=buffer[i];
+	}
+
+	if(lstrcmpi(temporary,"End")==0&&(buffer[i]==' '||buffer[i]=='\t')){
+		//End ～の場合
+
+		int i2=i;
+
+		while(buffer[i]==' '||buffer[i]=='\t') i++;
+
+		for(;;i++,i2++){
+			if(!IsVariableChar(buffer[i])){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=buffer[i];
+		}
+	}
+
+	if(
+		lstrcmpi(temporary,"Case")==0||
+		lstrcmpi(temporary,"EndClass")==0||
+		lstrcmpi(temporary,"Loop")==0||
+		lstrcmpi(temporary,"Else")==0||
+		lstrcmpi(temporary,"ElseIf")==0||
+		lstrcmpi(temporary,"EndIf")==0||
+		lstrcmpi(temporary,"EndEnum")==0||
+		lstrcmpi(temporary,"Next")==0||
+		lstrcmpi(temporary,"EndFunction")==0||
+		lstrcmpi(temporary,"EndSub")==0||
+		lstrcmpi(temporary,"EndType")==0||
+		lstrcmpi(temporary,"Wend")==0||
+		lstrcmpi(temporary,"EndWith")==0||
+
+		lstrcmpi(temporary,"Private")==0||
+		lstrcmpi(temporary,"Protected")==0||
+		lstrcmpi(temporary,"Public")==0
+		) return 1;
+	else if(lstrcmpi(temporary,"EndSelect")==0) return 2;
+	else if(lstrcmpi(temporary,"EndInterface")==0) return 3;
+
+
+	return 0;
+}
+
+int TextEdit_GetLineIndex(int WndNum,int iPos){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	char *pBuf;
+
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+	for(i=iPos;i>0;i--){
+		if(pBuf[i-1]=='\r'&&pBuf[i]=='\n') return i+1;
+	}
+	return i;
+}
+void TextEditEvent_Char(HWND hwnd,int nVirtualKey){
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	int i,i2,i3;
+	char temporary[1024];
+	char *pBuf,*pTemp;
+	CHARRANGE CharRange;
+
+
+	//BackSpaceはWM_KEYDOWNで処理
+	if(nVirtualKey==VK_BACK) return;
+
+	if(nVirtualKey==VK_ESCAPE){
+		if(ComplementWndInfo.hWnd){
+			//コード補完リストを破棄する
+			DestroyWindow(ComplementWndInfo.hWnd);
+			ComplementWndInfo.hWnd=0;
+		}
+
+		extern METHODCHECKINFO MethodCheckInfo;
+		if(MethodCheckInfo.hWnd){
+			//パラメータヒントを破棄する
+			DestroyWindow(MethodCheckInfo.hWnd);
+			MethodCheckInfo.hWnd=0;
+		}
+
+		return;
+	}
+
+	//未対応の文字コードの誤り入力を阻止
+	if(GetKeyState(VK_CONTROL)&0x8000) return;
+
+	int WndNum;
+	WndNum=GetWndNum(GetParent(hwnd));
+
+	if(ComplementWndInfo.hWnd){
+		if((!(IsVariableChar(nVirtualKey)||nVirtualKey==VK_RETURN))||nVirtualKey=='.'){
+			//コード補完リストを破棄する
+
+			//ペアステートメント補完の場合は、空白文字を容認する
+			if(!(nVirtualKey==' '&&ComplementWndInfo.pMemberInfo[0].dwAccess==ACCESS_PAIRCOMMAND)){
+				DestroyWindow(ComplementWndInfo.hWnd);
+				ComplementWndInfo.hWnd=0;
+			}
+		}
+	}
+
+	if(nVirtualKey==VK_RETURN){
+		if(ComplementWndInfo.hWnd){
+			//コード補完リストが表示されているとき
+			for(i=0;i<ComplementWndInfo.MemberNum;i++){
+				if(ListView_GetItemState(ComplementWndInfo.hList,i,LVIS_SELECTED)) break;
+			}
+			if(i!=ComplementWndInfo.MemberNum){
+				SendMessage(ComplementWndInfo.hList,WM_KEYDOWN,VK_RETURN,0);
+				return;
+			}
+			else{
+				//コード補完リストを破棄する
+				DestroyWindow(ComplementWndInfo.hWnd);
+				ComplementWndInfo.hWnd=0;
+			}
+		}
+
+		temporary[0]='\r';
+		temporary[1]='\n';
+		temporary[2]=0;
+
+		if(nVirtualKey==VK_RETURN&&pobj_nv->bAutoIndent){
+			//////////////////
+			// 自動インデント
+			//////////////////
+
+			//インデント処理中はちらつき防止のため、キャレットを一時非表示にする
+			extern int hide_caret_switch;
+			HideCaret(hwnd);
+			hide_caret_switch=1;
+
+			if(MdiInfo[WndNum].IndentStr){
+				//以前の自動インデントを消去する
+				CancelBeforeAutoIndent(WndNum);
+			}
+
+			pBuf=MdiInfo[WndNum].pmti->buffer;
+
+			int StartX;
+
+			//リプレイス前のカーソルバッファ位置を取得
+			i=GetBufferIndexFromCaretPos(pBuf,
+				MdiInfo[WndNum].pmti->StartCaretPos.x,
+				MdiInfo[WndNum].pmti->StartCaretPos.y);
+			StartX=MdiInfo[WndNum].pmti->StartCaretPos.x;
+
+			//リプレイス
+			TextEdit_ReplaceUpdateUndoData(WndNum,temporary,0,1);
+			pBuf=MdiInfo[WndNum].pmti->buffer;
+
+			//リプレイス後のカーソル行のインデントをi3に取得
+			for(i3=0;;i3++){
+				if(pBuf[i+i3]!='\t') break;
+			}
+
+			//前の行のインデントをコピー（i2にタブ数を格納）
+			for(;i>0;i--){
+				if(
+					pBuf[i-1]=='\r'&&pBuf[i]=='\n'&&
+					(!(pBuf[i+1]=='\r'&&pBuf[i+2]=='\n'))
+					){
+					i++;
+					break;
+				}
+			}
+
+			for(i2=0;;i2++){
+				if(pBuf[i+i2]!='\t') break;
+			}
+
+			if(MdiInfo[WndNum].DocType==WNDTYPE_BASIC){
+				//インデント追加のコマンドかどうかを判断
+				if(IsIndentAdditionCommand_FromBuffer(pBuf+i+i2)) i2++;
+			}
+
+			i2-=i3;
+			if(i2<0) i2=0;
+
+			//インデントが無いとき
+			if(i2==0){
+				hide_caret_switch=0;
+				ResetCaretPos(WndNum);
+				ShowCaret(hwnd);
+				return;
+			}
+
+			/*（Ｉ…カーソル）
+			（「\t\tⅠ」のような場合）、
+			（「\t\tⅠtext...」のような場合）を判断
+			*/
+			i=GetBufferIndexFromCaretPos(pBuf,
+				MdiInfo[WndNum].pmti->StartCaretPos.x,
+				MdiInfo[WndNum].pmti->StartCaretPos.y);
+			if(pBuf[i]=='\r'&&
+				pBuf[i+1]=='\n'){
+				//自動インデントを開始する（「\t\tⅠ」のような場合）
+				MdiInfo[WndNum].IndentStr=(char *)HeapAlloc(hHeap,0,i2+1);
+				memset(MdiInfo[WndNum].IndentStr,'\t',i2);
+				MdiInfo[WndNum].IndentStr[i2]=0;
+				TextEdit_Replace(WndNum,MdiInfo[WndNum].IndentStr,1);
+			}
+			else{
+				//自動インデントを有効にする（「\t\tⅠtext...」のような場合）
+
+				//リプレイス前のカーソルが行の先頭位置にあった場合は抜け出す
+				if(StartX==0){
+					hide_caret_switch=0;
+					ResetCaretPos(WndNum);
+					ShowCaret(hwnd);
+					return;
+				}
+
+				memset(temporary,'\t',i2);
+				temporary[i2]=0;
+				TextEdit_ReplaceUpdateUndoData(WndNum,temporary,0,1);
+			}
+
+			hide_caret_switch=0;
+			ShowCaret(hwnd);
+			return;
+		}
+	}
+	else if(nVirtualKey==VK_TAB){
+		pBuf=MdiInfo[WndNum].pmti->buffer;
+
+		TextEdit_GetSel(WndNum,&CharRange);
+		for(i=CharRange.cpMin;i>0;i--){
+			if(pBuf[i-1]=='\r'&&pBuf[i]=='\n'){
+				i++;
+				break;
+			}
+		}
+		CharRange.cpMin=i;
+
+		for(i2=0;i<CharRange.cpMax;i++){
+			if(pBuf[i]=='\0') break;
+			if(pBuf[i]=='\r'&&pBuf[i+1]=='\n') i2++;
+		}
+		if(i2){
+			if(GetKeyState(VK_SHIFT)&0x8000){
+				//////////////////////////////////
+				// 複数行にわたってタブ文字を削除
+				//////////////////////////////////
+
+				if(pBuf[CharRange.cpMax-2]=='\r'&&pBuf[CharRange.cpMax-1]=='\n'){
+					CharRange.cpMax-=2;
+				}
+
+				TextEdit_SetSel(WndNum,CharRange.cpMin,CharRange.cpMax);
+
+				pTemp=(char *)HeapAlloc(hHeap,0,CharRange.cpMax-CharRange.cpMin+1);
+
+				i=CharRange.cpMin;
+				for(i3=0;i<CharRange.cpMax;i++,i3++){
+					if(i==CharRange.cpMin&&pBuf[i]=='\t'){
+						i3--;
+						continue;
+					}
+					if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'&&pBuf[i+2]=='\t'){
+						pTemp[i3]='\r';
+						pTemp[i3+1]='\n';
+						i3++;
+
+						i+=2;
+						continue;
+					}
+					pTemp[i3]=pBuf[i];
+				}
+				pTemp[i3]=0;
+			}
+			else{
+				//////////////////////////
+				// 複数行にタブ文字を追加
+				//////////////////////////
+
+				if(pBuf[CharRange.cpMax-2]=='\r'&&pBuf[CharRange.cpMax-1]=='\n'){
+					CharRange.cpMax-=2;
+				}
+
+				i2++;	//先頭行のタブ文字も追加の対象
+				TextEdit_SetSel(WndNum,CharRange.cpMin,CharRange.cpMax);
+
+				pTemp=(char *)HeapAlloc(hHeap,0,CharRange.cpMax-CharRange.cpMin+1 +i2);
+
+				i=CharRange.cpMin;
+				if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+					i3=0;
+				}
+				else{
+					pTemp[0]='\t';
+					i3=1;
+				}
+				for(;i<CharRange.cpMax;i++,i3++){
+					if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'&&
+						(!(pBuf[i+2]=='\r'&&pBuf[i+3]=='\n'))){
+						pTemp[i3]='\r';
+						pTemp[i3+1]='\n';
+						pTemp[i3+2]='\t';
+						i3+=2;
+
+						i++;
+						continue;
+					}
+					pTemp[i3]=pBuf[i];
+				}
+				pTemp[i3]=0;
+			}
+
+			//リプレイス
+			TextEdit_ReplaceUpdateUndoData(WndNum,pTemp,0,0);
+			pBuf=MdiInfo[WndNum].pmti->buffer;
+
+			HeapDefaultFree(pTemp);
+
+			//キャレット位置の設定
+			for(i=CharRange.cpMin+i3;;i++){
+				if(pBuf[i]=='\0') break;
+				if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+					i+=2;
+					break;
+				}
+			}
+			TextEdit_SetSel(WndNum,
+				CharRange.cpMin,
+				i);
+
+			//再描画
+			if(!TextEdit_ScrollCaret(WndNum,0))
+				InvalidateRect(hwnd,NULL,0);
+			ResetCaretPos(WndNum);
+
+			return;
+		}
+		else{
+			temporary[0]='\t';
+			temporary[1]=0;
+		}
+	}
+	else{
+		temporary[0]=nVirtualKey;
+		temporary[1]=0;
+	}
+
+
+	if(ComplementWndInfo.hWnd){
+		//コード補完リスト表示中のとき
+		ComplementWndInfo.iLength++;
+	}
+
+
+
+	///////////////////////
+	// キー入力の受け入れ
+	///////////////////////
+
+	TextEdit_ReplaceUpdateUndoData(WndNum,temporary,0,1);
+
+
+
+	////////////////////////////////////////////
+	// コード補完機能、パラメータヒントなど
+	////////////////////////////////////////////
+
+	if(MdiInfo[WndNum].DocType==WNDTYPE_BASIC)
+		TextEditEvent_StartAnalysis_Basic(hwnd,WndNum,nVirtualKey);
+	else if(MdiInfo[WndNum].DocType==WNDTYPE_HTML){
+
+		if(bProfessional){
+			//Pro版はコード補完機能を有効にする
+			TextEditEvent_StartAnalysis_Html(hwnd,WndNum,nVirtualKey);
+		}
+
+	}
+}
+void TextEditEvent_KeyDown(HWND hwnd,int nVirtualKey,int lKeyData){
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	int i,i2;
+	CHARRANGE CharRange;
+	char *pBuf;
+
+	int WndNum;
+	WndNum=GetWndNum(GetParent(hwnd));
+
+	if(nVirtualKey==VK_LEFT||nVirtualKey==VK_UP||nVirtualKey==VK_RIGHT||nVirtualKey==VK_DOWN||nVirtualKey==VK_PRIOR||nVirtualKey==VK_NEXT){
+		if(MdiInfo[WndNum].IndentStr){
+			//自動インデント中のインデントを無効にする
+			CancelBeforeAutoIndent(WndNum);
+			if(nVirtualKey==VK_LEFT) return;
+		}
+
+		if(ComplementWndInfo.hWnd){
+			//コード補完リスト表示中のとき
+			if(!(nVirtualKey==VK_LEFT||nVirtualKey==VK_RIGHT)){
+				//コード補完リストにフォーカスを与える
+				PostMessage(ComplementWndInfo.hList,WM_KEYDOWN,nVirtualKey,lKeyData);
+				return;
+			}
+		}
+
+		switch(nVirtualKey){
+			case VK_LEFT:
+				//上下キャレット移動時の左右位置保持機能を解除
+				MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=-1;
+
+				if((MdiInfo[WndNum].pmti->StartCaretPos.x==MdiInfo[WndNum].pmti->EndCaretPos.x&&
+					MdiInfo[WndNum].pmti->StartCaretPos.y==MdiInfo[WndNum].pmti->EndCaretPos.y)||
+					GetKeyState(VK_SHIFT)&0x8000){
+					//選択中でないとき、またはシフトキーが押されているとき
+					GetNaturalCaretPos_Left(WndNum);
+				}
+				else{
+					//選択中のとき
+					if(MdiInfo[WndNum].pmti->StartCaretPos.y<MdiInfo[WndNum].pmti->EndCaretPos.y)
+						MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+					else if(MdiInfo[WndNum].pmti->StartCaretPos.y>MdiInfo[WndNum].pmti->EndCaretPos.y)
+						MdiInfo[WndNum].pmti->StartCaretPos=MdiInfo[WndNum].pmti->EndCaretPos;
+					else{
+						if(MdiInfo[WndNum].pmti->StartCaretPos.x<MdiInfo[WndNum].pmti->EndCaretPos.x)
+							MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+						else
+							MdiInfo[WndNum].pmti->StartCaretPos=MdiInfo[WndNum].pmti->EndCaretPos;
+					}
+				}
+				break;
+			case VK_RIGHT:
+				//上下キャレット移動時の左右位置保持機能を解除
+				MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=-1;
+
+				if((MdiInfo[WndNum].pmti->StartCaretPos.x==MdiInfo[WndNum].pmti->EndCaretPos.x&&
+					MdiInfo[WndNum].pmti->StartCaretPos.y==MdiInfo[WndNum].pmti->EndCaretPos.y)||
+					GetKeyState(VK_SHIFT)&0x8000){
+					//選択中でないとき、またはシフトキーが押されているとき
+					GetNaturalCaretPos_Right(WndNum,
+						&MdiInfo[WndNum].pmti->StartCaretPos);
+				}
+				else{
+					//選択中のとき
+					if(MdiInfo[WndNum].pmti->StartCaretPos.y<MdiInfo[WndNum].pmti->EndCaretPos.y)
+						MdiInfo[WndNum].pmti->StartCaretPos=MdiInfo[WndNum].pmti->EndCaretPos;
+					else if(MdiInfo[WndNum].pmti->StartCaretPos.y>MdiInfo[WndNum].pmti->EndCaretPos.y)
+						MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+					else{
+						if(MdiInfo[WndNum].pmti->StartCaretPos.x<MdiInfo[WndNum].pmti->EndCaretPos.x)
+							MdiInfo[WndNum].pmti->StartCaretPos=MdiInfo[WndNum].pmti->EndCaretPos;
+						else
+							MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+					}
+				}
+				break;
+			case VK_UP:
+				if((GetKeyState(VK_CONTROL)&0x8000)&&
+					MdiInfo[WndNum].pmti->StartCaretPos.x!=0){
+					//行の先頭へキャレットを移動
+					MdiInfo[WndNum].pmti->StartCaretPos.x=0;
+
+					//上下キャレット移動時の左右位置保持機能を解除
+					MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=-1;
+				}
+				else{
+					if((MdiInfo[WndNum].pmti->StartCaretPos.x==MdiInfo[WndNum].pmti->EndCaretPos.x&&
+						MdiInfo[WndNum].pmti->StartCaretPos.y==MdiInfo[WndNum].pmti->EndCaretPos.y)||
+						GetKeyState(VK_SHIFT)&0x8000){
+						//選択中でないとき、またはシフトキーが押されているとき
+						GetNaturalCaretPos_Up(WndNum,
+							&MdiInfo[WndNum].pmti->StartCaretPos);
+					}
+					else{
+						//選択中のとき
+						if(MdiInfo[WndNum].pmti->StartCaretPos.y<MdiInfo[WndNum].pmti->EndCaretPos.y)
+							MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+						else if(MdiInfo[WndNum].pmti->StartCaretPos.y>MdiInfo[WndNum].pmti->EndCaretPos.y)
+							MdiInfo[WndNum].pmti->StartCaretPos=MdiInfo[WndNum].pmti->EndCaretPos;
+						else{
+							if(MdiInfo[WndNum].pmti->StartCaretPos.x<MdiInfo[WndNum].pmti->EndCaretPos.x)
+								MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+							else
+								MdiInfo[WndNum].pmti->StartCaretPos=MdiInfo[WndNum].pmti->EndCaretPos;
+						}
+
+						GetNaturalCaretPos_Up(WndNum,
+							&MdiInfo[WndNum].pmti->StartCaretPos);
+					}
+				}
+				break;
+			case VK_DOWN:
+				i2=MdiInfo[WndNum].pmti->StartCaretPos.y;
+				if((MdiInfo[WndNum].pmti->StartCaretPos.x==MdiInfo[WndNum].pmti->EndCaretPos.x&&
+					MdiInfo[WndNum].pmti->StartCaretPos.y==MdiInfo[WndNum].pmti->EndCaretPos.y)||
+					GetKeyState(VK_SHIFT)&0x8000){
+					//選択中でないとき、またはシフトキーが押されているとき
+					GetNaturalCaretPos_Down(WndNum,
+						&MdiInfo[WndNum].pmti->StartCaretPos);
+				}
+				else{
+					//選択中のとき
+					if(MdiInfo[WndNum].pmti->StartCaretPos.y<MdiInfo[WndNum].pmti->EndCaretPos.y)
+						MdiInfo[WndNum].pmti->StartCaretPos=MdiInfo[WndNum].pmti->EndCaretPos;
+					else if(MdiInfo[WndNum].pmti->StartCaretPos.y>MdiInfo[WndNum].pmti->EndCaretPos.y)
+						MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+					else{
+						if(MdiInfo[WndNum].pmti->StartCaretPos.x<MdiInfo[WndNum].pmti->EndCaretPos.x)
+							MdiInfo[WndNum].pmti->StartCaretPos=MdiInfo[WndNum].pmti->EndCaretPos;
+						else
+							MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+					}
+
+					GetNaturalCaretPos_Down(WndNum,
+						&MdiInfo[WndNum].pmti->StartCaretPos);
+				}
+
+				if(GetKeyState(VK_CONTROL)&0x8000){
+					if(i2!=MdiInfo[WndNum].pmti->StartCaretPos.y){
+						//行の先頭へキャレットを移動
+						MdiInfo[WndNum].pmti->StartCaretPos.x=0;
+					}
+					else{
+						//行の末端へキャレットを移動（終端行の場合）
+						CaretPos_LooseToNatural(WndNum,
+							INT_MAX,
+							MdiInfo[WndNum].pmti->StartCaretPos.y,
+							&MdiInfo[WndNum].pmti->StartCaretPos);
+					}
+
+					//上下キャレット移動時の左右位置保持機能を解除
+					MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=-1;
+				}
+				break;
+			case VK_PRIOR:
+				GetNaturalCaretPos_PageUp(WndNum,
+					&MdiInfo[WndNum].pmti->StartCaretPos);
+				break;
+			case VK_NEXT:
+				GetNaturalCaretPos_PageDown(WndNum,
+					&MdiInfo[WndNum].pmti->StartCaretPos);
+				break;
+		}
+
+		if(!(GetKeyState(VK_SHIFT)&0x8000)){
+			//シフトキーが押されていない、通常時
+			MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+		}
+
+		if(nVirtualKey==VK_PRIOR){
+			//ページアップスクロール
+			SendMessage(hwnd,WM_VSCROLL,SB_PAGEUP,0);
+		}
+		else if(nVirtualKey==VK_NEXT){
+			//ページダウンスクロール
+			SendMessage(hwnd,WM_VSCROLL,SB_PAGEDOWN,0);
+		}
+		else{
+			//その他、スクロールが必要な場合を考慮
+			TextEdit_ScrollCaret(WndNum,0);
+			ResetCaretPos(WndNum);
+		}
+
+		//編集メニューをリセット
+		ResetState_EditMenu();
+
+		//再描画（選択時の反転表示が解除されたときを考慮）
+		UpdateWindow(hwnd);	//ちらつき防止
+		InvalidateRect(hwnd,NULL,0);
+	}
+	else if(nVirtualKey==VK_HOME||nVirtualKey==VK_END){
+
+		//上下キャレット移動時の左右位置保持機能を解除
+		MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=-1;
+
+		if(GetKeyState(VK_CONTROL)&0x8000){
+			//ファイルの先頭または末端へキャレットを移動
+			if(nVirtualKey==VK_HOME){
+				MdiInfo[WndNum].pmti->StartCaretPos.x=0;
+				MdiInfo[WndNum].pmti->StartCaretPos.y=0;
+			}
+			else if(nVirtualKey==VK_END){
+				//存在するキャレット位置に変換
+				CaretPos_LooseToNatural(WndNum,
+					INT_MAX,
+					INT_MAX,
+					&MdiInfo[WndNum].pmti->StartCaretPos);
+			}
+		}
+		else{
+			//行の先頭または末端へキャレットを移動
+			if(nVirtualKey==VK_HOME) MdiInfo[WndNum].pmti->StartCaretPos.x=0;
+			else if(nVirtualKey==VK_END){
+				//存在するキャレット位置に変換
+				CaretPos_LooseToNatural(WndNum,
+					INT_MAX,
+					MdiInfo[WndNum].pmti->StartCaretPos.y,
+					&MdiInfo[WndNum].pmti->StartCaretPos);
+			}
+		}
+
+		if(!(GetKeyState(VK_SHIFT)&0x8000)){
+			//シフトキーが押されていない、通常時
+			MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+		}
+
+		if(!TextEdit_ScrollCaret(WndNum,0)){
+			//再描画（選択時の反転表示が解除されたときを考慮）
+			InvalidateRect(hwnd,NULL,0);
+		}
+		ResetCaretPos(WndNum);
+
+		//編集メニューをリセット
+		ResetState_EditMenu();
+	}
+	else if(nVirtualKey==VK_DELETE){
+		////////////
+		// 削除キー
+		////////////
+
+		TextEdit_GetSel(WndNum,&CharRange);
+
+		pBuf=MdiInfo[WndNum].pmti->buffer;
+
+		//キャレットがファイルの終端にあるとき
+		if(CharRange.cpMin==lstrlen(pBuf)) return;
+
+		if(CharRange.cpMin==CharRange.cpMax){
+			if(MdiInfo[WndNum].IndentStr){
+				//自動インデントを有効にする
+				char temporary[1024];
+				lstrcpy(temporary,MdiInfo[WndNum].IndentStr);
+
+				CancelBeforeAutoIndent(WndNum);
+				TextEdit_ReplaceUpdateUndoData(WndNum,temporary,0,1);
+			}
+
+			if(pBuf[CharRange.cpMin]=='\r'&&pBuf[CharRange.cpMin+1]=='\n'||
+				IsDBCSLeadByte(pBuf[CharRange.cpMin])){
+				CharRange.cpMax+=2;
+			}
+			else CharRange.cpMax++;
+
+			GetCaretPosFromBufferIndex(
+				MdiInfo[WndNum].pmti->buffer,
+				CharRange.cpMax,
+				&MdiInfo[WndNum].pmti->EndCaretPos);
+		}
+
+		TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
+	}
+	else if(nVirtualKey==VK_BACK){
+		/////////////////
+		// BackSpaceキー
+		/////////////////
+
+		if(MdiInfo[WndNum].IndentStr){
+			//自動インデント中のインデントの場合、インデントの1文字を削除する
+			if(lstrlen(MdiInfo[WndNum].IndentStr)==1){
+				//1文字しか残っていない場合は自動インデントそのものを消去する
+				CancelBeforeAutoIndent(WndNum);
+			}
+			else{
+				MdiInfo[WndNum].IndentStr[lstrlen(MdiInfo[WndNum].IndentStr)-1]=0;
+
+				i=GetBufferIndexFromCaretPos(
+					MdiInfo[WndNum].pmti->buffer,
+					MdiInfo[WndNum].pmti->StartCaretPos.x,
+					MdiInfo[WndNum].pmti->StartCaretPos.y);
+				GetCaretPosFromBufferIndex(
+					MdiInfo[WndNum].pmti->buffer,
+					i-1,
+					&MdiInfo[WndNum].pmti->StartCaretPos);
+				TextEdit_Replace(WndNum,"",1);
+			}
+			return;
+		}
+
+		TextEdit_GetSel(WndNum,&CharRange);
+
+		if(CharRange.cpMax==0) return;
+		if(CharRange.cpMin==CharRange.cpMax){
+			if(ComplementWndInfo.hWnd){
+				//コード補完リスト表示中のとき
+				ComplementWndInfo.iLength--;
+			}
+
+			SendMessage(hwnd,WM_KEYDOWN,VK_LEFT,0);
+		}
+		SendMessage(hwnd,WM_KEYDOWN,VK_DELETE,0);
+	}
+}
+
+
+
+void TextEditEvent_StartAnalysis_Basic(HWND hwnd,int WndNum,int nVirtualKey){
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	int i,i2,i3;
+	CHARRANGE CharRange;
+	char temporary[1024];
+
+	char *pBuf;
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+
+	////////////////////
+	// パラメータヒント
+	////////////////////
+
+	extern METHODCHECKINFO MethodCheckInfo;
+	if(pobj_nv->dwParameterHint&&
+		(!ComplementWndInfo.hWnd)&&
+		(MethodCheckInfo.hWnd||nVirtualKey==' '||nVirtualKey=='\"'||nVirtualKey=='(')){
+			//直前に入力された文字を表示
+			UpdateWindow(hwnd);
+
+			//パラメータヒントを表示
+			ShowParameterHint(WndNum);
+	}
+
+
+	///////////////////////////////
+	// ペアステートメント補完
+	///////////////////////////////
+
+	if(
+		pobj_nv->BackNum_PairStatementComplement&&
+		(nVirtualKey=='c'||nVirtualKey=='C'||		//Case
+		nVirtualKey=='e'||nVirtualKey=='E'||		//End ～
+		nVirtualKey=='l'||nVirtualKey=='L'||		//Loop
+		nVirtualKey=='n'||nVirtualKey=='N'||		//Next
+		nVirtualKey=='p'||nVirtualKey=='P'||		//Private、Protected、Public
+		nVirtualKey=='w'||nVirtualKey=='W')		//Wend
+		){
+
+		i=GetBufferIndexFromCaretPos(pBuf,
+			MdiInfo[WndNum].pmti->StartCaretPos.x,
+			MdiInfo[WndNum].pmti->StartCaretPos.y);
+
+		i2=i-2;
+		while(pBuf[i2]==' '||pBuf[i2]=='\t') i2--;
+		if(IsCommandBackDelimitation(pBuf,i2)){
+			if(GetEndPairCommandInfo(pBuf,i-1)){
+
+				//入力された頭文字と一致するかどうかを検証
+				for(i3=0;i3<ComplementWndInfo.MemberNum;i3++){
+					if((char)CharUpper((LPSTR)(char)nVirtualKey)==
+						(char)CharUpper((LPSTR)ComplementWndInfo.pMemberInfo[i3].pName[0])) break;
+				}
+				if(i3==ComplementWndInfo.MemberNum){
+					DeleteComplementInfo();
+					return;
+				}
+
+				ComplementWndInfo.iLength=1;
+				CodeComplement(WndNum,i-1);
+
+				//初期入力時に補完リストの選択をさせるため
+				ResetCaretPos(WndNum);
+			}
+		}
+	}
+
+
+	//////////////////
+	// コード補完機能
+	//////////////////
+
+	if(nVirtualKey=='.'&&pobj_nv->bShowComplementWnd){
+		TextEdit_GetSel(WndNum,&CharRange);
+
+Complement:
+		i2=CharRange.cpMin-1;
+
+		i3=TextEdit_GetLineIndex(WndNum,i2);
+		int IsStr;
+		for(IsStr=0;i3<i2;i3++){
+			if(IsDBCSLeadByte(pBuf[i3])){
+				i3++;
+				continue;
+			}
+			if(pBuf[i3]=='\r'&&pBuf[i3+1]=='\n') break;
+			if(pBuf[i3]=='\''){
+				//注釈文のとき
+				return;
+			}
+			if(pBuf[i3]=='\"') IsStr^=1;
+		}
+		if(IsStr){
+			//文字列内のとき
+			return;
+		}
+
+		for(i=i2;i>0;i--){
+			if(pBuf[i-1]=='-'&&pBuf[i]=='>')i-=2;
+			if(pBuf[i]==']'){
+				for(i3=1,i--;i>0;i--){
+					if(pBuf[i]==']') i3++;
+					if(pBuf[i]=='['){
+						i3--;
+						if(i3==0) break;
+					}
+				}
+				if(pBuf[i]=='[') continue;
+				break;
+			}
+			if(pBuf[i]==')'){
+				for(i3=1,i--;i>0;i--){
+					if(pBuf[i]==')') i3++;
+					if(pBuf[i]=='('){
+						i3--;
+						if(i3==0) break;
+					}
+				}
+				if(pBuf[i]=='(') continue;
+				break;
+			}
+			if(!(IsVariableChar(pBuf[i])||pBuf[i]=='.')){
+				i++;
+				break;
+			}
+		}
+
+		if((nVirtualKey=='.'&&i2-i==0)||
+			nVirtualKey=='>'&&i2-i==1){
+			//オブジェクト識別子がないとき、Withを検索
+			GetWithObjectVariable(pBuf,i2,temporary);
+
+			if(nVirtualKey=='.') lstrcat(temporary,".");
+			else lstrcat(temporary,"->");
+		}
+		else{
+			//オブジェクト識別子をtemporaryにコピー
+
+			//アクセス違反を防ぐため、VN_SIZE以上の参照データへの補完は行わない
+			if(i2-i>VN_SIZE) return;
+
+			if(pBuf[i]=='.'){
+				GetWithObjectVariable(pBuf,i2,temporary);
+			}
+			else if(pBuf[i]=='-'&&pBuf[i+1]=='>'){
+				GetWithObjectVariable(pBuf,i2,temporary);
+			}
+			else temporary[0]=0;
+
+			i3=lstrlen(temporary);
+			memcpy(temporary+i3,pBuf+i,i2-i+1);
+			temporary[i3+i2-i+1]=0;
+		}
+
+		if(temporary[0]){
+			//オブジェクト識別子を検出した場合
+			if(GetComplementInfo(temporary,pBuf,i2)){
+				ComplementWndInfo.iLength=0;
+				CodeComplement(WndNum,i2+1);
+			}
+		}
+	}
+	else if(nVirtualKey=='>'&&pobj_nv->bShowComplementWnd){
+		TextEdit_GetSel(WndNum,&CharRange);
+		if(pBuf[CharRange.cpMin-2]=='-'){
+			goto Complement;
+		}
+	}
+}
+void TextEditEvent_StartAnalysis_Html(HWND hwnd,int WndNum,int nVirtualKey){
+	//////////////////////////
+	// HTMLのコード補完
+	//////////////////////////
+
+	extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
+	int i;
+
+	char *pBuf;
+	pBuf=MdiInfo[WndNum].pmti->buffer;
+
+
+
+	///////////////////////////////
+	// コード補完
+	///////////////////////////////
+
+	if(nVirtualKey==' '){
+ 
+		i=GetBufferIndexFromCaretPos(pBuf,
+			MdiInfo[WndNum].pmti->StartCaretPos.x,
+			MdiInfo[WndNum].pmti->StartCaretPos.y);
+
+		if(GetNowTagInfo(pBuf,i-1)){
+			ComplementWndInfo.iLength=0;
+			CodeComplement(WndNum,i);
+
+			//初期入力時に補完リストの選択をさせるため
+			ResetCaretPos(WndNum);
+		}
+	}
+}
Index: /ProjectEditor/TextEditor_MouseEvent.cpp
===================================================================
--- /ProjectEditor/TextEditor_MouseEvent.cpp	(revision 3)
+++ /ProjectEditor/TextEditor_MouseEvent.cpp	(revision 3)
@@ -0,0 +1,332 @@
+#include "common.h"
+
+void TextEditEvent_LButtonDown(HWND hwnd,POINT *pMousePos){
+	POINT pos;
+	int i;
+
+	int WndNum;
+	WndNum=GetWndNum(GetParent(hwnd));
+
+	if((GetKeyState(VK_CONTROL)&0x8000)&&pobj_nv->bCtrlKeyHyperLink){
+		//Ctrlキーが押されているとき
+		if(MdiInfo[WndNum].pmti->iUnderStart!=-1){
+			//単語が選択可能なとき
+
+			//半角文字列を選択時の全角とのズレを修正
+			int start,end;
+			start=MdiInfo[WndNum].pmti->iUnderStart;
+			end=MdiInfo[WndNum].pmti->iUnderEnd;
+			GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,start,&pos);
+			start=GetBufferIndexFromCaretPos(MdiInfo[WndNum].pmti->buffer,pos.x,pos.y);
+			GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,end,&pos);
+			end=GetBufferIndexFromCaretPos(MdiInfo[WndNum].pmti->buffer,pos.x,pos.y);
+
+			int length;
+			length=end-start;
+			if(length<=0) return;
+
+			char *pTemp;
+			pTemp=(char *)HeapAlloc(hHeap,0,length+1);
+			memcpy(
+				pTemp,
+				MdiInfo[WndNum].pmti->buffer+start,
+				length);
+			pTemp[length]=0;
+
+			obj_WebStrings.add(pTemp);
+
+			extern HWND hWebSearchCombo;
+			SetWindowText(GetWindow(hWebSearchCombo,GW_CHILD),obj_WebStrings.GetBuffer());
+
+			SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
+
+			HeapDefaultFree(pTemp);
+
+			return;
+		}
+	}
+
+	SetFocus(hwnd);
+	SetCapture(hwnd);
+
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+	if(MdiInfo[WndNum].IndentStr){
+		//自動インデント中のインデントを無効にする
+		CancelBeforeAutoIndent(WndNum);
+	}
+
+	MdiInfo[WndNum].pmti->bAutoScroll=0;
+
+	//上下キャレット移動時の左右位置保持機能を解除
+	MdiInfo[WndNum].pmti->Temp_UpDown_CaretXPos=-1;
+
+	if(0<=(pMousePos->x) && (pMousePos->x)<iControlTabSpace){
+		//コントロールタブをクリックしたときの処理
+
+		//カーソルを矢印マークにする
+		SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_ARROW_TO_RIGHT)));
+
+		GetNaturalCaretPos_Click(WndNum,
+			0,
+			pMousePos->y,
+			&MdiInfo[WndNum].pmti->StartCaretPos);
+		MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+
+		////////////
+		// 行を選択
+		////////////
+
+		char *pBuf;
+		pBuf=MdiInfo[WndNum].pmti->buffer;
+		CHARRANGE CharRange;
+		TextEdit_GetSel(WndNum,&CharRange);
+		i=CharRange.cpMin;
+		for(;;i++){
+			if(pBuf[i]=='\0') break;
+			if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
+				i+=2;
+				break;
+			}
+		}
+		TextEdit_SetSel(WndNum,
+			i,
+			CharRange.cpMin);
+	}
+	else{
+		GetNaturalCaretPos_Click(WndNum,
+			pMousePos->x-iControlTabSpace,
+			pMousePos->y,
+			&MdiInfo[WndNum].pmti->StartCaretPos);
+
+		if(!(GetKeyState(VK_SHIFT)&0x8000)){
+			//シフトキーが押されていない、通常時
+			MdiInfo[WndNum].pmti->EndCaretPos=MdiInfo[WndNum].pmti->StartCaretPos;
+		}
+
+		ResetCaretPos(WndNum);
+
+		if(!TextEdit_ScrollCaret(WndNum,0)){
+			//再描画（選択時の反転表示が解除されたときを考慮）
+			UpdateWindow(hwnd);	//ちらつき防止
+			InvalidateRect(hwnd,NULL,0);
+		}
+	}
+}
+
+void TextEditEvent_LButtonUp(HWND hwnd,POINT *pMousePos){
+	int WndNum;
+	WndNum=GetWndNum(GetParent(hwnd));
+
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+	if(0<=(pMousePos->x) && (pMousePos->x)<iControlTabSpace){
+		//コントロールタブをクリックしたときの処理
+
+		//カーソルを矢印マークにする
+		SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_ARROW_TO_RIGHT)));
+	}
+
+	if(GetCapture()==hwnd){
+		//////////////////////////
+		// ドラッグが終了するとき
+		//////////////////////////
+
+		ReleaseCapture();
+
+		//オートスクロールスレッドを停止
+		MdiInfo[WndNum].pmti->bAutoScroll=0;
+
+		//編集メニューをリセット
+		ResetState_EditMenu();
+	}
+}
+
+void AutoScrollThread(HWND hwnd){
+	//////////////////////////////
+	// 左右方向にオートスクロール
+	//////////////////////////////
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int WndNum;
+	POINT pos;
+
+	WndNum=GetWndNum(GetParent(hwnd));
+
+	
+	//エディタ画面左端のコントロールタブ
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+
+	while(MdiInfo[WndNum].pmti->bAutoScroll){
+		GetCursorPos(&pos);
+		ScreenToClient(hwnd,&pos);
+
+		GetNaturalCaretPos_Click(WndNum,
+			pos.x-iControlTabSpace,
+			pos.y,
+			&pos);
+
+		//存在するキャレット位置に変換
+		CaretPos_LooseToNatural(WndNum,
+			pos.x,
+			pos.y,
+			&MdiInfo[WndNum].pmti->StartCaretPos);
+
+		if(!TextEdit_ScrollCaret(WndNum,1))
+			InvalidateRect(hwnd,NULL,0);
+
+		//別スレッドからResetCaretPosを呼び出す
+		SendMessage(hwnd,WM_RESETCARETPOS,0,0);
+
+		Sleep(70);
+	}
+
+	_endthread();
+}
+void TextEditEvent_MouseMove(HWND hwnd,POINT *pMousePos){
+	int WndNum;
+	WndNum=GetWndNum(GetParent(hwnd));
+	if(WndNum==-1) return;
+
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+	if(GetCapture()==hwnd){
+		//////////////
+		// ドラッグ中
+		//////////////
+
+		RECT rect;
+		GetClientRect(hwnd,&rect);
+
+		if(
+			(short)pMousePos->y<0||				//上方向へオートスクロール
+			rect.bottom<=(short)pMousePos->y||	//下方向へオートスクロール
+			(short)pMousePos->x<iControlTabSpace||	//左方向へオートスクロール
+			rect.right<=(short)pMousePos->x		//右方向へオートスクロール
+			){
+			////////////////////////////
+			// オートスクロール
+			////////////////////////////
+
+			if(MdiInfo[WndNum].pmti->bAutoScroll){
+				//すでにオートスクロールスレッドが作動中のときは抜け出す
+				return;
+			}
+
+			//オートスクロールスレッドを起動
+			MdiInfo[WndNum].pmti->bAutoScroll=1;
+
+			_beginthread((void (__cdecl *)(void *))AutoScrollThread,0,(void *)hwnd);
+
+			return;
+		}
+		else if(MdiInfo[WndNum].pmti->bAutoScroll){
+			//オートスクロールを解除
+			MdiInfo[WndNum].pmti->bAutoScroll=0;
+		}
+
+
+		//////////////////////
+		// 通常のドラッグ選択
+		//////////////////////
+
+		POINT pos;
+		GetNaturalCaretPos_Click(WndNum,
+			pMousePos->x-iControlTabSpace,
+			pMousePos->y,
+			&pos);
+
+		if(pos.x!=MdiInfo[WndNum].pmti->StartCaretPos.x||pos.y!=MdiInfo[WndNum].pmti->StartCaretPos.y){
+			MdiInfo[WndNum].pmti->StartCaretPos=pos;
+
+			InvalidateRect(hwnd,NULL,0);
+			ResetCaretPos(WndNum);
+		}
+	}
+	else{
+		if(0<=pMousePos->x&&pMousePos->x<iControlTabSpace){
+			//コントロールタブの上にポインタがあるとき
+
+			//カーソルを矢印マークにする
+			SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_ARROW_TO_RIGHT)));
+
+			return;
+		}
+
+		if(pobj_nv->bCtrlKeyHyperLink){
+			if(GetKeyState(VK_CONTROL)&0x8000){
+				//Ctrlキーが押されているとき
+
+				POINT pos;
+				GetNaturalCaretPos_Click(WndNum,
+					pMousePos->x-iControlTabSpace,
+					pMousePos->y,
+					&pos);
+
+				TextEdit_GetWordCaret(
+					MdiInfo[WndNum].pmti->hEdit,
+					WndNum,
+					&pos,
+					&MdiInfo[WndNum].pmti->iUnderStart,&MdiInfo[WndNum].pmti->iUnderEnd,
+					WORDCARET_AFTER);
+
+				SetCursor(LoadCursor(0,IDC_ARROW));
+
+				InvalidateRect(hwnd,NULL,0);
+				UpdateWindow(hwnd);
+			}
+			else{
+				if(MdiInfo[WndNum].pmti->iUnderStart!=-1){
+					MdiInfo[WndNum].pmti->iUnderStart=-1;
+					MdiInfo[WndNum].pmti->iUnderEnd=-1;
+
+					InvalidateRect(hwnd,NULL,0);
+					UpdateWindow(hwnd);
+				}
+			}
+		}
+	}
+}
+
+void TextEdit_WordSelect(HWND hwnd,int WndNum){
+	////////////////////////////////////
+	// ダブルクリックによる単語セレクト
+	////////////////////////////////////
+
+	int start,end;
+	TextEdit_GetWordCaret(hwnd,WndNum,&MdiInfo[WndNum].pmti->StartCaretPos,&start,&end,WORDCARET_AFTER);
+
+	//セレクト
+	TextEdit_SetSel(WndNum,start,end);
+
+	//再描画
+	InvalidateRect(hwnd,NULL,0);
+	ResetCaretPos(WndNum);
+}
+void TextEditEvent_LButtonDblClk(HWND hwnd,POINT *pMousePos){
+	int WndNum;
+	WndNum=GetWndNum(GetParent(hwnd));
+
+	int iControlTabSpace;
+	iControlTabSpace=MdiInfo[WndNum].pmti->iWidth_ControlTabSpace;
+
+	if(0<=(pMousePos->x) && (pMousePos->x)<iControlTabSpace){
+		//コントロールタブをダブルクリックしたときの処理
+
+		//カーソルを矢印マーク（デフォルト）にする
+		SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_ARROW_TO_RIGHT)));
+
+		return;
+	}
+	else{
+		TextEdit_WordSelect(hwnd,WndNum);
+
+		//編集メニューをリセット
+		ResetState_EditMenu();
+	}
+}
Index: /ProjectEditor/TextEditor_UndoRedo.cpp
===================================================================
--- /ProjectEditor/TextEditor_UndoRedo.cpp	(revision 3)
+++ /ProjectEditor/TextEditor_UndoRedo.cpp	(revision 3)
@@ -0,0 +1,158 @@
+#include "common.h"
+
+void TextEdit_UndoCommand(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	TEXTEDIT_UNDOSTATE *pUndoState;
+
+	//自動インデント中のインデントを無効にする
+	if(MdiInfo[WndNum].IndentStr) CancelBeforeAutoIndent(WndNum);
+
+	pUndoState=MdiInfo[WndNum].edit_undo;
+	i=pUndoState->NowPos-1;
+	if(i==-1) i=MAX_UNDONUM-1;
+	if(!pUndoState->Command[i]){
+		MessageBeep(0);
+		return;
+	}
+	pUndoState->NowPos=i;
+
+	//選択範囲をセット
+	GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+		pUndoState->Range[pUndoState->NowPos].cpMin,
+		&MdiInfo[WndNum].pmti->StartCaretPos);
+	GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+		pUndoState->Range[pUndoState->NowPos].cpMax,
+		&MdiInfo[WndNum].pmti->EndCaretPos);
+
+	switch(pUndoState->Command[pUndoState->NowPos]){
+		case TEXTEDIT_UNDO_KEY:
+		case TEXTEDIT_UNDO_PASTE:
+			TextEdit_Replace(WndNum,"",1);
+			break;
+		case TEXTEDIT_UNDO_SELKEY:
+			TextEdit_Replace(WndNum,pUndoState->DelStr[pUndoState->NowPos],1);
+			break;
+	}
+
+	TextEdit_ScrollCaret(WndNum,0);
+	ResetCaretPos(WndNum);
+
+	//元に戻す、やり直しメニューをリセット
+	ResetState_UndoMenu();
+}
+void TextEdit_RedoCommand(int WndNum){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	TEXTEDIT_UNDOSTATE *pUndoState;
+
+	pUndoState=MdiInfo[WndNum].edit_undo;
+	if(!pUndoState->Command[pUndoState->NowPos]){
+		MessageBeep(0);
+		return;
+	}
+
+	switch(pUndoState->Command[pUndoState->NowPos]){
+		case TEXTEDIT_UNDO_KEY:
+		case TEXTEDIT_UNDO_PASTE:
+			//選択範囲をセット
+			GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+				pUndoState->Range[pUndoState->NowPos].cpMin,
+				&MdiInfo[WndNum].pmti->StartCaretPos);
+			GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+				pUndoState->Range[pUndoState->NowPos].cpMin,
+				&MdiInfo[WndNum].pmti->EndCaretPos);
+
+			TextEdit_Replace(WndNum,pUndoState->KeyStr[pUndoState->NowPos],1);
+			break;
+		case TEXTEDIT_UNDO_SELKEY:
+			//選択範囲をセット
+			GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+				pUndoState->DelRange[pUndoState->NowPos].cpMin,
+				&MdiInfo[WndNum].pmti->StartCaretPos);
+			GetCaretPosFromBufferIndex(MdiInfo[WndNum].pmti->buffer,
+				pUndoState->DelRange[pUndoState->NowPos].cpMax,
+				&MdiInfo[WndNum].pmti->EndCaretPos);
+
+			TextEdit_Replace(WndNum,pUndoState->KeyStr[pUndoState->NowPos],1);
+			break;
+	}
+
+	TextEdit_ScrollCaret(WndNum,0);
+	ResetCaretPos(WndNum);
+
+	pUndoState->NowPos++;
+	if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
+
+	//元に戻す、やり直しメニューをリセット
+	ResetState_UndoMenu();
+}
+
+BOOL bUndoDelimitation(char c){
+	if(c==' '||c=='\t'||
+		c=='\"'||
+		c==','||c==':'||c==';'||
+		c=='('||c==')'||
+		c=='+'||c=='-'||c=='*'||c=='/'||c=='^'||c=='\\'||c=='<'||c=='>'||c=='=') return 1;
+	return 0;
+}
+void TextEdit_NoticeChanging(int WndNum,int Command,char *KeyStr,char *DelStr,CHARRANGE *Range,CHARRANGE *DelRange){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	int i;
+	TEXTEDIT_UNDOSTATE *pUndoState;
+
+	pUndoState=MdiInfo[WndNum].edit_undo;
+
+	//Redoされた場合の不要なデータを削除する
+	for(i=pUndoState->NowPos;;i++){
+		if(i==MAX_UNDONUM) i=0;
+		if(pUndoState->Command[i]==0) break;
+		TextEdit_DeleteUndoData(WndNum,i);
+	}
+
+	i=pUndoState->NowPos-1;
+	if(i==-1) i=MAX_UNDONUM-1;
+	if(pUndoState->Command[i]==Command&&
+		pUndoState->Command[i]==TEXTEDIT_UNDO_KEY){
+		if(pUndoState->Range[i].cpMax==Range->cpMin&&KeyStr[0]!='\r'){
+			if(!(bUndoDelimitation(pUndoState->KeyStr[i][0])^bUndoDelimitation(KeyStr[0]))){
+				pUndoState->KeyStr[i]=(char *)HeapReAlloc(hHeap,0,pUndoState->KeyStr[i],lstrlen(pUndoState->KeyStr[i])+lstrlen(KeyStr)+1);
+				lstrcat(pUndoState->KeyStr[i],KeyStr);
+				pUndoState->Range[i].cpMax+=lstrlen(KeyStr);
+
+				HeapDefaultFree(KeyStr);
+
+				//元に戻す、やり直しメニューをリセット
+				ResetState_UndoMenu();
+				return;
+			}
+		}
+	}
+
+	//データ更新
+	pUndoState->Command[pUndoState->NowPos]=Command;
+	pUndoState->KeyStr[pUndoState->NowPos]=KeyStr;
+	pUndoState->DelStr[pUndoState->NowPos]=DelStr;
+	pUndoState->Range[pUndoState->NowPos]=*Range;
+	if(DelRange) pUndoState->DelRange[pUndoState->NowPos]=*DelRange;
+
+	pUndoState->NowPos++;
+	if(pUndoState->NowPos==MAX_UNDONUM) pUndoState->NowPos=0;
+	if(pUndoState->Command[pUndoState->NowPos]){
+		//一番古い情報を切り捨てる
+		TextEdit_DeleteUndoData(WndNum,pUndoState->NowPos);
+	}
+
+	//元に戻す、やり直しメニューをリセット
+	ResetState_UndoMenu();
+}
+
+void TextEdit_DeleteUndoData(int WndNum,int pos){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	TEXTEDIT_UNDOSTATE *pUndoState;
+
+	pUndoState=MdiInfo[WndNum].edit_undo;
+	if(pUndoState->KeyStr[pos]) HeapDefaultFree(pUndoState->KeyStr[pos]);
+	if(pUndoState->DelStr[pos]) HeapDefaultFree(pUndoState->DelStr[pos]);
+	pUndoState->Command[pos]=0;
+}
Index: /ProjectEditor/WebSearch.cpp
===================================================================
--- /ProjectEditor/WebSearch.cpp	(revision 3)
+++ /ProjectEditor/WebSearch.cpp	(revision 3)
@@ -0,0 +1,1129 @@
+#include "common.h"
+#include "CIEsink.h"
+
+
+#define ID_TIMER_POPUP_ANIMATION 100
+#define ID_TIMER_IDLE 200
+
+extern FWINLAYER SetLayeredWindowAttributes;
+
+
+LRESULT CALLBACK ResultListProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	CResultList *pobj_ResultList;
+	POINT pos;
+	RECT rc;
+	int iItem;
+
+	switch(message){
+		case WM_TIMER:
+			if(wParam==ID_TIMER_POPUP_ANIMATION){
+				pobj_ResultList=(CResultList *)GetWindowLong(hwnd,GWL_USERDATA);
+
+				SetLayeredWindowAttributes(hwnd, 0,(int)((double)255/(double)100*(double)(pobj_ResultList->iAnimeCount*10)), LWA_ALPHA);
+
+				GetWindowRect(hwnd,&rc);
+				rc.top++;
+				SetWindowPos(hwnd,0,rc.left,rc.top,0,0,SWP_NOSIZE);
+
+				pobj_ResultList->iAnimeCount+=1;
+				if(pobj_ResultList->iAnimeCount>10){
+					KillTimer(hwnd,ID_TIMER_POPUP_ANIMATION);
+
+					SetTimer(hwnd,ID_TIMER_IDLE,100,NULL);
+				}
+			}
+			else if(wParam==ID_TIMER_IDLE){
+				InvalidateRect(hwnd,NULL,0);
+			}
+			return 0;
+		case WM_PAINT:
+			pobj_ResultList=(CResultList *)GetWindowLong(hwnd,GWL_USERDATA);
+
+			RECT ClientRect;
+			GetClientRect(hwnd,&ClientRect);
+
+			//描画を開始
+			HDC hdc;
+			PAINTSTRUCT ps;
+			hdc=BeginPaint(hwnd,&ps);
+
+			//メモリデバイスコンテキストを生成
+			HDC memdc;
+			HBITMAP hMemBmp;
+			memdc=CreateCompatibleDC(hdc);
+			hMemBmp=CreateCompatibleBitmap(hdc,ClientRect.right,ClientRect.bottom);
+			SelectObject(memdc,hMemBmp);
+
+			//フォントをセット
+			extern HFONT hStatusFont;
+			HFONT hOldFont;
+			hOldFont=(HFONT)SelectObject(memdc,hStatusFont);
+
+			//ウィンドウサイズを取得（アイテム座標を取得）
+			GetCursorPos(&pos);
+			GetWindowRect(hwnd,&rc);
+			rc.bottom=rc.top+LINK_ITEM_HEIGHT;
+
+			//クライアント アイテム 座標を取得
+			ClientRect.left+=10;
+			ClientRect.bottom=ClientRect.top+LINK_ITEM_HEIGHT;
+
+			//ブラシを生成
+			HBRUSH hFaceBrush,hShadowBrush,hOldBrush;
+			hFaceBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
+			hShadowBrush=CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
+
+			for(iItem=0;iItem<10;iItem++){
+				if(rc.left<pos.x && pos.x<rc.right && rc.top<pos.y && pos.y<rc.bottom){
+
+					SetBkColor(memdc,GetSysColor(COLOR_3DSHADOW));
+
+					hOldBrush=(HBRUSH)SelectObject(memdc,hShadowBrush);
+				}
+				else{
+					extern HFONT hStatusFont;
+					hOldFont=(HFONT)SelectObject(memdc,hStatusFont);
+
+					SetBkColor(memdc,GetSysColor(COLOR_3DFACE));
+
+					hOldBrush=(HBRUSH)SelectObject(memdc,hFaceBrush);
+				}
+				SetTextColor(memdc,RGB(0,0,255));
+
+				PatBlt(memdc,ClientRect.left-10,ClientRect.top,ClientRect.right,ClientRect.bottom,PATCOPY);
+				SelectObject(memdc,hOldBrush);
+
+				DrawText(memdc,pobj_ResultList->pobj_OneTab->lpszTitle[iItem],-1,&ClientRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE);
+
+				rc.top+=LINK_ITEM_HEIGHT;
+				rc.bottom=rc.top+LINK_ITEM_HEIGHT;
+
+				ClientRect.top+=LINK_ITEM_HEIGHT;
+				ClientRect.bottom=ClientRect.top+LINK_ITEM_HEIGHT;
+			}
+
+			SelectObject(memdc,hOldFont);
+
+			GetClientRect(hwnd,&ClientRect);
+			BitBlt(hdc,0,0,ClientRect.right,ClientRect.bottom,memdc,0,0,SRCCOPY);
+
+			EndPaint(hwnd,&ps);
+
+			DeleteObject(hFaceBrush);
+			DeleteObject(hShadowBrush);
+
+			DeleteDC(memdc);
+			DeleteObject(hMemBmp);
+			break;
+
+		case WM_LBUTTONDOWN:
+			pobj_ResultList=(CResultList *)GetWindowLong(hwnd,GWL_USERDATA);
+
+			GetCursorPos(&pos);
+			GetWindowRect(hwnd,&rc);
+			rc.bottom=rc.top+LINK_ITEM_HEIGHT;
+
+			for(iItem=0;iItem<10;iItem++){
+				if(rc.left<pos.x && pos.x<rc.right && rc.top<pos.y && pos.y<rc.bottom){
+					ShellExecute(hwnd,"open",pobj_ResultList->pobj_OneTab->lpszUrl[iItem],NULL,NULL,SW_SHOWNORMAL);
+					break;
+				}
+
+				rc.top+=LINK_ITEM_HEIGHT;
+				rc.bottom=rc.top+LINK_ITEM_HEIGHT;
+			}
+			return 0;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+
+CResultList::CResultList(COneTab *pot){
+	pobj_OneTab=pot;
+	iAnimeCount=0;
+
+	hwnd=CreateWindowEx(0,"ResultList","ResultList",
+		WS_POPUP|WS_CLIPCHILDREN|WS_VISIBLE|WS_BORDER,
+		0,0,0,0,
+		hOwner,0,hInst,0);
+
+	//ウィンドウを半透明にする
+	int lStyle;
+	lStyle=GetWindowLong(hwnd,GWL_EXSTYLE) | WS_EX_LAYERED;
+	SetWindowLong(hwnd,GWL_EXSTYLE,lStyle);
+	SetLayeredWindowAttributes(hwnd, 0, 0, LWA_ALPHA);
+
+	SetWindowLong(hwnd,GWL_USERDATA,(long)this);
+	SetTimer(hwnd,ID_TIMER_POPUP_ANIMATION,10,NULL);
+	BringWindowToTop(hwnd);
+
+	RECT rc;
+	GetWindowRect(pobj_OneTab->hTabWnd,&rc);
+
+	HDC hdc;
+	hdc=GetDC(hwnd);
+
+	extern HFONT hStatusFont;
+	HFONT hOldFont;
+	hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
+
+
+	//アイテム数を取得
+	int iItem,iMaxWidth=0;
+	for(iItem=0;iItem<10;iItem++){
+		if(pobj_OneTab->lpszTitle[iItem]==0){
+			break;
+		}
+
+		SIZE size;
+		GetTextExtentPoint32(hdc,pobj_OneTab->lpszTitle[iItem],lstrlen(pobj_OneTab->lpszTitle[iItem]),&size);
+
+		if(iMaxWidth<size.cx){
+			//最大幅を取得
+			iMaxWidth=size.cx;
+		}
+	}
+
+	SelectObject(hdc,hOldFont);
+	ReleaseDC(hwnd,hdc);
+
+	MoveWindow(hwnd,rc.left,rc.top-iItem*LINK_ITEM_HEIGHT-10,iMaxWidth+20,iItem*LINK_ITEM_HEIGHT,1);
+}
+CResultList::~CResultList(){
+	DestroyWindow(hwnd);
+}
+
+
+
+LRESULT CALLBACK OneTabProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	COneTab *pobj_OneTab;
+	RECT rc;
+	POINT pos;
+
+	switch(message){
+		case WM_CREATE:
+			SetTimer(hwnd,0,100,NULL);
+			return 0;
+		case WM_TIMER:
+			InvalidateRect(hwnd,NULL,0);
+			return 0;
+		case WM_PAINT:
+			pobj_OneTab=(COneTab *)GetWindowLong(hwnd,GWL_USERDATA);
+
+			HBRUSH hBrush,hOldBrush;
+
+			HDC hdc;
+			PAINTSTRUCT ps;
+			hdc=BeginPaint(hwnd,&ps);
+
+			GetCursorPos(&pos);
+			GetWindowRect(hwnd,&rc);
+			HFONT hOldFont;
+			if(rc.left<=pos.x && pos.x<=rc.right && rc.top<=pos.y && pos.y<=rc.bottom){
+				extern HFONT hStatusFont;
+				hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
+
+				SetBkColor(hdc,GetSysColor(COLOR_3DSHADOW));
+
+				hBrush=CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));
+
+				//リストを表示
+				if(pobj_OneTab->pobj_ResultList==0){
+					pobj_OneTab->pobj_ResultList=new CResultList(pobj_OneTab);
+				}
+			}
+			else{
+				extern HFONT hStatusFont;
+				hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
+
+				SetBkColor(hdc,GetSysColor(COLOR_3DFACE));
+
+				hBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
+
+				//リストを破棄
+				if(pobj_OneTab->pobj_ResultList){
+					GetWindowRect(pobj_OneTab->pobj_ResultList->hwnd,&rc);
+					if(!(rc.left<=pos.x && pos.x<=rc.right && rc.top<=pos.y && pos.y<=rc.bottom)){
+						delete pobj_OneTab->pobj_ResultList;
+						pobj_OneTab->pobj_ResultList=0;
+					}
+				}
+			}
+			SetTextColor(hdc,RGB(0,0,255));
+
+			GetClientRect(hwnd,&rc);
+
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+			PatBlt(hdc,0,0,rc.right,rc.bottom,PATCOPY);
+			SelectObject(hdc,hOldBrush);
+
+			rc.left++;
+			DrawText(hdc,pobj_OneTab->lpszString,-1,&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
+
+			SelectObject(hdc,hOldFont);
+
+			//左端の境界線
+			HPEN hPen,hOldPen;
+			hPen=CreatePen(PS_SOLID,0,GetSysColor(COLOR_3DSHADOW));
+			hOldPen=(HPEN)SelectObject(hdc,hPen);
+			MoveToEx(hdc,0,0,NULL);
+			LineTo(hdc,0,rc.bottom-rc.top);
+			SelectObject(hdc,hOldPen);
+			DeleteObject(hPen);
+
+			EndPaint(hwnd,&ps);
+
+			DeleteObject(hBrush);
+			return 0;
+		case WM_LBUTTONDOWN:
+			pobj_OneTab=(COneTab *)GetWindowLong(hwnd,GWL_USERDATA);
+
+			ShellExecute(hwnd,"open",pobj_OneTab->lpszUrl[0],NULL,NULL,SW_SHOWNORMAL);
+			return 0;
+
+		case WM_COMMAND:
+			break;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+
+COneTab::COneTab(int WndNum,char *str){
+	//0で初期化
+	memset(this,0,sizeof(COneTab));
+
+	m_WndNum=WndNum;
+
+	lpszString=(char *)malloc(lstrlen(str)+1);
+	lstrcpy(lpszString,str);
+
+
+	//Web検索をかける
+	WebSearch();
+
+
+
+	/////////////////////////////////
+	// テキストアイテムの幅を取得
+	/////////////////////////////////
+
+	HDC hdc;
+	SIZE size;
+	hdc=GetDC(hOwner);
+
+	extern HFONT hStatusFont;
+	HFONT hOldFont;
+	hOldFont=(HFONT)SelectObject(hdc,hStatusFont);
+
+	GetTextExtentPoint32(hdc,lpszString,lstrlen(lpszString),&size);
+
+	SelectObject(hdc,hOldFont);
+
+	ReleaseDC(hOwner,hdc);
+	iWindowWidth=size.cx+20;
+
+	if(MdiInfo[WndNum].pmti==0) return;
+	hTabWnd=(HWND)SendMessage(MdiInfo[WndNum].pmti->hEdit,WM_SEARCH_TAB_CREATE,(WPARAM)WndNum,(LPARAM)this);
+}
+COneTab::~COneTab(){
+	free(lpszString);
+
+	int i;
+	for(i=0;i<10;i++){
+		if(lpszTitle[i]) free(lpszTitle[i]);
+		if(lpszUrl[i]) free(lpszUrl[i]);
+	}
+
+	if(MdiInfo[m_WndNum].pmti)
+		SendMessage(MdiInfo[m_WndNum].pmti->hEdit,WM_SEARCH_TAB_CLOSE,0,(LPARAM)hTabWnd);
+}
+
+void COneTab::WebSearch(){
+	//URLエンコード
+	char *temporary;
+	temporary=(char *)malloc(lstrlen(lpszString)*3+1024);
+	wsprintf(temporary,"辞書 %s",lpszString);
+	URLEncode(temporary);
+
+	char *lpszTempUrl;
+	lpszTempUrl=(char *)malloc(lstrlen(temporary)+1024);
+	sprintf(lpszTempUrl,"http://www.activebasic.com/application_web_search/search.php?query=%s&type=web&utf_sw=1&start=1",temporary);
+
+	free(temporary);
+
+
+	HINTERNET hInternet;
+	HINTERNET hNetFile;
+	hInternet = InternetOpen("Agent", 0, NULL, NULL, 0);
+	if(hInternet==0){
+		return;
+	}
+	hNetFile = InternetOpenUrl(hInternet, lpszTempUrl, NULL, 0, 0, 0);
+	if(hNetFile==0){
+		InternetCloseHandle(hInternet);
+		return;
+	}
+
+	/* オープンしたURLからデータを(1000バイトずつ)読み込む */
+	DWORD dwReadSize;
+	BOOL bResult;
+	char *buffer;
+	buffer=(char *)malloc(8192);
+	buffer[0]=0;
+
+	while(1){
+		char temp3[1024];
+		bResult = InternetReadFile(
+			hNetFile,
+			temp3,
+			1000,
+			&dwReadSize);
+
+		/* 全て読み込んだらループを抜ける */
+		if(bResult && (dwReadSize == 0)) break;
+
+		temp3[dwReadSize]=0;
+		lstrcat(buffer,temp3);
+	}
+
+
+	//UTF-8からShift-JISに変換
+	char *temp2;
+	temp2=(char *)malloc(8192);
+	nkf.pSetNkfOption("-sx");	//Shift-JISに変換（xは半角カタカナを全角に変換しないオプション）
+	nkf.pNkfConvert(temp2,buffer);
+	free(buffer);
+
+
+	InternetCloseHandle(hNetFile);
+	InternetCloseHandle(hInternet);
+
+
+	//タイトル・URLを取得
+	int iItem;
+	int i=0,i2;
+	for(iItem=0;iItem<10;iItem++){
+		lpszTitle[iItem]=(char *)malloc(lstrlen(temp2)+1);
+		lpszUrl[iItem]=(char *)malloc(lstrlen(temp2)+1);
+		for(i2=0;;i++,i2++){
+			//タイトル
+			if(temp2[i]=='\n'||temp2[i]=='\0'){
+				lpszTitle[iItem][i2]=0;
+				break;
+			}
+			lpszTitle[iItem][i2]=temp2[i];
+		}
+		if(temp2[i]){
+			//URL
+			for(i++,i2=0;;i++,i2++){
+				if(temp2[i]=='\n'||temp2[i]=='\0'){
+					lpszUrl[iItem][i2]=0;
+					break;
+				}
+				lpszUrl[iItem][i2]=temp2[i];
+			}
+		}
+		if(temp2[i]){
+			//サマリー
+			for(i++,i2=0;;i++,i2++){
+				if(temp2[i]=='\n'||temp2[i]=='\0'){
+					break;
+				}
+			}
+		}
+
+		if(temp2[i]=='\0') break;
+		i++;
+	}
+
+
+	free(temp2);
+
+
+	free(lpszTempUrl);
+}
+
+
+
+
+
+
+LRESULT CALLBACK WebResultWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	switch(message){
+		case WM_COMMAND:
+			break;
+	}
+	return DefWindowProc(hwnd,message,wParam,lParam);
+}
+
+CWebResult::CWebResult(HWND hParent){
+	ppobj_OneTab=(COneTab **)malloc(1);
+	iTabNum=0;
+
+	hwnd=CreateWindowEx(0,"WebResult","WebResult",
+		WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE,
+		0,0,0,0,
+		hParent,0,hInst,0);
+}
+CWebResult::~CWebResult(){
+	int i;
+	for(i=0;i<iTabNum;i++){
+		delete ppobj_OneTab[i];
+	}
+
+	free(ppobj_OneTab);
+	ppobj_OneTab=0;
+
+	DestroyWindow(hwnd);
+}
+
+void CWebResult::resize(int x,int y,int cx,int cy){
+	MoveWindow(hwnd,x,y,cx,cy,1);
+}
+
+void CWebResult::add(int WndNum,char *lpszSearchText){
+	COneTab *pobj_temp_OneTab;
+	pobj_temp_OneTab=new COneTab(WndNum,lpszSearchText);
+	if(MdiInfo[WndNum].pmti==0){
+		delete pobj_temp_OneTab;
+		return;
+	}
+
+	if(pobj_temp_OneTab->lpszTitle[0]){
+		if(pobj_temp_OneTab->lpszTitle[0][0]=='\0'){
+			delete pobj_temp_OneTab;
+			return;
+		}
+	}
+	else{
+		delete pobj_temp_OneTab;
+		return;
+	}
+
+
+	ppobj_OneTab=(COneTab **)realloc(ppobj_OneTab,(iTabNum+1)*sizeof(COneTab));
+
+	//ローテーション
+	int i;
+	for(i=iTabNum-1;i>=0;i--){
+		ppobj_OneTab[i+1]=ppobj_OneTab[i];
+	}
+
+	ppobj_OneTab[0]=pobj_temp_OneTab;
+	iTabNum++;
+
+	if(iTabNum==10){
+		//古いアイテムを破棄
+		delete ppobj_OneTab[iTabNum-1];
+		iTabNum--;
+	}
+
+	int offset=0;
+	for(i=0;i<iTabNum;i++){
+		offset+=ppobj_OneTab[i]->iWindowWidth;
+	}
+	for(i=iTabNum-1;i>=0;i--){
+		offset-=ppobj_OneTab[i]->iWindowWidth;
+		MoveWindow(ppobj_OneTab[i]->hTabWnd,
+			offset,
+			0,
+			ppobj_OneTab[i]->iWindowWidth,
+			20,
+			1);
+	}
+}
+BOOL CWebResult::DuplicateCheck(char *str){
+	int i;
+	for(i=0;i<iTabNum;i++){
+		if(lstrcmpi(ppobj_OneTab[i]->lpszString,str)==0){
+			return 1;
+		}
+	}
+	return 0;
+}
+
+
+
+BOOL bSearchingWeb;
+char *lpszRetrySearchStr;
+void WebSearchThread(void *temp_str){
+	char *str;
+	str=(char *)malloc(lstrlen((char *)temp_str)+1);
+	lstrcpy(str,(char *)temp_str);
+	HeapDefaultFree(temp_str);
+
+	int WndNum;
+	WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+	if(bSearchingWeb){
+		if(lpszRetrySearchStr) free(lpszRetrySearchStr);
+		lpszRetrySearchStr=str;
+
+		_endthread();
+		return;
+	}
+	bSearchingWeb=1;
+
+
+wait_repeat:
+	Sleep(500);
+	if(lpszRetrySearchStr){
+		free(str);
+
+		str=lpszRetrySearchStr;
+		lpszRetrySearchStr=0;
+		goto wait_repeat;
+	}
+
+
+	if(WndNum==-1){
+		goto exit;
+	}
+	if(MdiInfo[WndNum].pmti==0){
+		goto exit;
+	}
+
+	//重複チェック
+	if(MdiInfo[WndNum].pmti->pobj_WebResult->DuplicateCheck(str)){
+		goto exit;
+	}
+
+
+
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	MdiInfo[WndNum].pmti->pobj_WebResult->add(WndNum,str);
+
+exit:
+	bSearchingWeb=0;
+
+	free(str);
+
+
+	if(lpszRetrySearchStr){
+		str=lpszRetrySearchStr;
+		lpszRetrySearchStr=0;
+		goto wait_repeat;
+	}
+
+
+	_endthread();
+}
+
+
+
+
+////////////////////////////
+// 以下、SideWeb
+////////////////////////////
+
+CComModule _Module;
+
+BEGIN_OBJECT_MAP(ObjectMap)
+END_OBJECT_MAP()
+
+HWND hNowIEWnd;
+LRESULT CALLBACK SideWebProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+	CComQIPtr<IWebBrowser2>	pWB2 ;
+
+	switch (iMsg)
+	{
+		case WM_CREATE :
+		{
+			AtlAxWinInit();
+			hNowIEWnd = CreateWindow("AtlAxWin", "Shell.Explorer.2", WS_CHILD|WS_VISIBLE, 0,0,0,0, 
+						hwnd, (HMENU)0, hInst, NULL);
+			if(!hNowIEWnd){
+				MessageBox(hOwner,"IEコンポーネントの生成に失敗しました","lockey_browser",MB_OK|MB_ICONEXCLAMATION);
+				PostQuitMessage(0);
+				return 0;
+			}
+
+			// ActiveXコントロールのインターフェースを要求
+			CComPtr<IUnknown>	 punkIE;
+			if (AtlAxGetControl(hNowIEWnd, &punkIE) == S_OK)
+			{
+				// IUnknownポインタからIWebBrowser2ポインタへキャスト
+				pWB2 = punkIE;
+
+				if(pWB2)
+				{
+					// シンクオブジェクトの作成
+					CComObject<CIESink>* sink;
+					CComObject<CIESink>::CreateInstance(&sink);
+
+					// イベントをDispatchするよう、IEコントロールにお願い
+					HRESULT hr = sink->AdviseToIE(punkIE);
+					if(SUCCEEDED(hr))
+					{
+						//成功
+						return 0;
+					}
+				}
+
+				MessageBox(hOwner,"IEコンポーネントの生成に失敗しました","ProjectEditor",MB_OK|MB_ICONEXCLAMATION);
+				PostQuitMessage(0);
+				return 0;
+			}
+
+			return 0 ;
+		}
+
+		case WM_SIZE :
+			MoveWindow(GetWindow(hwnd,GW_CHILD), 0, 0, LOWORD(lParam), HIWORD(lParam), 1) ;
+			return 0 ;
+
+		case WM_KEYDOWN:
+		{
+			// ActiveXコントロールのインターフェースを要求
+			CComPtr<IUnknown>	 punkIE;
+			if (AtlAxGetControl(hNowIEWnd, &punkIE) == S_OK)
+			{
+				// IUnknownポインタからIWebBrowser2ポインタへキャスト
+				pWB2 = punkIE;
+
+				CComQIPtr<IOleInPlaceActiveObject, &IID_IOleInPlaceActiveObject> pIOIPAO(pWB2) ;
+
+				if(pIOIPAO)
+				{
+					MSG msg;
+					msg.message = iMsg;
+					msg.wParam = wParam;
+					msg.lParam = lParam;
+
+					pIOIPAO->TranslateAccelerator(&msg);
+				}
+ 
+				return 0 ;
+			}
+		}
+
+		case WM_BROWS_GO:
+
+			{
+				// ActiveXコントロールのインターフェースを要求
+				CComPtr<IUnknown>	 punkIE;
+				if (AtlAxGetControl(hNowIEWnd, &punkIE) == S_OK)
+				{
+					// IUnknownポインタからIWebBrowser2ポインタへキャスト
+					pWB2 = punkIE;
+
+					// URLへ移動
+					CComVariant vempty, vUrl((char *)lParam);
+					pWB2->Navigate2 (&vUrl, &vempty, &vempty, &vempty, &vempty );
+				}
+			}
+
+			return 0;
+
+		case WM_BROWS_DESTROY:
+			DestroyWindow(hwnd);
+			return 0;
+
+		case WM_DESTROY :
+			{
+				// ActiveXコントロールのインターフェースを要求
+				CComPtr<IUnknown>	 punkIE;
+				if (AtlAxGetControl(hNowIEWnd, &punkIE) == S_OK)
+				{
+					// IUnknownポインタからIWebBrowser2ポインタへキャスト
+					pWB2 = punkIE;
+
+					pWB2.Release();
+				}
+
+			}
+			return 0 ;
+	}
+
+	return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
+}
+
+CChildSideWeb::CChildSideWeb(HWND hParent,HWND hTab,char *title,char *site){
+	hwnd=CreateWindowEx(WS_EX_CLIENTEDGE,"SideWeb","SideWeb",
+		WS_CHILD|WS_CLIPCHILDREN,
+		0,0,0,0,
+		hParent,0,hInst,0);
+	hIEWnd=hNowIEWnd;
+
+	TC_ITEM tcItem;
+	tcItem.mask=TCIF_TEXT;
+
+	tcItem.pszText=title;
+	TabCtrl_InsertItem(hTab,SendMessage(hTab,TCM_GETITEMCOUNT,0,0),&tcItem);
+
+	//タイトル
+	lpszTitle=(char *)malloc(lstrlen(title)+1);
+	lstrcpy(lpszTitle,title);
+
+	//サイト
+	lpszSite=(char *)malloc(lstrlen(site)+1);
+	lstrcpy(lpszSite,site);
+}
+CChildSideWeb::~CChildSideWeb(){
+	free(lpszTitle);
+	free(lpszSite);
+	DestroyWindow(hwnd);
+}
+
+
+CSideWeb *pobj_SideWeb=0;
+
+CSideWeb::CSideWeb(HWND hParent){
+	lpszNowUrl=0;
+	bShow=0;
+
+	_Module.Init(ObjectMap, hInst);
+
+	//タブを生成
+	extern HFONT hStatusFont;
+	hTab=CreateWindowEx(0,WC_TABCONTROL,NULL,
+		WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE,
+		0,0,0,0,
+		hParent,0,hInst,0);
+	SendMessage(hTab,WM_SETFONT,(long)hStatusFont,0);
+
+	//→ボタンを生成
+	hRightButton=CreateWindow("BUTTON","→",WS_CHILD|WS_VISIBLE,
+		0,0,20,13,
+		hParent,(HMENU)IDC_CLIP,hInst,0);
+	SendMessage(hRightButton,WM_SETFONT,(long)hStatusFont,0);
+
+
+	iChildSideWebNum=pobj_nv->pobj_DBDomain->iDomainNum+1;
+	ppobj_ChildSideWeb=(CChildSideWeb **)malloc(iChildSideWebNum*sizeof(CChildSideWeb *));
+	ppobj_ChildSideWeb[0]=new CChildSideWeb(hParent,hTab,"全般","");
+	int i;
+	for(i=0;i<pobj_nv->pobj_DBDomain->iDomainNum;i++){
+		ppobj_ChildSideWeb[i+1]=new CChildSideWeb(hParent,hTab,
+			pobj_nv->pobj_DBDomain->ppobj_Domain[i]->lpszName,
+			pobj_nv->pobj_DBDomain->ppobj_Domain[i]->lpszDomain);
+	}
+
+
+	TabCtrl_SetCurSel(hTab,0);
+	ShowWindow(ppobj_ChildSideWeb[0]->hwnd,SW_SHOW);
+	hNowIEWnd=ppobj_ChildSideWeb[0]->hIEWnd;
+}
+CSideWeb::~CSideWeb(){
+	int i;
+	for(i=0;i<iChildSideWebNum;i++){
+		delete ppobj_ChildSideWeb[i];
+	}
+	free(ppobj_ChildSideWeb);
+	ppobj_ChildSideWeb=0;
+
+	if(lpszNowUrl) free(lpszNowUrl);
+
+	DestroyWindow(hTab);
+	DestroyWindow(hRightButton);
+}
+void CSideWeb::resize(int x,int y,int cx,int cy){
+	int iTabHeight=25;
+
+	MoveWindow(hTab,x,y,cx-30,iTabHeight,1);
+
+	SetWindowPos(hRightButton,NULL,x+cx-25,y+7,0,0,SWP_NOSIZE);
+
+	int i;
+	for(i=0;i<iChildSideWebNum;i++){
+		MoveWindow(ppobj_ChildSideWeb[i]->hwnd,x,y+iTabHeight,cx,cy-iTabHeight,1);
+	}
+
+	m_Rect.left=x;
+	m_Rect.top=y;
+	m_Rect.right=x+cx;
+	m_Rect.bottom=y+cy;
+}
+
+void CSideWeb::GoPage(char *lpszUrl){
+	char *pTemp;
+	pTemp=(char *)malloc(lstrlen(lpszUrl)+1);
+	lstrcpy(pTemp,lpszUrl);
+
+	if(lpszNowUrl) free(lpszNowUrl);
+	lpszNowUrl=pTemp;
+
+	int iTabPos;
+	iTabPos=SendMessage(hTab,TCM_GETCURSEL,0,0);
+
+
+	pTemp=(char *)malloc(lstrlen(lpszNowUrl)+1024);
+	if(ppobj_ChildSideWeb[iTabPos]->lpszSite[0])
+		sprintf(pTemp,"%s&site=%s",lpszNowUrl,ppobj_ChildSideWeb[iTabPos]->lpszSite);
+	else lstrcpy(pTemp,lpszNowUrl);
+
+	SendMessage(ppobj_ChildSideWeb[iTabPos]->hwnd,WM_BROWS_GO,0,(LPARAM)pTemp);
+
+	free(pTemp);
+
+	bShow=1;
+	ResizeOwnerWnd();	
+}
+
+void CSideWeb::SelChangeEvent(){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	char temporary[MAX_PATH];
+
+	int i;
+	i=TabCtrl_GetCurSel(hTab);
+
+	TC_ITEM tcItem;
+	tcItem.mask=TCIF_TEXT;
+	tcItem.pszText=temporary;
+	tcItem.cchTextMax=MAX_PATH;
+	TabCtrl_GetItem(hTab,i,&tcItem);
+
+	for(i=0;i<iChildSideWebNum;i++){
+		ShowWindow(ppobj_ChildSideWeb[i]->hwnd,SW_HIDE);
+	}
+
+	for(i=0;i<iChildSideWebNum;i++){
+		if(lstrcmpi(temporary,ppobj_ChildSideWeb[i]->lpszTitle)==0){
+			ShowWindow(ppobj_ChildSideWeb[i]->hwnd,SW_SHOW);
+			hNowIEWnd=ppobj_ChildSideWeb[i]->hIEWnd;
+			GoPage(lpszNowUrl);
+			break;
+		}
+	}
+}
+
+void CSideWeb::GetRect(RECT *prc){
+	*prc=m_Rect;
+}
+
+
+
+
+
+CWebStrings obj_WebStrings;
+
+CWebStrings::CWebStrings(){
+	buffer=(char *)malloc(1);
+	buffer[0]=0;
+
+	ppStr=(char **)malloc(1);
+	iStrNum=0;
+}
+CWebStrings::~CWebStrings(){
+	free(buffer);
+
+	int i;
+	for(i=0;i<iStrNum;i++){
+		free(ppStr[i]);
+	}
+	free(ppStr);
+}
+
+void CWebStrings::add(char *query){
+	//重複チェック
+	int i;
+	for(i=0;i<iStrNum;i++){
+		if(lstrcmpi(ppStr[i],query)==0){
+			return;
+		}
+	}
+
+	ppStr=(char **)realloc(ppStr,(iStrNum+1)*sizeof(char *));
+	ppStr[iStrNum]=(char *)malloc(lstrlen(query)+1);
+	lstrcpy(ppStr[iStrNum],query);
+	iStrNum++;
+}
+
+void CWebStrings::clear(){
+	buffer[0]=0;
+
+	int i;
+	for(i=0;i<iStrNum;i++){
+		free(ppStr[i]);
+	}
+	iStrNum=0;
+}
+
+char *CWebStrings::GetBuffer(){
+	buffer[0]=0;
+	int i;
+	for(i=0;i<iStrNum;i++){
+		buffer=(char *)realloc(buffer,lstrlen(buffer)+lstrlen(ppStr[i])+2);
+		if(i) lstrcat(buffer," ");
+		lstrcat(buffer,ppStr[i]);
+	}
+	return buffer;
+}
+
+
+
+//////////////////////////
+// Web検索用ドメイン管理
+//////////////////////////
+
+CDomain::CDomain(char *name,char *domain){
+	//表示名
+	lpszName=(char *)HeapAlloc(hHeap,0,lstrlen(name)+1);
+	lstrcpy(lpszName,name);
+
+	//ドメイン
+	lpszDomain=(char *)HeapAlloc(hHeap,0,lstrlen(domain)+1);
+	lstrcpy(lpszDomain,domain);
+}
+CDomain::~CDomain(){
+	HeapDefaultFree(lpszName);
+	HeapDefaultFree(lpszDomain);
+}
+
+
+void CDBDomain::init(){
+	int i;
+	for(i=0;i<iDomainNum;i++){
+		delete ppobj_Domain[i];
+	}
+	iDomainNum=0;
+}
+CDBDomain::CDBDomain(){
+	ppobj_Domain=(CDomain **)HeapAlloc(hHeap,0,1);
+	iDomainNum=0;
+
+	m_hListView=0;
+}
+CDBDomain::~CDBDomain(){
+	init();
+	HeapDefaultFree(ppobj_Domain);
+}
+
+void CDBDomain::load(){
+	char temporary[MAX_PATH],temp2[MAX_PATH];
+	sprintf(temporary,"%sUserSetting\\domain.ini",pj_editor_Dir);
+
+	char *buffer;
+	buffer=ReadBuffer_NonErrMsg(temporary);
+	if(buffer){
+		int i;
+		i=0;
+		while(buffer[i]){
+			//表示名
+			i=GetOneParameter(buffer,i,temporary);
+			if(temporary[0]=='\0') break;
+
+			//ドメイン
+			i=GetOneParameter(buffer,i,temp2);
+			if(temp2[0]=='\0') break;
+
+			if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
+				i+=2;
+			}
+
+			add(temporary,temp2);
+		}
+		HeapDefaultFree(buffer);
+	}
+	else{
+		add("辞書","ja.wikipedia.org");
+		add("MSDN","msdn.microsoft.com");
+	}
+}
+void CDBDomain::save(){
+	char temporary[MAX_PATH];
+	sprintf(temporary,"%sUserSetting\\domain.ini",pj_editor_Dir);
+
+	char *buffer;
+	buffer=(char *)HeapAlloc(hHeap,0,iDomainNum*MAX_PATH*2+1);
+	buffer[0]=0;
+
+	int i;
+	for(i=0;i<iDomainNum;i++){
+		sprintf(buffer+lstrlen(buffer),"%s,%s\r\n",ppobj_Domain[i]->lpszName,ppobj_Domain[i]->lpszDomain);
+	}
+
+	WriteBuffer(temporary,buffer,lstrlen(buffer));
+
+	HeapDefaultFree(buffer);
+}
+
+void CDBDomain::copy_get(CDBDomain *pobj_DBDomain){
+	init();
+
+	int i;
+	for(i=0;i<pobj_DBDomain->iDomainNum;i++){
+		add(pobj_DBDomain->ppobj_Domain[i]->lpszName,pobj_DBDomain->ppobj_Domain[i]->lpszDomain);
+	}
+}
+
+void CDBDomain::SetListView(HWND hListView){
+	m_hListView=hListView;
+
+	int i;
+	for(i=0;i<iDomainNum;i++){
+		LV_ITEM item;
+
+		item.mask=LVIF_TEXT;
+		item.pszText=ppobj_Domain[i]->lpszName;
+		item.iItem=i;
+		item.iSubItem=0;
+		ListView_InsertItem(m_hListView,&item);
+
+		item.pszText=ppobj_Domain[i]->lpszDomain;
+		item.iItem=i;
+		item.iSubItem++;
+		ListView_SetItem(m_hListView,&item);
+	}
+}
+
+void CDBDomain::add(char *name,char *domain){
+	ppobj_Domain=(CDomain **)HeapReAlloc(hHeap,0,ppobj_Domain,(iDomainNum+1)*sizeof(CDomain *));
+	ppobj_Domain[iDomainNum]=new CDomain(name,domain);
+	iDomainNum++;
+
+
+	if(m_hListView){
+		int i;
+		i=ListView_GetItemCount(m_hListView);
+
+		//リストビューに追加
+		LV_ITEM item;
+		item.mask=LVIF_TEXT;
+		item.pszText=name;
+		item.iItem=i;
+		item.iSubItem=0;
+		ListView_InsertItem(m_hListView,&item);
+
+		item.pszText=domain;
+		item.iItem=i;
+		item.iSubItem++;
+		ListView_SetItem(m_hListView,&item);
+	}
+}
+void CDBDomain::del(char *name){
+	int i;
+	for(i=0;i<iDomainNum;i++){
+		if(lstrcmp(ppobj_Domain[i]->lpszName,name)==0) break;
+	}
+	if(i==iDomainNum) return;
+
+	if(m_hListView){
+		//リストビューから削除
+		ListView_DeleteItem(m_hListView,i);
+	}
+
+	delete ppobj_Domain[i];
+	iDomainNum--;
+	for(;i<iDomainNum;i++){
+		ppobj_Domain[i]=ppobj_Domain[i+1];
+	}
+}
+void CDBDomain::change(char *szBeforeName,char *name,char *domain){
+	int i;
+	for(i=0;i<iDomainNum;i++){
+		if(lstrcmp(ppobj_Domain[i]->lpszName,szBeforeName)==0) break;
+	}
+	if(i==iDomainNum) return;
+
+	ppobj_Domain[i]->lpszName=(char *)HeapReAlloc(hHeap,0,ppobj_Domain[i]->lpszName,lstrlen(name)+1);
+	lstrcpy(ppobj_Domain[i]->lpszName,name);
+
+	ppobj_Domain[i]->lpszDomain=(char *)HeapReAlloc(hHeap,0,ppobj_Domain[i]->lpszDomain,lstrlen(domain)+1);
+	lstrcpy(ppobj_Domain[i]->lpszDomain,domain);
+
+
+	if(m_hListView){
+		//リストビューの設定
+		ListView_SetItemText(m_hListView,i,0,name);
+		ListView_SetItemText(m_hListView,i,1,domain);
+	}
+}
Index: /ProjectEditor/WebSearch.h
===================================================================
--- /ProjectEditor/WebSearch.h	(revision 3)
+++ /ProjectEditor/WebSearch.h	(revision 3)
@@ -0,0 +1,145 @@
+
+#define LINK_ITEM_HEIGHT 20
+
+LRESULT CALLBACK ResultListProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+LRESULT CALLBACK OneTabProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+LRESULT CALLBACK WebResultWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+class COneTab;
+
+class CResultList{
+public:
+	HWND hwnd;
+	int iAnimeCount;
+	COneTab *pobj_OneTab;
+
+	CResultList(COneTab *pobj_OneTab);
+	~CResultList();
+};
+
+class COneTab{
+	int m_WndNum;
+
+public:
+	HWND hTabWnd;
+	CResultList *pobj_ResultList;
+
+	int iWindowWidth;
+
+	char *lpszString;
+	char *lpszTitle[10];
+	char *lpszUrl[10];
+
+	COneTab(int WndNum,char *str);
+	~COneTab();
+
+	void WebSearch();
+};
+
+class CWebResult{
+
+	COneTab **ppobj_OneTab;
+	int iTabNum;
+
+public:
+	HWND hwnd;
+	CWebResult(HWND hParent);
+	~CWebResult();
+
+	void resize(int x,int y,int cx,int cy);
+
+	void add(int WndNum,char *lpszSearchText);
+
+	BOOL DuplicateCheck(char *str);
+};
+
+void WebSearchThread(void *temp_str);
+
+
+
+
+LRESULT CALLBACK SideWebProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
+
+class CChildSideWeb{
+public:
+	HWND hwnd;
+	HWND hIEWnd;
+	char *lpszTitle;
+	char *lpszSite;
+
+	CChildSideWeb(HWND hParent,HWND hTab,char *title,char *site);
+	~CChildSideWeb();
+
+	void resize(int x,int y,int cx,int cy);
+};
+
+class CSideWeb{
+
+	CChildSideWeb **ppobj_ChildSideWeb;
+	int iChildSideWebNum;
+
+	char *lpszNowUrl;
+
+	RECT m_Rect;
+
+	HWND hRightButton;
+
+public:
+	HWND hTab;
+	BOOL bShow;
+	CSideWeb(HWND hParent);
+	~CSideWeb();
+	void resize(int x,int y,int cx,int cy);
+
+	void GoPage(char *lpszUrl);
+
+	void SelChangeEvent();
+
+	void GetRect(RECT *prc);
+};
+extern CSideWeb *pobj_SideWeb;
+
+class CWebStrings{
+	char *buffer;
+	char **ppStr;
+	char iStrNum;
+public:
+	CWebStrings();
+	~CWebStrings();
+
+	void add(char *query);
+	void clear();
+
+	char *GetBuffer();
+};
+extern CWebStrings obj_WebStrings;
+
+
+class CDomain{
+public:
+	char *lpszName;
+	char *lpszDomain;
+	CDomain(char *name,char *domain);
+	~CDomain();
+};
+class CDBDomain{
+	HWND m_hListView;
+
+	void init();
+public:
+	CDomain **ppobj_Domain;
+	int iDomainNum;
+
+	CDBDomain();
+	~CDBDomain();
+
+	void load();
+	void save();
+	void copy_get(CDBDomain *pobj_DBDomain);
+
+	void SetListView(HWND hListView);
+
+	void add(char *name,char *domain);
+	void del(char *name);
+	void change(char *szBeforeName,char *name,char *domain);
+};
Index: /ProjectEditor/WindowControl.cpp
===================================================================
--- /ProjectEditor/WindowControl.cpp	(revision 3)
+++ /ProjectEditor/WindowControl.cpp	(revision 3)
@@ -0,0 +1,2344 @@
+#include "Common.h"
+
+#if defined(JPN)
+//日本語
+#include "pj_msg_jpn.h"
+#else
+//英語
+#include "pj_msg_eng.h"
+#endif
+
+int GetWndInfoNum(char *name){
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		if(lstrcmpi(name,ProjectInfo.pWindowInfo[i].name)==0) return i;
+	}
+	return -1;
+}
+void ChangeDivisionToOrSign(char *CopyBuffer,const char *ReadBuffer){
+	int i,i2;
+	for(i=0,i2=0;;i++,i2++){
+		if(ReadBuffer[i]=='|'){
+			CopyBuffer[i2]=0;
+			lstrcpy(CopyBuffer+i2," or ");
+			i2+=3;
+			continue;
+		}
+		CopyBuffer[i2]=ReadBuffer[i];
+		if(ReadBuffer[i]=='\0') break;
+	}
+}
+void ChangeOrSignToDivision(char *CopyBuffer,const char *ReadBuffer){
+	int i,i2,IsStr;
+	for(i=0,i2=0,IsStr=0;;i++,i2++){
+		if(ReadBuffer[i]=='\"') IsStr^=1;
+		if(ReadBuffer[i]=='\0'){
+			CopyBuffer[i2]=0;
+			break;
+		}
+		if(ReadBuffer[i+3]=='\0'){
+			memcpy(CopyBuffer+i2,ReadBuffer+i,3);
+			CopyBuffer[i2+3]=0;
+			break;
+		}
+		if((ReadBuffer[i]==' '||ReadBuffer[i]=='\t')&&
+			(ReadBuffer[i+1]=='O'||ReadBuffer[i+1]=='o')&&(ReadBuffer[i+2]=='R'||ReadBuffer[i+2]=='r')&&
+			(ReadBuffer[i+3]==' '||ReadBuffer[i+3]=='\t')&&IsStr==0){
+			CopyBuffer[i2]='|';
+			i+=3;
+			continue;
+		}
+		CopyBuffer[i2]=ReadBuffer[i];
+	}
+}
+
+HGLOBAL Rad_GetChildInfoClipboardData(int WndNum,int WndInfoNum){
+	//CHILDINFO構造体をクリップボード用データ（pByteが示すバッファ）に変換する
+	extern PROJECTINFO ProjectInfo;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	HGLOBAL hGlobal;
+	BYTE *pByte;
+	int i2,i3,MemSize;
+	CHILDINFO *pChildInfo;
+
+	for(i3=0;;i3++){
+		if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]==-1) break;
+	}
+	
+
+	hGlobal=GlobalAlloc(GMEM_MOVEABLE,sizeof(int));
+	pByte=(BYTE *)GlobalLock(hGlobal);
+	*((int *)pByte)=i3;
+	GlobalUnlock(hGlobal);
+	i2=sizeof(int);
+
+	MemSize=i2;
+
+	for(i3--;i3>=0;i3--){
+		pChildInfo=&ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]];
+
+		MemSize+=lstrlen(pChildInfo->IdName)+1+
+			sizeof(POINT)+
+			sizeof(SIZE)+
+			lstrlen(pChildInfo->caption)+1+
+			sizeof(DWORD)+
+			sizeof(DWORD)+
+			sizeof(int)+
+			sizeof(int)+
+			lstrlen(pChildInfo->ImageCtrlInfo.path)+1;
+
+		hGlobal=GlobalReAlloc(hGlobal,MemSize,0);
+		pByte=(BYTE *)GlobalLock(hGlobal);
+
+		lstrcpy((char *)pByte+i2,pChildInfo->IdName);
+		i2+=lstrlen(pChildInfo->IdName)+1;
+
+		memcpy(pByte+i2,&pChildInfo->pos,sizeof(POINT));
+		i2+=sizeof(POINT);
+
+		memcpy(pByte+i2,&pChildInfo->size,sizeof(SIZE));
+		i2+=sizeof(SIZE);
+
+		lstrcpy((char *)pByte+i2,pChildInfo->caption);
+		i2+=lstrlen(pChildInfo->caption)+1;
+
+		memcpy(pByte+i2,&pChildInfo->style,sizeof(DWORD));
+		i2+=sizeof(DWORD);
+
+		memcpy(pByte+i2,&pChildInfo->ExStyle,sizeof(DWORD));
+		i2+=sizeof(DWORD);
+
+		memcpy(pByte+i2,&pChildInfo->Control,sizeof(int));
+		i2+=sizeof(int);
+
+		memcpy(pByte+i2,&pChildInfo->ImageCtrlInfo.type,sizeof(int));
+		i2+=sizeof(int);
+
+		if(!pChildInfo->ImageCtrlInfo.path){
+			lstrcpy((char *)pByte+i2,"");
+			i2++;
+		}
+		else{
+			lstrcpy((char *)pByte+i2,pChildInfo->ImageCtrlInfo.path);
+			i2+=lstrlen(pChildInfo->ImageCtrlInfo.path)+1;
+		}
+
+		GlobalUnlock(hGlobal);
+	}
+
+	return hGlobal;
+}
+void Rad_PasteChildInfoClipboardData(int WndNum,HGLOBAL hGlobal){
+	//hGlobalに格納されているクリップボードデータをRAD画面に挿入する
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	BYTE *pByte;
+	int i2,i3,WndInfoNum;
+	CHILDINFO ChildInfo;
+	char temporary[255];
+
+	for(i2=1;i2<MAX_RAD_SELITEM;i2++) MdiInfo[WndNum].MdiRadInfo->SelectingItem[i2]=-1;
+
+	WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
+	pByte=(BYTE *)GlobalLock(hGlobal);
+	i3=*((int *)pByte);
+	i2=sizeof(int);
+
+	for(i3--;i3>=0;i3--){
+		//IdNameメンバは変更される可能性がある
+		ChildInfo.IdName=(char *)temporary;
+		lstrcpy(ChildInfo.IdName,(char *)pByte+i2);
+		i2+=lstrlen(ChildInfo.IdName)+1;
+
+		memcpy(&ChildInfo.pos,pByte+i2,sizeof(POINT));
+		i2+=sizeof(POINT);
+
+		memcpy(&ChildInfo.size,pByte+i2,sizeof(SIZE));
+		i2+=sizeof(SIZE);
+
+		ChildInfo.caption=(char *)pByte+i2;
+		i2+=lstrlen(ChildInfo.caption)+1;
+
+		memcpy(&ChildInfo.style,pByte+i2,sizeof(DWORD));
+		i2+=sizeof(DWORD);
+
+		memcpy(&ChildInfo.ExStyle,pByte+i2,sizeof(DWORD));
+		i2+=sizeof(DWORD);
+
+		memcpy(&ChildInfo.Control,pByte+i2,sizeof(int));
+		i2+=sizeof(int);
+
+		memcpy(&ChildInfo.ImageCtrlInfo.type,pByte+i2,sizeof(int));
+		i2+=sizeof(int);
+
+		ChildInfo.ImageCtrlInfo.path=(char *)pByte+i2;
+		if(lstrlen(ChildInfo.ImageCtrlInfo.path)==0){
+			ChildInfo.ImageCtrlInfo.path=0;
+			i2++;
+		}
+		else i2+=lstrlen(ChildInfo.ImageCtrlInfo.path)+1;
+
+		ChildInfo.pos.x+=17;
+		ChildInfo.pos.y+=10;
+
+		MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=InsertDlgItem(WndNum,
+			WndInfoNum,
+			-1,
+			&ChildInfo.pos,
+			&ChildInfo.size,
+			ChildInfo.IdName,
+			ChildInfo.caption,
+			ChildInfo.style,
+			ChildInfo.ExStyle,
+			ChildInfo.Control,
+			ChildInfo.ImageCtrlInfo.type,
+			ChildInfo.ImageCtrlInfo.path,
+			2);
+	}
+
+	GlobalUnlock(hGlobal);
+
+	ChangePropertyWindow(WndNum,WndInfoNum);
+}
+
+char *FormatCaption(char *caption){
+	extern HANDLE hHeap;
+	int i2,i3,BufSize;
+	char *buffer;
+
+	BufSize=256*2;
+	buffer=(char *)HeapAlloc(hHeap,0,BufSize);
+	for(i2=0,i3=0;;i2++,i3++){
+		if(i2+256>=BufSize){
+			BufSize+=256;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufSize);
+		}
+		if(caption[i3]=='\"'){
+			lstrcpy(buffer+i2,"\"+Chr$(34)+\"");
+			i2+=lstrlen(buffer+i2);
+			i2--;
+			continue;
+		}
+		buffer[i2]=caption[i3];
+		if(caption[i3]=='\0') break;
+	}
+
+	return buffer;
+}
+char *SetCaptionSequence(char *caption){
+	extern HANDLE hHeap;
+	int i2,i3,BufSize;
+	char *buffer;
+
+	BufSize=256*2;
+	buffer=(char *)HeapAlloc(hHeap,0,BufSize);
+	for(i2=0,i3=0;;i2++,i3++){
+		if(i2+256>=BufSize){
+			BufSize+=256;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,BufSize);
+		}
+		buffer[i2]=caption[i3];
+		if(caption[i3]=='\"'){
+			buffer[i2++]='\\';
+			buffer[i2]='1';
+		}
+		else if(caption[i3]=='\\'){
+			buffer[i2++]='\\';
+			buffer[i2]='\\';
+		}
+		else if(caption[i3]=='\0') break;
+	}
+
+	return buffer;
+}
+void RestoreCaptionSequence(char *caption){
+	int i2,i3;
+
+	for(i2=0,i3=0;;i2++,i3++){
+		caption[i2]=caption[i3];
+		if(caption[i3]=='\\'){
+			i3++;
+			if(caption[i3]=='1') caption[i2]='\"';
+			else caption[i2]=caption[i3];
+		}
+		else if(caption[i3]=='\0') break;
+	}
+}
+
+//テンプレートソースファイルに値をセットする
+char *PermutationWndPgmTemplate(char *pBuf,char *pPjName, char *pWndName, char *pHandleName, char *pProcName){
+	extern HANDLE hHeap;
+	int i,i2;
+
+	for(i=0;;i++){
+		if(pBuf[i]=='\0') break;
+		if(memicmp(pBuf+i,"#name#",6)==0){
+			//プロジェクト名を置換
+			i2=lstrlen(pPjName);
+			if(i2>6) pBuf=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pBuf,lstrlen(pBuf)+(i2-6)+1);
+			SlideString(pBuf+i+6,i2-6);
+			memcpy(pBuf+i,pPjName,i2);
+		}
+		if(memicmp(pBuf+i,"#window#",8)==0){
+			//ウィンドウ名を置換
+			i2=lstrlen(pWndName);
+			if(i2>6) pBuf=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pBuf,lstrlen(pBuf)+(i2-8)+1);
+			SlideString(pBuf+i+8,i2-8);
+			memcpy(pBuf+i,pWndName,i2);
+		}
+		if(memicmp(pBuf+i,"#handle#",8)==0){
+			//ハンドル名を置換
+			i2=lstrlen(pHandleName);
+			if(i2>6) pBuf=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pBuf,lstrlen(pBuf)+(i2-8)+1);
+			SlideString(pBuf+i+8,i2-8);
+			memcpy(pBuf+i,pHandleName,i2);
+		}
+		if(memicmp(pBuf+i,"#procedure#",11)==0){
+			//プロシージャ名を置換
+			i2=lstrlen(pProcName);
+			if(i2>6) pBuf=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pBuf,lstrlen(pBuf)+(i2-11)+1);
+			SlideString(pBuf+i+11,i2-11);
+			memcpy(pBuf+i,pProcName,i2);
+		}
+	}
+
+	return pBuf;
+}
+
+BOOL GetItemNotifyMessageNameByEvent(char *buffer,int ClassID,const char *EventName){
+	if(lstrcmp(EventName,"Click")==0) lstrcpy(buffer,"NM_CLICK");
+	else if(lstrcmp(EventName,"CustomDraw")==0) lstrcpy(buffer,"NM_CUSTOMDRAW");
+	else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"NM_DBLCLK");
+	else if(lstrcmp(EventName,"KillFocus")==0) lstrcpy(buffer,"NM_KILLFOCUS");
+	else if(lstrcmp(EventName,"OutOfMemory")==0) lstrcpy(buffer,"NM_OUTOFMEMORY");
+	else if(lstrcmp(EventName,"RClick")==0) lstrcpy(buffer,"NM_RCLICK");
+	else if(lstrcmp(EventName,"RDblClick")==0) lstrcpy(buffer,"NM_RDBLCLK");
+	else if(lstrcmp(EventName,"ReleasedCapture")==0) lstrcpy(buffer,"NM_RELEASEDCAPTURE");
+	else if(lstrcmp(EventName,"Return")==0) lstrcpy(buffer,"NM_RETURN");
+	else if(lstrcmp(EventName,"SetFocus")==0) lstrcpy(buffer,"NM_SETFOCUS");
+	else{
+		if(ClassID==CT_LISTVIEW){
+			if(lstrcmp(EventName,"BeginDrag")==0) lstrcpy(buffer,"LVN_BEGINDRAG");
+			else if(lstrcmp(EventName,"BeginLabelEdit")==0) lstrcpy(buffer,"LVN_BEGINLABELEDIT");
+			else if(lstrcmp(EventName,"BeginRDrag")==0) lstrcpy(buffer,"LVN_BEGINRDRAG");
+			else if(lstrcmp(EventName,"ColumnClick")==0) lstrcpy(buffer,"LVN_COLUMNCLICK");
+			else if(lstrcmp(EventName,"DeleteAllItems")==0) lstrcpy(buffer,"LVN_DELETEALLITEMS");
+			else if(lstrcmp(EventName,"DeleteItem")==0) lstrcpy(buffer,"LVN_DELETEITEM");
+			else if(lstrcmp(EventName,"EndLabelEdit")==0) lstrcpy(buffer,"LVN_ENDLABELEDIT");
+			else if(lstrcmp(EventName,"GetDispInfo")==0) lstrcpy(buffer,"LVN_GETDISPINFO");
+			else if(lstrcmp(EventName,"InsertItem")==0) lstrcpy(buffer,"LVN_INSERTITEM");
+			else if(lstrcmp(EventName,"ItemChanged")==0) lstrcpy(buffer,"LVN_ITEMCHANGED");
+			else if(lstrcmp(EventName,"ItemChanging")==0) lstrcpy(buffer,"LVN_ITEMCHANGING");
+			else if(lstrcmp(EventName,"KeyDown")==0) lstrcpy(buffer,"LVN_KEYDOWN");
+			else if(lstrcmp(EventName,"SetDispInfo")==0) lstrcpy(buffer,"LVN_SETDISPINFO");
+			else return 0;
+		}
+		else if(ClassID==CT_UPDOWN){
+			if(lstrcmp(EventName,"Deltapos")==0) lstrcpy(buffer,"UDN_DELTAPOS");
+			else return 0;
+		}
+		else return 0;
+		//未完成
+	}
+	return 1;
+}
+BOOL GetNotifyCommandByItemMessage(WINDOW_INFO *pWindowInfo,ITEMEVENTINFO *pItemEventInfo,char *Command,char *spaces){
+	int i,i2,i3,sw;
+	char temporary[MAX_PATH];
+
+	i2=0;
+	sw=0;
+	for(i=0;;i++){
+		if(pItemEventInfo[i].IdName==0) break;
+		if(pItemEventInfo[i].ClassID==CT_LISTVIEW||
+			pItemEventInfo[i].ClassID==CT_TREEVIEW||
+			pItemEventInfo[i].ClassID==CT_UPDOWN||
+			pItemEventInfo[i].ClassID==CT_PROGRESSBAR||
+			pItemEventInfo[i].ClassID==CT_TRACKBAR){
+			//コモン コントロール（WM_NOTIFY）
+			sw=1;
+			sprintf(Command+i2,"%sCase %s\r\n",spaces,pItemEventInfo[i].IdName);
+			i2+=lstrlen(Command+i2);
+			sprintf(Command+i2,"%s\tSelect Case pnmHdr->code\r\n",spaces);
+			i2+=lstrlen(Command+i2);
+			for(i3=0;i3<pItemEventInfo[i].EventNum;i3++){
+				if(GetItemNotifyMessageNameByEvent(temporary,pItemEventInfo[i].ClassID,pItemEventInfo[i].pEventNames[i3])){
+					sprintf(Command+i2,"%s\t\tCase %s\r\n",spaces,temporary);
+					i2+=lstrlen(Command+i2);
+					sprintf(Command+i2,"%s\t\t\t%s_%s_%s(ByVal (pnmHdr As VoidPtr))\r\n",spaces,pWindowInfo->name,pItemEventInfo[i].IdName,pItemEventInfo[i].pEventNames[i3]);
+					i2+=lstrlen(Command+i2);
+				}
+			}
+			sprintf(Command+i2,"%s\tEnd Select\r\n",spaces);
+			i2+=lstrlen(Command+i2);
+		}
+	}
+	return sw;
+}
+void GetItemMessageNameByEvent(char *buffer,int ClassID,const char *EventName){
+	if(ClassID==CT_BUTTON||
+		ClassID==CT_CHECKBOX||
+		ClassID==CT_RADIOBUTTON){
+		if(lstrcmp(EventName,"Click")==0) lstrcpy(buffer,"BN_CLICKED");
+		else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"BN_DBLCLK");
+	}
+	else if(ClassID==CT_COMBOBOX){
+		if(lstrcmp(EventName,"CloseUp")==0) lstrcpy(buffer,"CBN_CLOSEUP");
+		else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"CBN_DBLCLK");
+		else if(lstrcmp(EventName,"DropDown")==0) lstrcpy(buffer,"CBN_DROPDOWN");
+		else if(lstrcmp(EventName,"EditChange")==0) lstrcpy(buffer,"CBN_EDITCHANGE");
+		else if(lstrcmp(EventName,"EditUpdate")==0) lstrcpy(buffer,"CBN_EDITUPDATE");
+		else if(lstrcmp(EventName,"ErrSpace")==0) lstrcpy(buffer,"CBN_ERRSPACE");
+		else if(lstrcmp(EventName,"KillFocus")==0) lstrcpy(buffer,"CBN_KILLFOCUS");
+		else if(lstrcmp(EventName,"SelChange")==0) lstrcpy(buffer,"CBN_SELCHANGE");
+		else if(lstrcmp(EventName,"SelEndCancel")==0) lstrcpy(buffer,"CBN_SELENDCANCEL");
+		else if(lstrcmp(EventName,"SelEndOk")==0) lstrcpy(buffer,"CBN_SELENDOK");
+		else if(lstrcmp(EventName,"SetFocus")==0) lstrcpy(buffer,"CBN_SETFOCUS");
+	}
+	else if(ClassID==CT_EDIT){
+		if(lstrcmp(EventName,"Change")==0) lstrcpy(buffer,"EN_CHANGE");
+		else if(lstrcmp(EventName,"ErrSpace")==0) lstrcpy(buffer,"EN_ERRSPACE");
+		else if(lstrcmp(EventName,"HScroll")==0) lstrcpy(buffer,"EN_HSCROLL");
+		else if(lstrcmp(EventName,"KillFocus")==0) lstrcpy(buffer,"EN_KILLFOCUS");
+		else if(lstrcmp(EventName,"MaxText")==0) lstrcpy(buffer,"EN_MAXTEXT");
+		else if(lstrcmp(EventName,"SetFocus")==0) lstrcpy(buffer,"EN_SETFOCUS");
+		else if(lstrcmp(EventName,"Update")==0) lstrcpy(buffer,"EN_UPDATE");
+		else if(lstrcmp(EventName,"VScroll")==0) lstrcpy(buffer,"EN_VSCROLL");
+	}
+	else if(ClassID==CT_IMAGEBOX||
+		ClassID==CT_STATIC){
+		if(lstrcmp(EventName,"Click")==0) lstrcpy(buffer,"STN_CLICKED");
+		else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"STN_DBLCLK");
+	}
+	else if(ClassID==CT_LISTBOX){
+		if(lstrcmp(EventName,"SelChange")==0) lstrcpy(buffer,"LBN_SELCHANGE");
+		else if(lstrcmp(EventName,"DblClick")==0) lstrcpy(buffer,"LBN_DBLCLK");
+		else if(lstrcmp(EventName,"ErrSpace")==0) lstrcpy(buffer,"LBN_ERRSPACE");
+		else if(lstrcmp(EventName,"KillFocus")==0) lstrcpy(buffer,"LBN_KILLFOCUS");
+		else if(lstrcmp(EventName,"SelCancel")==0) lstrcpy(buffer,"LBN_SELCANCEL");
+		else if(lstrcmp(EventName,"SetFocus")==0) lstrcpy(buffer,"LBN_SETFOCUS");
+	}
+}
+void GetCommandByItemMessage(WINDOW_INFO *pWindowInfo,ITEMEVENTINFO *pItemEventInfo,char *Command,char *spaces){
+	extern HANDLE hHeap;
+	int i,i2,i3;
+	char temporary[MAX_PATH];
+
+	i2=0;
+	for(i=0;;i++){
+		if(pItemEventInfo[i].IdName==0) break;
+		if(pItemEventInfo[i].ClassID!=CT_LISTVIEW&&
+			pItemEventInfo[i].ClassID!=CT_PROGRESSBAR&&
+			pItemEventInfo[i].ClassID!=CT_TREEVIEW&&
+			pItemEventInfo[i].ClassID!=CT_TRACKBAR&&
+			pItemEventInfo[i].ClassID!=CT_UPDOWN
+			){
+			//WM_COMMAND
+			sprintf(Command+i2,"%sCase %s\r\n",spaces,pItemEventInfo[i].IdName);
+			i2+=lstrlen(Command+i2);
+			if(pItemEventInfo[i].ClassID==CT_MENU){
+				sprintf(Command+i2,"%s\t%s_%s_MenuClick()\r\n",spaces,pWindowInfo->name,pItemEventInfo[i].IdName);
+				i2+=lstrlen(Command+i2);
+				for(i3=0;i3<pItemEventInfo[i].EventNum;i3++)
+					HeapDefaultFree(pItemEventInfo[i].pEventNames[i3]);
+			}
+			else{
+				sprintf(Command+i2,"%s\tSelect Case HIWORD(wParam)\r\n",spaces);
+				i2+=lstrlen(Command+i2);
+				for(i3=0;i3<pItemEventInfo[i].EventNum;i3++){
+					GetItemMessageNameByEvent(temporary,pItemEventInfo[i].ClassID,pItemEventInfo[i].pEventNames[i3]);
+					sprintf(Command+i2,"%s\t\tCase %s\r\n",spaces,temporary);
+					i2+=lstrlen(Command+i2);
+					sprintf(Command+i2,"%s\t\t\t%s_%s_%s()\r\n",spaces,pWindowInfo->name,pItemEventInfo[i].IdName,pItemEventInfo[i].pEventNames[i3]);
+					i2+=lstrlen(Command+i2);
+					HeapDefaultFree(pItemEventInfo[i].pEventNames[i3]);
+				}
+				sprintf(Command+i2,"%s\tEnd Select\r\n",spaces);
+				i2+=lstrlen(Command+i2);
+			}
+			HeapDefaultFree(pItemEventInfo[i].IdName);
+			HeapDefaultFree(pItemEventInfo[i].pEventNames);
+		}
+		else{
+			//WM_NOTIFY情報のメモリ解放
+			for(i3=0;i3<pItemEventInfo[i].EventNum;i3++)
+				HeapDefaultFree(pItemEventInfo[i].pEventNames[i3]);
+			HeapDefaultFree(pItemEventInfo[i].IdName);
+			HeapDefaultFree(pItemEventInfo[i].pEventNames);
+		}
+	}
+}
+
+void GetItemClassName(char *buffer,int Control){
+	switch(Control){
+		case CT_BUTTON:
+		case CT_CHECKBOX:
+		case CT_GROUPBOX:
+		case CT_RADIOBUTTON:
+			lstrcpy(buffer,"BUTTON");
+			break;
+		case CT_COMBOBOX:
+			lstrcpy(buffer,"COMBOBOX");
+			break;
+		case CT_EDIT:
+			lstrcpy(buffer,"EDIT");
+			break;
+		case CT_HSCROLLBAR:
+		case CT_VSCROLLBAR:
+			lstrcpy(buffer,"SCROLLBAR");
+			break;
+		case CT_LISTBOX:
+			lstrcpy(buffer,"LISTBOX");
+			break;
+		case CT_LISTVIEW:
+			lstrcpy(buffer,"SysListView32");
+			break;
+		case CT_IMAGEBOX:
+		case CT_STATIC:
+			lstrcpy(buffer,"STATIC");
+			break;
+		case CT_PROGRESSBAR:
+			lstrcpy(buffer,"msctls_progress32");
+			break;
+		case CT_TRACKBAR:
+			lstrcpy(buffer,"msctls_trackbar32");
+			break;
+		case CT_TREEVIEW:
+			lstrcpy(buffer,"SysTreeView32");
+			break;
+		//CT_UPDOWNはCreateUpDownControl関数で独自に作成される
+	}
+}
+long GetCommandByMessage(int WndInfoNum,const char *MessageName,BOOL bProcedureCall,char *Command,char *spaces){
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,sw;
+	char temporary[MAX_PATH],*temp2;
+	WINDOW_INFO *pWindowInfo;
+
+	pWindowInfo=&ProjectInfo.pWindowInfo[WndInfoNum];
+
+	Command[0]=0;
+
+
+	/////////////////////
+	// Default コマンド
+
+	if(lstrcmp(MessageName,"Activate")==0){
+		sprintf(Command,"%sCase WM_ACTIVATE\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(LOWORD(wParam),HIWORD(wParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"Create")==0){
+		if(pWindowInfo->type==WNDTYPE_MODALDLG||pWindowInfo->type==WNDTYPE_MODELESSDLG)
+			sprintf(Command,"%sCase WM_INITDIALOG\r\n",spaces);
+		else sprintf(Command,"%sCase WM_CREATE\r\n",spaces);
+		i=lstrlen(Command);
+
+		sprintf(Command+i,"%s\t%s=hWnd\r\n",spaces,pWindowInfo->HandleName);
+		i+=lstrlen(Command+i);
+
+		if(pWindowInfo->MenuID){
+			//メニュー作成
+			for(i2=0;i2<ProjectInfo.NumberOfMenu;i2++){
+				if(lstrcmpi(ProjectInfo.pMenuInfo[i2].IdName,pWindowInfo->MenuID)==0) break;
+			}
+			if(i2!=ProjectInfo.NumberOfMenu){
+				sprintf(Command+i,"%s\tSetMenu(hWnd,hMenu_%s)\r\n",spaces,ProjectInfo.pMenuInfo[i2].IdName);
+				i+=lstrlen(Command+i);
+			}
+		}
+
+		//子ウィンドウ作成
+		for(i2=0,sw=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
+			if(pWindowInfo->pChildInfo[i2].Control==CT_UPDOWN){
+				sprintf(Command+i,"%s\tCreateUpDownControl(%d,%d,%d,%d,%d,hWnd,%s,GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,0,0,100,0)\r\n",
+					spaces,
+					pWindowInfo->pChildInfo[i2].style,
+					pWindowInfo->pChildInfo[i2].pos.x,pWindowInfo->pChildInfo[i2].pos.y,
+					pWindowInfo->pChildInfo[i2].size.cx,pWindowInfo->pChildInfo[i2].size.cy,
+					pWindowInfo->pChildInfo[i2].IdName);
+				i+=lstrlen(Command+i);
+			}
+			else{
+				GetItemClassName(temporary,pWindowInfo->pChildInfo[i2].Control);
+				temp2=FormatCaption(pWindowInfo->pChildInfo[i2].caption);
+				sprintf(Command+i,"%s\tCreateWindowEx(&H%08x,\"%s\",\"%s\",&H%08x,%d,%d,%d,%d,hWnd,%s As HMENU,GetModuleHandle(0),0)\r\n",
+					spaces,
+					pWindowInfo->pChildInfo[i2].ExStyle,
+					temporary,
+					temp2,
+					pWindowInfo->pChildInfo[i2].style,
+					pWindowInfo->pChildInfo[i2].pos.x,
+					pWindowInfo->pChildInfo[i2].pos.y,
+					pWindowInfo->pChildInfo[i2].size.cx,
+					pWindowInfo->pChildInfo[i2].size.cy,
+					pWindowInfo->pChildInfo[i2].IdName);
+				i+=lstrlen(Command+i);
+				HeapDefaultFree(temp2);
+				sprintf(Command+i,"%s\tSendMessage(GetDlgItem(hWnd,%s),WM_SETFONT,hFont_%s As WPARAM,0)\r\n",
+					spaces,
+					pWindowInfo->pChildInfo[i2].IdName,
+					pWindowInfo->name);
+				i+=lstrlen(Command+i);
+
+				if(pWindowInfo->pChildInfo[i2].Control==CT_IMAGEBOX){
+					//イメージ ボックスの場合
+					if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_ICON){
+						if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_FILE){
+							if(strstr(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,":")||
+								strstr(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,"\\\\")){
+								sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,\"%s\",IMAGE_ICON,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE)\r\n",
+									spaces,
+									pWindowInfo->name,
+									pWindowInfo->pChildInfo[i2].IdName,
+									pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
+							}
+							else{
+								if(sw==0){
+									sw=1;
+									lstrcpy(Command+i,"\r\n");
+									i+=2;
+									sprintf(Command+i,"%s\tDim ImageFilePath[MAX_PATH] As Byte\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tDim ModulePath[MAX_PATH] As Byte, i As Long\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tGetModuleFileName(GetModuleHandle(0),ModulePath,MAX_PATH)\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tFor i=lstrlen(ModulePath)-1 To 0 Step -1\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\t\tIf ModulePath[i]=&H5C Then Exit For\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tNext\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tModulePath[i+1]=0\r\n",spaces);
+									i+=lstrlen(Command+i);
+									lstrcpy(Command+i,"\r\n");
+									i+=2;
+								}
+								sprintf(Command+i,"%s\twsprintf(ImageFilePath,\"%%s%s\",ModulePath)\r\n",spaces,pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
+								i+=lstrlen(Command+i);
+								sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,ImageFilePath,IMAGE_ICON,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE)\r\n",
+									spaces,
+									pWindowInfo->name,
+									pWindowInfo->pChildInfo[i2].IdName);
+							}
+							i+=lstrlen(Command+i);
+						}
+						else if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_RES){
+							sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,%s As *Byte,IMAGE_ICON,0,0,LR_DEFAULTSIZE)\r\n",
+								spaces,
+								pWindowInfo->name,
+								pWindowInfo->pChildInfo[i2].IdName,
+								pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
+							i+=lstrlen(Command+i);
+						}
+						sprintf(Command+i,"%s\tSendMessage(GetDlgItem(hWnd,%s),STM_SETICON,hImage_%s_%s As WPARAM,0)\r\n",
+							spaces,
+							pWindowInfo->pChildInfo[i2].IdName,
+							pWindowInfo->name,
+							pWindowInfo->pChildInfo[i2].IdName);
+						i+=lstrlen(Command+i);
+					}
+					else if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_BITMAP){
+						if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_FILE){
+							if(strstr(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,":")||
+								strstr(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path,"\\\\")){
+								sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,\"%s\",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE)\r\n",
+									spaces,
+									pWindowInfo->name,
+									pWindowInfo->pChildInfo[i2].IdName,
+									pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
+							}
+							else{
+								if(sw==0){
+									sw=1;
+									lstrcpy(Command+i,"\r\n");
+									i+=2;
+									sprintf(Command+i,"%s\tDim ImageFilePath[MAX_PATH] As Byte\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tDim ModulePath[MAX_PATH] As Byte, i As Long\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tGetModuleFileName(GetModuleHandle(0),ModulePath,MAX_PATH)\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tFor i=lstrlen(ModulePath)-1 To 0 Step -1\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\t\tIf ModulePath[i]=&H5C Then Exit For\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tNext\r\n",spaces);
+									i+=lstrlen(Command+i);
+									sprintf(Command+i,"%s\tModulePath[i+1]=0\r\n",spaces);
+									i+=lstrlen(Command+i);
+									lstrcpy(Command+i,"\r\n");
+									i+=2;
+								}
+								sprintf(Command+i,"%s\twsprintf(ImageFilePath,\"%%s%s\",ModulePath)\r\n",spaces,pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
+								i+=lstrlen(Command+i);
+								sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,ImageFilePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE)\r\n",
+									spaces,
+									pWindowInfo->name,
+									pWindowInfo->pChildInfo[i2].IdName);
+							}
+							i+=lstrlen(Command+i);
+						}
+						else if(pWindowInfo->pChildInfo[i2].ImageCtrlInfo.type==IMGTYPE_RES){
+							sprintf(Command+i,"%s\thImage_%s_%s=LoadImage(GetWindowLongPtr(hWnd,GWLP_HINSTANCE) As HINSTANCE,%s As *Byte,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE)\r\n",
+								spaces,
+								pWindowInfo->name,
+								pWindowInfo->pChildInfo[i2].IdName,
+								pWindowInfo->pChildInfo[i2].ImageCtrlInfo.path);
+							i+=lstrlen(Command+i);
+						}
+						sprintf(Command+i,"%s\tSendMessage(GetDlgItem(hWnd,%s),STM_SETIMAGE,IMAGE_BITMAP,hImage_%s_%s As LPARAM)\r\n",
+							spaces,
+							pWindowInfo->pChildInfo[i2].IdName,
+							pWindowInfo->name,
+							pWindowInfo->pChildInfo[i2].IdName);
+						i+=lstrlen(Command+i);
+					}
+				}
+			}
+		}
+
+		if(bProcedureCall)
+			sprintf(Command+i,"%s\t%s_%s(ByVal (lParam As VoidPtr))\r\n",spaces,pWindowInfo->name,MessageName);
+		return WM_CREATE;
+	}
+	else if(lstrcmp(MessageName,"Destroy")==0){
+		sprintf(Command,"%sCase WM_DESTROY\r\n",spaces);
+		i=lstrlen(Command);
+		if(bProcedureCall){
+			sprintf(Command+i,"%s\t%s_%s()\r\n",spaces,pWindowInfo->name,MessageName);
+			i+=lstrlen(Command+i);
+		}
+
+		if(pWindowInfo->MenuID){
+			//メニューを解放
+			for(i2=0;i2<ProjectInfo.NumberOfMenu;i2++){
+				if(lstrcmpi(ProjectInfo.pMenuInfo[i2].IdName,pWindowInfo->MenuID)==0) break;
+			}
+			if(i2!=ProjectInfo.NumberOfMenu){
+				sprintf(Command+i,"%s\tSetMenu(hWnd,NULL)\r\n",spaces);
+				i+=lstrlen(Command+i);
+			}
+		}
+
+		//イメージ ボックス用の変数を解放
+		for(i2=0;i2<pWindowInfo->NumberOfChildWindows;i2++){
+			if(pWindowInfo->pChildInfo[i2].Control==CT_IMAGEBOX){
+				if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_ICON)
+					sprintf(Command+i,"%s\tDestroyIcon(hImage_%s_%s)\r\n",spaces,pWindowInfo->name,pWindowInfo->pChildInfo[i2].IdName);
+				else if((pWindowInfo->pChildInfo[i2].style&0x000F)==SS_BITMAP)
+					sprintf(Command+i,"%s\tDeleteObject(hImage_%s_%s)\r\n",spaces,pWindowInfo->name,pWindowInfo->pChildInfo[i2].IdName);
+				i+=lstrlen(Command+i);
+			}
+		}
+		return WM_DESTROY;
+	}
+	else if(lstrcmp(MessageName,"DropFiles")==0){
+		sprintf(Command,"%sCase WM_DROPFILES\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As HDROP)\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"HScroll")==0){
+		sprintf(Command,"%sCase WM_HSCROLL\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(LOWORD(wParam),HIWORD(wParam),lParam As HWND)\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"KeyDown")==0){
+		sprintf(Command,"%sCase WM_KEYDOWN\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,lParam As Long)\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"KeyPress")==0){
+		sprintf(Command,"%sCase WM_CHAR\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,lParam As Long)\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"KeyUp")==0){
+		sprintf(Command,"%sCase WM_KEYUP\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,lParam As Long)\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"LButtonDown")==0){
+		sprintf(Command,"%sCase WM_LBUTTONDOWN\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"LButtonDblClick")==0){
+		sprintf(Command,"%sCase WM_LBUTTONDBLCLK\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"LButtonUp")==0){
+		sprintf(Command,"%sCase WM_LBUTTONUP\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"MButtonDown")==0){
+		sprintf(Command,"%sCase WM_MBUTTONDOWN\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"MButtonDblClick")==0){
+		sprintf(Command,"%sCase WM_MBUTTONDBLCLK\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"MButtonUp")==0){
+		sprintf(Command,"%sCase WM_MBUTTONUP\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"MouseMove")==0){
+		sprintf(Command,"%sCase WM_MOUSEMOVE\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"Move")==0){
+		sprintf(Command,"%sCase WM_MOVE\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"Notify")==0){
+		//コモンコントロールメッセージと共に挿入
+		return WM_NOTIFY;
+	}
+	else if(lstrcmp(MessageName,"Paint")==0){
+		sprintf(Command,"%sCase WM_PAINT\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\tDim ps As PAINTSTRUCT\r\n",spaces);
+		i+=lstrlen(Command+i);
+		sprintf(Command+i,"%s\tDim hDC As HDC\r\n",spaces);
+		i+=lstrlen(Command+i);
+		sprintf(Command+i,"%s\thDC=BeginPaint(hWnd,ps)\r\n",spaces);
+		i+=lstrlen(Command+i);
+		sprintf(Command+i,"%s\t%s_%s(hDC)\r\n",spaces,pWindowInfo->name,MessageName);
+		i+=lstrlen(Command+i);
+		sprintf(Command+i,"%s\tEndPaint(hWnd,ps)\r\n",spaces);
+		return WM_PAINT;
+	}
+	else if(lstrcmp(MessageName,"QueryClose")==0){
+		sprintf(Command,"%sCase WM_CLOSE\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\tDim cancel=0 As Integer\r\n",spaces);
+		i+=lstrlen(Command+i);
+		if(bProcedureCall){
+			sprintf(Command+i,"%s\t%s_%s(cancel)\r\n",spaces,pWindowInfo->name,MessageName);
+			i+=lstrlen(Command+i);
+		}
+		if(pWindowInfo->type==WNDTYPE_MODALDLG)
+			sprintf(Command+i,"%s\tIf cancel=0 Then EndDialog(hWnd,0)\r\n",spaces);
+		else
+			sprintf(Command+i,"%s\tIf cancel=0 Then DestroyWindow(hWnd)\r\n",spaces);
+		return WM_CLOSE;
+	}
+	else if(lstrcmp(MessageName,"RButtonDblClick")==0){
+		sprintf(Command,"%sCase WM_RBUTTONDBLCLK\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"RButtonDown")==0){
+		sprintf(Command,"%sCase WM_RBUTTONDOWN\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"RButtonUp")==0){
+		sprintf(Command,"%sCase WM_RBUTTONUP\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"Resize")==0){
+		sprintf(Command,"%sCase WM_SIZE\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As Long,LOWORD(lParam),HIWORD(lParam))\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"SetFocus")==0){
+		sprintf(Command,"%sCase WM_SETFOCUS\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s()\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"Timer")==0){
+		sprintf(Command,"%sCase WM_TIMER\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam As DWord)\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	else if(lstrcmp(MessageName,"VScroll")==0){
+		sprintf(Command,"%sCase WM_VSCROLL\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(LOWORD(wParam),HIWORD(wParam),lParam As HWND)\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+
+
+	///////////////////
+	// MMSYS コマンド
+
+	else if(lstrcmp(MessageName,"MciNotify")==0){
+		sprintf(Command,"%sCase MM_MCINOTIFY\r\n",spaces);
+		i=lstrlen(Command);
+		sprintf(Command+i,"%s\t%s_%s(wParam,lParam)\r\n",spaces,pWindowInfo->name,MessageName);
+	}
+	return 0;
+}
+
+char **GetMenuItemConstData(MENU_INFO *pMenuInfo,int NumberOfMenu,int *ConstNumber,char **ppNames,int *NamesNum,char *buffer,int *base){
+	extern HANDLE hHeap;
+	int i,i2,sw1;
+
+	for(i=0;i<NumberOfMenu;i++){
+		if(pMenuInfo[i].pMenuInfo){
+			//ポップアップ
+			ppNames=GetMenuItemConstData(pMenuInfo[i].pMenuInfo,pMenuInfo[i].NumberOfMenu,ConstNumber,ppNames,NamesNum,buffer,base);
+		}
+		else if(pMenuInfo[i].type==MFT_STRING){
+			//重複チェック
+			for(i2=0,sw1=0;i2<*NamesNum;i2++){
+				if(lstrcmpi(ppNames[i2],pMenuInfo[i].IdName)==0){
+					sw1=1;
+					break;
+				}
+			}
+			if(sw1==0){
+				ppNames=(char **)HeapReAlloc(hHeap,0,ppNames,sizeof(char *)*((*NamesNum)+1));
+				ppNames[*NamesNum]=pMenuInfo[i].IdName;
+				(*NamesNum)++;
+
+				sprintf(buffer+(*base),"Const %s=%d\r\n",pMenuInfo[i].IdName,*ConstNumber);
+				(*base)+=lstrlen(buffer+(*base));
+				(*ConstNumber)++;
+			}
+		}
+	}
+	return ppNames;
+}
+int GetMakeMenuCommand(MENU_INFO *pMenuInfo,int NumberOfMenu,char *MenuHandle,char *Command,BOOL bMain){
+	int i,i2;
+	char temporary[MAX_PATH];
+
+	i=0;
+	sprintf(Command+i,"Dim %s As HMENU\r\n",MenuHandle);
+	i+=lstrlen(Command+i);
+	if(bMain) sprintf(Command+i,"%s=CreateMenu()\r\n",MenuHandle);
+	else sprintf(Command+i,"%s=CreatePopupMenu()\r\n",MenuHandle);
+	i+=lstrlen(Command+i);
+
+	for(i2=NumberOfMenu-1;i2>=0;i2--){
+		if(pMenuInfo[i2].pMenuInfo){
+			sprintf(temporary,"%s_%d",MenuHandle,i2);
+			i+=GetMakeMenuCommand(pMenuInfo[i2].pMenuInfo,pMenuInfo[i2].NumberOfMenu,temporary,Command+i,0);
+			sprintf(Command+i,"InsMenu %s,0,MF_BYPOSITION,Ex\"%s\",0,%s,%d\r\n",
+				MenuHandle,
+				pMenuInfo[i2].caption,
+				temporary,
+				pMenuInfo[i2].state);
+			i+=lstrlen(Command+i);
+		}
+		else{
+			if(pMenuInfo[i2].type==MFT_STRING){
+				sprintf(Command+i,"InsMenu %s,0,MF_BYPOSITION,Ex\"%s\",%s,0,%d\r\n",
+					MenuHandle,
+					pMenuInfo[i2].caption,
+					pMenuInfo[i2].IdName,
+					pMenuInfo[i2].state);
+				i+=lstrlen(Command+i);
+			}
+			else if(pMenuInfo[i2].type==MFT_SEPARATOR){
+				sprintf(Command+i,"InsMenu %s,0,MF_BYPOSITION\r\n",
+					MenuHandle);
+				i+=lstrlen(Command+i);
+			}
+		}
+	}
+	return i;
+}
+int GetDestroyMenuCommand(MENU_INFO *pMenuInfo,int NumberOfMenu,char *MenuHandle,char *Command){
+	int i,i2;
+	char temporary[MAX_PATH];
+
+	i=0;
+	sprintf(Command+i,"\tDestroyMenu(%s)\r\n",MenuHandle);
+	i+=lstrlen(Command+i);
+
+	for(i2=NumberOfMenu-1;i2>=0;i2--){
+		if(pMenuInfo[i2].pMenuInfo){
+			sprintf(temporary,"%s_%d",MenuHandle,i2);
+			i+=GetDestroyMenuCommand(pMenuInfo[i2].pMenuInfo,pMenuInfo[i2].NumberOfMenu,temporary,Command+i);
+		}
+	}
+	return i;
+}
+void SaveWindowProgram(){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,i4,i5,i6,sw1,sw2,sw3,sw4,size;
+	char *buffer,**ppNames,temporary[MAX_PATH];
+	WINDOW_INFO *pWindowInfo;
+
+	pWindowInfo=ProjectInfo.pWindowInfo;
+
+	size=2;
+	buffer=(char *)HeapAlloc(hHeap,0,65535*size);
+	lstrcpy(buffer,"'このファイルはウィンドウ定義ファイル（*.wnd）をもとに生成されています\r\n\r\n");
+	i2=lstrlen(buffer);
+
+	if(ProjectInfo.dwOption&PJ_OP_COMMCTRL){
+		//コマンコントロールを初期化
+		lstrcpy(buffer+i2,"Dim _RadSys_InitCtrls As INITCOMMONCONTROLSEX\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"_RadSys_InitCtrls.dwSize=Len(_RadSys_InitCtrls)\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"_RadSys_InitCtrls.dwICC=ICC_WIN95_CLASSES\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"InitCommonControlsEx(_RadSys_InitCtrls)\r\n\r\n");
+		i2+=lstrlen(buffer+i2);
+	}
+
+
+	////////////
+	//IDを定義
+
+	ppNames=(char **)HeapAlloc(hHeap,0,1);
+	for(i=0,i4=1000,i5=0;i<ProjectInfo.NumberOfWindows;i++){
+		for(i3=0;i3<pWindowInfo[i].NumberOfChildWindows;i3++){
+
+			//重複チェック
+			for(i6=0,sw1=0;i6<i5;i6++){
+				if(lstrcmpi(ppNames[i6],pWindowInfo[i].pChildInfo[i3].IdName)==0){
+					sw1=1;
+					break;
+				}
+			}
+			if(sw1) continue;
+
+			ppNames=(char **)HeapReAlloc(hHeap,0,ppNames,sizeof(char *)*(i5+1));
+			ppNames[i5]=pWindowInfo[i].pChildInfo[i3].IdName;
+			i5++;
+
+			sprintf(buffer+i2,"Const %s=%d\r\n",pWindowInfo[i].pChildInfo[i3].IdName,i4);
+			i2+=lstrlen(buffer+i2);
+			i4++;
+
+			while(i2>65535*(size-1)){
+				size++;
+				buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+			}
+		}
+	}
+
+	//メニューのIDを定義
+	ppNames=GetMenuItemConstData(ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu,&i4,ppNames,&i5,buffer,&i2);
+
+	HeapDefaultFree(ppNames);
+	lstrcpy(buffer+i2,"\r\n");
+	i2+=lstrlen(buffer+i2);
+
+
+	//ハンドル変数を定義
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		sprintf(buffer+i2,"Dim %s As HWND\r\n",pWindowInfo[i].HandleName);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"Dim hFont_%s As HFONT\r\n",pWindowInfo[i].name);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"hFont_%s=CreateFont(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\")\r\n",
+			pWindowInfo[i].name,
+			pWindowInfo[i].LogFont.lfHeight,
+			pWindowInfo[i].LogFont.lfWidth,
+			pWindowInfo[i].LogFont.lfEscapement,
+			pWindowInfo[i].LogFont.lfOrientation,
+			pWindowInfo[i].LogFont.lfWeight,
+			pWindowInfo[i].LogFont.lfItalic,
+			pWindowInfo[i].LogFont.lfUnderline,
+			pWindowInfo[i].LogFont.lfStrikeOut,
+			pWindowInfo[i].LogFont.lfCharSet,
+			pWindowInfo[i].LogFont.lfOutPrecision,
+			pWindowInfo[i].LogFont.lfClipPrecision,
+			pWindowInfo[i].LogFont.lfQuality,
+			pWindowInfo[i].LogFont.lfPitchAndFamily,
+			pWindowInfo[i].LogFont.lfFaceName);
+		i2+=lstrlen(buffer+i2);
+
+		while(i2>65535*(size-1)){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+		}
+	}
+
+	//背景に使用するブラシを定義
+	lstrcpy(buffer+i2,"Dim h3DFaceBrush As HBRUSH\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"h3DFaceBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE))\r\n");
+	i2+=lstrlen(buffer+i2);
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		if(pWindowInfo[i].bgColor<=0&&
+			pWindowInfo[i].bgColor!=-(int)RGB(255,255,255)&&
+			pWindowInfo[i].bgColor!=-(int)RGB(0,0,0)){
+				sprintf(buffer+i2,"Dim _RadSys_hBackBrush%d As HBRUSH\r\n",i);
+				i2+=lstrlen(buffer+i2);
+				sprintf(buffer+i2,"_RadSys_hBackBrush%d=CreateSolidBrush(%d)\r\n",i,-pWindowInfo[i].bgColor);
+				i2+=lstrlen(buffer+i2);
+		}
+		if(pWindowInfo[i].bgColor>=0x1000){
+				sprintf(buffer+i2,"Dim _RadSys_hBackBrush%d As HBRUSH\r\n",i);
+				i2+=lstrlen(buffer+i2);
+				sprintf(buffer+i2,"_RadSys_hBackBrush%d=CreatePatternBrush(LoadImage(GetModuleHandle(0),%s,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE or LR_SHARED))\r\n",
+					i,
+					ProjectInfo.res.pBitmapResInfo[pWindowInfo[i].bgColor-0x1000].IdName);
+				i2+=lstrlen(buffer+i2);
+		}
+	}
+
+	lstrcpy(buffer+i2,"\r\n");
+	i2+=lstrlen(buffer+i2);
+
+	//イメージ ボックス用の変数を定義
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		for(i3=0;i3<pWindowInfo[i].NumberOfChildWindows;i3++){
+			if(pWindowInfo[i].pChildInfo[i3].Control==CT_IMAGEBOX){
+				if((pWindowInfo[i].pChildInfo[i3].style&0x000F)==SS_ICON||
+					(pWindowInfo[i].pChildInfo[i3].style&0x000F)==SS_BITMAP){
+					sprintf(buffer+i2,"Dim hImage_%s_%s As HANDLE\r\n",pWindowInfo[i].name,pWindowInfo[i].pChildInfo[i3].IdName);
+					i2+=lstrlen(buffer+i2);
+
+					while(i2>65535*(size-1)){
+						size++;
+						buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+					}
+				}
+			}
+		}
+	}
+
+	lstrcpy(buffer+i2,"\r\n");
+	i2+=lstrlen(buffer+i2);
+
+	//メニュー作成
+	for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+		sprintf(temporary,"hMenu_%s",ProjectInfo.pMenuInfo[i].IdName);
+
+		//InsertMenuItem郡
+		i2+=GetMakeMenuCommand(ProjectInfo.pMenuInfo[i].pMenuInfo,ProjectInfo.pMenuInfo[i].NumberOfMenu,temporary,buffer+i2,1);
+
+		lstrcpy(buffer+i2,"\r\n");
+		i2+=lstrlen(buffer+i2);
+
+		while(i2>65535*(size-1)){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+		}
+	}
+
+
+	//////////////////////////
+	//オブジェクトの解放処理
+	sprintf(buffer+i2,"Sub %s_DestroyObjects()\r\n",ProjectInfo.name);
+	i2+=lstrlen(buffer+i2);
+
+	//メニュー解放
+	for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+		sprintf(temporary,"hMenu_%s",ProjectInfo.pMenuInfo[i].IdName);
+		i2+=GetDestroyMenuCommand(ProjectInfo.pMenuInfo[i].pMenuInfo,ProjectInfo.pMenuInfo[i].NumberOfMenu,temporary,buffer+i2);
+
+		while(i2>65535*(size-1)){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+		}
+	}
+
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		//フォントハンドル解放
+		sprintf(buffer+i2,"\tDeleteObject(hFont_%s)\r\n",ProjectInfo.pWindowInfo[i].name);
+		i2+=lstrlen(buffer+i2);
+
+		while(i2>65535*(size-1)){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+		}
+	}
+
+	//背景ブラシを解放
+	lstrcpy(buffer+i2,"\tDeleteObject(h3DFaceBrush)\r\n");
+	i2+=lstrlen(buffer+i2);
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		if(pWindowInfo[i].bgColor<=0&&
+			pWindowInfo[i].bgColor!=-(int)RGB(255,255,255)&&
+			pWindowInfo[i].bgColor!=-(int)RGB(0,0,0)){
+				sprintf(buffer+i2,"\tDeleteObject(_RadSys_hBackBrush%d)\r\n",i);
+				i2+=lstrlen(buffer+i2);
+		}
+	}
+
+	sprintf(buffer+i2,"End Sub\r\n\r\n");
+	i2+=lstrlen(buffer+i2);
+
+	//ユーザー定義のコールバック関数が存在するかどうか
+	BOOL bAvailUserProc[MAX_WNDNUM];
+
+
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		if(i!=0){
+			lstrcpy(buffer+i2,"\r\n");
+			i2+=lstrlen(buffer+i2);
+		}
+
+		//////////////////////////
+		//コールバック関数を生成
+
+		//処理メッセージを抽出
+		ITEMEVENTINFO *pItemEventInfo;
+		ppNames=GetProcedureNamesOfMessageCall(i,&pItemEventInfo,&i3,&bAvailUserProc[i]);
+
+		sprintf(buffer+i2,"Function EventCall_%s(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT\r\n",pWindowInfo[i].name);
+		i2+=lstrlen(buffer+i2);
+
+		lstrcpy(buffer+i2,"\tSelect Case message\r\n");
+		i2+=lstrlen(buffer+i2);
+
+		//通常メッセージ郡
+		for(i4=0,sw1=0,sw2=0,sw3=0,sw4=0;i4<i3;i4++){
+			i5=GetCommandByMessage(i,ppNames[i4],1,buffer+i2,"\t\t");
+			i2+=lstrlen(buffer+i2);
+			if(i5==WM_CREATE) sw1=1;
+			else if(i5==WM_DESTROY) sw2=1;
+			else if(i5==WM_CLOSE) sw3=1;
+			else if(i5==WM_NOTIFY) sw4=1;
+			HeapDefaultFree(ppNames[i4]);
+		}
+		HeapDefaultFree(ppNames);
+
+		//WM_CREATE、WM_DESTROY、WM_PAINTが呼び出されていない場合
+		if(!sw1){
+			GetCommandByMessage(i,"Create",0,buffer+i2,"\t\t");
+			i2+=lstrlen(buffer+i2);
+		}
+		if(!sw2){
+			GetCommandByMessage(i,"Destroy",0,buffer+i2,"\t\t");
+			i2+=lstrlen(buffer+i2);
+		}
+		if(!sw3){
+			GetCommandByMessage(i,"QueryClose",0,buffer+i2,"\t\t");
+			i2+=lstrlen(buffer+i2);
+		}
+
+		//アイテムメッセージ郡（WM_NOTIFY）
+		if(pItemEventInfo[0].IdName){
+			i3=i2;
+			lstrcpy(buffer+i2,"\t\tCase WM_NOTIFY\r\n");
+			i2+=lstrlen(buffer+i2);
+			if(sw4){
+				sprintf(buffer+i2,"\t\t\t%s_Notify(ByVal (lParam As *NMHDR))\r\n",pWindowInfo[i].name);
+				i2+=lstrlen(buffer+i2);
+			}
+			lstrcpy(buffer+i2,"\t\t\tDim pnmHdr As *NMHDR\r\n");
+			i2+=lstrlen(buffer+i2);
+			lstrcpy(buffer+i2,"\t\t\tpnmHdr=lParam As *NMHDR\r\n");
+			i2+=lstrlen(buffer+i2);
+			lstrcpy(buffer+i2,"\t\t\tSelect Case LOWORD(wParam)\r\n");
+			i2+=lstrlen(buffer+i2);
+
+			if(GetNotifyCommandByItemMessage(&pWindowInfo[i],pItemEventInfo,buffer+i2,"\t\t\t\t")){
+				i2+=lstrlen(buffer+i2);
+
+				lstrcpy(buffer+i2,"\t\t\tEnd Select\r\n");
+				i2+=lstrlen(buffer+i2);
+			}
+			else{
+				//WM_NOTIFYを削除
+				i2=i3;
+				if(sw4) goto DefaultNotifyEvent;
+			}
+		}
+		else if(sw4){
+DefaultNotifyEvent:
+			lstrcpy(buffer+i2,"\t\tCase WM_NOTIFY\r\n");
+			i2+=lstrlen(buffer+i2);
+			sprintf(buffer+i2,"\t\t\t%s_Notify(ByVal (lParam As *NMHDR))\r\n",pWindowInfo[i].name);
+			i2+=lstrlen(buffer+i2);
+		}
+
+		//アイテムメッセージ郡（WM_COMMAND）
+		if(pItemEventInfo[0].IdName){
+			lstrcpy(buffer+i2,"\t\tCase WM_COMMAND\r\n");
+			i2+=lstrlen(buffer+i2);
+			lstrcpy(buffer+i2,"\t\t\tSelect Case LOWORD(wParam)\r\n");
+			i2+=lstrlen(buffer+i2);
+
+			//pItemEventInfoのIdName、EventNameメンバのメモリ解放はこの関数内で行う
+			GetCommandByItemMessage(&pWindowInfo[i],pItemEventInfo,buffer+i2,"\t\t\t\t");
+			i2+=lstrlen(buffer+i2);
+
+			lstrcpy(buffer+i2,"\t\t\tEnd Select\r\n");
+			i2+=lstrlen(buffer+i2);
+		}
+		HeapDefaultFree(pItemEventInfo);
+
+		// DefWindowProc関数
+		lstrcpy(buffer+i2,"\t\tCase Else\r\n");
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"\t\t\tEventCall_%s=DefWindowProc(hWnd,message,wParam,lParam)\r\n",pWindowInfo[i].name);
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\t\t\tExit Function\r\n");
+		i2+=lstrlen(buffer+i2);
+
+		lstrcpy(buffer+i2,"\tEnd Select\r\n");
+		i2+=lstrlen(buffer+i2);
+
+		sprintf(buffer+i2,"\tEventCall_%s=0\r\n",pWindowInfo[i].name);
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"End Function\r\n");
+		i2+=lstrlen(buffer+i2);
+
+		while(i2>65535*(size-1)){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+		}
+	}
+
+
+	//////////////////////////
+	//ダイアログボックス関連
+
+	//クラス登録
+	lstrcpy(buffer+i2,"\r\nFunction DefaultCallProc(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"\tDefaultCallProc=DefWindowProc(hWnd,message,wParam,lParam)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"End Function\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"\r\nDim _RadSys_dlgwcl As WNDCLASSEX\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"FillMemory(VarPtr(_RadSys_dlgwcl),Len(_RadSys_dlgwcl),0)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.cbSize=Len(_RadSys_dlgwcl)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.hInstance=GetModuleHandle(0)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.style=CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION))\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.hIconSm=LoadIcon(NULL,MAKEINTRESOURCE(IDI_WINLOGO))\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.hCursor=LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW))\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.lpszClassName=\"NORMALDLG\"\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.hbrBackground=h3DFaceBrush\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_dlgwcl.lpfnWndProc=AddressOf(DefaultCallProc)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"RegisterClassEx(_RadSys_dlgwcl)\r\n");
+	i2+=lstrlen(buffer+i2);
+
+	//DialogBox関数
+	lstrcpy(buffer+i2,"\r\nFunction DialogBox(hOwnerWnd As HWND, TemplateName As LPSTR) As LONG_PTR\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"\tDim hDlg As HWND\r\n");
+	i2+=lstrlen(buffer+i2);
+	for(i=0,sw1=0;i<ProjectInfo.NumberOfWindows;i++){
+		if(pWindowInfo[i].type==WNDTYPE_MODALDLG){
+			if(sw1==0){
+				sprintf(buffer+i2,"\tIf lstrcmp(TemplateName,\"%s\")=0 Then\r\n",pWindowInfo[i].name);
+				i2+=lstrlen(buffer+i2);
+				sw1=1;
+			}
+			else{
+				sprintf(buffer+i2,"\tElseIf lstrcmp(TemplateName,\"%s\")=0 Then\r\n",pWindowInfo[i].name);
+				i2+=lstrlen(buffer+i2);
+			}
+			sprintf(buffer+i2,"\t\t%s=CreateWindowEx(&H%08x,\"NORMALDLG\",\"%s\",&H%08x,%d,%d,%d,%d,hOwnerWnd,%d As HMENU,GetModuleHandle(0),0)\r\n",
+				pWindowInfo[i].HandleName,
+				pWindowInfo[i].ExStyle,
+				pWindowInfo[i].caption,
+				pWindowInfo[i].style,
+				pWindowInfo[i].pos.x,
+				pWindowInfo[i].pos.y,
+				pWindowInfo[i].size.cx,
+				pWindowInfo[i].size.cy,
+				pWindowInfo[i].id);
+			i2+=lstrlen(buffer+i2);
+			sprintf(buffer+i2,"\t\thDlg=%s\r\n",
+				pWindowInfo[i].HandleName);
+			i2+=lstrlen(buffer+i2);
+			if(bAvailUserProc[i]){
+				sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(%s) As LONG_PTR)\r\n",
+					pWindowInfo[i].HandleName,
+					pWindowInfo[i].CallBackName);
+			}
+			else{
+				sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(EventCall_%s) As LONG_PTR)\r\n",
+					pWindowInfo[i].HandleName,
+					pWindowInfo[i].name);
+			}
+			i2+=lstrlen(buffer+i2);
+			sprintf(buffer+i2,"\t\tSendMessage(%s,WM_INITDIALOG,0,0)\r\n",pWindowInfo[i].HandleName);
+			i2+=lstrlen(buffer+i2);
+			if(pWindowInfo[i].IconResName){
+				sprintf(buffer+i2,"\t\tSendMessage(%s,WM_SETICON,ICON_SMALL,LoadIcon(GetModuleHandle(0),MAKEINTRESOURCE(%s)) As LPARAM)\r\n",pWindowInfo[i].HandleName,pWindowInfo[i].IconResName);
+				i2+=lstrlen(buffer+i2);
+			}
+			sprintf(buffer+i2,"\t\tShowWindow(%s,SW_SHOW)\r\n",pWindowInfo[i].HandleName);
+			i2+=lstrlen(buffer+i2);
+		}
+		while(i2>65535*(size-1)){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+		}
+	}
+	if(sw1){
+		lstrcpy(buffer+i2,"\tElse\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\t\tExit Function\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\tEnd If\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\tEnableWindow(hOwnerWnd,0)\r\n\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\tDim msg As MSG, iResult As Long\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\tDo\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\t\tiResult=GetMessage(msg,0,0,0)\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\t\tIf iResult=0 or iResult=-1 Then Exit Do\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\t\tIf IsDialogMessage(hDlg,msg) Then Continue\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\t\tTranslateMessage(msg)\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\t\tDispatchMessage(msg)\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\tLoop\r\n");
+		i2+=lstrlen(buffer+i2);
+		lstrcpy(buffer+i2,"\tDialogBox=msg.wParam\r\n");
+		i2+=lstrlen(buffer+i2);
+	}
+	lstrcpy(buffer+i2,"End Function\r\n");
+	i2+=lstrlen(buffer+i2);
+
+	//EndDialog関数
+	lstrcpy(buffer+i2,"Sub EndDialog(hWnd As HWND, lResult As Long)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"\tEnableWindow(GetWindow(hWnd,GW_OWNER),1)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"\tDestroyWindow(hWnd)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"\tPostMessage(0,WM_QUIT,lResult,0)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"End Sub\r\n");
+	i2+=lstrlen(buffer+i2);
+
+	//CreateDialog関数
+	lstrcpy(buffer+i2,"\r\nFunction CreateDialog(hOwnerWnd As HWND, TemplateName As LPSTR) As HWND\r\n");
+	i2+=lstrlen(buffer+i2);
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		if(pWindowInfo[i].type==WNDTYPE_MODELESSDLG){
+			sprintf(buffer+i2,"\tIf lstrcmp(TemplateName,\"%s\")=0 Then\r\n",pWindowInfo[i].name);
+			i2+=lstrlen(buffer+i2);
+
+			sprintf(buffer+i2,"\t\t%s=CreateWindowEx(&H%08x,\"NORMALDLG\",\"%s\",&H%08x,%d,%d,%d,%d,hOwnerWnd,%d As HMENU,GetModuleHandle(0),0)\r\n",
+				pWindowInfo[i].HandleName,
+				pWindowInfo[i].ExStyle,
+				pWindowInfo[i].caption,
+				pWindowInfo[i].style,
+				pWindowInfo[i].pos.x,
+				pWindowInfo[i].pos.y,
+				pWindowInfo[i].size.cx,
+				pWindowInfo[i].size.cy,
+				pWindowInfo[i].id);
+			i2+=lstrlen(buffer+i2);
+			sprintf(buffer+i2,"\t\tCreateDialog=%s\r\n",pWindowInfo[i].HandleName);
+			i2+=lstrlen(buffer+i2);
+			if(bAvailUserProc[i]){
+				sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(%s) As LONG_PTR)\r\n",
+					pWindowInfo[i].HandleName,
+					pWindowInfo[i].CallBackName);
+			}
+			else{
+				sprintf(buffer+i2,"\t\tSetWindowLongPtr(%s,GWLP_WNDPROC,AddressOf(EventCall_%s) As LONG_PTR)\r\n",
+					pWindowInfo[i].HandleName,
+					pWindowInfo[i].name);
+			}
+			i2+=lstrlen(buffer+i2);
+			sprintf(buffer+i2,"\t\tSendMessage(%s,WM_INITDIALOG,0,0)\r\n",pWindowInfo[i].HandleName);
+			i2+=lstrlen(buffer+i2);
+			if(pWindowInfo[i].IconResName){
+				sprintf(buffer+i2,"\t\tSendMessage(%s,WM_SETICON,ICON_SMALL,LoadIcon(GetModuleHandle(0),MAKEINTRESOURCE(%s)) As LPARAM)\r\n",pWindowInfo[i].HandleName,pWindowInfo[i].IconResName);
+				i2+=lstrlen(buffer+i2);
+			}
+			sprintf(buffer+i2,"\tEnd If\r\n",pWindowInfo[i].name);
+			i2+=lstrlen(buffer+i2);
+		}
+		while(i2>65535*(size-1)){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+		}
+	}
+	lstrcpy(buffer+i2,"End Function\r\n");
+	i2+=lstrlen(buffer+i2);
+
+
+	///////////////////////
+	// 保存（Callback.wbp）
+	sprintf(temporary,"%sCallback.wbp",ProjectInfo.dir);
+	WriteBuffer(temporary,buffer,i2);
+
+
+
+	lstrcpy(buffer,"'このファイルはウィンドウ定義ファイル（*.wnd）をもとに生成されています\r\n\r\n");
+	i2=lstrlen(buffer);
+
+	lstrcpy(buffer+i2,"Dim _RadSys_wcl As WNDCLASSEX\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"FillMemory(VarPtr(_RadSys_wcl),Len(_RadSys_wcl),0)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_wcl.cbSize=Len(_RadSys_wcl)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_wcl.hInstance=GetModuleHandle(0)\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_wcl.style=CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS\r\n");
+	i2+=lstrlen(buffer+i2);
+	lstrcpy(buffer+i2,"_RadSys_wcl.hCursor=LoadCursor(NULL,MAKEINTRESOURCE(IDC_ARROW))\r\n");
+	i2+=lstrlen(buffer+i2);
+
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		if(pWindowInfo[i].type==WNDTYPE_DEFAULT){
+			//////////////////////
+			//通常ウィンドウ作成
+
+			lstrcpy(buffer+i2,"\r\n");
+			i2+=2;
+
+			if(pWindowInfo[i].IconResName==0){
+				lstrcpy(buffer+i2,"_RadSys_wcl.hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION))\r\n");
+				i2+=lstrlen(buffer+i2);
+				lstrcpy(buffer+i2,"_RadSys_wcl.hIconSm=LoadIcon(NULL,MAKEINTRESOURCE(IDI_WINLOGO))\r\n");
+				i2+=lstrlen(buffer+i2);
+			}
+			else{
+				sprintf(buffer+i2,"_RadSys_wcl.hIcon=LoadIcon(_RadSys_wcl.hInstance,MAKEINTRESOURCE(%s))\r\n",pWindowInfo[i].IconResName);
+				i2+=lstrlen(buffer+i2);
+				sprintf(buffer+i2,"_RadSys_wcl.hIconSm=LoadIcon(_RadSys_wcl.hInstance,MAKEINTRESOURCE(%s))\r\n",pWindowInfo[i].IconResName);
+				i2+=lstrlen(buffer+i2);
+			}
+
+			sprintf(buffer+i2,"_RadSys_wcl.lpszClassName=\"NORMAL%d\"\r\n",i);
+			i2+=lstrlen(buffer+i2);
+			if(bAvailUserProc[i])
+				sprintf(buffer+i2,"_RadSys_wcl.lpfnWndProc=AddressOf(%s)\r\n",pWindowInfo[i].CallBackName);
+			else sprintf(buffer+i2,"_RadSys_wcl.lpfnWndProc=AddressOf(EventCall_%s)\r\n",pWindowInfo[i].name);
+			i2+=lstrlen(buffer+i2);
+			if(pWindowInfo[i].bgColor==COLOR_3DFACE)
+				lstrcpy(buffer+i2,"_RadSys_wcl.hbrBackground=h3DFaceBrush\r\n");
+			else if(pWindowInfo[i].bgColor==-(int)RGB(255,255,255))
+				lstrcpy(buffer+i2,"_RadSys_wcl.hbrBackground=GetStockObject(WHITE_BRUSH)\r\n");
+			else if(pWindowInfo[i].bgColor==-(int)RGB(0,0,0))
+				lstrcpy(buffer+i2,"_RadSys_wcl.hbrBackground=GetStockObject(BLACK_BRUSH)\r\n");
+			else if(pWindowInfo[i].bgColor<=0||
+				pWindowInfo[i].bgColor>=0x1000){
+				//色指定またはビットマップ
+				sprintf(buffer+i2,"_RadSys_wcl.hbrBackground=_RadSys_hBackBrush%d\r\n",i);
+			}
+			i2+=lstrlen(buffer+i2);
+			lstrcpy(buffer+i2,"RegisterClassEx(_RadSys_wcl)\r\n");
+			i2+=lstrlen(buffer+i2);
+			sprintf(buffer+i2,"CreateWindowEx(&H%08x,\"%s%d\",\"%s\",&H%08x,%d,%d,%d,%d,0,0,GetModuleHandle(0),0)\r\n",
+				pWindowInfo[i].ExStyle,
+				pWindowInfo[i].ClassName,i,
+				pWindowInfo[i].caption,
+				pWindowInfo[i].style,
+				pWindowInfo[i].pos.x,
+				pWindowInfo[i].pos.y,
+				pWindowInfo[i].size.cx,
+				pWindowInfo[i].size.cy);
+			i2+=lstrlen(buffer+i2);
+		}
+
+		while(i2>65535*(size-1)){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,65535*size);
+		}
+	}
+
+
+	/////////////////////////
+	// 保存（MakeWindow.wbp）
+	sprintf(temporary,"%sMakeWindow.wbp",ProjectInfo.dir);
+	WriteBuffer(temporary,buffer,i2);
+	HeapDefaultFree(buffer);
+}
+int GetSaveMenuData(char *buffer,int SpaceNum,MENU_INFO *pMenuInfo,int ItemNum){
+	int i,i2;
+	char spaces[MAX_PATH];
+
+	memset(spaces,' ',SpaceNum*4);
+	spaces[SpaceNum*4]=0;
+
+	for(i=0,i2=0;i<ItemNum;i++){
+		if(pMenuInfo[i].pMenuInfo){
+			sprintf(buffer+i2,"%sPOPUP     = \"%s\",%d\r\n",spaces,pMenuInfo[i].caption,pMenuInfo[i].state);
+			i2+=lstrlen(buffer+i2);
+			i2+=GetSaveMenuData(buffer+i2,SpaceNum+1,pMenuInfo[i].pMenuInfo,pMenuInfo[i].NumberOfMenu);
+			sprintf(buffer+i2,"%sEND\r\n",spaces);
+			i2+=lstrlen(buffer+i2);
+		}
+		else if(pMenuInfo[i].type==MFT_STRING){
+			sprintf(buffer+i2,"%sITEM      = %s,\"%s\",%d\r\n",spaces,pMenuInfo[i].IdName,pMenuInfo[i].caption,pMenuInfo[i].state);
+			i2+=lstrlen(buffer+i2);
+		}
+		else if(pMenuInfo[i].type==MFT_SEPARATOR){
+			sprintf(buffer+i2,"%sSEPARATOR\r\n",spaces);
+			i2+=lstrlen(buffer+i2);
+		}
+	}
+	return i2;
+}
+void SaveWindowFile(char *path,WINDOW_INFO *pWindowInfo,int NumberOfWindowInfo){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,size;
+	char *buffer,*temporary;
+
+	size=2;
+	buffer=(char *)HeapAlloc(hHeap,0,GENERAL_SIZE*size);
+	for(i=0,i2=0;i<NumberOfWindowInfo;i++){
+		sprintf(buffer+i2,"WINDOW:%s\r\n",pWindowInfo[i].name);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    HANDLE    = %s\r\n",pWindowInfo[i].HandleName);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    POINT     = %d,%d\r\n",pWindowInfo[i].pos.x,pWindowInfo[i].pos.y);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    SIZE      = %d,%d\r\n",pWindowInfo[i].size.cx,pWindowInfo[i].size.cy);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    CAPTION   = \"%s\"\r\n",pWindowInfo[i].caption);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    STYLE     = &H%08x\r\n",pWindowInfo[i].style);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    EXSTYLE   = &H%08x\r\n",pWindowInfo[i].ExStyle);
+		i2+=lstrlen(buffer+i2);
+		if(pWindowInfo[i].MenuID){
+			sprintf(buffer+i2,"    MENUID    = %s\r\n",pWindowInfo[i].MenuID);
+			i2+=lstrlen(buffer+i2);
+		}
+		sprintf(buffer+i2,"    ID        = %d\r\n",pWindowInfo[i].id);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    BGCOLOR   = %d\r\n",pWindowInfo[i].bgColor);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    FONT      = %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\"\r\n",
+			pWindowInfo[i].LogFont.lfHeight,
+			pWindowInfo[i].LogFont.lfWidth,
+			pWindowInfo[i].LogFont.lfEscapement,
+			pWindowInfo[i].LogFont.lfOrientation,
+			pWindowInfo[i].LogFont.lfWeight,
+			pWindowInfo[i].LogFont.lfItalic,
+			pWindowInfo[i].LogFont.lfUnderline,
+			pWindowInfo[i].LogFont.lfStrikeOut,
+			pWindowInfo[i].LogFont.lfCharSet,
+			pWindowInfo[i].LogFont.lfOutPrecision,
+			pWindowInfo[i].LogFont.lfClipPrecision,
+			pWindowInfo[i].LogFont.lfQuality,
+			pWindowInfo[i].LogFont.lfPitchAndFamily,
+			pWindowInfo[i].LogFont.lfFaceName);
+		i2+=lstrlen(buffer+i2);
+		if(pWindowInfo[i].IconResName){
+			sprintf(buffer+i2,"    ICONID    = %s\r\n",pWindowInfo[i].IconResName);
+			i2+=lstrlen(buffer+i2);
+		}
+		sprintf(buffer+i2,"    CLASS     = \"%s\"\r\n",pWindowInfo[i].ClassName);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    CALLBACK  = %s\r\n",pWindowInfo[i].CallBackName);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    TYPE      = %d\r\n",pWindowInfo[i].type);
+		i2+=lstrlen(buffer+i2);
+		sprintf(buffer+i2,"    FILEPATH  = %s\r\n",pWindowInfo[i].filepath);
+		i2+=lstrlen(buffer+i2);
+		for(i3=0;i3<pWindowInfo[i].NumberOfChildWindows;i3++){
+			temporary=SetCaptionSequence(pWindowInfo[i].pChildInfo[i3].caption);
+			sprintf(buffer+i2,"    ITEM      = %s,%d,%d,%d,%d,\"%s\",&H%08x,&H%08x,%d",
+				pWindowInfo[i].pChildInfo[i3].IdName,
+				pWindowInfo[i].pChildInfo[i3].pos.x,pWindowInfo[i].pChildInfo[i3].pos.y,
+				pWindowInfo[i].pChildInfo[i3].size.cx,pWindowInfo[i].pChildInfo[i3].size.cy,
+				temporary,
+				pWindowInfo[i].pChildInfo[i3].style,
+				pWindowInfo[i].pChildInfo[i3].ExStyle,
+				pWindowInfo[i].pChildInfo[i3].Control
+			);
+			i2+=lstrlen(buffer+i2);
+			HeapDefaultFree(temporary);
+			if(pWindowInfo[i].pChildInfo[i3].Control==CT_IMAGEBOX){
+				sprintf(buffer+i2,",%d,\"%s\"",pWindowInfo[i].pChildInfo[i3].ImageCtrlInfo.type,pWindowInfo[i].pChildInfo[i3].ImageCtrlInfo.path);
+				i2+=lstrlen(buffer+i2);
+			}
+			lstrcpy(buffer+i2,"\r\n");
+			i2+=lstrlen(buffer+i2);
+			if(i2-GENERAL_SIZE<GENERAL_SIZE){
+				size++;
+				buffer=(char *)HeapReAlloc(hHeap,0,buffer,GENERAL_SIZE*size);
+			}
+		}
+		sprintf(buffer+i2,"END\r\n",pWindowInfo[i].name);
+		i2+=lstrlen(buffer+i2);
+		if(i2-GENERAL_SIZE<GENERAL_SIZE){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,GENERAL_SIZE*size);
+		}
+	}
+	for(i=0;i<ProjectInfo.NumberOfMenu;i++){
+		sprintf(buffer+i2,"MENU:%s\r\n",ProjectInfo.pMenuInfo[i].IdName);
+		i2+=lstrlen(buffer+i2);
+		i2+=GetSaveMenuData(buffer+i2,1,ProjectInfo.pMenuInfo[i].pMenuInfo,ProjectInfo.pMenuInfo[i].NumberOfMenu);
+		sprintf(buffer+i2,"END\r\n",pWindowInfo[i].name);
+		i2+=lstrlen(buffer+i2);
+		if(i2-GENERAL_SIZE<GENERAL_SIZE){
+			size++;
+			buffer=(char *)HeapReAlloc(hHeap,0,buffer,GENERAL_SIZE*size);
+		}
+	}
+	WriteBuffer(path,buffer,i2);
+	HeapDefaultFree(buffer);
+
+	extern PROJECTINFO ProjectInfo;
+	ProjectInfo.ModifyOfMaterial=0;
+}
+
+MENU_INFO *GetMenuData(char *buffer,int *pPos,int *pMenuNum){
+	extern HANDLE hHeap;
+	int i,i2,i3,i4;
+	char temporary[MAX_PATH],*temp2,temp3[MAX_PATH];
+	MENU_INFO *pMenuInfo;
+
+	temp2=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)+1);
+
+	*pMenuNum=0;
+	pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+
+	for(i=*pPos;;i++){
+		if(buffer[i]=='\0') return 0;
+		if((buffer[i]=='\r'&&buffer[i+1]=='\n')||i==0){
+			if(buffer[i]=='\r'&&buffer[i+1]=='\n')  i+=2;
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(buffer[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			if(i2==0){
+				i--;
+				continue;
+			}
+			if(buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temp2[i2]=0;
+						break;
+					}
+					temp2[i2]=buffer[i];
+				}
+			}
+			else{
+				temp2[0]=0;
+				i2=0;
+			}
+
+
+			if(lstrcmpi(temporary,"POPUP")==0){
+				(*pMenuNum)++;
+				pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pMenuInfo,(*pMenuNum)*sizeof(MENU_INFO));
+				i3=*pMenuNum-1;
+
+				i4=GetOneParameter(temp2,0,temp3);
+				RemoveStringQuotes(temp3);
+				pMenuInfo[i3].caption=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+				lstrcpy(pMenuInfo[i3].caption,temp3);
+
+				i4=GetOneParameter(temp2,i4,temp3);
+				pMenuInfo[i3].state=GetValue(temp3);
+
+				pMenuInfo[i3].pMenuInfo=GetMenuData(buffer,&i,&pMenuInfo[i3].NumberOfMenu);
+			}
+			else if(lstrcmpi(temporary,"ITEM")==0){
+				(*pMenuNum)++;
+				pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pMenuInfo,(*pMenuNum)*sizeof(MENU_INFO));
+				i3=*pMenuNum-1;
+
+				i4=GetOneParameter(temp2,0,temp3);
+				pMenuInfo[i3].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+				lstrcpy(pMenuInfo[i3].IdName,temp3);
+
+				i4=GetOneParameter(temp2,i4,temp3);
+				RemoveStringQuotes(temp3);
+				pMenuInfo[i3].caption=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+				lstrcpy(pMenuInfo[i3].caption,temp3);
+
+				i4=GetOneParameter(temp2,i4,temp3);
+				pMenuInfo[i3].state=GetValue(temp3);
+
+				pMenuInfo[i3].type=0;
+			}
+			else if(lstrcmpi(temporary,"SEPARATOR")==0){
+				(*pMenuNum)++;
+				pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,pMenuInfo,(*pMenuNum)*sizeof(MENU_INFO));
+				i3=*pMenuNum-1;
+
+				pMenuInfo[i3].type=MFT_SEPARATOR;
+			}
+			else if(lstrcmpi(temporary,"END")==0) break;
+			i--;
+		}
+	}
+	*pPos=i;
+
+	HeapDefaultFree(temp2);
+
+	return pMenuInfo;
+}
+_int8 OpenWindowFile(char *path){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i,i2,i3,i4,i5;
+	char *buffer,temporary[MAX_PATH],*temp2,temp3[MAX_PATH];
+	CHILDINFO *pChildInfo;
+
+	buffer=ReadBuffer(path);
+	if(!buffer) return 0;
+	temp2=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)+1);
+	ChangeOrSignToDivision(temp2,buffer);
+	KillSpaces(temp2,buffer);
+	//temp2はこの後の処理の一時保存バッファにも利用するので解放しない
+
+	ProjectInfo.NumberOfMenu=0;
+	ProjectInfo.pMenuInfo=(MENU_INFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+
+	ProjectInfo.NumberOfWindows=0;
+	ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapAlloc(hHeap,0,1);
+
+	for(i=0,i3=0;;i++){
+		if(buffer[i]=='\0') break;
+		if((buffer[i]=='\r'&&buffer[i+1]=='\n')||i==0){
+			if(buffer[i]=='\r'&&buffer[i+1]=='\n')  i+=2;
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(buffer[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=buffer[i];
+			}
+			if(i2==0){
+				i--;
+				continue;
+			}
+			if(buffer[i]==':'||buffer[i]=='='){
+				for(i++,i2=0;;i++,i2++){
+					if((buffer[i]=='\r'&&buffer[i+1]=='\n')||buffer[i]=='\0'){
+						temp2[i2]=0;
+						break;
+					}
+					temp2[i2]=buffer[i];
+				}
+			}
+			else{
+				temp2[0]=0;
+				i2=0;
+			}
+
+
+			//////////////
+			//ウィンドウ
+			if(lstrcmpi(temporary,"WINDOW")==0&&i3==0){
+				ProjectInfo.NumberOfWindows++;
+				ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,ProjectInfo.pWindowInfo,ProjectInfo.NumberOfWindows*sizeof(WINDOW_INFO));
+				i4=ProjectInfo.NumberOfWindows-1;
+				i3=1;
+
+				ProjectInfo.pWindowInfo[i4].name=(char *)HeapAlloc(hHeap,0,i2+1);
+				lstrcpy(ProjectInfo.pWindowInfo[i4].name,temp2);
+
+				ProjectInfo.pWindowInfo[i4].NumberOfChildWindows=0;
+				ProjectInfo.pWindowInfo[i4].pChildInfo=(CHILDINFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+			}
+			else if(lstrcmpi(temporary,"HANDLE")==0&&i3==1){
+				ProjectInfo.pWindowInfo[i4].HandleName=(char *)HeapAlloc(hHeap,0,i2+1);
+				lstrcpy(ProjectInfo.pWindowInfo[i4].HandleName,temp2);
+			}
+			else if(lstrcmpi(temporary,"POINT")==0&&i3==1){
+				sscanf(temp2,"%d,%d",
+					&ProjectInfo.pWindowInfo[i4].pos.x,
+					&ProjectInfo.pWindowInfo[i4].pos.y);
+				if(ProjectInfo.pWindowInfo[i4].pos.x==-1) ProjectInfo.pWindowInfo[i4].pos.x=CW_USEDEFAULT;
+				if(ProjectInfo.pWindowInfo[i4].pos.y==-1) ProjectInfo.pWindowInfo[i4].pos.y=CW_USEDEFAULT;
+			}
+			else if(lstrcmpi(temporary,"SIZE")==0&&i3==1){
+				sscanf(temp2,"%d,%d",
+					&ProjectInfo.pWindowInfo[i4].size.cx,
+					&ProjectInfo.pWindowInfo[i4].size.cy);
+			}
+			else if(lstrcmpi(temporary,"CAPTION")==0&&i3==1){
+				if(temp2[0]=='\"'&&temp2[lstrlen(temp2)-1]=='\"'){
+					temp2[lstrlen(temp2)-1]=0;
+					ProjectInfo.pWindowInfo[i4].caption=(char *)HeapAlloc(hHeap,0,i2+1);
+					lstrcpy(ProjectInfo.pWindowInfo[i4].caption,temp2+1);
+				}
+			}
+			else if(lstrcmpi(temporary,"STYLE")==0&&i3==1) ProjectInfo.pWindowInfo[i4].style=GetValue(temp2);
+			else if(lstrcmpi(temporary,"EXSTYLE")==0&&i3==1) ProjectInfo.pWindowInfo[i4].ExStyle=GetValue(temp2);
+			else if(lstrcmpi(temporary,"MENUID")==0&&i3==1){
+				ProjectInfo.pWindowInfo[i4].MenuID=(char *)HeapAlloc(hHeap,0,i2+1);
+				lstrcpy(ProjectInfo.pWindowInfo[i4].MenuID,temp2);
+			}
+			else if(lstrcmpi(temporary,"ID")==0&&i3==1) ProjectInfo.pWindowInfo[i4].id=GetValue(temp2);
+			else if(lstrcmpi(temporary,"BGCOLOR")==0&&i3==1){
+				ProjectInfo.pWindowInfo[i4].bgColor=GetValue(temp2);
+				if(ProjectInfo.dwVersion<=3){
+					//プロジェクトバージョンが3以前のときは新値に変換する
+					if(ProjectInfo.pWindowInfo[i4].bgColor==-1)
+						ProjectInfo.pWindowInfo[i4].bgColor=-(int)RGB(255,255,255);
+				}
+			}
+			else if(lstrcmpi(temporary,"FONT")==0&&i3==1){
+				i5=GetOneParameter(temp2,0,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfHeight=GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfWidth=GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfEscapement=GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfOrientation=GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfWeight=GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfItalic=(BYTE)GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfUnderline=(BYTE)GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfStrikeOut=(BYTE)GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfCharSet=(BYTE)GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfOutPrecision=(BYTE)GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfClipPrecision=(BYTE)GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfQuality=(BYTE)GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				ProjectInfo.pWindowInfo[i4].LogFont.lfPitchAndFamily=(BYTE)GetValue(temp3);
+
+				i5=GetOneParameter(temp2,i5,temp3);
+				RemoveStringQuotes(temp3);
+				lstrcpy(ProjectInfo.pWindowInfo[i4].LogFont.lfFaceName,temp3);
+			}
+			else if(lstrcmpi(temporary,"ICONID")==0&&i3==1){
+				ProjectInfo.pWindowInfo[i4].IconResName=(char *)HeapAlloc(hHeap,0,i2+1);
+				lstrcpy(ProjectInfo.pWindowInfo[i4].IconResName,temp2);
+			}
+			else if(lstrcmpi(temporary,"CLASS")==0&&i3==1){
+				if(temp2[0]=='\"'&&temp2[lstrlen(temp2)-1]=='\"'){
+					temp2[lstrlen(temp2)-1]=0;
+					ProjectInfo.pWindowInfo[i4].ClassName=(char *)HeapAlloc(hHeap,0,i2+1);
+					lstrcpy(ProjectInfo.pWindowInfo[i4].ClassName,temp2+1);
+				}
+			}
+			else if(lstrcmpi(temporary,"CALLBACK")==0&&i3==1){
+				ProjectInfo.pWindowInfo[i4].CallBackName=(char *)HeapAlloc(hHeap,0,i2+1);
+				lstrcpy(ProjectInfo.pWindowInfo[i4].CallBackName,temp2);
+			}
+
+			//以前のバージョンとの互換用
+			else if(lstrcmpi(temporary,"DLGTMP")==0&&i3==1) ProjectInfo.pWindowInfo[i4].type=GetValue(temp2);
+
+			else if(lstrcmpi(temporary,"TYPE")==0&&i3==1) ProjectInfo.pWindowInfo[i4].type=GetValue(temp2);
+			else if(lstrcmpi(temporary,"FILEPATH")==0&&i3==1){
+				ProjectInfo.pWindowInfo[i4].filepath=(char *)HeapAlloc(hHeap,0,i2+1);
+				lstrcpy(ProjectInfo.pWindowInfo[i4].filepath,temp2);
+			}
+			else if(lstrcmpi(temporary,"ITEM")==0&&i3==1){
+				ProjectInfo.pWindowInfo[i4].pChildInfo=(CHILDINFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,ProjectInfo.pWindowInfo[i4].pChildInfo,(ProjectInfo.pWindowInfo[i4].NumberOfChildWindows+1)*sizeof(CHILDINFO));
+				pChildInfo=&ProjectInfo.pWindowInfo[i4].pChildInfo[ProjectInfo.pWindowInfo[i4].NumberOfChildWindows];
+
+				//ID
+				i5=GetOneParameter(temp2,0,temp3);
+				pChildInfo->IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+				lstrcpy(pChildInfo->IdName,temp3);
+
+				//位置
+				i5=GetOneParameter(temp2,i5,temp3);
+				pChildInfo->pos.x=GetValue(temp3);
+				i5=GetOneParameter(temp2,i5,temp3);
+				pChildInfo->pos.y=GetValue(temp3);
+				i5=GetOneParameter(temp2,i5,temp3);
+				pChildInfo->size.cx=GetValue(temp3);
+				i5=GetOneParameter(temp2,i5,temp3);
+				pChildInfo->size.cy=GetValue(temp3);
+
+				//テキスト
+				i5=GetOneParameter(temp2,i5,temp3);
+				RemoveStringQuotes(temp3);
+				RestoreCaptionSequence(temp3);
+				pChildInfo->caption=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+				lstrcpy(pChildInfo->caption,temp3);
+
+				//スタイル
+				i5=GetOneParameter(temp2,i5,temp3);
+				pChildInfo->style=GetValue(temp3);
+
+				//拡張スタイル
+				i5=GetOneParameter(temp2,i5,temp3);
+				pChildInfo->ExStyle=GetValue(temp3);
+
+				//クラス
+				i5=GetOneParameter(temp2,i5,temp3);
+				pChildInfo->Control=GetValue(temp3);
+
+				if(pChildInfo->Control==CT_IMAGEBOX){
+					//イメージ ボックスの場合
+					i5=GetOneParameter(temp2,i5,temp3);
+					pChildInfo->ImageCtrlInfo.type=GetValue(temp3);
+					i5=GetOneParameter(temp2,i5,temp3);
+					RemoveStringQuotes(temp3);
+					pChildInfo->ImageCtrlInfo.path=(char *)HeapAlloc(hHeap,0,lstrlen(temp3)+1);
+					lstrcpy(pChildInfo->ImageCtrlInfo.path,temp3);
+				}
+
+				ProjectInfo.pWindowInfo[i4].NumberOfChildWindows++;
+			}
+
+
+			////////////
+			//メニュー
+			else if(lstrcmpi(temporary,"MENU")==0&&i3==0){
+				ProjectInfo.NumberOfMenu++;
+				ProjectInfo.pMenuInfo=(MENU_INFO *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,ProjectInfo.pMenuInfo,ProjectInfo.NumberOfMenu*sizeof(MENU_INFO));
+				i4=ProjectInfo.NumberOfMenu-1;
+
+				//ID名
+				ProjectInfo.pMenuInfo[i4].IdName=(char *)HeapAlloc(hHeap,0,lstrlen(temp2)+1);
+				lstrcpy(ProjectInfo.pMenuInfo[i4].IdName,temp2);
+				ProjectInfo.pMenuInfo[i4].pMenuInfo=GetMenuData(buffer,&i,&ProjectInfo.pMenuInfo[i4].NumberOfMenu);
+				if(!ProjectInfo.pMenuInfo[i4].pMenuInfo){
+					//"ウィンドウ定義ファイルが壊れています。\n\n%s"
+					sprintf(temporary,STRING_ERROR_BROKEN_WNDFILE,path);
+					MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+
+					HeapDefaultFree(temp2);
+					HeapDefaultFree(buffer);
+					return 0;
+				}
+			}
+
+
+			else if(lstrcmpi(temporary,"END")==0&&i3) i3=0;
+			else{
+				//"ウィンドウ定義ファイルが壊れています。\n\n%s"
+				sprintf(temporary,STRING_ERROR_BROKEN_WNDFILE,path);
+				MessageBox(hOwner,temporary,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+
+				HeapDefaultFree(temp2);
+				HeapDefaultFree(buffer);
+				return 0;
+			}
+			i--;
+		}
+	}
+
+	HeapDefaultFree(temp2);
+	HeapDefaultFree(buffer);
+	return 1;
+}
+
+struct NEW_WINDOW{
+	char name[MAX_PATH];
+	char HandleName[MAX_PATH];
+	char CallBackName[MAX_PATH];
+	BOOL type;
+};
+NEW_WINDOW NewWindow;
+BOOL CALLBACK DlgProject_NewWindow(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	char temporary[MAX_PATH],temp2[MAX_PATH];
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+			SendDlgItemMessage(hwnd,IDC_AUTOSET,BM_SETCHECK,BST_CHECKED,0);
+			SendMessage(hwnd,WM_COMMAND,IDC_AUTOSET,0);
+			SendDlgItemMessage(hwnd,IDC_MODALDLG,BM_SETCHECK,BST_CHECKED,0);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					GetDlgItemText(hwnd,IDC_WINDOWNAME,NewWindow.name,MAX_PATH);
+					GetDlgItemText(hwnd,IDC_WINDOWHANDLE,NewWindow.HandleName,MAX_PATH);
+					GetDlgItemText(hwnd,IDC_WINDOWPROC,NewWindow.CallBackName,MAX_PATH);
+					if(SendDlgItemMessage(hwnd,IDC_DEFWINDOW,BM_GETCHECK,0,0))
+						NewWindow.type=WNDTYPE_DEFAULT;
+					else if(SendDlgItemMessage(hwnd,IDC_MODALDLG,BM_GETCHECK,0,0))
+						NewWindow.type=WNDTYPE_MODALDLG;
+					else if(SendDlgItemMessage(hwnd,IDC_MODELESSDLG,BM_GETCHECK,0,0))
+						NewWindow.type=WNDTYPE_MODELESSDLG;
+					EndDialog(hwnd,1);
+					return 1;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					return 1;
+				case IDC_WINDOWNAME:
+					if(HIWORD(wParam)==EN_CHANGE) SendMessage(hwnd,WM_COMMAND,IDC_AUTOSET,0);
+					return 1;
+				case IDC_AUTOSET:
+					if(SendDlgItemMessage(hwnd,IDC_AUTOSET,BM_GETCHECK,0,0)){
+						SendDlgItemMessage(hwnd,IDC_WINDOWHANDLE,EM_SETREADONLY,1,0);
+						SendDlgItemMessage(hwnd,IDC_WINDOWPROC,EM_SETREADONLY,1,0);
+						GetDlgItemText(hwnd,IDC_WINDOWNAME,temporary,MAX_PATH);
+						if(temporary[0]){
+							sprintf(temp2,"h%s",temporary);
+							SetDlgItemText(hwnd,IDC_WINDOWHANDLE,temp2);
+							sprintf(temp2,"%sProc",temporary);
+							SetDlgItemText(hwnd,IDC_WINDOWPROC,temp2);
+						}
+						else{
+							SetDlgItemText(hwnd,IDC_WINDOWHANDLE,"");
+							SetDlgItemText(hwnd,IDC_WINDOWPROC,"");
+						}
+					}
+					else{
+						SendDlgItemMessage(hwnd,IDC_WINDOWHANDLE,EM_SETREADONLY,0,0);
+						SendDlgItemMessage(hwnd,IDC_WINDOWPROC,EM_SETREADONLY,0,0);
+					}
+					return 1;
+			}
+			break;
+	}
+	return 0;
+}
+void GetDefaultWindowFont(LOGFONT *LogFont){
+	LogFont->lfHeight=-12;
+	LogFont->lfWidth=0;
+	LogFont->lfEscapement=0;
+	LogFont->lfOrientation=0;
+	LogFont->lfWeight=FW_REGULAR;
+	LogFont->lfItalic=0;
+	LogFont->lfUnderline=0;
+	LogFont->lfStrikeOut=0;
+	LogFont->lfCharSet=SHIFTJIS_CHARSET;
+	LogFont->lfOutPrecision=OUT_STROKE_PRECIS;
+	LogFont->lfClipPrecision=CLIP_STROKE_PRECIS;
+	LogFont->lfQuality=DRAFT_QUALITY;
+	LogFont->lfPitchAndFamily=FF_SWISS;
+	lstrcpy(LogFont->lfFaceName,"ＭＳ Ｐゴシック");
+}
+void Project_Window_Insert(void){
+	extern HANDLE hHeap;
+	extern PROJECTINFO ProjectInfo;
+	int i;
+	char temporary[MAX_PATH],temp2[1024],*pTemp;
+
+	if(!DialogBox(hResInst,MAKEINTRESOURCE(IDD_PROJECT_NEWWINDOW),hOwner,DlgProject_NewWindow)) return;
+
+	//重複チェック
+	sprintf(temporary,"%s.sbp",NewWindow.name);
+	if(ProjectInfo.pobj_DBFileInfo->dupli_check(temporary)){
+		sprintf(temp2,"\"%s\" ファイルは既にプロジェクト内に存在します。",temporary);
+		MessageBox(hOwner,temp2,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+		return;
+	}
+	for(i=0;i<ProjectInfo.NumberOfWindows;i++){
+		if(lstrcmpi(NewWindow.name,ProjectInfo.pWindowInfo[i].name)==0){
+			//"\"%s\" ウィンドウは既にプロジェクト内に存在します。"
+			sprintf(temporary,STRING_DUPLICATIONERROR_WINDOW_IN_PROJECT,ProjectInfo.pWindowInfo[i].name);
+			MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+		if(lstrcmpi(NewWindow.HandleName,ProjectInfo.pWindowInfo[i].HandleName)==0){
+			//"\"%s\" ハンドルは既にプロジェクト内に存在します。"
+			sprintf(temporary,STRING_DUPLICATIONERROR_HANDLE_IN_PROJECT,ProjectInfo.pWindowInfo[i].HandleName);
+			MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+		if(lstrcmpi(NewWindow.CallBackName,ProjectInfo.pWindowInfo[i].CallBackName)==0){
+			//"\"%s\" プロシージャは既にプロジェクト内に存在します。"
+			sprintf(temporary,STRING_DUPLICATIONERROR_PROC_IN_PROJECT,ProjectInfo.pWindowInfo[i].CallBackName);
+			MessageBox(hOwner,temporary,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
+			return;
+		}
+	}
+
+	//ProjectInfo.pWindowInfo構造体に追加
+	ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo,(ProjectInfo.NumberOfWindows+1)*sizeof(WINDOW_INFO));
+
+
+	///////////////////////////////////////
+	//ProjectInfo.pWindowInfo構造体を設定
+
+	//ウィンドウ名
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.name)+1);
+	lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name,NewWindow.name);
+
+	//ハンドル名
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].HandleName=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.HandleName)+1);
+	lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].HandleName,NewWindow.HandleName);
+
+	//位置情報
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].pos.x=-1;
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].pos.y=-1;
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].size.cx=480;
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].size.cy=360;
+
+	//ウィンドウテキスト
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].caption=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.name)+1);
+	lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].caption,NewWindow.name);
+
+	//スタイル
+	switch(NewWindow.type){
+		case WNDTYPE_DEFAULT:
+			//通常ウィンドウ
+			ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX;
+			break;
+		case WNDTYPE_MODALDLG:
+		case WNDTYPE_MODELESSDLG:
+			//ダイアログ テンプレート（最大化、最小化ボタンをなくして、細枠にする）
+			ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU;
+			break;
+	}
+
+	//拡張スタイル
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].ExStyle=0;
+
+	//メニュー
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].MenuID=0;
+
+	//ID
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].id=0;
+
+	//背景色
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].bgColor=COLOR_3DFACE;
+
+	//フォント
+	GetDefaultWindowFont(&ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].LogFont);
+
+	//アイコン
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].IconResName=0;
+
+	//クラス名
+	lstrcpy(temporary,"NORMAL");
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].ClassName=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].ClassName,temporary);
+
+	//コールバック関数名
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].CallBackName=(char *)HeapAlloc(hHeap,0,lstrlen(NewWindow.CallBackName)+1);
+	lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].CallBackName,NewWindow.CallBackName);
+
+	//タイプ識別
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].type=NewWindow.type;
+
+	//子ウィンドウ情報
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].NumberOfChildWindows=0;
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].pChildInfo=(CHILDINFO *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
+
+
+	//メッセージ処理ファイル名
+	sprintf(temporary,"%s.ab",ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name);
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].filepath=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1);
+	lstrcpy(ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].filepath,temporary);
+
+
+	//////////////////////////
+	// メッセージ処理ファイル
+	//////////////////////////
+
+	//テンプレートを読み込む
+#if defined(JPN)
+	//日本語ファイル
+	sprintf(temporary,"%sSubOperation\\new_window_template.sbp",pj_editor_Dir);
+#else
+	//英語ファイル
+	sprintf(temporary,"%sSubOperation\\new_window_template_e.sbp",pj_editor_Dir);
+#endif
+	pTemp=ReadBuffer(temporary);
+
+	//#name#をプロジェクト名に置換
+	pTemp=PermutationWndPgmTemplate(pTemp,
+		ProjectInfo.name,
+		NewWindow.name,
+		NewWindow.HandleName,
+		NewWindow.CallBackName);
+
+	sprintf(temporary,"%s%s.ab",ProjectInfo.dir,ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name);
+
+	//書き込み
+	WriteBuffer(temporary,pTemp,lstrlen(pTemp));
+	Project_File_Insert(temporary);
+
+	HeapDefaultFree(pTemp);
+
+
+	//////////////////////
+	//ツリービューに追加
+
+	extern HWND hMaterialTreeView;
+	TV_INSERTSTRUCT tv;
+	tv.hInsertAfter=TVI_SORT;
+	tv.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+	tv.item.iImage=2;
+	tv.item.iSelectedImage=2;
+	tv.hParent=ProjectInfo.hWindowTreeItem;
+	tv.item.pszText=ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].name;
+
+	ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].hTreeItem=TreeView_InsertItem(hMaterialTreeView,&tv);
+
+	TreeView_SelectItem(hMaterialTreeView,ProjectInfo.pWindowInfo[ProjectInfo.NumberOfWindows].hTreeItem);
+
+
+	ProjectInfo.NumberOfWindows++;
+	ProjectInfo.ModifyOfMaterial=1;
+
+	NewRadWindow(ProjectInfo.NumberOfWindows-1);
+}
+void Project_Window_Delete(int WndInfoNum){
+	extern HANDLE hHeap;
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	extern PROJECTINFO ProjectInfo;
+	int i;
+
+	//ウィンドウが開かれている場合は閉じる
+	for(i=0;i<MAX_WNDNUM;i++){
+		if(MdiInfo[i].hwnd&&lstrcmpi(ProjectInfo.pWindowInfo[WndInfoNum].name,MdiInfo[i].path)==0){
+			SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
+			break;
+		}
+	}
+
+	//ウィンドウ情報のメモリを解放
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].name);
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].filepath);
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].HandleName);
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].caption);
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].ClassName);
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].CallBackName);
+
+	//子ウィンドウのメモリを解放
+	for(i=0;i<ProjectInfo.pWindowInfo[WndInfoNum].NumberOfChildWindows;i++){
+		HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].IdName);
+		HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[i].caption);
+	}
+	HeapDefaultFree(ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo);
+
+	//ツリービューから削除
+	extern HWND hMaterialTreeView;
+	TreeView_DeleteItem(hMaterialTreeView,ProjectInfo.pWindowInfo[WndInfoNum].hTreeItem);
+
+	//ProjectInfo.pWindowInfo構造体から削除
+	ProjectInfo.NumberOfWindows--;
+	for(i=WndInfoNum;i<ProjectInfo.NumberOfWindows;i++) ProjectInfo.pWindowInfo[i]=ProjectInfo.pWindowInfo[i+1];
+	if(ProjectInfo.NumberOfWindows==0) ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo,1);
+	else ProjectInfo.pWindowInfo=(WINDOW_INFO *)HeapReAlloc(hHeap,0,ProjectInfo.pWindowInfo,ProjectInfo.NumberOfWindows*sizeof(WINDOW_INFO));
+
+	ProjectInfo.ModifyOfMaterial=1;
+}
Index: /ProjectEditor/analysis.cpp
===================================================================
--- /ProjectEditor/analysis.cpp	(revision 3)
+++ /ProjectEditor/analysis.cpp	(revision 3)
@@ -0,0 +1,766 @@
+#include "common.h"
+
+BOOL GetVarFormatString(char *buffer,char *array,char *array2,char *NestMember,int *pRefType){
+	extern int cp;
+	int i,i2,i3;
+	char cPare_Open,cPare_Close;
+
+	array[0]=0;
+	array2[0]=0;
+	NestMember[0]=0;
+	*pRefType=0;
+	for(i=0;;i++){
+		if(buffer[i]=='\"'){
+			for(i++;;i++){
+				if(IsDBCSLeadByte(buffer[i])){
+					i++;
+					continue;
+				}
+				if(buffer[i]=='\"') break;
+			}
+		}
+		if(buffer[i]=='['||buffer[i]=='('){
+			if(buffer[i]=='['){
+				cPare_Open='[';
+				cPare_Close=']';
+			}
+			else{
+				cPare_Open='(';
+				cPare_Close=')';
+			}
+			buffer[i]=0;
+			for(i++,i2=0;;i++,i2++){
+				if(buffer[i]==cPare_Open){
+					if(cPare_Open=='[') i3=GetStringInBracket(array+i2,buffer+i);
+					else i3=GetStringInPare(array+i2,buffer+i);
+					i+=i3-1;
+					i2+=i3-1;
+					continue;
+				}
+				if(buffer[i]==cPare_Close){
+					array[i2]=0;
+					break;
+				}
+				array[i2]=buffer[i];
+			}
+			if(buffer[i+1]==cPare_Open){
+				for(i+=2,i2=0;;i++,i2++){
+					if(buffer[i]==cPare_Open){
+						if(cPare_Open=='[') i3=GetStringInBracket(array2+i2,buffer+i);
+						else i3=GetStringInPare(array2+i2,buffer+i);
+						i+=i3-1;
+						i2+=i3-1;
+						continue;
+					}
+					if(buffer[i]==cPare_Close){
+						array2[i2]=0;
+						break;
+					}
+					array2[i2]=buffer[i];
+				}
+				if(buffer[i+1]==cPare_Open){
+					return 0;
+				}
+			}
+			continue;
+		}
+		if(buffer[i]=='.'){
+			lstrcpy(NestMember,buffer+i+1);
+			*pRefType=DEF_OBJECT;
+			buffer[i]=0;
+			break;
+		}
+		if(buffer[i]=='-'&&buffer[i+1]=='>'){
+			lstrcpy(NestMember,buffer+i+2);
+			*pRefType=DEF_PTR_OBJECT;
+			buffer[i]=0;
+			break;
+		}
+		if(buffer[i]=='\0') break;
+	}
+	return 1;
+}
+
+int GetTypeFixed(char *TypeName){
+	if(lstrcmpi(TypeName,"Double")==0)			return DEF_DOUBLE;
+	else if(lstrcmpi(TypeName,"Single")==0)		return DEF_SINGLE;
+	else if(lstrcmpi(TypeName,"DWORD")==0)		return DEF_DWORD;
+	else if(lstrcmpi(TypeName,"Long")==0)		return DEF_LONG;
+	else if(lstrcmpi(TypeName,"WORD")==0)		return DEF_WORD;
+	else if(lstrcmpi(TypeName,"Integer")==0)	return DEF_INTEGER;
+	else if(lstrcmpi(TypeName,"Byte")==0)		return DEF_BYTE;
+	else if(lstrcmpi(TypeName,"String")==0)		return DEF_STRING;
+	else if(lstrcmpi(TypeName,"Any")==0)		return DEF_ANY;
+	else if(lstrcmpi(TypeName,"VoidPtr")==0)	return DEF_PTR_VOID;
+	else if(TypeName[0]=='*'){
+		if(TypeName[1]=='*') return DEF_LONG;
+		else return DEF_PTR_OBJECT;
+	}
+	return DEF_OBJECT;
+}
+
+
+
+//////////////////////////////////////////////////////////////
+// ここから、クラス、構造体の即席構文解析を行うための関数郡
+//////////////////////////////////////////////////////////////
+
+BOOL CheckReferType(char *ClassName,BOOL bArray,char *VarArray,int VarRefType){
+	int type;
+
+	type=GetTypeFixed(ClassName);
+	if(!(type==DEF_OBJECT||type==DEF_PTR_OBJECT)) return 0;
+
+
+	//文字"*"を取り除く
+	if(type==DEF_PTR_OBJECT) SlideString(ClassName+1,-1);
+
+	if(type==DEF_OBJECT){
+		//実体オブジェクトを参照するとき
+
+		//配列のチェック
+		if(bArray){
+			if(VarArray[0]=='\0') return 0;
+		}
+		if(VarArray[0]){
+			if(!bArray) return 0;
+		}
+
+		if(type!=VarRefType) return 0;
+	}
+	else if(type==DEF_PTR_OBJECT){
+		//ポインタが示すオブジェクトを参照するとき
+
+		if(bArray){
+			if(VarArray[0]=='\0'||VarRefType==DEF_OBJECT) return 0;
+		}
+		else{
+			if(VarRefType==DEF_OBJECT){
+				//"."参照
+				if(VarArray[0]=='\0') return 0;
+			}
+			else{
+				//"->"参照
+				if(VarArray[0]) return 0;
+			}
+		}
+	}
+
+	return 1;
+}
+
+BOOL GetOriginalClassNameFromBuf(char *pBuf,char *ClassName){
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	for(i=0;;i++){
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+		if(memicmp(pBuf+i,"TypeDef",7)==0&&(pBuf[i+7]==' '||pBuf[i+7]=='\t')){
+			i+=8;
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(pBuf[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=pBuf[i];
+			}
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+			if(pBuf[i]=='='){
+				if(lstrcmp(temporary,ClassName)==0){
+					//TypeDef宣言の型名が一致したとき
+					i++;
+					while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+					for(i2=0;;i++,i2++){
+						if(!(IsVariableChar(pBuf[i])||pBuf[i]=='*')){
+							temporary[i2]=0;
+							break;
+						}
+						temporary[i2]=pBuf[i];
+					}
+
+					lstrcpy(ClassName,temporary);
+					return 1;
+				}
+			}
+		}
+
+		//次の行をサーチ
+		for(;;i++){
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				if(i2==2) i++;
+				break;
+			}
+		}
+
+		if(pBuf[i]=='\0') break;
+	}
+	return 0;
+}
+void GetOriginalClassName(char *ClassName){
+	extern char *pHeaderBuf;
+	extern char *pUserSource;
+	BOOL bRet;
+	int i;
+
+	do{
+		for(i=0;;i++){
+			if(ClassName[i]!='*') break;
+		}
+
+		//ユーザーソースコードからTypeDef宣言をサーチ
+		bRet=GetOriginalClassNameFromBuf(pUserSource,ClassName+i);
+		if(!bRet){
+			//basic.sbpからTypeDef宣言をサーチ
+			bRet=GetOriginalClassNameFromBuf(pHeaderBuf,ClassName+i);
+		}
+	}while(bRet);
+}
+
+int GetClassPos(char *pBuf,char *ClassName,DWORD *pdwClassType){
+	////////////////////////////////////////////////////////
+	// pBuf内からClassNameと一致するクラスの定義位置を取得
+	////////////////////////////////////////////////////////
+
+	int i,i2;
+	char temporary[VN_SIZE];
+
+	for(i=0;;i++){
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+		if(memicmp(pBuf+i,"Class",5)==0&&(pBuf[i+5]==' '||pBuf[i+5]=='\t')||
+			memicmp(pBuf+i,"Interface",9)==0&&(pBuf[i+9]==' '||pBuf[i+9]=='\t')||
+			memicmp(pBuf+i,"Type",4)==0&&(pBuf[i+4]==' '||pBuf[i+4]=='\t')){
+
+			if(pBuf[i]=='c'||pBuf[i]=='C'){
+				//Class
+				i+=6;
+				*pdwClassType=ESC_CLASS;
+			}
+			else if(pBuf[i]=='i'||pBuf[i]=='I'){
+				//Interface
+				i+=10;
+				*pdwClassType=ESC_INTERFACE;
+			}
+			else{
+				//Type
+				i+=5;
+				*pdwClassType=ESC_TYPE;
+			}
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(pBuf[i])){
+					temporary[i2]=0;
+					break;
+				}
+				temporary[i2]=pBuf[i];
+			}
+			if(lstrcmp(temporary,ClassName)==0){
+				//クラス名が一致したとき
+
+				for(;;i++){
+					if(pBuf[i]=='\0') break;
+					i2=IsCommandDelimitation(pBuf,i);
+					if(i2){
+						i+=i2;
+						break;
+					}
+				}
+				JumpBlank(pBuf,&i);
+				break;
+			}
+		}
+
+		//次の行をサーチ
+		for(;;i++){
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				if(i2==2) i++;
+				break;
+			}
+		}
+
+		if(pBuf[i]=='\0') break;
+	}
+
+	return i;
+}
+BOOL GetClassNameFromClassMember(char *pBuf,int iPos,char *VarName,char *ClassName,BOOL *pbArray){
+	//////////////////////////////////////////////////////
+	// クラス内のメンバ変数のタイプ型であるクラス名の取得
+	//////////////////////////////////////////////////////
+
+	int i,i2;
+	char temporary[8192];
+	DWORD dwProc;
+
+	i=iPos;
+
+	while(1){
+		temporary[0]=0;
+		if(pBuf[i]=='\0') break;
+		if(memicmp(pBuf+i,"End",3)==0){
+			/*	End Class
+				End Interface
+				End Type
+				の検出 */
+			i2=i+3;
+			while(pBuf[i2]==' '||pBuf[i2]=='\t') i2++;
+
+			if(memicmp(pBuf+i2,"Class",5)==0&&(!IsVariableChar(pBuf[i2+5]))||
+				memicmp(pBuf+i2,"Interface",9)==0&&(!IsVariableChar(pBuf[i2+9]))||
+				memicmp(pBuf+i2,"Type",4)==0&&(!IsVariableChar(pBuf[i2+4]))) break;
+		}
+
+		if(memicmp(pBuf+i,"Abstract",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Virtual",7)==0&&(pBuf[i+7]==' '||pBuf[i+7]=='\t')||
+			memicmp(pBuf+i,"Override",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')||
+			memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')){
+			//メンバ関数のとき
+
+			if(pBuf[i]=='a'||pBuf[i]=='A'){
+				i+=9;
+				dwProc=ESC_ABSTRACT;
+			}
+			else{
+
+				if(pBuf[i]=='v'||pBuf[i]=='V'){
+					i+=8;
+					while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				}
+				else if(pBuf[i]=='o'||pBuf[i]=='O'){
+					i+=9;
+					while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+				}
+
+				if(pBuf[i]=='f'||pBuf[i]=='F'){
+					i+=9;
+					dwProc=ESC_FUNCTION;
+				}
+				else if(pBuf[i]=='s'||pBuf[i]=='S'){
+					i+=4;
+					dwProc=ESC_SUB;
+				}
+			}
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		}
+		else{
+			//メンバ変数のとき
+			dwProc=0;
+		}
+
+		//変数名または関数名を取得
+		for(i2=0;;i++,i2++){
+			if(!IsVariableChar(pBuf[i])){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=pBuf[i];
+		}
+
+		if(dwProc==0){
+			if(lstrcmp(temporary,VarName)==0) break;
+		}
+
+		//次の行をサーチ
+		for(;;i++){
+			if(pBuf[i]=='\0') break;
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				i+=i2;
+				break;
+			}
+		}
+		JumpBlank(pBuf,&i);
+
+		if(dwProc){
+			//Abstract定義以外はEnd Sub、End Functionをサーチする
+			if(dwProc==ESC_ABSTRACT) continue;
+
+			while(1){
+				if(pBuf[i]=='\0') break;
+
+				if(memicmp(pBuf+i,"End",3)==0){
+					/*	End Sub
+						End Function
+						の検出 */
+					i+=3;
+					while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+					if(memicmp(pBuf+i,"Sub",3)==0&&(!IsVariableChar(pBuf[i+3]))||
+						memicmp(pBuf+i,"Function",8)==0&&(!IsVariableChar(pBuf[i+8]))) break;
+				}
+
+				//次の行をサーチ
+				for(;;i++){
+					if(pBuf[i]=='\0') break;
+					i2=IsCommandDelimitation(pBuf,i);
+					if(i2){
+						i+=i2;
+						break;
+					}
+				}
+				JumpBlank(pBuf,&i);
+			}
+
+			//次の行をサーチ
+			for(;;i++){
+				if(pBuf[i]=='\0') break;
+				i2=IsCommandDelimitation(pBuf,i);
+				if(i2){
+					i+=i2;
+					break;
+				}
+			}
+			JumpBlank(pBuf,&i);
+		}
+	}
+
+	*pbArray=0;
+	if(temporary[0]){
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		if(pBuf[i]=='['){
+			*pbArray=1;
+			for(i2=1,i++;;i++){
+				if(pBuf[i]=='\0') break;
+				if(pBuf[i]=='[') i2++;
+				if(pBuf[i]==']'){
+					i2--;
+					if(i2==0){
+						i++;
+						break;
+					}
+				}
+			}
+		}
+		if(pBuf[i]=='('){
+			*pbArray=1;
+			for(i2=1,i++;;i++){
+				if(pBuf[i]=='\0') break;
+				if(pBuf[i]=='(') i2++;
+				if(pBuf[i]==')'){
+					i2--;
+					if(i2==0){
+						i++;
+						break;
+					}
+				}
+			}
+		}
+
+		//"As ～" を解析
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		if(memicmp(pBuf+i,"As",2)==0&&(pBuf[i+2]==' '||pBuf[i+2]=='\t')){
+			i+=3;
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+			for(i2=0;;i++,i2++){
+				if(!(IsVariableChar(pBuf[i])||pBuf[i]=='*')){
+					ClassName[i2]=0;
+					break;
+				}
+				ClassName[i2]=pBuf[i];
+			}
+		}
+		else ClassName[0]=0;
+
+		return 1;
+	}
+	return 0;
+}
+
+void GetCodeAreaType(char *pBuf,int iPos,int *piProcPos,char *NowClass){
+	///////////////////////////////////////////////
+	// コード領域（グローバル/ローカル）を判定する
+	//    ローカル領域のときはpiProcPosに関数の位置を格納する
+	//    クラス定義内のときはNowClassにクラス名を格納する
+	///////////////////////////////////////////////
+	int i,i2;
+
+	*piProcPos=-1;
+	for(i=0;;i++){
+		if(i>=iPos) break;
+
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+		if(memicmp(pBuf+i,"Class",5)==0&&(pBuf[i+5]==' '||pBuf[i+5]=='\t')||
+			memicmp(pBuf+i,"Interface",9)==0&&(pBuf[i+9]==' '||pBuf[i+9]=='\t')||
+			memicmp(pBuf+i,"Type",4)==0&&(pBuf[i+4]==' '||pBuf[i+4]=='\t')){
+			//Class、Interface、Type
+			if(pBuf[i]=='c'||pBuf[i]=='C') i+=6;
+			else if(pBuf[i]=='i'||pBuf[i]=='I') i+=10;
+			else i+=5;
+
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+			for(i2=0;;i++,i2++){
+				if(!IsVariableChar(pBuf[i])){
+					NowClass[i2]=0;
+					break;
+				}
+				NowClass[i2]=pBuf[i];
+			}
+		}
+		else if(memicmp(pBuf+i,"Sub",3)==0&&(pBuf[i+3]==' '||pBuf[i+3]=='\t')||
+			memicmp(pBuf+i,"Function",8)==0&&(pBuf[i+8]==' '||pBuf[i+8]=='\t')){
+			//Sub、Function
+
+			*piProcPos=i;
+		}
+		else if(memicmp(pBuf+i,"End",3)==0){
+			i+=3;
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+			if(memicmp(pBuf+i,"Sub",3)==0&&(!IsVariableChar(pBuf[i+3]))||
+				memicmp(pBuf+i,"Function",8)==0&&(!IsVariableChar(pBuf[i+8]))){
+				//End Sub、End Function
+				*piProcPos=-1;
+			}
+			else if(memicmp(pBuf+i,"Class",5)==0&&(!IsVariableChar(pBuf[i+5]))||
+				memicmp(pBuf+i,"Interface",9)==0&&(!IsVariableChar(pBuf[i+9]))||
+				memicmp(pBuf+i,"Type",4)==0&&(!IsVariableChar(pBuf[i+4]))){
+				//End Class、End Interface、End Type
+				NowClass[0]=0;
+			}
+		}
+
+		//次の行をサーチ
+		for(;;i++){
+			i2=IsCommandDelimitation(pBuf,i);
+			if(i2){
+				if(i2==2) i++;
+				break;
+			}
+		}
+
+		if(pBuf[i]=='\0') break;
+	}
+}
+BOOL GetClassNameFromDim(char *pBuf,int *piPos,char *VarName,char *ClassName,BOOL *pbArray){
+	int i,i2;
+	char temporary[8192];
+
+	i=*piPos;
+
+	while(1){
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+
+		if((memicmp(pBuf+i,"ByRef",5)==0||memicmp(pBuf+i,"ByVal",5)==0)&&
+			(pBuf[i+5]==' '||pBuf[i+5]=='\t')){
+			//ByRef/ByVal表記を飛び越す
+			i+=6;
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		}
+
+		for(i2=0;;i++,i2++){
+			if(!IsVariableChar(pBuf[i])){
+				temporary[i2]=0;
+				break;
+			}
+			temporary[i2]=pBuf[i];
+		}
+
+		if(lstrcmp(temporary,VarName)==0) break;
+
+		for(;;i++){
+			if(IsCommandDelimitation(pBuf,i)) break;
+			if(pBuf[i]==','){
+				i++;
+				break;
+			}
+		}
+
+		if(IsCommandDelimitation(pBuf,i)){
+			temporary[0]=0;
+			break;
+		}
+	}
+
+	*pbArray=0;
+	if(temporary[0]){
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		if(pBuf[i]=='['){
+			*pbArray=1;
+			for(i2=1,i++;;i++){
+				if(pBuf[i]=='\0') break;
+				if(pBuf[i]=='[') i2++;
+				if(pBuf[i]==']'){
+					i2--;
+					if(i2==0){
+						i++;
+						break;
+					}
+				}
+			}
+		}
+
+		//"As ～" を解析
+		while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+		if(memicmp(pBuf+i,"As",2)==0&&(pBuf[i+2]==' '||pBuf[i+2]=='\t')){
+			i+=3;
+			while(pBuf[i]==' '||pBuf[i]=='\t') i++;
+			for(i2=0;;i++,i2++){
+				if(!(IsVariableChar(pBuf[i])||pBuf[i]=='*')){
+					ClassName[i2]=0;
+					break;
+				}
+				ClassName[i2]=pBuf[i];
+			}
+		}
+		else ClassName[0]=0;
+
+		*piPos=i;
+		return 1;
+	}
+
+	*piPos=i;
+	return 0;
+}
+BOOL GetVariableClassName(char *pEditBuf,int iPos,char *VarName,char *ClassName,BOOL *pbArray){
+	//////////////////////////////////////////
+	// 変数宣言コードをもとに、クラス名を取得
+	//////////////////////////////////////////
+
+	extern char *pHeaderBuf;
+	extern char *pUserSource;
+	int i,i2;
+	char NowClass[VN_SIZE];
+
+
+	// キャレット位置のコード領域を判定（クラス/ローカル/グローバル）
+	int iProcPos;
+	GetCodeAreaType(pEditBuf,iPos,&iProcPos,NowClass);
+
+
+	//////////////////////////////////////////
+	// 変数宣言コードをもとに、クラス名を取得
+	//////////////////////////////////////////
+
+	if(iProcPos!=-1){
+		//ローカル領域
+		i=iProcPos;
+
+		//関数パラメータをサーチ
+		for(;;i++){
+			if(pEditBuf[i]=='('){
+				i++;
+				if(GetClassNameFromDim(pEditBuf,&i,VarName,ClassName,pbArray)) return 1;
+			}
+
+			i2=IsCommandDelimitation(pEditBuf,i);
+			if(i2){
+				if(pEditBuf[i]=='\0') break;
+				i+=i2;
+				break;
+			}
+		}
+
+		//関数内ソースコードをサーチ
+		for(;;i++){
+			while(pEditBuf[i]==' '||pEditBuf[i]=='\t') i++;
+
+			if(memicmp(pEditBuf+i,"End",3)==0){
+				i+=3;
+				while(pEditBuf[i]==' '||pEditBuf[i]=='\t') i++;
+
+				if(memicmp(pEditBuf+i,"Sub",3)==0&&(!IsVariableChar(pEditBuf[i+3]))||
+					memicmp(pEditBuf+i,"Function",8)==0&&(!IsVariableChar(pEditBuf[i+3]))){
+					break;
+				}
+			}
+			else if(memicmp(pEditBuf+i,"Dim",3)==0&&(pEditBuf[i+3]==' '||pEditBuf[i+3]=='\t')){
+				i+=3;
+
+				if(GetClassNameFromDim(pEditBuf,&i,VarName,ClassName,pbArray)) return 1;
+			}
+			for(;;i++){
+				i2=IsCommandDelimitation(pEditBuf,i);
+				if(i2){
+					if(i2==2) i++;
+					break;
+				}
+			}
+
+			if(pEditBuf[i]=='\0') break;
+		}
+	}
+
+	if(NowClass[0]&&iProcPos!=-1){
+		//クラスメンバ関数領域
+		DWORD dwClassType;
+		char *pBuf;
+		i=GetClassPos(pUserSource,NowClass,&dwClassType);
+		if(pUserSource[i]=='\0'){
+			i=GetClassPos(pHeaderBuf,NowClass,&dwClassType);
+			if(pHeaderBuf[i]=='\0') pBuf=0;
+			else pBuf=pHeaderBuf;
+		}
+		else pBuf=pUserSource;
+
+		if(pBuf){
+			i=GetClassNameFromClassMember(pBuf,i,VarName,ClassName,pbArray);
+			if(i) return 1;
+		}
+	}
+
+	//グローバル領域
+	for(i=0;;i++){
+		while(pUserSource[i]==' '||pUserSource[i]=='\t') i++;
+
+		if(memicmp(pUserSource+i,"Dim",3)==0&&(pUserSource[i+3]==' '||pUserSource[i+3]=='\t')){
+			i+=3;
+
+			if(GetClassNameFromDim(pUserSource,&i,VarName,ClassName,pbArray)) return 1;
+		}
+
+		else if(memicmp(pUserSource+i,"Sub",3)==0&&(pUserSource[i+3]==' '||pUserSource[i+3]=='\t')||
+			memicmp(pUserSource+i,"Function",8)==0&&(pUserSource[i+8]==' '||pUserSource[i+8]=='\t')){
+			//Sub ～ End Sub、Function ～ End Function間を飛び越す
+			while(1){
+				//次の行をサーチ
+				for(;;i++){
+					if(pUserSource[i]=='\0') break;
+					i2=IsCommandDelimitation(pUserSource,i);
+					if(i2){
+						i+=i2;
+						break;
+					}
+				}
+				JumpBlank(pUserSource,&i);
+
+				if(pUserSource[i]=='\0') break;
+
+				if(memicmp(pUserSource+i,"End",3)==0){
+					/*	End Sub
+						End Function
+						の検出 */
+					i+=3;
+					while(pUserSource[i]==' '||pUserSource[i]=='\t') i++;
+
+					if(memicmp(pUserSource+i,"Sub",3)==0&&(!IsVariableChar(pUserSource[i+3]))||
+						memicmp(pUserSource+i,"Function",8)==0&&(!IsVariableChar(pUserSource[i+8]))) break;
+				}
+			}
+		}
+
+		//次の行をサーチ
+		for(;;i++){
+			i2=IsCommandDelimitation(pUserSource,i);
+			if(i2){
+				if(i2==2) i++;
+				break;
+			}
+		}
+
+		if(pUserSource[i]=='\0') break;
+	}
+
+	return 0;
+}
Index: /ProjectEditor/common_msg_eng.h
===================================================================
--- /ProjectEditor/common_msg_eng.h	(revision 3)
+++ /ProjectEditor/common_msg_eng.h	(revision 3)
@@ -0,0 +1,88 @@
+///////////////////////////////////////////////////////////////
+// アプリケーションで使用する汎用テキストを定義しています
+//
+// 英語
+///////////////////////////////////////////////////////////////
+
+
+////////
+// 汎用
+////////
+#define STRING_NONE				"None"
+#define STRING_DEFAULT			"Default"
+#define STRING_ERROR			"Error"
+#define STRING_PROJECT			"Project"
+#define STRING_RESOURCE			"Resource"
+#define STRING_SIZE				"Size"
+#define STRING_OPTION			"Options"
+#define STRING_PROJECTOPTION	"Project Options"
+
+
+////////
+// 単位
+////////
+#define STRING_UNIT_COLORS	"colors"
+#define STRING_MORNING		"A.M."
+#define STRING_AFTERNOON	"P.M."
+
+
+//////////////////
+// ファイルタイプ
+//////////////////
+#define STRING_FILETYPE_BASICPROGRAM	"Basic Program"
+#define STRING_FILETYPE_SUBPROGRAM		"Sub Program"
+#define STRING_FILETYPE_TEXT			"Text Document"
+#define STRING_FILETYPE_UNKNOWN			"Unknown"
+
+#define STRING_NEWFILE_BASICPROGRAM		"Basic source file (*.abp / *.bas)"
+#define STRING_NEWFILE_TEXT				"Text file (*.txt)"
+#define STRING_NEWFILE_ICON				"Icon file (*.ico)"
+#define STRING_NEWFILE_PROJECT			"Project (*.pj)"
+
+
+////////////////////////////////////////////////
+// ファイルオープンダイアログボックスのタイトル
+////////////////////////////////////////////////
+#define STRING_FILEOPENTITLE_DEFAULT			"Open the file"
+#define STRING_FILEOPENTITLE_INSERTEDPROJECT	"Open the file inserted in the project"
+#define STRING_FILEOPENTITLE_PROJECT			"Open the project file"
+#define STRING_FILEOPENTITLE_CURSOR				"Open the cursor file"
+#define STRING_FILEOPENTITLE_ICON				"Open the icon file"
+#define STRING_FILEOPENTITLE_BITMAP				"Open the bitmap file"
+
+#define STRING_FILESAVETITLE_DEFAULT			"Save As"
+
+#define STRING_DIRECTORY_SELECT					"Select the Directory."
+
+
+//////////////////////////
+// 保存チェックメッセージ
+//////////////////////////
+#define STRING_MODIFYCHECK_FILE		"\"%s\" file was modified. Save it?"
+
+
+///////////////////
+// 検索メッセージ
+///////////////////
+#define STRING_SEARCH_AGAIN		"Search again from head of the file?"
+#define STRING_SEARCH_NOTFOUND	"\"%s\" was not found."
+
+
+////////////////////////
+// 汎用エラーメッセージ
+////////////////////////
+#define STRING_ERROR_MUST_IDNAME		"You must enter the id name."
+#define STRING_ERROR_MUST_CAPTION		"You must enter the caption."
+#define STRING_ERROR_CANT_FILEOPEN		"I cannot read the file \"%s\"."
+#define STRING_ERROR_CANT_FILESAVE		"I cannot write to file \"%s\"."
+#define STRING_FILE_OVERWRIDE			"\"%s\" file already exists. Overwrite it?"
+#define STRING_ERROR_MAXLENGTH			"The length of text is max. You cannot input more text."
+#define STRING_ERROR_NOBASICCOMPILER	"BasicCompiler was not found."
+#define STRING_ERROR_PROJECTTOPCHAR		"The head character of a project name must be the alphabet(A-Z,a-Z) or the underbar(_)."
+#define STRING_ERROR_PROJECTNAME		 "Illegal character found from the project name"
+
+
+/////////////////////
+// その他メッセージ
+/////////////////////
+#define STRING_TOOLBAR_RESET		"Reset the state of the toolbar.\nReally?"
Index: /ProjectEditor/common_msg_jpn.h
===================================================================
--- /ProjectEditor/common_msg_jpn.h	(revision 3)
+++ /ProjectEditor/common_msg_jpn.h	(revision 3)
@@ -0,0 +1,88 @@
+///////////////////////////////////////////////////////////////
+// アプリケーションで使用する汎用テキストを定義しています
+//
+// 日本語
+///////////////////////////////////////////////////////////////
+
+
+////////
+// 汎用
+////////
+#define STRING_NONE				"なし"
+#define STRING_DEFAULT			"デフォルト"
+#define STRING_ERROR			"エラー"
+#define STRING_PROJECT			"プロジェクト"
+#define STRING_RESOURCE			"リソース"
+#define STRING_SIZE				"サイズ"
+#define STRING_OPTION			"オプション"
+#define STRING_PROJECTOPTION	"プロジェクト オプション"
+
+
+////////
+// 単位
+////////
+#define STRING_UNIT_COLORS	"色"	
+#define STRING_MORNING		"午前"
+#define STRING_AFTERNOON	"午後"
+
+
+//////////////////
+// ファイルタイプ
+//////////////////
+#define STRING_FILETYPE_BASICPROGRAM	"Basic プログラム"
+#define STRING_FILETYPE_SUBPROGRAM		"サブ プログラム"
+#define STRING_FILETYPE_TEXT			"テキスト ドキュメント"
+#define STRING_FILETYPE_UNKNOWN			"不明"
+
+#define STRING_NEWFILE_BASICPROGRAM		"Basicプログラム (*.abp *.bas)"
+#define STRING_NEWFILE_TEXT				"標準テキスト（*.txt)"
+#define STRING_NEWFILE_ICON				"アイコン（*.ico)"
+#define STRING_NEWFILE_PROJECT			"プロジェクト（*.pj)"
+
+
+////////////////////////////////////////////////
+// ファイルオープンダイアログボックスのタイトル
+////////////////////////////////////////////////
+#define STRING_FILEOPENTITLE_DEFAULT			"ファイルを指定してください"
+#define STRING_FILEOPENTITLE_INSERTEDPROJECT	"プロジェクトへ挿入するファイルを指定してください"
+#define STRING_FILEOPENTITLE_PROJECT			"プロジェクト ファイルを指定してください"
+#define STRING_FILEOPENTITLE_CURSOR				"カーソル ファイルを指定してください"
+#define STRING_FILEOPENTITLE_ICON				"アイコン ファイルを指定してください"
+#define STRING_FILEOPENTITLE_BITMAP				"ビットマップ ファイルを指定してください"
+
+#define STRING_FILESAVETITLE_DEFAULT			"保存先のファイルを指定してください"
+
+#define STRING_DIRECTORY_SELECT					"ディレクトリを選択して下さい"
+
+
+//////////////////////////
+// 保存チェックメッセージ
+//////////////////////////
+#define STRING_MODIFYCHECK_FILE		"\"%s\" ファイルは変更されています。保存しますか？"
+
+
+///////////////////
+// 検索メッセージ
+///////////////////
+#define STRING_SEARCH_AGAIN		"ファイルの最初から検索しますか？"
+#define STRING_SEARCH_NOTFOUND	"文字列 \"%s\" が見つかりません"
+
+
+////////////////////////
+// 汎用エラーメッセージ
+////////////////////////
+#define STRING_ERROR_MUST_IDNAME		"ID名を入力して下さい。"
+#define STRING_ERROR_MUST_CAPTION		"キャプションを入力して下さい。"
+#define STRING_ERROR_CANT_FILEOPEN		"\"%s\" ファイルの読み込みに失敗しました。"
+#define STRING_ERROR_CANT_FILESAVE		"\"%s\" ファイルへの書き込みに失敗しました。"
+#define STRING_FILE_OVERWRIDE			"\"%s\" ファイルは既に存在しています。上書きしますか？"
+#define STRING_ERROR_MAXLENGTH			"これ以上、テキストを入力することができません"
+#define STRING_ERROR_NOBASICCOMPILER	"BasicCompiler が見つかりません"
+#define STRING_ERROR_PROJECTTOPCHAR		"プロジェクト名の先頭文字はアルファベット（A～Z、a～z）またはアンダーバー（_）でなければなりません。"
+#define STRING_ERROR_PROJECTNAME		"プロジェクト名に不正な文字コードが含まれています。"
+
+
+/////////////////////
+// その他メッセージ
+/////////////////////
+#define STRING_TOOLBAR_RESET		"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか？"
Index: /ProjectEditor/manifest.xml
===================================================================
--- /ProjectEditor/manifest.xml	(revision 3)
+++ /ProjectEditor/manifest.xml	(revision 3)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+	<description>Description</description>
+	<dependency>
+		<dependentAssembly>
+			<assemblyIdentity
+				type="win32"
+				name="Microsoft.Windows.Common-Controls"
+				version="6.0.0.0"
+				processorArchitecture="x86"
+				publicKeyToken="6595b64144ccf1df"
+				language="*" />
+		</dependentAssembly>
+	</dependency>
+</assembly>
Index: /ProjectEditor/menu.cpp
===================================================================
--- /ProjectEditor/menu.cpp	(revision 3)
+++ /ProjectEditor/menu.cpp	(revision 3)
@@ -0,0 +1,577 @@
+#include "common.h"
+
+HFONT hMenuFont;
+
+
+
+CMenuItemData::CMenuItemData(int item_index,int itemID,char *str,CMenuEx *pobj_ThisMenu,CSubMenuEx *pobj_SubMenu){
+	this->item_index=item_index;
+	this->itemID=itemID;
+	if(str){
+		this->str=(char *)HeapAlloc(hHeap,0,lstrlen(str)+1);
+		lstrcpy(this->str,str);
+	}
+	else this->str=0;
+	this->pobj_ThisMenu=pobj_ThisMenu;
+	this->pobj_SubMenu=pobj_SubMenu;
+
+
+	hIcon=0;
+	hGrayIcon=0;
+}
+CMenuItemData::~CMenuItemData(){
+	//メニュー文字列
+	if(str)
+		HeapDefaultFree(str);
+
+	//サブメニュー オブジェクトを破棄
+	if(pobj_SubMenu)
+		delete pobj_SubMenu;
+
+	//アイコン
+	if(hIcon) DestroyIcon(hIcon);
+
+	//淡色アイコン
+	if(hGrayIcon) DestroyIcon(hGrayIcon);
+}
+
+
+
+CMenuEx *pobj_MainMenu;
+
+CMenuEx::CMenuEx(HMENU hmenu){
+	hMenu=hmenu;
+
+	ppobj_MenuItemData=(CMenuItemData **)HeapAlloc(hHeap,0,1);
+	iMenuItemNum=0;
+}
+CMenuEx::~CMenuEx(){
+	int i;
+
+	//itemDataを解放
+	for(i=0;i<iMenuItemNum;i++){
+		delete ppobj_MenuItemData[i];
+	}
+	HeapDefaultFree(ppobj_MenuItemData);
+
+	DestroyMenu(hMenu);
+}
+
+void CMenuEx::EnableItem(UINT uIDEnableItem,UINT uEnable){
+	//メニューアイテムの有効化/無効化
+	EnableMenuItem(hMenu,uIDEnableItem,uEnable);
+}
+void CMenuEx::CheckMenu(UINT idItem,BOOL bChecked){
+	//メニューアイテムのチェックマークON/OFF
+	MENUITEMINFO MenuItemInfo;
+	MenuItemInfo.cbSize=sizeof(MENUITEMINFO);
+	MenuItemInfo.fMask=MIIM_STATE;
+	if(bChecked) MenuItemInfo.fState=MFS_CHECKED;
+	else MenuItemInfo.fState=MFS_UNCHECKED;
+
+	SetMenuItemInfo(hMenu,idItem,0,&MenuItemInfo);
+}
+BOOL CMenuEx::IsCheck(UINT idItem){
+	MENUITEMINFO MenuItemInfo;
+	MenuItemInfo.cbSize=sizeof(MENUITEMINFO);
+	MenuItemInfo.fMask=MIIM_STATE;
+	GetMenuItemInfo(hMenu,idItem,0,&MenuItemInfo);
+	if(MenuItemInfo.fState&MFS_CHECKED) return 1;
+	return 0;
+}
+void CMenuEx::RenameMenuItem(int item_index,char *str){
+	ppobj_MenuItemData[item_index]->str=(char *)HeapReAlloc(hHeap,0,ppobj_MenuItemData[item_index]->str,lstrlen(str)+1);
+	lstrcpy(ppobj_MenuItemData[item_index]->str,str);
+}
+void CMenuEx::RenameMenuItemByID(int itemID,char *str){
+	int i;
+	for(i=0;i<iMenuItemNum;i++){
+		if(ppobj_MenuItemData[i]->itemID==itemID){
+			RenameMenuItem(i,str);
+			return;
+		}
+	}
+}
+void CMenuEx::RemoveItem(int item_index){
+	//メニューアイテムの消去
+	//※ポップアップメニューの消去には対応していない
+
+	::RemoveMenu(hMenu,item_index,MF_BYPOSITION);
+
+	//メニューアイテム拡張データオブジェクトを破棄
+	delete ppobj_MenuItemData[item_index];
+
+
+	iMenuItemNum--;
+
+	int i;
+	for(i=item_index;i<iMenuItemNum;i++){
+		ppobj_MenuItemData[i]=ppobj_MenuItemData[i+1];
+	}
+}
+void CMenuEx::InsertItem(int item_index,int itemID,char *str){
+	//メニューアイテムの挿入
+
+	CMenuItemData *pobj_MenuItemData;
+	pobj_MenuItemData=AddMenuExItemData(item_index,itemID,str,this,0);
+
+	MENUITEMINFO mii;
+	memset(&mii,0,sizeof(MENUITEMINFO));
+	mii.cbSize=sizeof(MENUITEMINFO);
+	mii.fMask=MIIM_TYPE|MIIM_ID|MIIM_DATA;
+	mii.fType=MFT_OWNERDRAW;
+	mii.wID=itemID;
+	mii.dwTypeData=str;
+	mii.dwItemData=(ULONG_PTR)pobj_MenuItemData;
+	InsertMenuItem(hMenu,item_index,1,&mii);
+}
+
+BOOL CMenuEx::SetIcon(int itemID,HICON hIcon){
+	//アイコンをセット
+	int i;
+	for(i=0;i<iMenuItemNum;i++){
+		if(ppobj_MenuItemData[i]->itemID==itemID){
+			ppobj_MenuItemData[i]->hIcon=hIcon;
+
+
+			/////////////////////////
+			// 淡色アイコンを作成
+			/////////////////////////
+
+			ppobj_MenuItemData[i]->hGrayIcon=CreateGrayIcon(hIcon);
+			return 1;
+		}
+		if(ppobj_MenuItemData[i]->pobj_SubMenu){
+			BOOL bResult;
+			bResult=ppobj_MenuItemData[i]->pobj_SubMenu->SetIcon(itemID,hIcon);
+			if(bResult) return 1;
+		}
+	}
+	return 0;
+}
+
+CMenuItemData *CMenuEx::AddMenuExItemData(int item_index,int itemID,char *str,CMenuEx *pobj_ThisMenu,CSubMenuEx *pobj_SubMenu){
+	CMenuItemData *pobj_MenuItemData;
+	pobj_MenuItemData=new CMenuItemData(item_index,itemID,str,pobj_ThisMenu,pobj_SubMenu);
+
+
+	ppobj_MenuItemData=(CMenuItemData **)HeapReAlloc(hHeap,0,ppobj_MenuItemData,(iMenuItemNum+1)*sizeof(CMenuItemData *));
+
+	int i;
+	for(i=iMenuItemNum;i>item_index;i--){
+		ppobj_MenuItemData[i]=ppobj_MenuItemData[i-1];
+	}
+
+	ppobj_MenuItemData[item_index]=pobj_MenuItemData;
+
+	iMenuItemNum++;
+
+	return pobj_MenuItemData;
+}
+void CMenuEx::InitOwnerDraw(BOOL bParent){
+	char temporary[MAX_PATH];
+	MENUITEMINFO mii;
+	mii.cbSize=sizeof(MENUITEMINFO);
+	mii.fMask=MIIM_TYPE|MIIM_ID|MIIM_SUBMENU|MIIM_DATA;
+
+	int nCount;
+	nCount=GetMenuItemCount(hMenu);
+
+	int i;
+	for(i=0;i<nCount;i++){
+		mii.dwTypeData=temporary;
+		mii.cch=MAX_PATH;
+		GetMenuItemInfo(hMenu,i,1,&mii);
+
+		char *temp2=0;
+		if(mii.fType==MFT_STRING) temp2=temporary;
+
+		int fType_Separator;
+		if(mii.fType==MFT_SEPARATOR) fType_Separator=MFT_SEPARATOR;
+		else fType_Separator=0;
+
+		CSubMenuEx *pobj_SubMenu;
+		if(mii.hSubMenu){
+			pobj_SubMenu=new CSubMenuEx(mii.hSubMenu);
+			pobj_SubMenu->InitOwnerDraw(0);
+		}
+		else pobj_SubMenu=0;
+
+		//拡張データをメモリに退避
+		CMenuItemData *pobj_MenuItemData;
+		pobj_MenuItemData=AddMenuExItemData(i,mii.wID,temp2,this,pobj_SubMenu);
+
+		mii.fType=MFT_OWNERDRAW | fType_Separator;
+		mii.dwItemData=(ULONG_PTR)pobj_MenuItemData;
+		SetMenuItemInfo(hMenu,i,1,&mii);
+	}
+}
+void CMenuEx::GetItemSize(int item_index,SIZE *pSize){
+	if(ppobj_MenuItemData[item_index]->str){
+		HDC hdc;
+		hdc = GetDC(hOwner);
+		HFONT hOldFont;
+		hOldFont = (HFONT)SelectObject(hdc, hMenuFont);
+
+		GetTextExtentPoint32(hdc,
+			ppobj_MenuItemData[item_index]->str,
+			lstrlen(ppobj_MenuItemData[item_index]->str),
+			pSize);
+
+		SelectObject(hdc,hOldFont);
+		DeleteDC(hdc);
+	}
+	else{
+		//セパレータのとき
+		pSize->cx=50;
+		pSize->cy=10;
+	}
+}
+
+BOOL CMenuEx::OwnerDrawSubMenu(HMENU hSubMenu,HDC hdc,RECT *pRect,BOOL bSelect,int item_index){
+	int i;
+	for(i=0;i<iMenuItemNum;i++){
+		if(ppobj_MenuItemData[i]->pobj_SubMenu){
+			if(hSubMenu==ppobj_MenuItemData[i]->pobj_SubMenu->hMenu){
+				ppobj_MenuItemData[i]->pobj_SubMenu->OwnerDrawMenu(hdc,pRect,bSelect,item_index);
+				return 1;
+			}
+			else{
+				BOOL bResult;
+				bResult=ppobj_MenuItemData[i]->pobj_SubMenu->OwnerDrawSubMenu(hSubMenu,hdc,pRect,bSelect,item_index);
+				if(bResult) return 1;
+			}
+		}
+	}
+	return 0;
+}
+void CMenuEx::OwnerDrawMenu(HDC hdc,RECT *pRect,BOOL bSelect,int item_index){
+	/////////////////////////////////
+	// 親メニューのオーナー描画
+	/////////////////////////////////
+
+
+	COLORREF BackColor,TextColor;
+
+	RECT rc;
+
+	if(bSelect){
+		//選択状態にある場合
+		HPEN hPen,hOldPen;
+		hPen=CreatePen(PS_SOLID,0,MENUCOLOR_SELECT_LINE);
+		hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+		HBRUSH hBrush,hOldBrush;
+		hBrush=CreateSolidBrush(MENUCOLOR_SELECT_BACK);
+		hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+		pRect->left++;
+		pRect->top++;
+		Rectangle(hdc,pRect);
+		pRect->left--;
+
+		SelectObject(hdc,hOldPen);
+		SelectObject(hdc,hOldBrush);
+
+		DeleteObject(hPen);
+		DeleteObject(hBrush);
+
+		TextColor=MENUCOLOR_TEXT;
+	}
+	else{
+		POINT pos;
+		GetCursorPos(&pos);
+		GetWindowRect(hOwner,&rc);
+		pos.x-=rc.left;
+		pos.y-=rc.top;
+		if(HitTest(pRect,&pos)){
+			//ホットイメージで表示
+			HPEN hPen,hOldPen;
+			hPen=CreatePen(PS_SOLID,0,MENUCOLOR_HOT_LINE);
+			hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+			HBRUSH hBrush,hOldBrush;
+			hBrush=CreateSolidBrush(MENUCOLOR_HOT_BACK);
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+			pRect->left++;
+			pRect->top++;
+			Rectangle(hdc,pRect);
+			pRect->left--;
+			pRect->top--;
+
+			SelectObject(hdc,hOldPen);
+			SelectObject(hdc,hOldBrush);
+
+			DeleteObject(hPen);
+			DeleteObject(hBrush);
+
+			TextColor=MENUCOLOR_TEXT;
+		}
+		else{
+			BackColor=MENUCOLOR_DEFAULT_BACK;
+			TextColor=MENUCOLOR_TEXT;
+
+			//背景を塗りつぶす
+			HBRUSH hBrush;
+			hBrush=CreateSolidBrush(BackColor);
+			FillRect(hdc,pRect,hBrush);
+			DeleteObject(hBrush);
+		}
+	}
+
+
+	if(ppobj_MenuItemData[item_index]->str){
+		rc=*pRect;
+		rc.top+=1;
+
+		SetBkMode(hdc, TRANSPARENT);
+		SetTextColor(hdc, TextColor);
+
+		HFONT hOldFont;
+		hOldFont=(HFONT)SelectObject(hdc,hMenuFont);
+
+		DrawText(hdc,ppobj_MenuItemData[item_index]->str,-1,&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
+
+		SelectObject(hdc,hOldFont);
+	}
+	else{
+		//セパレータのとき
+	}
+}
+
+
+CSubMenuEx::CSubMenuEx(HMENU hMenu):CMenuEx(hMenu){
+}
+void CSubMenuEx::GetItemSize(int item_index,SIZE *pSize){
+	if(ppobj_MenuItemData[item_index]->str){
+		HDC hdc;
+		hdc = GetDC(hOwner);
+		HFONT hOldFont;
+		hOldFont = (HFONT)SelectObject(hdc, hMenuFont);
+
+		GetTextExtentPoint32(hdc,
+			ppobj_MenuItemData[item_index]->str,
+			lstrlen(ppobj_MenuItemData[item_index]->str),
+			pSize);
+
+		SelectObject(hdc,hOldFont);
+		DeleteDC(hdc);
+
+		pSize->cx+=50;
+		if(pSize->cy<22) pSize->cy=22;
+	}
+	else{
+		//セパレータのとき
+		pSize->cx=50;
+		pSize->cy=10;
+	}
+}
+
+void CSubMenuEx::OwnerDrawMenu(HDC hdc,RECT *pRect,BOOL bSelect,int item_index){
+	//////////////////////////////////
+	// サブメニューのオーナー描画
+	//////////////////////////////////
+
+	RECT rc;
+	COLORREF BackColor,TextColor;
+	int i;
+
+	///////////////////////////////
+	// 左側のグラデーションを描画
+	///////////////////////////////
+
+	SIZE size;
+	size.cx=22;
+	size.cy=pRect->bottom-pRect->top;
+	HBITMAP hBmp;
+	hBmp=CreateHorzGradationBitmap(&size,RGB(254,254,251),RGB(196,196,173));
+
+	HDC memdc;
+	memdc=CreateCompatibleDC(hdc);
+	SelectObject(memdc,hBmp);
+	BitBlt(hdc,pRect->left,pRect->top,size.cx,size.cy,memdc,0,0,SRCCOPY);
+	DeleteDC(memdc);
+	DeleteObject(hBmp);
+
+
+	if(ppobj_MenuItemData[item_index]->str==0){
+		//セパレータのとき
+		HPEN hPen,hOldPen;
+		hPen=CreatePen(PS_SOLID,0,MENUCOLOR_DEFAULT_LINE);
+		hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+		MoveToEx(hdc,pRect->left+24,pRect->top+(pRect->bottom-pRect->top)/2,NULL);
+		LineTo(hdc,pRect->right,pRect->top+(pRect->bottom-pRect->top)/2);
+
+		SelectObject(hdc,hOldPen);
+		DeleteObject(hPen);
+		return;
+	}
+
+
+	//アイテムの状態を取得
+	MENUITEMINFO mii;
+	mii.cbSize=sizeof(MENUITEMINFO);
+	mii.fMask=MIIM_STATE;
+	GetMenuItemInfo(hMenu,item_index,1,&mii);
+
+
+	if(bSelect&&(mii.fState&MFS_DISABLED)==0){
+		//ホットイメージで表示
+		BackColor=MENUCOLOR_HOT_BACK;
+
+		HPEN hPen,hOldPen;
+		hPen=CreatePen(PS_SOLID,0,MENUCOLOR_HOT_LINE);
+		hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+		HBRUSH hBrush,hOldBrush;
+		hBrush=CreateSolidBrush(BackColor);
+		hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+		Rectangle(hdc,pRect);
+
+		SelectObject(hdc,hOldPen);
+		SelectObject(hdc,hOldBrush);
+
+		DeleteObject(hPen);
+		DeleteObject(hBrush);
+	}
+	else{
+		//マウスカーソルの座標を取得
+		POINT pos;
+		GetCursorPos(&pos);
+
+		//親ウィンドウのウィンドウ左上からの相対座標に変換
+		//（クライアント座標ではないところに注意）
+		GetWindowRect(WindowFromDC(hdc),&rc);
+		ScreenToClient(WindowFromDC(hdc),&pos);
+
+		if(bSelect&&HitTest(pRect,&pos)==0){
+			//淡色状態
+			BackColor=MENUCOLOR_SELECT_BACK;
+
+			HPEN hPen,hOldPen;
+			hPen=CreatePen(PS_SOLID,0,MENUCOLOR_SELECT_LINE);
+			hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+			HBRUSH hBrush,hOldBrush;
+			hBrush=CreateSolidBrush(BackColor);
+			hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+			Rectangle(hdc,pRect);
+
+			SelectObject(hdc,hOldPen);
+			SelectObject(hdc,hOldBrush);
+
+			DeleteObject(hPen);
+			DeleteObject(hBrush);
+		}
+		else{
+			BackColor=GetSysColor(COLOR_MENU);
+
+			rc=*pRect;
+			rc.left=pRect->left+22;
+			rc.right=pRect->right;
+
+			//背景を塗りつぶす
+			HBRUSH hBrush;
+			hBrush=CreateSolidBrush(BackColor);
+			FillRect(hdc,&rc,hBrush);
+			DeleteObject(hBrush);
+		}
+	}
+
+
+	if(mii.fState&MFS_CHECKED){
+		//チェックマークの外枠を描画
+		rc=*pRect;
+		rc.top++;
+		rc.right=rc.left+20;
+		rc.bottom--;
+
+		HPEN hPen,hOldPen;
+		hPen=CreatePen(PS_SOLID,0,MENUCOLOR_HOT_LINE);
+		hOldPen=(HPEN)SelectObject(hdc,hPen);
+
+		HBRUSH hBrush,hOldBrush;
+		hBrush=CreateSolidBrush(BackColor);
+		hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
+
+		Rectangle(hdc,&rc);
+
+		SelectObject(hdc,hOldPen);
+		SelectObject(hdc,hOldBrush);
+
+		DeleteObject(hPen);
+		DeleteObject(hBrush);
+
+
+		//チェックマークを描画
+		int BaseX=rc.left,BaseY=rc.top;
+		for(i=0;i<3;i++){
+			SetPixel(hdc,BaseX+6+i,BaseY+9+i,MENUCOLOR_TEXT);
+			SetPixel(hdc,BaseX+6+i,BaseY+10+i,MENUCOLOR_TEXT);
+		}
+		for(i=0;i<4;i++){
+			SetPixel(hdc,BaseX+9+i,BaseY+10-i,MENUCOLOR_TEXT);
+			SetPixel(hdc,BaseX+9+i,BaseY+11-i,MENUCOLOR_TEXT);
+		}
+	}
+	else{
+		if(ppobj_MenuItemData[item_index]->hIcon){
+			//アイコンを描画
+			HICON hIcon;
+			if(mii.fState&MFS_DISABLED) hIcon=ppobj_MenuItemData[item_index]->hGrayIcon;
+			else hIcon=ppobj_MenuItemData[item_index]->hIcon;
+
+			DrawIconEx(hdc,pRect->left+1,pRect->top+3,hIcon,16,16,0,NULL,DI_NORMAL);
+		}
+	}
+
+
+
+	//メイン文字列とショートカットキー文字列を分別
+	char szMain[255],szShortcut[255];
+	for(i=0;;i++){
+		if(ppobj_MenuItemData[item_index]->str[i]=='\t'){
+			szMain[i]=0;
+
+			lstrcpy(szShortcut,ppobj_MenuItemData[item_index]->str+i+1);
+			break;
+		}
+		szMain[i]=ppobj_MenuItemData[item_index]->str[i];
+		if(ppobj_MenuItemData[item_index]->str[i]=='\0'){
+			szShortcut[0]=0;
+			break;
+		}
+	}
+
+	rc=*pRect;
+	rc.left=pRect->left+26;
+	rc.right=pRect->right;
+
+	HFONT hOldFont;
+	hOldFont=(HFONT)SelectObject(hdc,hMenuFont);
+
+	if(mii.fState&MFS_DISABLED){
+		//淡色カラー
+		TextColor=MENUCOLOR_GRAY_TEXT;
+	}
+	else{
+		//通常カラー
+		TextColor=MENUCOLOR_TEXT;
+	}
+
+	SetBkMode(hdc, TRANSPARENT);
+	SetTextColor(hdc, TextColor);
+
+	DrawText(hdc,szMain,-1,&rc,DT_VCENTER|DT_LEFT|DT_SINGLELINE);
+
+	if(szShortcut[0]){
+		rc.left=rc.right-45;
+		DrawText(hdc,szShortcut,-1,&rc,DT_VCENTER|DT_LEFT|DT_SINGLELINE);
+	}
+
+	SelectObject(hdc,hOldFont);
+}
Index: /ProjectEditor/menu.h
===================================================================
--- /ProjectEditor/menu.h	(revision 3)
+++ /ProjectEditor/menu.h	(revision 3)
@@ -0,0 +1,89 @@
+
+
+#define LIGHT_RGB(rgb,ratio) RGB(\
+	LOBYTE(LOWORD(rgb))+(BYTE)((double)(255-LOBYTE(LOWORD(rgb)))*ratio),\
+	HIBYTE(LOWORD(rgb))+(BYTE)((double)(255-HIBYTE(LOWORD(rgb)))*ratio),\
+	LOBYTE(HIWORD(rgb))+(BYTE)((double)(255-LOBYTE(HIWORD(rgb)))*ratio))
+
+
+#define MENUCOLOR_TEXT			GetSysColor(COLOR_WINDOWTEXT)				//テキストの色
+#define MENUCOLOR_GRAY_TEXT		GetSysColor(COLOR_GRAYTEXT)		//淡色テキストの色
+#define MENUCOLOR_DEFAULT_LINE	GetSysColor(COLOR_3DDKSHADOW)	//通常時の線の色
+#define MENUCOLOR_DEFAULT_BACK	GetSysColor(COLOR_3DFACE)		//通常時の背景色
+#define MENUCOLOR_HOT_LINE		GetSysColor(COLOR_ACTIVECAPTION)			//ホット状態の線の色
+#define MENUCOLOR_HOT_BACK		LIGHT_RGB(MENUCOLOR_HOT_LINE,0.7)		//ホット状態の背景色
+#define MENUCOLOR_SELECT_LINE	MENUCOLOR_DEFAULT_LINE	//選択状態の線の色
+#define MENUCOLOR_SELECT_BACK	GetSysColor(COLOR_MENU)	//選択状態の背景色
+
+
+extern HFONT hMenuFont;
+
+
+class CSubMenuEx;
+class CMenuEx;
+
+class CMenuItemData{
+public:
+	int item_index;
+	int itemID;
+	LPSTR str;
+
+	CMenuEx *pobj_ThisMenu;
+	CSubMenuEx *pobj_SubMenu;
+
+	HICON hIcon;
+	HICON hGrayIcon;
+
+	CMenuItemData(int item_index,int itemID,char *str,CMenuEx *pobj_ThisMenu,CSubMenuEx *pobj_SubMenu);
+	~CMenuItemData();
+};
+
+class CMenuEx{
+public:
+	HMENU hMenu;
+
+	CMenuEx(HMENU hmenu);
+	~CMenuEx();
+
+
+	//拡張メニューデータ
+	CMenuItemData **ppobj_MenuItemData;
+	int iMenuItemNum;
+	CMenuItemData *AddMenuExItemData(int item_index,int itemID,char *str,CMenuEx *pobj_ThisMenu,CSubMenuEx *pobj_SubMenu);
+
+
+
+	void EnableItem(UINT uIDEnableItem,UINT uEnable);
+
+	void CheckMenu(UINT idItem,BOOL bChecked);
+	BOOL IsCheck(UINT idItem);
+
+	void RenameMenuItem(int item_index,char *str);
+	void RenameMenuItemByID(int itemID,char *str);
+
+	void RemoveItem(int item_index);
+	void InsertItem(int item_index,int itemID,char *str);
+
+
+	//アイコン表示拡張
+	BOOL SetIcon(int itemID,HICON hIcon);
+
+
+private:
+	CSubMenuEx *AddSubMenu(HMENU hSubMenu);
+public:
+	// オーナー描画関連
+	void InitOwnerDraw(BOOL bParent);
+	virtual void GetItemSize(int item_index,SIZE *pSize);
+	BOOL OwnerDrawSubMenu(HMENU hSubMenu,HDC hdc,RECT *pRect,BOOL bSelect,int item_index);
+	virtual void OwnerDrawMenu(HDC hdc,RECT *pRect,BOOL bSelect,int item_index);
+};
+
+class CSubMenuEx:public CMenuEx{
+public:
+	CSubMenuEx(HMENU hMenu);
+	virtual void GetItemSize(int item_index,SIZE *pSize);
+	virtual void OwnerDrawMenu(HDC hdc,RECT *pRect,BOOL bSelect,int item_index);
+};
+
+extern CMenuEx *pobj_MainMenu;
Index: /ProjectEditor/nkf_class.cpp
===================================================================
--- /ProjectEditor/nkf_class.cpp	(revision 3)
+++ /ProjectEditor/nkf_class.cpp	(revision 3)
@@ -0,0 +1,207 @@
+#include "common.h"
+
+//文字コード変換用クラスライブラリ
+CNkf nkf;
+
+CNkf::CNkf(){
+	char temporary[MAX_PATH];
+	sprintf(temporary,"%sSubOperation\\nkf32.dll",pj_editor_Dir);
+
+	hLib=LoadLibrary(temporary);
+
+	pGetNkfVersion=(GetNkfVersion)GetProcAddress(hLib,"GetNkfVersion");
+	pSetNkfOption=(SetNkfOption)GetProcAddress(hLib,"SetNkfOption");
+	pNkfConvert=(NkfConvert)GetProcAddress(hLib,"NkfConvert");
+	pNkfGetKanjiCode=(NkfGetKanjiCode)GetProcAddress(hLib,"NkfGetKanjiCode");
+}
+
+CNkf::~CNkf(){
+	FreeLibrary(hLib);
+}
+
+
+char *CNkf::RestoreBuffer(char *buffer,int iCharCode){
+	/////////////////////
+	// 文字コードを復元
+	// ※内部表現はShift-JIS
+	/////////////////////
+	extern HANDLE hHeap;
+	char *pBuf;
+
+	pBuf=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)*2+1);
+
+	switch(iCharCode){
+		case NKF_SHIFT_JIS:
+			lstrcpy(pBuf,buffer);
+			break;
+		case NKF_EUC:
+			pSetNkfOption("-ex");
+			pNkfConvert(pBuf,buffer);
+			break;
+		case NKF_ISO_2022_JP:
+			pSetNkfOption("-jx");
+			pNkfConvert(pBuf,buffer);
+			break;
+		case NKF_UTF_8:
+			pSetNkfOption("-wx");
+			pNkfConvert(pBuf,buffer);
+			break;
+	}
+
+	return pBuf;
+}
+
+void CNkf::GetCharCodeName(int iCharCode,char *name){
+	switch(iCharCode){
+		case NKF_SHIFT_JIS:
+			lstrcpy(name,"Shift-JIS");
+			break;
+		case NKF_EUC:
+			lstrcpy(name,"EUC");
+			break;
+		case NKF_ISO_2022_JP:
+			lstrcpy(name,"JIS");
+			break;
+		case NKF_UTF_8:
+			lstrcpy(name,"UTF-8");
+			break;
+	}
+}
+
+char *CNkf::ToCRLF(int iLfCode,char *buffer){
+	extern HANDLE hHeap;
+	int i,i2;
+
+	char *temp;
+	temp=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)*2+1);
+
+	for(i=0,i2=0;;i++,i2++){
+		if(buffer[i]=='\0'){
+			temp[i2]=0;
+			break;
+		}
+		if(iLfCode==LFCODE_LF){
+			if(buffer[i]=='\n'){
+				temp[i2++]='\r';
+				temp[i2]='\n';
+				continue;
+			}
+		}
+		else if(iLfCode==LFCODE_CR){
+			if(buffer[i]=='\r'){
+				temp[i2++]='\r';
+				temp[i2]='\n';
+				continue;
+			}
+		}
+
+		temp[i2]=buffer[i];
+	}
+
+	return temp;
+}
+void CNkf::ToLF(char *buffer){
+	extern HANDLE hHeap;
+	int i,i2;
+
+	for(i=0,i2=0;;i++,i2++){
+		if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
+			buffer[i2]='\n';
+			i++;
+			continue;
+		}
+
+		buffer[i2]=buffer[i];
+		if(buffer[i]=='\0') break;
+	}
+}
+void CNkf::ToCR(char *buffer){
+	extern HANDLE hHeap;
+	int i,i2;
+
+	for(i=0,i2=0;;i++,i2++){
+		if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
+			buffer[i2]='\r';
+			i++;
+			continue;
+		}
+
+		buffer[i2]=buffer[i];
+		if(buffer[i]=='\0') break;
+	}
+}
+
+void CNkf::GetLfCodeName(int iLfCode,char *name){
+	switch(iLfCode){
+		case LFCODE_CRLF:
+			lstrcpy(name,"CRLF");
+			break;
+		case LFCODE_LF:
+			lstrcpy(name,"LF");
+			break;
+		case LFCODE_CR:
+			lstrcpy(name,"CR");
+			break;
+	}
+}
+
+
+
+BOOL CALLBACK nkfDlgCodeSave(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
+	extern MDIINFO MdiInfo[MAX_WNDNUM];
+	static int WndNum;
+	HWND hList;
+
+	switch(message){
+		case WM_INITDIALOG:
+			SetPosCenter(hwnd);
+
+			WndNum=GetWndNum(GetWindow(hClient,GW_CHILD));
+			if(WndNum==-1){
+				//ウィンドウの取得に失敗
+				EndDialog(hwnd,0);
+				break;
+			}
+			if(!IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
+				//テキストドキュメントでないとき
+				EndDialog(hwnd,0);
+				break;
+			}
+
+			hList=GetDlgItem(hwnd,IDC_LIST_CHARCODE);
+			SendMessage(hList,LB_ADDSTRING,0,(long)"Shift-JIS");
+			SendMessage(hList,LB_ADDSTRING,0,(long)"EUC");
+			SendMessage(hList,LB_ADDSTRING,0,(long)"JIS");
+			SendMessage(hList,LB_ADDSTRING,0,(long)"UTF-8");
+			SendMessage(hList,LB_SETCURSEL,MdiInfo[WndNum].pmti->iCharCode,0);
+
+			hList=GetDlgItem(hwnd,IDC_LIST_LFCODE);
+			SendMessage(hList,LB_ADDSTRING,0,(long)"CRLF(Windows)");
+			SendMessage(hList,LB_ADDSTRING,0,(long)"LF(Unix)");
+			SendMessage(hList,LB_ADDSTRING,0,(long)"CR(Macintosh)");
+			SendMessage(hList,LB_SETCURSEL,MdiInfo[WndNum].pmti->iLfCode,0);
+			break;
+		case WM_COMMAND:
+			switch(LOWORD(wParam)){
+				case IDOK:
+					//文字コードを取得
+					MdiInfo[WndNum].pmti->iCharCode=
+						(int)SendDlgItemMessage(hwnd,IDC_LIST_CHARCODE,LB_GETCURSEL,0,0);
+
+					//改行コードを取得
+					MdiInfo[WndNum].pmti->iLfCode=
+						(int)SendDlgItemMessage(hwnd,IDC_LIST_LFCODE,LB_GETCURSEL,0,0);
+
+					//保存
+					if(!SaveDocument(GetWindow(hClient,GW_CHILD),NULL)) return 0;
+
+					EndDialog(hwnd,1);
+					break;
+				case IDCANCEL:
+					EndDialog(hwnd,0);
+					break;
+			}
+			break;
+	}
+	return 0;
+}
Index: /ProjectEditor/nkf_class.h
===================================================================
--- /ProjectEditor/nkf_class.h	(revision 3)
+++ /ProjectEditor/nkf_class.h	(revision 3)
@@ -0,0 +1,45 @@
+
+typedef void (CALLBACK *GetNkfVersion)(LPSTR verStr);
+typedef int (CALLBACK *SetNkfOption)(LPCSTR optStr);
+typedef void (CALLBACK *NkfConvert)(LPSTR outStr, LPCSTR inStr);
+typedef int (CALLBACK *NkfGetKanjiCode)(VOID);
+
+class CNkf{
+	HINSTANCE hLib;
+public:
+	CNkf();
+	~CNkf();
+	GetNkfVersion pGetNkfVersion;
+	SetNkfOption pSetNkfOption;
+	NkfConvert pNkfConvert;
+	NkfGetKanjiCode pNkfGetKanjiCode;
+
+	char *RestoreBuffer(char *buffer,int iCharCode);
+	void GetCharCodeName(int iCharCode,char *name);
+
+	char *ToCRLF(int iLfCode,char *buffer);
+	void ToLF(char *buffer);
+	void ToCR(char *buffer);
+	void GetLfCodeName(int iLfCode,char *name);
+};
+extern CNkf nkf;
+
+
+//文字コード
+#define NKF_SHIFT_JIS		0
+#define NKF_EUC				1
+#define NKF_ISO_2022_JP		2
+#define NKF_UTF_8			3
+
+#define NKF_CODE_MIN		NKF_SHIFT_JIS
+#define NKF_CODE_MAX		NKF_UTF_8
+
+
+//改行コード
+#define LFCODE_CRLF	0	//Windows
+#define LFCODE_LF	1	//Unix
+#define LFCODE_CR	2	//Macintosh
+
+
+//関数郡
+BOOL CALLBACK nkfDlgCodeSave(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
Index: /ProjectEditor/pj_msg_eng.h
===================================================================
--- /ProjectEditor/pj_msg_eng.h	(revision 3)
+++ /ProjectEditor/pj_msg_eng.h	(revision 3)
@@ -0,0 +1,49 @@
+///////////////////////////////////////////////////////////////
+// プロジェクト管理で使用する汎用テキストを定義しています
+//
+// 英語
+///////////////////////////////////////////////////////////////
+
+
+//////////////////
+// 削除メッセージ
+//////////////////
+#define STRING_PJ_CHECK_DELETECURSOR	"Delete the Cursor(%s) from the Project?"
+#define STRING_PJ_CHECK_DELETEBITMAP	"Delete the Bitmap(%s) from the Project?"
+#define STRING_PJ_CHECK_DELETEICON		"Delete the Icon(%s) from the Project?"
+#define STRING_PJ_CHECK_DELETEMENU		"Delete the Menu(%s) from the Project?"
+#define STRING_PJ_CHECK_DELETEWINDOW	"Delete the Window(%s) from the Project?"
+
+
+////////////////////////
+// 重複エラーメッセージ
+////////////////////////
+#define STRING_DUPLICATIONERROR_ID_IN_PROJECT		"\"%s\" ID already exists in a project."
+#define STRING_DUPLICATIONERROR_FILE_IN_PROJECT		"\"%s\" file already exists in a project."
+#define STRING_DUPLICATIONERROR_WINDOW_IN_PROJECT	"\"%s\" window already exists in a project."
+#define STRING_DUPLICATIONERROR_HANDLE_IN_PROJECT	"\"%s\" handle already exists in a project."
+#define STRING_DUPLICATIONERROR_PROC_IN_PROJECT		"\"%s\" procedure already exists in a project."
+
+
+//////////////////////////
+// 保存チェックメッセージ
+//////////////////////////
+#define STRING_MODIFYCHECK_PROJECT	"\"%s\" project was modified. Save it?"
+
+
+//////////////////////////
+// その他エラーメッセージ
+//////////////////////////
+#define STRING_ERROR_CANT_MAINFILE		"This is a main source file in the project. You can't delete it from the project."
+#define STRING_ERROR_MAKEDIRECTORY		"Creation of the directory did not succeed."
+#define STRING_ERROR_PROJECT_OVERWRITE	"The project already exists. Overwrite it?"
+#define STRING_ERROR_BROKEN_PROJECT		"The project file was corrupted."
+#define STRING_ERROR_NOFILE				"A file does not exist in a project."
+#define STRING_ERROR_BROKEN_WNDFILE		"The file(*.wnd) was corrupted.\n\n%s"
+
+
+//////////////////
+// その他
+//////////////////
+#define STRING_PROJECT_SAVING	"Writing the project..."
+#define STRING_RENAME_ID		"Rename ID"
Index: /ProjectEditor/pj_msg_jpn.h
===================================================================
--- /ProjectEditor/pj_msg_jpn.h	(revision 3)
+++ /ProjectEditor/pj_msg_jpn.h	(revision 3)
@@ -0,0 +1,49 @@
+///////////////////////////////////////////////////////////////
+// プロジェクト管理で使用する汎用テキストを定義しています
+//
+// 日本語
+///////////////////////////////////////////////////////////////
+
+
+//////////////////
+// 削除メッセージ
+//////////////////
+#define STRING_PJ_CHECK_DELETECURSOR	"%s カーソルをプロジェクトから削除します。よろしいですか？"
+#define STRING_PJ_CHECK_DELETEBITMAP	"%s ビットマップをプロジェクトから削除します。よろしいですか？"
+#define STRING_PJ_CHECK_DELETEICON		"%s アイコンをプロジェクトから削除します。よろしいですか？"
+#define STRING_PJ_CHECK_DELETEMENU		"%s メニューをプロジェクトから削除します。よろしいですか？"
+#define STRING_PJ_CHECK_DELETEWINDOW	"%s ウィンドウをプロジェクトから削除します。よろしいですか？"
+
+
+////////////////////////
+// 重複エラーメッセージ
+////////////////////////
+#define STRING_DUPLICATIONERROR_ID_IN_PROJECT		"ID \"%s\" は既にプロジェクト内に存在します。"
+#define STRING_DUPLICATIONERROR_FILE_IN_PROJECT		"\"%s\" ファイルは既にプロジェクト内に存在します。"
+#define STRING_DUPLICATIONERROR_WINDOW_IN_PROJECT	"\"%s\" ウィンドウは既にプロジェクト内に存在します。"
+#define STRING_DUPLICATIONERROR_HANDLE_IN_PROJECT	"\"%s\" ハンドルは既にプロジェクト内に存在します。"
+#define STRING_DUPLICATIONERROR_PROC_IN_PROJECT		"\"%s\" プロシージャは既にプロジェクト内に存在します。"
+
+
+//////////////////////////
+// 保存チェックメッセージ
+//////////////////////////
+#define STRING_MODIFYCHECK_PROJECT	"\"%s\" プロジェクトは変更されています。保存しますか？"
+
+
+//////////////////////////
+// その他エラーメッセージ
+//////////////////////////
+#define STRING_ERROR_CANT_MAINFILE		"このファイルはプロジェクトのメイン ファイルです。プロジェクト内から削除することはできません。"
+#define STRING_ERROR_MAKEDIRECTORY		"ディレクトリの作成に失敗しました"
+#define STRING_ERROR_PROJECT_OVERWRITE	"指定したディレクトリにはすでにプロジェクトが存在します。上書きしますか？"
+#define STRING_ERROR_BROKEN_PROJECT		"プロジェクト ファイルが壊れています。"
+#define STRING_ERROR_NOFILE				"プログラム ファイルがプロジェクトに存在しません。"
+#define STRING_ERROR_BROKEN_WNDFILE		"ウィンドウ定義ファイルが壊れています。\n\n%s"
+
+
+//////////////////
+// その他
+//////////////////
+#define STRING_PROJECT_SAVING	"プロジェクトを保存中..."
+#define STRING_RENAME_ID		"IDの変更"
Index: /ProjectEditor/rad_msg_eng.h
===================================================================
--- /ProjectEditor/rad_msg_eng.h	(revision 3)
+++ /ProjectEditor/rad_msg_eng.h	(revision 3)
@@ -0,0 +1,104 @@
+///////////////////////////////////////////////////////////////
+// RADツールの各種プロパティで利用するテキストを定義しています
+//
+// 英語
+///////////////////////////////////////////////////////////////
+
+//位置
+#define STRING_LEFT		"Left"
+#define STRING_RIGHT	"Right"
+#define STRING_TOP		"Top"
+#define STRING_BOTTOM	"Bottom"
+#define STRING_CENTER	"Center"
+
+//方向
+#define STRING_DIRECTION_HORIZONTAL	"Horizontal"
+#define STRING_DIRECTION_VERTICAL	"Vertical"
+
+//ソート
+#define STRING_SORT_ASCENDING	"Ascending"
+#define STRING_SORT_DESCENDING	"Descending"
+
+//オーナー描画
+#define STRING_OWNERDRAW_FIXED		"Fixed"
+#define STRING_OWNERDRAW_VARIABLE	"Variable"
+
+//ウィンドウ識別名入力ダイアログの警告メッセージ
+#define STRING_WINDOW_RENAME_MUST_WINDOWNAME	"You must enter identification name of the window."
+#define STRING_WINDOW_RENAME_MUST_HANDLENAME	"You must enter handle name of the window."
+#define STRING_WINDOW_RENAME_MUST_PROCEDURENAME	"You must enter procedure name of the window."
+#define STRING_WINDOW_RENAME_CHECK				"If you change these names, you must change identification names in source code if necessary. Are you ok?"
+
+//ウィンドウプロパティに必要なテキスト
+#define STRING_WINDOWPROP_BGCOLOR1				"3D FACE (Default)"
+#define STRING_WINDOWPROP_BGCOLOR2				"Color Option"
+#define STRING_WINDOWPROP_ICONDEFAULT			"Windows Logo (Default)"
+#define STRING_WINDOWPROP_STYLE_OVERLAPPED		"Overlapped"
+#define STRING_WINDOWPROP_STYLE_POPUP			"Popup"
+#define STRING_WINDOWPROP_STYLE_CHILD			"Child"
+#define STRING_WINDOWPROP_STYLE_FRAME_NONE		"None Frame"
+#define STRING_WINDOWPROP_STYLE_FRAME_THICK		"Thick Frame"
+#define STRING_WINDOWPROP_STYLE_FRAME_BORDER	"Border Frame"
+
+//アイテムID入力ダイアログの警告メッセージ
+#define STRING_ITEM_RENAME_MUST_ID	"Must enter id name of the control item."
+#define STRING_ITEM_RENAME_CHECK	"If you change these names, you must change identification names in source code if necessary. Are you ok?"
+
+//コンボボックスプロパティに必要なテキスト
+#define STRING_COMBOBOXPROP_STYLE_DROPDOWN				"Drop Down"
+#define STRING_COMBOBOXPROP_STYLE_DROPDOWNLIST			"Drop Down List"
+
+//イメージボックスプロパティに必要なテキスト
+#define STRING_IMAGEBOXPROP_STYLE_FRAME_BLACK	"Frame (Black)"
+#define STRING_IMAGEBOXPROP_STYLE_FRAME_GRAY	"Frame (Gray)"
+#define STRING_IMAGEBOXPROP_STYLE_FRAME_WHITE	"Frame (White)"
+#define STRING_IMAGEBOXPROP_STYLE_FRAME_ETCHED	"Frame (Etched)"
+#define STRING_IMAGEBOXPROP_STYLE_RECT_BLACK	"Rectangle (Black)"
+#define STRING_IMAGEBOXPROP_STYLE_RECT_GRAY		"Rectangle (Gray)"
+#define STRING_IMAGEBOXPROP_STYLE_RECT_WHITE	"Rectangle (White)"
+#define STRING_IMAGEBOXPROP_STYLE_ICON			"Icon"
+#define STRING_IMAGEBOXPROP_STYLE_BITMAP		"Bitmap"
+#define STRING_IMAGEBOXPROP_STYLE_FROMFILE		"File path:"
+#define STRING_IMAGEBOXPROP_STYLE_FROMRESOURCE	"Resource ID:"
+#define STRING_IMAGEBOXPROP_GETPATH_ICON		"Open Icon File"
+#define STRING_IMAGEBOXPROP_GETPATH_BITMAP		"Open Bitmap File"
+
+//リストビュープロパティに必要なテキスト
+#define STRING_LISTVIEWPROP_STYLE_ICON		"Icon"
+#define STRING_LISTVIEWPROP_STYLE_SMALLICON	"Small Icon"
+#define STRING_LISTVIEWPROP_STYLE_LIST		"List"
+#define STRING_LISTVIEWPROP_STYLE_REPORT	"Report"
+
+//リストボックスプロパティに必要なテキスト
+#define STRING_LISTBOXPROP_STYLE_SEL_SINGLE		"Single"
+#define STRING_LISTBOXPROP_STYLE_SEL_MULTI		"Multiple"
+#define STRING_LISTBOXPROP_STYLE_SEL_EXTENDED	"Extended"
+
+//スクロールバープロパティに必要なテキスト
+#define STRING_SCROLLBARPROP_STYLE_FREE				"Free"
+#define STRING_SCROLLBARPROP_STYLE_TOPORLEFT		"Top/Left"
+#define STRING_SCROLLBARPROP_STYLE_BOTTOMORRIGHT	"Bottom/Right"
+
+//トラックバープロパティに必要なテキスト
+#define STRING_TRACKBARPROP_STYLE_POSITION_BOTH				"Both"
+#define STRING_TRACKBARPROP_STYLE_POSITION_TOPORLEFT		"Top/Left"
+#define STRING_TRACKBARPROP_STYLE_POSITION_BOTTOMORRIGHT	"Bottom/Right"
+
+
+/////////////////////
+// その他メッセージ
+/////////////////////
+#define STRING_RAD_ERROR_CANT_CHILDTEST	"A test command cannot be used for child window."
+
+
+//////////////////////////////////
+// メニューエディタ用のメッセージ
+//////////////////////////////////
+#define STRING_MENUEDIT_MAKE_NEWMENU			"New Menu"
+#define STRING_MENUEDIT_RENAME_MENUID			"Rename Menu ID"
+#define STRING_MENUEDIT_DUPLICATIONERROR		"Menu \"%s\" already exists in a project."
+#define STRING_MENUEDIT_DELETECHECK				"If this operation is performed, child menu items will be deleted at the same time."
+#define STRING_MENUEDIT_MUSTSELECT_NEW_ITEM	"You must select position to insert the new menu item."
+#define STRING_MENUEDIT_INSERTTYPE_YESNO		"If you push \"yes\" button, the menu item is created in popup. If you push \"no\" button, the menu item is created in the same level with the popup."
+#define STRING_MENUEDIT_MUSTSELECT_DELETE_MENUITEM	"You must select menu item to delete."
+#define STRING_MENUEDIT_MUSTSELECT_MOVE_MENUITEM	"You must select menu item to move."
Index: /ProjectEditor/rad_msg_jpn.h
===================================================================
--- /ProjectEditor/rad_msg_jpn.h	(revision 3)
+++ /ProjectEditor/rad_msg_jpn.h	(revision 3)
@@ -0,0 +1,105 @@
+///////////////////////////////////////////////////////////////
+// RADツールの各種プロパティで利用するテキストを定義しています
+//
+// 日本語
+///////////////////////////////////////////////////////////////
+
+//位置
+#define STRING_LEFT		"左端"
+#define STRING_RIGHT	"右端"
+#define STRING_TOP		"上端"
+#define STRING_BOTTOM	"下端"
+#define STRING_CENTER	"中央"
+
+//方向
+#define STRING_DIRECTION_HORIZONTAL	"水平方向"
+#define STRING_DIRECTION_VERTICAL	"垂直方向"
+
+//ソート
+#define STRING_SORT_ASCENDING	"昇順"
+#define STRING_SORT_DESCENDING	"降順"
+
+//オーナー描画
+#define STRING_OWNERDRAW_FIXED		"固定"
+#define STRING_OWNERDRAW_VARIABLE	"可変"
+
+
+//ウィンドウ識別名入力ダイアログの警告メッセージ
+#define STRING_WINDOW_RENAME_MUST_WINDOWNAME	"ウィンドウ識別名を入力して下さい。"
+#define STRING_WINDOW_RENAME_MUST_HANDLENAME	"ハンドル名を入力して下さい。"
+#define STRING_WINDOW_RENAME_MUST_PROCEDURENAME	"プロシージャ名を入力して下さい。"
+#define STRING_WINDOW_RENAME_CHECK				"これらのウィンドウ識別名を変更すると、ソースコード内の識別子は手動で変換する必要があります。変更しますか？"
+
+//ウィンドウプロパティに必要なテキスト
+#define STRING_WINDOWPROP_BGCOLOR1				"3D FACE（標準）"
+#define STRING_WINDOWPROP_BGCOLOR2				"色指定"
+#define STRING_WINDOWPROP_ICONDEFAULT			"Windowsロゴ（標準）"
+#define STRING_WINDOWPROP_STYLE_OVERLAPPED		"オーバーラップ"
+#define STRING_WINDOWPROP_STYLE_POPUP			"ポップアップ"
+#define STRING_WINDOWPROP_STYLE_CHILD			"チャイルド"
+#define STRING_WINDOWPROP_STYLE_FRAME_NONE		"枠無し"
+#define STRING_WINDOWPROP_STYLE_FRAME_THICK		"細枠"
+#define STRING_WINDOWPROP_STYLE_FRAME_BORDER	"サイズ変更枠"
+
+//アイテムID入力ダイアログの警告メッセージ
+#define STRING_ITEM_RENAME_MUST_ID	"ID名を入力して下さい。"
+#define STRING_ITEM_RENAME_CHECK	"アイテムのID名を変更すると、ソースコード内のID名は手動で変換する必要があります。変更しますか？"
+
+//コンボボックスプロパティに必要なテキスト
+#define STRING_COMBOBOXPROP_STYLE_DROPDOWN				"ドロップ ダウン"
+#define STRING_COMBOBOXPROP_STYLE_DROPDOWNLIST			"ドロップ ダウン リスト"
+
+//イメージボックスプロパティに必要なテキスト
+#define STRING_IMAGEBOXPROP_STYLE_FRAME_BLACK	"フレーム（黒）"
+#define STRING_IMAGEBOXPROP_STYLE_FRAME_GRAY	"フレーム（灰色）"
+#define STRING_IMAGEBOXPROP_STYLE_FRAME_WHITE	"フレーム（白）"
+#define STRING_IMAGEBOXPROP_STYLE_FRAME_ETCHED	"フレーム（縁取り）"
+#define STRING_IMAGEBOXPROP_STYLE_RECT_BLACK	"四角形（黒）"
+#define STRING_IMAGEBOXPROP_STYLE_RECT_GRAY		"四角形（灰色）"
+#define STRING_IMAGEBOXPROP_STYLE_RECT_WHITE	"四角形（白）"
+#define STRING_IMAGEBOXPROP_STYLE_ICON			"アイコン"
+#define STRING_IMAGEBOXPROP_STYLE_BITMAP		"ビットマップ"
+#define STRING_IMAGEBOXPROP_STYLE_FROMFILE		"ファイル指定:"
+#define STRING_IMAGEBOXPROP_STYLE_FROMRESOURCE	"リソース指定:"
+#define STRING_IMAGEBOXPROP_GETPATH_ICON		"アイコン ファイルを指定してください"
+#define STRING_IMAGEBOXPROP_GETPATH_BITMAP		"ビットマップ ファイルを指定してください"
+
+//リストビュープロパティに必要なテキスト
+#define STRING_LISTVIEWPROP_STYLE_ICON		"アイコン"
+#define STRING_LISTVIEWPROP_STYLE_SMALLICON	"小さいアイコン"
+#define STRING_LISTVIEWPROP_STYLE_LIST		"リスト"
+#define STRING_LISTVIEWPROP_STYLE_REPORT	"レポート"
+
+//リストボックスプロパティに必要なテキスト
+#define STRING_LISTBOXPROP_STYLE_SEL_SINGLE		"シングル"
+#define STRING_LISTBOXPROP_STYLE_SEL_MULTI		"マルチ"
+#define STRING_LISTBOXPROP_STYLE_SEL_EXTENDED	"拡張"
+
+//スクロールバープロパティに必要なテキスト
+#define STRING_SCROLLBARPROP_STYLE_FREE				"指定無し"
+#define STRING_SCROLLBARPROP_STYLE_TOPORLEFT		"上/左"
+#define STRING_SCROLLBARPROP_STYLE_BOTTOMORRIGHT	"下/右"
+
+//トラックバープロパティに必要なテキスト
+#define STRING_TRACKBARPROP_STYLE_POSITION_BOTH				"両方"
+#define STRING_TRACKBARPROP_STYLE_POSITION_TOPORLEFT		"上/左"
+#define STRING_TRACKBARPROP_STYLE_POSITION_BOTTOMORRIGHT	"下/右"
+
+
+/////////////////////////////////
+// その他RADツール用のメッセージ
+/////////////////////////////////
+#define STRING_RAD_ERROR_CANT_CHILDTEST	"チャイルドウィンドウをテスト表示することはできません"
+
+
+//////////////////////////////////
+// メニューエディタ用のメッセージ
+//////////////////////////////////
+#define STRING_MENUEDIT_MAKE_NEWMENU			"新規メニュー"
+#define STRING_MENUEDIT_RENAME_MENUID			"メニューIDの変更"
+#define STRING_MENUEDIT_DUPLICATIONERROR		"\"%s\" メニューは既にプロジェクト内に存在します。"
+#define STRING_MENUEDIT_DELETECHECK				"この操作を行うとポップアップされるメニュー アイテムも削除されます。"
+#define STRING_MENUEDIT_MUSTSELECT_NEW_ITEM		"新しいメニュー アイテムの挿入位置を選択して下さい"
+#define STRING_MENUEDIT_INSERTTYPE_YESNO		"ポップアップ アイテムを作成する場合は \"はい\" を、ポップアップと同じ階層にメニュー アイテムを作成する場合は \"いいえ\" を押して下さい。"
+#define STRING_MENUEDIT_MUSTSELECT_DELETE_MENUITEM	"削除するメニュー アイテムを選択して下さい"
+#define STRING_MENUEDIT_MUSTSELECT_MOVE_MENUITEM	"移動するメニュー アイテムを選択して下さい"
Index: /ProjectEditor/rebar.cpp
===================================================================
--- /ProjectEditor/rebar.cpp	(revision 3)
+++ /ProjectEditor/rebar.cpp	(revision 3)
@@ -0,0 +1,345 @@
+#include "Common.h"
+
+
+/////////////////////////////////////////////////////////////
+// Note. レバーコントロールを新たに追加する場合は、
+//      "レバー追加" で検索をかけ、適切なコードを埋め込む
+/////////////////////////////////////////////////////////////
+
+
+CDBRebarBand::CDBRebarBand(){
+	iMaxBandNum=0;
+}
+CDBRebarBand::~CDBRebarBand(){}
+
+void CDBRebarBand::add(int band_id,AddBandProc add_proc){
+	BandId[iMaxBandNum]=band_id;
+	pAddProc[iMaxBandNum]=add_proc;
+	iMaxBandNum++;
+}
+
+HWND CDBRebarBand::call_add(int band_id,int num,char *lpszText){
+	int i;
+	for(i=0;i<iMaxBandNum;i++){
+		if(BandId[i]==band_id) break;
+	}
+	if(i==iMaxBandNum) return 0;
+
+	return pAddProc[i](hRebar,num,lpszText);
+}
+
+
+HWND AddDocCombo(HWND hRebar,int num,char *lpszText);
+HWND AddStandardToolbar(HWND hRebar,int num,char *lpszText);
+HWND AddReleaseToolbar(HWND hRebar,int num,char *lpszText);
+HWND AddDebuggerToolbar(HWND hRebar,int num,char *lpszText);
+HWND AddBand_SelectCompiler(HWND hRebar,int num,char *lpszText);
+HWND AddBand_WebSearch(HWND hRebar,int num,char *lpszText);
+
+
+CMainRebar *pobj_Rebar=0;
+
+
+void CMainRebar::SetupRebar(HWND hwnd){
+	int i;
+
+	//レバーコントロールを生成
+	hRebar=CreateWindowEx(WS_EX_TOOLWINDOW,REBARCLASSNAME,NULL,
+		WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_BORDER|WS_VISIBLE|
+		CCS_ADJUSTABLE|RBS_BANDBORDERS|RBS_DBLCLKTOGGLE ,
+		0,0,0,0,hwnd,NULL,hInst,NULL);
+
+	pobj_DBRebarBand->hRebar=hRebar;
+
+	REBARINFO RebarInfo;
+	ZeroMemory(&RebarInfo,sizeof(RebarInfo));
+	RebarInfo.cbSize=sizeof(REBARINFO);
+	SendMessage(hRebar,RB_SETBARINFO,0,(long)&RebarInfo);
+
+	//バンドを挿入
+	REBARBANDINFO RebarBand;
+	ZeroMemory(&RebarBand,sizeof(REBARBANDINFO));
+	RebarBand.cbSize=sizeof(REBARBANDINFO);
+	RebarBand.fMask=RBBIM_TEXT|RBBIM_STYLE|RBBIM_CHILD|RBBIM_CHILDSIZE|RBBIM_SIZE|RBBIM_ID;
+	RebarBand.cxMinChild=23;
+	RebarBand.cyMinChild=22;
+	if(pobj_nv->bNoGripper) RebarBand.fStyle=RBBS_CHILDEDGE|RBBS_NOGRIPPER;
+	else RebarBand.fStyle=RBBS_CHILDEDGE;
+	for(i=0;i<MAX_REBARBANDS;i++){
+		if(pobj_nv->SaveRebar[i].RebarID==0) break;
+
+		//レバー上にのせる子ウィンドウを生成
+		char szText[255];
+		HWND hChild;
+		hChild=pobj_DBRebarBand->call_add(pobj_nv->SaveRebar[i].RebarID,i,szText);
+
+		//レバーバンドを追加
+		RebarBand.lpText=szText;
+		RebarBand.hwndChild=hChild;
+		RebarBand.cx=pobj_nv->SaveRebar[i].RebarLength;
+		RebarBand.wID=pobj_nv->SaveRebar[i].RebarID;
+		RebarBand.fStyle|=pobj_nv->SaveRebar[i].IsBandBreak;
+		SendMessage(hRebar,RB_INSERTBAND,-1,(LPARAM)&RebarBand);
+		RebarBand.fStyle^=pobj_nv->SaveRebar[i].IsBandBreak;
+	}
+}
+
+CMainRebar::CMainRebar(HWND hwnd_parent){
+	hParent=hwnd_parent;
+
+	pobj_DBRebarBand=new CDBRebarBand();
+
+	pobj_DBRebarBand->add(
+		ID_DOCCOMBO,
+		AddDocCombo);
+
+	pobj_DBRebarBand->add(
+		ID_STANDARDTOOLBAR,
+		AddStandardToolbar);
+
+	pobj_DBRebarBand->add(
+		ID_RELEASETOOLBAR,
+		AddReleaseToolbar);
+
+	pobj_DBRebarBand->add(
+		ID_DEBUGGERTOOLBAR,
+		AddDebuggerToolbar);
+
+	pobj_DBRebarBand->add(
+		ID_SELECTCOMPILERCOMBO,
+		AddBand_SelectCompiler);
+
+	pobj_DBRebarBand->add(
+		ID_WEB_SEARCH,
+		AddBand_WebSearch);
+
+	//
+	//レバーバンドを追加する場合はこの行を編集する（レバー追加）
+	//
+
+
+	SetupRebar(hParent);
+}
+CMainRebar::~CMainRebar(){
+	SaveRebarState();
+	DestroyWindow(hRebar);
+
+	delete pobj_DBRebarBand;
+	pobj_DBRebarBand=0;
+}
+
+void CMainRebar::ResetInitRebar(){
+	DestroyWindow(hRebar);
+	ResetRebarData();
+	SetupRebar(hParent);
+}
+void CMainRebar::ResetRebar(){
+	SaveRebarState();
+	DestroyWindow(hRebar);
+	SetupRebar(hParent);
+}
+
+void CMainRebar::SaveRebarState(void){
+	int i,BandNum;
+	REBARBANDINFO BandInfo;
+
+	ZeroMemory(&BandInfo,sizeof(REBARBANDINFO));
+	BandInfo.cbSize=sizeof(REBARBANDINFO);
+	BandInfo.fMask=RBBIM_TEXT|RBBIM_STYLE|RBBIM_CHILD|RBBIM_CHILDSIZE|RBBIM_SIZE|RBBIM_ID;
+	BandNum=SendMessage(hRebar,RB_GETBANDCOUNT,0,0);
+	for(i=0;i<BandNum;i++){
+		SendMessage(hRebar,RB_GETBANDINFO,i,(long)&BandInfo);
+		if(BandInfo.fStyle&RBBS_BREAK) pobj_nv->SaveRebar[i].IsBandBreak=RBBS_BREAK;
+		else pobj_nv->SaveRebar[i].IsBandBreak=0;
+		pobj_nv->SaveRebar[i].RebarID=BandInfo.wID;
+		pobj_nv->SaveRebar[i].RebarLength=BandInfo.cx;
+	}
+}
+
+void CMainRebar::ChangeRebarBand(int BandID){
+	int i;
+	REBARBANDINFO RebarBand;
+
+	//ツールバーが固定されている場合は解除する
+	if(pobj_nv->bNoGripper) SendMessage(hOwner,WM_COMMAND,IDM_NOGRIPPER,0);
+
+	SAVEREBAR *psr;
+	psr=pobj_nv->SaveRebar;
+
+	for(i=0;i<MAX_REBARBANDS;i++){
+		if(psr[i].RebarID==0) break;
+		if(psr[i].RebarID==BandID){
+			SendMessage(hRebar,RB_DELETEBAND,SendMessage(hRebar,RB_IDTOINDEX,BandID,0),0);
+			memcpy(&psr[i],&psr[i+1],(MAX_REBARBANDS-i-1)*sizeof(SAVEREBAR));
+			psr[MAX_REBARBANDS-1].RebarID=0;
+			if(psr[0].RebarID==0){
+				DestroyWindow(hRebar);
+				SetupRebar(hOwner);
+
+				//メニュー状態を設定
+				ResetState_DocMenu();
+
+				ResizeOwnerWnd();
+			}
+			return;
+		}
+	}
+	if(i>=MAX_REBARBANDS) return;
+	psr[i].IsBandBreak=1;
+	psr[i].RebarID=BandID;
+	psr[i].RebarLength=0;
+	ZeroMemory(&RebarBand,sizeof(REBARBANDINFO));
+	RebarBand.cbSize=sizeof(REBARBANDINFO);
+	RebarBand.fMask=RBBIM_TEXT|RBBIM_STYLE|RBBIM_CHILD|RBBIM_CHILDSIZE|RBBIM_SIZE|RBBIM_ID;
+	RebarBand.fStyle=RBBS_CHILDEDGE;
+	RebarBand.cxMinChild=0;
+	RebarBand.cyMinChild=22;
+
+	//レバー上にのせる子ウィンドウを生成
+	char szText[255];
+	HWND hChild;
+	hChild=pobj_DBRebarBand->call_add(pobj_nv->SaveRebar[i].RebarID,i,szText);
+
+	//レバーバンドを追加
+	RebarBand.lpText=szText;
+	RebarBand.hwndChild=hChild;
+	RebarBand.cx=pobj_nv->SaveRebar[i].RebarLength;
+	RebarBand.wID=pobj_nv->SaveRebar[i].RebarID;
+	RebarBand.fStyle|=pobj_nv->SaveRebar[i].IsBandBreak;
+	SendMessage(hRebar,RB_INSERTBAND,-1,(LPARAM)&RebarBand);
+	RebarBand.fStyle^=pobj_nv->SaveRebar[i].IsBandBreak;
+
+	//メニュー状態を設定
+	ResetState_DocMenu();
+}
+
+void CMainRebar::menu_popup(HWND hwnd,int PosX,int PosY){
+	//レバーコントロールの表示設定メニューを表示
+	int i;
+	POINT MousePos;
+	MENUITEMINFO MenuItemInfo;
+
+	//メニューのチェック項目をセット
+	extern HMENU hRebarMenu;
+	MenuItemInfo.cbSize=sizeof(MENUITEMINFO);
+	MenuItemInfo.fMask=MIIM_STATE;
+	MenuItemInfo.fState=MFS_UNCHECKED;
+	SetMenuItemInfo(hRebarMenu,IDM_DOCSELECTBAND,0,&MenuItemInfo);
+	SetMenuItemInfo(hRebarMenu,IDM_STANDARDBAND,0,&MenuItemInfo);
+	SetMenuItemInfo(hRebarMenu,IDM_BANDMENU_WEB_SEARCH,0,&MenuItemInfo);
+#ifndef THETEXT
+	//ProjectEditorのみ
+	SetMenuItemInfo(hRebarMenu,IDM_RELEASEBAND,0,&MenuItemInfo);
+	SetMenuItemInfo(hRebarMenu,IDM_DEBUGBAND,0,&MenuItemInfo);
+	SetMenuItemInfo(hRebarMenu,IDM_SELECTCOMPILERBAND,0,&MenuItemInfo);
+#endif
+
+	
+	MenuItemInfo.fState=MFS_CHECKED;
+	for(i=0;i<MAX_REBARBANDS;i++){
+		if(pobj_nv->SaveRebar[i].RebarID==0) break;
+
+		if(pobj_nv->SaveRebar[i].RebarID==ID_DOCCOMBO)
+			SetMenuItemInfo(hRebarMenu,IDM_DOCSELECTBAND,0,&MenuItemInfo);
+
+		if(pobj_nv->SaveRebar[i].RebarID==ID_STANDARDTOOLBAR)
+			SetMenuItemInfo(hRebarMenu,IDM_STANDARDBAND,0,&MenuItemInfo);
+
+		if(pobj_nv->SaveRebar[i].RebarID==ID_WEB_SEARCH)
+			SetMenuItemInfo(hRebarMenu,IDM_BANDMENU_WEB_SEARCH,0,&MenuItemInfo);
+
+#ifndef THETEXT
+	//ProjectEditorのみ
+		if(pobj_nv->SaveRebar[i].RebarID==ID_RELEASETOOLBAR)
+			SetMenuItemInfo(hRebarMenu,IDM_RELEASEBAND,0,&MenuItemInfo);
+
+		if(pobj_nv->SaveRebar[i].RebarID==ID_DEBUGGERTOOLBAR)
+			SetMenuItemInfo(hRebarMenu,IDM_DEBUGBAND,0,&MenuItemInfo);
+
+		if(pobj_nv->SaveRebar[i].RebarID==ID_SELECTCOMPILERCOMBO)
+			SetMenuItemInfo(hRebarMenu,IDM_SELECTCOMPILERBAND,0,&MenuItemInfo);
+#endif
+
+	}
+	if(pobj_nv->bNoGripper) MenuItemInfo.fState=MFS_CHECKED;
+	else MenuItemInfo.fState=MFS_UNCHECKED;
+	SetMenuItemInfo(hRebarMenu,IDM_NOGRIPPER,0,&MenuItemInfo);
+
+	//ポップアップメニューを表示
+	MousePos.x=PosX;
+	MousePos.y=PosY;
+	ClientToScreen(hwnd,&MousePos);
+	TrackPopupMenu(hRebarMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL);
+}
+
+
+
+
+
+
+WNDPROC OldDocComboProc;
+WNDPROC OldStandardToolbarProc;
+WNDPROC OldDebuggerToolbarProc;
+WNDPROC OldSelectCompilerComboProc;
+WNDPROC OldWebSearchProc,OldWebSearchEditProc;
+
+void ResetRebarData(void){
+	SAVEREBAR *psr;
+	psr=pobj_nv->SaveRebar;
+	int num=0;
+
+#ifdef THETEXT
+	//ファイル選択コンボボックス
+	psr[num].RebarID=ID_DOCCOMBO;
+	psr[num].RebarLength=150;
+	psr[num].IsBandBreak=0;
+	num++;
+
+	//スタンダードツールバー
+	psr[num].RebarID=ID_STANDARDTOOLBAR;
+	psr[num].RebarLength=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8+15;
+	psr[num].IsBandBreak=0;
+	num++;
+
+	//WebSearchコンボボックス
+	psr[num].RebarID=ID_WEB_SEARCH;
+	psr[num].RebarLength=100;
+	psr[num].IsBandBreak=0;
+	num++;
+#else
+	//ファイル選択コンボボックス
+	psr[num].RebarID=ID_DOCCOMBO;
+	psr[num].RebarLength=150;
+	psr[num].IsBandBreak=0;
+	num++;
+
+	//スタンダードツールバー
+	psr[num].RebarID=ID_STANDARDTOOLBAR;
+	psr[num].RebarLength=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8+15;
+	psr[num].IsBandBreak=0;
+	num++;
+
+	//プラットフォーム選択ツールバー
+	psr[num].RebarID=ID_SELECTCOMPILERCOMBO;
+	psr[num].RebarLength=100;
+	psr[num].IsBandBreak=0;
+	num++;
+
+	//デバッガツールバー
+	psr[num].RebarID=ID_DEBUGGERTOOLBAR;
+	psr[num].RebarLength=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8+15;
+	psr[num].IsBandBreak=0;
+	num++;
+
+	//リリースビルドツールバー
+	psr[num].RebarID=ID_RELEASETOOLBAR;
+	psr[num].RebarLength=2*23+15;
+	psr[num].IsBandBreak=0;
+	num++;
+#endif
+
+
+	psr[num].RebarID=0;
+
+	pobj_nv->bNoGripper=1;
+}
Index: /ProjectEditor/reg_exp.cpp
===================================================================
--- /ProjectEditor/reg_exp.cpp	(revision 3)
+++ /ProjectEditor/reg_exp.cpp	(revision 3)
@@ -0,0 +1,111 @@
+#include "common.h"
+
+CRegExp obj_RegExp;
+
+CRegExp::CRegExp(){
+	char temporary[MAX_PATH];
+	sprintf(temporary,"%sSubOperation\\BREGEXP.DLL",pj_editor_Dir);
+
+	hLib=LoadLibrary(temporary);
+
+	BMatch=(PFUNC_BMatch)GetProcAddress(hLib,"BMatch");
+	BSubst=(PFUNC_BSubst)GetProcAddress(hLib,"BSubst");
+	BTrans=(PFUNC_BTrans)GetProcAddress(hLib,"BTrans");
+	BSplit=(PFUNC_BSplit)GetProcAddress(hLib,"BSplit");
+	BRegfree=(PFUNC_BRegfree)GetProcAddress(hLib,"BRegfree");
+	BRegexpVersion=(PFUNC_BRegexpVersion)GetProcAddress(hLib,"BRegexpVersion");
+}
+CRegExp::~CRegExp(){
+	FreeLibrary(hLib);
+}
+
+char *CRegExp::compare(HWND hFindDlg,char *buffer,char *exp,BOOL IsBigSmall,int *pLength){
+	BREGEXP *rxp=0;
+	char msg[255];
+
+	char *pTemp;
+	pTemp=(char *)HeapAlloc(hHeap,0,lstrlen(exp)+255);
+	if(strstr(exp,"/")){
+		if(strstr(exp,"#")){
+			sprintf(pTemp,"m@(%s)@",exp);
+		}
+		else sprintf(pTemp,"m#(%s)#",exp);
+	}
+	else sprintf(pTemp,"m/(%s)/",exp);
+
+	//Shift-JISで表現
+	lstrcat(pTemp,"k");
+
+	//大文字・小文字
+	if(!IsBigSmall) lstrcat(pTemp,"i");
+
+	int result;
+	result=BMatch(pTemp,buffer,buffer+lstrlen(buffer),&rxp,msg);
+
+	HeapDefaultFree(pTemp);
+
+	if(!result){
+		if(rxp) BRegfree(rxp);
+		return 0;
+	}
+	else if(result==-1){
+		if(rxp) BRegfree(rxp);
+		MessageBox(hFindDlg,msg,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+		return (char *)-1;
+	}
+
+	*pLength=(rxp->outendp) - (rxp->outp);
+	if((*pLength)==0) return 0;
+
+	pTemp=ComparisonString(buffer,(char *)rxp->outp,0);
+
+	if(rxp) BRegfree(rxp);
+
+	return pTemp;
+}
+char *CRegExp::GetPermuStr(HWND hFindDlg,char *buffer,char *exp,char *szPermu,BOOL IsBigSmall){
+	BREGEXP *rxp=0;
+	char msg[255];
+
+	char *pTemp;
+	pTemp=(char *)HeapAlloc(hHeap,0,lstrlen(exp)+255);
+	if(strstr(exp,"/")||strstr(szPermu,"/")){
+		if(strstr(exp,"#")||strstr(szPermu,"#")){
+			sprintf(pTemp,"s@%s@%s@",exp,szPermu);
+		}
+		else sprintf(pTemp,"s#%s#%s#",exp,szPermu);
+	}
+	else sprintf(pTemp,"s/%s/%s/",exp,szPermu);
+
+	//Shift-JISで表現
+	lstrcat(pTemp,"k");
+
+	//大文字・小文字
+	if(!IsBigSmall) lstrcat(pTemp,"i");
+
+	int result;
+	result=BSubst(pTemp,buffer,buffer+lstrlen(buffer),&rxp,msg);
+
+	HeapDefaultFree(pTemp);
+
+	if(!result){
+		if(rxp) BRegfree(rxp);
+		return 0;
+	}
+	else if(result==-1){
+		if(rxp) BRegfree(rxp);
+		MessageBox(hFindDlg,msg,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
+		return (char *)-1;
+	}
+
+	int length;
+	length=(rxp->outendp) - (rxp->outp);
+
+	pTemp=(char *)HeapAlloc(hHeap,0,length+1);
+	memcpy(pTemp,rxp->outp,length);
+	pTemp[length]=0;
+
+	if(rxp) BRegfree(rxp);
+
+	return pTemp;
+}
Index: /ProjectEditor/resource.h
===================================================================
--- /ProjectEditor/resource.h	(revision 3)
+++ /ProjectEditor/resource.h	(revision 3)
@@ -0,0 +1,466 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by ProjectEditor.rc
+//
+#define IDCANCEL5                       13
+#define IDR_MAINMENU                    101
+#define IDR_ACCELERATOR1                105
+#define IDR_STANDARDTOOLBAR             106
+#define IDD_ABOUT                       108
+#define IDR_BASICTOOLBAR                111
+#define IDI_MAIN                        114
+#define IDI_BASICPROGRAM                118
+#define IDD_FIND                        119
+#define IDR_EDITMENU                    122
+#define IDD_MAKELINENUM                 124
+#define IDD_FINDALL                     126
+#define IDR_REBARMENU                   127
+#define IDD_SETWHOLE                    128
+#define IDD_PERMUTATION                 129
+#define IDD_NEWFILE                     130
+#define IDI_TEXTDOCUMENT                131
+#define IDD_SETEDITOR                   132
+#define IDD_SETTOOLBAR                  133
+#define IDD_NEWPROJECT_PAGE1            136
+#define IDB_BASE_NORMAL                 138
+#define IDB_BASE_PROMPT                 139
+#define IDD_NEWPROJECT_PAGE3            140
+#define IDD_PROJECT_VIEW                145
+#define IDR_PROJECTVIEW_FILETREEMENU    146
+#define IDR_PROJECTVIEW_FILETREEROOTMENU 147
+#define IDI_FOLDER_CLOSE                148
+#define IDI_FOLDER_OPEN                 149
+#define IDD_PROJECT_FILEPROPERTY        150
+#define IDI_WINDOW                      151
+#define IDR_PROJECTVIEW_MATERIALTREEMENU 153
+#define IDR_PROJECTVIEW_WINDOWTREEROOTMENU 157
+#define IDD_RAD_CTRLBUTTONS             158
+#define IDD_PROJECT_NEWWINDOW           161
+#define IDR_RADCONTEXTMENU              164
+#define IDD_RAD_PROP_WINDOW             166
+#define IDD_RAD_PROP_BUTTON             167
+#define IDD_RAD_PROP_WINDOW_RENAME      170
+#define IDD_RAD_EVENTCODE               171
+#define IDD_RAD_PROP_ITEM_RENAMEID      172
+#define IDD_RAD_PROP_WINDOW_EXSTYLE     174
+#define IDD_RAD_PROP_ITEM_EXSTYLE       176
+#define IDD_RAD_PROP_EDIT               177
+#define IDD_RAD_PROP_STATIC             178
+#define IDD_RAD_PROP_CHECKBOX           180
+#define IDD_RAD_PROP_RADIOBUTTON        182
+#define IDB_RADIOBUTTON                 183
+#define IDD_RAD_PROP_SCROLLBAR          184
+#define IDB_TITLE_BUTTON_CLOSE          189
+#define IDD_RAD_PROP_ITEM_RENAMECAPTION 190
+#define IDD_RAD_PROP_LISTBOX            192
+#define IDD_RAD_PROP_LISTVIEW           194
+#define IDD_RAD_PROP_TREEVIEW           198
+#define IDD_RAD_PROP_IMAGEBOX           201
+#define IDR_PROJECTVIEW_PROCEDURETREEMENU 202
+#define IDI_PROCEDURE                   203
+#define IDD_RAD_PROP_COMBOBOX           204
+#define IDD_RAD_PROP_GROUPBOX           208
+#define IDD_RAD_PROP_UPDOWN             211
+#define IDD_RAD_PROP_PROGRESSBAR        212
+#define IDD_RAD_PROP_TRACKBAR           214
+#define IDD_PROJECT_MENUEDIT            216
+#define IDD_PROJECT_NEWMENU             217
+#define IDD_INPUTID                     217
+#define IDD_PROJECT_OPTION              218
+#define IDD_PJ_OPTION2                  218
+#define IDD_NEWPROJECT_PAGE             219
+#define IDD_NEWPROJECT_PAGE2            219
+#define IDD_PROJECT_MENURENAME          220
+#define IDR_CONTROL                     221
+#define IDD_RAD_CHOOSECHILD             223
+#define IDD_RAD_PROP_CHILD              224
+#define IDD_SETRAD                      225
+#define IDI_FILE_PJ                     226
+#define IDD_SETFILELINK                 227
+#define IDI_FILE_BAS                    229
+#define IDI_FILE_SBP                    230
+#define IDI_MENU                        231
+#define IDI_FILE_ICON                   233
+#define IDI_FILE_BMP                    234
+#define IDI_FILE_CURSOR                 236
+#define IDB_TITLE                       238
+#define IDD_RAD_SUPPORT                 239
+#define IDD_PJ_OPTION1                  241
+#define IDB_PARAMHINT_QUESTION          243
+#define IDB_PARAMHINT_QUESTION2         244
+#define IDD_ICONEDIT_TOOL               246
+#define IDD_ICONEDIT_COLOR              247
+#define IDD_ICONEDIT_BUTTONS            248
+#define IDR_ICONTOOLBAR                 257
+#define IDD_ICONEDIT_ICONTYPE           259
+#define IDC_CURSOR_PEN                  260
+#define IDC_CURSOR_FILL                 261
+#define IDI_MEMBER_PRIVATE_FUNCTION     262
+#define IDI_MEMBER_PUBLIC_FUNCTION      263
+#define IDI_MEMBER_PRIVATE_VARIABLE     264
+#define IDI_MEMBER_PUBLIC_VARIABLE      265
+#define IDB_BASE_DOSPROMPT              266
+#define IDB_BASE_NON                    267
+#define IDB_BASE_DIRECTX                268
+#define IDC_FINDSTR                     1001
+#define IDC_FINDINWINDOW                1002
+#define IDC_FINDALL                     1003
+#define IDC_ISBIGSMALL                  1004
+#define IDC_SHOWITEM                    1018
+#define IDC_FINDLIST                    1020
+#define IDC_EDITLINE                    1022
+#define IDC_NEWLINE                     1023
+#define IDC_RESETTOOLBAR                1027
+#define IDC_PERMUTATIONSTR              1034
+#define IDC_PERMUTATIONNEXT             1036
+#define IDC_PERMUTATIONALL              1037
+#define IDC_FIND                        1038
+#define IDC_FILETYPELIST                1039
+#define IDC_SETFONT                     1041
+#define IDC_TABSIZE                     1042
+#define IDC_PARAMHINT                   1043
+#define IDC_ISAUTOINDENT                1044
+#define IDC_PROJECTNAME                 1053
+#define IDC_DIRPATH                     1054
+#define IDC_EXE_PROMPTBASE              1055
+#define IDC_EXE_WINDOWBASE              1056
+#define IDC_EXE_NOBASE                  1057
+#define IDC_IMAGE_WINDOW                1058
+#define IDC_IMAGE_PROMPT                1059
+#define IDC_HELPTEXT_OFBASE             1060
+#define IDC_BUTTON1                     1061
+#define IDC_PATHBROWSE                  1061
+#define IDC_RENAMEWINDOW                1061
+#define IDC_HINTFONT                    1061
+#define IDC_LINKFILE                    1061
+#define IDC_TEST                        1061
+#define IDC_ADD_ICONTYPE                1061
+#define IDC_PROJECTINFO                 1062
+#define IDC_DELETE_ICONTYPE             1062
+#define IDC_TAB_PROJECTINFO             1066
+#define IDC_SHOWHELLOWORLD              1068
+#define IDC_USING_FILE                  1069
+#define IDC_DEFINED_FILE                1070
+#define IDC_UPDATE_TIME                 1071
+#define IDC_FILETYPE                    1072
+#define IDC_TOOL_MOUSE                  1075
+#define IDC_TOOL_STATIC                 1076
+#define IDC_TOOL_BUTTON                 1077
+#define IDC_TOOL_EDIT                   1078
+#define IDC_TOOL_CHECKBOX               1079
+#define IDC_WINDOWNAME                  1080
+#define IDC_TOOL_RADIOBUTTON            1080
+#define IDC_WINDOWHANDLE                1081
+#define IDC_TOOL_GROUPBOX               1081
+#define IDC_WINDOWPROC                  1082
+#define IDC_TOOL_HSCROLLBAR             1082
+#define IDC_AUTOSET                     1083
+#define IDC_TOOL_VSCROLLBAR             1083
+#define IDC_TOOL_COMBOBOX               1084
+#define IDC_TOOL_LISTBOX                1085
+#define IDC_TOOL_UPDOWN                 1086
+#define IDC_TOOL_LISTVIEW               1087
+#define IDC_TOOL_TREEVIEW               1088
+#define IDC_CAPTION                     1090
+#define IDC_TOOL_IMAGEBOX               1091
+#define IDC_BGCOLOR                     1091
+#define IDC_TOOL_PROGRESSBAR            1092
+#define IDC_TOOL_TRACKBAR               1093
+#define IDC_IDNAME                      1095
+#define IDC_WINDOWSTYLE                 1097
+#define IDC_STYLE_HSCROLLBAR            1098
+#define IDC_STYLE_VSCROLLBAR            1099
+#define IDC_STYLE_CLIPSIBLINGS          1100
+#define IDC_STYLE_CLIPCHILDREN          1101
+#define IDC_STYLE_SYSMENU               1102
+#define IDC_STYLE_CAPTION               1104
+#define IDC_STYLE_MINIMIZE              1105
+#define IDC_STYLE_MAXIMIZE              1106
+#define IDC_STYLE_VISIBLE               1107
+#define IDC_STYLE_MAXIMIZEBOX           1108
+#define IDC_STYLE_MINIMIZEBOX           1109
+#define IDC_BORDERSTYLE                 1110
+#define IDC_STYLE_DISABLED              1111
+#define IDC_EXSTYLE                     1113
+#define IDC_PROCEDURENAME               1116
+#define IDC_EVENTLIST                   1117
+#define IDC_STYLE_GROUP                 1118
+#define IDC_STYLE_TABSTOP               1119
+#define IDC_BS_DEFPUSHBUTTON            1120
+#define IDC_BS_OWNERDRAW                1121
+#define IDC_BS_ICON                     1122
+#define IDC_BS_BITMAP                   1123
+#define IDC_BS_MULTILINE                1124
+#define IDC_BS_NOTIFY                   1125
+#define IDC_BS_HPOS                     1126
+#define IDC_BS_VPOS                     1127
+#define IDC_RENAMEID                    1128
+#define IDC_RENAMECAPTION               1129
+#define IDC_EXSTYLE_NOPARENTNOTIFY      1129
+#define IDC_EXSTYLE_TOPMOST             1130
+#define IDC_EXSTYLE_ACCEPTFILES         1131
+#define IDC_EXSTYLE_TRANSPARENT         1133
+#define IDC_EXSTYLE_TOOLWINDOW          1134
+#define IDC_EXSTYLE_DLGMODALFRAME       1135
+#define IDC_EXSTYLE_CLIENTEDGE          1136
+#define IDC_EXSTYLE_STATICEDGE          1137
+#define IDC_EXSTYLE_CONTEXTHELP         1138
+#define IDC_EXSTYLE_CONTROLPARENT       1139
+#define IDC_ES_MULTILINE                1161
+#define IDC_ES_NUMBER                   1162
+#define IDC_STYLE_HSCROLL               1163
+#define IDC_ES_AUTOHSCROLL              1164
+#define IDC_STYLE_VSCROLL               1165
+#define IDC_ES_AUTOVSCROLL              1166
+#define IDC_ES_PASSWORD                 1167
+#define IDC_ES_NOHIDESEL                1168
+#define IDC_ES_OEMCONVERT               1169
+#define IDC_ES_WANTRETURN               1170
+#define IDC_ES_UPPERCASE                1171
+#define IDC_ES_LOWERCASE                1172
+#define IDC_ES_READONLY                 1173
+#define IDC_ES_TEXTPOS                  1174
+#define IDC_LBS_SELECT                  1175
+#define IDC_LBS_OWNERDRAW               1176
+#define IDC_LVS_SORT                    1177
+#define IDC_SS_NOPREFIX                 1178
+#define IDC_SS_LEFTNOWORDWRAP           1179
+#define IDC_SS_NOTIFY                   1180
+#define IDC_SS_TEXTPOS                  1182
+#define IDC_BS_AUTO                     1184
+#define IDC_BS_3STATE                   1185
+#define IDC_BS_LEFTTEXT                 1187
+#define IDC_BS_PUSHLIKE                 1188
+#define IDC_SBS_POSITION                1207
+#define IDC_LBS_HASSTRINGS              1221
+#define IDC_LBS_SORT                    1223
+#define IDC_LBS_NOTIFY                  1224
+#define IDC_LBS_MULTICOLUMN             1225
+#define IDC_LBS_DISABLENOSCROLL         1226
+#define IDC_LBS_NOREDRAW                1227
+#define IDC_LBS_USETABSTOPS             1228
+#define IDC_LBS_WANTKEYBOARDINPUT       1229
+#define IDC_LVS_VIEW                    1240
+#define IDC_LVS_POSITION                1241
+#define IDC_LVS_SHOWSELALWAYS           1243
+#define IDC_LVS_SINGLESEL               1244
+#define IDC_LVS_AUTOARRANGE             1245
+#define IDC_LVS_NOLABELWRAP             1246
+#define IDC_LVS_EDITLABELS              1247
+#define IDC_LVS_NOSCROLL                1248
+#define IDC_LVS_NOCOLUMNHEADER          1249
+#define IDC_LVS_NOSORTHEADER            1250
+#define IDC_LVS_OWNERDRAWFIXED          1251
+#define IDC_LVS_SHAREIMAGELISTS         1252
+#define IDC_TVS_HASBUTTONS              1264
+#define IDC_TVS_HASLINES                1266
+#define IDC_TVS_LINESATROOT             1267
+#define IDC_TVS_EDITLABELS              1268
+#define IDC_TVS_DISABLEDRAGDROP         1269
+#define IDC_TVS_SHOWSELALWAYS           1270
+#define IDC_TVS_NOSCROLL                1271
+#define IDC_TVS_NOTOOLTIPS              1272
+#define IDC_TVS_CHECKBOXES              1273
+#define IDC_TVS_FULLROWSELECT           1274
+#define IDC_TVS_TRACKSELECT             1275
+#define IDC_TVS_SINGLEEXPAND            1276
+#define IDC_IMAGE_FILE                  1278
+#define IDC_IMAGE_TYPE                  1281
+#define IDC_SS_CENTERIMAGE              1283
+#define IDC_SS_RIGHTJUST                1284
+#define IDC_CBS_TYPE                    1288
+#define IDC_CBS_HASSTRINGS              1289
+#define IDC_CBS_SORT                    1290
+#define IDC_CBS_NOINTEGRALHEIGHT        1292
+#define IDC_CBS_OEMCONVERT              1293
+#define IDC_CBS_AUTOHSCROLL             1294
+#define IDC_CBS_DISABLENOSCROLL         1295
+#define IDC_CBS_UPPERCASE               1296
+#define IDC_CBS_LOWERCASE               1297
+#define IDC_CBS_OWNERDRAW               1301
+#define IDC_BS_POSITION                 1307
+#define IDC_UDS_AUTOBUDDY               1314
+#define IDC_UDS_SETBUDDYINT             1315
+#define IDC_UDS_NOTHOUSANDS             1316
+#define IDC_UDS_WRAP                    1317
+#define IDC_UDS_ARROWKEYS               1318
+#define IDC_UDS_SITUATION               1319
+#define IDC_UDS_ATTACH                  1320
+#define IDC_PROGRESS3                   1327
+#define IDC_PBS_SMOOTH                  1328
+#define IDC_PBS_VERTICAL                1329
+#define IDC_SLIDER2                     1331
+#define IDC_TBS_SITUATION               1332
+#define IDC_TBS_POINT                   1333
+#define IDC_TBS_NOTICKS                 1334
+#define IDC_TBS_AUTOTICKS               1335
+#define IDC_TBS_ENABLESELRANGE          1336
+#define IDC_SLIDER3                     1337
+#define IDC_HANDLE                      1339
+#define IDC_PATH                        1340
+#define IDC_CHANGEPATH                  1341
+#define IDC_IMAGE_SITUATION             1342
+#define IDC_WINDOWMENU                  1343
+#define IDC_ICONRES                     1344
+#define IDC_UP                          1347
+#define IDC_DOWN                        1348
+#define IDC_CHECKED                     1349
+#define IDC_DISABLED                    1350
+#define IDC_INSERTMENUITEM              1352
+#define IDC_DELETEMENUITEM              1353
+#define IDC_POPUP                       1356
+#define IDC_SEPARATOR                   1357
+#define IDC_DEFWINDOW                   1358
+#define IDC_API_MMSYS                   1362
+#define IDC_DEFAULT                     1363
+#define IDC_API_MMSYS2                  1363
+#define IDC_MMSYS                       1364
+#define IDC_MENU                        1365
+#define IDC_API_COMMCTRL                1368
+#define IDC_RENAME                      1369
+#define IDC_IDSTATIC                    1370
+#define IDC_CAPTIONSTATIC               1371
+#define IDC_STATUSBAR                   1373
+#define IDC_STATIC_HINTFONT             1374
+#define IDC_CHECK3                      1377
+#define IDC_SBP                         1377
+#define IDC_WINDOWLIST                  1380
+#define IDC_STATIC_HANDLE               1383
+#define IDC_SAVECHECK                   1384
+#define IDC_SUPPORT_COMMENT             1386
+#define IDC_LINEADJUST                  1387
+#define IDC_BAS                         1391
+#define IDC_ABP                         1392
+#define IDC_PJ                          1393
+#define IDC_MODALDLG                    1394
+#define IDC_MODELESSDLG                 1395
+#define IDC_DLL                         1397
+#define IDC_EXE_DOSPROMPTBASE           1399
+#define IDC_API_RICHEDIT                1401
+#define IDC_FILE                        1402
+#define IDC_RESOURCE                    1403
+#define IDC_RESCOMBO                    1404
+#define IDC_STATIC_ICON                 1405
+#define IDC_API_WINSOCK                 1406
+#define IDC_XPOS                        1408
+#define IDC_YPOS                        1409
+#define IDC_WIDTH                       1410
+#define IDC_HEIGHT                      1411
+#define IDC_SPIN1                       1414
+#define IDC_SPIN2                       1415
+#define IDC_EDIT_RELEASE                1415
+#define IDC_SPIN3                       1416
+#define IDC_EDIT_DEBUG                  1416
+#define IDC_ADDTOPROJECT                1416
+#define IDC_SPIN4                       1417
+#define IDC_FILENAME                    1417
+#define IDC_STATIC_FILENAME             1418
+#define IDC_CLIP                        1419
+#define IDC_ICONTYPECOMBO               1420
+#define IDC_STATIC_COLOR                1422
+#define IDC_NOWCOLOR                    1423
+#define IDC_TYPELIST                    1425
+#define IDC_COMPLEMENT                  1427
+#define IDC_STATIC_SETFONT              1428
+#define IDC_STATIC_TABSIZE              1429
+#define IDC_EXE_DIRECTX                 1432
+#define IDC_IMAGE_DOSPROMPT             1433
+#define IDC_IMAGE_NON                   1434
+#define IDC_IMAGE_DIRECTX               1435
+#define IDM_EXIT                        40001
+#define IDM_NEW                         40002
+#define IDM_OPEN                        40003
+#define IDM_CLOSE                       40004
+#define IDM_SAVE                        40008
+#define IDM_NEWSAVE                     40009
+#define IDM_UNDO                        40010
+#define IDM_CUT                         40011
+#define IDM_COPY                        40012
+#define IDM_PASTE                       40013
+#define IDM_DELETE                      40014
+#define IDM_ABOUT                       40015
+#define IDM_WINDOWCHARGE                40017
+#define IDM_ALLSAVE                     40020
+#define IDM_ALLSELECT                   40021
+#define IDM_FIND                        40024
+#define IDM_REDO                        40034
+#define IDM_TOPIC                       40037
+#define ID_MENUITEM40038                40038
+#define IDM_DOCSELECTBAND               40039
+#define IDM_STANDARDBAND                40040
+#define IDM_BASICBAND                   40041
+#define IDM_SET                         40042
+#define IDM_PERMUTATION                 40044
+#define IDM_DSHOMEPAGE                  40047
+#define IDM_ACTBDL                      40048
+#define IDM_PROJECT_OPEN                40051
+#define IDM_PROJECT_CLOSE               40052
+#define IDM_PROJECT_SAVE                40053
+#define IDM_PROJECTVIEW                 40054
+#define IDM_FILETREE_PROPERTY           40057
+#define IDM_FILETREE_OPEN               40058
+#define IDM_FILETREE_INSERT             40059
+#define IDM_FILETREE_DELETE             40060
+#define IDM_WINDOWTREE_OPEN             40062
+#define IDM_MATERIALTREE_OPEN           40062
+#define IDM_WINDOWTREE_DELETE           40063
+#define IDM_MATERIALTREE_DELETE         40063
+#define IDM_WINDOWTREE_PROPERTY         40064
+#define IDM_WINDOWTREE_INSERT           40065
+#define IDM_MATERIALTREE_INSERT         40065
+#define IDM_MATERIALTREE_INSERTWINDOW   40065
+#define IDM_RAD_ITEM_DELETE             40067
+#define IDM_RAD_WINDOW_EVENTCODE        40069
+#define IDM_ACCEL_UNDO                  -25466
+#define IDM_ACCEL_REDO                  -25465
+#define IDM_PROCEDURETREE_SHOW          40072
+#define IDM_RAD_WINDOW_MENUEVENTCODE    40074
+#define IDM_MENUTREE_RENAMEID           40075
+#define IDM_PROJECT_OPTION              40076
+#define IDM_TOPMOST                     40077
+#define ID_BUTTON40079                  40079
+#define ID_BUTTON40080                  40080
+#define ID_BUTTON40081                  40081
+#define ID_BUTTON40082                  40082
+#define ID_BUTTON40083                  40083
+#define ID_BUTTON40084                  40084
+#define ID_BUTTON40085                  40085
+#define ID_BUTTON40086                  40086
+#define ID_BUTTON40087                  40087
+#define ID_BUTTON40088                  40088
+#define ID_BUTTON40089                  40089
+#define ID_BUTTON40090                  40090
+#define ID_BUTTON40091                  40091
+#define ID_BUTTON40092                  40092
+#define ID_BUTTON40093                  40093
+#define ID_BUTTON40094                  40094
+#define ID_BUTTON40095                  40095
+#define ID_BUTTON40097                  40097
+#define IDM_DEBUG                       40101
+#define IDM_RELEASECOMPILE              40106
+#define IDM_DEBUGCOMPILE                40108
+#define IDM_MATERIALTREE_INSERTICON     40109
+#define IDM_MATERIALTREE_INSERTMENU     40110
+#define IDM_MATERIALTREE_ICON_SETMAIN   40113
+#define IDM_MATERIALTREE_INSERTBITMAP   40115
+#define IDM_MATERIALTREE_INSERTCURSOR   40116
+#define IDM_NOGRIPPER                   40117
+#define IDC_TOOL_SELECT                 40119
+#define IDC_TOOL_PEN                    40120
+#define IDC_TOOL_LINE                   40121
+#define IDC_TOOL_RECTANGLE              40123
+#define IDC_TOOL_ELLIPSE                40124
+#define IDC_TOOL_FILL                   40126
+#define IDC_TOOL_FILLRECT               40127
+#define IDC_TOOL_FILLRECT2              40128
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        269
+#define _APS_NEXT_COMMAND_VALUE         40129
+#define _APS_NEXT_CONTROL_VALUE         1435
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
