rino 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/ext/extconf.rb +1 -24
- data/ext/libinchi.so +0 -0
- data/ext/src/aux2atom.h +120 -39
- data/ext/src/comdef.h +3 -3
- data/ext/src/dispstru.c +2547 -0
- data/ext/src/dispstru.h +73 -0
- data/ext/src/extr_ct.h +5 -2
- data/ext/src/ichi.h +27 -11
- data/ext/src/ichi_bns.c +1800 -254
- data/ext/src/ichi_bns.h +205 -4
- data/ext/src/ichican2.c +197 -86
- data/ext/src/ichicano.c +8 -13
- data/ext/src/ichicano.h +2 -2
- data/ext/src/ichicans.c +11 -6
- data/ext/src/ichicant.h +2 -2
- data/ext/src/ichicomn.h +2 -2
- data/ext/src/ichicomp.h +19 -4
- data/ext/src/ichidrp.h +9 -5
- data/ext/src/ichierr.h +5 -3
- data/ext/src/ichiisot.c +2 -2
- data/ext/src/ichimain.c +461 -0
- data/ext/src/ichimain.h +23 -15
- data/ext/src/ichimak2.c +6 -6
- data/ext/src/ichimake.c +843 -42
- data/ext/src/ichimake.h +4 -2
- data/ext/src/ichimap1.c +5 -5
- data/ext/src/ichimap2.c +2 -2
- data/ext/src/ichimap4.c +34 -21
- data/ext/src/ichinorm.c +11 -5
- data/ext/src/ichinorm.h +3 -2
- data/ext/src/ichiparm.c +2 -2
- data/ext/src/ichiparm.h +232 -30
- data/ext/src/ichiprt1.c +35 -11
- data/ext/src/ichiprt2.c +78 -7
- data/ext/src/ichiprt3.c +300 -120
- data/ext/src/ichiqueu.c +17 -2
- data/ext/src/ichiread.c +6932 -0
- data/ext/src/ichiring.c +3 -2
- data/ext/src/ichiring.h +2 -2
- data/ext/src/ichirvr1.c +4891 -0
- data/ext/src/ichirvr2.c +6344 -0
- data/ext/src/ichirvr3.c +5499 -0
- data/ext/src/ichirvr4.c +3177 -0
- data/ext/src/ichirvr5.c +1166 -0
- data/ext/src/ichirvr6.c +1287 -0
- data/ext/src/ichirvr7.c +2319 -0
- data/ext/src/ichirvrs.h +882 -0
- data/ext/src/ichisize.h +2 -2
- data/ext/src/ichisort.c +5 -5
- data/ext/src/ichister.c +281 -86
- data/ext/src/ichister.h +9 -3
- data/ext/src/ichitaut.c +208 -9
- data/ext/src/ichitaut.h +13 -11
- data/ext/src/ichitime.h +16 -2
- data/ext/src/inchicmp.h +107 -0
- data/ext/src/inpdef.h +6 -3
- data/ext/src/libinchi_wrap.c +912 -0
- data/ext/src/lreadmol.h +34 -31
- data/ext/src/mode.h +244 -7
- data/ext/src/mol2atom.c +1060 -0
- data/ext/src/mol2atom.h +31 -0
- data/ext/src/readinch.c +239 -0
- data/ext/src/readmol.c +28 -0
- data/ext/src/{e_readmol.h → readmol.h} +7 -9
- data/ext/src/runichi.c +251 -177
- data/ext/src/strutil.c +444 -238
- data/ext/src/strutil.h +150 -11
- data/ext/src/util.c +176 -118
- data/ext/src/util.h +15 -3
- data/lib/rino.rb +71 -3
- data/test/test.rb +33 -4
- metadata +22 -34
- data/ext/ruby_inchi_main.so +0 -0
- data/ext/src/e_0dstereo.c +0 -3014
- data/ext/src/e_0dstereo.h +0 -31
- data/ext/src/e_comdef.h +0 -57
- data/ext/src/e_ctl_data.h +0 -147
- data/ext/src/e_ichi_io.c +0 -498
- data/ext/src/e_ichi_io.h +0 -40
- data/ext/src/e_ichi_parms.c +0 -37
- data/ext/src/e_ichi_parms.h +0 -41
- data/ext/src/e_ichicomp.h +0 -50
- data/ext/src/e_ichierr.h +0 -40
- data/ext/src/e_ichimain.c +0 -593
- data/ext/src/e_ichisize.h +0 -43
- data/ext/src/e_inchi_atom.c +0 -75
- data/ext/src/e_inchi_atom.h +0 -33
- data/ext/src/e_inpdef.h +0 -41
- data/ext/src/e_mode.h +0 -706
- data/ext/src/e_mol2atom.c +0 -649
- data/ext/src/e_readinch.c +0 -58
- data/ext/src/e_readmol.c +0 -54
- data/ext/src/e_readstru.c +0 -251
- data/ext/src/e_readstru.h +0 -33
- data/ext/src/e_util.c +0 -284
- data/ext/src/e_util.h +0 -61
- data/ext/src/ichilnct.c +0 -286
- data/ext/src/inchi_api.h +0 -670
- data/ext/src/inchi_dll.c +0 -1480
- data/ext/src/inchi_dll.h +0 -34
- data/ext/src/inchi_dll_main.c +0 -23
- data/ext/src/inchi_dll_main.h +0 -31
- data/ext/src/ruby_inchi_main.c +0 -558
data/ext/src/e_ichi_io.h
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* International Union of Pure and Applied Chemistry (IUPAC)
|
3
|
-
* International Chemical Identifier (InChI)
|
4
|
-
* Version 1
|
5
|
-
* Software version 1.00
|
6
|
-
* April 13, 2005
|
7
|
-
* Developed at NIST
|
8
|
-
*/
|
9
|
-
|
10
|
-
#ifndef __ICHI_IO_H__
|
11
|
-
#define __ICHI_IO_H__
|
12
|
-
|
13
|
-
|
14
|
-
#ifndef INCHI_ALL_CPP
|
15
|
-
#ifdef __cplusplus
|
16
|
-
extern "C" {
|
17
|
-
#endif
|
18
|
-
#endif
|
19
|
-
|
20
|
-
|
21
|
-
char* fgets_up_to_lf( char* line, int line_len, FILE* inp );
|
22
|
-
int my_fgetsUpToLfOrTab( char *szLine, int len, FILE *f );
|
23
|
-
|
24
|
-
int e_my_fgetsTab( char *szLine, int len, FILE *f, int *bTooLongLine );
|
25
|
-
int e_my_fgetsTab1( char *szLine, int len, FILE *f, int *bTooLongLine );
|
26
|
-
|
27
|
-
int e_inchi_print( FILE* f, const char* lpszFormat, ... );
|
28
|
-
int e_my_fprintf( FILE* f, const char* lpszFormat, ... );
|
29
|
-
void e_PrintFileName( const char *fmt, FILE *output_file, const char *szFname );
|
30
|
-
unsigned long e_ulMyGetTickCount( int bStart );
|
31
|
-
unsigned long e_ulMyTickCountDiff( unsigned long ulTickEnd, unsigned long ulTickStart );
|
32
|
-
|
33
|
-
#ifndef INCHI_ALL_CPP
|
34
|
-
#ifdef __cplusplus
|
35
|
-
}
|
36
|
-
#endif
|
37
|
-
#endif
|
38
|
-
|
39
|
-
|
40
|
-
#endif /* __ICHI_IO_H__ */
|
data/ext/src/e_ichi_parms.c
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* International Union of Pure and Applied Chemistry (IUPAC)
|
3
|
-
* International Chemical Identifier (InChI)
|
4
|
-
* Version 1
|
5
|
-
* Software version 1.00
|
6
|
-
* April 13, 2005
|
7
|
-
* Developed at NIST
|
8
|
-
*/
|
9
|
-
|
10
|
-
#include <stdio.h>
|
11
|
-
#include <stdlib.h>
|
12
|
-
#include <string.h>
|
13
|
-
#include <ctype.h>
|
14
|
-
#include <errno.h>
|
15
|
-
#include <limits.h>
|
16
|
-
|
17
|
-
#include "e_mode.h"
|
18
|
-
#include "inchi_api.h"
|
19
|
-
#include "e_ctl_data.h"
|
20
|
-
#include "e_ichi_io.h"
|
21
|
-
#include "e_ichi_parms.h"
|
22
|
-
#include "e_util.h"
|
23
|
-
#include "e_ichicomp.h"
|
24
|
-
|
25
|
-
#define DetectInputINChIFileType e_DetectInputINChIFileType
|
26
|
-
#define ReadCommandLineParms e_ReadCommandLineParms
|
27
|
-
#define mystrncpy e_mystrncpy
|
28
|
-
#define my_fprintf e_my_fprintf
|
29
|
-
#define LtrimRtrim e_LtrimRtrim
|
30
|
-
#define PrintInputParms e_PrintInputParms
|
31
|
-
#define OpenFiles e_OpenFiles
|
32
|
-
#define PrintFileName e_PrintFileName
|
33
|
-
#define HelpCommandLineParms e_HelpCommandLineParms
|
34
|
-
#define inchi_print_nodisplay fprintf
|
35
|
-
|
36
|
-
#include "ichiparm.h"
|
37
|
-
|
data/ext/src/e_ichi_parms.h
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* International Union of Pure and Applied Chemistry (IUPAC)
|
3
|
-
* International Chemical Identifier (InChI)
|
4
|
-
* Version 1
|
5
|
-
* Software version 1.00
|
6
|
-
* April 13, 2005
|
7
|
-
* Developed at NIST
|
8
|
-
*/
|
9
|
-
|
10
|
-
#ifndef __ICHI_PARMS_H__
|
11
|
-
#define __ICHI_PARMS_H__
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
#ifndef INCHI_ALL_CPP
|
16
|
-
#ifdef __cplusplus
|
17
|
-
extern "C" {
|
18
|
-
#endif
|
19
|
-
#endif
|
20
|
-
|
21
|
-
|
22
|
-
int e_ReadCommandLineParms( int argc, const char *argv[], INPUT_PARMS *ip, char *szSdfDataValue,
|
23
|
-
unsigned long *ulDisplTime, int bReleaseVersion, INCHI_FILE *log_file );
|
24
|
-
|
25
|
-
int e_PrintInputParms( INCHI_FILE *log_file, INPUT_PARMS *ip );
|
26
|
-
int e_OpenFiles( FILE **inp_file, FILE **output_file, FILE **log_file, FILE **prb_file, INPUT_PARMS *ip );
|
27
|
-
void e_HelpCommandLineParms( INCHI_FILE *f );
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
#ifndef INCHI_ALL_CPP
|
36
|
-
#ifdef __cplusplus
|
37
|
-
}
|
38
|
-
#endif
|
39
|
-
#endif
|
40
|
-
|
41
|
-
#endif /* __ICHI_PARMS_H__ */
|
data/ext/src/e_ichicomp.h
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* International Union of Pure and Applied Chemistry (IUPAC)
|
3
|
-
* International Chemical Identifier (InChI)
|
4
|
-
* Version 1
|
5
|
-
* Software version 1.00
|
6
|
-
* April 13, 2005
|
7
|
-
* Developed at NIST
|
8
|
-
*/
|
9
|
-
|
10
|
-
#ifndef __INCHI_COMPAT_H__
|
11
|
-
#define __INCHI_COMPAT_H__
|
12
|
-
|
13
|
-
/* compatibility */
|
14
|
-
|
15
|
-
#if( defined(__GNUC__) && defined(__MINGW32__) && __GNUC__ == 3 && __GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ == 0 && defined(_WIN32) )
|
16
|
-
/* replace with the proper definition for GNU gcc & MinGW-2.0.0-3 (mingw special 20020817-1), gcc 3.2 core */
|
17
|
-
#define my_va_start(A,B) ((A)=(va_list)__builtin_next_arg(lpszFormat))
|
18
|
-
#else
|
19
|
-
#define my_va_start va_start
|
20
|
-
#endif
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
/* ANSI redefinitions */
|
25
|
-
#ifdef INCHI_ANSI_ONLY /* { */
|
26
|
-
#ifndef __isascii
|
27
|
-
#define __isascii(val) ((unsigned)(val) <= 0x7F)
|
28
|
-
#endif
|
29
|
-
|
30
|
-
/* #ifndef __GNUC__ */
|
31
|
-
/* these non-ANSI functions are implemented in gcc */
|
32
|
-
#include <stdio.h>
|
33
|
-
/* this #include provides size_t definition */
|
34
|
-
/* implementation is located in util.c */
|
35
|
-
#if ( !defined(_MSC_VER) || defined(__STDC__) && __STDC__ == 1 )
|
36
|
-
/* support (VC++ Language extensions) = OFF && defined(INCHI_ANSI_ONLY) */
|
37
|
-
int memicmp (const void*, const void*, size_t);
|
38
|
-
int stricmp( const char *s1, const char *s2 );
|
39
|
-
char *_strnset( char *string, int c, size_t count );
|
40
|
-
char *_strdup( const char *string );
|
41
|
-
#endif
|
42
|
-
/* #endif */
|
43
|
-
|
44
|
-
#endif /* } */
|
45
|
-
|
46
|
-
#define inchi_max(a,b) (((a)>(b))?(a):(b))
|
47
|
-
#define inchi_min(a,b) (((a)<(b))?(a):(b))
|
48
|
-
|
49
|
-
|
50
|
-
#endif /* __INCHI_COMPAT_H__ */
|
data/ext/src/e_ichierr.h
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* International Union of Pure and Applied Chemistry (IUPAC)
|
3
|
-
* International Chemical Identifier (InChI)
|
4
|
-
* Version 1
|
5
|
-
* Software version 1.00
|
6
|
-
* April 13, 2005
|
7
|
-
* Developed at NIST
|
8
|
-
*/
|
9
|
-
|
10
|
-
#ifndef __INCHIERR_H__
|
11
|
-
#define __INCHIERR_H__
|
12
|
-
|
13
|
-
#define _IS_OKAY 0
|
14
|
-
#define _IS_WARNING 1
|
15
|
-
#define _IS_ERROR 2 /* Microsoft defined its own IS_ERROR() macro */
|
16
|
-
#define _IS_FATAL 3
|
17
|
-
#define _IS_UNKNOWN 4 /* unknown error: used in INChI DLL only */
|
18
|
-
#define _IS_EOF -1 /* end of file */
|
19
|
-
#define _IS_SKIP -2
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
#define INCHI_INP_ERROR_ERR 40
|
24
|
-
#define INCHI_INP_ERROR_RET (-1)
|
25
|
-
|
26
|
-
#define INCHI_INP_FATAL_ERR 1
|
27
|
-
#define INCHI_INP_FATAL_RET 0
|
28
|
-
|
29
|
-
#define INCHI_INP_EOF_ERR 11
|
30
|
-
#define INCHI_INP_EOF_RET 0
|
31
|
-
|
32
|
-
#define LOG_MASK_WARN 1
|
33
|
-
#define LOG_MASK_ERR 2
|
34
|
-
#define LOG_MASK_FATAL 4
|
35
|
-
|
36
|
-
#define LOG_MASK_ALL (LOG_MASK_WARN | LOG_MASK_ERR | LOG_MASK_FATAL)
|
37
|
-
#define LOG_MASK_NO_WARN (LOG_MASK_ERR | LOG_MASK_FATAL)
|
38
|
-
|
39
|
-
|
40
|
-
#endif /* __INCHIERR_H__ */
|
data/ext/src/e_ichimain.c
DELETED
@@ -1,593 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* International Union of Pure and Applied Chemistry (IUPAC)
|
3
|
-
* International Chemical Identifier (InChI)
|
4
|
-
* Version 1
|
5
|
-
* Software version 1.00
|
6
|
-
* April 13, 2005
|
7
|
-
* Developed at NIST
|
8
|
-
*/
|
9
|
-
|
10
|
-
/*#define ADD_WIN_CTLC*/
|
11
|
-
|
12
|
-
#if( defined( WIN32 ) && defined( _CONSOLE ) && defined(_MSC_VER) && _MSC_VER >= 800 && defined(ADD_WIN_CTLC) )
|
13
|
-
#include <windows.h>
|
14
|
-
#endif
|
15
|
-
|
16
|
-
|
17
|
-
/* #define CREATE_0D_PARITIES */ /* uncomment to replace coordinates and 2D-parirties with 0D-parities */
|
18
|
-
/* #define MAKE_INCHI_FROM_AUXINFO */ /* uncomment to create the second InChI out of AuxInfo and compare */
|
19
|
-
#define NEIGH_ONLY_ONCE /* comment out to include each bond in both neighboring atoms adjacency lists */
|
20
|
-
|
21
|
-
#include <stdio.h>
|
22
|
-
#include <stdlib.h>
|
23
|
-
|
24
|
-
#include <string.h>
|
25
|
-
#include <ctype.h>
|
26
|
-
#include <stdarg.h>
|
27
|
-
#include <errno.h>
|
28
|
-
#include <limits.h>
|
29
|
-
#include <float.h>
|
30
|
-
|
31
|
-
#include "e_mode.h"
|
32
|
-
#include "inchi_api.h"
|
33
|
-
#include "e_inchi_atom.h"
|
34
|
-
#include "e_ctl_data.h"
|
35
|
-
#include "e_ichi_parms.h"
|
36
|
-
#include "e_util.h"
|
37
|
-
#include "e_ichi_io.h"
|
38
|
-
#include "e_ichierr.h"
|
39
|
-
#include "e_readstru.h"
|
40
|
-
#include "e_ichicomp.h"
|
41
|
-
#ifdef CREATE_0D_PARITIES
|
42
|
-
#include "e_0dstereo.h"
|
43
|
-
#endif
|
44
|
-
|
45
|
-
int e_MakeOutputHeader( char *pSdfLabel, char *pSdfValue, long lSdfId, int num_inp, char *pStr1, char *pStr2 );
|
46
|
-
char *e_GetChiralFlagString( int bChiralFlagOn );
|
47
|
-
|
48
|
-
|
49
|
-
/* console-specific */
|
50
|
-
/*****************************************************************
|
51
|
-
*
|
52
|
-
* Ctrl+C trap; works under Win32 + MS VC++
|
53
|
-
*
|
54
|
-
*****************************************************************/
|
55
|
-
#ifndef INCHI_LIB
|
56
|
-
|
57
|
-
int e_bInterrupted = 0;
|
58
|
-
#if( defined( _WIN32 ) && defined( _CONSOLE ) )
|
59
|
-
|
60
|
-
#if( defined(_MSC_VER) && _MSC_VER >= 800 && defined(ADD_WIN_CTLC) )
|
61
|
-
BOOL WINAPI MyHandlerRoutine(
|
62
|
-
DWORD dwCtrlType /* control signal type */
|
63
|
-
) {
|
64
|
-
if ( dwCtrlType == CTRL_C_EVENT ||
|
65
|
-
dwCtrlType == CTRL_BREAK_EVENT ||
|
66
|
-
dwCtrlType == CTRL_CLOSE_EVENT ||
|
67
|
-
dwCtrlType == CTRL_LOGOFF_EVENT ) {
|
68
|
-
e_bInterrupted = 1;
|
69
|
-
return TRUE;
|
70
|
-
}
|
71
|
-
return FALSE;
|
72
|
-
}
|
73
|
-
#endif
|
74
|
-
int WasInterrupted(void) {
|
75
|
-
#ifdef _DEBUG
|
76
|
-
if ( e_bInterrupted ) {
|
77
|
-
int stop=1; /* for debug only <BRKPT> */
|
78
|
-
}
|
79
|
-
#endif
|
80
|
-
return e_bInterrupted;
|
81
|
-
}
|
82
|
-
|
83
|
-
#endif
|
84
|
-
|
85
|
-
#define EXIT_ON_ERR
|
86
|
-
#define REPEAT_ALL 0
|
87
|
-
/********************************************************************/
|
88
|
-
int main( int argc, char *argv[ ] )
|
89
|
-
{
|
90
|
-
|
91
|
-
STRUCT_DATA struct_data;
|
92
|
-
STRUCT_DATA *sd = &struct_data;
|
93
|
-
FILE *inp_file = NULL, *output_file = NULL, *log_file = NULL, *prb_file = NULL;
|
94
|
-
|
95
|
-
long num_inp, num_err, num_output;
|
96
|
-
char szSdfDataValue[MAX_SDF_VALUE+1];
|
97
|
-
const char *p1, *p2;
|
98
|
-
|
99
|
-
unsigned long ulDisplTime = 0; /* infinite, milliseconds */
|
100
|
-
unsigned long ulTotalProcessingTime = 0;
|
101
|
-
INPUT_PARMS inp_parms;
|
102
|
-
INPUT_PARMS *ip = &inp_parms;
|
103
|
-
char szInchiCmdLine[512];
|
104
|
-
|
105
|
-
inchi_Input inchi_inp, *pInp = &inchi_inp;
|
106
|
-
inchi_Output inchi_out, *pOut = &inchi_out;
|
107
|
-
|
108
|
-
|
109
|
-
int bReleaseVersion = bRELEASE_VERSION;
|
110
|
-
#define nStrLen 256
|
111
|
-
char pStrInchiId[nStrLen], pStrLogId[nStrLen];
|
112
|
-
int nRet = 0, nRet1, i, k, tot_len;
|
113
|
-
int inp_index, out_index;
|
114
|
-
long lSdfId;
|
115
|
-
int nStructNo;
|
116
|
-
|
117
|
-
#if ( defined(REPEAT_ALL) && REPEAT_ALL > 0 )
|
118
|
-
int num_repeat = REPEAT_ALL;
|
119
|
-
#endif
|
120
|
-
|
121
|
-
|
122
|
-
#if( TRACE_MEMORY_LEAKS == 1 )
|
123
|
-
_CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);
|
124
|
-
/* for execution outside of the VC++ debugger uncomment one of the following two */
|
125
|
-
/*#define MY_REPORT_FILE _CRTDBG_FILE_STDERR */
|
126
|
-
/*#define MY_REPORT_FILE _CRTDBG_FILE_STDOUT */
|
127
|
-
#ifdef MY_REPORT_FILE
|
128
|
-
_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
|
129
|
-
_CrtSetReportFile( _CRT_WARN, MY_REPORT_FILE );
|
130
|
-
_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
|
131
|
-
_CrtSetReportFile( _CRT_ERROR, MY_REPORT_FILE );
|
132
|
-
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
|
133
|
-
_CrtSetReportFile( _CRT_ASSERT, MY_REPORT_FILE );
|
134
|
-
#else
|
135
|
-
_CrtSetReportMode(_CRT_WARN | _CRT_ERROR, _CRTDBG_MODE_DEBUG);
|
136
|
-
#endif
|
137
|
-
/* turn on floating point exceptions */
|
138
|
-
{
|
139
|
-
/* Get the default control word. */
|
140
|
-
int cw = _controlfp( 0,0 );
|
141
|
-
|
142
|
-
/* Set the exception masks OFF, turn exceptions on. */
|
143
|
-
/*cw &=~(EM_OVERFLOW|EM_UNDERFLOW|EM_INEXACT|EM_ZERODIVIDE|EM_DENORMAL);*/
|
144
|
-
cw &=~(EM_OVERFLOW|EM_UNDERFLOW|EM_ZERODIVIDE|EM_DENORMAL);
|
145
|
-
|
146
|
-
/* Set the control word. */
|
147
|
-
_controlfp( cw, MCW_EM );
|
148
|
-
|
149
|
-
}
|
150
|
-
#endif
|
151
|
-
|
152
|
-
/*****************************************************************
|
153
|
-
*
|
154
|
-
* Set Ctrl+C trap; works under Win32 + MS VC++
|
155
|
-
*
|
156
|
-
*****************************************************************/
|
157
|
-
#if( defined( _WIN32 ) && defined( _CONSOLE ) && defined(_MSC_VER) && _MSC_VER >= 800 && defined(ADD_WIN_CTLC))
|
158
|
-
if ( SetConsoleCtrlHandler( MyHandlerRoutine, 1 ) ) {
|
159
|
-
/*ConsoleQuit = WasInterrupted*/;
|
160
|
-
}
|
161
|
-
#endif
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
#if ( defined(REPEAT_ALL) && REPEAT_ALL > 0 )
|
166
|
-
repeat:
|
167
|
-
inp_file = output_file = log_file = prb_file = NULL;
|
168
|
-
#endif
|
169
|
-
|
170
|
-
num_inp = 0;
|
171
|
-
num_err = 0;
|
172
|
-
num_output = 0;
|
173
|
-
|
174
|
-
if ( argc < 2 || argc==2 && ( argv[1][0]==INCHI_OPTION_PREFX ) &&
|
175
|
-
(!strcmp(argv[1]+1, "?") || !stricmp(argv[1]+1, "help") ) ) {
|
176
|
-
e_HelpCommandLineParms(stdout);
|
177
|
-
return 0;
|
178
|
-
}
|
179
|
-
/* original input structure */
|
180
|
-
memset( pInp, 0, sizeof(*pInp) );
|
181
|
-
memset( pOut, 0, sizeof(*pOut) );
|
182
|
-
|
183
|
-
memset( szSdfDataValue , 0, sizeof( szSdfDataValue ) );
|
184
|
-
|
185
|
-
/* explicitly cast to (const char **) to avoid a warning about "incompatible pointer type":*/
|
186
|
-
if ( 0 > e_ReadCommandLineParms( argc, (const char **)argv, ip, szSdfDataValue, &ulDisplTime, bReleaseVersion, NULL ) ) {
|
187
|
-
goto exit_function;
|
188
|
-
}
|
189
|
-
if ( !e_OpenFiles( &inp_file, &output_file, &log_file, &prb_file, ip ) ) {
|
190
|
-
goto exit_function;
|
191
|
-
}
|
192
|
-
if ( ip->bNoStructLabels ) {
|
193
|
-
ip->pSdfLabel = NULL;
|
194
|
-
ip->pSdfValue = NULL;
|
195
|
-
} else
|
196
|
-
if ( ip->nInputType == INPUT_INCHI_PLAIN ||
|
197
|
-
ip->nInputType == INPUT_INCHI_XML ||
|
198
|
-
ip->nInputType == INPUT_CMLFILE ) {
|
199
|
-
/* the input may contain both the header and the label of the structure */
|
200
|
-
if ( !ip->pSdfLabel )
|
201
|
-
ip->pSdfLabel = ip->szSdfDataHeader;
|
202
|
-
if ( !ip->pSdfValue )
|
203
|
-
ip->pSdfValue = szSdfDataValue;
|
204
|
-
}
|
205
|
-
e_PrintInputParms( log_file, ip );
|
206
|
-
pStrInchiId[0] = '\0';
|
207
|
-
/******************************************************************/
|
208
|
-
/* Main cycle */
|
209
|
-
/* read input structures and create their InChI */
|
210
|
-
ulTotalProcessingTime = 0;
|
211
|
-
|
212
|
-
out_index = 0;
|
213
|
-
while ( !e_bInterrupted ) {
|
214
|
-
int bHasTimeout = 0;
|
215
|
-
if ( ip->last_struct_number && num_inp >= ip->last_struct_number ) {
|
216
|
-
nRet = _IS_EOF; /* simulate end of file */
|
217
|
-
goto exit_function;
|
218
|
-
}
|
219
|
-
/* create command line */
|
220
|
-
szInchiCmdLine[0] = '\0';
|
221
|
-
for ( i = 1; i < argc; i ++ ) {
|
222
|
-
if ( argv[i] && INCHI_OPTION_PREFX == argv[i][0] && argv[i][1] ) {
|
223
|
-
/* omit certrain options */
|
224
|
-
if ( !memicmp( argv[i]+1, "start:", 6) ||
|
225
|
-
!memicmp( argv[i]+1, "end:", 4) ||
|
226
|
-
!stricmp( argv[i]+1, "Tabbed" )
|
227
|
-
) {
|
228
|
-
continue;
|
229
|
-
}
|
230
|
-
if ( !memicmp( argv[i]+1, "w", 1 ) && isdigit( UCINT argv[i][2] ) ) {
|
231
|
-
bHasTimeout = 1;
|
232
|
-
}
|
233
|
-
/* add option to szInchiCmdLine */
|
234
|
-
if ( strlen(szInchiCmdLine)+strlen(argv[i]) + 4 < sizeof(szInchiCmdLine) ) {
|
235
|
-
if ( szInchiCmdLine[0] )
|
236
|
-
strcat( szInchiCmdLine, " " );
|
237
|
-
k = ( !(k=strcspn( argv[i], " \t" )) || argv[i][k] ); /* k means enclose in "" */
|
238
|
-
if ( k )
|
239
|
-
strcat( szInchiCmdLine, "\"" );
|
240
|
-
strcat( szInchiCmdLine, argv[i] );
|
241
|
-
if ( k )
|
242
|
-
strcat( szInchiCmdLine, "\"" );
|
243
|
-
} else {
|
244
|
-
e_my_fprintf( stderr, "Too many options. Option \"%s\" ignored\n", argv[i] );
|
245
|
-
}
|
246
|
-
}
|
247
|
-
}
|
248
|
-
if ( !bHasTimeout ) {
|
249
|
-
/* add default timeout option -W60: 60 seconds */
|
250
|
-
char p1[] = " W60";
|
251
|
-
p1[1] = INCHI_OPTION_PREFX;
|
252
|
-
if ( strlen(szInchiCmdLine) + strlen( p1 ) < sizeof(szInchiCmdLine) ) {
|
253
|
-
strcat( szInchiCmdLine, p1 );
|
254
|
-
} else {
|
255
|
-
e_my_fprintf( stderr, "Too many options. Option \"%s\" ignored\n", p1 );
|
256
|
-
}
|
257
|
-
}
|
258
|
-
|
259
|
-
inp_index = out_index;
|
260
|
-
/* read one structure from input */
|
261
|
-
e_FreeInchi_Input( pInp );
|
262
|
-
//e_my_fprintf( stderr, "\rStructure: %d.................\r", num_inp+1 );
|
263
|
-
nRet = e_ReadStructure( sd, ip, inp_file, log_file, output_file, prb_file, pInp, num_inp+1,
|
264
|
-
/* for CML:*/ inp_index, &out_index );
|
265
|
-
/* simulate INChI structure header */
|
266
|
-
lSdfId = ( ip->bGetSdfileId )? ip->lSdfId : 0; /* if requested then CAS r.n. otherwise struct. number*/
|
267
|
-
nStructNo = ( ip->lMolfileNumber > 0 )? ip->lMolfileNumber : num_inp+1;
|
268
|
-
e_MakeOutputHeader( ip->pSdfLabel, ip->pSdfValue, lSdfId, nStructNo, pStrInchiId, pStrLogId );
|
269
|
-
if ( sd->pStrErrStruct && sd->pStrErrStruct[0] ) {
|
270
|
-
p1 = "; ";
|
271
|
-
p2 = sd->pStrErrStruct;
|
272
|
-
} else {
|
273
|
-
p1 = p2 = "";
|
274
|
-
}
|
275
|
-
/* e_ReadStructure() outputs the error/warning messages, so we do not need to re-output them here */
|
276
|
-
switch ( nRet ) {
|
277
|
-
case _IS_FATAL:
|
278
|
-
num_inp ++;
|
279
|
-
num_err ++;
|
280
|
-
goto exit_function;
|
281
|
-
case _IS_EOF:
|
282
|
-
//e_my_fprintf( stderr, "\rStructure %d could not be read: Detected end of file. \r", num_inp+1 );
|
283
|
-
goto exit_function;
|
284
|
-
case _IS_ERROR:
|
285
|
-
num_inp ++;
|
286
|
-
num_err ++;
|
287
|
-
continue;
|
288
|
-
case _IS_SKIP:
|
289
|
-
num_inp ++;
|
290
|
-
continue;
|
291
|
-
}
|
292
|
-
if ( nRet != _IS_WARNING ) {
|
293
|
-
//e_my_fprintf( stderr, "\r%s \r", pStrLogId );
|
294
|
-
}
|
295
|
-
/* chiral flag */
|
296
|
-
/* *****************************************************************************
|
297
|
-
* Chiral flags are set in:
|
298
|
-
* - RunICHI.c #1610 -- ReadTheStructure() -- cInChI, wInChI
|
299
|
-
* - e_IchiMain.c #273 -- main() -- C example of calling InChI dll (here)
|
300
|
-
* - inchi_dll.c #1662 -- ExtractOneStructure -- InChI dll code
|
301
|
-
*******************************************************************************/
|
302
|
-
|
303
|
-
p1 = NULL;
|
304
|
-
if ( (ip->nMode & REQ_MODE_CHIR_FLG_STEREO) && (ip->nMode & REQ_MODE_STEREO) &&
|
305
|
-
( ip->bChiralFlag & (FLAG_SET_INP_AT_CHIRAL | FLAG_SET_INP_AT_NONCHIRAL) ) ) {
|
306
|
-
; /* cmd line has priority over the chiral flag in Molfile */
|
307
|
-
} else
|
308
|
-
if ( sd->bChiralFlag & FLAG_INP_AT_CHIRAL ) {
|
309
|
-
p1 = e_GetChiralFlagString( 1 ); /* input file has chiral flag */
|
310
|
-
} else
|
311
|
-
if ( (ip->nMode & REQ_MODE_CHIR_FLG_STEREO) && (ip->nMode & REQ_MODE_STEREO) ||
|
312
|
-
(sd->bChiralFlag & FLAG_INP_AT_NONCHIRAL) ) { /* fix 04/05/2005 D.T.*/
|
313
|
-
/* chiral flag requested (/SUCF) or input has non-chiral flag */
|
314
|
-
p1 = e_GetChiralFlagString( 0 );
|
315
|
-
}
|
316
|
-
if ( p1 ) {
|
317
|
-
if ( strlen(szInchiCmdLine) + strlen( p1 ) < sizeof(szInchiCmdLine) ) {
|
318
|
-
strcat( szInchiCmdLine, p1 );
|
319
|
-
} else {
|
320
|
-
e_my_fprintf( stderr, "Too many options. Option \"%s\" ignored\n", p1 );
|
321
|
-
}
|
322
|
-
}
|
323
|
-
|
324
|
-
/* create INChI for each connected component of the structure and optionally display them */
|
325
|
-
/* output INChI for the whole structure */
|
326
|
-
FreeINCHI ( pOut );
|
327
|
-
pInp->szOptions = szInchiCmdLine;
|
328
|
-
#ifdef CREATE_0D_PARITIES
|
329
|
-
if ( !pInp->stereo0D && !pInp->num_stereo0D ) {
|
330
|
-
int bPointedEdgeStereo = (0 != (TG_FLAG_POINTED_EDGE_STEREO & ip->bTautFlags));
|
331
|
-
set_0D_stereo_parities( pInp, bPointedEdgeStereo );
|
332
|
-
Clear3D2Dstereo(pInp);
|
333
|
-
}
|
334
|
-
#endif
|
335
|
-
#ifdef NEIGH_ONLY_ONCE
|
336
|
-
e_RemoveRedundantNeighbors( pInp );
|
337
|
-
#endif
|
338
|
-
/********************************************
|
339
|
-
*
|
340
|
-
* CREATE INCHI
|
341
|
-
*
|
342
|
-
********************************************/
|
343
|
-
nRet1 = GetINCHI( pInp, pOut );
|
344
|
-
|
345
|
-
ulTotalProcessingTime += sd->ulStructTime;
|
346
|
-
nRet = nRet1;
|
347
|
-
#ifdef MAKE_INCHI_FROM_AUXINFO
|
348
|
-
/**************************************************
|
349
|
-
*
|
350
|
-
* CREATE one more INCHI FROM AuxInfo and compare
|
351
|
-
*
|
352
|
-
* it to to the first INCHI
|
353
|
-
*
|
354
|
-
* Note: This should double the elapsed CPU time
|
355
|
-
*
|
356
|
-
**************************************************/
|
357
|
-
if ( nRet1 == inchi_Ret_OKAY || nRet1 == inchi_Ret_WARNING ) {
|
358
|
-
char *szInchiAuxInfo = pOut->szAuxInfo, *p1 /* shadowing previous definition */;
|
359
|
-
int bDoNotAddH = ip->bDoNotAddH;
|
360
|
-
int nRet2;
|
361
|
-
inchi_Input inchi_inp2, *pInp2 = &inchi_inp2;
|
362
|
-
inchi_Output inchi_out2, *pOut2 = &inchi_out2;
|
363
|
-
InchiInpData idat;
|
364
|
-
/* setup input for Get_inchi_Input_FromAuxInfo */
|
365
|
-
idat.pInp = pInp2;
|
366
|
-
pInp2->szOptions = NULL; /* not needed */
|
367
|
-
|
368
|
-
/* Make InChI input out of AuxInfo */
|
369
|
-
nRet2 = Get_inchi_Input_FromAuxInfo( szInchiAuxInfo, bDoNotAddH, &idat );
|
370
|
-
|
371
|
-
if ( inchi_Ret_OKAY == nRet2 || inchi_Ret_WARNING == nRet2 ) {
|
372
|
-
/* set chiral flag */
|
373
|
-
p1 = NULL;
|
374
|
-
if ( (ip->nMode & REQ_MODE_CHIR_FLG_STEREO) && (ip->nMode & REQ_MODE_STEREO) &&
|
375
|
-
( ip->bChiralFlag & (FLAG_SET_INP_AT_CHIRAL | FLAG_SET_INP_AT_NONCHIRAL) ) ) {
|
376
|
-
; /* cmd line has priority over the chiral flag in Molfile */
|
377
|
-
} else
|
378
|
-
if ( idat.bChiral & FLAG_INP_AT_CHIRAL ) { /* fix 04/05/2005 D.T.*/
|
379
|
-
p1 = e_GetChiralFlagString( 1 ); /* input file has chiral flag */
|
380
|
-
} else
|
381
|
-
if ( (ip->nMode & REQ_MODE_CHIR_FLG_STEREO) && (ip->nMode & REQ_MODE_STEREO) ||
|
382
|
-
(idat.bChiral & FLAG_INP_AT_NONCHIRAL) ) { /* fix 04/05/2005 D.T.*/
|
383
|
-
/* chiral flag requested (/SUCF) or input has non-chiral flag */
|
384
|
-
p1 = e_GetChiralFlagString( 0 );
|
385
|
-
}
|
386
|
-
if ( p1 ) {
|
387
|
-
if ( strlen(szInchiCmdLine) + strlen( p1 ) < sizeof(szInchiCmdLine) ) {
|
388
|
-
strcat( szInchiCmdLine, p1 );
|
389
|
-
} else {
|
390
|
-
e_my_fprintf( stderr, "Too many options. Option \"%s\" ignored\n", p1 );
|
391
|
-
}
|
392
|
-
}
|
393
|
-
|
394
|
-
/* Make InChI out of InChI input out of AuxInfo */
|
395
|
-
pInp2->szOptions = pInp->szOptions;
|
396
|
-
memset( pOut2, 0, sizeof(*pOut2) );
|
397
|
-
nRet2 = GetINCHI( pInp2, pOut2 );
|
398
|
-
/* Compare the two InChI */
|
399
|
-
if ( nRet2 == inchi_Ret_OKAY || nRet2 == inchi_Ret_WARNING ) {
|
400
|
-
if ( !pOut2->szInChI || strcmp( pOut->szInChI, pOut2->szInChI ) ) {
|
401
|
-
e_my_fprintf( stderr, "InChI from AuxInfo Is Different!\n" );
|
402
|
-
}
|
403
|
-
} else {
|
404
|
-
e_my_fprintf( stderr, "InChI from AuxInfo could not be produced: \"%s\"\n", pOut2->szMessage );
|
405
|
-
}
|
406
|
-
FreeINCHI( pOut2 );
|
407
|
-
}
|
408
|
-
Free_inchi_Input( pInp2 );
|
409
|
-
}
|
410
|
-
#endif
|
411
|
-
|
412
|
-
/*****************************/
|
413
|
-
/* output err/warn */
|
414
|
-
/*****************************/
|
415
|
-
if ( pOut->szMessage && pOut->szMessage[0] ) {
|
416
|
-
p1 = "; ";
|
417
|
-
p2 = pOut->szMessage;
|
418
|
-
} else {
|
419
|
-
p1 = p2 = "";
|
420
|
-
}
|
421
|
-
switch ( nRet ) {
|
422
|
-
case inchi_Ret_UNKNOWN:
|
423
|
-
case inchi_Ret_FATAL: /* fatal processing error -- typically, memory allocation error */
|
424
|
-
num_inp ++;
|
425
|
-
num_err ++;
|
426
|
-
#if( defined(EXIT_ON_ERR) && defined(REPEAT_ALL) && REPEAT_ALL > 0 )
|
427
|
-
num_repeat = 0;
|
428
|
-
#endif
|
429
|
-
e_my_fprintf( log_file, "Fatal Error (No INChI%s%s) %s\n", p1, p2, pStrLogId );
|
430
|
-
goto exit_function;
|
431
|
-
case inchi_Ret_EOF: /* typically, no input structure provided or help requested */
|
432
|
-
/* output previous structure number and message */
|
433
|
-
e_my_fprintf( log_file, "End of file detected after structure %d\n", num_inp );
|
434
|
-
goto exit_function;
|
435
|
-
case inchi_Ret_ERROR:
|
436
|
-
num_inp ++;
|
437
|
-
num_err ++;
|
438
|
-
e_my_fprintf( log_file, "Error (No INChI%s%s) %s\n", p1, p2, pStrLogId );
|
439
|
-
#if( defined(EXIT_ON_ERR) && defined(REPEAT_ALL) && REPEAT_ALL > 0 )
|
440
|
-
num_repeat = 0;
|
441
|
-
goto exit_function;
|
442
|
-
#endif
|
443
|
-
continue;
|
444
|
-
case inchi_Ret_SKIP:
|
445
|
-
num_inp ++;
|
446
|
-
e_my_fprintf( log_file, "Skipped %s\n", pStrLogId );
|
447
|
-
goto exit_function;
|
448
|
-
case inchi_Ret_OKAY:
|
449
|
-
break;
|
450
|
-
case inchi_Ret_WARNING:
|
451
|
-
e_my_fprintf( log_file, "Warning (%s) %s\n", p2, pStrLogId );
|
452
|
-
break; /* ok */
|
453
|
-
}
|
454
|
-
|
455
|
-
num_inp ++;
|
456
|
-
tot_len = 0;
|
457
|
-
if ( pOut->szInChI && pOut->szInChI[0] ) {
|
458
|
-
if (ip->bINChIOutputOptions & INCHI_OUT_SDFILE_ONLY ) {
|
459
|
-
/*****************************/
|
460
|
-
/* output SDfile */
|
461
|
-
/*****************************/
|
462
|
-
char *start;
|
463
|
-
unsigned len;
|
464
|
-
int bAddLabel = 0;
|
465
|
-
/*******************************************************************************/
|
466
|
-
/* output a SDfile. pOut->szInChI contains Molfile ending with "$$$$\n" line. */
|
467
|
-
/* Replace the 1st line with the structure number */
|
468
|
-
/* Replace the last line with the SDfile header, label, and new "$$$$\n" line */
|
469
|
-
/*******************************************************************************/
|
470
|
-
/* 1. remove the 1st line (later replace it with the actual structure number) */
|
471
|
-
if ( start = strchr( pOut->szInChI, '\n' ) ) {
|
472
|
-
e_inchi_print( output_file, "Structure #%ld", nStructNo );
|
473
|
-
} else {
|
474
|
-
start = pOut->szInChI;
|
475
|
-
}
|
476
|
-
/* 2. SDfile header and data: write zero to the 1st byte of
|
477
|
-
* the last line "$$$$\n" to remove this line with purpose to relpace it */
|
478
|
-
if ( ip->pSdfLabel && ip->pSdfLabel[0] && ip->pSdfValue && ip->pSdfValue[0] &&
|
479
|
-
(len = strlen(start)) && len > 5 && '$' == start[len-5] && '\n' == start[len-6] ) {
|
480
|
-
start[len-5] = '\0';
|
481
|
-
bAddLabel = 1;
|
482
|
-
}
|
483
|
-
/* 3. Output the whole Molfile */
|
484
|
-
e_inchi_print( output_file, "%s", start );
|
485
|
-
if ( bAddLabel ) {
|
486
|
-
e_inchi_print( output_file, "> <%s>\n%s\n\n$$$$\n", ip->pSdfLabel, ip->pSdfValue );
|
487
|
-
}
|
488
|
-
|
489
|
-
} else {
|
490
|
-
/*****************************/
|
491
|
-
/* output InChI */
|
492
|
-
/*****************************/
|
493
|
-
int bTabbed = 0 != ( ip->bINChIOutputOptions & INCHI_OUT_TABBED_OUTPUT );
|
494
|
-
int bAuxInfo = !( ip->bINChIOutputOptions & INCHI_OUT_ONLY_AUX_INFO ) &&
|
495
|
-
pOut->szAuxInfo && pOut->szAuxInfo[0];
|
496
|
-
const char *pLF = "\n";
|
497
|
-
const char *pTAB = bTabbed? "\t" : pLF;
|
498
|
-
if ( !ip->bNoStructLabels ) {
|
499
|
-
/* or print a previously created label string */
|
500
|
-
e_inchi_print( output_file, "%s%s", pStrInchiId, pTAB );
|
501
|
-
}
|
502
|
-
/* output INChI Identifier */
|
503
|
-
e_inchi_print( output_file, "%s%s", pOut->szInChI, bAuxInfo? pTAB : pLF );
|
504
|
-
/* output INChI Aux Info */
|
505
|
-
if ( bAuxInfo ) {
|
506
|
-
e_inchi_print( output_file, "%s\n",pOut->szAuxInfo );
|
507
|
-
}
|
508
|
-
}
|
509
|
-
}
|
510
|
-
}
|
511
|
-
|
512
|
-
exit_function:
|
513
|
-
e_my_fprintf( log_file, "\nProcessed %d structure%s, %d error%s.\n",
|
514
|
-
num_inp, (num_inp==1)?"":"s", num_err, (num_err==1)?"":"s" );
|
515
|
-
|
516
|
-
|
517
|
-
e_FreeInchi_Input( pInp );
|
518
|
-
FreeINCHI ( pOut );
|
519
|
-
|
520
|
-
#if( ADD_CMLPP == 1 )
|
521
|
-
/* BILLY 8/6/04 */
|
522
|
-
/* free CML memory */
|
523
|
-
FreeCml ();
|
524
|
-
FreeCmlDoc( 1 );
|
525
|
-
#endif
|
526
|
-
|
527
|
-
if ( inp_file && inp_file != stdin) {
|
528
|
-
fclose ( inp_file );
|
529
|
-
}
|
530
|
-
if ( prb_file ) {
|
531
|
-
fclose ( prb_file );
|
532
|
-
}
|
533
|
-
if ( output_file && output_file != stdout ) {
|
534
|
-
fclose( output_file );
|
535
|
-
}
|
536
|
-
|
537
|
-
if ( log_file && log_file != stderr ) {
|
538
|
-
fclose( log_file );
|
539
|
-
}
|
540
|
-
for ( i = 0; i < MAX_NUM_PATHS; i ++ ) {
|
541
|
-
if ( ip->path[i] ) {
|
542
|
-
e_inchi_free( (void*) ip->path[i] ); /* cast deliberately discards 'const' qualifier */
|
543
|
-
ip->path[i] = NULL;
|
544
|
-
}
|
545
|
-
}
|
546
|
-
|
547
|
-
#if ( defined(REPEAT_ALL) && REPEAT_ALL > 0 )
|
548
|
-
if ( --num_repeat > 0 ) {
|
549
|
-
goto repeat;
|
550
|
-
}
|
551
|
-
#endif
|
552
|
-
|
553
|
-
|
554
|
-
return 0;
|
555
|
-
}
|
556
|
-
|
557
|
-
|
558
|
-
#endif
|
559
|
-
|
560
|
-
/**********************************************************/
|
561
|
-
int e_MakeOutputHeader( char *pSdfLabel, char *pSdfValue, long lSdfId, int num_inp, char *pStr1, char *pStr2 )
|
562
|
-
{
|
563
|
-
int tot_len1 = 0, tot_len2 = 0;
|
564
|
-
pStr1[0] = '\0';
|
565
|
-
if ( !(pSdfLabel && pSdfLabel[0]) && !(pSdfValue && pSdfValue[0]) ) {
|
566
|
-
tot_len1 = sprintf( pStr1, "Structure: %d", num_inp );
|
567
|
-
tot_len2 = sprintf( pStr2, "structure #%d", num_inp );
|
568
|
-
} else {
|
569
|
-
tot_len1 = sprintf( pStr1, "Structure: %d.%s%s%s%s",
|
570
|
-
num_inp,
|
571
|
-
SDF_LBL_VAL(pSdfLabel, pSdfValue) );
|
572
|
-
|
573
|
-
tot_len2 = sprintf( pStr2, "structure #%d.%s%s%s%s",
|
574
|
-
num_inp,
|
575
|
-
SDF_LBL_VAL(pSdfLabel, pSdfValue) );
|
576
|
-
if ( lSdfId ) {
|
577
|
-
tot_len1 += sprintf( pStr1 + tot_len1, ":%ld", lSdfId );
|
578
|
-
tot_len2 += sprintf( pStr2 + tot_len2, ":%ld", lSdfId );
|
579
|
-
}
|
580
|
-
}
|
581
|
-
return tot_len1;
|
582
|
-
}
|
583
|
-
/************************************************************/
|
584
|
-
char *e_GetChiralFlagString( int bChiralFlagOn )
|
585
|
-
{
|
586
|
-
static char szChiralFlag[64];
|
587
|
-
szChiralFlag[0] = ' ';
|
588
|
-
szChiralFlag[1] = INCHI_OPTION_PREFX;
|
589
|
-
sprintf( szChiralFlag+2, "ChiralFlag%s", bChiralFlagOn? "On":"Off" );
|
590
|
-
return szChiralFlag;
|
591
|
-
}
|
592
|
-
|
593
|
-
|