00001
00002 #define CLP_VERSION "1.0.1"
00003 #define CLP_DATE "09-JUN-2004"
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 typedef struct
00033 {
00034 char* outputFile;
00035 char* smartsFile;
00036 char* errorLogFile;
00037 int matchingType;
00038 int uniqueSmiles;
00039 } CommandLineParameters;
00040
00041
00042
00043 typedef CommandLineParameters* CLP_Ptr;
00044
00045
00046
00047 CLP_Ptr CLP_create( void );
00048
00049 void CLP_destroy( CLP_Ptr clpPtr );
00050
00051 void CLP_display( const CLP_Ptr clpPtr, FILE* outputStream );
00052
00053 void CLP_setOutputFile( const CLP_Ptr clpPtr, const char* const name );
00054
00055 char* CLP_getOutputFile( const CLP_Ptr clpPtr );
00056
00057 void CLP_setSmartsFile( const CLP_Ptr clpPtr, const char* const name );
00058
00059 char* CLP_getSmartsFile( const CLP_Ptr clpPtr );
00060
00061 void CLP_setErrorLogFile( const CLP_Ptr clpPtr, const char* const name );
00062
00063 char* CLP_getErrorLogFile( const CLP_Ptr clpPtr );
00064
00065 void CLP_setMatchingType( const CLP_Ptr clpPtr, const int matchingType );
00066
00067 int CLP_getMatchingType( const CLP_Ptr clpPtr );
00068
00069 void CLP_setUniqueSmiles( const CLP_Ptr clpPtr, const int boolean );
00070
00071 int CLP_getUniqueSmiles( const CLP_Ptr clpPtr );
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 CLP_Ptr CLP_create( void )
00086 {
00087 CLP_Ptr clpPtr;
00088 if( !( clpPtr = calloc( 1, sizeof( CommandLineParameters ) ) ) )
00089 MemoryError( "CLP_create", "clpPtr" );
00090
00091 CLP_setOutputFile( clpPtr, NULL );
00092 CLP_setSmartsFile( clpPtr, NULL );
00093 CLP_setErrorLogFile( clpPtr, NULL );
00094 CLP_setMatchingType( clpPtr, 2 );
00095 CLP_setUniqueSmiles( clpPtr, BOOLEAN_FALSE );
00096
00097 return clpPtr;
00098 }
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113 void CLP_destroy( CLP_Ptr clpPtr )
00114 {
00115 if( clpPtr != NULL )
00116 {
00117 if( CLP_getOutputFile( clpPtr ) != NULL )
00118 free( CLP_getOutputFile( clpPtr ) );
00119 if( CLP_getSmartsFile( clpPtr ) != NULL )
00120 free( CLP_getSmartsFile( clpPtr ) );
00121 if( CLP_getErrorLogFile( clpPtr ) != NULL )
00122 free( CLP_getErrorLogFile( clpPtr ) );
00123 free( clpPtr );
00124 }
00125 else
00126 {
00127 fprintf( stderr, "\n\nERROR: Function 'CLP_destroy' is not able to destroy a structure\n" );
00128 fprintf( stderr, "'CommandLineParameters' that has not been created before!\n" );
00129 AbortProgram;
00130 }
00131 }
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144 void CLP_display( CLP_Ptr clpPtr, FILE* outputStream )
00145 {
00146 fprintf( outputStream, "Output file: %s\n", CLP_getOutputFile( clpPtr ) );
00147 fprintf( outputStream, "Error log file: %s\n", CLP_getErrorLogFile( clpPtr ) );
00148 fprintf( outputStream, "Smarts file: %s\n", CLP_getSmartsFile( clpPtr ) );
00149 fprintf( outputStream, "MatchingType: " );
00150 if( CLP_getMatchingType( clpPtr ) == 1 )
00151 fprintf( outputStream, "1 - exhaustive search [dt_match,0]\n" );
00152 if( CLP_getMatchingType( clpPtr ) == 2 )
00153 fprintf( outputStream, "2 - unique set-of-atoms in results [dt_umatch,0]\n" );
00154 if( CLP_getMatchingType( clpPtr ) == 3 )
00155 fprintf( outputStream, "3 - each atom appears in exactly one result [dt_xmatch,0]\n" );
00156 fprintf( outputStream, "UniqueSmiles: " );
00157 if( CLP_getUniqueSmiles( clpPtr ) == BOOLEAN_FALSE )
00158 fprintf( outputStream, "Nope\n" );
00159 else
00160 fprintf( outputStream, "Yesh\n" );
00161 fprintf( outputStream, "\n" );
00162 }
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175 void CLP_setOutputFile( const CLP_Ptr clpPtr, const char* const name )
00176 {
00177 if( name != NULL )
00178 {
00179 if( !( clpPtr->outputFile = calloc( strlen( name ) + 1, sizeof( char ) ) ) )
00180 MemoryError( "CLP_setOutputFile", "clpPtr->outputFile" );
00181 strncpy( clpPtr->outputFile, name, strlen( name ) + 1 );
00182 }
00183 else
00184 clpPtr->outputFile = NULL;
00185 }
00186
00187
00188
00189
00190
00191
00192
00193
00194 char* CLP_getOutputFile( const CLP_Ptr clpPtr )
00195 {
00196 return clpPtr->outputFile;
00197 }
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210 void CLP_setErrorLogFile( const CLP_Ptr clpPtr, const char* const name )
00211 {
00212 if( name != NULL )
00213 {
00214 if( !( clpPtr->errorLogFile = calloc( strlen( name ) + 1, sizeof( char ) ) ) )
00215 MemoryError( "CLP_setErrorLogFile", "clpPtr->errorLogFile" );
00216 strncpy( clpPtr->errorLogFile, name, strlen( name ) + 1 );
00217 }
00218 else
00219 clpPtr->errorLogFile = NULL;
00220 }
00221
00222
00223
00224
00225
00226
00227
00228
00229 char* CLP_getErrorLogFile( const CLP_Ptr clpPtr )
00230 {
00231 return clpPtr->errorLogFile;
00232 }
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245 void CLP_setSmartsFile( const CLP_Ptr clpPtr, const char* const name )
00246 {
00247 if( name != NULL )
00248 {
00249 if( !( clpPtr->smartsFile = calloc( strlen( name ) + 1, sizeof( char ) ) ) )
00250 MemoryError( "CLP_setSmartsFile", "clpPtr->SmartsFile" );
00251 strncpy( clpPtr->smartsFile, name, strlen( name ) + 1 );
00252 }
00253 else
00254 clpPtr->smartsFile = NULL;
00255 }
00256
00257
00258
00259
00260
00261
00262
00263
00264 char* CLP_getSmartsFile( const CLP_Ptr clpPtr )
00265 {
00266 return clpPtr->smartsFile;
00267 }
00268
00269
00270
00271
00272
00273
00274
00275
00276 void CLP_setMatchingType( const CLP_Ptr clpPtr, const int matchingType )
00277 {
00278
00279 if( matchingType > 0 && matchingType < 4 )
00280 clpPtr->matchingType = matchingType;
00281 else
00282 {
00283 fprintf( stderr, "\nERROR: The value of option '-m' has to be in [1,3]!\n" );
00284 fprintf( stderr, "Type 'countSmarts -h' for a detailed help text.\n" );
00285 AbortProgram;
00286 }
00287 }
00288
00289
00290
00291
00292
00293
00294
00295
00296 int CLP_getMatchingType( const CLP_Ptr clpPtr )
00297 {
00298 return clpPtr->matchingType;
00299 }
00300
00301
00302
00303
00304
00305
00306
00307
00308 void CLP_setUniqueSmiles( const CLP_Ptr clpPtr, const int boolean )
00309 {
00310 clpPtr->uniqueSmiles = boolean;
00311 }
00312
00313
00314
00315
00316
00317
00318
00319
00320 int CLP_getUniqueSmiles( const CLP_Ptr clpPtr )
00321 {
00322 return clpPtr->uniqueSmiles;
00323 }