#include "csharpdoc.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace KIO; CSharpdocProtocol::CSharpdocProtocol(const TQCString &pool, const TQCString &app) : SlaveBase("csharpdoc", pool, app) {} CSharpdocProtocol::~CSharpdocProtocol() {} void CSharpdocProtocol::get(const KURL& url) { TQStringList l = TQStringList::split('/', url.path()); mimeType("text/html"); bool plain = false; TQString cmd = "csharpdoc "; if (l[0] == "functions") { plain = true; cmd += "-t -f "; cmd += TDEProcess::quote(l[1]); } else if (l[0] == "faq") { cmd += "-u -q "; cmd += TDEProcess::quote(l[1]); cmd += " | pod2html"; } else { TQCString errstr(i18n("The only existing directories are functions and faq.").local8Bit()); data(errstr); finished(); return; } kdDebug() << "Command: " << cmd << endl; if (plain) data(TQCString("
")); FILE *fd = popen(cmd.local8Bit().data(), "r"); char buffer[4090]; TQByteArray array; while (!feof(fd)) { int n = fread(buffer, 1, 2048, fd); if (n == -1) { pclose(fd); return; } array.setRawData(buffer, n); data(array); array.resetRawData(buffer, n); } pclose(fd); if (plain) data(TQCString("
")); finished(); } void CSharpdocProtocol::mimetype(const KURL &url) { TQStringList l = TQStringList::split('/', url.path()); mimeType((l[0] == "faq")? "text/html" : "text/plain"); finished(); } TQCString CSharpdocProtocol::errorMessage() { return TQCString( "" + i18n("Error in csharpdoc").local8Bit() + "" ); } void CSharpdocProtocol::stat(const KURL &/*url*/) { UDSAtom uds_atom; uds_atom.m_uds = KIO::UDS_FILE_TYPE; uds_atom.m_long = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO; UDSEntry uds_entry; uds_entry.append(uds_atom); statEntry(uds_entry); finished(); } void CSharpdocProtocol::listDir(const KURL &url) { error( KIO::ERR_CANNOT_ENTER_DIRECTORY, url.path() ); } extern "C" { int kdemain(int argc, char **argv) { TDEInstance instance( "kio_csharpdoc" ); TDEGlobal::locale()->setMainCatalogue("tdevelop"); if (argc != 4) { fprintf(stderr, "Usage: kio_csharpdoc protocol domain-socket1 domain-socket2\n"); exit(-1); } CSharpdocProtocol slave(argv[2], argv[3]); slave.dispatchLoop(); return 0; } }