FUNC VarStr (xVal, lString, cPic)
LOCAL i, xType, cTmp
DEFAULT lString TO FALSE
xType := ValType(xVal)
DO CASE
CASE xType == "N"
IF cPic == NIL
cTmp := Str(xVal)
ELSE
cTmp := Transform (xVal, cPic)
END IF
CASE xType == "C" .AND. ! ('"' $ xVal)
IF lString
cTmp := xVal
ELSE
cTmp := '"' + xVal + '"'
END IF
CASE xType == "C" .AND. ! ("'" $ xVal)
IF lString
cTmp := xVal
ELSE
cTmp := "'" + xVal + "'"
END IF
CASE xType == "C"
IF lString
cTmp := xVal
ELSE
cTmp := '[' + xVal + ']'
END IF
CASE xType == "D"
IF lString
cTmp := DtoC(xVal)
ELSE
cTmp := "CtoD([" + DtoC(xVal) + "])"
END IF
CASE xType == "L"
cTmp := IIF (xVal, ".T.", ".F.")
CASE xType == "A"
cTmp := "{"
FOR i := 1 TO Len(xVal)
c := xVal[i]
cTmp += VarStr(xVal[i]) + IIF (i <> Len(xVal), ",", "")
NEXT
cTmp += "}"
OTHERWISE
cTmp := ""
END CASE
RETURN AllTrim(cTmp)