69#if defined(TARGET_EXE_STANDALONE)
71#define RENUMBER_ATOMS_AND_RECALC_V106 1
72#ifdef RENUMBER_ATOMS_AND_RECALC_V106
74#define STOP_AFTER_FIRST_CHANGE_ON_RENUMBERING 1
76#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (inchi-1 executable)"
79#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (inchi-1 executable)***"
83#elif defined(TARGET_API_LIB)
84#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (API Library)"
86#elif defined(TARGET_EXE_USING_API)
87#ifndef APP_DESCRIPTION
88#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (executable calling API Library)"
91#elif defined(TARGET_LIB_FOR_WINCHI)
92#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (Library for wInChI GUI executable)"
94#elif defined(TARGET_WINCHI)
95#define APP_DESCRIPTION "InChI version 1, Software " CURRENT_VER " (wInChI GUI executable)"
98#error No build target #defined, pls check compiler options... (TARGET_EXE_STANDALONE|TARGET_API_LIB|TARGET_EXE_USING_API|TARGET_LIB_FOR_WINCHI)
102#ifndef TARGET_PLATFORM
104#define TARGET_PLATFORM "Windows"
106#define TARGET_PLATFORM "Linux"
135#ifndef BUILD_WITH_ENG_OPTIONS
136#define BUILD_WITH_ENG_OPTIONS 0
141#ifndef BUILD_WITH_AMI
143#define BUILD_WITH_AMI 1
146#ifndef TARGET_EXE_STANDALONE
154#if( BUILD_WITH_AMI == 1 )
155#if( defined( _MSC_VER ) )
159#if (BUILD_WITH_ENG_OPTIONS==1)
160#define OUTPUT_FILE_EXT 1
161#define ALLOW_EMPTY_PATHS 1
163#define DEL_EMPTY_OUTPUT 1
164#define SDF_OUTPUT_HETERO_VALENCE 1
197#if ( !defined(_MSC_VER) || defined(TARGET_API_LIB) || defined(TARGET_EXE_USING_API))
198#ifndef COMPILE_ANSI_ONLY
199#define COMPILE_ANSI_ONLY
202#ifdef COMPILE_ANSI_ONLY
224#pragma warning( disable : 4706 4127 4514 4100 4786 4996 4244 4267 )
231#if !defined(TARGET_EXE_STANDALONE) && !defined(TARGET_LIB_FOR_WINCHI) && defined(_WIN32)
240#include "../../INCHI_API/tbb/tbbmalloc_proxy_for_inchi.h"
245#ifndef COMPILE_ALL_CPP
258#define INCHI_VERSION "1"
259#define INCHI_NAME "InChI"
260#define INCHI_NAM_VER_DELIM "="
263#define INCHI_OPTION_PREFX '/'
264#define INCHI_PATH_DELIM '\\'
266#define INCHI_OPTION_PREFX '-'
267#define INCHI_PATH_DELIM '/'
270#define INCHI_ALT_OPT_PREFIX '-'
271#define INCHI_ACD_LABS_PREFIX '-'
273#define bRELEASE_VERSION 1
274#ifndef bRELEASE_VERSION
275#define bRELEASE_VERSION 0
279#ifndef RELEASE_IS_FINAL
280#define RELEASE_IS_FINAL 1
284#if ( bRELEASE_VERSION == 1 )
285#define DISPLAY_DEBUG_DATA_C_POINT 0
286#define DISPLAY_ORIG_AT_NUMBERS 1
288#define DISPLAY_DEBUG_DATA_C_POINT 1
289#define DISPLAY_ORIG_AT_NUMBERS 1
292#if ( DISPLAY_DEBUG_DATA_C_POINT > 0 )
293#define DISPLAY_DEBUG_DATA DISPLAY_DEBUG_DATA_C_POINT
297#define DISPLAY_ZZ_AS_STAR 1
305#define FIX_ChCh_STEREO_CANON_BUG 1
306#define ADD_ChCh_STEREO_CANON_CHK 0
307#define FIX_ChCh_CONSTIT_CANON_BUG 1
308#define FIX_EITHER_STEREO_IN_AUX_INFO 1
309#define FIX_NORM_BUG_ADD_ION_PAIR 1
310#define FIX_REM_PROTON_COUNT_BUG 1
311#define FIX_READ_AUX_MEM_LEAK 1
312#define FIX_READ_LONG_LINE_BUG 1
313#define FIX_N_V_METAL_BONDS_GPF 1
314#define BNS_RAD_SEARCH 1
319#define FIX_ODD_THINGS_REM_Plus_BUG 0
320#define FIX_N_MINUS_NORN_BUG 0
321#define FIX_CANCEL_CHARGE_COUNT_BUG 0
322#define FIX_2D_STEREO_BORDER_CASE 0
323#define FIX_REM_ION_PAIRS_Si_BUG 0
324#define FIX_STEREO_SCALING_BUG 0
325#define FIX_EMPTY_LAYER_BUG 0
326#define FIX_EITHER_DB_AS_NONSTEREO 0
327#define FIX_BOND23_IN_TAUT 0
328#define FIX_TACN_POSSIBLE_BUG 0
329#define FIX_KEEP_H_ON_NH_ANION 0
330#define FIX_AVOID_ADP 0
334#define FIX_CPOINT_BOND_CAP2 0
340#define FIX_ISO_FIXEDH_BUG 1
341#define FIX_ISO_FIXEDH_BUG_READ 0
342#define FIX_DALKE_BUGS 1
343#define FIX_TRANSPOSITION_CHARGE_BUG 1
344#define FIX_I2I_STEREOCONVERSION_BUG 1
345#define FIX_I2I_STEREOCONVERSION_BUG2 1
346#define FIX_I2I_STEREOCONVERSION_BUG3 1
348#define FIX_TERM_H_CHRG_BUG 1
354#define FIX_AROM_RADICAL 1
364#ifndef DISABLE_106_FIXES
366#define FIX_STEREOCOUNT_ERR 1
374#define FIX_IMPOSSIBLE_H_ISOTOPE_BUG 1
379#define FIX_OLEAN_SPIRO_CHIRALITY_DETECTION_BUG 1
383#define FIX_RENUM_BUG_FOR_CASE_OF_ACIDIC_OH_AT_P_PLUS 1
394#define CHECK_STRTOL_ATNUMB 1
395#define DISABLE_READ_COMPRESSED_INCHI 1
396#define FIX_GAF_2019_1 1
397#define FIX_GAF_2019_2 1
406#define FIX_GAF_2020_GENERIC 1
407#define FIX_OSS_FUZZ_25604 1
408#define FIX_GAF_2020_25607 1
409#define FIX_GAF_2020_25726 1
410#define FIX_GAF_2020_25741 1
413#define FIX_OSS_FUZZ_30162_30343 1
414#define FIX_OSS_FUZZ_25734_28139 1
418#define FIX_CURE53_ISSUE_OOB_ALREADY_HAVE_THIS_MESSAGE 1
419#define FIX_CURE53_ISSUE_HEAP_BUFFER_OVERFLOW_INCHITOINPATOM 1
420#define FIX_CURE53_ISSUE_NULL_DEREFERENCE_MAKE_A_COPY_OF_T_GROUP_INFO 1
426#define FIX_GAF_2019_3 1
427#define FIX_ONE_LINE_INCHI_INPUT_CONVERSION_ISSUE 1
430#define ALLOW_EMPTY_INCHI_AS_INPUT 1
433#if ( !defined(TARGET_API_LIB) && !defined(TARGET_EXE_USING_API) )
434#define I2S_MODIFY_OUTPUT 1
436#define I2S_MODIFY_OUTPUT 0
440#define FIX_NP_MINUS_BUG 1
450#define SDF_OUTPUT_V2000 1
451#define SDF_OUTPUT_DT 1
452#define CHECK_AROMBOND2ALT 1
454#define READ_INCHI_STRING 1
456#ifdef TARGET_LIB_FOR_WINCHI
457#define READ_INCHI_STRING 0
459#define READ_INCHI_STRING 1
466#define INCLUDE_NORMALIZATION_ENTRY_POINT 0
473#define KETO_ENOL_TAUT 1
474#define TAUT_15_NON_RING 1
476#define TAUT_PT_22_00 1
477#define TAUT_PT_16_00 1
478#define TAUT_PT_06_00 1
479#define TAUT_PT_39_00 1
480#define TAUT_PT_13_00 1
481#define TAUT_PT_18_00 1
483#ifdef BUILD_WITH_ENG_OPTIONS
484#define UNDERIVATIZE 1
489#if( UNDERIVATIZE == 1 )
490#define UNDERIVATIZE_REPORT 1
492#define FIX_UNDERIV_TO_SDF
498#define ALLOW_NO_CHARGE_ON_STEREO_CENTERS
509#define UNDERIV_ACETATE_Me
511#define UNDERIV_ACETATE_Et
513#define UNDERIV_RN_AcEt
514#define UNDERIV_RNH_AcEt
515#define UNDERIV_RO_COX_Et
520#define UNDERIV_RN_AcMe
521#define UNDERIV_RNH_AcMe
522#define UNDERIV_RO_COX_Me
524#define UNDERIV_RO_COX_BENZOATES
526#define UNDERIV_RO_COX_PENTAFLOUROBENZOATES
527#define UNDERIV_OOB_nButyl
528#define UNDERIV_X_OXIME_TBDMS
529#define UNDERIV_X_OXIME_TMS
530#define UNDERIV_PYRROLIDIDES
534#define UNDERIV_ADD_EXPLICIT_H
541#define HAL_ACID_H_XCHG 1
542#define CANON_FIXH_TRANS 1
543#define STEREO_WEDGE_ONLY 1
546#define REMOVE_ION_PAIRS_EARLY 1
547#define REMOVE_ION_PAIRS_DISC_STRU 1
548#define REMOVE_ION_PAIRS_FIX_BONDS 1
549#define S_VI_O_PLUS_METAL_FIX_BOND 1
550#define N_V_STEREOBONDS 1
552#define REMOVE_ION_PAIRS_ORIG_STRU 0
558#define DISCONNECT_SALTS 1
559#define TEST_REMOVE_S_ATOMS 1
562#define CHARGED_SALTS_ONLY 1
564#define BNS_PROTECT_FROM_TAUT 1
565#define BNS_MARK_EDGE_2_DISCONNECT 1
567#define REPLACE_ALT_WITH_TAUT 1
568#define MOVE_CHARGES 1
569#define NEUTRALIZE_ENDPOINTS 1
571#define FIX_H_CHECKING_TAUT 1
572#define ALWAYS_ADD_TG_ON_THE_FLY 1
573#define IGNORE_SINGLE_ENDPOINTS 1
576#define INCL_NON_SALT_CANDIDATATES 1
578#define SALT_WITH_PROTONS 1
579#define OPPOSITE_CHARGE_IN_CGROUP 1
580#define MOVE_PPLUS_TO_REMOVE_PROTONS 0
582#define ADD_MOVEABLE_O_PLUS 1
585#define DISCONNECT_METALS 1
586#define RECONNECT_METALS 0
588#define CHECK_METAL_VALENCE 0
589#define bREUSE_INCHI 1
591#define OUTPUT_CONNECTED_METAL_ONLY 0
593#define EMBED_REC_METALS_INCHI 1
596#define bOUTPUT_ONE_STRUCT_TIME 1
610#define ALT_TAUT(X) ((X)>TAUT_YES? TAUT_YES : 1-(X))
624#define NEW_STEREOCENTER_CHECK 1
625#define MIN_SB_RING_SIZE 8
627#define REMOVE_KNOWN_NONSTEREO 1
628#define REMOVE_CALC_NONSTEREO 1
629#define PROPAGATE_ILL_DEF_STEREO 1
633#define ONLY_DOUBLE_BOND_STEREO 0
635#define ONE_BAD_SB_NEIGHBOR 1
638#define BREAK_ONE_MORE_SC_TIE 1
639#define BREAK_ALSO_NEIGH_TIE 0
640#define BREAK_ALSO_NEIGH_TIE_ROTATE 1
642#define STEREO_CENTER_BONDS_NORM 1
643#define STEREO_CENTER_BOND4_NORM 0
644#define NORMALIZE_INP_COORD 0
647#define STEREO_WEDGE_ONLY 1
648#define CHECK_C2v_S4_SYMM 0
650#define EQL_H_NUM_TOGETHER 1
651#define ABC_CT_NUM_CLOSURES 1
654#define SINGLET_IS_TRIPLET 1
658#define FIND_CANON_NE_EQUITABLE 0
666#define EXTR_KNOWN_USED_TO_REMOVE_PARITY 0x000001
667#define EXTR_CALC_USED_TO_REMOVE_PARITY 0x000002
668#define EXTR_2EQL2CENTER_TO_REMOVE_PARITY 0x000004
669#define EXTR_HAS_ATOM_WITH_DEFINED_PARITY 0x000008
670#define EXTR_REMOVE_PARITY_WARNING 0x000010
671#define EXTR_SALT_WAS_DISCONNECTED 0x000020
672#define EXTR_SALT_PROTON_MOVED 0x000040
673#define EXTR_SALT_PROTON_MOVE_ERR_WARN 0x000080
674#define EXTR_METAL_WAS_DISCONNECTED 0x000100
675#define EXTR_METAL_WAS_NOT_DISCONNECTED 0x000200
676#define EXTR_NON_TRIVIAL_STEREO 0x000400
677#define EXTR_UNUSUAL_VALENCES 0x000800
678#define EXTR_HAS_METAL_ATOM 0x001000
679#define EXTR_TEST_TAUT3_SALTS_DONE 0x002000
680#define EXTR_CANON_NE_EQUITABLE 0x004000
681#define EXTR_HAS_PROTON_PN 0x008000
682#define EXTR_HAS_FEATURE 0x010000
683#define EXTR_TAUT_TREATMENT_CHARGES 0x020000
684#define EXTR_TRANSPOSITION_EXAMPLES 0x040000
694#define TAUT_TROPOLONE_7 1
695#define TAUT_TROPOLONE_5 1
696#define TAUT_4PYRIDINOL_RINGS 1
697#define TAUT_PYRAZOLE_RINGS 1
699#define TAUT_IGNORE_EQL_ENDPOINTS 0
702#define TAUT_RINGS_ATTACH_CHAIN 1
706#define FIND_RING_SYSTEMS 1
709#define FIND_RINS_SYSTEMS_DISTANCES 0
710#define USE_DISTANCES_FOR_RANKING 0
712#define DISPLAY_RING_SYSTEMS 0
717#if ( bRELEASE_VERSION==1 && bOUTPUT_ONE_STRUCT_TIME==1)
718#undef bOUTPUT_ONE_STRUCT_TIME
719#define bOUTPUT_ONE_STRUCT_TIME 0
723#if ( bRELEASE_VERSION==1 && FIND_RING_SYSTEMS!=1 )
724#ifdef FIND_RING_SYSTEMS
725#undef FIND_RING_SYSTEMS
727#define FIND_RING_SYSTEMS 1
731#if ( FIND_RING_SYSTEMS != 1 )
733#if ( FIND_RINS_SYSTEMS_DISTANCES == 1 )
734#undef FIND_RINS_SYSTEMS_DISTANCES
735#define FIND_RINS_SYSTEMS_DISTANCES 0
741#if ( FIND_RINS_SYSTEMS_DISTANCES != 1 )
743#if ( USE_DISTANCES_FOR_RANKING == 1 )
744#undef USE_DISTANCES_FOR_RANKING
745#define USE_DISTANCES_FOR_RANKING 0
748#if ( DISPLAY_RING_SYSTEMS == 1 )
749#undef DISPLAY_RING_SYSTEMS
750#define DISPLAY_RING_SYSTEMS 0
756#if ( FIND_RING_SYSTEMS==1 && (TAUT_TROPOLONE_7==1 || TAUT_TROPOLONE_5==1 || TAUT_4PYRIDINOL_RINGS==1 || TAUT_PYRAZOLE_RINGS) )
762#define APPLY_IMPLICIT_H_DOWN_RULE 0
766#define ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS 1
769#define IGNORE_TGROUP_WITHOUT_H 1
771#if ( DISCONNECT_SALTS == 1 )
772#define REMOVE_TGROUP_CHARGE 0
774#define REMOVE_TGROUP_CHARGE 1
777#if ( REMOVE_TGROUP_CHARGE == 1 )
778#define INCHI_T_NUM_MOVABLE 1
780#define INCHI_T_NUM_MOVABLE 2
787#define USE_AUX_RANKING 1
788#define USE_AUX_RANKING_ALL 1
790#define USE_ISO_SORT_KEY_HFIXED 0
797#define REL_RAC_STEREO_IGN_1_SC 0
800#define CMODE_CT 0x000001
801#define CMODE_ISO 0x000002
802#define CMODE_ISO_OUT 0x000004
803#define CMODE_STEREO 0x000008
804#define CMODE_ISO_STEREO 0x000010
805#define CMODE_TAUT 0x000020
806#define CMODE_NOEQ_STEREO 0x000040
807#define CMODE_REDNDNT_STEREO 0x000080
808#define CMODE_NO_ALT_SBONDS 0x000100
810#define CMODE_RELATIVE_STEREO 0x000200
811#define CMODE_RACEMIC_STEREO 0x000400
812#define CMODE_SC_IGN_ALL_UU 0x000800
813#define CMODE_SB_IGN_ALL_UU 0x001000
817#define CANON_MODE_CT (CMODE_CT)
818#define CANON_MODE_TAUT (CMODE_CT|CMODE_TAUT)
819#define CANON_MODE_ISO (CMODE_CT|CMODE_ISO|CMODE_ISO_OUT)
820#define CANON_MODE_STEREO (CMODE_CT|CMODE_STEREO)
821#define CANON_MODE_ISO_STEREO (CMODE_CT|CMODE_ISO|CMODE_ISO_OUT|CMODE_ISO_STEREO)
823#define CANON_MODE_MASK 0x00FF
830#define CT_ATOMID_DONTINCLUDE 1
831#define CT_ATOMID_IS_INITRANK 2
832#define CT_ATOMID_IS_CURRANK 3
838#define CANON_TAUTOMERS 1
839#define HYDROGENS_IN_INIT_RANKS 1
841#define DOUBLE_BOND_NEIGH_LIST 0
842#define INCL_NON_6AROM 1
846#define CT_NEIGH_SMALLER
848#define CT_ATOMID CT_ATOMID_IS_CURRANK
850#define CT_NEIGH_INCREASE
852#define USE_SYMMETRY_TO_ACCELERATE 1
857#define CT_GREATER_THAN >
858#define CT_INITVALUE ~0
860#define WORSE_PARITY 2
862#define CT_GREATER_THAN <
863#define CT_INITVALUE 0
865#define WORSE_PARITY 1
868#ifdef CT_NEIGH_SMALLER
869#define CT_NEIGH_SMALLER_THAN <
871#define CT_NEIGH_SMALLER_THAN >
875#if !defined( CT_ATOMID )
876#error You have to #define CT_ATOMID
878#if ( defined( CT_ATOMID ) && CT_ATOMID==CT_ATOMID_DONTINCLUDE )
879#error CT_DELIMITER should be #defined if CT_ATOMID is not included
887#define ALL_ALT_AS_AROMATIC 1
889#define ANY_ATOM_IN_ALT_CYCLE 1
891#define EXCL_ALL_AROM_BOND_PARITY 0
896#if ( EXCL_ALL_AROM_BOND_PARITY == 0 )
897#define ADD_6MEMB_AROM_BOND_PARITY 1
901#define ADD_6MEMB_AROM_BOND_PARITY 0
904#define MAX_NUM_STEREO_BONDS 3
905#define MAX_NUM_STEREO_BOND_NEIGH 3
906#define MIN_NUM_STEREO_BOND_NEIGH 2
908#define MAX_NUM_STEREO_ATOM_NEIGH 4
909#define STEREO_AT_MARK 8
911#if ( ONLY_DOUBLE_BOND_STEREO == 1 )
913#ifdef ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS
914#undef ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS
915#define ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS 0
918#ifdef EXCL_ALL_AROM_BOND_PARITY
919#undef EXCL_ALL_AROM_BOND_PARITY
920#define EXCL_ALL_AROM_BOND_PARITY 1
923#ifdef ADD_6MEMB_AROM_BOND_PARITY
924#undef ADD_6MEMB_AROM_BOND_PARITY
925#define ADD_6MEMB_AROM_BOND_PARITY 0
931#if ( ALL_ALT_AS_AROMATIC == 1 && DOUBLE_BOND_NEIGH_LIST != 0 )
932#undef DOUBLE_BOND_NEIGH_LIST
933#define DOUBLE_BOND_NEIGH_LIST 0
941#define DRAW_AROM_TAUT 1
949#define TG_FLAG_TEST_TAUT__ATOMS 0x00000001
950#define TG_FLAG_DISCONNECT_SALTS 0x00000002
951#define TG_FLAG_TEST_TAUT__SALTS 0x00000004
952#define TG_FLAG_MOVE_POS_CHARGES 0x00000008
953#define TG_FLAG_TEST_TAUT2_SALTS 0x00000010
954#define TG_FLAG_ALLOW_NO_NEGTV_O 0x00000020
955#define TG_FLAG_MERGE_TAUT_SALTS 0x00000040
957#define TG_FLAG_ALL_TAUTOMERIC (TG_FLAG_TEST_TAUT__ATOMS| \
958 TG_FLAG_TEST_TAUT__SALTS| \
959 TG_FLAG_TEST_TAUT2_SALTS| \
960 TG_FLAG_MERGE_TAUT_SALTS)
962#define TG_FLAG_DISCONNECT_COORD 0x00000080
963#define TG_FLAG_RECONNECT_COORD 0x00000100
964#define TG_FLAG_CHECK_VALENCE_COORD 0x00000200
965#define TG_FLAG_MOVE_HPLUS2NEUTR 0x00000400
966#define TG_FLAG_VARIABLE_PROTONS 0x00000800
967#define TG_FLAG_HARD_ADD_REM_PROTONS 0x00001000
968#define TG_FLAG_POINTED_EDGE_STEREO 0x00002000
969#if ( FIX_ADJ_RAD == 1 )
970#define TG_FLAG_FIX_ADJ_RADICALS 0x00004000
972#define TG_FLAG_PHOSPHINE_STEREO 0x00008000
973#define TG_FLAG_ARSINE_STEREO 0x00010000
974#define TG_FLAG_H_ALREADY_REMOVED 0x00020000
975#define TG_FLAG_FIX_SP3_BUG 0x00040000
977#define TG_FLAG_KETO_ENOL_TAUT 0x00080000
978#define TG_FLAG_1_5_TAUT 0x00100000
981#define TG_FLAG_FIX_ISO_FIXEDH_BUG 0x00200000
982#define TG_FLAG_FIX_TERM_H_CHRG_BUG 0x00400000
984#define TG_FLAG_PT_22_00 0x00800000
985#define TG_FLAG_PT_16_00 0x01000000
986#define TG_FLAG_PT_06_00 0x02000000
987#define TG_FLAG_PT_39_00 0x04000000
988#define TG_FLAG_PT_13_00 0x08000000
989#define TG_FLAG_PT_18_00 0x10000000
993#define TG_FLAG_MOVE_HPLUS2NEUTR_DONE 0x00000001
994#define TG_FLAG_TEST_TAUT__ATOMS_DONE 0x00000002
995#define TG_FLAG_DISCONNECT_SALTS_DONE 0x00000004
996#define TG_FLAG_TEST_TAUT__SALTS_DONE 0x00000008
997#define TG_FLAG_MOVE_POS_CHARGES_DONE 0x00000010
998#define TG_FLAG_TEST_TAUT2_SALTS_DONE 0x00000020
999#define TG_FLAG_ALLOW_NO_NEGTV_O_DONE 0x00000040
1000#define TG_FLAG_MERGE_TAUT_SALTS_DONE 0x00000080
1002#define TG_FLAG_ALL_SALT_DONE (TG_FLAG_TEST_TAUT__SALTS_DONE | \
1003 TG_FLAG_TEST_TAUT2_SALTS_DONE | \
1004 TG_FLAG_MERGE_TAUT_SALTS_DONE )
1006#define TG_FLAG_DISCONNECT_COORD_DONE 0x00000100
1007#define TG_FLAG_CHECK_VALENCE_COORD_DONE 0x00000200
1008#define TG_FLAG_MOVE_CHARGE_COORD_DONE 0x00000400
1009#define TG_FLAG_FIX_ODD_THINGS_DONE 0x00000800
1010#define TG_FLAG_TEST_TAUT3_SALTS_DONE 0x00001000
1011#define TG_FLAG_FOUND_SALT_CHARGES_DONE 0x00002000
1012#define TG_FLAG_FOUND_ISOTOPIC_H_DONE 0x00004000
1013#define TG_FLAG_FOUND_ISOTOPIC_ATOM_DONE 0x00008000
1014#if ( FIX_ADJ_RAD == 1 )
1015#define TG_FLAG_FIX_ADJ_RADICALS_DONE 0x00010000
1018#if ( READ_INCHI_STRING == 1 )
1019#define READ_INCHI_OUTPUT_INCHI 0x00000001
1020#define READ_INCHI_SPLIT_OUTPUT 0x00000002
1021#define READ_INCHI_KEEP_BALANCE_P 0x00000004
1022#define READ_INCHI_TO_STRUCTURE 0x00000008
1044#define INCHI_IOS_TYPE_NONE 0
1045#define INCHI_IOS_TYPE_STRING 1
1046#define INCHI_IOS_TYPE_FILE 2
1064#if ( defined(_WIN32) && defined(_DEBUG) && defined(_MSC_VER) )
1066#ifndef TARGET_LIB_FOR_WINCHI
1067#ifndef DO_NOT_TRACE_MEMORY_LEAKS
1068#define TRACE_MEMORY_LEAKS 1
1070#define TRACE_MEMORY_LEAKS 0
1073#define TRACE_MEMORY_LEAKS 1
1076#define TRACE_MEMORY_LEAKS 0
1081#define INCHI_HEAPCHK
1083#if ( TRACE_MEMORY_LEAKS == 1 )
1086#define inchi_malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
1087#define inchi_calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
1088#define inchi_realloc(d, s) _realloc_dbg(d, s, _NORMAL_BLOCK, __FILE__, __LINE__)
1089#define inchi_free(p) _free_dbg(p, _NORMAL_BLOCK)
1091#ifdef TARGET_EXE_USING_API
1093#define e_inchi_malloc(a) inchi_malloc(a)
1094#define e_inchi_calloc(a,b) inchi_calloc(a,b)
1095#define e_inchi_realloc(a,b) inchi_realloc(a,b)
1096#define e_inchi_free(a) inchi_free(a)
1104#ifdef CHECK_WIN32_VC_HEAP
1107#define INCHI_HEAPCHK \
1109 int tmp = _crtDbgFlag; \
1110 _crtDbgFlag |= _CRTDBG_ALLOC_MEM_DF; \
1111 _ASSERT( _CrtCheckMemory( ) ); \
1112 _crtDbgFlag = tmp; \
1127#undef TRACE_MEMORY_LEAKS
1128#define TRACE_MEMORY_LEAKS 0
1141#ifdef TARGET_EXE_USING_API
1144#define inchi_malloc e_inchi_malloc
1147#define inchi_calloc e_inchi_calloc
1149#ifndef inchi_realloc
1150#define inchi_realloc e_inchi_realloc
1153#define inchi_free e_inchi_free
1156#ifndef e_inchi_malloc
1157#define e_inchi_malloc malloc
1159#ifndef e_inchi_calloc
1160#define e_inchi_calloc calloc
1162#ifndef e_inchi_realloc
1163#define e_inchi_realloc realloc
1166#define e_inchi_free(X) do{ if(X) free(X); }while(0)
1172#define inchi_malloc malloc
1175#define inchi_calloc calloc
1177#ifndef inchi_realloc
1178#define inchi_realloc realloc
1181#define inchi_free(X) do{ if(X) free(X); }while(0)
1189#if ( USE_ALLOCA == 1 )
1190#define qmalloc(X) _alloca(X)
1191#define qfree(X) do{(X)=NULL;}while(0)
1193#define qmalloc(X) inchi_malloc(X)
1194#define qfree(X) do{if(X){inchi_free(X);(X)=NULL;}}while(0)
1197#if ( defined(_MSC_VER) && _MSC_VER >= 800 )
1198#define fast_alloc(X) _alloca(X)
1201#define fast_alloc(X) inchi_malloc(X)
1202#define fast_free(X) inchi_free(X)
1205#define qzfree(X) do{if(X){inchi_free(X);(X)=NULL;}}while(0)
1209#define MYREALLOC2(PTRTYPE1, PTRTYPE2, PTR1, PTR2, LEN1, LEN2, ERR) \
1211 if( (LEN1) <= (LEN2) ) {\
1212 PTRTYPE1 * newPTR1 = (PTRTYPE1 *)inchi_calloc( (LEN2)+1, sizeof(PTRTYPE1) );\
1213 PTRTYPE2 * newPTR2 = (PTRTYPE2 *)inchi_calloc( (LEN2)+1, sizeof(PTRTYPE2) );\
1214 if ( newPTR1 && newPTR2 ) { \
1215 if ( (PTR1) && (LEN1) > 0 ) \
1216 (memcpy) ( newPTR1, (PTR1), (LEN1) * sizeof(PTRTYPE1) ); \
1217 if ( (PTR2) && (LEN1) > 0 ) \
1218 (memcpy) ( newPTR2, (PTR2), (LEN1) * sizeof(PTRTYPE2) ); \
1228 inchi_free(newPTR1); \
1229 inchi_free(newPTR2); \
1232 } else { (ERR) = 0; } \
1239#define DEBUG_POLYMERS 0
1240#ifndef DEBUG_POLYMERS
1241#define DEBUG_POLYMERS 2
1244#define POLYMERS_NO 0
1245#define POLYMERS_MODERN 1
1246#define POLYMERS_LEGACY 2
1247#define POLYMERS_LEGACY_PLUS 3
1254#define STEREO_AT_ZZ 0
1258#define ALLOW_SUBSTRUCTURE_FILTERING 1
1261#ifndef COMPILE_ALL_CPP
struct tagOutputStream INCHI_IOSTREAM
struct tagOutputString INCHI_IOS_STRING
FILE * f
Definition mode.h:1032
INCHI_IOS_STRING s
Definition mode.h:1031
int type
Definition mode.h:1033
int nPtr
Definition mode.h:1020
char * pStr
Definition mode.h:1017
int nUsedLength
Definition mode.h:1019
int nAllocatedLength
Definition mode.h:1018