ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/AE/Installer/trunk/source/installer.h
Revision: 462
Committed: Sat Oct 10 02:49:27 2009 UTC (16 years ago) by gumby
Content type: text/x-chdr
File size: 7139 byte(s)
Log Message:
Fixed buggy BSL stuff

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