12-17-2024, 06:37 PM
Updating to v4.0 broke my code so I had to edit it to match the new file structure of the headers and to take into account a difference in tcslen in this compiler version versus the old one. tcslen is reporting as 1 character shorter than the old version. But I've remedied that. For now.
Code: (Select All)
ReDim As String myArray(0) tokenize "This;is;an;example;string", ";", myArray() Dim As Integer x For x = LBound(myArray) To UBound(myArray) Print myArray(x) Next Sub tokenize (toTokenize As String, delimiters As String, StorageArray() As String) Declare CustomType Library Function strtok%& (ByVal str As _Offset, delimiters As String) End Declare Dim As _Offset tokenized Dim As String tokCopy: tokCopy = toTokenize + Chr$(0) Dim As String delCopy: delCopy = delimiters + Chr$(0) Dim As _Unsigned Long lowerbound: lowerbound = LBound(StorageArray) Dim As _Unsigned Long i: i = lowerbound tokenized = strtok(_Offset(tokCopy), delCopy) While tokenized <> 0 ReDim _Preserve StorageArray(lowerbound To UBound(StorageArray) + 1) StorageArray(i) = PointerToString(tokenized) tokenized = strtok(0, delCopy) i = i + 1 Wend ReDim _Preserve StorageArray(UBound(StorageArray) - 1) End Sub $If PTRTOSTR = UNDEFINED Then $Let PTRTROSTR = DEFINED Function PointerToWideString$ (pointer As _Offset) $If WCSLEN = UNDEFINED Then $Let WCSLEN = DEFINED Declare CustomType Library Function wcslen%& (ByVal str As _Offset) End Declare $End If Declare CustomType Library Sub StringCchCopyW (ByVal pszDest As _Offset, ByVal cchDest As _Offset, ByVal pszSrc As _Offset) End Declare Dim As _Offset length: length = wcslen(pointer) * 2 'The length does not account for the 2-byte nature of Unicode so we multiply by 2 Dim As String __dest: __dest = Space$(length) StringCchCopyW _Offset(__dest), Len(__dest), pointer PointerToWideString = __dest End Function Function PointerToString$ (pointer As _Offset) Declare CustomType Library ".\internal\c\c_compiler\include\tchar" Function tcslen%& Alias "_tcslen" (ByVal str As _Offset) End Declare Declare Library ".\internal\c\c_compiler\include\strsafe" End Declare Declare CustomType Library Sub StringCchCopyA (ByVal pszDest As _Offset, ByVal cchDest As _Offset, ByVal pszSrc As _Offset) End Declare Dim As _Offset length: length = tcslen(pointer) + 1 Dim As String __dest: __dest = Space$(length) StringCchCopyA _Offset(__dest), Len(__dest), pointer PointerToString = __dest End Function $End If
Tread on those who tread on you