ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/VTBFileUtil2/VTBFileUtil2.cxx
(Generate patch)

Comparing trunk/VTBFileUtil2/VTBFileUtil2.cxx (file contents):
Revision 255 by douglas, 2003-08-15T17:12:57-07:00 vs.
Revision 293 by douglas, 2003-09-10T19:15:05-07:00

# Line 2 | Line 2
2   //
3   // Douglas Thrift
4   //
5 < // $Id: VTBFileUtil2.cxx,v 1.1 2003/08/16 00:12:57 douglas Exp $
5 > // $Id: VTBFileUtil2.cxx,v 1.14 2003/09/11 02:15:05 douglas Exp $
6  
7   #include "VTBFileUtil2.h"
8 + #include "Chooser.h"
9 + #include "DiscBrowse.h"
10 + #include "ScanUtility.h"
11  
12   #include <io.h>
13   #include <fcntl.h>
# Line 12 | Line 15
15   bool debug = false;
16   string program;
17   string programName = "Vance Thrift and Biller File Utility 2";
18 < unsigned programVersion = 0x00101000;
18 > string programVersion = "2.0";
19 > Gui gui;
20  
21 < inline void arguments(vector<string>& args, const string& command)
21 > static INT_PTR CALLBACK usage(HWND dialog, UINT msg, WPARAM w, LPARAM l);
22 > static INT_PTR CALLBACK version(HWND dialog, UINT msg, WPARAM w, LPARAM l);
23 >
24 > static inline void arguments(vector<string>& args, const string& command)
25   {
26          istringstream line(command);
27          string arg;
# Line 32 | Line 39 | inline void arguments(vector<string>& ar
39                          line.get();
40                  }
41  
42 <                args.push_back(arg);
42 >                if (arg != "")
43 >                {
44 >                        args.push_back(arg);
45 >                }
46          }
47          while (line.good());
48   }
49  
50 < inline void munge(void)
50 > static inline void munge(void)
51   {
52          AllocConsole();
53 <        SetConsoleTitle("Renegade Map Selector");
53 >        SetConsoleTitle(programName.c_str());
54  
55          int hin = _open_osfhandle(long(GetStdHandle(STD_INPUT_HANDLE)), _O_TEXT);
56          int hout = _open_osfhandle(long(GetStdHandle(STD_OUTPUT_HANDLE)), _O_TEXT);
# Line 63 | Line 73 | inline void munge(void)
73          cerr.sync_with_stdio();
74   }
75  
76 + void usage(HWND parent)
77 + {
78 +        DialogBox(gui.instance, MAKEINTRESOURCE(IDD_USAGE), parent, usage);
79 + }
80 +
81 + void version(HWND parent)
82 + {
83 +        DialogBox(gui.instance, MAKEINTRESOURCE(IDD_VERSION), parent, version);
84 + }
85 +
86   int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
87          lpCmdLine, int nShowCmd)
88   {
89          vector<string> args;
90          
91 +        InitCommonControls();
92 +        CoInitialize(NULL);
93          arguments(args, GetCommandLine());
94  
95          program = args[0];
96  
97 +        Mode mode = none;
98 +
99 +        gui.instance = hInstance;
100 +        gui.icon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_VTB_ICON));
101 +        gui.show = nShowCmd;
102 +
103 +        if (toAnsi(toWide("Douglas")) != "Douglas")
104 +        {
105 +                string message = "Could not find the Microsoft Layer for Unicode.";
106 +
107 +                switch (MessageBox(NULL, message.c_str(), programName.c_str(),
108 +                        MB_ABORTRETRYIGNORE | MB_ICONERROR))
109 +                {
110 +                case IDABORT:
111 +                        return 1;
112 +                        break;
113 +                case IDRETRY:
114 +                        {
115 +                                string url = string("http://www.microsoft.com/downloads/detai")
116 +                                        + "ls.aspx?FamilyID=73ba7bd7-ed06-4f0d-80a4-2a7eeaee17e2&D"
117 +                                        + "isplayLang=en", message = string("Click OK when the Mi")
118 +                                        + "crosoft Layer for Unicode is installed.";
119 +
120 +                                ShellExecute(NULL, NULL, url.c_str(), NULL, NULL, gui.show);
121 +                                MessageBox(NULL, message.c_str(), programName.c_str(), MB_OK |
122 +                                        MB_ICONINFORMATION);
123 +
124 +                                STARTUPINFO start;
125 +                                PROCESS_INFORMATION info;
126 +
127 +                                start.cb = sizeof(start);
128 +                                start.lpReserved = NULL;
129 +                                start.lpDesktop = NULL;
130 +                                start.lpTitle = NULL;
131 +                                start.dwFlags = STARTF_FORCEONFEEDBACK | STARTF_USESHOWWINDOW;
132 +                                start.wShowWindow = gui.show;
133 +                                start.cbReserved2 = 0;
134 +                                start.lpReserved2 = NULL;
135 +
136 +                                CreateProcess(program.c_str(), GetCommandLine(), NULL, NULL,
137 +                                        FALSE, 0, NULL, NULL, &start, &info);
138 +                                CloseHandle(info.hProcess);
139 +                                CloseHandle(info.hThread);
140 +                        }
141 +                        return 0;
142 +                        break;
143 +                case IDIGNORE:
144 +                        break;
145 +                }
146 +        }
147 +
148          for (unsigned index = 1; index < args.size(); index++)
149          {
150                  if (args[index] == "-help")
# Line 86 | Line 159 | int WINAPI WinMain(HINSTANCE hInstance,
159                  }
160                  else if (args[index] == "-disc")
161                  {
162 <                        //
162 >                        mode = disc;
163                  }
164                  else if (args[index] == "-scan")
165                  {
166 <                        //
166 >                        mode = scan;
167                  }
168                  else if (args[index] == "-D")
169                  {
# Line 98 | Line 171 | int WINAPI WinMain(HINSTANCE hInstance,
171                          {
172                                  debug = true;
173  
174 <                                munge();
174 >                                cerr.setf(ios_base::boolalpha);
175 >                        }
176 >                }
177 >                else
178 >                {
179 >                        string message = "Unknown argument: " + args[index];
180 >
181 >                        MessageBox(NULL, message.c_str(), programName.c_str(),
182 >                                MB_ICONWARNING);
183 >                }
184 >        }
185 >
186 >        if (debug)
187 >        {
188 >                munge();
189 >                cerr << "mode = ";
190 >
191 >                switch (mode)
192 >                {
193 >                case none:
194 >                        cerr << "none";
195 >                        break;
196 >                case disc:
197 >                        cerr << "disc";
198 >                        break;
199 >                case scan:
200 >                        cerr << "scan";
201 >                        break;
202 >                default:
203 >                        cerr << mode;
204 >                        break;
205 >                }
206 >
207 >                cerr << "\n";
208 >        }
209 >
210 >        License license;
211 >
212 >        license.check();
213 >
214 >        if (mode == none)
215 >        {
216 >                Chooser chooser;
217 >
218 >                mode = chooser.choose();
219 >
220 >                if (debug)
221 >                {
222 >                        cerr << "mode = ";
223 >
224 >                        switch (mode)
225 >                        {
226 >                        case none:
227 >                                cerr << "none";
228 >                                break;
229 >                        case disc:
230 >                                cerr << "disc";
231 >                                break;
232 >                        case scan:
233 >                                cerr << "scan";
234 >                                break;
235 >                        default:
236 >                                cerr << mode;
237 >                                break;
238                          }
239 +
240 +                        cerr << "\n";
241                  }
242          }
243  
244 +        if (mode == disc)
245 +        {
246 +                DiscBrowse browser;
247 +
248 +                browser.run();
249 +        }
250 +        else if (mode == scan)
251 +        {
252 +                ScanUtility utility;
253 +
254 +                utility.run();
255 +        }
256 +
257 +        CoUninitialize();
258 +
259 +        if (debug)
260 +        {
261 +                char cmd[MAX_PATH];
262 +                char arg[MAX_PATH];
263 +
264 +                GetEnvironmentVariable("ComSpec", cmd, MAX_PATH);
265 +                sprintf(arg, "%s /c pause", cmd);
266 +
267 +                STARTUPINFO start;
268 +                PROCESS_INFORMATION info;
269 +
270 +                start.cb = sizeof(start);
271 +                start.lpReserved = NULL;
272 +                start.lpDesktop = NULL;
273 +                start.lpTitle = NULL;
274 +                start.dwFlags = STARTF_USESTDHANDLES;
275 +                start.cbReserved2 = 0;
276 +                start.lpReserved2 = NULL;
277 +                start.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
278 +                start.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
279 +                start.hStdError = GetStdHandle(STD_ERROR_HANDLE);
280 +
281 +                CreateProcess(cmd, arg, NULL, NULL, TRUE, 0, NULL, NULL, &start, &info);
282 +                CloseHandle(info.hProcess);
283 +                CloseHandle(info.hThread);
284 +        }
285 +
286          return 0;
287   }
288  
289 < void usage(void)
289 > INT_PTR CALLBACK usage(HWND dialog, UINT msg, WPARAM w, LPARAM l)
290   {
291 <        //
291 >        switch (msg)
292 >        {
293 >        case WM_INITDIALOG:
294 >                center(dialog);
295 >                SendMessage(dialog, WM_SETICON, ICON_BIG, LPARAM(gui.icon));
296 >                SendMessage(dialog, WM_SETTEXT, 0, LPARAM(programName.c_str()));
297 >
298 >                {
299 >                        ostringstream usage;
300 >
301 >                        usage << "Usage: VTBFileUtil [-help | -version | -disc | -scan]\r"
302 >                                << "\n"
303 >                                << "\r\nOptions:\r\n"
304 >                                << "  -help\t\tDisplay this information\r\n"
305 >                                << "  -version\t\tDisplay version information\r\n"
306 >                                << "  -disc\t\tStart in Disc Browse mode\r\n"
307 >                                << "  -scan\t\tStart in Scan Utility mode\r\n";
308 >
309 >                        SetDlgItemText(dialog, IDC_USAGE_TEXT, usage.str().c_str());
310 >                }
311 >                break;
312 >        case WM_COMMAND:
313 >                switch (LOWORD(w))
314 >                {
315 >                case IDOK:
316 >                case IDCANCEL:
317 >                        EndDialog(dialog, w);
318 >                        return TRUE;
319 >                default:
320 >                        break;
321 >                }
322 >                break;
323 >        }
324 >
325 >        return FALSE;
326   }
327  
328 < void version(void)
328 > INT_PTR CALLBACK version(HWND dialog, UINT msg, WPARAM w, LPARAM l)
329   {
330 <        //
330 >        switch (msg)
331 >        {
332 >        case WM_INITDIALOG:
333 >                center(dialog);
334 >                SendMessage(dialog, WM_SETICON, ICON_BIG, LPARAM(gui.icon));
335 >                SendMessage(dialog, WM_SETTEXT, 0, LPARAM(programName.c_str()));
336 >                
337 >                {
338 >                        ostringstream version;
339 >
340 >                        version << programName << " (" << programVersion << ")\r\n\r\n"
341 >                                << "Copyright © 2003, Douglas Thrift.\n";
342 >
343 >                        SetDlgItemText(dialog, IDC_VERSION_TEXT, version.str().c_str());
344 >                }
345 >                break;
346 >        case WM_COMMAND:
347 >                switch (LOWORD(w))
348 >                {
349 >                case IDOK:
350 >                case IDCANCEL:
351 >                        EndDialog(dialog, w);
352 >                        return TRUE;
353 >                default:
354 >                        break;
355 >                }
356 >                break;
357 >        }
358 >
359 >        return FALSE;
360   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines