libsax 7.2

processcall.cpp

00001 /**************
00002 FILE          : processcall.cpp
00003 ***************
00004 PROJECT       : SaX2 - library interface
00005               :
00006 AUTHOR        : Marcus Schäfer <ms@suse.de>
00007               :
00008 BELONGS TO    : SaX2 - SuSE advanced X11 configuration 
00009               : 
00010               :
00011 DESCRIPTION   : native C++ class library to access SaX2
00012               : functionality. Easy to use interface for
00013               : //.../
00014               : - importing/exporting X11 configurations
00015               : - modifying/creating X11 configurations 
00016               : ---
00017               :
00018               :
00019 STATUS        : Status: Development
00020 **************/
00021 #include "processcall.h"
00022 #include <QTextOStream>
00023     
00024 namespace SaX {
00025 //====================================
00026 // Constructor...
00027 //------------------------------------
00028 SaXProcessCall::SaXProcessCall ( void ) {
00029         mExitCode  = -1;
00030 }
00031 
00032 //====================================
00033 // addArgument
00034 //------------------------------------
00035 void SaXProcessCall::addArgument ( const QString& arg ) {
00036         QString* argument = new QString;
00037         QTextOStream (argument) << "'" << arg << "'";
00038         mArguments.append ( *argument );
00039 }
00040 
00041 //====================================
00042 // addArgument
00043 //------------------------------------
00044 void SaXProcessCall::addArgument ( int arg ) {
00045         QString argString;
00046         QTextOStream (&argString) << arg;
00047         addArgument ( argString );
00048 }
00049 
00050 //====================================
00051 // clearArguments
00052 //------------------------------------
00053 void SaXProcessCall::clearArguments ( void ) {
00054         mArguments.clear();
00055         mExitCode  = -1;
00056 }
00057 
00058 //====================================
00059 // exitStatus
00060 //------------------------------------
00061 int SaXProcessCall::exitStatus ( void ) {
00062         return mExitCode;
00063 }
00064 
00065 //====================================
00066 // start
00067 //------------------------------------
00068 bool SaXProcessCall::start ( void ) {
00069         //====================================
00070         // create program call string
00071         //------------------------------------
00072         QString program;
00073         QString it;
00074         foreach (it,mArguments) {
00075                 program.append (it + " ");
00076         }
00077         //====================================
00078         // start program and connect stream
00079         //------------------------------------
00080         char buf[LINESIZE];
00081         //fprintf (stderr,"++++ DEBUG: %s\n",program.ascii());
00082         FILE* fp = popen (program.ascii(),"r");
00083         if ( ! fp ) {
00084                 return false;
00085         }
00086         while (NULL != (fgets(buf,sizeof(buf),fp))) {
00087                 int line = strlen(buf);
00088                 buf[line-1] = '\0';
00089                 //fprintf (stderr,"__%s__\n",buf);
00090                 mData.append (QString(buf));
00091         }
00092         mExitCode = pclose(fp);
00093         return true;
00094 }
00095 
00096 //====================================
00097 // readStdout
00098 //------------------------------------
00099 QList<QString> SaXProcessCall::readStdout ( void ) {
00100         return mData;
00101 }
00102 } // end namespace