/*--------------------------------------------------------------------------*/ int get_logflags_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char ** logFlags) { int kopt = 0; int* piAddr = NULL; int iLog = 0; char* pstLog = NULL; if (pos < FirstOpt(_pvCtx)) //input argument */ { //no idea of the real goal of this, how input var can have type == 0 Oo if (getInputArgumentType(_pvCtx, pos) == 0) { *logFlags = getDefLogFlags(); return 1; } getVarAddressFromPosition(_pvCtx, pos, &piAddr); } else if ((kopt = FindOpt(_pvCtx, "logflag", opts)) >= 0)//optional argument { piAddr = opts[kopt].piAddr; } else { //take default value *logFlags = getDefLogFlags(); return 1; } getAllocatedSingleString(_pvCtx, piAddr, &pstLog); iLog = (int)strlen(pstLog); if (iLog != 2 && iLog != 3) { Scierror(999, "%s: Wrong size for input argument #%d: %d or %d expected\n", fname, pos, 2, 3); return 0; } if (iLog == 2) { if ((pstLog[0] != 'l' && pstLog[0] != 'n') || (pstLog[1] != 'l' && pstLog[1] != 'n')) { //Err = pos; SciError(116); return 0; } logFlagsCpy[0] = 'g'; logFlagsCpy[1] = pstLog[0]; logFlagsCpy[2] = pstLog[1]; *logFlags = logFlagsCpy; } else //iLog == 3 { if (((pstLog[0] != 'g') && (pstLog[0] != 'e') && (pstLog[0] != 'o')) || (pstLog[1] != 'l' && pstLog[1] != 'n') || (pstLog[2] != 'l' && pstLog[2] != 'n')) { //Err = pos; SciError(116); return 0; } *logFlags = pstLog; } return 1; }
/*--------------------------------------------------------------------------*/ int get_logflags_arg(char *fname,int pos,rhs_opts opts[], char ** logFlags ) { int m,n,l,first_opt=FirstOpt(),kopt; if (pos < first_opt) /* regular argument */ { if (VarType(pos)) { GetRhsVar(pos,STRING_DATATYPE, &m, &n, &l); if ((m * n != 2)&&(m * n != 3)) { Scierror(999,"%s: Wrong size for input argument #%d: %d or %d expected\n",fname, pos, 2, 3); return 0; } if (m * n == 2) { if ((*cstk(l)!='l'&&*cstk(l)!='n')||(*cstk(l+1)!='l'&&*cstk(l+1)!='n')) { Err=pos; SciError(116); return 0; } logFlagsCpy[0]='g'; logFlagsCpy[1]=*cstk(l); logFlagsCpy[2]=*cstk(l+1) ; *logFlags = logFlagsCpy ; } else { if (((*cstk(l)!='g')&&(*cstk(l)!='e')&&(*cstk(l)!='o')) || (*cstk(l+1)!='l'&&*cstk(l+1)!='n') || (*cstk(l+2)!='l'&&*cstk(l+2)!='n')) { Err=pos; SciError(116); return 0; } *logFlags = cstk(l) ; } } else /* zero type argument --> default value */ { *logFlags = getDefLogFlags() ; } } else if ((kopt=FindOpt("logflag",opts))) { /* named argument: style=value */ GetRhsVar(kopt,STRING_DATATYPE, &m, &n, &l); if ((m * n != 2)&&(m * n != 3)) { Scierror(999,"%s: Wrong size for input argument #%d: %d or %d expected\n",fname, kopt, 2, 3); return 0; } if (m * n == 2) { if ((*cstk(l)!='l'&&*cstk(l)!='n')||(*cstk(l+1)!='l'&&*cstk(l+1)!='n')) { Err=kopt; SciError(116); return 0; } logFlagsCpy[0]='g'; logFlagsCpy[1]=*cstk(l); logFlagsCpy[2]=*cstk(l+1) ; *logFlags = logFlagsCpy ; } else { if (((*cstk(l)!='g')&&(*cstk(l)!='e')&&(*cstk(l)!='o')) || (*cstk(l+1)!='l'&&*cstk(l+1)!='n') || (*cstk(l+2)!='l'&&*cstk(l+2)!='n')) { Err=kopt; SciError(116); return 0; } *logFlags = cstk(l) ; } } else /* unspecified argument --> default value */ { *logFlags = getDefLogFlags() ; } return 1; }