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 256 by douglas, 2003-08-15T21:56:17-07:00 vs.
Revision 295 by douglas, 2003-09-11T21:26:54-07:00

# Line 2 | Line 2
2   //
3   // Douglas Thrift
4   //
5 < // $Id: VTBFileUtil2.cxx,v 1.2 2003/08/16 04:56:17 douglas Exp $
5 > // $Id: VTBFileUtil2.cxx,v 1.15 2003/09/12 04:26:54 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>
14  
12 #include "resource.h"
13
15   bool debug = false;
16   string program;
17   string programName = "Vance Thrift and Biller File Utility 2";
18 < string programVersion = "2.0alpha";
19 <
19 < HICON icon;
20 <
21 < enum Mode { none, disc, scan };
18 > string programVersion = "2.0";
19 > Gui gui;
20  
21 < INT_PTR CALLBACK usage(HWND dialog, UINT msg, WPARAM w, LPARAM l);
22 < INT_PTR CALLBACK version(HWND dialog, UINT msg, WPARAM w, LPARAM l);
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 < inline void arguments(vector<string>& args, const string& command)
24 > static inline void arguments(vector<string>& args, const string& command)
25   {
26          istringstream line(command);
27          string arg;
# Line 41 | 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 72 | Line 73 | inline void munge(void)
73          cerr.sync_with_stdio();
74   }
75  
76 < inline void usage(HINSTANCE instance, HWND parent)
76 > void usage(HWND parent)
77   {
78 <        DialogBox(instance, MAKEINTRESOURCE(IDD_USAGE), parent, usage);
78 >        DialogBox(gui.instance, MAKEINTRESOURCE(IDD_USAGE), parent, usage);
79   }
80  
81 < inline void version(HINSTANCE instance, HWND parent)
81 > void version(HWND parent)
82   {
83 <        DialogBox(instance, MAKEINTRESOURCE(IDD_VERSION), parent, version);
83 >        DialogBox(gui.instance, MAKEINTRESOURCE(IDD_VERSION), parent, version);
84   }
85  
86   int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
# Line 87 | Line 88 | int WINAPI WinMain(HINSTANCE hInstance,
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 <        icon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_VTB_ICON));
99 >        gui.instance = hInstance;
100 >        gui.icon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_VTB_ICON));
101 >        gui.show = nShowCmd;
102 >
103 >        if (toAnsi(toWide("Z:\\DouglasThrift")) != "Z:\\DouglasThrift")
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")
151                  {
152 <                        usage(hInstance);
152 >                        usage();
153                          return 0;
154                  }
155                  else if (args[index] == "-version")
156                  {
157 <                        version(hInstance);
157 >                        version();
158                          return 0;
159                  }
160                  else if (args[index] == "-disc")
# Line 121 | 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)
# Line 149 | Line 207 | int WINAPI WinMain(HINSTANCE hInstance,
207                  cerr << "\n";
208          }
209  
210 +        License license;
211 +
212 +        license.check();
213 +
214          if (mode == none)
215          {
216 <                //
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 <                //
246 >                DiscBrowse browser;
247 >
248 >                browser.run();
249          }
250          else if (mode == scan)
251          {
252 <                //
252 >                ScanUtility utility;
253 >
254 >                utility.run();
255          }
256  
257 +        CoUninitialize();
258 +
259          if (debug)
260          {
261 <                cout << "Press enter key to exit . . .";
262 <                cin.get();
261 >                char cmd[MAX_PATH];
262 >                char arg[MAX_PATH];
263 >
264 >                GetEnvironmentVariable("ComSpec", cmd, MAX_PATH);
265 >                StringCchPrintf(arg, MAX_PATH, "%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;
# Line 178 | Line 292 | INT_PTR CALLBACK usage(HWND dialog, UINT
292          {
293          case WM_INITDIALOG:
294                  center(dialog);
295 <                SendMessage(dialog, WM_SETICON, ICON_BIG, LPARAM(icon));
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]\n"
302 <                                << "\nOptions:\n"
303 <                                << "  -help\t\tDisplay this information\n"
304 <                                << "  -version\tDisplay version information\n"
305 <                                << "  -disc\t\tStart in Disc Browse mode\n"
306 <                                << "  -scan\t\tStart in Scan Utility mode\n";
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 <                        SendMessage(GetDlgItem(dialog, IDC_USAGE_TEXT), WM_SETTEXT, 0,
194 <                                LPARAM(usage.str().c_str()));
309 >                        SetDlgItemText(dialog, IDC_USAGE_TEXT, usage.str().c_str());
310                  }
311                  break;
312          case WM_COMMAND:
# Line 216 | Line 331 | INT_PTR CALLBACK version(HWND dialog, UI
331          {
332          case WM_INITDIALOG:
333                  center(dialog);
334 <                SendMessage(dialog, WM_SETICON, ICON_BIG, LPARAM(icon));
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 <                        version << programName << " ( " << programVersion << " )\n\n"
339 >
340 >                        version << programName << " (" << programVersion << ")\r\n\r\n"
341                                  << "Copyright © 2003, Douglas Thrift.\n";
342  
343 <                        SendMessage(GetDlgItem(dialog, IDC_VERSION_TEXT), WM_SETTEXT, 0,
227 <                                LPARAM(version.str().c_str()));
343 >                        SetDlgItemText(dialog, IDC_VERSION_TEXT, version.str().c_str());
344                  }
345                  break;
346          case WM_COMMAND:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines