#ifndef __COMMON_H #define __COMMON_H #include #include #include "cmdline.h" #include "const.hh" /************************************************** * Stale dotyczace wejscia/wyjscia */ #define EMPTYFORM '*' #define INFIELD_SEP ':' #define MAXAUX 64 #define FIELD_SEP " \t\n" /**************************************************/ extern FILE* inputf; extern FILE* outputf; extern FILE* failedf; extern char* input_filename; extern char* output_filename; extern char* failed_filename; extern bool copy_processed; extern bool append_output; extern bool append_failed; extern void process_common_options(gengetopt_args_info args); /**************************************************/ /* parameters: -seg - segment -name - field name +val - field contents return value: 1 if specified field exists, 0 otherwise */ inline int getfield(const char* seg, const char* pref, char* val) { const char* p=seg; while(*p==' ') ++p; pos: if(isdigit(*p) or *p=='*') if(*pref=='1') return sscanf(p,"%s",val); else while(*p!=' ') ++p; else if(*pref=='1') return 0; else goto type; while(*p==' ') ++p; len: if(isdigit(*p) or *p=='*') if(*pref=='2') return sscanf(p,"%s",val); else while(*p!=' ') ++p; else if(*pref=='2') return 0; else goto type; while(*p==' ') ++p; type: if(*pref=='3') return sscanf(p,"%s",val); else while(*p!=' ') ++p; while(*p==' ') ++p; form: if(*pref=='4') return sscanf(p,"%s",val); else while(*p!=' ') ++p; while(*p==' ') ++p; annotation: do p=strstr(p,pref); while(p!=NULL && *(p-1)!=' ' && *(p-1)!='\t'); if(p==NULL) return 0; else { p+=strlen(pref); int len=strcspn(p,FIELD_SEP "\n\r\f\0"); strncpy(val,p,len); val[len]='\0'; return 1; } } /* parameters: +seg - segment -pref - prefix of the new field -val - contents of the new field return value: 1 - success, 0 - fail (limit on segment length exceeded) */ inline int addfield(char *seg, const char *pref, const char *val) // zalozenie, ze seg konczy sie znakiem \n { if(strlen(seg)+strlen(pref)+strlen(val) >= MAXLINE) return 0; // bezpieczniej, ale wolniej int seglen=strlen(seg); sprintf(seg+(seglen-1)," %s%s\n",pref,val); return 1; } inline bool processseg(const char* s, gengetopt_args_info& args) { bool ret = !args.process_given; char field[MAXAUX]; if(args.process_given) { getfield(s,"3",field); for(int i=0; i