rino 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/README +44 -0
  2. data/Rakefile +123 -0
  3. data/ext/extconf.rb +26 -0
  4. data/ext/ruby_inchi_main.so +0 -0
  5. data/ext/src/aux2atom.h +2786 -0
  6. data/ext/src/comdef.h +148 -0
  7. data/ext/src/e_0dstereo.c +3014 -0
  8. data/ext/src/e_0dstereo.h +31 -0
  9. data/ext/src/e_comdef.h +57 -0
  10. data/ext/src/e_ctl_data.h +147 -0
  11. data/ext/src/e_ichi_io.c +498 -0
  12. data/ext/src/e_ichi_io.h +40 -0
  13. data/ext/src/e_ichi_parms.c +37 -0
  14. data/ext/src/e_ichi_parms.h +41 -0
  15. data/ext/src/e_ichicomp.h +50 -0
  16. data/ext/src/e_ichierr.h +40 -0
  17. data/ext/src/e_ichimain.c +593 -0
  18. data/ext/src/e_ichisize.h +43 -0
  19. data/ext/src/e_inchi_atom.c +75 -0
  20. data/ext/src/e_inchi_atom.h +33 -0
  21. data/ext/src/e_inpdef.h +41 -0
  22. data/ext/src/e_mode.h +706 -0
  23. data/ext/src/e_mol2atom.c +649 -0
  24. data/ext/src/e_readinch.c +58 -0
  25. data/ext/src/e_readmol.c +54 -0
  26. data/ext/src/e_readmol.h +180 -0
  27. data/ext/src/e_readstru.c +251 -0
  28. data/ext/src/e_readstru.h +33 -0
  29. data/ext/src/e_util.c +284 -0
  30. data/ext/src/e_util.h +61 -0
  31. data/ext/src/extr_ct.h +251 -0
  32. data/ext/src/ichi.h +206 -0
  33. data/ext/src/ichi_bns.c +7999 -0
  34. data/ext/src/ichi_bns.h +231 -0
  35. data/ext/src/ichican2.c +5000 -0
  36. data/ext/src/ichicano.c +2195 -0
  37. data/ext/src/ichicano.h +49 -0
  38. data/ext/src/ichicans.c +1625 -0
  39. data/ext/src/ichicant.h +379 -0
  40. data/ext/src/ichicomn.h +260 -0
  41. data/ext/src/ichicomp.h +50 -0
  42. data/ext/src/ichidrp.h +119 -0
  43. data/ext/src/ichierr.h +124 -0
  44. data/ext/src/ichiisot.c +101 -0
  45. data/ext/src/ichilnct.c +286 -0
  46. data/ext/src/ichimain.h +132 -0
  47. data/ext/src/ichimak2.c +1189 -0
  48. data/ext/src/ichimake.c +3812 -0
  49. data/ext/src/ichimake.h +205 -0
  50. data/ext/src/ichimap1.c +851 -0
  51. data/ext/src/ichimap2.c +2856 -0
  52. data/ext/src/ichimap4.c +1609 -0
  53. data/ext/src/ichinorm.c +741 -0
  54. data/ext/src/ichinorm.h +67 -0
  55. data/ext/src/ichiparm.c +45 -0
  56. data/ext/src/ichiparm.h +1441 -0
  57. data/ext/src/ichiprt1.c +3612 -0
  58. data/ext/src/ichiprt2.c +1511 -0
  59. data/ext/src/ichiprt3.c +3011 -0
  60. data/ext/src/ichiqueu.c +1003 -0
  61. data/ext/src/ichiring.c +326 -0
  62. data/ext/src/ichiring.h +49 -0
  63. data/ext/src/ichisize.h +35 -0
  64. data/ext/src/ichisort.c +539 -0
  65. data/ext/src/ichister.c +3538 -0
  66. data/ext/src/ichister.h +35 -0
  67. data/ext/src/ichitaut.c +3843 -0
  68. data/ext/src/ichitaut.h +387 -0
  69. data/ext/src/ichitime.h +74 -0
  70. data/ext/src/inchi_api.h +670 -0
  71. data/ext/src/inchi_dll.c +1480 -0
  72. data/ext/src/inchi_dll.h +34 -0
  73. data/ext/src/inchi_dll_main.c +23 -0
  74. data/ext/src/inchi_dll_main.h +31 -0
  75. data/ext/src/inpdef.h +328 -0
  76. data/ext/src/lreadmol.h +1246 -0
  77. data/ext/src/mode.h +706 -0
  78. data/ext/src/ruby_inchi_main.c +558 -0
  79. data/ext/src/runichi.c +4179 -0
  80. data/ext/src/strutil.c +3861 -0
  81. data/ext/src/strutil.h +182 -0
  82. data/ext/src/util.c +1130 -0
  83. data/ext/src/util.h +85 -0
  84. data/lib/clean_tempfile.rb +220 -0
  85. data/lib/rino.rb +111 -0
  86. data/test/test.rb +386 -0
  87. metadata +130 -0
@@ -0,0 +1,387 @@
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 __INCHITAUT_H__
11
+ #define __INCHITAUT_H__
12
+
13
+ #include "inpdef.h"
14
+ #include "ichi_bns.h"
15
+
16
+ /*******************************************************
17
+ --- Header of tautomers groups ---
18
+ --- Each entry is AT_TAUTOMER_HDR type ---
19
+ number of tautomer groups (nNumTautGroups)
20
+ index of the first tautomer group (#1)
21
+ ...
22
+ index of the last tautomer group (#nNumTautGroups)
23
+ --- end of the Header of tautomers groups description ---
24
+
25
+ --- One endpoint group description ---
26
+ --- Each entry has AT_TAUTOMER type members ---
27
+ <fixed portion (6 entries)>
28
+ number of endpoints (0=end of list)
29
+ number of mobile groups, including number of negative charges (=num(H)+num(-))
30
+ number of negative charges
31
+ number of 1H atoms
32
+ number of 2H (deuterium) atoms
33
+ number of 3H (tritium) atoms
34
+ <variable portion, sorted in ascending order>
35
+ atom rank #1 (ascending order)
36
+ ...
37
+ atom rank #endpoints
38
+ --- end of the endpoint group description ----
39
+
40
+ ----------------------------------------------
41
+ Note:
42
+ In the following Linear CT Tautomer descriptions
43
+ we assume the tautomeric groups and the endpoints
44
+ within them have been properly sorted
45
+
46
+ --------- Linear CT Tautomer description -----
47
+ <for each tautomeric group>
48
+ -- fixed length part, non-isotopic --
49
+ number of endpoints = t_group->nNumEndpoints
50
+ number of mobile atoms = t_group->num[0]
51
+ ...
52
+ number of negative charges = t_group->num[T_NUM_NO_ISOTOPIC-1]
53
+ -- fixed length part, isotopic --
54
+ number of T (3H) = t_group->num[T_NUM_NO_ISOTOPIC]
55
+ ...
56
+ number of 1H = t_group->num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC-1]
57
+ -- variable length part --
58
+ rank of the first endpoint = nRank[t_group_info->nEndpointAtomNumber[t_group->nFirstEndpointAtNoPos]];
59
+ ...
60
+ rank of the last endpoint = nRank[t_group_info->nEndpointAtomNumber[t_group->nFirstEndpointAtNoPos+t_group->nNumEndpoints-1]];
61
+
62
+ --------- Linear CT Isotopic Tautomer description -----
63
+ <for each isotopic tautomeric group>
64
+ number of T (3H) = t_group->num[T_NUM_NO_ISOTOPIC]
65
+ ...
66
+ number of 1H = t_group->num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC-1]
67
+ t-group ordering number in the Linear CT Tautomer, starts from 1
68
+
69
+ ***************************************************************/
70
+
71
+
72
+ #define T_NUM_NO_ISOTOPIC 2
73
+ #define T_NUM_ISOTOPIC NUM_H_ISOTOPES /* was 2, now 3 */
74
+
75
+ #define T_GROUP_HDR_LEN (1+T_NUM_NO_ISOTOPIC /*+T_NUM_ISOTOPIC*/) /* LinearCTTautomer */
76
+
77
+ typedef AT_NUMB AT_TAUTOMER; /* LinearCTTautomer */
78
+
79
+ typedef AT_ISO_SORT_KEY T_GROUP_ISOWT; /* must hold value up to T_GROUP_ISOWT_MULT^3-1 */
80
+ /* similar to AT_ISO_SORT_KEY */
81
+ /* = num_1H + T_GROUP_ISOWT_MULT*(num_D + T_GROUP_ISOWT_MULT*num_T) */
82
+
83
+
84
+ #define T_GROUP_ISOWT_MULT 1024 /* (max. number of identical isotopic hydrogens in a taut. group) + 1 */
85
+ /* changed from 256U 9-12-2003 */
86
+ /* (similar to AT_ISO_SORT_KEY_MULT ) */
87
+ /* note: (long)T_GROUP_ISOWT should always be positive (have zero sign bit) */
88
+
89
+ typedef struct tagIsotopicTautomerGroup {
90
+ AT_NUMB tgroup_num; /* ordering number of a tautomer group with isotopes > 0 */
91
+ /*
92
+ union {
93
+ struct {
94
+ AT_NUMB num_T;
95
+ AT_NUMB num_D;
96
+ AT_NUMB num_1H;
97
+ };
98
+ AT_NUMB num[T_NUM_ISOTOPIC];
99
+ };
100
+ */
101
+ AT_NUMB num[T_NUM_ISOTOPIC]; /* inverted order: num_T, num_D, num_1H */
102
+ } AT_ISO_TGROUP;
103
+
104
+ typedef enum tagTG_NumDA { /* 2004-02-26 */
105
+ TG_Num_dH, /* number of H donors that have only H (all single bonds) */
106
+ TG_Num_dM, /* number of H donors that have (-) (all single bonds) */
107
+ TG_Num_aH, /* number of H acceptors that have H and no (-) (+a double bond) */
108
+ TG_Num_aM, /* number of H acceptors that have (-) and possibly H (+ one double bond) */
109
+ TG_Num_dO, /* number of H donors =C-OH or =C-O(-) */
110
+ TG_Num_aO, /* number of H acceptors -C=O */
111
+ TG_NUM_DA /* number of elements in an array */
112
+ } TGNUMDA;
113
+
114
+ typedef struct tagTautomerGroup {
115
+ /*
116
+ union {
117
+ struct {
118
+ // T_NUM_NO_ISOTOPIC = 2 elements:
119
+ AT_RANK num_Mobile; // Num_H+num_D+num_T+num_NegCharges
120
+ AT_RANK num_NegCharges;
121
+ // T_NUM_ISOTOPIC = 3 elements
122
+ AT_RANK num_T; // here the isotopic part (num+T_NUM_NO_ISOTOPIC) starts
123
+ AT_RANK num_D;
124
+ AT_RANK num_1H;
125
+ };
126
+ AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]; // same size and meaning as num[] in T_ENDPOINT
127
+ };
128
+ */
129
+ AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]; /* same size and meaning as num[] in T_ENDPOINT */
130
+ /* isotopic inv. order: num_T, num_D, num_1H */
131
+ AT_RANK num_DA[TG_NUM_DA];
132
+ T_GROUP_ISOWT iWeight; /* isotopic "weight" = T_GROUP_ISOWT_MULT*(T_GROUP_ISOWT_MULT*num_T + num_D)+num_1H; */
133
+ AT_NUMB nGroupNumber; /* positive tautomer group ID = atom->endpoint */
134
+ AT_NUMB nNumEndpoints; /* number of the atom numbers in T_GROUP_INFO::nEndpointAtomNumber[] */
135
+ AT_NUMB nFirstEndpointAtNoPos; /* the first index of the atom number in T_GROUP_INFO::nEndpointAtomNumber[] */
136
+ } T_GROUP;
137
+
138
+ /* offsets/num_t_groups within T_GROUP_INFO::tGroupNumber */
139
+ #define TGSO_CURR_ORDER 0 /* tGroupNumber: current sorting order */
140
+ #define TGSO_PREV_ORDER 1 /* tPrevGroupNumber: previous sorting order; symmetry rank sorting order */
141
+ /* #define TGSO_CURR_IORDER 1 */ /* tiGroupNumber: isotopic sort order */
142
+ #define TGSO_SYMM_RANK 2 /* tSymmRank: symmetry ranks (no isotopes) = min. ordering number > 0. */
143
+ #define TGSO_SORT_RANK 3 /* tSortRank: current rank (positive ordering number) */
144
+ #define TGSO_SYMM_IORDER 4 /* tiGroupNumber: isotopic symmetry rank sorting order */
145
+ #define TGSO_SYMM_IRANK 5 /* tiSymmRank: isotopic symmetry ranks */
146
+ #define TGSO_SORT_IRANK 6 /* tiSortRank: current isotopic rank (positive ordering number) */
147
+ #define TGSO_MARK_IRANK 7 /* tiMarkGroup: the min. canonical number has been mapped on the endpoint */
148
+ #define TGSO_TOTAL_LEN 8
149
+
150
+ /***************************************************/
151
+ /* flags for t_group_info->tni.bNormalizationFlags */
152
+ /***************************************************/
153
+ #define FLAG_PROTON_NPO_SIMPLE_REMOVED 0x0001
154
+ #define FLAG_PROTON_NP_HARD_REMOVED 0x0002
155
+ #define FLAG_PROTON_AC_SIMPLE_ADDED 0x0004
156
+ #define FLAG_PROTON_AC_SIMPLE_REMOVED 0x0008
157
+ #define FLAG_PROTON_AC_HARD_REMOVED 0x0010
158
+ #define FLAG_PROTON_AC_HARD_ADDED 0x0020
159
+ #define FLAG_PROTON_CHARGE_CANCEL 0x0040
160
+ #define FLAG_PROTON_SINGLE_REMOVED 0x0080
161
+
162
+ /* signifies tautomeric structure even though no t-group discovered */
163
+ #define FLAG_NORM_CONSIDER_TAUT ( FLAG_PROTON_NPO_SIMPLE_REMOVED | \
164
+ FLAG_PROTON_NP_HARD_REMOVED | \
165
+ FLAG_PROTON_AC_SIMPLE_ADDED | \
166
+ FLAG_PROTON_AC_SIMPLE_REMOVED | \
167
+ FLAG_PROTON_AC_HARD_REMOVED | \
168
+ FLAG_PROTON_AC_HARD_ADDED | \
169
+ FLAG_PROTON_SINGLE_REMOVED | \
170
+ FLAG_PROTON_CHARGE_CANCEL )
171
+
172
+ /* force salt tautomerism exploration */
173
+ #define FLAG_FORCE_SALT_TAUT ( FLAG_PROTON_NP_HARD_REMOVED | \
174
+ FLAG_PROTON_AC_HARD_REMOVED | \
175
+ FLAG_PROTON_AC_HARD_ADDED )
176
+
177
+ typedef struct tagTautomerNormInfo {
178
+ NUM_H nNumRemovedExplicitH; /* keeps track of explicit H */
179
+ NUM_H nNumRemovedProtons;
180
+ NUM_H nNumRemovedProtonsIsotopic[NUM_H_ISOTOPES];
181
+ INCHI_MODE bNormalizationFlags;
182
+ } TNI;
183
+
184
+ /***************************************************/
185
+ /* t_group_info definition */
186
+ /***************************************************/
187
+ typedef struct tagTautomerGroupsInfo {
188
+ T_GROUP *t_group; /* max_num_t_groups elements */
189
+ AT_NUMB *nEndpointAtomNumber; /* nNumEndpoints elements; also see comments to T_GROUP */
190
+ AT_NUMB *tGroupNumber;
191
+ int nNumEndpoints;
192
+ int num_t_groups;
193
+ int max_num_t_groups;
194
+ int bIgnoreIsotopic;
195
+
196
+ AT_NUMB *nIsotopicEndpointAtomNumber; /* [0]: number of the following atoms; [1...]: non-tautomeric atoms that may have isotopic H */
197
+ int nNumIsotopicEndpoints; /* allocated length of nIsotopicEndpointAtomNumber */
198
+ NUM_H num_iso_H[NUM_H_ISOTOPES]; /* isotopic H on tautomeric atoms and those in nIsotopicEndpointAtomNumber */
199
+
200
+ TNI tni;
201
+
202
+ INCHI_MODE bTautFlags;
203
+ INCHI_MODE bTautFlagsDone;
204
+ } T_GROUP_INFO;
205
+
206
+ #define CANON_FLAG_NO_H_RECANON 0x0001 /* iOther: second canonicalization of the no H structure */
207
+ #define CANON_FLAG_NO_TAUT_H_DIFF 0x0002 /* iOther: NoTautH eq. partition differs from NoH */
208
+ #define CANON_FLAG_ISO_ONLY_NON_TAUT_DIFF 0x0004 /* iOther: eq. partition in isotopic only non-taut differs from non-isotopic */
209
+ #define CANON_FLAG_ISO_TAUT_DIFF 0x0008 /* iBase: isotopic eq. partition in isotopic taut differs from non-isotopic taut */
210
+ #define CANON_FLAG_ISO_FIXED_H_DIFF 0x0010 /* iOther: isotopic eq. partition in fixed H non-taut differs from non-isotopic fixed H */
211
+
212
+ /* Note: rank of tautomer atom #i = Rank[nEndpointAtomNumber[i]] */
213
+ /* for each tautomer atom group (t_group) t_group.nFirstEndpointAtNoPos */
214
+ /* is the first index of the atom number in nEndpointAtomNumber[] */
215
+
216
+ typedef struct tagTautomerEndpoint {
217
+ /*
218
+ union {
219
+ struct {
220
+ AT_RANK num_Mobile; // Num_H+num_D+num_T+num_NegCharges
221
+ AT_RANK num_NegCharges;
222
+ AT_RANK num_T;
223
+ AT_RANK num_D;
224
+ };
225
+ AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]; // same size and meaning as num[] in T_GROUP
226
+ };
227
+ */
228
+ AT_RANK num[T_NUM_NO_ISOTOPIC+T_NUM_ISOTOPIC]; /* same size and meaning as num[] in T_GROUP */
229
+ AT_RANK num_DA[TG_NUM_DA];
230
+ AT_NUMB nGroupNumber;
231
+ AT_NUMB nEquNumber; /* same for endpoints connected by alt paths */
232
+ AT_NUMB nAtomNumber;
233
+ /*AT_NUMB neighbor_index; */
234
+ } T_ENDPOINT;
235
+
236
+ typedef struct tagTautomerBondLocation {
237
+ AT_NUMB nAtomNumber;
238
+ AT_NUMB neighbor_index;
239
+ } T_BONDPOS;
240
+
241
+ typedef struct tagEndpointInfo {
242
+ S_CHAR cMoveableCharge;
243
+ S_CHAR cNeutralBondsValence;
244
+ S_CHAR cMobile;
245
+ S_CHAR cDonor;
246
+ S_CHAR cAcceptor;
247
+ } ENDPOINT_INFO;
248
+
249
+
250
+ /* positive charge group (extended onium) */
251
+
252
+ #define CHARGED_CPOINT(X,i) ((X)[i].charge==1)
253
+
254
+ typedef struct tagChargeCandidate {
255
+ AT_NUMB atnumber;
256
+ S_CHAR type;
257
+ S_CHAR subtype;
258
+ } C_CANDIDATE;
259
+
260
+ typedef struct tagChargeGroup {
261
+ AT_RANK num[2]; /* [0]: number of (+), [1]: number atoms that have H, including H accessible through tautomerism */
262
+ AT_RANK num_CPoints;
263
+ AT_NUMB nGroupNumber;
264
+ U_CHAR cGroupType;
265
+ } C_GROUP;
266
+
267
+ typedef struct tagChargeGroupsInfo {
268
+ C_GROUP *c_group;
269
+ int num_c_groups;
270
+ int max_num_c_groups;
271
+
272
+ C_CANDIDATE *c_candidate;
273
+ int max_num_candidates;
274
+ int num_candidates; /* 0=>unimitialized, -1=>no candidates found */
275
+ } C_GROUP_INFO;
276
+
277
+ /* salts */
278
+ typedef struct tagSaltChargeCandidate {
279
+ AT_NUMB atnumber;
280
+ S_CHAR type;
281
+ S_CHAR subtype;
282
+ AT_NUMB endpoint; /* MAX_ATOMS+1 => found alt path to the candidate */
283
+ } S_CANDIDATE;
284
+
285
+ typedef struct tagSaltGroupInfo {
286
+ S_CANDIDATE *s_candidate;
287
+ int max_num_candidates;
288
+ int num_candidates; /* 0=>unimitialized, -1=>no candidates found */
289
+ int num_other_candidates; /* num. non-"acidic O" candidates */
290
+ int num_p_only_candidates; /* num. non-tautomeric p-donor/acceptor candidates like -CH2-SH */
291
+ } S_GROUP_INFO;
292
+
293
+ /********************* ATOM_SIZES *******************************/
294
+ /* sizes of a component */
295
+ typedef struct tagAtomSizes {
296
+ /* for tautomeric and non-tautomeric structures */
297
+ int nMaxNumStereoAtoms; /* max. number of stereo atoms in isotopic case */
298
+ int nMaxNumStereoBonds; /* max. number of stereo bonds in isotopic case */
299
+ int num_isotopic_atoms; /* includes atoms that have isotopic tautomeric H */
300
+ int nLenCT;
301
+ int nLenBonds;
302
+ int nLenIsotopic;
303
+ int nLenCTAtOnly;
304
+ int nLenLinearCTStereoDble; /* max. number of stereo bonds in non-isotopic case */
305
+ int nLenLinearCTStereoCarb; /* max. number of stereo atoms in non-isotopic case */
306
+ /* int bHasIsotopicAtoms; */
307
+ int bMayHaveStereo;
308
+
309
+ int bIgnoreIsotopic;
310
+
311
+ /* tautomeric structure only; zeroes in non-tautomeric */
312
+ int nLenLinearCTTautomer;
313
+ int nLenLinearCTIsotopicTautomer;
314
+ int bHasIsotopicTautGroups;
315
+ int nLenIsotopicEndpoints;
316
+
317
+ } ATOM_SIZES;
318
+
319
+
320
+ typedef struct tagDfsPath {
321
+ AT_RANK at_no;
322
+ AT_RANK nDfsLevel;
323
+ U_CHAR bond_type;
324
+ S_CHAR bond_pos;
325
+ } DFS_PATH;
326
+
327
+
328
+ #ifndef INCHI_ALL_CPP
329
+ #ifdef __cplusplus
330
+ extern "C" {
331
+ #endif
332
+ #endif
333
+
334
+ int is_centerpoint_elem( U_CHAR el_number );
335
+ int is_centerpoint_elem_strict( U_CHAR el_number );
336
+
337
+ int bIsCenterPointStrict( inp_ATOM *atom, int iat );
338
+
339
+ int nGetEndpointInfo( inp_ATOM *atom, int iat, ENDPOINT_INFO *eif );
340
+ void AddAtom2DA( AT_RANK num_DA[], inp_ATOM *atom, int at_no, int bSubtract );
341
+ int AddAtom2num( AT_RANK num[], inp_ATOM *atom, int at_no, int bSubtract );
342
+ int AddEndPoint( T_ENDPOINT *pEndPoint, inp_ATOM *at, int iat );
343
+ int bHasAcidicHydrogen( inp_ATOM *at, int i );
344
+ int bHasOtherExchangableH ( inp_ATOM *at, int i );
345
+ int bHasAcidicMinus( inp_ATOM *at, int i );
346
+
347
+
348
+ int nGet15TautIn6MembAltRing( inp_ATOM *atom, int nStartAtom, AT_RANK *nBfsTreePos,
349
+ DFS_PATH *DfsPath, int nMaxLenBfsTree,
350
+ T_ENDPOINT *EndPoint, int nMaxNumEndPoint,
351
+ T_BONDPOS *BondPos, int nMaxNumBondPos,
352
+ int *pnNumEndPoint, int *pnNumBondPos,
353
+ struct BalancedNetworkStructure *pBNS,
354
+ struct BalancedNetworkData *pBD, int num_atoms );
355
+
356
+ int nGet12TautIn5MembAltRing( inp_ATOM *atom, int nStartAtom, int nStartAtomNeighbor,
357
+ AT_RANK *nBfsTreePos, DFS_PATH *DfsPath, int nMaxLenBfsTree,
358
+ T_ENDPOINT *EndPoint, int nMaxNumEndPoint,
359
+ T_BONDPOS *BondPos, int nMaxNumBondPos,
360
+ int *pnNumEndPoint, int *pnNumBondPos,
361
+ struct BalancedNetworkStructure *pBNS,
362
+ struct BalancedNetworkData *pBD, int num_atoms );
363
+ int nGet14TautIn7MembAltRing( inp_ATOM *atom, int nStartAtom, int nStartAtomNeighbor,
364
+ int nStartAtomNeighborEndpoint, int nStartAtomNeighborNeighborEndpoint,
365
+ AT_RANK *nDfsPathPos, DFS_PATH *DfsPath, int nMaxLenDfsPath,
366
+ T_ENDPOINT *EndPoint, int nMaxNumEndPoint,
367
+ T_BONDPOS *BondPos, int nMaxNumBondPos,
368
+ int *pnNumEndPoint, int *pnNumBondPos,
369
+ struct BalancedNetworkStructure *pBNS,
370
+ struct BalancedNetworkData *pBD, int num_atoms );
371
+ int nGet14TautIn5MembAltRing( inp_ATOM *atom, int nStartAtom, int nStartAtomNeighbor,
372
+ int nStartAtomNeighborEndpoint, int nStartAtomNeighborNeighborEndpoint,
373
+ AT_RANK *nDfsPathPos, DFS_PATH *DfsPath, int nMaxLenDfsPath,
374
+ T_ENDPOINT *EndPoint, int nMaxNumEndPoint,
375
+ T_BONDPOS *BondPos, int nMaxNumBondPos,
376
+ int *pnNumEndPoint, int *pnNumBondPos,
377
+ struct BalancedNetworkStructure *pBNS,
378
+ struct BalancedNetworkData *pBD, int num_atoms );
379
+
380
+ #ifndef INCHI_ALL_CPP
381
+ #ifdef __cplusplus
382
+ }
383
+ #endif
384
+ #endif
385
+
386
+ #endif /* __INCHITAUT_H__ */
387
+
@@ -0,0 +1,74 @@
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 __ICHITIME_H__
11
+ #define __ICHITIME_H__
12
+
13
+
14
+ #ifdef INCHI_ANSI_ONLY
15
+
16
+ #ifdef __FreeBSD__
17
+ #include <sys/time.h>
18
+ #endif
19
+
20
+ /* get times() */
21
+ #ifdef INCHI_USETIMES
22
+ #include <sys/times.h>
23
+ #endif
24
+
25
+ /*#include <sys/timeb.h>*/
26
+
27
+ #include <time.h>
28
+
29
+ typedef struct tagInchiTime {
30
+ clock_t clockTime;
31
+ } inchiTime;
32
+
33
+ #else
34
+
35
+ /* Win32 _ftime(): */
36
+ #include <sys/timeb.h>
37
+
38
+ typedef struct tagInchiTime {
39
+ unsigned long clockTime; /* Time in seconds since midnight (00:00:00), January 1, 1970;
40
+ signed long overflow expected in 2038 */
41
+ long millitime; /* milliseconds */
42
+
43
+ } inchiTime;
44
+
45
+ #endif
46
+
47
+
48
+ #ifdef INCHI_MAIN
49
+
50
+ #define InchiTimeGet e_InchiTimeGet
51
+ #define InchiTimeMsecDiff e_InchiTimeMsecDiff
52
+ #define InchiTimeAddMsec e_InchiTimeAddMsec
53
+ #define bInchiTimeIsOver e_bInchiTimeIsOver
54
+ #define InchiTimeElapsed e_InchiTimeElapsed
55
+
56
+ #define FullMaxClock e_FullMaxClock
57
+ #define HalfMaxClock e_HalfMaxClock
58
+ #define MaxPositiveClock e_MaxPositiveClock
59
+ #define MinNegativeClock e_MinNegativeClock
60
+ #define HalfMaxPositiveClock e_HalfMaxPositiveClock
61
+ #define HalfMinNegativeClock e_HalfMinNegativeClock
62
+
63
+
64
+
65
+ #endif
66
+
67
+ void InchiTimeGet( inchiTime *TickEnd );
68
+ long InchiTimeMsecDiff( inchiTime *TickEnd, inchiTime *TickStart );
69
+ void InchiTimeAddMsec( inchiTime *TickEnd, unsigned long nNumMsec );
70
+ int bInchiTimeIsOver( inchiTime *TickEnd );
71
+ long InchiTimeElapsed( inchiTime *TickStart );
72
+
73
+ #endif /* __ICHITIME_H__ */
74
+