00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00090
00091
00092
00093
00094
00095
00096 #ifndef __CCP4_Parser__
00097 #define __CCP4_Parser__
00098
00099 static char rcsidhhh[] = "$Id$";
00100
00101
00102 #include <stdio.h>
00103 #include"ccp4_utils.h"
00104 #include"ccp4_spg.h"
00105
00106
00107 #ifdef __cplusplus
00108 namespace CCP4 {
00109 extern "C" {
00110 typedef CSym::ccp4_symop ccp4_symop;
00111 #endif
00112
00113
00114
00115
00116
00117
00118
00119 #define CCP4_PARSER_MAXLINELENGTH 200
00120 #define CCP4_PARSER_MAXFILENAMELENGTH 200
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131 typedef struct {
00132 char *fullstring;
00133 char word[5];
00134 double value;
00135 int isstring;
00136 int strlength;
00137 int isnumber;
00138 int intdigits;
00139
00140 int frcdigits;
00141
00142 int isquoted;
00143 int isnull;
00144 int ibeg,iend;
00145
00146 } CCP4PARSERTOKEN;
00147
00148
00149
00150
00151 typedef struct {
00152
00153 char keyword[5];
00154 int ntokens;
00155 CCP4PARSERTOKEN *token;
00156
00157 FILE *fp;
00158 int maxtokens;
00159 char *delim;
00160 char *nulldelim;
00161 char *comment;
00162 double max_exponent;
00163 double min_exponent;
00164 } CCP4PARSERARRAY;
00165
00166
00167
00168
00169
00170
00171
00172
00173
00180 CCP4PARSERARRAY* ccp4_parse_start(const int maxtokens);
00181
00187 int ccp4_parse_end(CCP4PARSERARRAY *parsePtr);
00188
00189 int ccp4_parse_init_token(const CCP4PARSERARRAY *parsePtr, const int itok);
00190
00191 int ccp4_parse_delimiters(CCP4PARSERARRAY *parsePtr, const char *delim,
00192 const char *nulldelim);
00193
00194 int ccp4_parse_comments(CCP4PARSERARRAY *parsePtr, const char *comment_chars);
00195
00196 int ccp4_parse_maxmin(CCP4PARSERARRAY *parsePtr, const double max_exponent,
00197 const double min_exponent);
00198
00199 int ccp4_parse_reset(CCP4PARSERARRAY *parsePtr);
00200
00201 int ccp4_parse(const char *line, CCP4PARSERARRAY *parser);
00202
00219 int ccp4_parser(char *line, const int n, CCP4PARSERARRAY *parser,
00220 const int print);
00221
00222
00223
00230 int ccp4_keymatch(const char *keyin1, const char *keyin2);
00231
00232
00233
00239 char *strtoupper (char *str1, const char *str2);
00240
00246 char *strtolower (char *str1, const char *str2);
00247
00248 int strmatch (const char *str1, const char *str2);
00249
00250 int charmatch(const char character, const char *charlist);
00251
00252 int doublefromstr(const char *str, const double max_exp, const double min_exp,
00253 double *valuePtr, double *intvaluePtr, int *intdigitsPtr,
00254 double *frcvaluePtr, int *frcdigitsPtr,
00255 double *expvaluePtr, int *expdigitsPtr);
00256
00263 ccp4_symop symop_to_rotandtrn(const char *symchs_begin, const char *symchs_end);
00264
00274 const char * symop_to_mat4(const char *symchs_begin, const char *symchs_end, float *rot);
00275 int symop_to_mat4_err(const char *symop);
00276 ccp4_symop mat4_to_rotandtrn(const float rsm[4][4]);
00277
00278 char *rotandtrn_to_symop(char *symchs_begin, char *symchs_end, const ccp4_symop symop);
00279 void rotandtrn_to_mat4(float rsm[4][4], const ccp4_symop symop);
00280
00290 char *mat4_to_symop(char *symchs_begin, char *symchs_end, const float rsm[4][4]);
00291
00301 char *mat4_to_recip_symop(char *symchs_begin, char *symchs_end, const float rsm[4][4]);
00302
00303 #ifdef __cplusplus
00304 }
00305 }
00306 #endif
00307
00308 #endif