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

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

Replacing old CLI source with new GUI source.

File size: 6.3 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.