34#if defined(TARGET_EXE_STANDALONE)
36#define RENUMBER_ATOMS_AND_RECALC_V106 1
37#ifdef RENUMBER_ATOMS_AND_RECALC_V106
39#define STOP_AFTER_FIRST_CHANGE_ON_RENUMBERING 1
41#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (inchi-1 executable)"
44#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (inchi-1 executable)***"
48#elif defined(TARGET_API_LIB)
49#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (API Library)"
51#elif defined(TARGET_EXE_USING_API)
52#ifndef APP_DESCRIPTION
53#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (executable calling API Library)"
56#elif defined(TARGET_LIB_FOR_WINCHI)
57#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (Library for wInChI GUI executable)"
59#elif defined(TARGET_WINCHI)
60#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (wInChI GUI executable)"
63#error No build target #defined, pls check compiler options... (TARGET_EXE_STANDALONE|TARGET_API_LIB|TARGET_EXE_USING_API|TARGET_LIB_FOR_WINCHI)
67#ifndef TARGET_PLATFORM
69#define TARGET_PLATFORM "Windows"
71#define TARGET_PLATFORM "Linux"
100#ifndef BUILD_WITH_ENG_OPTIONS
101#define BUILD_WITH_ENG_OPTIONS 0
106#ifndef BUILD_WITH_AMI
108#define BUILD_WITH_AMI 1
111#ifndef TARGET_EXE_STANDALONE
119#if( BUILD_WITH_AMI == 1 )
120#if( defined( _MSC_VER ) )
124#if (BUILD_WITH_ENG_OPTIONS==1)
125#define OUTPUT_FILE_EXT 1
126#define ALLOW_EMPTY_PATHS 1
128#define DEL_EMPTY_OUTPUT 1
129#define SDF_OUTPUT_HETERO_VALENCE 1
162#if ( !defined(_MSC_VER) || defined(TARGET_API_LIB) || defined(TARGET_EXE_USING_API))
163#ifndef COMPILE_ANSI_ONLY
164#define COMPILE_ANSI_ONLY
167#ifdef COMPILE_ANSI_ONLY
189#pragma warning( disable : 4706 4127 4514 4100 4786 4996 4244 4267 )
196#if !defined(TARGET_EXE_STANDALONE) && !defined(TARGET_LIB_FOR_WINCHI) && defined(_WIN32)
205#include "../../INCHI_API/tbb/tbbmalloc_proxy_for_inchi.h"
210#ifndef COMPILE_ALL_CPP
223#define INCHI_VERSION "1"
224#define INCHI_NAME "InChI"
225#define INCHI_NAM_VER_DELIM "="
228#define INCHI_OPTION_PREFX '/'
229#define INCHI_PATH_DELIM '\\'
231#define INCHI_OPTION_PREFX '-'
232#define INCHI_PATH_DELIM '/'
235#define INCHI_ALT_OPT_PREFIX '-'
236#define INCHI_ACD_LABS_PREFIX '-'
238#define bRELEASE_VERSION 1
239#ifndef bRELEASE_VERSION
240#define bRELEASE_VERSION 0
244#ifndef RELEASE_IS_FINAL
245#define RELEASE_IS_FINAL 1
249#if ( bRELEASE_VERSION == 1 )
250#define DISPLAY_DEBUG_DATA_C_POINT 0
251#define DISPLAY_ORIG_AT_NUMBERS 1
253#define DISPLAY_DEBUG_DATA_C_POINT 1
254#define DISPLAY_ORIG_AT_NUMBERS 1
257#if ( DISPLAY_DEBUG_DATA_C_POINT > 0 )
258#define DISPLAY_DEBUG_DATA DISPLAY_DEBUG_DATA_C_POINT
262#define DISPLAY_ZZ_AS_STAR 1
264#define COORDINATIVE_BOND 9
272#define FIX_ChCh_STEREO_CANON_BUG 1
273#define ADD_ChCh_STEREO_CANON_CHK 0
274#define FIX_ChCh_CONSTIT_CANON_BUG 1
275#define FIX_EITHER_STEREO_IN_AUX_INFO 1
276#define FIX_NORM_BUG_ADD_ION_PAIR 1
277#define FIX_REM_PROTON_COUNT_BUG 1
278#define FIX_READ_AUX_MEM_LEAK 1
279#define FIX_READ_LONG_LINE_BUG 1
280#define FIX_N_V_METAL_BONDS_GPF 1
281#define BNS_RAD_SEARCH 1
286#define FIX_ODD_THINGS_REM_Plus_BUG 0
287#define FIX_N_MINUS_NORN_BUG 0
288#define FIX_CANCEL_CHARGE_COUNT_BUG 0
289#define FIX_2D_STEREO_BORDER_CASE 0
290#define FIX_REM_ION_PAIRS_Si_BUG 0
291#define FIX_STEREO_SCALING_BUG 0
292#define FIX_EMPTY_LAYER_BUG 0
293#define FIX_EITHER_DB_AS_NONSTEREO 0
294#define FIX_BOND23_IN_TAUT 0
295#define FIX_TACN_POSSIBLE_BUG 0
296#define FIX_KEEP_H_ON_NH_ANION 0
297#define FIX_AVOID_ADP 0
301#define FIX_CPOINT_BOND_CAP2 0
307#define FIX_ISO_FIXEDH_BUG 1
308#define FIX_ISO_FIXEDH_BUG_READ 0
309#define FIX_DALKE_BUGS 1
310#define FIX_TRANSPOSITION_CHARGE_BUG 1
311#define FIX_I2I_STEREOCONVERSION_BUG 1
312#define FIX_I2I_STEREOCONVERSION_BUG2 1
313#define FIX_I2I_STEREOCONVERSION_BUG3 1
315#define FIX_TERM_H_CHRG_BUG 1
321#define FIX_AROM_RADICAL 1
331#ifndef DISABLE_106_FIXES
333#define FIX_STEREOCOUNT_ERR 1
341#define FIX_IMPOSSIBLE_H_ISOTOPE_BUG 1
346#define FIX_OLEAN_SPIRO_CHIRALITY_DETECTION_BUG 1
350#define FIX_RENUM_BUG_FOR_CASE_OF_ACIDIC_OH_AT_P_PLUS 1
361#define CHECK_STRTOL_ATNUMB 1
362#define DISABLE_READ_COMPRESSED_INCHI 1
363#define FIX_GAF_2019_1 1
364#define FIX_GAF_2019_2 1
373#define FIX_GAF_2020_GENERIC 1
374#define FIX_OSS_FUZZ_25604 1
375#define FIX_GAF_2020_25607 1
376#define FIX_GAF_2020_25726 1
377#define FIX_GAF_2020_25741 1
380#define FIX_OSS_FUZZ_30162_30343 1
381#define FIX_OSS_FUZZ_25734_28139 1
385#define FIX_CURE53_ISSUE_OOB_ALREADY_HAVE_THIS_MESSAGE 1
386#define FIX_CURE53_ISSUE_HEAP_BUFFER_OVERFLOW_INCHITOINPATOM 1
387#define FIX_CURE53_ISSUE_NULL_DEREFERENCE_MAKE_A_COPY_OF_T_GROUP_INFO 1
393#define FIX_GAF_2019_3 1
394#define FIX_ONE_LINE_INCHI_INPUT_CONVERSION_ISSUE 1
397#define ALLOW_EMPTY_INCHI_AS_INPUT 1
400#if ( !defined(TARGET_API_LIB) && !defined(TARGET_EXE_USING_API) )
401#define I2S_MODIFY_OUTPUT 1
403#define I2S_MODIFY_OUTPUT 0
407#define FIX_NP_MINUS_BUG 1
417#define SDF_OUTPUT_V2000 1
418#define SDF_OUTPUT_DT 1
419#define CHECK_AROMBOND2ALT 1
421#define READ_INCHI_STRING 1
423#ifdef TARGET_LIB_FOR_WINCHI
424#define READ_INCHI_STRING 0
426#define READ_INCHI_STRING 1
433#define INCLUDE_NORMALIZATION_ENTRY_POINT 0
440#define KETO_ENOL_TAUT 1
441#define TAUT_15_NON_RING 1
443#define TAUT_PT_22_00 1
444#define TAUT_PT_16_00 1
445#define TAUT_PT_06_00 1
446#define TAUT_PT_39_00 1
447#define TAUT_PT_13_00 1
448#define TAUT_PT_18_00 1
450#ifdef BUILD_WITH_ENG_OPTIONS
451#define UNDERIVATIZE 1
456#if( UNDERIVATIZE == 1 )
457#define UNDERIVATIZE_REPORT 1
459#define FIX_UNDERIV_TO_SDF
465#define ALLOW_NO_CHARGE_ON_STEREO_CENTERS
476#define UNDERIV_ACETATE_Me
478#define UNDERIV_ACETATE_Et
480#define UNDERIV_RN_AcEt
481#define UNDERIV_RNH_AcEt
482#define UNDERIV_RO_COX_Et
487#define UNDERIV_RN_AcMe
488#define UNDERIV_RNH_AcMe
489#define UNDERIV_RO_COX_Me
491#define UNDERIV_RO_COX_BENZOATES
493#define UNDERIV_RO_COX_PENTAFLOUROBENZOATES
494#define UNDERIV_OOB_nButyl
495#define UNDERIV_X_OXIME_TBDMS
496#define UNDERIV_X_OXIME_TMS
497#define UNDERIV_PYRROLIDIDES
501#define UNDERIV_ADD_EXPLICIT_H
508#define HAL_ACID_H_XCHG 1
509#define CANON_FIXH_TRANS 1
510#define STEREO_WEDGE_ONLY 1
513#define REMOVE_ION_PAIRS_EARLY 1
514#define REMOVE_ION_PAIRS_DISC_STRU 1
515#define REMOVE_ION_PAIRS_FIX_BONDS 1
516#define S_VI_O_PLUS_METAL_FIX_BOND 1
517#define N_V_STEREOBONDS 1
519#define REMOVE_ION_PAIRS_ORIG_STRU 0
525#define DISCONNECT_SALTS 1
526#define TEST_REMOVE_S_ATOMS 1
529#define CHARGED_SALTS_ONLY 1
531#define BNS_PROTECT_FROM_TAUT 1
532#define BNS_MARK_EDGE_2_DISCONNECT 1
534#define REPLACE_ALT_WITH_TAUT 1
535#define MOVE_CHARGES 1
536#define NEUTRALIZE_ENDPOINTS 1
538#define FIX_H_CHECKING_TAUT 1
539#define ALWAYS_ADD_TG_ON_THE_FLY 1
540#define IGNORE_SINGLE_ENDPOINTS 1
543#define INCL_NON_SALT_CANDIDATATES 1
545#define SALT_WITH_PROTONS 1
546#define OPPOSITE_CHARGE_IN_CGROUP 1
547#define MOVE_PPLUS_TO_REMOVE_PROTONS 0
549#define ADD_MOVEABLE_O_PLUS 1
552#define DISCONNECT_METALS 1
553#define RECONNECT_METALS 0
555#define CHECK_METAL_VALENCE 0
556#define bREUSE_INCHI 1
558#define OUTPUT_CONNECTED_METAL_ONLY 0
560#define EMBED_REC_METALS_INCHI 1
563#define bOUTPUT_ONE_STRUCT_TIME 1
577#define ALT_TAUT(X) ((X)>TAUT_YES? TAUT_YES : 1-(X))
591#define NEW_STEREOCENTER_CHECK 1
592#define MIN_SB_RING_SIZE 8
594#define REMOVE_KNOWN_NONSTEREO 1
595#define REMOVE_CALC_NONSTEREO 1
596#define PROPAGATE_ILL_DEF_STEREO 1
600#define ONLY_DOUBLE_BOND_STEREO 0
602#define ONE_BAD_SB_NEIGHBOR 1
604#define ENH_STEREO_DICT_SIZE 100
607#define BREAK_ONE_MORE_SC_TIE 1
608#define BREAK_ALSO_NEIGH_TIE 0
609#define BREAK_ALSO_NEIGH_TIE_ROTATE 1
611#define STEREO_CENTER_BONDS_NORM 1
612#define STEREO_CENTER_BOND4_NORM 0
613#define NORMALIZE_INP_COORD 0
616#define STEREO_WEDGE_ONLY 1
617#define CHECK_C2v_S4_SYMM 0
619#define EQL_H_NUM_TOGETHER 1
620#define ABC_CT_NUM_CLOSURES 1
623#define SINGLET_IS_TRIPLET 1
627#define FIND_CANON_NE_EQUITABLE 0
635#define EXTR_KNOWN_USED_TO_REMOVE_PARITY 0x000001
636#define EXTR_CALC_USED_TO_REMOVE_PARITY 0x000002
637#define EXTR_2EQL2CENTER_TO_REMOVE_PARITY 0x000004
638#define EXTR_HAS_ATOM_WITH_DEFINED_PARITY 0x000008
639#define EXTR_REMOVE_PARITY_WARNING 0x000010
640#define EXTR_SALT_WAS_DISCONNECTED 0x000020
641#define EXTR_SALT_PROTON_MOVED 0x000040
642#define EXTR_SALT_PROTON_MOVE_ERR_WARN 0x000080
643#define EXTR_METAL_WAS_DISCONNECTED 0x000100
644#define EXTR_METAL_WAS_NOT_DISCONNECTED 0x000200
645#define EXTR_NON_TRIVIAL_STEREO 0x000400
646#define EXTR_UNUSUAL_VALENCES 0x000800
647#define EXTR_HAS_METAL_ATOM 0x001000
648#define EXTR_TEST_TAUT3_SALTS_DONE 0x002000
649#define EXTR_CANON_NE_EQUITABLE 0x004000
650#define EXTR_HAS_PROTON_PN 0x008000
651#define EXTR_HAS_FEATURE 0x010000
652#define EXTR_TAUT_TREATMENT_CHARGES 0x020000
653#define EXTR_TRANSPOSITION_EXAMPLES 0x040000
663#define TAUT_TROPOLONE_7 1
664#define TAUT_TROPOLONE_5 1
665#define TAUT_4PYRIDINOL_RINGS 1
666#define TAUT_PYRAZOLE_RINGS 1
668#define TAUT_IGNORE_EQL_ENDPOINTS 0
671#define TAUT_RINGS_ATTACH_CHAIN 1
675#define FIND_RING_SYSTEMS 1
678#define FIND_RINS_SYSTEMS_DISTANCES 0
679#define USE_DISTANCES_FOR_RANKING 0
681#define DISPLAY_RING_SYSTEMS 0
686#if ( bRELEASE_VERSION==1 && bOUTPUT_ONE_STRUCT_TIME==1)
687#undef bOUTPUT_ONE_STRUCT_TIME
688#define bOUTPUT_ONE_STRUCT_TIME 0
692#if ( bRELEASE_VERSION==1 && FIND_RING_SYSTEMS!=1 )
693#ifdef FIND_RING_SYSTEMS
694#undef FIND_RING_SYSTEMS
696#define FIND_RING_SYSTEMS 1
700#if ( FIND_RING_SYSTEMS != 1 )
702#if ( FIND_RINS_SYSTEMS_DISTANCES == 1 )
703#undef FIND_RINS_SYSTEMS_DISTANCES
704#define FIND_RINS_SYSTEMS_DISTANCES 0
710#if ( FIND_RINS_SYSTEMS_DISTANCES != 1 )
712#if ( USE_DISTANCES_FOR_RANKING == 1 )
713#undef USE_DISTANCES_FOR_RANKING
714#define USE_DISTANCES_FOR_RANKING 0
717#if ( DISPLAY_RING_SYSTEMS == 1 )
718#undef DISPLAY_RING_SYSTEMS
719#define DISPLAY_RING_SYSTEMS 0
725#if ( FIND_RING_SYSTEMS==1 && (TAUT_TROPOLONE_7==1 || TAUT_TROPOLONE_5==1 || TAUT_4PYRIDINOL_RINGS==1 || TAUT_PYRAZOLE_RINGS) )
731#define APPLY_IMPLICIT_H_DOWN_RULE 0
735#define ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS 1
738#define IGNORE_TGROUP_WITHOUT_H 1
740#if ( DISCONNECT_SALTS == 1 )
741#define REMOVE_TGROUP_CHARGE 0
743#define REMOVE_TGROUP_CHARGE 1
746#if ( REMOVE_TGROUP_CHARGE == 1 )
747#define INCHI_T_NUM_MOVABLE 1
749#define INCHI_T_NUM_MOVABLE 2
756#define USE_AUX_RANKING 1
757#define USE_AUX_RANKING_ALL 1
759#define USE_ISO_SORT_KEY_HFIXED 0
766#define REL_RAC_STEREO_IGN_1_SC 0
769#define CMODE_CT 0x000001
770#define CMODE_ISO 0x000002
771#define CMODE_ISO_OUT 0x000004
772#define CMODE_STEREO 0x000008
773#define CMODE_ISO_STEREO 0x000010
774#define CMODE_TAUT 0x000020
775#define CMODE_NOEQ_STEREO 0x000040
776#define CMODE_REDNDNT_STEREO 0x000080
777#define CMODE_NO_ALT_SBONDS 0x000100
779#define CMODE_RELATIVE_STEREO 0x000200
780#define CMODE_RACEMIC_STEREO 0x000400
781#define CMODE_SC_IGN_ALL_UU 0x000800
782#define CMODE_SB_IGN_ALL_UU 0x001000
786#define CANON_MODE_CT (CMODE_CT)
787#define CANON_MODE_TAUT (CMODE_CT|CMODE_TAUT)
788#define CANON_MODE_ISO (CMODE_CT|CMODE_ISO|CMODE_ISO_OUT)
789#define CANON_MODE_STEREO (CMODE_CT|CMODE_STEREO)
790#define CANON_MODE_ISO_STEREO (CMODE_CT|CMODE_ISO|CMODE_ISO_OUT|CMODE_ISO_STEREO)
792#define CANON_MODE_MASK 0x00FF
799#define CT_ATOMID_DONTINCLUDE 1
800#define CT_ATOMID_IS_INITRANK 2
801#define CT_ATOMID_IS_CURRANK 3
807#define CANON_TAUTOMERS 1
808#define HYDROGENS_IN_INIT_RANKS 1
810#define DOUBLE_BOND_NEIGH_LIST 0
811#define INCL_NON_6AROM 1
815#define CT_NEIGH_SMALLER
817#define CT_ATOMID CT_ATOMID_IS_CURRANK
819#define CT_NEIGH_INCREASE
821#define USE_SYMMETRY_TO_ACCELERATE 1
826#define CT_GREATER_THAN >
827#define CT_INITVALUE ~0
829#define WORSE_PARITY 2
831#define CT_GREATER_THAN <
832#define CT_INITVALUE 0
834#define WORSE_PARITY 1
837#ifdef CT_NEIGH_SMALLER
838#define CT_NEIGH_SMALLER_THAN <
840#define CT_NEIGH_SMALLER_THAN >
844#if !defined( CT_ATOMID )
845#error You have to #define CT_ATOMID
847#if ( defined( CT_ATOMID ) && CT_ATOMID==CT_ATOMID_DONTINCLUDE )
848#error CT_DELIMITER should be #defined if CT_ATOMID is not included
856#define ALL_ALT_AS_AROMATIC 1
858#define ANY_ATOM_IN_ALT_CYCLE 1
860#define EXCL_ALL_AROM_BOND_PARITY 0
865#if ( EXCL_ALL_AROM_BOND_PARITY == 0 )
866#define ADD_6MEMB_AROM_BOND_PARITY 1
870#define ADD_6MEMB_AROM_BOND_PARITY 0
873#define MAX_NUM_STEREO_BONDS 3
874#define MAX_NUM_STEREO_BOND_NEIGH 3
875#define MIN_NUM_STEREO_BOND_NEIGH 2
877#define MAX_NUM_STEREO_ATOM_NEIGH 4
878#define STEREO_AT_MARK 8
880#if ( ONLY_DOUBLE_BOND_STEREO == 1 )
882#ifdef ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS
883#undef ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS
884#define ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS 0
887#ifdef EXCL_ALL_AROM_BOND_PARITY
888#undef EXCL_ALL_AROM_BOND_PARITY
889#define EXCL_ALL_AROM_BOND_PARITY 1
892#ifdef ADD_6MEMB_AROM_BOND_PARITY
893#undef ADD_6MEMB_AROM_BOND_PARITY
894#define ADD_6MEMB_AROM_BOND_PARITY 0
900#if ( ALL_ALT_AS_AROMATIC == 1 && DOUBLE_BOND_NEIGH_LIST != 0 )
901#undef DOUBLE_BOND_NEIGH_LIST
902#define DOUBLE_BOND_NEIGH_LIST 0
910#define DRAW_AROM_TAUT 1
918#define TG_FLAG_TEST_TAUT__ATOMS 0x00000001
919#define TG_FLAG_DISCONNECT_SALTS 0x00000002
920#define TG_FLAG_TEST_TAUT__SALTS 0x00000004
921#define TG_FLAG_MOVE_POS_CHARGES 0x00000008
922#define TG_FLAG_TEST_TAUT2_SALTS 0x00000010
923#define TG_FLAG_ALLOW_NO_NEGTV_O 0x00000020
924#define TG_FLAG_MERGE_TAUT_SALTS 0x00000040
926#define TG_FLAG_ALL_TAUTOMERIC (TG_FLAG_TEST_TAUT__ATOMS| \
927 TG_FLAG_TEST_TAUT__SALTS| \
928 TG_FLAG_TEST_TAUT2_SALTS| \
929 TG_FLAG_MERGE_TAUT_SALTS)
931#define TG_FLAG_DISCONNECT_COORD 0x00000080
932#define TG_FLAG_RECONNECT_COORD 0x00000100
933#define TG_FLAG_CHECK_VALENCE_COORD 0x00000200
934#define TG_FLAG_MOVE_HPLUS2NEUTR 0x00000400
935#define TG_FLAG_VARIABLE_PROTONS 0x00000800
936#define TG_FLAG_HARD_ADD_REM_PROTONS 0x00001000
937#define TG_FLAG_POINTED_EDGE_STEREO 0x00002000
938#if ( FIX_ADJ_RAD == 1 )
939#define TG_FLAG_FIX_ADJ_RADICALS 0x00004000
941#define TG_FLAG_PHOSPHINE_STEREO 0x00008000
942#define TG_FLAG_ARSINE_STEREO 0x00010000
943#define TG_FLAG_H_ALREADY_REMOVED 0x00020000
944#define TG_FLAG_FIX_SP3_BUG 0x00040000
946#define TG_FLAG_KETO_ENOL_TAUT 0x00080000
947#define TG_FLAG_1_5_TAUT 0x00100000
950#define TG_FLAG_FIX_ISO_FIXEDH_BUG 0x00200000
951#define TG_FLAG_FIX_TERM_H_CHRG_BUG 0x00400000
953#define TG_FLAG_PT_22_00 0x00800000
954#define TG_FLAG_PT_16_00 0x01000000
955#define TG_FLAG_PT_06_00 0x02000000
956#define TG_FLAG_PT_39_00 0x04000000
957#define TG_FLAG_PT_13_00 0x08000000
958#define TG_FLAG_PT_18_00 0x10000000
962#define TG_FLAG_MOVE_HPLUS2NEUTR_DONE 0x00000001
963#define TG_FLAG_TEST_TAUT__ATOMS_DONE 0x00000002
964#define TG_FLAG_DISCONNECT_SALTS_DONE 0x00000004
965#define TG_FLAG_TEST_TAUT__SALTS_DONE 0x00000008
966#define TG_FLAG_MOVE_POS_CHARGES_DONE 0x00000010
967#define TG_FLAG_TEST_TAUT2_SALTS_DONE 0x00000020
968#define TG_FLAG_ALLOW_NO_NEGTV_O_DONE 0x00000040
969#define TG_FLAG_MERGE_TAUT_SALTS_DONE 0x00000080
971#define TG_FLAG_ALL_SALT_DONE (TG_FLAG_TEST_TAUT__SALTS_DONE | \
972 TG_FLAG_TEST_TAUT2_SALTS_DONE | \
973 TG_FLAG_MERGE_TAUT_SALTS_DONE )
975#define TG_FLAG_DISCONNECT_COORD_DONE 0x00000100
976#define TG_FLAG_CHECK_VALENCE_COORD_DONE 0x00000200
977#define TG_FLAG_MOVE_CHARGE_COORD_DONE 0x00000400
978#define TG_FLAG_FIX_ODD_THINGS_DONE 0x00000800
979#define TG_FLAG_TEST_TAUT3_SALTS_DONE 0x00001000
980#define TG_FLAG_FOUND_SALT_CHARGES_DONE 0x00002000
981#define TG_FLAG_FOUND_ISOTOPIC_H_DONE 0x00004000
982#define TG_FLAG_FOUND_ISOTOPIC_ATOM_DONE 0x00008000
983#if ( FIX_ADJ_RAD == 1 )
984#define TG_FLAG_FIX_ADJ_RADICALS_DONE 0x00010000
987#if ( READ_INCHI_STRING == 1 )
988#define READ_INCHI_OUTPUT_INCHI 0x00000001
989#define READ_INCHI_SPLIT_OUTPUT 0x00000002
990#define READ_INCHI_KEEP_BALANCE_P 0x00000004
991#define READ_INCHI_TO_STRUCTURE 0x00000008
1013#define INCHI_IOS_TYPE_NONE 0
1014#define INCHI_IOS_TYPE_STRING 1
1015#define INCHI_IOS_TYPE_FILE 2
1033#if ( defined(_WIN32) && defined(_DEBUG) && defined(_MSC_VER) )
1035#ifndef TARGET_LIB_FOR_WINCHI
1036#ifndef DO_NOT_TRACE_MEMORY_LEAKS
1037#define TRACE_MEMORY_LEAKS 1
1039#define TRACE_MEMORY_LEAKS 0
1042#define TRACE_MEMORY_LEAKS 1
1045#define TRACE_MEMORY_LEAKS 0
1050#define INCHI_HEAPCHK
1052#if ( TRACE_MEMORY_LEAKS == 1 )
1055#define inchi_malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
1056#define inchi_calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
1057#define inchi_realloc(d, s) _realloc_dbg(d, s, _NORMAL_BLOCK, __FILE__, __LINE__)
1058#define inchi_free(p) _free_dbg(p, _NORMAL_BLOCK)
1060#ifdef TARGET_EXE_USING_API
1062#define e_inchi_malloc(a) inchi_malloc(a)
1063#define e_inchi_calloc(a,b) inchi_calloc(a,b)
1064#define e_inchi_realloc(a,b) inchi_realloc(a,b)
1065#define e_inchi_free(a) inchi_free(a)
1073#ifdef CHECK_WIN32_VC_HEAP
1076#define INCHI_HEAPCHK \
1078 int tmp = _crtDbgFlag; \
1079 _crtDbgFlag |= _CRTDBG_ALLOC_MEM_DF; \
1080 _ASSERT( _CrtCheckMemory( ) ); \
1081 _crtDbgFlag = tmp; \
1096#undef TRACE_MEMORY_LEAKS
1097#define TRACE_MEMORY_LEAKS 0
1110#ifdef TARGET_EXE_USING_API
1113#define inchi_malloc e_inchi_malloc
1116#define inchi_calloc e_inchi_calloc
1118#ifndef inchi_realloc
1119#define inchi_realloc e_inchi_realloc
1122#define inchi_free e_inchi_free
1125#ifndef e_inchi_malloc
1126#define e_inchi_malloc malloc
1128#ifndef e_inchi_calloc
1129#define e_inchi_calloc calloc
1131#ifndef e_inchi_realloc
1132#define e_inchi_realloc realloc
1135#define e_inchi_free(X) do{ if(X) free(X); }while(0)
1141#define inchi_malloc malloc
1144#define inchi_calloc calloc
1146#ifndef inchi_realloc
1147#define inchi_realloc realloc
1150#define inchi_free(X) do{ if(X) free(X); }while(0)
1158#if ( USE_ALLOCA == 1 )
1159#define qmalloc(X) _alloca(X)
1160#define qfree(X) do{(X)=NULL;}while(0)
1162#define qmalloc(X) inchi_malloc(X)
1163#define qfree(X) do{if(X){inchi_free(X);(X)=NULL;}}while(0)
1166#if ( defined(_MSC_VER) && _MSC_VER >= 800 )
1167#define fast_alloc(X) _alloca(X)
1170#define fast_alloc(X) inchi_malloc(X)
1171#define fast_free(X) inchi_free(X)
1174#define qzfree(X) do{if(X){inchi_free(X);(X)=NULL;}}while(0)
1178#define MYREALLOC2(PTRTYPE1, PTRTYPE2, PTR1, PTR2, LEN1, LEN2, ERR) \
1180 if( (LEN1) <= (LEN2) ) {\
1181 PTRTYPE1 * newPTR1 = (PTRTYPE1 *)inchi_calloc( (LEN2)+1, sizeof(PTRTYPE1) );\
1182 PTRTYPE2 * newPTR2 = (PTRTYPE2 *)inchi_calloc( (LEN2)+1, sizeof(PTRTYPE2) );\
1183 if ( newPTR1 && newPTR2 ) { \
1184 if ( (PTR1) && (LEN1) > 0 ) \
1185 (memcpy) ( newPTR1, (PTR1), (LEN1) * sizeof(PTRTYPE1) ); \
1186 if ( (PTR2) && (LEN1) > 0 ) \
1187 (memcpy) ( newPTR2, (PTR2), (LEN1) * sizeof(PTRTYPE2) ); \
1197 inchi_free(newPTR1); \
1198 inchi_free(newPTR2); \
1201 } else { (ERR) = 0; } \
1208#define DEBUG_POLYMERS 0
1209#ifndef DEBUG_POLYMERS
1210#define DEBUG_POLYMERS 2
1213#define POLYMERS_NO 0
1214#define POLYMERS_MODERN 1
1215#define POLYMERS_LEGACY 2
1216#define POLYMERS_LEGACY_PLUS 3
1223#define STEREO_AT_ZZ 0
1227#define ALLOW_SUBSTRUCTURE_FILTERING 1
1230#ifndef COMPILE_ALL_CPP
struct tagOutputStream INCHI_IOSTREAM
struct tagOutputString INCHI_IOS_STRING
FILE * f
Definition mode.h:1001
INCHI_IOS_STRING s
Definition mode.h:1000
int type
Definition mode.h:1002
int nPtr
Definition mode.h:989
char * pStr
Definition mode.h:986
int nUsedLength
Definition mode.h:988
int nAllocatedLength
Definition mode.h:987