Develop and Download Open Source Software

Browse Subversion Repository

Contents of /CopalPro/Exec.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Thu Jul 28 09:05:52 2011 UTC (12 years, 9 months ago) by kaityo
File MIME type: text/x-c++src
File size: 6130 byte(s)
First Commit
1 //---------------------------------------------------------------------------
2 // 実行関係のメソッド
3 //---------------------------------------------------------------------------
4 #include <vcl.h>
5 #include <windows.h>
6 #pragma hdrstop
7
8 #include <vcl\Clipbrd.hpp>
9 #include "main.h"
10 #include "Exec.h"
11 #include "Editor.h"
12 #include "KExecProc.h"
13
14 //---------------------------------------------------------------------------
15 #pragma package(smart_init)
16 //---------------------------------------------------------------------------
17 /**
18 * スクリプトを実行
19 */
20 void
21 TFMain::Execute(AnsiString File) {
22
23 if(!CopalConfig->CheckPath()) {
24 return;
25 }
26 CloseError();
27
28 FResult->Init();
29
30 AnsiString cmd = CopalConfig->GetExePath();
31 cmd += " " + CopalConfig->GetOption();
32 cmd += " \"" + CopalConfig->GetTempFile();
33 cmd += "\" " + File;
34
35 FScript->SaveToTemporaryFile(CopalConfig->GetTempFile());
36
37 KExecProc *ep = new KExecProc(cmd);
38
39 //CGIデータを使う
40 if(CopalConfig->UseCGI) {
41 FEditor->GetCGIData(ep);
42 }
43
44
45 bool result =ep->Execute();
46
47 if(FScript->GetCode()==C_SJIS) {
48 FResult->LoadFromStream(ep->GetStdoutStream());
49 FStdError->LoadFromStream(ep->GetStderrorStream());
50 } else {
51 TMemoryStream *msOut = new TMemoryStream;
52 KCodeConv::ConvertStream((TMemoryStream*)ep->GetStdoutStream(),msOut,"-s");
53 FResult->LoadFromStream(msOut);
54 delete msOut;
55
56 TMemoryStream *msErr = new TMemoryStream;
57 KCodeConv::ConvertStream((TMemoryStream*)ep->GetStderrorStream(),msErr,"-s");
58 FStdError->LoadFromStream(msErr);
59 delete msErr;
60 }
61
62 if(CopalConfig->CheckErrorCode()){
63 if(result) {
64 ChangeWindow(RESULT_WINDOW);
65 } else {
66 ChangeWindow(SCRIPT_WINDOW);
67 }
68 }else{
69 if(FStdError->IsEmpty()){
70 ChangeWindow(RESULT_WINDOW);
71 }else{
72 ChangeWindow(SCRIPT_WINDOW);
73 }
74 }
75
76 SetErrorCode(ep->GetExitCode());
77 delete ep;
78
79 if(CopalConfig->GetShowError()& GetErrorCode()!=0) {
80 ShowMessage("Error Code : "+ IntToStr(GetErrorCode()));
81 }
82
83 DeleteFile(CopalConfig->GetTempFile());
84 }
85 //---------------------------------------------------------------------------
86 /**
87 * DOS窓で実行する
88 */
89 void
90 TFMain::ExecDOS(void) {
91 FScript->SaveToTemporaryFile(CopalConfig->GetTempFile());
92 TStringList *st1 = new TStringList;
93 AnsiString as1 = CopalConfig->GetTempFile();
94 as1 = "\"" + as1 + "\"";
95 st1->Add("\""+CopalConfig->GetExePath()+"\" "+as1);
96 if(CopalConfig->UsePause) {
97 st1->Add("@PAUSE");
98 }
99 st1->SaveToFile(CopalConfig->TempBat);
100 delete st1;
101
102 ShellExecute(this->Handle,NULL,CopalConfig->TempBat.c_str(),NULL,NULL,SW_SHOW);
103
104 }
105 //---------------------------------------------------------------------------
106 /**
107 * クリップボードの内容を入力として実行
108 */
109 void
110 TFMain::ExecToClip(void) {
111
112 TClipboard *Co = Clipboard();
113 char filename[256];
114 char path[256];
115
116 GetTempPath(sizeof(path),path);
117 GetTempFileName(path,"cpl",0,filename);
118 AnsiString FileName = filename;
119 TStringList *st1 = new TStringList;
120 st1->Text = Co->AsText;
121 st1->SaveToFile(FileName);
122
123 Execute(FileName);
124
125 // 実行結果をクリップボードにコピー
126 if(!MMNotClip->Checked) {
127 Co->AsText = FResult->REResult->Text;
128 }
129
130 DeleteFile(FileName);
131 delete st1;
132
133 if(MMSaveAll->Checked) {
134 SaveResultToFile();
135 }
136
137 if(MMToBrowserAll->Checked) {
138 ToBrowser();
139 }
140 }
141 //---------------------------------------------------------------------------
142 /**
143 * 実行結果をブラウザへ
144 */
145 void
146 TFMain::ExecToBrowser(void) {
147
148 if(MMMemoryDroppedFiles->Checked) {
149 Execute(CopalConfig->LastDroppedFiles);
150 } else {
151 Execute("");
152 }
153
154 if(MMSaveAll->Checked) {
155 SaveResultToFile();
156 }
157
158 ToBrowser();
159 }
160 //---------------------------------------------------------------------------
161 /**
162 * ドロップを受けての実行
163 */
164 void
165 TFMain::ExecuteOnDrop(AnsiString Files, AnsiString HintText) {
166
167 Execute(Files);
168
169 if(MMSaveAll->Checked) {
170 SaveResultToFile();
171 }
172
173 if(MMToBrowserAll->Checked) {
174 ToBrowser();
175 }
176
177 //ドロップしたファイル名を保存
178 CopalConfig->LastDroppedFiles = Files;
179
180 //ドロップファイルをTipヘルプで見られるようにする
181 TBMemoryDroppedFiles->Hint = "ドロップファイルを記憶\n\n 直前にドロップしたファイル"+HintText;
182 if(CopalConfig->MemoryFileWhenDropped && !MMMemoryDroppedFiles->Checked) {
183 MMMemoryDroppedFiles->Click();
184 }
185 //ドロップ時にカレントディレクトリを変更
186 if(CopalConfig->ChangeCurrentDirOnDrop) {
187 AnsiString Dir = ExtractFileDir(Files);
188 if(!(Dir.AnsiPos("デスクトップ")&&CopalConfig->DontChangeDirFromDesktop)) {
189 if(Dir!="") {
190 FResult->SetMyCurrentDir(Dir);
191 UpdateStatusBar();
192 }
193 }
194 }
195 }
196 //---------------------------------------------------------------------------
197 // 実行関連のサブルーチン
198 //---------------------------------------------------------------------------
199 /**
200 *テキストのヘッダ削除
201 */
202 void
203 CutHeader(TStringList *st) {
204 if(st->Count <=2){
205 return;
206 }
207 if(st->Strings[0].AnsiPos("Content-type")) {
208 st->Delete(0);
209 st->Delete(0);
210 }
211 }
212 //---------------------------------------------------------------------------
213 /**
214 * ブラウザへ出力
215 */
216 void
217 TFMain::ToBrowser(void) {
218
219 //エラーがあったら実行しない
220 if(CopalConfig->CheckErrorCode()){
221 if(GetErrorCode()!=0) {
222 return;
223 }
224 }else{
225 if(!FStdError->IsEmpty()) {
226 return;
227 }
228 }
229
230 TStringList *st1 = new TStringList;
231 st1->Text = FResult->REResult->Text;
232 if(CopalConfig->CutHead){
233 CutHeader(st1);
234 }
235 st1->SaveToFile(CopalConfig->TempHtml);
236 ShellExecute(Handle,NULL,CopalConfig->TempHtml.c_str(),NULL,NULL,SW_SHOW);
237 delete st1;
238 }
239 //---------------------------------------------------------------------------
240 /**
241 * 結果を常にファイルへ保存
242 */
243 void
244 TFMain::SaveResultToFile(void) {
245 FResult->SaveToFile(CopalConfig->SaveResultFile);
246 }
247 //---------------------------------------------------------------------------

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26