Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions src/Runtime/XSharp.VFP/ArrayFunctions.prg
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ INTERNAL FUNCTION FoxALen(a as ARRAY) AS DWORD
RETURN XSharp.VFP.Functions.ALen( (__FoxArray) a, 0)

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/alen/*" />
[FoxProFunction("ALEN", FoxFunctionCategory.Array, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION ALen(a AS __FoxArray) AS DWORD
RETURN XSharp.VFP.Functions.ALen(a, 0)

Expand Down Expand Up @@ -47,6 +48,7 @@ FUNCTION __FoxALen(a AS __FoxArray) AS DWORD
RETURN XSharp.VFP.Functions.ALen(a, 0)

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/aelement/*" />
[FoxProFunction("AELEMENT", FoxFunctionCategory.Array, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION AElement(ArrayName AS __FoxArray, nRowSubscript AS DWORD) AS USUAL
IF ( nRowSubscript > 0 .AND. nRowSubscript <= ArrayName:Rows )
RETURN nRowSubscript
Expand Down Expand Up @@ -82,8 +84,8 @@ FUNCTION __FoxADel(foxArray AS __FoxArray, nElementNumber AS LONG, nDeleteType :
ENDIF
RETURN 1


/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/adel/*" />
[FoxProFunction("ADEL", FoxFunctionCategory.Array, FoxEngine.RuntimeCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION ADel(foxArray AS __FoxArray, nElementNumber AS LONG, nDeleteType := 2 AS LONG) AS DWORD
RETURN __FoxADel(foxArray, nElementNumber, nDeleteType)

Expand All @@ -99,6 +101,7 @@ FUNCTION ADel(ArrayName AS ARRAY, nElementNumber AS LONG, nDeleteType AS LONG) A


/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/asubscript/*" />
[FoxProFunction("ASUBSCRIPT", FoxFunctionCategory.Array, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION ASubScript(ArrayName AS __FoxArray, nElementNumber AS DWORD, nSubscript := 1 AS DWORD) AS DWORD
IF nSubscript == 0 .OR. nSubscript > 2
var cMessage := __VfpStr(VFPErrors.VFP_ATTRIBUTE_OUT_OF_RANGE, nameof(nSubscript))
Expand Down Expand Up @@ -165,19 +168,17 @@ FUNCTION __FoxAIns(foxArray AS __FoxArray, nElementNumber AS DWORD, nInsertType
RETURN 1

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/ains/*" />
[FoxProFunction("AINS", FoxFunctionCategory.Array, FoxEngine.RuntimeCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION AIns(ArrayName AS __FoxArray, nElementNumber AS DWORD, nInsertType := 1 AS DWORD) AS DWORD
RETURN __FoxAIns(ArrayName, nElementNumber, nInsertType)


INTERNAL FUNCTION FoxAIns(ArrayName AS ARRAY, nElementNumber AS DWORD, nInsertType AS DWORD) AS DWORD
IF ArrayName IS __FoxArray VAR foxArray
RETURN __FoxAIns(foxArray, nElementNumber, nInsertType)
ENDIF
XSharp.RT.Functions.AIns(ArrayName, nElementNumber)
RETURN 1



/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/ains/*" />
/// <remarks>The parameter to this function is a 'General Array'. The function decides at runtime if the array is a FoxPro array or a 'General' Array</remarks>
FUNCTION AIns(ArrayName AS ARRAY, nElementNumber AS DWORD, nInsertType AS DWORD) AS DWORD
Expand Down Expand Up @@ -243,6 +244,7 @@ RETURN
END FUNCTION

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/alines/*" />
[FoxProFunction("ALINES", FoxFunctionCategory.Array, FoxEngine.RuntimeCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION ALines (ArrayName AS ARRAY, cExpression AS STRING, nFlags := 0 AS INT, cParseChars PARAMS STRING[]) AS DWORD
IF cExpression == null
cExpression := ""
Expand Down Expand Up @@ -333,6 +335,7 @@ FUNCTION ALines (ArrayName AS ARRAY, cExpression AS STRING, nFlags := 0 AS INT,
END FUNCTION

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/amembers/*" />
[FoxProFunction("AMEMBERS", FoxFunctionCategory.Array, FoxEngine.LanguageCore, FoxFunctionStatus.Partial, FoxCriticality.High)];
FUNCTION AMembers (ArrayName AS ARRAY, oObjectOrClass AS USUAL, nArrayContentsID := 0 AS INT, cFlags := "" AS STRING) AS DWORD
LOCAL oType AS Type

Expand Down Expand Up @@ -429,6 +432,7 @@ FUNCTION AMembers (ArrayName AS ARRAY, oObjectOrClass AS USUAL, nArrayContentsID
END FUNCTION

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/agetfileversion/*" />
[FoxProFunction("AGETFILEVERSION", FoxFunctionCategory.Array, FoxEngine.RuntimeCore, FoxFunctionStatus.Partial, FoxCriticality.Medium)];
FUNCTION AGetFileVersion (ArrayName AS ARRAY, cFileName AS STRING) AS DWORD
IF String.IsNullOrEmpty(cFileName) .OR. !File.Exists(cFileName)
RETURN 0
Expand Down Expand Up @@ -470,6 +474,7 @@ FUNCTION AGetFileVersion (ArrayName AS ARRAY, cFileName AS STRING) AS DWORD
END FUNCTION

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/aused/*" />
[FoxProFunction("AUSED", FoxFunctionCategory.Array, FoxEngine.WorkArea, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION AUsed (ArrayName AS ARRAY, nDataSessionNumber := NIL AS USUAL, cTableName := NIL AS USUAL) AS DWORD

VAR oWA := RuntimeState.Workareas
Expand Down
27 changes: 12 additions & 15 deletions src/Runtime/XSharp.VFP/BitFunctions.prg
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,24 @@
#define TYPE_ERROR2 "Value must be LONG"

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitand/*" />
[FoxProFunction("BITAND", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION BitAnd (Arg1 AS USUAL, Arg2 PARAMS USUAL[]) AS USUAL
RETURN BitHelpers._BITANDORX(BitOperation.And, Arg1, Arg2)
END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitand/*" />
FUNCTION BitAnd (Arg1 AS INT, Arg2 PARAMS INT[]) AS INT
RETURN BitHelpers._BITANDORX(BitOperation.And, Arg1, Arg2)
END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitand/*" />
FUNCTION BitAnd(Arg1 AS BINARY, Arg2 PARAMS BINARY[]) AS BINARY
RETURN BitHelpers._BITANDORX(BitOperation.And, Arg1, Arg2)
END FUNC


/// <include file="VFPDocs.xml" path="Runtimefunctions/bitclear/*" />
[FoxProFunction("BITCLEAR", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION BitClear (Arg1 AS USUAL) AS BINARY
RETURN BitClear((BINARY)Arg1)
END FUNC
Expand All @@ -48,9 +52,7 @@ END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitclear/*" />
FUNCTION BitClear (Arg1 AS USUAL, Arg2 AS USUAL, Arg3 AS USUAL) AS BINARY

RETURN BitClear((BINARY)Arg1, (INT)Arg2, (INT)Arg3)

END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitclear/*" />
Expand Down Expand Up @@ -101,6 +103,7 @@ FUNCTION BitClear (BinString AS BINARY, StartBit AS INT, BitCount AS INT) AS BIN
END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitlshift/*" />
[FoxProFunction("BITLSHIFT", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Low)];
FUNCTION BitLShift (Arg AS INT, Bits AS INT) AS INT
IF BETWEEN(Bits, 0, 31)
RETURN Arg << Bits
Expand All @@ -109,14 +112,14 @@ FUNCTION BitLShift (Arg AS INT, Bits AS INT) AS INT
ENDIF

END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitlshift/*" />
FUNCTION BitLShift (Arg AS USUAL, Bits AS USUAL) AS INT
RETURN BitLShift((INT)Arg, (INT)Bits)
END FUNC



/// <include file="VFPDocs.xml" path="Runtimefunctions/bitnot/*" />
[FoxProFunction("BITNOT", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Low)];
FUNCTION BitNot (Arg1 AS USUAL) AS USUAL
IF IsBinary(Arg1)
RETURN BitNot((BINARY)Arg1)
Expand Down Expand Up @@ -160,6 +163,7 @@ END FUNC


/// <include file="VFPDocs.xml" path="Runtimefunctions/bitor/*" />
[FoxProFunction("BITOR", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION BitOr (Arg1 AS USUAL, Arg2 PARAMS USUAL[]) AS USUAL
RETURN BitHelpers._BITANDORX(BitOperation.Or, Arg1, Arg2)
END FUNC
Expand All @@ -174,11 +178,8 @@ FUNCTION BitOr (Arg1 AS BINARY, Arg2 PARAMS BINARY[]) AS BINARY
RETURN BitHelpers._BITANDORX(BitOperation.Or, Arg1, Arg2)
END FUNC





/// <include file="VFPDocs.xml" path="Runtimefunctions/bitrshift/*" />
[FoxProFunction("BITRSHIFT", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Low)];
FUNCTION BitRShift (Arg AS USUAL, Bits AS USUAL) AS INT
IF IsNumeric(Arg) .AND. IsNumeric(Bits)
RETURN BitRShift((INT)Arg, (INT)Bits)
Expand All @@ -190,7 +191,6 @@ FUNCTION BitRShift (Arg AS USUAL, Bits AS USUAL) AS INT

END FUNC


/// <include file="VFPDocs.xml" path="Runtimefunctions/bitrshift/*" />
INTERNAL FUNCTION BitRShift (Arg AS INT, Bits AS INT) AS INT
IF BETWEEN(Bits, 0, 31)
Expand All @@ -205,8 +205,8 @@ INTERNAL FUNCTION BitRShift (Arg AS INT, Bits AS INT) AS INT

END FUNC


/// <include file="VFPDocs.xml" path="Runtimefunctions/bitset/*" />
[FoxProFunction("BITSET", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION BitSet (Arg1 AS USUAL) AS BINARY
RETURN BitSet((BINARY)Arg1)
END FUNC
Expand Down Expand Up @@ -239,16 +239,12 @@ END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitset/*" />
FUNCTION BitSet (BinString AS BINARY) AS BINARY

RETURN IIF(BinString.Length == 0, 0h, BitSet(BinString, 0, BinString.Length * 8))

END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitset/*" />
FUNCTION BitSet (BinString AS BINARY, StartBit AS INT) AS BINARY

RETURN IIF(BinString.Length == 0, 0h, BitSet(BinString, StartBit, 1))

END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitset/*" />
Expand All @@ -272,10 +268,10 @@ FUNCTION BitSet (BinString AS BINARY, StartBit AS INT, BitCount AS INT) AS BINAR
NEXT

RETURN (BINARY)Result

END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bittest/*" />
[FoxProFunction("BITTEST", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION BitTest (Arg AS USUAL, Bit AS USUAL) AS LOGIC
IF IsBinary(Arg)
RETURN BitTest((BINARY)Arg, (INT)Bit)
Expand Down Expand Up @@ -317,6 +313,7 @@ FUNCTION BitXor (Arg1 AS USUAL, Arg2 PARAMS USUAL[]) AS USUAL
END FUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/bitxor/*" />
[FoxProFunction("BITXOR", FoxFunctionCategory.Bitwise, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION BitXor (Arg1 AS INT, Arg2 PARAMS INT[]) AS INT
RETURN BitHelpers._BITANDORX(BitOperation.Xor, Arg1, Arg2)
END FUNC
Expand Down
3 changes: 3 additions & 0 deletions src/Runtime/XSharp.VFP/ClassFunctions.prg
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
//

/// <include file="VFPRuntimeDocs.xml" path="Runtimefunctions/addproperty/*" />
[FoxProFunction("ADDPROPERTY", FoxFunctionCategory.ClassAndObject, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION AddProperty (oObjectName AS OBJECT, cPropertyName AS STRING, eNewValue := NIL AS USUAL) AS LOGIC
if (object) oObjectName is XSharp.IDynamicProperties2 var oDynamic
oDynamic:_AddProperty(cPropertyName, eNewValue,1,"")
Expand All @@ -15,6 +16,7 @@ FUNCTION AddProperty (oObjectName AS OBJECT, cPropertyName AS STRING, eNewValue


/// <include file="VFPRuntimeDocs.xml" path="Runtimefunctions/removeproperty/*" />
[FoxProFunction("REMOVEPROPERTY", FoxFunctionCategory.ClassAndObject, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
function RemoveProperty( oObjectName as object, cPropertyName as string) as logic
if (object) oObjectName is XSharp.IDynamicProperties2 var oDynamic
oDynamic:_RemoveProperty(cPropertyName)
Expand All @@ -25,6 +27,7 @@ function RemoveProperty( oObjectName as object, cPropertyName as string) as logi


/// <include file="VFPRuntimeDocs.xml" path="Runtimefunctions/getpem/*" />
[FoxProFunction("GETPEM", FoxFunctionCategory.ClassAndObject, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION GETPEM( uObject as USUAL, cProperty as STRING) as USUAL
if uObject is string var strObject
return NIL
Expand Down
31 changes: 12 additions & 19 deletions src/Runtime/XSharp.VFP/DateFunctions.prg
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,32 @@ USING System.Globalization
USING System.Collections.Generic

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/dtot/*" />
[FoxProFunction("DTOT", FoxFunctionCategory.DateAndTime, FoxEngine.RuntimeCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION DToT( dDateExpression AS DATE) AS DateTime
RETURN (System.DateTime) dDateExpression

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/hour/*" />
[FoxProFunction("HOUR", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION Hour( tExpression AS System.DateTime) AS LONG
RETURN tExpression:Hour

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/minute/*" />
[FoxProFunction("MINUTE", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION Minute(tExpression AS System.DateTime) AS LONG
RETURN tExpression:Minute

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/sec/*" />
[FoxProFunction("SEC", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION Sec( tExpression AS System.DateTime) AS LONG
RETURN tExpression:Second

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/ttod/*" />
[FoxProFunction("TTOD", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION TToD( tExpression AS System.DateTime) AS DATE
RETURN (DATE) tExpression

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/gomonth/*" />
[FoxProFunction("GOMONTH", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION GoMonth( dExpression AS DATE , iNumberOfMonths AS INT ) AS DATE
RETURN GoMonth ( (System.DateTime) dExpression , iNumberOfMonths )

Expand Down Expand Up @@ -75,6 +81,7 @@ FUNCTION GoMonth( uExpression AS USUAL , iNumberOfMonths AS INT ) AS DATE


/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/quarter/*" />
[FoxProFunction("QUARTER", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION Quarter( uExpression AS USUAL , nMonth := 1 AS INT ) AS INT
IF IsDate(uExpression)
RETURN Quarter ( (DATE) uExpression , nMonth )
Expand Down Expand Up @@ -104,6 +111,7 @@ FUNCTION Quarter( tExpression AS System.DateTime , nMonth := 1 AS INT ) AS INT
RETURN (INT) System.Math.Ceiling((DECIMAL)dtOffset:Month / 3)

/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/week/*" />
[FoxProFunction("WEEK", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION Week( uExpression AS USUAL, nFirstWeek := 1 AS LONG, nFirstDayOfWeek := 1 AS LONG) AS LONG
IF IsDate(uExpression)
RETURN Week ( (Date) uExpression , nFirstWeek, nFirstDayOfWeek )
Expand Down Expand Up @@ -148,6 +156,7 @@ FUNCTION Week( tExpression AS System.DateTime, nFirstWeek := 1 AS LONG, nFirstDa


/// <include file="VfpRuntimeDocs.xml" path="Runtimefunctions/mdy/*" />
[FoxProFunction("MDY", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.Medium)];
FUNCTION MDY ( uExpression AS USUAL ) AS STRING
IF IsDate(uExpression)
RETURN MDY( (DATE) uExpression )
Expand Down Expand Up @@ -194,7 +203,9 @@ FUNCTION DMY ( dExpression AS DATE ) AS STRING

RETURN PadL(Day(dExpression), 2 , "0" ) + " " + CMonth(dExpression) + " " + ;
IIF ( SetCentury() , dExpression:ToString("yyyy") , dExpression:ToString("yy") )

/// <include file="VFPDocs.xml" path="Runtimefunctions/ctot/*" />
[FoxProFunction("CTOT", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION CToT(cCharacterExpression AS STRING) AS System.DateTime
IF String.IsNullOrEmpty(cCharacterExpression)
RETURN DateTime.MinValue
Expand All @@ -215,6 +226,7 @@ FUNCTION CToT(cCharacterExpression AS STRING) AS System.DateTime
ENDFUNC

/// <include file="VFPDocs.xml" path="Runtimefunctions/ttoc/*" />
[FoxProFunction("TTOC", FoxFunctionCategory.DateAndTime, FoxEngine.LanguageCore, FoxFunctionStatus.Full, FoxCriticality.High)];
FUNCTION TToC(tdExpression AS System.DateTime, nParam := 0 AS LONG) AS STRING
LOCAL lcResult AS STRING
LOCAL culture := CultureInfo.InvariantCulture AS CultureInfo
Expand Down Expand Up @@ -383,23 +395,6 @@ INTERNAL STATIC CLASS DateTimeHelper
RETURN aFormats:ToArray()
END METHOD

// STATIC METHOD GetDateSeparatorForFormat(tcDateFormat AS STRING) AS STRING
// SWITCH tcDateFormat:ToUpper()
//ANSI, GERMAN
// CASE "YY.MM.DD"
// CASE "YYYY.MM.DD"
// CASE "DD.MM.YY"
// CASE "DD.MM.YYYY"
// RETURN "."
//ITALIAN
// CASE "DD-MM-YY"
// CASE "DD-MM-YYYY"
// RETURN "-"
// OTHERWISE
// RETURN "/"
// END SWITCH
// END METHOD

STATIC METHOD GetDateFormatsForParsing(tcDateFormat AS STRING, tcSeparator AS STRING, tlCentury AS LOGIC) AS STRING[]
LOCAL aFormats := List<STRING>{} AS List<STRING>

Expand Down Expand Up @@ -517,7 +512,6 @@ INTERNAL STATIC CLASS DateTimeHelper
ENDIF
ENDIF

// return i"{lcDatePart} {lcTimePart}"
RETURN lcDatePart + " " + lcTimePart
END METHOD

Expand Down Expand Up @@ -549,7 +543,6 @@ INTERNAL STATIC CLASS DateTimeHelper
LOCAL lcDatePart := GetEmptyDatePart(lcDateFormat, lCentury) AS STRING
LOCAL lcTimePart := GetEmptyTimePart(lHours, lSeconds) AS STRING

// return i"{lcDatePart} {lcTimePart}"
RETURN lcDatePart + " " + lcTimePart
END METHOD

Expand Down
Loading