ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/AE/Installer/trunk/source/installer.h
Revision: 325
Committed: Tue May 26 18:51:14 2009 UTC (16 years, 4 months ago) by iritscen
Content type: text/x-chdr
File size: 6742 byte(s)
Log Message:
Rolled installer.cpp code into mainwindow.cpp, do not build installer.cpp.
Also converted all newlines to Windows format just to be safe.

File Contents

# Content
1 #pragma once
2 /* AE/Mod Installer header file */
3 #ifndef DOUBLE_HEADER
4 #define DOUBLE_HEADER
5
6
7 #include <string>
8 #include <vector>
9 #include <fstream>
10
11 using namespace std;
12
13 static string SLASHSLASH = "//";
14 static string DIRSLASH = "\\";
15 string strInstallCfg = "../GameDataFolder/Add.cfg";
16
17
18
19 #define STRUCT_DEFS
20 struct ModPackage
21 {
22 bool isInstalled; //replace with function
23 string name;
24 string modStringName;
25 int modStringVersion;
26 bool hasOnis;
27 bool hasDeltas;
28 bool hasBSL;
29 bool hasDats;
30 string category;
31 string creator;
32 bool isEngine;
33 string readme;
34 bool globalNeeded;
35 ModPackage();
36 void doOutput()
37 {
38 cout << "Mod: " << name; cout << "\n"; // remove this when done
39 cout << " String: " << modStringName << " v." << modStringVersion << "\n";
40 cout << " Category: " << category << "\n";
41 cout << " Creator: " << creator << "\n";
42 cout << " HasOnis: " << hasOnis << "\n";
43 cout << " HasBSL: " << hasBSL << "\n";
44 cout << " HasDeltas: " << hasDeltas << "\n";
45 cout << " HasDats: " << hasDats << "\n";
46 cout << " IsEngine: " << isEngine << "\n";
47 cout << " GlobalNeeded: " << globalNeeded << "\n";
48 cout << " Readme: " << readme << "\n";
49 cout << "\n";
50 }
51
52 };
53
54 #define METHOD_DEFS
55 // Initialization to default values
56 ModPackage::ModPackage()
57 {
58 isInstalled = true; // replace with function
59 name = "";
60 modStringName = "";
61 modStringVersion = 0;
62 hasOnis = false;
63 hasDeltas = false;
64 hasBSL = false;
65 hasDats = false;
66 category = "";
67 creator = "";
68 isEngine = false;
69 readme = "";
70 globalNeeded = true;
71 // void doOutput() const
72 // { };
73 }
74
75 #define FUNCTION_PROTOTYPES
76 int mainMenu(void);
77 int globalizeData(void);
78 int installPackages(void);
79 int uninstallPackages(void);
80 int listInstalledPackages(void);
81 int printInstallerInfo(void);
82 vector<ModPackage> getPackages(void);
83 ModPackage fileToModPackage(fstream&);
84 void recompileAll(vector<string>);
85 vector<string> getInstallString(string = strInstallCfg);
86 void tokenize(const string&, vector<string>&, const string& delimiters = " ");
87 //bool getDirectoryContents(char , char &);
88 void clearOldDats(void);
89 void writeInstalledMods( vector<string> );
90 void setStatusArea( string );
91 void setProgressBar( int );
92
93 //New copy(path, path) function. Too lazy to implement my own, this is basically how I would have done it though.
94 //No, really. :)
95 //Move to utilities.cpp when the time comes.
96 using namespace boost::filesystem;
97 using namespace std;
98
99 void copy_directory( const path & from_dir_ph,
100 const path & to_dir_ph );
101
102 void copy( const path & from_file_ph,
103 const path & to_file_ph );
104
105
106 // this function copies files and directories. If copying a
107 // directory to a directory, it copies recursively.
108
109 //pardon the mess, I did this at midnight, and had to fix a bug
110 void copy( const path & from_ph,
111 const path & to_ph )
112 {
113 cout << to_ph.string() << "\n";
114 // Make sure that the destination, if it exists, is a directory
115 if((exists(to_ph) && !is_directory(to_ph)) || (!exists(from_ph))) cout << "error";
116 if(!is_directory(from_ph))
117 {
118
119 if(exists(to_ph))
120 {
121 copy_file(from_ph,to_ph/from_ph.filename());
122 }
123 else
124 {
125 try{
126
127 copy_file(from_ph,to_ph);
128 }
129 catch (exception ex){
130 cout << from_ph.string() << " to " << to_ph.string() << "\n";
131 }
132 }
133
134 }
135 else if(from_ph.filename() != ".svn")
136 {
137 path destination;
138 if(!exists(to_ph))
139 {
140 destination=to_ph;
141 }
142 else
143 {
144 destination=to_ph/from_ph.filename();
145 }
146 //not sure what this did, its going away though. probably error checking ;)
147 //copy_directory(from_ph,destination);
148
149 for(directory_iterator i(from_ph); i!=directory_iterator(); ++i)
150 {
151 //the idiot who coded this in the first place (not me)
152 //forgot to make a new directory. Exception city. x_x
153 create_directory(destination);
154 copy(*i,destination/i->filename());
155 }
156 }
157 }
158
159 void copy_directory( const path &from_dir_ph,
160 const path &to_dir_ph)
161 {
162 if(!exists(from_dir_ph) || !is_directory(from_dir_ph)
163 || exists(to_dir_ph))
164 cout << !exists(from_dir_ph) << " " << !is_directory(from_dir_ph)
165 << " " << exists(to_dir_ph);
166 //boost::throw_exception( filesystem_error(
167 //"boost::filesystem::copy_directory",
168 //from_dir_ph, to_dir_ph, boost::system::error_code() ));
169
170 # ifdef BOOST_POSIX
171 struct stat from_stat;
172 if ( (::stat( from_dir_ph.string().c_str(), &from_stat ) != 0)
173 || ::mkdir(to_dir_ph.native_directory_string().c_str(),
174 from_stat.st_mode)!=0)
175 # endif
176 // boost::throw_exception( filesystem_error(
177 // //"boost::filesystem::copy_directory",
178 // from_dir_ph, to_dir_ph, boost::system::error_code()));
179 }
180
181 #endif
182
183 #ifdef WIN32
184
185 #ifndef __GUICON_H__
186
187 #define __GUICON_H__
188
189
190
191 void RedirectIOToConsole();
192
193
194
195 #endif
196
197 /* End of File */
198
199
200 #include <windows.h>
201
202 #include <stdio.h>
203
204 #include <fcntl.h>
205
206 #include <io.h>
207
208 #include <iostream>
209
210 #include <fstream>
211
212 #ifndef _USE_OLD_IOSTREAMS
213
214 using namespace std;
215
216 #endif
217
218 // maximum mumber of lines the output console should have
219
220 static const WORD MAX_CONSOLE_LINES = 500;
221
222
223 void RedirectIOToConsole()
224
225 {
226
227 int hConHandle;
228
229 long lStdHandle;
230
231 CONSOLE_SCREEN_BUFFER_INFO coninfo;
232
233 FILE *fp;
234
235 // allocate a console for this app
236
237 AllocConsole();
238
239 // set the screen buffer to be big enough to let us scroll text
240
241 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),
242
243 &coninfo);
244
245 coninfo.dwSize.Y = MAX_CONSOLE_LINES;
246
247 SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),
248
249 coninfo.dwSize);
250
251 // redirect unbuffered STDOUT to the console
252
253 lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
254
255 hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
256
257 fp = _fdopen( hConHandle, "w" );
258
259 *stdout = *fp;
260
261 setvbuf( stdout, NULL, _IONBF, 0 );
262
263 // redirect unbuffered STDIN to the console
264
265 lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
266
267 hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
268
269 fp = _fdopen( hConHandle, "r" );
270
271 *stdin = *fp;
272
273 setvbuf( stdin, NULL, _IONBF, 0 );
274
275 // redirect unbuffered STDERR to the console
276
277 lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
278
279 hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
280
281 fp = _fdopen( hConHandle, "w" );
282
283 *stderr = *fp;
284
285 setvbuf( stderr, NULL, _IONBF, 0 );
286
287
288 // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
289
290 // point to console as well
291
292 ios::sync_with_stdio();
293
294 }
295
296
297
298 //End of File
299
300
301
302
303
304
305 #endif