diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DocVersionExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DocVersionExt.cs index b6e291ce..bfb42c75 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DocVersionExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DocVersionExt.cs @@ -131,6 +131,197 @@ namespace VEPROMS.CSLA.Library { _DocVersionConfig = null; } + + private string GetProfile(string grp, string nam) + { + return GetProfile(grp, nam, false); + } + + private string GetProfile(string grp, string nam, bool flag) + { + DocVersionConfig dvcfg = DocVersionConfig; + string buff = null; + if (grp != null && !grp.Equals(string.Empty)) + { + buff = dvcfg.GetValue(grp, nam); // get the value of 'nam' in 'grp' + if (buff == null || buff.Equals(string.Empty)) + { + if (!flag) + buff = string.Format("<{0}-{1}>", grp, nam); + else + buff = null; + } + } + return buff; + } + + + public string UnitSpecific(string str, int len) + { + + // This routine retrieves the procedure number format from the + // current directory and uses it to adjust the procedure number + // in the specified string + string retvalu = ""; + string asis = "#"; + if (str == null || str.Equals(string.Empty)) return null; + /* + * Bug fix: B2005-017 3/2/2005 + * Need to use the largest procedure number length that's in the + * SET.DFF file. "LargestNumber" is the largest length after the + * procedure number is replaced via the SET.INI file "replace" list. + * + if(len==0)len=LargestNumber; + */ + // TODO: Do we need this line?-->>> if(len==0)len=LargestRawSetNumber; + + //GetPrivateProfileString("unit", "procedure number", asis, mstr, MAXPATH, "proc.ini"); + string pnum = asis; + string mstr = GetProfile("Unit", "Procedure Number"); + if (!mstr.Equals(string.Empty)) + pnum = mstr; + if (pnum.Equals(asis)) + retvalu = str; + else if (pnum[0] == '!') + { + // look for mstr in SET.INI + // GetPrivateProfileString("replace", mstr, mstr, tonum, 24, "set.ini"); + + // TODO: NOT SURE IF SET.INI AND PROC.INI HAVE UNIQUE GROUP NAMES!!!!!!! + mstr = GetProfile("Replace", mstr); + } + else + { + retvalu = ""; + string[] pnumsplit = pnum.Split(new Char[] { '#' }); + int cnt = 0; + foreach (string s in pnumsplit) + { + if (!s.Equals(string.Empty)) + { + if ((cnt == 0) && (str.StartsWith(" "))) + { + string padding = new string(' ', s.Length); + retvalu += padding; + } + else + retvalu += s; + } + else + retvalu += str.Trim(); + cnt++; + } + // append trailing blanks or procedure number (str) + if (str.EndsWith(" ")) + { + // count number of trailing blanks and append them to retvalu + cnt = str.Length - 1; + while (cnt > 0 && str[cnt] == ' ') cnt--; + retvalu += new string(' ', str.Length - cnt - 1); + } + } + return retvalu; + } + + public string Evaluate(string str, int len) + { + string retval = null; + string swhir = "PSU"; /* order inwhich to check */ + string pn; + if (str.Length > 1 && str[1] == '-') + { + int swptr = swhir.IndexOf((str.ToUpper())[0]); + //char swchar = ''; + //if (swptr != -1) + // swchar = swhir[swptr]; + + string sav = str.Substring(len); + str = str.Substring(0, len); + string substr = str.Substring(2); + substr = substr.Replace(" ",""); + while (swptr >= 0 && swptr < swhir.Length && retval == null) //retval.Equals(string.Empty)) + { + switch (swhir[swptr]) + { + case 'U': + retval = GetProfile("Unit", substr, true); + break; + case 'S': + retval = GetProfile("Procedure_Set", substr, true); + break; + case 'P': + //TODO: THIS IS A GLOBAL IN THE 16 BIT CODE!!!! + string procnumber = ""; + pn = UnitSpecific(procnumber, 0); + retval = GetProfile(pn, substr, true); + break; + } + if (retval == null) // .Equals(string.Empty)) + swptr++; + } + str += sav; + } + else if (len == 1 && (str.ToUpper())[0] == 'U') + { + retval = GetProfile("Unit", "Number"); + } + else if (len == 2 && str.StartsWith("ID")) + { + retval = GetProfile("Unit", "ID"); + } + // if the return value is empty, then the resulting + // evaluation should repeat the token string including + // the braces. - the beginning brace is not passed in. + //if (retval.Equals(string.Empty)) + //{ + // retval = (char*)mallocq(len + 3); + // strncpy(retval, str - 1, len + 2); + //} + if (retval == null) + retval = string.Format("<{0}>", str.Substring(0, len)); + + return retval; + } + + + public string ProcessDocVersionSpecificInfo(string rawvalue) + { + string str = rawvalue; + string rtnstr = ""; + int l = rawvalue.Length; + while (l > 0) + { + int ptr = str.IndexOf('<'); //nextDelimiter("<", str, l); + int cptr = (ptr == -1) ? -1 : str.IndexOf('>'); //nextDelimiter(">", ptr, strlen(ptr)); + if (ptr == -1 || (ptr > -1 && cptr == -1)) + { + //add(new seText(str, l)); + //str += l; + rtnstr += str; + l = 0; // jump out of while loop + } + else + { + int cnt = ptr; + if (cnt > 0) + { + //add(new seText(str, cnt)); + rtnstr += str.Substring(0, cnt); + l -= cnt; + str = str.Substring(ptr); + } + ptr = str.IndexOf('>')+1; //nextDelimiter(">", str, l) + 1; + cnt = ptr; //(int)(ptr - str); + //add(new seUser(str + 1, cnt - 2)); + rtnstr += Evaluate(str.Substring(1, cnt - 2),cnt-2); + l -= cnt; + str = str.Substring(ptr); //ptr; + } + } + return rtnstr; + } + + #endregion ItemInfoList _Procedures = null; @@ -227,6 +418,7 @@ namespace VEPROMS.CSLA.Library { tmp.DocVersionConfigRefresh(); } + } #endregion }