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

Last change on this file since 327 was 325, checked in by iritscen, 13 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.