'
' Print Unicode value to screen using UTF8 - See also http://www.unicode.org/charts/
'
' Install correct TTF font to make sure the UCS2 characters are printed correctly.
'
' For example the Junicode font: http://junicode.sourceforge.net/
'
' March 2011, PvE - GPL
'
'-----------------------------------------------------------------------

FUNCTION UCS2UTF8$(STRING number$)

        LOCAL nr, byte1, byte2, byte3, utf1, utf2, utf3, utf4
        LOCAL result$

        nr = DEC(number$)

        IF nr <= DEC("7f") THEN
                byte1 = nr & 255
                result$ = CHR$(byte1)
        ELIF nr > DEC("7f") AND nr <= DEC("07ff") THEN
                byte1 = nr & 255
                byte2 = (nr & 65280) >> 8
                utf1 = ((byte1 & 63) + 128)
                utf2 = ((byte1 & 192) >> 6) + ((byte2 & 7) << 2) + 192
                result$ = CONCAT$(CHR$(utf2), CHR$(utf1))
        ELIF nr > DEC("07ff") AND nr <= DEC("ffff") THEN
                byte1 = nr & 255
                byte2 = (nr & 65280) >> 8
                utf1 = ((nr & 63) + 128)
                utf2 = ((byte1 & 192) >> 6) + ((byte2 & 15) << 2) + 128
                utf3 = ((byte2 & 240) >> 4) + 224
                result$ = CONCAT$(CHR$(utf3), CHR$(utf2), CHR$(utf1))
        ELIF nr > DEC("ffff") AND nr <= DEC("10ffff") THEN
                byte1 = nr & 255
                byte2 = (nr & 65280) >> 8
                byte3 = (nr & 16711680) >> 16
                utf1 = ((nr & 63) + 128)
                utf2 = ((byte1 & 192) >> 6) + ((byte2 & 15) << 2) + 128
                utf3 = ((byte2 & 240) >> 4)  + ((byte3 & 3) << 4) + 128
                utf4 = ((byte3 & 28) >> 2) + 240
                result$ = CONCAT$(CHR$(utf4), CHR$(utf3), CHR$(utf2), CHR$(utf1))
        ELSE
                PRINT "Value out of range."
                END
        END IF

        RETURN result$

END FUNCTION

' Print the EURO sign
PRINT UCS2UTF8$("20ac")

' Greek
PRINT UCS2UTF8$("03b2"), " ", UCS2UTF8$("03b4"), " ", UCS2UTF8$("03b8")