/*
* International Union of Pure and Applied Chemistry (IUPAC)
* International Chemical Identifier (InChI)
* Version 1
* Software version 1.01
* July 21, 2006
* Developed at NIST
*/
#ifndef __INCHIMAIN_H__
#define __INCHIMAIN_H__
#define ESC_KEY 27
#define INCHI_SEGM_BUFLEN 64000
/********************************************************************/
typedef struct tagStructData {
unsigned long ulStructTime;
int nErrorCode;
int nErrorType;
int nStructReadError;
char pStrErrStruct[STR_ERR_LEN];
long fPtrStart; /* or number of processed structures */
long fPtrEnd; /* or number of errors */
int bXmlStructStarted;
int bUserQuit;
int bUserQuitComponent;
int bUserQuitComponentDisplay;
int bChiralFlag;
/* information related to normal or disconnected layers */
int num_taut[INCHI_NUM];
int num_non_taut[INCHI_NUM];
INCHI_MODE bTautFlags[INCHI_NUM]; /* reconnected does not have TG_FLAG_DISCONNECT_COORD_DONE flag */
INCHI_MODE bTautFlagsDone[INCHI_NUM]; /* reconnected does not have TG_FLAG_DISCONNECT_COORD_DONE flag */
int num_components[INCHI_NUM]; /* number of allocated INChI, INChI_Aux data structures */
/* debugging info */
#if( bRELEASE_VERSION == 0 )
int bExtract;
#endif
} STRUCT_DATA;
#ifndef INCHI_ALL_CPP
#ifdef __cplusplus
extern "C" {
#endif
#endif
int ReadCommandLineParms( int argc, const char *argv[], INPUT_PARMS *ip, char *szSdfDataValue,
unsigned long *ulDisplTime, int bReleaseVersion, INCHI_FILE *log_file );
void HelpCommandLineParms( INCHI_FILE *f );
int OpenFiles( FILE **inp_file, FILE **output_file, FILE **log_file, FILE **prb_file, INPUT_PARMS *ip );
#ifndef INCHI_ANSI_ONLY
int DisplayStructure( inp_ATOM *at, int num_at, int num_removed_H, int bAdd_DT_to_num_H, int nNumRemovedProtons, NUM_H nNumRemovedProtonsIsotopic[],
int bIsotopic, int j /*bTautomeric*/, INChI **cur_INChI, INChI_Aux **cur_INChI_Aux,
int bAbcNumbers, DRAW_PARMS *dp, INCHI_MODE nMode, char *szTitle );
void FillTableParms( SET_DRAW_PARMS *sdp, INChI **cur_INChI, INChI_Aux **cur_INChI_Aux, INCHI_MODE nMode, int bShowIsotopic, int bShowTaut );
void FillCompositeTableParms( SET_DRAW_PARMS *sdp, AT_NUMB StereoFlags,
INCHI_MODE nMode, int bShowIsotopic, int bShowTaut );
#endif
int PrintInputParms( INCHI_FILE *log_file, INPUT_PARMS *ip );
const char *ErrMsg( int nErrorCode );
int SortAndPrintINChI( INCHI_FILE *output_file, char *pStr, int nStrLen, INCHI_FILE *log_file,
INPUT_PARMS *ip, ORIG_ATOM_DATA *orig_inp_data, ORIG_ATOM_DATA *prep_inp_data,
COMP_ATOM_DATA composite_norm_data[INCHI_NUM][TAUT_NUM+1],
ORIG_STRUCT *pOrigStruct, int num_components[INCHI_NUM],
int num_non_taut[INCHI_NUM], int num_taut[INCHI_NUM],
INCHI_MODE bTautFlags[INCHI_NUM], INCHI_MODE bTautFlagsDone[INCHI_NUM],
NORM_CANON_FLAGS *pncFlags, long num_inp,
PINChI2 *pINChI[INCHI_NUM], PINChI_Aux2 *pINChI_Aux[INCHI_NUM], int *bSortPrintINChIFlags );
void FreeAllINChIArrays( PINChI2 *pINChI[INCHI_NUM], PINChI_Aux2 *pINChI_Aux[INCHI_NUM], int num_components[2] );
void FreeINChIArrays( PINChI2 *pINChI, PINChI_Aux2 *pINChI_Aux, int num_components );
void SplitTime( unsigned long ulTotalTime, int *hours, int *minutes, int *seconds, int *mseconds );
int ReadTheStructure( STRUCT_DATA *sd, INPUT_PARMS *ip, FILE *inp_file, ORIG_ATOM_DATA *orig_inp_data,
int inp_index, int *out_index );
int TreatReadTheStructureErrors( STRUCT_DATA *sd, INPUT_PARMS *ip, int nLogMask,
FILE *inp_file, INCHI_FILE *log_file, INCHI_FILE *output_file, INCHI_FILE *prb_file,
ORIG_ATOM_DATA *orig_inp_data, long *num_inp, char *pStr, int nStrLen );
int GetOneComponent( STRUCT_DATA *sd, INPUT_PARMS *ip, INCHI_FILE *log_file, INCHI_FILE *output_file,
INP_ATOM_DATA *inp_cur_data,
ORIG_ATOM_DATA *orig_inp_data, int i, long num_inp, char *pStr, int nStrLen );
int CreateOneComponentINChI( STRUCT_DATA *sd, INPUT_PARMS *ip, INP_ATOM_DATA *inp_cur_data, ORIG_ATOM_DATA *orig_inp_data,
PINChI2 *pINChI, PINChI_Aux2 *pINChI_Aux, int iINChI,
int i, long num_inp, INP_ATOM_DATA **inp_norm_data,
NORM_CANON_FLAGS *pncFlags, INCHI_FILE *log_file );
int TreatCreateOneComponentINChIError(STRUCT_DATA *sd, INPUT_PARMS *ip, ORIG_ATOM_DATA *orig_inp_data,
int i, long num_inp,
FILE *inp_file, INCHI_FILE *log_file, INCHI_FILE *output_file, INCHI_FILE *prb_file,
char *pStr, int nStrLen );
int TreatCreateINChIWarning(STRUCT_DATA *sd, INPUT_PARMS *ip, ORIG_ATOM_DATA *orig_inp_data, long num_inp,
FILE *inp_file, INCHI_FILE *log_file, INCHI_FILE *output_file, INCHI_FILE *prb_file,
char *pStr, int nStrLen );
#if( TEST_RENUMB_ATOMS == 1 || READ_INCHI_STRING == 1 ) /* { */
int CompareINChI( INChI *i1, INChI *i2, INChI_Aux *a1, INChI_Aux *a2 );
#endif
void eat_keyboard_input( void );
int user_quit( const char *msg, unsigned long ulMaxTime );
int GetOneStructure( STRUCT_DATA *sd, INPUT_PARMS *ip, char *szTitle,
FILE *inp_file, INCHI_FILE *log_file, INCHI_FILE *output_file, INCHI_FILE *prb_file,
ORIG_ATOM_DATA *orig_inp_data, long *num_inp, char *pStr, int nStrLen, STRUCT_FPTRS *struct_fptrs );
int ProcessOneStructure( STRUCT_DATA *sd, INPUT_PARMS *ip, char *szTitle,
PINChI2 *pINChI2[INCHI_NUM], PINChI_Aux2 *pINChI_Aux2[INCHI_NUM],
FILE *inp_file, INCHI_FILE *log_file, INCHI_FILE *output_file, INCHI_FILE *prb_file,
ORIG_ATOM_DATA *orig_inp_data, ORIG_ATOM_DATA *prep_inp_data,
long num_inp, char *pStr, int nStrLen );
int CreateOneStructureINChI( STRUCT_DATA *sd, INPUT_PARMS *ip, char *szTitle,
PINChI2 *pINChI2[INCHI_NUM], PINChI_Aux2 *pINChI_Aux2[INCHI_NUM], int iINChI,
FILE *inp_file, INCHI_FILE *log_file, INCHI_FILE *output_file, INCHI_FILE *prb_file,
ORIG_ATOM_DATA *orig_inp_data, ORIG_ATOM_DATA *prep_inp_data,
COMP_ATOM_DATA composite_norm_data2[][TAUT_NUM+1],
long num_inp, char *pStr, int nStrLen, NORM_CANON_FLAGS *pncFlags );
int bIsStructChiral( PINChI2 *pINChI2[INCHI_NUM], int num_components[] );
int PreprocessOneStructure( STRUCT_DATA *sd, INPUT_PARMS *ip, ORIG_ATOM_DATA *orig_inp_data, ORIG_ATOM_DATA *prep_inp_data );
int FillOutOrigStruct( ORIG_ATOM_DATA *orig_inp_data, ORIG_STRUCT *pOrigStruct, STRUCT_DATA *sd );
void FreeOrigStruct( ORIG_STRUCT *pOrigStruct);
int ReadWriteInChI( INCHI_FILE *pInp, INCHI_FILE *pOut, INCHI_FILE *pLog,
INPUT_PARMS *ip, STRUCT_DATA *sd, inp_ATOM **at, int *num_at,
char *szMsg, int nMsgLen, unsigned long WarningFlags[2][2] );
int CompareHillFormulasNoH( const char *f1, const char *f2, int *num_H1, int *num_H2 );
#ifndef INCHI_ALL_CPP
#ifdef __cplusplus
}
#endif
#endif
#endif /* __INCHIMAIN_H__ */
syntax highlighted by Code2HTML, v. 0.9.1