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

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