/* +++++++++++++++++ */ # define FILENAME "HandleOptions.c" /* +++++++++++++++++ */ # include "util.h" /* =============== */ char * ReturnArgvMatch(int argc, char ** argv, char *Option) /* =============== */ { int i, r = 0; char b[BUFSIZ] ; STJOIN(b,"-",Option); for (i=1; i < (argc-1) ; i++) { if (STREQ(argv[i],b)) r = i + 1; } return (r ? argv[r] : NULL ); } /* ========= */ int ArgvMatch(int argc, char ** argv, char *Option) /* ========= */ { int i, r = 0; char b[BUFSIZ] ; STJOIN(b,"-",Option); for (i=1; i < argc ; i++) { if (STREQ(argv[i],b)) r = 1 ; } fprintf(stderr,"[T/F Option ] -%s = %d\n",Option,r); return r; } /* ================= */ char * StringAfterOption /* ================= */ (int argc, char ** argv, char * Option, char * TheDefault) { char * r = ReturnArgvMatch(argc, argv, Option); if (r) { fprintf(stderr,"[New String ] -%s = %s\n",Option,r); return r; } else { fprintf(stderr,"[Default String] -%s = %s\n",Option,TheDefault); return TheDefault; } } /* =============== */ FILE * FileAfterOption /* =============== */ (int argc, char ** argv, char * Option, char * TheDefault, char * type) { char buf[BUFSIZ],buf2[BUFSIZ]; char * r = ReturnArgvMatch(argc, argv, Option); char * filename ; FILE * RetVal ; if (r) { filename = r ; sprintf(buf,"[Use New Value ] -%s = %s",Option,r); } else { filename = TheDefault ; sprintf(buf,"[Use Default ] -%s = %s",Option,filename); } if (filename[0] == '-') { if (type[0] == 'r') { RetVal = stdin ; sprintf(buf2,"[ Opening stdin ]"); } else if (type[0] == 'w') { RetVal = stdout ; sprintf(buf2,"[ Opening stdout ]"); } } else { RetVal = fopen(filename,type); if (RetVal == NULL) { sprintf(buf2,"[ File Open Failed ]"); } else { sprintf(buf2,"[ Opened File ]"); } } fprintf(stderr,"%s %s\n",buf2,buf); return RetVal; } /* ================= */ double DoubleAfterOption /* ================= */ (int argc, char ** argv, char * Option, double TheDefault) { char * r = ReturnArgvMatch(argc, argv, Option); if (r) { double d = (double) atof(r); fprintf(stderr,"[New Double ] -%s = %f\n",Option,d); return d; } else { fprintf(stderr,"[Default Double] -%s = %f\n",Option,TheDefault); return TheDefault; } } /* ================== */ char * StringAfterKeyInDB /* ================== */ (TokenizeData * d, char * key, char * TheDefault) { InitLexer(d); while (TokenizeLine(d)) { if (StrEq(d->T[1],key) && d->T[2] != NULL) { fprintf(stderr,"[New String ] %s = %s\n",key,d->T[2]); return SaveString(d->T[2]); } } fprintf(stderr,"[Default String} %s = %s\n",key,TheDefault); return TheDefault; } /* ================== */ double DoubleAfterKeyInDB /* ================== */ (TokenizeData * d, char * key, double TheDefault) { InitLexer(d); while (TokenizeLine(d)) { if (StrEq(d->T[1],key) && d->T[2] != NULL) { fprintf(stderr,"[New Double ] %s = %f\n",key,d->D[2]); return (d->D[2]); } } fprintf(stderr,"[Default Double} %s = %f\n",key,TheDefault); return TheDefault; } /* ============= */ char * GetEnvAndJoin(char *EnvVar, char *JoinTo) /* ============= */ { # define FMT "GetEnvAndJoin(): %s \nGetEnvAndJoin(): == ($%s=%s) + (Join=%s) \n" # define LOC_PRINT(a,b,c,d)\ if (StrEq(c,"NULL")) {\ fprintf(stderr,"[GetEnvAndJoin ] No expansion of %s\n",a);\ } else {\ fprintf(stderr,"[GetEnvAndJoin ] $%s%s --> %s\n",b,d,a);\ }\ if (EnvVar == NULL && JoinTo == NULL) { LOC_PRINT("NULL","NULL","NULL","NULL"); return NULL ; } else if (EnvVar == NULL && JoinTo != NULL) { LOC_PRINT(JoinTo,"NULL","NULL",JoinTo); return JoinTo ; } else if (getenv(EnvVar) == NULL && JoinTo == NULL) { LOC_PRINT("NULL",EnvVar,"NULL","NULL"); return NULL ; } else if (getenv(EnvVar) == NULL && JoinTo != NULL) { LOC_PRINT(JoinTo,EnvVar,"NULL",JoinTo); return JoinTo ; } else if (getenv(EnvVar) != NULL && JoinTo == NULL) { LOC_PRINT(getenv(EnvVar),EnvVar,getenv(EnvVar),"NULL"); return getenv(EnvVar) ; } else if (getenv(EnvVar) != NULL && JoinTo != NULL) { char buf[BUFSIZ], *p ; p = SaveString(strcat(strcpy(buf,getenv(EnvVar)),JoinTo)); LOC_PRINT(p,EnvVar,getenv(EnvVar),JoinTo); return p ; } else { STDERR("Fell Through"); } # undef FMT } /* =============== */ char * Expand1stEnvVar(char * s) /* =============== */ { if (s == NULL) { return NULL ; } else if (*s == '{') { return Expand1stEnvVar(s + 1); } else if (*s != '$') { return GetEnvAndJoin(NULL,s); } else if (*s == '$') { int i = 1; char EnvVar[BUFSIZ] = {0}; while ( s[i] && ((char *) strchr("}[]()*&^%$/#.@|",(int) s[i]) == NULL)) { i++ ; } strcpy(EnvVar,s+1); EnvVar[i-1] = 0; return GetEnvAndJoin(EnvVar,&s[i]); } }