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

Last change on this file since 344 was 325, checked in by iritscen, 16 years ago

Rolled installer.cpp code into mainwindow.cpp, do not build installer.cpp.
Also converted all newlines to Windows format just to be safe.

File size: 6.6 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};
53
54#define METHOD_DEFS
55// Initialization to default values
56ModPackage::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
76int mainMenu(void);
77int globalizeData(void);
78int installPackages(void);
79int uninstallPackages(void);
80int listInstalledPackages(void);
81int printInstallerInfo(void);
82vector<ModPackage> getPackages(void);
83ModPackage fileToModPackage(fstream&);
84void recompileAll(vector<string>);
85vector<string> getInstallString(string = strInstallCfg);
86void tokenize(const string&, vector<string>&, const string& delimiters = " ");
87//bool getDirectoryContents(char , char &);
88void clearOldDats(void);
89void writeInstalledMods( vector<string> );
90void setStatusArea( string );
91void 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.
96using namespace boost::filesystem;
97using namespace std;
98
99void copy_directory( const path & from_dir_ph,
100 const path & to_dir_ph );
101
102void 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
110void 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
159void 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
191void 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
214using namespace std;
215
216#endif
217
218// maximum mumber of lines the output console should have
219
220static const WORD MAX_CONSOLE_LINES = 500;
221
222
223void 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
Note: See TracBrowser for help on using the repository browser.