#include "cgi.h" CgiScript::CgiScript(int argC, char** argV, int bufSize) : bufSize(bufSize) { if (argC<3) throw (xmsg("CgiScript - Erro no numero de parametros!")); buf = new char[bufSize]; if (!buf) throw (xmsg("CgiScript - Falha na alocacao de memoria!")); out.open(argV[3]); if (!out) throw (xmsg("CgiScript - Erro na abertura do arquivo de saida!")); ParseFile(argV[1]); } //------------------------------------------------------------------------- void CgiScript::PlusToSpace(const string& source, string& target){ target = ""; for (register int i=0; source.c_str()[i]; i++) if (source.c_str()[i]=='+') target += ' '; else target+=source.c_str()[i]; } //------------------------------------------------------------------------- void CgiScript::BrakeString(const string& source, string& left , string& right , char edge){ register int i; for ( i = 0; source.c_str()[i] != edge; i++); right = source.substr(i+1); left = source.substr(0,i); } //------------------------------------------------------------------------- void CgiScript::ParseFile(const string& iniFile){ int iniPos = 0; int bufLen; string line; HashString left, right; string target; bufLen = GetPrivateProfileString("CGI", "Query String", "", (LPSTR)buf, bufSize, iniFile.c_str()); do { line = ""; while (buf[iniPos] != '\0' && buf[iniPos] != '&'){ line += buf[iniPos]; iniPos++; } if(buf[iniPos] == '&'){ buf[iniPos]=0; iniPos++; // pulando null } if (line != "") { PlusToSpace(line, target); BrakeString(target, left, right); dictionary.Add(CData(left, right)); } } while (buf[iniPos]!= '\0'); delete [] buf; } //------------------------------------------------------------------------- const char* CgiScript::GetTitle(){ return "Cgi Script"; } //------------------------------------------------------------------------- void CgiScript::WriteHeader() { out<<"Content-type: text/html"<"<<GetTitle()<<""<"<Value(); else resp= "Campo Inexistente!"; string conv; char *p= (char*) resp.c_str(); while( *p ) { switch( *p ) { case '%' : { string hex= "0x"; p++; hex+= *(p++); hex+= *(p++); conv+= ((char) strtol(hex.c_str(),NULL,0)); continue; } default : conv+= *p; } // switch p++; } // return conv; } //------------------------------------------------------------------------- void CgiScript::WriteBody(){ CDictionaryIterator iterator(dictionary); out<<"

Voce digitou os seguintes valores

"<"<"<"<CgiScript versão 1.0 por Rodrigo B. de Oliveira"<\n"; } //------------------------------------------------------------------------- void CgiScript::Run(){ WriteHeader(); WriteBody(); WriteEnd(); }