source: dev/trunk/abdev/BasicCompiler_Common/MakeExe.cpp@ 280

Last change on this file since 280 was 280, checked in by dai_9181, 17 years ago
File size: 4.9 KB
Line 
1#include "stdafx.h"
2
3#include <jenga/include/smoothie/Smoothie.h>
4
5#include <Compiler.h>
6
7#include "common.h"
8
9void StepCompileProgress(void){
10 extern HWND hMainDlg;
11 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_STEPIT,0,0);
12}
13
14void AddSourceCode(char *buffer){
15 char *temp;
16 temp=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)+8192);
17 lstrcpy(temp,buffer);
18
19 //エスケープシーケンス設定
20 SetEscapeSequenceFormat(temp);
21
22 //コマンド対応
23 ChangeCommandToCode(temp);
24
25 //最後尾に貼り付け
26 compiler.GetObjectModule().GetCurrentSource().Addition( temp );
27
28 HeapDefaultFree(temp);
29}
30
31void OutputExe(void){
32 extern HANDLE hHeap;
33 extern char *basbuf;
34 extern int ErrorNum;
35 extern BOOL bStopCompile;
36 extern HWND hMainDlg;
37 int i3;
38 char temp2[MAX_PATH];
39
40 // 開始時刻を記録
41 DWORD beforeTickCount = GetTickCount();
42
43 //プログレスバーの設定
44 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_SETRANGE,0,MAKELPARAM(0,6));
45 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_SETSTEP,1,0);
46
47 //"中断"
48 SetDlgItemText(hMainDlg,IDOK,STRING_STOP);
49
50 //中断フラグを初期化
51 bStopCompile=0;
52
53 //サブシステムのタイプ
54 extern unsigned short TypeOfSubSystem;
55 TypeOfSubSystem=IMAGE_SUBSYSTEM_WINDOWS_GUI;
56
57 //プログラムをファイルから読み込む
58 extern char SourceFileName[MAX_PATH];
59 compiler.GetObjectModule().SetCurrentSourceIndex( compiler.GetObjectModule().GetSources().size() );
60 compiler.GetObjectModule().GetSources().push_back( BasicSource() );
61 if( !compiler.GetObjectModule().GetCurrentSource().ReadFile( SourceFileName ) ){
62 SetError(201,SourceFileName,-1);
63 goto EndCompile;
64 }
65
66 //イメージベースの設定
67 extern DWORD ImageBase;
68 if(compiler.IsDll()) ImageBase=0x10000000;
69 else ImageBase=0x00400000;
70
71 extern BOOL bError;
72 if(bError||bStopCompile) goto EndCompile;
73
74
75 //////////////////////////
76 // 中間コードの生成を開始
77 extern BOOL bClipCompileView;
78
79 //"最適化中..."
80 CompileMessage(STRING_COMPILE_OPTIMIZING);
81
82 //カッコを相互チェック(ダブルクォートチェックチェックを含む)
83 CheckParenthesis(basbuf);
84
85 if(bError||bStopCompile) goto EndCompile;
86
87 //コンパイルダイアログのプログレスバーを上げる
88 StepCompileProgress();
89
90 //ディレクティブ
91 DirectiveCheck();
92
93 //Next命令語を正規表現に変換
94 //NextCommandFormat(basbuf);
95
96 //エスケープシーケンス設定
97 SetEscapeSequenceFormat(basbuf);
98
99 //Def命令語をFunction命令語に変換
100 DefCommandFormat(basbuf);
101
102 //すべてのIf命令語をブロック形式に変換
103 IfCommandFormat(basbuf);
104
105 //対になる命令語を相互チェック
106 //CheckPareCommand();
107
108 if(bError||bStopCompile) goto EndCompile;
109
110 //コンパイルダイアログのプログレスバーを上げる
111 StepCompileProgress();
112
113 //重複エラー情報管理のメモリを確保
114 extern char **SynonymErrorWords;
115 extern int SynonymErrorNum;
116 SynonymErrorNum=0;
117 SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);
118
119 ChangeCommandToCode(basbuf);
120
121 //重複エラー情報管理のメモリを解放
122 for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]);
123 HeapDefaultFree(SynonymErrorWords);
124 SynonymErrorWords=0;
125
126 if(bError||bStopCompile){
127 //定数に関する情報を解放
128 goto EndCompile;
129 }
130
131 StepCompileProgress();
132
133
134 ///////////////////////
135 // コンパイル開始
136
137 //"コンパイル中..."
138 CompileMessage(STRING_COMPILE_COMPILING);
139
140 Compile();
141
142 //リソース情報を解放
143 extern RESOURCEDATAINFO *pCursorResourceInfo;
144 extern RESOURCEDATAINFO *pIconResourceInfo;
145 extern RESOURCEDATAINFO *pBitmapResourceInfo;
146 HeapDefaultFree(pCursorResourceInfo);
147 HeapDefaultFree(pBitmapResourceInfo);
148 HeapDefaultFree(pIconResourceInfo);
149
150 //コンパイルダイアログのプログレスバーを上げる
151 StepCompileProgress();
152
153
154 //////////////////////////
155 // 終了処理
156EndCompile:
157 if(bStopCompile){
158 PostMessage(GetDlgItem(hMainDlg,IDC_PROGRESS),PBM_SETPOS,0,0);
159
160 //"コンパイルはユーザーにより中断されました。"
161 CompileMessage(STRING_COMPILE_STOP);
162 }
163 else{
164 extern int CompileMsgNum;
165 extern int WarningNum;
166 if(bError==0){
167 //"コンパイルは正常に完了しました(エラー:%d、警告:%d)"
168 sprintf(temp2,
169 STRING_COMPILE_SUCCESS,
170 ErrorNum-CompileMsgNum-WarningNum,
171 WarningNum,
172 ((double)(GetTickCount() - beforeTickCount))/1000
173 );
174 }
175 else{
176 //"コンパイルは中断されました(エラー:%d、警告:%d)"
177 sprintf(temp2,STRING_COMPILE_ERROR,ErrorNum-CompileMsgNum-WarningNum,WarningNum);
178 }
179
180 CompileMessage("");
181 CompileMessage("-----------------------------------------------------");
182 CompileMessage(temp2);
183 }
184
185 //"閉じる"
186 SetDlgItemText(hMainDlg,IDOK,STRING_CLOSE);
187
188#ifdef _DEBUG
189 // デバッグモードのときはダイアログが隠れている
190 ShowWindow(hMainDlg,SW_SHOW);
191#endif
192}
193int MainThread(DWORD dummy){
194 extern BOOL bDebugCompile;
195 extern BOOL bDebugRun;
196 extern int bError;
197
198 if(bDebugRun){
199 if(bDebugCompile){
200 bDebugRun=0;
201
202 //デバッグコンパイル
203 OutputExe();
204
205 bDebugRun=1;
206 }
207
208 //デバッグ実行
209 if(bError==0) DebugProgram();
210 }
211 else{
212 //リリースコンパイル
213 OutputExe();
214 }
215
216 return 0;
217}
Note: See TracBrowser for help on using the repository browser.