Так как все сравнения по умолчанию регистронезависимые можно не делать strLwr:
X++:
letter = strlwr(substr(value,i,1));
Чтобы сделать регистр, как мне кажется, достаточно добавить в конец что-то типа
X++:
str makeTheSameCase(str _letterToCompare, str _letterToConvert)
{
return (strCmp(_letterToCompare, strUpr(_letterToCompare))==0)
? str2Capital( letterToConvert) : letterToConvert
}
...
ret += n>0 ? makeTheSameCase(letter, conpeek(lat,n)) : letter;