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

Last change on this file since 379 was 379, checked in by iritscen, 12 years ago

Adding GDF switch code to Mac side post-globalization.
Preparing way for new code (search for 'CIP' in proj).
Clarifying re-globalization warning.

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