Alright. That's simple enough. Do ifstreams have a length member, or should I use some tells and seeks?
Oh, and here's my code.
Code:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
if(argc == 1)
return EXIT_SUCCESS;
else if(argc == 2)
{
string GCC = "C:\\GCC\\bin\\gcc ";
string GPP = "C:\\GCC\\bin\\g++ ";
string Includes = "-I\"C:\\GCC\\include\" ";
string CPPIncludes = "-I\"C:\\GCC\\include\\c++\\3.4.2\" -I\"C:\\GCC\\include\\c++\\3.4.2\\mingw32\" -I\"C:\\GCC\\include\\c++\\3.4.2\\backward\" -I\"C:\\GCC\\lib\\gcc\\mingw32\\3.4.2\\include\" ";
string Libraries = "-L\"C:\\GCC\\lib\" ";
string CustomIncludes;
string CustomLibraries;
string CustomLibLinks;
string inFile = argv[1];
string inName = "\"" + inFile + "\" ";
string inType;
string outName = "\"";
string arguments;
ifstream CFG("rungcc.cfg");
if(!CFG.is_open())
cout << "Failed to open rungcc.cfg." << endl;
stringstream CFGString;
string ConfigLine;
CFGString << CFG;
CFGString >> Configuration;
cout << "CFG = (" << CFG << ")" << endl;
cout << "CFGString = (" << CFGString << ")" << endl;
cout << "Configuration = (" << Configuration << ")" << endl;
CFG.close();
for(int index = Configuration.find("Include=", 0); index != string::npos; index = Configuration.find("Include=", index))
{
index += 7;
CustomIncludes += "-I\"";
for(; Configuration[index] != '\n'; ++index)
CustomIncludes += Configuration[index];
CustomIncludes += "\" ";
}
for(int index = Configuration.find("Library=", 0); index != string::npos; index = Configuration.find("Include=", index))
{
index += 7;
CustomLibraries += "-L\"";
for(; Configuration[index] != '\n'; ++index)
CustomLibraries += Configuration[index];
CustomLibraries += "\" ";
}
for(int index = Configuration.find("LibLink=", 0); index != string::npos; index = Configuration.find("Include=", index))
{
index += 4;
CustomLibLinks += "-l\"";
for(; Configuration[index] != '\n'; ++index)
CustomLibLinks += Configuration[index];
CustomLibLinks += "\" ";
}
int NameLength = strlen(inFile.c_str());
int index;
for(index = NameLength; index >= 0; --index)
if(inFile[index] == '\\')
break;
for(++index; index < NameLength; ++index)
if(inFile[index] != '.')
outName += inFile[index];
else
break;
outName += ".exe\" ";
for(++index; index < NameLength; ++index)
inType += inFile[index];
if(inType == "c")
arguments = GCC + Includes + Libraries + inName + "-o " + outName;
else if(inType == "cpp" || inType == "cc" || inType == "cp" || inType == "cxx" || inType == "c++")
arguments = GPP + Includes + CPPIncludes + Libraries + inName + "-o " + outName;
cout << "CustomIncludes = (" << CustomIncludes << ")" << endl;
cout << "CustomLibraries = (" << CustomLibraries << ")" << endl;
cout << "CustomLibLinks = (" << CustomLibLinks << ")" << endl;
// system(arguments.c_str());
}
return EXIT_SUCCESS;
}