source: AE/Installer/trunk/source/installer.h@ 376

Last change on this file since 376 was 358, checked in by gumby, 15 years ago

Fixed bugs:
Missing globalize code on start
possibly fixed adv option menu
type "Step33/36"
const thing in struct ModPackage

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