
Code: Select all
Procedure PeekStringFormat(*MemoryBuffer)
If PeekW(*MemoryBuffer) = -17425 And PeekB(*MemoryBuffer + SizeOf(Word)) = -65
Result = #PB_UTF8
ElseIf PeekW(*MemoryBuffer) = -257
Result = #PB_Unicode
Else
Result = #PB_Ascii
EndIf
ProcedureReturn Result
EndProcedure
Procedure PokeStringFormat(*MemoryBuffer, Format)
Select Format
Case #PB_UTF8
PokeW(*MemoryBuffer, -17425)
PokeB(*MemoryBuffer + SizeOf(Word), -65)
Case #PB_Unicode
PokeW(*MemoryBuffer, -257)
EndSelect
EndProcedure
Procedure BOMSize(Format=-1)
If Format = -1
Select SizeOf(Character)
Case 1
Format = #PB_Ascii
Case 2
Format = #PB_UTF8
EndSelect
EndIf
Select Format
Case #PB_Ascii
Result = 0
Case #PB_Unicode
Result = 2
Case #PB_UTF8
Result = 3
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(0, 0, 0, 300, 200, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
StringGadget(0, 5, 5, 200, 20, "")
StringGadget(1, 5, 30, 200, 20, "")
StringGadget(2, 5, 55, 200, 20, "")
Format = PeekStringFormat(?UTF8)
Offset = BOMSize(Format)
SetGadgetText(0, PeekS(?UTF8 + Offset, -1, Format))
Format = PeekStringFormat(?UTF16LE)
Offset = BOMSize(Format)
SetGadgetText(1, PeekS(?UTF16LE + Offset, -1, Format))
Format = PeekStringFormat(?ASCII)
Offset = BOMSize(Format)
SetGadgetText(2, PeekS(?ASCII + Offset, -1, Format))
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
EndIf : End
;zero terminated strings in different formats including bom
DataSection
UTF8:;#PB_UTF8
Data.b $EF,$BB,$BF,$55,$54,$46,$38,$00
UTF16LE:;#PB_Unicode
Data.b $FF,$FE,$55,$00,$54,$00,$46,$00,$31,$00,$36,$00,$4C,$00,$45,$00,$00,$00
ASCII:;#PB_Ascii
Data.b $41,$53,$43,$49,$49,$00
EndDataSection
nco2k