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
299#define COORDINATIVE_BOND 9
307#define FIX_ChCh_STEREO_CANON_BUG 1
308#define ADD_ChCh_STEREO_CANON_CHK 0
309#define FIX_ChCh_CONSTIT_CANON_BUG 1
310#define FIX_EITHER_STEREO_IN_AUX_INFO 1
311#define FIX_NORM_BUG_ADD_ION_PAIR 1
312#define FIX_REM_PROTON_COUNT_BUG 1
313#define FIX_READ_AUX_MEM_LEAK 1
314#define FIX_READ_LONG_LINE_BUG 1
315#define FIX_N_V_METAL_BONDS_GPF 1
316#define BNS_RAD_SEARCH 1
321#define FIX_ODD_THINGS_REM_Plus_BUG 0
322#define FIX_N_MINUS_NORN_BUG 0
323#define FIX_CANCEL_CHARGE_COUNT_BUG 0
324#define FIX_2D_STEREO_BORDER_CASE 0
325#define FIX_REM_ION_PAIRS_Si_BUG 0
326#define FIX_STEREO_SCALING_BUG 0
327#define FIX_EMPTY_LAYER_BUG 0
328#define FIX_EITHER_DB_AS_NONSTEREO 0
329#define FIX_BOND23_IN_TAUT 0
330#define FIX_TACN_POSSIBLE_BUG 0
331#define FIX_KEEP_H_ON_NH_ANION 0
332#define FIX_AVOID_ADP 0
336#define FIX_CPOINT_BOND_CAP2 0
342#define FIX_ISO_FIXEDH_BUG 1
343#define FIX_ISO_FIXEDH_BUG_READ 0
344#define FIX_DALKE_BUGS 1
345#define FIX_TRANSPOSITION_CHARGE_BUG 1
346#define FIX_I2I_STEREOCONVERSION_BUG 1
347#define FIX_I2I_STEREOCONVERSION_BUG2 1
348#define FIX_I2I_STEREOCONVERSION_BUG3 1
350#define FIX_TERM_H_CHRG_BUG 1
356#define FIX_AROM_RADICAL 1
366#ifndef DISABLE_106_FIXES
368#define FIX_STEREOCOUNT_ERR 1
376#define FIX_IMPOSSIBLE_H_ISOTOPE_BUG 1
381#define FIX_OLEAN_SPIRO_CHIRALITY_DETECTION_BUG 1
385#define FIX_RENUM_BUG_FOR_CASE_OF_ACIDIC_OH_AT_P_PLUS 1
396#define CHECK_STRTOL_ATNUMB 1
397#define DISABLE_READ_COMPRESSED_INCHI 1
398#define FIX_GAF_2019_1 1
399#define FIX_GAF_2019_2 1
408#define FIX_GAF_2020_GENERIC 1
409#define FIX_OSS_FUZZ_25604 1
410#define FIX_GAF_2020_25607 1
411#define FIX_GAF_2020_25726 1
412#define FIX_GAF_2020_25741 1
415#define FIX_OSS_FUZZ_30162_30343 1
416#define FIX_OSS_FUZZ_25734_28139 1
420#define FIX_CURE53_ISSUE_OOB_ALREADY_HAVE_THIS_MESSAGE 1
421#define FIX_CURE53_ISSUE_HEAP_BUFFER_OVERFLOW_INCHITOINPATOM 1
422#define FIX_CURE53_ISSUE_NULL_DEREFERENCE_MAKE_A_COPY_OF_T_GROUP_INFO 1
428#define FIX_GAF_2019_3 1
429#define FIX_ONE_LINE_INCHI_INPUT_CONVERSION_ISSUE 1
432#define ALLOW_EMPTY_INCHI_AS_INPUT 1
435#if ( !defined(TARGET_API_LIB) && !defined(TARGET_EXE_USING_API) )
436#define I2S_MODIFY_OUTPUT 1
438#define I2S_MODIFY_OUTPUT 0
442#define FIX_NP_MINUS_BUG 1
452#define SDF_OUTPUT_V2000 1
453#define SDF_OUTPUT_DT 1
454#define CHECK_AROMBOND2ALT 1
456#define READ_INCHI_STRING 1
458#ifdef TARGET_LIB_FOR_WINCHI
459#define READ_INCHI_STRING 0
461#define READ_INCHI_STRING 1
468#define INCLUDE_NORMALIZATION_ENTRY_POINT 0
475#define KETO_ENOL_TAUT 1
476#define TAUT_15_NON_RING 1
478#define TAUT_PT_22_00 1
479#define TAUT_PT_16_00 1
480#define TAUT_PT_06_00 1
481#define TAUT_PT_39_00 1
482#define TAUT_PT_13_00 1
483#define TAUT_PT_18_00 1
485#ifdef BUILD_WITH_ENG_OPTIONS
486#define UNDERIVATIZE 1
491#if( UNDERIVATIZE == 1 )
492#define UNDERIVATIZE_REPORT 1
494#define FIX_UNDERIV_TO_SDF
500#define ALLOW_NO_CHARGE_ON_STEREO_CENTERS
511#define UNDERIV_ACETATE_Me
513#define UNDERIV_ACETATE_Et
515#define UNDERIV_RN_AcEt
516#define UNDERIV_RNH_AcEt
517#define UNDERIV_RO_COX_Et
522#define UNDERIV_RN_AcMe
523#define UNDERIV_RNH_AcMe
524#define UNDERIV_RO_COX_Me
526#define UNDERIV_RO_COX_BENZOATES
528#define UNDERIV_RO_COX_PENTAFLOUROBENZOATES
529#define UNDERIV_OOB_nButyl
530#define UNDERIV_X_OXIME_TBDMS
531#define UNDERIV_X_OXIME_TMS
532#define UNDERIV_PYRROLIDIDES
536#define UNDERIV_ADD_EXPLICIT_H
543#define HAL_ACID_H_XCHG 1
544#define CANON_FIXH_TRANS 1
545#define STEREO_WEDGE_ONLY 1
548#define REMOVE_ION_PAIRS_EARLY 1
549#define REMOVE_ION_PAIRS_DISC_STRU 1
550#define REMOVE_ION_PAIRS_FIX_BONDS 1
551#define S_VI_O_PLUS_METAL_FIX_BOND 1
552#define N_V_STEREOBONDS 1
554#define REMOVE_ION_PAIRS_ORIG_STRU 0
560#define DISCONNECT_SALTS 1
561#define TEST_REMOVE_S_ATOMS 1
564#define CHARGED_SALTS_ONLY 1
566#define BNS_PROTECT_FROM_TAUT 1
567#define BNS_MARK_EDGE_2_DISCONNECT 1
569#define REPLACE_ALT_WITH_TAUT 1
570#define MOVE_CHARGES 1
571#define NEUTRALIZE_ENDPOINTS 1
573#define FIX_H_CHECKING_TAUT 1
574#define ALWAYS_ADD_TG_ON_THE_FLY 1
575#define IGNORE_SINGLE_ENDPOINTS 1
578#define INCL_NON_SALT_CANDIDATATES 1
580#define SALT_WITH_PROTONS 1
581#define OPPOSITE_CHARGE_IN_CGROUP 1
582#define MOVE_PPLUS_TO_REMOVE_PROTONS 0
584#define ADD_MOVEABLE_O_PLUS 1
587#define DISCONNECT_METALS 1
588#define RECONNECT_METALS 0
590#define CHECK_METAL_VALENCE 0
591#define bREUSE_INCHI 1
593#define OUTPUT_CONNECTED_METAL_ONLY 0
595#define EMBED_REC_METALS_INCHI 1
598#define bOUTPUT_ONE_STRUCT_TIME 1
612#define ALT_TAUT(X) ((X)>TAUT_YES? TAUT_YES : 1-(X))
626#define NEW_STEREOCENTER_CHECK 1
627#define MIN_SB_RING_SIZE 8
629#define REMOVE_KNOWN_NONSTEREO 1
630#define REMOVE_CALC_NONSTEREO 1
631#define PROPAGATE_ILL_DEF_STEREO 1
635#define ONLY_DOUBLE_BOND_STEREO 0
637#define ONE_BAD_SB_NEIGHBOR 1
639#define ENH_STEREO_DICT_SIZE 100
642#define BREAK_ONE_MORE_SC_TIE 1
643#define BREAK_ALSO_NEIGH_TIE 0
644#define BREAK_ALSO_NEIGH_TIE_ROTATE 1
646#define STEREO_CENTER_BONDS_NORM 1
647#define STEREO_CENTER_BOND4_NORM 0
648#define NORMALIZE_INP_COORD 0
651#define STEREO_WEDGE_ONLY 1
652#define CHECK_C2v_S4_SYMM 0
654#define EQL_H_NUM_TOGETHER 1
655#define ABC_CT_NUM_CLOSURES 1
658#define SINGLET_IS_TRIPLET 1
662#define FIND_CANON_NE_EQUITABLE 0
670#define EXTR_KNOWN_USED_TO_REMOVE_PARITY 0x000001
671#define EXTR_CALC_USED_TO_REMOVE_PARITY 0x000002
672#define EXTR_2EQL2CENTER_TO_REMOVE_PARITY 0x000004
673#define EXTR_HAS_ATOM_WITH_DEFINED_PARITY 0x000008
674#define EXTR_REMOVE_PARITY_WARNING 0x000010
675#define EXTR_SALT_WAS_DISCONNECTED 0x000020
676#define EXTR_SALT_PROTON_MOVED 0x000040
677#define EXTR_SALT_PROTON_MOVE_ERR_WARN 0x000080
678#define EXTR_METAL_WAS_DISCONNECTED 0x000100
679#define EXTR_METAL_WAS_NOT_DISCONNECTED 0x000200
680#define EXTR_NON_TRIVIAL_STEREO 0x000400
681#define EXTR_UNUSUAL_VALENCES 0x000800
682#define EXTR_HAS_METAL_ATOM 0x001000
683#define EXTR_TEST_TAUT3_SALTS_DONE 0x002000
684#define EXTR_CANON_NE_EQUITABLE 0x004000
685#define EXTR_HAS_PROTON_PN 0x008000
686#define EXTR_HAS_FEATURE 0x010000
687#define EXTR_TAUT_TREATMENT_CHARGES 0x020000
688#define EXTR_TRANSPOSITION_EXAMPLES 0x040000
698#define TAUT_TROPOLONE_7 1
699#define TAUT_TROPOLONE_5 1
700#define TAUT_4PYRIDINOL_RINGS 1
701#define TAUT_PYRAZOLE_RINGS 1
703#define TAUT_IGNORE_EQL_ENDPOINTS 0
706#define TAUT_RINGS_ATTACH_CHAIN 1
710#define FIND_RING_SYSTEMS 1
713#define FIND_RINS_SYSTEMS_DISTANCES 0
714#define USE_DISTANCES_FOR_RANKING 0
716#define DISPLAY_RING_SYSTEMS 0
721#if ( bRELEASE_VERSION==1 && bOUTPUT_ONE_STRUCT_TIME==1)
722#undef bOUTPUT_ONE_STRUCT_TIME
723#define bOUTPUT_ONE_STRUCT_TIME 0
727#if ( bRELEASE_VERSION==1 && FIND_RING_SYSTEMS!=1 )
728#ifdef FIND_RING_SYSTEMS
729#undef FIND_RING_SYSTEMS
731#define FIND_RING_SYSTEMS 1
735#if ( FIND_RING_SYSTEMS != 1 )
737#if ( FIND_RINS_SYSTEMS_DISTANCES == 1 )
738#undef FIND_RINS_SYSTEMS_DISTANCES
739#define FIND_RINS_SYSTEMS_DISTANCES 0
745#if ( FIND_RINS_SYSTEMS_DISTANCES != 1 )
747#if ( USE_DISTANCES_FOR_RANKING == 1 )
748#undef USE_DISTANCES_FOR_RANKING
749#define USE_DISTANCES_FOR_RANKING 0
752#if ( DISPLAY_RING_SYSTEMS == 1 )
753#undef DISPLAY_RING_SYSTEMS
754#define DISPLAY_RING_SYSTEMS 0
760#if ( FIND_RING_SYSTEMS==1 && (TAUT_TROPOLONE_7==1 || TAUT_TROPOLONE_5==1 || TAUT_4PYRIDINOL_RINGS==1 || TAUT_PYRAZOLE_RINGS) )
766#define APPLY_IMPLICIT_H_DOWN_RULE 0
770#define ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS 1
773#define IGNORE_TGROUP_WITHOUT_H 1
775#if ( DISCONNECT_SALTS == 1 )
776#define REMOVE_TGROUP_CHARGE 0
778#define REMOVE_TGROUP_CHARGE 1
781#if ( REMOVE_TGROUP_CHARGE == 1 )
782#define INCHI_T_NUM_MOVABLE 1
784#define INCHI_T_NUM_MOVABLE 2
791#define USE_AUX_RANKING 1
792#define USE_AUX_RANKING_ALL 1
794#define USE_ISO_SORT_KEY_HFIXED 0
801#define REL_RAC_STEREO_IGN_1_SC 0
804#define CMODE_CT 0x000001
805#define CMODE_ISO 0x000002
806#define CMODE_ISO_OUT 0x000004
807#define CMODE_STEREO 0x000008
808#define CMODE_ISO_STEREO 0x000010
809#define CMODE_TAUT 0x000020
810#define CMODE_NOEQ_STEREO 0x000040
811#define CMODE_REDNDNT_STEREO 0x000080
812#define CMODE_NO_ALT_SBONDS 0x000100
814#define CMODE_RELATIVE_STEREO 0x000200
815#define CMODE_RACEMIC_STEREO 0x000400
816#define CMODE_SC_IGN_ALL_UU 0x000800
817#define CMODE_SB_IGN_ALL_UU 0x001000
821#define CANON_MODE_CT (CMODE_CT)
822#define CANON_MODE_TAUT (CMODE_CT|CMODE_TAUT)
823#define CANON_MODE_ISO (CMODE_CT|CMODE_ISO|CMODE_ISO_OUT)
824#define CANON_MODE_STEREO (CMODE_CT|CMODE_STEREO)
825#define CANON_MODE_ISO_STEREO (CMODE_CT|CMODE_ISO|CMODE_ISO_OUT|CMODE_ISO_STEREO)
827#define CANON_MODE_MASK 0x00FF
834#define CT_ATOMID_DONTINCLUDE 1
835#define CT_ATOMID_IS_INITRANK 2
836#define CT_ATOMID_IS_CURRANK 3
842#define CANON_TAUTOMERS 1
843#define HYDROGENS_IN_INIT_RANKS 1
845#define DOUBLE_BOND_NEIGH_LIST 0
846#define INCL_NON_6AROM 1
850#define CT_NEIGH_SMALLER
852#define CT_ATOMID CT_ATOMID_IS_CURRANK
854#define CT_NEIGH_INCREASE
856#define USE_SYMMETRY_TO_ACCELERATE 1
861#define CT_GREATER_THAN >
862#define CT_INITVALUE ~0
864#define WORSE_PARITY 2
866#define CT_GREATER_THAN <
867#define CT_INITVALUE 0
869#define WORSE_PARITY 1
872#ifdef CT_NEIGH_SMALLER
873#define CT_NEIGH_SMALLER_THAN <
875#define CT_NEIGH_SMALLER_THAN >
879#if !defined( CT_ATOMID )
880#error You have to #define CT_ATOMID
882#if ( defined( CT_ATOMID ) && CT_ATOMID==CT_ATOMID_DONTINCLUDE )
883#error CT_DELIMITER should be #defined if CT_ATOMID is not included
891#define ALL_ALT_AS_AROMATIC 1
893#define ANY_ATOM_IN_ALT_CYCLE 1
895#define EXCL_ALL_AROM_BOND_PARITY 0
900#if ( EXCL_ALL_AROM_BOND_PARITY == 0 )
901#define ADD_6MEMB_AROM_BOND_PARITY 1
905#define ADD_6MEMB_AROM_BOND_PARITY 0
908#define MAX_NUM_STEREO_BONDS 3
909#define MAX_NUM_STEREO_BOND_NEIGH 3
910#define MIN_NUM_STEREO_BOND_NEIGH 2
912#define MAX_NUM_STEREO_ATOM_NEIGH 4
913#define STEREO_AT_MARK 8
915#if ( ONLY_DOUBLE_BOND_STEREO == 1 )
917#ifdef ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS
918#undef ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS
919#define ALLOW_TAUT_ATTACHMENTS_TO_STEREO_BONDS 0
922#ifdef EXCL_ALL_AROM_BOND_PARITY
923#undef EXCL_ALL_AROM_BOND_PARITY
924#define EXCL_ALL_AROM_BOND_PARITY 1
927#ifdef ADD_6MEMB_AROM_BOND_PARITY
928#undef ADD_6MEMB_AROM_BOND_PARITY
929#define ADD_6MEMB_AROM_BOND_PARITY 0
935#if ( ALL_ALT_AS_AROMATIC == 1 && DOUBLE_BOND_NEIGH_LIST != 0 )
936#undef DOUBLE_BOND_NEIGH_LIST
937#define DOUBLE_BOND_NEIGH_LIST 0
945#define DRAW_AROM_TAUT 1
953#define TG_FLAG_TEST_TAUT__ATOMS 0x00000001
954#define TG_FLAG_DISCONNECT_SALTS 0x00000002
955#define TG_FLAG_TEST_TAUT__SALTS 0x00000004
956#define TG_FLAG_MOVE_POS_CHARGES 0x00000008
957#define TG_FLAG_TEST_TAUT2_SALTS 0x00000010
958#define TG_FLAG_ALLOW_NO_NEGTV_O 0x00000020
959#define TG_FLAG_MERGE_TAUT_SALTS 0x00000040
961#define TG_FLAG_ALL_TAUTOMERIC (TG_FLAG_TEST_TAUT__ATOMS| \
962 TG_FLAG_TEST_TAUT__SALTS| \
963 TG_FLAG_TEST_TAUT2_SALTS| \
964 TG_FLAG_MERGE_TAUT_SALTS)
966#define TG_FLAG_DISCONNECT_COORD 0x00000080
967#define TG_FLAG_RECONNECT_COORD 0x00000100
968#define TG_FLAG_CHECK_VALENCE_COORD 0x00000200
969#define TG_FLAG_MOVE_HPLUS2NEUTR 0x00000400
970#define TG_FLAG_VARIABLE_PROTONS 0x00000800
971#define TG_FLAG_HARD_ADD_REM_PROTONS 0x00001000
972#define TG_FLAG_POINTED_EDGE_STEREO 0x00002000
973#if ( FIX_ADJ_RAD == 1 )
974#define TG_FLAG_FIX_ADJ_RADICALS 0x00004000
976#define TG_FLAG_PHOSPHINE_STEREO 0x00008000
977#define TG_FLAG_ARSINE_STEREO 0x00010000
978#define TG_FLAG_H_ALREADY_REMOVED 0x00020000
979#define TG_FLAG_FIX_SP3_BUG 0x00040000
981#define TG_FLAG_KETO_ENOL_TAUT 0x00080000
982#define TG_FLAG_1_5_TAUT 0x00100000
985#define TG_FLAG_FIX_ISO_FIXEDH_BUG 0x00200000
986#define TG_FLAG_FIX_TERM_H_CHRG_BUG 0x00400000
988#define TG_FLAG_PT_22_00 0x00800000
989#define TG_FLAG_PT_16_00 0x01000000
990#define TG_FLAG_PT_06_00 0x02000000
991#define TG_FLAG_PT_39_00 0x04000000
992#define TG_FLAG_PT_13_00 0x08000000
993#define TG_FLAG_PT_18_00 0x10000000
997#define TG_FLAG_MOVE_HPLUS2NEUTR_DONE 0x00000001
998#define TG_FLAG_TEST_TAUT__ATOMS_DONE 0x00000002
999#define TG_FLAG_DISCONNECT_SALTS_DONE 0x00000004
1000#define TG_FLAG_TEST_TAUT__SALTS_DONE 0x00000008
1001#define TG_FLAG_MOVE_POS_CHARGES_DONE 0x00000010
1002#define TG_FLAG_TEST_TAUT2_SALTS_DONE 0x00000020
1003#define TG_FLAG_ALLOW_NO_NEGTV_O_DONE 0x00000040
1004#define TG_FLAG_MERGE_TAUT_SALTS_DONE 0x00000080
1006#define TG_FLAG_ALL_SALT_DONE (TG_FLAG_TEST_TAUT__SALTS_DONE | \
1007 TG_FLAG_TEST_TAUT2_SALTS_DONE | \
1008 TG_FLAG_MERGE_TAUT_SALTS_DONE )
1010#define TG_FLAG_DISCONNECT_COORD_DONE 0x00000100
1011#define TG_FLAG_CHECK_VALENCE_COORD_DONE 0x00000200
1012#define TG_FLAG_MOVE_CHARGE_COORD_DONE 0x00000400
1013#define TG_FLAG_FIX_ODD_THINGS_DONE 0x00000800
1014#define TG_FLAG_TEST_TAUT3_SALTS_DONE 0x00001000
1015#define TG_FLAG_FOUND_SALT_CHARGES_DONE 0x00002000
1016#define TG_FLAG_FOUND_ISOTOPIC_H_DONE 0x00004000
1017#define TG_FLAG_FOUND_ISOTOPIC_ATOM_DONE 0x00008000
1018#if ( FIX_ADJ_RAD == 1 )
1019#define TG_FLAG_FIX_ADJ_RADICALS_DONE 0x00010000
1022#if ( READ_INCHI_STRING == 1 )
1023#define READ_INCHI_OUTPUT_INCHI 0x00000001
1024#define READ_INCHI_SPLIT_OUTPUT 0x00000002
1025#define READ_INCHI_KEEP_BALANCE_P 0x00000004
1026#define READ_INCHI_TO_STRUCTURE 0x00000008
1048#define INCHI_IOS_TYPE_NONE 0
1049#define INCHI_IOS_TYPE_STRING 1
1050#define INCHI_IOS_TYPE_FILE 2
1068#if ( defined(_WIN32) && defined(_DEBUG) && defined(_MSC_VER) )
1070#ifndef TARGET_LIB_FOR_WINCHI
1071#ifndef DO_NOT_TRACE_MEMORY_LEAKS
1072#define TRACE_MEMORY_LEAKS 1
1074#define TRACE_MEMORY_LEAKS 0
1077#define TRACE_MEMORY_LEAKS 1
1080#define TRACE_MEMORY_LEAKS 0
1085#define INCHI_HEAPCHK
1087#if ( TRACE_MEMORY_LEAKS == 1 )
1090#define inchi_malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
1091#define inchi_calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
1092#define inchi_realloc(d, s) _realloc_dbg(d, s, _NORMAL_BLOCK, __FILE__, __LINE__)
1093#define inchi_free(p) _free_dbg(p, _NORMAL_BLOCK)
1095#ifdef TARGET_EXE_USING_API
1097#define e_inchi_malloc(a) inchi_malloc(a)
1098#define e_inchi_calloc(a,b) inchi_calloc(a,b)
1099#define e_inchi_realloc(a,b) inchi_realloc(a,b)
1100#define e_inchi_free(a) inchi_free(a)
1108#ifdef CHECK_WIN32_VC_HEAP
1111#define INCHI_HEAPCHK \
1113 int tmp = _crtDbgFlag; \
1114 _crtDbgFlag |= _CRTDBG_ALLOC_MEM_DF; \
1115 _ASSERT( _CrtCheckMemory( ) ); \
1116 _crtDbgFlag = tmp; \
1131#undef TRACE_MEMORY_LEAKS
1132#define TRACE_MEMORY_LEAKS 0
1145#ifdef TARGET_EXE_USING_API
1148#define inchi_malloc e_inchi_malloc
1151#define inchi_calloc e_inchi_calloc
1153#ifndef inchi_realloc
1154#define inchi_realloc e_inchi_realloc
1157#define inchi_free e_inchi_free
1160#ifndef e_inchi_malloc
1161#define e_inchi_malloc malloc
1163#ifndef e_inchi_calloc
1164#define e_inchi_calloc calloc
1166#ifndef e_inchi_realloc
1167#define e_inchi_realloc realloc
1170#define e_inchi_free(X) do{ if(X) free(X); }while(0)
1176#define inchi_malloc malloc
1179#define inchi_calloc calloc
1181#ifndef inchi_realloc
1182#define inchi_realloc realloc
1185#define inchi_free(X) do{ if(X) free(X); }while(0)
1193#if ( USE_ALLOCA == 1 )
1194#define qmalloc(X) _alloca(X)
1195#define qfree(X) do{(X)=NULL;}while(0)
1197#define qmalloc(X) inchi_malloc(X)
1198#define qfree(X) do{if(X){inchi_free(X);(X)=NULL;}}while(0)
1201#if ( defined(_MSC_VER) && _MSC_VER >= 800 )
1202#define fast_alloc(X) _alloca(X)
1205#define fast_alloc(X) inchi_malloc(X)
1206#define fast_free(X) inchi_free(X)
1209#define qzfree(X) do{if(X){inchi_free(X);(X)=NULL;}}while(0)
1213#define MYREALLOC2(PTRTYPE1, PTRTYPE2, PTR1, PTR2, LEN1, LEN2, ERR) \
1215 if( (LEN1) <= (LEN2) ) {\
1216 PTRTYPE1 * newPTR1 = (PTRTYPE1 *)inchi_calloc( (LEN2)+1, sizeof(PTRTYPE1) );\
1217 PTRTYPE2 * newPTR2 = (PTRTYPE2 *)inchi_calloc( (LEN2)+1, sizeof(PTRTYPE2) );\
1218 if ( newPTR1 && newPTR2 ) { \
1219 if ( (PTR1) && (LEN1) > 0 ) \
1220 (memcpy) ( newPTR1, (PTR1), (LEN1) * sizeof(PTRTYPE1) ); \
1221 if ( (PTR2) && (LEN1) > 0 ) \
1222 (memcpy) ( newPTR2, (PTR2), (LEN1) * sizeof(PTRTYPE2) ); \
1232 inchi_free(newPTR1); \
1233 inchi_free(newPTR2); \
1236 } else { (ERR) = 0; } \
1243#define DEBUG_POLYMERS 0
1244#ifndef DEBUG_POLYMERS
1245#define DEBUG_POLYMERS 2
1248#define POLYMERS_NO 0
1249#define POLYMERS_MODERN 1
1250#define POLYMERS_LEGACY 2
1251#define POLYMERS_LEGACY_PLUS 3
1258#define STEREO_AT_ZZ 0
1262#define ALLOW_SUBSTRUCTURE_FILTERING 1
1265#ifndef COMPILE_ALL_CPP
struct tagOutputStream INCHI_IOSTREAM
struct tagOutputString INCHI_IOS_STRING
FILE * f
Definition mode.h:1036
INCHI_IOS_STRING s
Definition mode.h:1035
int type
Definition mode.h:1037
int nPtr
Definition mode.h:1024
char * pStr
Definition mode.h:1021
int nUsedLength
Definition mode.h:1023
int nAllocatedLength
Definition mode.h:1022