source: AE/Installer/trunk/source/subs.cpp@ 293

Last change on this file since 293 was 293, checked in by gumby, 16 years ago

Worked on reader.
Expanded struct ModPackage

File size: 4.7 KB
Line 
1/*
2AE\Mod Installer.
3
4Needs getPackages() now!
5*/
6
7#include <string>
8#include <iostream>
9#include "methods.h"
10#include <vector>
11#include <fstream>
12
13#include <errno.h>
14#ifdef WIN32
15 #include "Include\dirent.h"
16#else
17 #include <dirent.h> //??? is this included for Macs?
18#endif
19#include <stdio.h>
20#include <stdlib.h>
21
22
23using namespace std;
24bool FALSE = 0;
25bool TRUE = 0;
26
27
28int main(void)
29{
30
31 // SetConsoleTitle("AE Installer"); windows junk, convert to SDL
32 // system("color 0A");
33
34 cout << "\nWelcome to the AE installer!\n";
35
36 cout << "\nWhat would you like to do?\n";
37
38 return mainMenu();
39}
40
41vector<ModPackage> getPackages(void) {
42 vector<ModPackage> packages;
43 packages.reserve(256); //thats 63 or 64 pointers to packages...i think. :P Reserving this improves performance when we add new pointers
44
45 fstream file;
46
47 #ifdef WIN32
48 string path = "K:\\Oni\\edition\\install\\packages"; //only for my build. :P
49 #else
50 string path = "K:\\Oni\\edition\\install\\packages"; //change this, 'scen.
51 #endif
52
53 string filename = "\0";
54 string MODINFO_CFG = "\\Mod_Info.cfg";
55
56
57
58 DIR *pdir;
59 struct dirent *pent;
60
61 pdir = opendir( path.c_str() ); //"." refers to the current dir
62 if (!pdir){
63 printf ("opendir() failure; terminating");
64 exit(1);
65 }
66 errno=0;
67
68 while (( pent = readdir(pdir) )){
69
70 filename = path + '\\' + pent->d_name + MODINFO_CFG;
71 file.open(filename.c_str());
72
73 //cout << filename << "\n";
74
75 if(!file.fail() )
76 {
77 //file.open(filename.c_str(), fstream::out);
78
79 //do stuff like adding to vector :P
80
81 //would prefer to push a pointer to a package, but this will do for now
82 packages.push_back( fileToModPackage(file) );
83
84 }
85 file.close();
86 file.clear();
87
88 }
89
90
91 if (errno){
92 printf ("readdir() failure; terminating");
93 exit(1);
94 }
95 closedir(pdir);
96
97
98 return packages;
99}
100
101ModPackage fileToModPackage(fstream &file) {
102 ModPackage package = {0, ""};
103 string line;
104 static string NameOfMod = "NameOfMod"; //used for comparing to the current token
105 static string SLASHSLASH = "//";
106 static string ARROW = "->";
107 while (! file.eof() )
108 {
109 getline (file,line);
110 vector<string> tokens;
111 vector<string>::iterator iter;
112 Tokenize(line, tokens); //string to vector of "words"
113 if (tokens.capacity() >= 2) { //make sure they are using enough stuff
114 iter = tokens.begin(); //what word we are on, starts at first word
115 /*
116 if (!AEInstallVersion.compare(*iter))
117 If mod is too old, skip this mod.
118 */
119 /*else*/if (!NameOfMod.compare(*iter)) { //if it contains the name
120 for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) { //interates through the words, ends if it reaches the end of the line or a "//" comment
121 if (ARROW.compare(*iter) && NameOfMod.compare(*iter)) { //ignores "->" and "NameOfMod"
122 //cout << *iter;
123 //cout << " ";
124 package.name += *iter + " ";
125 }
126 }
127 cout << package.name; cout << "\n"; //remove this when done
128 /*
129 else if (!ModString.compare(*iter)
130 else if (!HasOnis.compare(*iter)
131 else if (!HasDeltas.compare(*iter)
132 else if (!HasBSL.compare(*iter)
133 else if (!HasDats.compare(*iter)
134 else if (!Category.compare(*iter)
135 else if (!Creator.compare(*iter)
136 else if (!IsEngine.compare(*iter)
137 else if (!Readme.compare(*iter)
138 else if (!GlobalNeeded.compare(*iter)
139 */
140 }
141 //cout << *iter;
142 }
143
144 }
145
146 return package;
147}
148
149int mainMenu(void) {
150 int choice = '0';
151 bool ok = FALSE;
152 cout << "1. Install new packages\n";
153 cout << "2. Uninstall packages\n";
154 cout << "3. See what is installed\n";
155 cout << "4. About AE\n";
156 cout << "5. Quit\n\n";
157
158 do {
159 ok = TRUE;
160 choice = cin.get();
161 cin.ignore(1);
162 switch(choice) {
163 case '1':
164 installPackages();
165 break;
166 case '2':
167 uninstallPackages();
168 break;
169 case '3':
170 //listInstalledPackages();
171 break;
172 case '5':
173 return 0;
174 default:
175 ok = FALSE;
176 }
177 } while(ok == FALSE);
178 return 0;
179}
180
181
182void installPackages() {
183 ModPackage package;
184 vector<string> installed_packages;
185 vector<ModPackage> packages; // = getPackages()
186 vector<ModPackage>::iterator iter;
187 iter = packages.begin();
188
189 getPackages();
190
191 if (packages.empty()) {
192 cout << "Error: You have no packages!\n";
193 return;
194 }
195
196 cout << "Detecting installed packages...\n";
197
198 for(int i = 0; i < packages.size();) {
199 package = *iter;
200 if(!package.isInstalled){
201 packages.erase(iter);
202 }
203 else {
204 i++;
205 iter++;
206 }
207
208 }
209
210 if (packages.empty()) {
211 cout << "Error: You have no installed packages!\n";
212 return;
213 }
214
215 //listInstalledPackages(packages);
216
217}
218void uninstallPackages() {
219;
220}
221
222void getInstalledPackages() {
223;
224}
Note: See TracBrowser for help on using the repository browser.