Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
need help printing a scaled string in a custom font to a 32-bit image
#1
I wanted a function to simply do a _PrintString to a 32-bit screen in a given fg/bg color, but allow the text to be scaled to 2x, 3x, etc., and work with a custom font. Kind of like a simpler RotoZoom, as it doesn't need to rotate and the x,y is the top left corner of the text and not the center. It started out as a modified RotoZoom2/DrawStrng but it used an older(?) PrintWidth function that wasn't compiling so I replaced it with _UPrintWidth. 

Anyway, this should be a simple thing to do, but nothing is appearing on the screen. 
The font is a custom fixed-width bitmap font (8x8 pixels per character) and is already set up and working before this sub is called. The screen is a 32-bit image 1024x768, already created and set to _DEST displaying text. The display is set to _AutoDisplay. 
I have tried debugging it and all the values appear to be what I expect. 
If anyone has a minute and could take a look & let me know what might be wrong here it would be most appreciated.

Code: (Select All)
'Prints string MyString stretched to xScale%, yScale%
'in the current _FONT
'to 32-bit screen at ColNum%,RowNum%
'where the width  of 1 column is _FontWidth  * xScale%
'      and height of 1 row    is _FontHeight * yScale%
'with foreground color fg~& and background color bg~&

Sub DrawString (MyString As String, fg~&, bg~&, ColNum%, RowNum%, xScale%, yScale%)
    Dim SavedSource&
    Dim SavedDest&
    Dim MyImage&
    Dim FontHandle&
    Dim x1&, y1&, x2&, y2&, w1&, h1&
    
    ' remember the source / destination
    SavedSource& = _Source
    SavedDest& = _Dest
    
    ' get the font
    FontHandle& = _Font
    
    MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&), _FontHeight(FontHandle&), 32)
    _Dest MyImage&
    
    _Font FontHandle&
    Color fg, bg
    _UPRINTSTRING  (0     , 0  ), MyString        ,            ,               , FontHandle&  , MyImage&
    
    w1& = _Width(MyImage&) * xScale%
    h1& = _Height(MyImage&) * yScale%
    x1& = ColNum% * w1&
    y1& = RowNum% * h1&
    x2& = x1& + w1&
    y2& = y1& + h1&
    
    _PutImage (x1&, y1&)-(x2&, y2&), MyImage&, 0
    
    ' Restore the source/destination
    _Source SavedSource&
    _Dest SavedDest&
    
    ' Cleanup
    _FreeImage MyImage&
End Sub ' DrawString
Reply
#2
(07-02-2025, 06:28 PM)madscijr Wrote: This should be a simple thing to do, but nothing is appearing on the screen. 
I have tried debugging it and all the values appear to be what I expect. 
If anyone has a minute and could you please let me know what might be wrong here? 

Code: (Select All)
'Prints string MyString stretched to xScale%, yScale%
'in the current _FONT
'to 32-bit screen at ColNum%,RowNum%
'where the width  of 1 column is _FontWidth  * xScale%
'      and height of 1 row    is _FontHeight * yScale%
'with foreground color fg~& and background color bg~&

Sub DrawString (MyString As String, fg~&, bg~&, ColNum%, RowNum%, xScale%, yScale%)
    Dim SavedSource&
    Dim SavedDest&
    Dim MyImage&
    Dim FontHandle&
    Dim x1&, y1&, x2&, y2&, w1&, h1&
    
    ' remember the source / destination
    SavedSource& = _Source
    SavedDest& = _Dest
    
    ' get the font
    FontHandle& = _Font
    
    MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&), _FontHeight(FontHandle&), 32)
    _Dest MyImage&
    
    _Font FontHandle&
    Color fg, bg
    _UPRINTSTRING  (0     , 0  ), MyString        ,            ,               , FontHandle&  , MyImage&
    
    w1& = _Width(MyImage&) * xScale%
    h1& = _Height(MyImage&) * yScale%
    x1& = ColNum% * w1&
    y1& = RowNum% * h1&
    x2& = x1& + w1&
    y2& = y1& + h1&
    
    _PutImage (x1&, y1&)-(x2&, y2&), MyImage&, 0
    
    ' Restore the source/destination
    _Source SavedSource&
    _Dest SavedDest&
    
    ' Cleanup
    _FreeImage MyImage&
End Sub ' DrawString

Aren't you putting MyImage to MyImage instead of MyImage to screen because you set the _Dest as MyImage?
Reply
#3
Thanks for your reply. That would make sense, however the last parameter in the _PutImage command that copies MyImage to the screen (above the line "Restore the source/destination") is destination and is 0, so I expect it to copy MyImage to the screen...?
Reply
#4
(07-02-2025, 07:08 PM)madscijr Wrote: Thanks for your reply. That would make sense, however the last parameter in the _PutImage command that copies MyImage to the screen (above the line "Restore the source/destination") is destination and is 0, so I expect it to copy MyImage to the screen...?

True, my bad.

However, as we can't see your main code are you turning off automatic screen update via _DISPLAY?
Reply
#5
It's a case of missing OPTION EXPLICIT and *math*.   Tongue

Code: (Select All)
'Prints string MyString stretched to xScale%, yScale%
'in the current _FONT
'to 32-bit screen at ColNum%,RowNum%
'where the width  of 1 column is _FontWidth  * xScale%
'      and height of 1 row    is _FontHeight * yScale%
'with foreground color fg~& and background color bg~&

Screen _NewImage(1280, 720, 32)
$Color:32
DrawString "Hello World", Red, Blue, 10, 10, 2, 2



Sub DrawString (MyString As String, fg~&, bg~&, ColNum%, RowNum%, xScale%, yScale%)
    Dim SavedSource&
    Dim SavedDest&
    Dim MyImage&
    Dim FontHandle&
    Dim x1&, y1&, x2&, y2&, w1&, h1&

    ' remember the source / destination
    SavedSource& = _Source
    SavedDest& = _Dest

    ' get the font
    FontHandle& = _Font

    MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&), _UFontHeight(FontHandle&), 32)
    _Dest MyImage&

    _Font FontHandle&
    Color fg~&, bg~& 'YOU NEED TO REFERENCE THE PROPER VARIABLE NAMES HERE.  SUFFIX!!!
    _UPrintString (0, 0), MyString, , , FontHandle&, MyImage&

    w1& = _Width(MyImage&) * xScale%
    h1& = _Height(MyImage&) * yScale%
    x1& = ColNum% * _FontWidth 'POSITION RELATIVE TO FONT SIZE
    y1& = RowNum% * _UFontHeight      'MAYBE WANT FONTHEIGHT HERE FOR POSITIONING?  IF SO, THEN PRINTSTING ABOVE
    x2& = x1& + w1&
    y2& = y1& + h1&

    _PutImage (x1&, y1&)-(x2&, y2&), MyImage&, SaveDest&

    ' Restore the source/destination
    _Source SavedSource&
    _Dest SavedDest&

    ' Cleanup

    _FreeImage MyImage&
End Sub ' DrawString

fg and bg are *undefined variables*, so you're setting a color of Transparent Black, Transparent Black...   That's going to kill everything to start with.  Tongue

Then the position of where you're trying to place the text is off, as you're trying to put it on pixel coordinates instead of text coordinates.
Reply
#6
I got it working (full code below).

Steve, why do you use _UFontHeight instead of _FontHeight? _FontHeight is working for me, just curious why the different function? 

Your version (see Sub DrawString2) prints the characters on top of each other. 
I tried taking my function and merging it with yours (see Sub DrawString3) but for some reason everything is gray? 
Anyway, my function is working (see Sub DrawString).

PS Thanks everyone for your replies!

Here is the full program so you can see DrawString in context... 

Code: (Select All)
Option _Explicit

' BASIC PROGRAM METADATA
Dim Shared m_ProgramPath$: m_ProgramPath$ = Left$(Command$(0), _InStrRev(Command$(0), "\"))
Dim Shared m_ProgramName$: m_ProgramName$ = Mid$(Command$(0), _InStrRev(Command$(0), "\") + 1)

' GLOBAL VARIABLES
Dim Shared m_iScreenWidth As Long: m_iScreenWidth = 640 ' _DesktopWidth
Dim Shared m_iScreenHeight As Long: m_iScreenHeight = 480 ' _DesktopHeight
ReDim Shared FgColorArray(-1) As _Unsigned Long
ReDim Shared BgColorArray(-1) As _Unsigned Long

' INITIALIZE
AddBgColors BgColorArray() ' INIT GRAYSCALE COLOR ARRAY
AddFgColors FgColorArray() ' INIT SPECTRUM COLOR ARRAY

' TEST FONT
Dim sError As String: sError = ""
Dim FontFilename$: FontFilename$ = "myfont.bdf"
Dim FontHandle&
Dim style$
Dim iFontHeight%: iFontHeight% = 8
Dim iLoop As Integer
Dim iMaxRow As Integer
Dim iMaxCol As Integer
Dim iRow As Integer
Dim iCol As Integer
Dim fgColor As _Unsigned Long
Dim bgColor As _Unsigned Long
Dim iColorFG As Integer
Dim iColorBG As Integer
Dim x1%, y1%
Dim MyColor~&
Dim MyChar%
Dim iScale As Integer
Dim LastY As Integer

'' IF FONT FILE NOT FOUND, CREATE IT
'If Len(sError) = 0 Then
'    If _FileExists(m_ProgramPath$ + FontFilename$) = _FALSE Then
'        'sError = "File not found: " + Chr$(34) + FontFilename$ + Chr$(34)
'        sError = CreateBDF$(m_ProgramPath$ + FontFilename$)
'    End If
'End If

' (RE)CREATE FONT FILE
If Len(sError) = 0 Then
    sError = CreateBDF$(m_ProgramPath$ + FontFilename$)
End If

' SET FONT
If Len(sError) = 0 Then
    style$ = "monospace" ' font style is not case sensitive
    FontHandle& = _LoadFont(m_ProgramPath$ + FontFilename$, iFontHeight%, style$)
    If FontHandle& = 0 Then
        sError = "FontHandle& = " + _Trim$(Str$(FontHandle&))
    End If
End If

' DISPLAY FONT
If Len(sError) = 0 Then
    ' INIT SCREEN
    Screen _NewImage(m_iScreenWidth, m_iScreenHeight, 32)
    _ScreenMove 0, 0

    ' SELECT FONT
    _Font FontHandle&

    ' MAP ASC(255)
    _MapUnicode 255 To 255

    ' FONT LOADED
    Color cCyan, cBlack
    Print "Font " + Chr$(34) + FontFilename$ + Chr$(34) + " loaded."
    Print

    ' ENTER FULLSCREEN MODE <- DOESN'T WORK ???
    '_FullScreen _SquarePixels
    '_FullScreen _Stretch

    ' PRINT CHARACTERS IN OUR CUSTOM FONT
    iScale = 1
    iMaxRow = (_Height / (_FontHeight * iScale)) - 3 ' CALCULATE MAXIMUM ROW
    iMaxCol = (_Width / (_FontWidth * iScale)) - 2 ' CALCULATE MAXIMUM COLUMN
    iRow = 3
    iCol = 0
    iColorFG = LBound(FgColorArray)
    bgColor = cBlack
    For MyChar% = 128 To 159
        fgColor = FgColorArray(iColorFG)
        Color fgColor, bgColor
        Print Chr$(MyChar%);
        iCol = iCol + 1
        If iCol > iMaxCol Then iCol = 1: iRow = iRow + 1 ' WRAP AROUND
        iColorFG = iColorFG + 1
        If iColorFG > UBound(FgColorArray) Then iColorFG = LBound(FgColorArray)
    Next MyChar%
    LastY = (_FontHeight * iScale) * iRow ' GET PIXEL POSITION OF LAST ROW

    ' DISPLAY TEXT SCALED 1x, 2x, 4x, 8x
    bgColor = cEmpty
    iScale = 1
    Do
        iMaxRow = (_Height / (_FontHeight * iScale)) - 3 ' CALCULATE MAXIMUM ROW
        iMaxCol = (_Width / (_FontWidth * iScale)) - 2 ' CALCULATE MAXIMUM COLUMN
        iRow = (LastY / (_FontHeight * iScale)) + 1 ' FIGURE OUT WHAT ROW WE'RE AT
        iCol = 0 ' START AT FIRST COLUMN
        iColorFG = LBound(FgColorArray) ' RESET TO FIRST COLOR IN FG COLOR ARRAY
        For MyChar% = 128 To 159
            fgColor = FgColorArray(iColorFG)
            Color fgColor, bgColor

            'Sub DrawString (MyString As String, fg~&, bg~&, xPos&, yPos&, xScale%, yScale%)
            DrawString Chr$(MyChar%), fgColor, bgColor, iCol, iRow, iScale, iScale

            iCol = iCol + 1
            If iCol > iMaxCol Then iCol = 1: Exit For ' iRow = iRow + 1
            iColorFG = iColorFG + 1
            If iColorFG > UBound(FgColorArray) Then iColorFG = LBound(FgColorArray)
        Next MyChar%
        LastY = (_FontHeight * iScale) * iRow ' GET PIXEL POSITION OF LAST ROW

        iScale = iScale * 2
        If iScale > 16 Then Exit Do
    Loop

    ' WAIT FOR USER
    _AutoDisplay
    iRow = (_Height / _FontHeight) - 1 ' FIGURE OUT WHAT ROW WE'RE AT
    Locate iRow, 1
    Color cCyan, cBlack
    Print "PRESS ANY KEY TO CONTINUE";
    Sleep
    _KeyClear: '_DELAY 1 ' clear keyboard buffer

    ' GO BACK TO DEFAULT FONT AND ERASE FONT HANDLE
    _Font 16
    If FontHandle& > 0 Then _FreeFont FontHandle&

    '' EXIT FULLSCREEN MODE
    '_FullScreen _Off
End If

' SHOW ERRORS
If Len(sError) <> 0 Then
    Print sError
End If

' FINISH
Print m_ProgramName$ + " finished."
End

' /////////////////////////////////////////////////////////////////////////////
' Does a _PrintString to a 32-bit screen in a given fg/bg color,
' and allows the text to be scaled to 2x, 3x, etc.,
' and works with a custom font.
' The font should already be set before this is called,
' and the screen should be a 32-bit image and set to _DEST.

' ColNum%, RowNum% are 0-based

Sub DrawString (MyString As String, fg~&, bg~&, ColNum%, RowNum%, xScale%, yScale%)
    Dim SavedSource&
    Dim SavedDest&
    Dim MyImage&
    Dim FontHandle&
    Dim x1&, y1&, x2&, y2&, w1&, h1&

    ' remember the source / destination
    SavedSource& = _Source
    SavedDest& = _Dest

    ' get the font
    FontHandle& = _Font

    ' create a temp image to print 1x text to
    'pixelWidth& = _UPRINTWIDTH(text$[, utfEncoding&][, fontHandle&])
    'MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&) * xScale%, _FontHeight(FontHandle&) * yScale%, 32)
    MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&), _FontHeight(FontHandle&), 32)
   
    ' SET DESTINATION
    _Dest MyImage&
   
    ' MAKE SURE THE FONT IS SELECTED?
    _Font FontHandle&
   
    ' SET THE COLOR
    Color fg~&, bg~&
   
    ' PRINT 1x TEXT TO TEMP IMAGE
    '_UPRINTSTRING (column, row), textExpression$[, maxWidth&][, utfEncoding&][, fontHandle&][, imageHandle&]
    _UPrintString (0, 0), MyString, , , FontHandle&, MyImage&

    ' GET SCALED HEIGHT/WIDTH/COORDINATES
    w1& = _Width(MyImage&) * xScale%
    h1& = _Height(MyImage&) * yScale%
    x1& = ColNum% * w1&
    y1& = RowNum% * h1&
    x2& = x1& + w1&
    y2& = y1& + h1&

    ' _PUTIMAGE ALREADY HAS 0 FOR destHandle&, BUT SET _DEST TO 0 JUST IN CASE
    _Dest SavedDest&
   
    '_PUTIMAGE [STEP] [(dx1, dy1)-[STEP][(dx2, dy2)]][, sourceHandle&][, destHandle&][, ][STEP][(sx1, sy1)[-STEP][(sx2, sy2)]][, _SMOOTH]
    _PutImage (x1&, y1&)-(x2&, y2&), MyImage&, 0
   
    ' Restore the source/destination
    _Source SavedSource&
    _Dest SavedDest&

    ' Cleanup
    _FreeImage MyImage&
End Sub ' DrawString

' /////////////////////////////////////////////////////////////////////////////
' Sort of works but doesn't print in color?

Sub DrawString3 (MyString As String, fg~&, bg~&, ColNum%, RowNum%, xScale%, yScale%)
    Dim SavedSource&
    Dim SavedDest&
    Dim MyImage&
    Dim FontHandle&
    Dim x1&, y1&, x2&, y2&, w1&, h1&

    ' REMEMBER THE SOURCE / DESTINATION
    SavedSource& = _Source
    SavedDest& = _Dest

    ' GET THE FONT
    FontHandle& = _Font

    ' CREATE TEMP IMAGE
    'MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&) * xScale%, _FontHeight(FontHandle&) * yScale%, 32)
    MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&), _FontHeight(FontHandle&), 32)

    'BPlus version:
    'MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&), _UFontHeight(FontHandle&), 32)

    ' MAKE SURE THE FONT IS SELECTED?
    _Font FontHandle&

    ' SET THE COLOR
    Color fg~&, bg~&

    ' PRINT 1x TEXT TO TEMP IMAGE
    '_Dest MyImage&
    _UPrintString (0, 0), MyString, , , FontHandle&, MyImage&

    ' GET SCALED HEIGHT/WIDTH/COORDINATES
    w1& = _Width(MyImage&) * xScale%
    h1& = _Height(MyImage&) * yScale%
    x1& = ColNum% * w1&
    y1& = RowNum% * h1&
    x2& = x1& + w1&
    y2& = y1& + h1&

    ' COPY SCALED IMAGE TO DESTINATION
    '_PUTIMAGE [STEP] [(dx1, dy1)-[STEP][(dx2, dy2)]][, sourceHandle&][, destHandle&][, ][STEP][(sx1, sy1)[-STEP][(sx2, sy2)]][, _SMOOTH]
    _PutImage (x1&, y1&)-(x2&, y2&), MyImage&, SavedDest&

    ' RESTORE THE SOURCE/DESTINATION
    _Source SavedSource&
    _Dest SavedDest&

    ' CLEANUP
    _FreeImage MyImage&
End Sub ' DrawString3

' /////////////////////////////////////////////////////////////////////////////
' Prints in color but places characters on top of each other

Sub DrawString2 (MyString As String, fg~&, bg~&, ColNum%, RowNum%, xScale%, yScale%)
    Dim SavedSource&
    Dim SavedDest&
    Dim MyImage&
    Dim FontHandle&
    Dim x1&, y1&, x2&, y2&, w1&, h1&

    ' remember the source / destination
    SavedSource& = _Source
    SavedDest& = _Dest

    ' get the font
    FontHandle& = _Font

    MyImage& = _NewImage(_UPrintWidth(MyString, , FontHandle&), _UFontHeight(FontHandle&), 32)
    _Dest MyImage&

    _Font FontHandle&
    Color fg~&, bg~& 'YOU NEED TO REFERENCE THE PROPER VARIABLE NAMES HERE.  SUFFIX!!!
    _UPrintString (0, 0), MyString, , , FontHandle&, MyImage&

    w1& = _Width(MyImage&) * xScale%
    h1& = _Height(MyImage&) * yScale%
    x1& = ColNum% * _FontWidth 'POSITION RELATIVE TO FONT SIZE
    y1& = RowNum% * _UFontHeight ' MAYBE WANT FONTHEIGHT HERE FOR POSITIONING?  IF SO, THEN PRINTSTING ABOVE
    x2& = x1& + w1&
    y2& = y1& + h1&

    _PutImage (x1&, y1&)-(x2&, y2&), MyImage&, SavedDest&

    ' Restore the source/destination
    _Source SavedSource&
    _Dest SavedDest&

    ' Cleanup

    _FreeImage MyImage&
End Sub ' DrawString2



' ################################################################################################################################################################
' BEGIN BDF FONT ROUTINES #BDF
' ################################################################################################################################################################

' /////////////////////////////////////////////////////////////////////////////

' Glyph Bitmap Distribution Format - Wikipedia
' https://en.wikipedia.org/wiki/Glyph_Bitmap_Distribution_Format

' The Glyph Bitmap Distribution Format (BDF) by Adobe is a file format for
' storing bitmap fonts. The content takes the form of a text file intended to be
' human- and computer-readable. BDF is typically used in Unix X Window
' environments. It has largely been replaced by the PCF font format which is
' somewhat more efficient, and by scalable fonts such as OpenType and TrueType
' fonts.
'
' Filename extension : .bdf
' Internet media type: application/x-font-bdf[1]
' Developed by       : Adobe Inc.
' Initial release    : 1987; 38 years ago
' Latest release     : 2.2; 22 March 1993; 31 years ago
' Type of format     : Bitmap font format
' Open format?       : yes
' Website            : Adobe Glyph Bitmap Distribution Format (BDF) Specification, version 2.2
'                      https://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5005.BDF_Spec.pdf

' Overview
' In 1988, the X Consortium adopted BDF 2.1 as a standard for X Window screen
' fonts,[2] but X Windows has largely moved to other font standards such as PCF,
' Opentype, and Truetype.
'
' Version 2.2 added support for non-Western writing. For example, glyphs in a BDF
' 2.2 font definition can specify rendering from top-to-bottom rather than simply
' left-to-right.
'
' A BDF font file contains three sections:
' 1. a global section that applies to all glyphs in a font;
' 2. a section with a separate entry for each glyph; and
' 3. the ENDFONT statement.
'
' Example
' This is an example font containing one glyph, for ASCII capital “A”. This glyph
' is taken from the GNU Unifont.

' ----------------------------------------------------------------------------------------------------------------------------------------------------------------

' STARTFONT 2.1
' FONT -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1
' SIZE 16 75 75
' FONTBOUNDINGBOX 16 16 0 -2
' STARTPROPERTIES 2
' FONT_ASCENT 14
' FONT_DESCENT 2
' ENDPROPERTIES
' CHARS 1
' STARTCHAR U+0041
' ENCODING 65
' SWIDTH 500 0
' DWIDTH 8 0
' BBX 8 16 0 -2
' BITMAP
' 00
' 00
' 00
' 00
' 18
' 24
' 24
' 42
' 42
' 7E
' 42
' 42
' 42
' 42
' 00
' 00
' ENDCHAR
' ENDFONT

' ----------------------------------------------------------------------------------------------------------------------------------------------------------------

' Decoded hexdraw representation of the example:
' 00 00000000 --------
' 00 00000000 --------
' 00 00000000 --------
' 00 00000000 --------
' 18 00011000 ---¦¦---
' 24 00100100 --¦--¦--
' 24 00100100 --¦--¦--
' 42 01000010 -¦----¦-
' 42 01000010 -¦----¦-
' 7E 01111110 -¦¦¦¦¦¦-
' 42 01000010 -¦----¦-
' 42 01000010 -¦----¦-
' 42 01000010 -¦----¦-
' 42 01000010 -¦----¦-
' 00 00000000 --------
' 00 00000000 --------
'
' .. ........ .248124.

' ----------------------------------------------------------------------------------------------------------------------------------------------------------------

' In the above example, the global declarations begin with the STARTFONT line
' and end with the CHARSline.
'
' STARTFONT 2.1 defines the version of this BDF file as version 2.1.
'
' FONT -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1 defines the
' font family and face names as an X logical font description.
'
' SIZE 16 75 75 defines this to be a 16 point font, with an X-axis resolution of
' 75 dots per inch (dpi) and a Y-axis resolution of 75 dpi. This is the norm
' under X Window.
'
' FONTBOUNDINGBOX 16 16 0 -2 defines a bounding box for the font of 16 pixels
' wide by 16 pixels high, with the lower left-hand corner starting at x = 0 and y
' = -2. Note that although the bounding box is defined to be a 16 by 16 cell,
' this can be overridden for individual glyphs. The “A” glyph, for example, is
' only 8 pixels wide.
'
' STARTPROPERTIES 2 declares that two special properties will follow.
' STARTPROPERTIES is optional in the BDF specification. X Window allows the
' properties FONT_ASCENT and FONT_DESCENT to show the height above and below the
' baseline, respectively, for all glyphs. FONT_ASCENT 14 declares that 14 of the
' 16 pixels in height are above the baseline. FONT_DESCENT 2 declares that 2 of
' the 16 pixels in height are below the baseline. ENDPROPERTIES appears at the
' end of the STARTPROPERTIES section.
'
' CHARS 1 declares that one character will follow. Although Adobe now refers to
' this file format as the Glyph BDF, they have retained the keyword CHARSin the
' final version of the specification.
'
' Lines beginning with the word COMMENT can be inserted within a BDF file.
' Anything following the COMMENT keyword on a line is ignored.
'
' Following the above global declarations, the following entries may repeat for
' each glyph.
'
' STARTCHAR U+0041 specifies the start of a character in version 2.1 and earlier,
' or of a glyph in version 2.2. The string name of this particular character is
' U+0041, expressing in the Unicodeconvention the code point hexadecimal 41
' (decimal 65, the ASCII character “A”). In version 2.1 and earlier, the
' character name string was limited to 14 characters. In version 2.2, the glyph
' name string can contain up to 65,535 characters.
'
' ENCODING 65 declares the decimal code point for this glyph in the font.
'
' SWIDTH 500 0 declares the scalable width of 500 on the X-axis and 0 (by
' default) on the Y-axis. This will result in an X-axis offset to the next glyph,
' but no Y-axis offset to the next glyph (i.e., the glyphs appear straight across
' in a line). The scalable width is 1000 times the actual point size of the
' character—the same unit used in an Adobe Font Metric (AFM) file. The number of
' pixels calculated as
'
'   Pixels = (Scalable Width/1000) * (Resolution/72)
'
' where Scalable Width is 500 in this example,
' and resolution is 75 dpi for this font.
'
' Because 75 is approximately equal to 72, the number of pixels is the full width
' of a glyph (defined globally as 16 pixels) times (500/1000), or in other words
' the width of this glyph is 8 pixels.
'
' DWIDTH 8 0 declares the device width of a glyph. In this case, after the glyph
' is rendered, the start of the next glyph is offset 8 pixels on the X-axis and 0
' pixels on the Y-axis from the current glyph origin. Note that the device width
' is not necessarily equal to the width of the glyph. It is simply the offset on
' the X-axis to move the current point to the start of the next glyph.
'
' The scalable width is used to calculate the width of a high-resolution glyph on
' a printer, whereas the device width is used to calculate the width of a glyph
' on a display device. Thus the scalable width is specified to greater precision
' than the device width.
'
' BBX 8 16 0 -2 declares a bounding box that is 8 pixels wide and 16 pixels tall.
' The lower left-hand corner of the character is offset by 0 pixels on the X-axis
' and -2 pixels on the Y-axis.
'
' BITMAP begins the bitmap for the current glyph. This line must be followed by
' one line per pixel on the Y-axis. In this example the glyph is 16 pixels tall,
' so 16 lines follow. Each line contains the hexadecimal representation of pixels
' in a row. A “1” bit indicates a rendered pixel. Each line is rounded to an 8
' bit (one byte) boundary, padded with zeroes on the right. In this example, the
' glyph is exactly 8 pixels wide, and so occupies exactly 8 bits (one byte) per
' line so that there is no padding. The most significant bit of a line of raster
' data represents the leftmost pixel.
'
' ENDCHAR ends the current glyph.
'
' The declarations STARTCHAR through ENDCHARare repeated for each glyph in a font.
'
' ENDFONT appears as the last line in the file, after all glyphs in the font have
' been enumerated.

' ----------------------------------------------------------------------------------------------------------------------------------------------------------------

' Version 2.2 Extensions
'
' Version 2.2 of the BDF specification adds support for non-Western fonts. These
' additions allow moving the origin by a positive or negative movement on the X
' and Y axes. This not only accommodates right-to-left writing direction, but
' even top-to-bottom (for example, for Chinese). The following values provide
' multinational-font support:
'
' METRICSET is set to 0 for writing direction 0, 1 for writing direction 1, or 2
' (in the initial global area) for both writing directions within the same font.
' Traditional Western left-to-right scripts use METRICSET 0.
'
' SWIDTH1 and DWIDTH1 have the same parameters as SWIDTH and DWIDTH,
' respectively. DWIDTH1 must be present for a METRICSET 1glyph. Its offsets can
' be positive or negative.
'
' VVECTOR defines an X-axis offset and a Y-axis offset to transition from a mode
' 0 glyph to a mode 1 glyph. An opposite offset is applied during a mode 1 to
' mode 0 glyph transition.
'
' This scheme easily accommodates two writing directions. Historically, fonts had
' 128 or 256 code points. Today, Unicode allows for over one million code points.
' Fonts can conceivably contain thousands of glyphs, some of which should be
' written left-to-right, some right-to-left, and some top-to-bottom. Such
' multi-directional writing requires creative use of DWIDTH1 and SWIDTH1for each
' glyph.
'
' In addition to keywords added for international support, version 2.2 adds the
' CONTENTVERSIONdeclaration. This keyword is followed by an integer to indicate
' the version number of the font.
'
' For more detailed information, consult the version 2.2 specification.

' -----------------------------------------------------------------------------
' X Window Properties
' -----------------------------------------------------------------------------
' X Window font utilities support several properties that can be specified in the
' STARTPROPERTIESsection of a BDF file.[3] A generic BDF file is in
' ASCIIencoding. X Window properties are specified using ISO 8859-1 encoding,
' which is an extension of ASCII. These properties include:
'
' * CAP_HEIGHT (integer) The height above the baseline of a capital letter
'   (See Cap height).
'
' * COPYRIGHT (string)[4] A copyright statement.
'
' * DEFAULT_CHAR (unsigned integer) The default character (glyph) to display
'   for an undefined glyph.
'
' * FACE_NAME (string[4]) The name of the face for this font.
'
' * FONT (string)[4] The X Window name of the font.
'
' * FONT_ASCENT (integer) The height above the baseline, for line spacing
'   calculation.
'
' * FONT_DESCENT (integer) The descender below the baseline, for line spacing
'   calculation.
'
' * FONT_VERSION (string)[4] The version of the font.
'
' * FOUNDRY (string)[4] The name of the foundry.
'
' * FAMILY_NAME (string)[4] The font family name.
'
' * NOTICE (string)[4] A general comment.
'
' * POINT_SIZE (integer) See Point (typography).
'   If it is not separately specified,
'   EMspace = round(POINT_SIZE/10),
'   ENspace = round(POINT_SIZE/20), and
'   THINspace = round(POINT_SIZE/30).
'
' * RESOLUTION_X (unsigned integer)
'
' * RESOLUTION_Y (unsigned integer)
'
' * SLANT (string)[4]
'   “R” is roman, “I” is italic, “O” is oblique, “RI” is reverse italic,
'   “RO” is reverse oblique, “OT” is other,
'   and a number indicates polymorphic slant capability.
'
' * WEIGHT_NAME (string)[4] The weight of this font (“Bold” and “Normal”
'   are typical, though there is no set enumeration).
'
' * X_HEIGHT (integer) The height above the baseline of a lower-case “x”
'   (See x-height).

' -----------------------------------------------------------------------------
' Notes
' -----------------------------------------------------------------------------
' 1. .bdf MIME type not registered at IANA
' 2. "X Window System, Version 11, Release 3". X.Org Foundation. October 1988.
'    Retrieved 19 January 2016.
' 3. Flowers, Jim (1994) [1988]. "3.2 Font Properties".
'    X Logical Font Description Conventions (Version 1.5 ed.).
'    X Consortium, Inc. p. 13. Archived from the original on 2013-03-31.
'    Retrieved 2009-01-08.
' 4. A ISO 8859-1 character string.

' -----------------------------------------------------------------------------
' References
' -----------------------------------------------------------------------------
' * The Unicode Standard, Version 5.0. The Unicode Consortium (5th ed.).
'   Addison-Wesley. October 2006. ISBN 978-0-321-48091-0.

' -----------------------------------------------------------------------------
' External links
' -----------------------------------------------------------------------------
' * Adobe Glyph Bitmap Distribution Format (BDF) Specification, version 2.2
'   https://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5005.BDF_Spec.pdf

' /////////////////////////////////////////////////////////////////////////////
' Q: write QB64 code to convert a bitmap font of 256 8x8 characters defined
'    in a 2d array to a BDF file

' QB64 code to convert a 2D array representing a bitmap font to a BDF file.

' Example 2D array representing a simple 8x8 font (256 characters)

Function CreateBDF$ (FontFilename$)
    ReDim arrFontData(255, 7) As Integer ' 256 characters, 8 rows (y)
    Dim iChar As Integer
    Dim iRow As Integer
    Dim sError As String: sError = ""

    If Len(sError) = 0 Then
        sError = GetTiles$(arrFontData())
    End If

    If Len(sError) = 0 Then
        SaveBDF arrFontData(), FontFilename$
    End If

    CreateBDF$ = sError
End Function ' CreateBDF$

' /////////////////////////////////////////////////////////////////////////////

Sub SaveBDF (arrFontData%(), filename$)
    Open filename$ For Output As #1
    Dim iChar As Integer
    Dim iRow As Integer
    Dim hexString$
    Dim rowValue As Integer

    ' --- BDF Header ---
    Print #1, "STARTFONT 2.1"
    Print #1, "FONT -My-Font-Regular-R-Normal--8-80-75-75-P-80-ISO8859-1"
    Print #1, "SIZE 8 75 75"
    Print #1, "FONTBOUNDINGBOX 8 8 0 0"
    Print #1, "STARTPROPERTIES 2"
    Print #1, "FONT_ASCENT 8"
    Print #1, "FONT_DESCENT 0"
    Print #1, "ENDPROPERTIES"
    Print #1, "CHARS 256"

    ' --- Character Definitions ---
    For iChar = 0 To 255
        Print #1, "STARTCHAR U+" + Right$("0000" + Hex$(_MapUnicode(iChar)), 4)

        'If iChar <> 255 Then
        Print #1, "ENCODING " + LTrim$(Str$(_MapUnicode(iChar)))
        'Else
        '    Print #1, "ENCODING " + LTrim$(Str$(iChar))
        'End If

        Print #1, "SWIDTH 500 0"
        Print #1, "DWIDTH 8 0"
        Print #1, "BBX 8 8 0 0"
        Print #1, "BITMAP"
        For iRow = 0 To 7
            ' Convert integer iRow to hexadecimal string
            hexString$ = ""
            rowValue = arrFontData%(iChar, iRow)
            hexString$ = LTrim$(Hex$(rowValue))
            If Len(hexString$) = 1 Then hexString$ = "0" + hexString$ ' Pad to two hex digits
            Print #1, hexString$
        Next iRow
        Print #1, "ENDCHAR"
    Next iChar

    ' --- BDF Footer ---
    Print #1, "ENDFONT"
    Close #1
End Sub ' SaveBDF

' ################################################################################################################################################################
' END BDF FONT ROUTINES @BDF
' ################################################################################################################################################################

' ################################################################################################################################################################
' BEGIN GENERAL PURPOSE ROUTINES #GEN
' ################################################################################################################################################################

' /////////////////////////////////////////////////////////////////////////////
' Convert a value to string and trim it (because normal Str$ adds spaces)

Function cstr$ (myValue)
    'cstr$ = LTRIM$(RTRIM$(STR$(myValue)))
    cstr$ = _Trim$(Str$(myValue))
End Function ' cstr$

' /////////////////////////////////////////////////////////////////////////////
' From: Bitwise Manipulations By Steven Roman
' http://www.romanpress.com/Articles/Bitwise_R/Bitwise.htm

' Returns the 8-bit binary representation
' of an integer iInput where 0 <= iInput <= 255

Function GetBinary$ (iInput1 As Integer)
    Dim sResult As String
    Dim iLoop As Integer
    Dim iInput As Integer: iInput = iInput1

    sResult = ""

    If iInput >= 0 And iInput <= 255 Then
        For iLoop = 1 To 8
            sResult = LTrim$(RTrim$(Str$(iInput Mod 2))) + sResult
            iInput = iInput \ 2
            'If iLoop = 4 Then sResult = " " + sResult
        Next iLoop
    End If

    GetBinary$ = sResult
End Function ' GetBinary$

' /////////////////////////////////////////////////////////////////////////////
' From: Bitwise Manipulations By Steven Roman
' http://www.romanpress.com/Articles/Bitwise_R/Bitwise.htm

' Returns the integer that corresponds to a binary string of length 8

Function GetIntegerFromBinary% (sBinary1 As String)
    Dim iResult As Integer
    Dim iLoop As Integer
    Dim strBinary As String
    Dim sBinary As String: sBinary = sBinary1

    iResult = 0
    strBinary = Replace$(sBinary, " ", "") ' Remove any spaces
    For iLoop = 0 To Len(strBinary) - 1
        iResult = iResult + 2 ^ iLoop * Val(Mid$(strBinary, Len(strBinary) - iLoop, 1))
    Next iLoop

    GetIntegerFromBinary% = iResult
End Function ' GetIntegerFromBinary%

' /////////////////////////////////////////////////////////////////////////////
' Returns _TRUE if value OriginalString$ is numeric.

' Re: Does a Is Number function exist in QB64?
' https://www.qb64.org/forum/index.php?topic=896.15

' Version 2 by madscijr
' Returns _TRUE (-1) if string is an integer, _FALSE (0) if not

' Version 1 by MWheatley
' Reply #18 on: January 01, 2019, 11:24:30 AM
' returns 1 if string is an integer, 0 if not

Function IsNumber% (OriginalString$)
    Dim bResult%: bResult% = _FALSE
    Dim iLoop%
    Dim TestString$
    'Dim bNegative%
    Dim iDecimalCount%
    Dim sNextChar$

    'THEY SHOULD TRIM OUTSIDE THE FUNCTION!
    'TestString$ = _TRIM$(OriginalString$)

    If Len(OriginalString$) > 0 Then
        TestString$ = ""
        If Left$(OriginalString$, 1) = "+" Then
            TestString$ = Right$(OriginalString$, Len(OriginalString$) - 1)
            'bNegative% = _FALSE
        ElseIf Left$(OriginalString$, 1) = "-" Then
            TestString$ = Right$(OriginalString$, Len(OriginalString$) - 1)
            'bNegative% = _TRUE
        Else
            TestString$ = OriginalString$
            'bNegative% = _FALSE
        End If
        If Len(TestString$) > 0 Then
            bResult% = _TRUE
            iDecimalCount% = 0
            For iLoop% = 1 To Len(TestString$)
                sNextChar$ = Mid$(TestString$, iLoop%, 1)
                If sNextChar$ = "." Then
                    iDecimalCount% = iDecimalCount% + 1
                    If iDecimalCount% > 1 Then
                        ' TOO MANY DECIMAL POINTS, INVALID!
                        bResult% = _FALSE
                        Exit For
                    End If
                ElseIf Asc(sNextChar$) < 48 Or Asc(sNextChar$) > 57 Then
                    ' NOT A NUMERAL OR A DECIMAL, INVALID!
                    bResult% = _FALSE
                    Exit For
                End If
            Next iLoop%
        End If
    End If
    IsNumber% = bResult%
End Function ' IsNumber%

' /////////////////////////////////////////////////////////////////////////////
' Generate random value between Min and Max.
Function RandomNumber% (Min%, Max%)
    Dim NumSpread%

    ' SET RANDOM SEED
    'Randomize ' Initialize random-number generator.
    Randomize Timer

    ' GET RANDOM # Min%-Max%
    'RandomNumber = Int((Max * Rnd) + Min) ' generate number

    NumSpread% = (Max% - Min%) + 1

    RandomNumber% = Int(Rnd * NumSpread%) + Min% ' GET RANDOM # BETWEEN Max% AND Min%
End Function ' RandomNumber%

' /////////////////////////////////////////////////////////////////////////////
' FROM: String Manipulation
' found at abandoned, outdated and now likely malicious qb64 dot net website
' http://www.qb64.[net]/forum/index_topic_5964-0/
'
'SUMMARY:
'   Purpose:  A library of custom functions that transform strings.
'   Author:   Dustinian Camburides (dustinian@gmail.com)
'   Platform: QB64 (www.qb64.org)
'   Revision: 1.6
'   Updated:  5/28/2012

'SUMMARY:
'[Replace$] replaces all instances of the [Find] sub-string with the [Add] sub-string within the [Text] string.
'INPUT:
'Text: The input string; the text that's being manipulated.
'Find: The specified sub-string; the string sought within the [Text] string.
'Add: The sub-string that's being added to the [Text] string.

Function Replace$ (Text1 As String, Find1 As String, Add1 As String)
    ' VARIABLES:
    Dim Text2 As String
    Dim Find2 As String
    Dim Add2 As String
    Dim lngLocation As Long ' The address of the [Find] substring within the [Text] string.
    Dim strBefore As String ' The characters before the string to be replaced.
    Dim strAfter As String ' The characters after the string to be replaced.

    ' INITIALIZE:
    ' MAKE COPIESSO THE ORIGINAL IS NOT MODIFIED (LIKE ByVal IN VBA)
    Text2 = Text1
    Find2 = Find1
    Add2 = Add1

    lngLocation = InStr(1, Text2, Find2)

    ' PROCESSING:
    ' While [Find2] appears in [Text2]...
    While lngLocation
        ' Extract all Text2 before the [Find2] substring:
        strBefore = Left$(Text2, lngLocation - 1)

        ' Extract all text after the [Find2] substring:
        strAfter = Right$(Text2, ((Len(Text2) - (lngLocation + Len(Find2) - 1))))

        ' Return the substring:
        Text2 = strBefore + Add2 + strAfter

        ' Locate the next instance of [Find2]:
        lngLocation = InStr(1, Text2, Find2)

        ' Next instance of [Find2]...
    Wend

    ' OUTPUT:
    Replace$ = Text2
End Function ' Replace$

' /////////////////////////////////////////////////////////////////////////////
' Split and join strings
' https://www.qb64.org/forum/index.php?topic=1073.0
'
' FROM luke, QB64 Developer
' Date: February 15, 2019, 04:11:07 AM »
'
' Given a string of words separated by spaces (or any other character),
' splits it into an array of the words. I've no doubt many people have
' written a version of this over the years and no doubt there's a million
' ways to do it, but I thought I'd put mine here so we have at least one
' version. There's also a join function that does the opposite
' array -> single string.
'
' Code is hopefully reasonably self explanatory with comments and a little demo.
' Note, this is akin to Python/JavaScript split/join, PHP explode/implode.

'Split in$ into pieces, chopping at every occurrence of delimiter$. Multiple consecutive occurrences
'of delimiter$ are treated as a single instance. The chopped pieces are stored in result$().
'
'delimiter$ must be one character long.
'result$() must have been REDIMmed previously.

' Modified to handle multi-character delimiters

Sub split (in$, delimiter$, result$())
    Dim start As Integer
    Dim finish As Integer
    Dim iDelimLen As Integer
    ReDim result$(-1)

    iDelimLen = Len(delimiter$)

    start = 1
    Do
        'While Mid$(in$, start, 1) = delimiter$
        While Mid$(in$, start, iDelimLen) = delimiter$
            'start = start + 1
            start = start + iDelimLen
            If start > Len(in$) Then
                Exit Sub
            End If
        Wend
        finish = InStr(start, in$, delimiter$)
        If finish = 0 Then
            finish = Len(in$) + 1
        End If

        ReDim _Preserve result$(0 To UBound(result$) + 1)

        result$(UBound(result$)) = Mid$(in$, start, finish - start)
        start = finish + 1
    Loop While start <= Len(in$)
End Sub ' split

' ################################################################################################################################################################
' END GENERAL PURPOSE ROUTINES @GEN
' ################################################################################################################################################################

' ################################################################################################################################################################
' BEGIN COLOR ARRAY FUNCTIONS #COLR
' ################################################################################################################################################################

' /////////////////////////////////////////////////////////////////////////////

Sub AddColor (ColorValue As _Unsigned Long, arrColor() As _Unsigned Long)
    ReDim _Preserve arrColor(0 To UBound(arrColor) + 1) As _Unsigned Long
    arrColor(UBound(arrColor)) = ColorValue
End Sub ' AddColor

' /////////////////////////////////////////////////////////////////////////////

Sub AddColors (ColorValue As _Unsigned Long, arrColor() As _Unsigned Long, HowMany As Long)
    Dim iLoop As Integer
    For iLoop = 1 To HowMany
        AddColor ColorValue, arrColor()
    Next iLoop
End Sub ' AddColors

' /////////////////////////////////////////////////////////////////////////////

Sub AddBgColors (arrColor() As _Unsigned Long)
    Dim iNum As Integer
    iNum = 1
    AddColors cRed, arrColor(), iNum
    AddColors cOrange, arrColor(), iNum
    AddColors cYellow, arrColor(), iNum
    AddColors cLime, arrColor(), iNum
    AddColors cCyan, arrColor(), iNum
    AddColors cBlue, arrColor(), iNum
    AddColors cPurple, arrColor(), iNum
    AddColors cBlack, arrColor(), iNum
    AddColors cGray, arrColor(), iNum
    AddColors cSilver, arrColor(), iNum
    AddColors cWhite, arrColor(), iNum
End Sub ' AddBgColors

' /////////////////////////////////////////////////////////////////////////////

Sub AddFgColors (arrColor() As _Unsigned Long)
    Dim iNum As Integer
    iNum = 1
    AddColors cRed, arrColor(), iNum
    AddColors cOrange, arrColor(), iNum
    AddColors cYellow, arrColor(), iNum
    AddColors cLime, arrColor(), iNum
    AddColors cCyan, arrColor(), iNum
    AddColors cBlue, arrColor(), iNum
    AddColors cPurple, arrColor(), iNum
    AddColors cBlack, arrColor(), iNum
    AddColors cGray, arrColor(), iNum
    AddColors cSilver, arrColor(), iNum
    AddColors cWhite, arrColor(), iNum
End Sub ' AddFgColors

' /////////////////////////////////////////////////////////////////////////////

Sub AddGrayscaleColors (arrColor() As _Unsigned Long)
    Dim iNum As Integer
    iNum = 1
    AddColors cDimGray, arrColor(), iNum
    AddColors cGray, arrColor(), iNum
    AddColors cDarkGray, arrColor(), iNum
    AddColors cSilver, arrColor(), iNum
    AddColors cLightGray, arrColor(), iNum
    AddColors cGainsboro, arrColor(), iNum
    AddColors cWhiteSmoke, arrColor(), iNum
    AddColors cWhite, arrColor(), iNum '* 2
    AddColors cWhiteSmoke, arrColor(), iNum
    AddColors cGainsboro, arrColor(), iNum
    AddColors cLightGray, arrColor(), iNum
    AddColors cSilver, arrColor(), iNum
    AddColors cDarkGray, arrColor(), iNum
    AddColors cGray, arrColor(), iNum
End Sub ' AddGrayscaleColors

' /////////////////////////////////////////////////////////////////////////////

Sub AddSpectrumColors (arrColor() As _Unsigned Long)
    Dim iNum As Integer
    iNum = 1
    AddColors cRed, arrColor(), iNum
    AddColors cOrangeRed, arrColor(), iNum
    AddColors cDarkOrange, arrColor(), iNum
    AddColors cOrange, arrColor(), iNum
    AddColors cGold, arrColor(), iNum
    AddColors cYellow, arrColor(), iNum
    AddColors cChartreuse, arrColor(), iNum
    AddColors cOliveDrab1, arrColor(), iNum
    AddColors cLime, arrColor(), iNum
    AddColors cMediumSpringGreen, arrColor(), iNum
    AddColors cSpringGreen, arrColor(), iNum
    AddColors cCyan, arrColor(), iNum
    AddColors cDeepSkyBlue, arrColor(), iNum
    AddColors cDodgerBlue, arrColor(), iNum
    AddColors cSeaBlue, arrColor(), iNum
    AddColors cBlue, arrColor(), iNum
    AddColors cBluePurple, arrColor(), iNum
    AddColors cDeepPurple, arrColor(), iNum
    AddColors cPurple, arrColor(), iNum
    AddColors cPurpleRed, arrColor(), iNum
    'AddColors cDarkRed, arrColor(), iNum
    'AddColors cBrickRed, arrColor(), iNum
    'AddColors cDarkGreen, arrColor(), iNum
    'AddColors cGreen, arrColor(), iNum
    'AddColors cOliveDrab, arrColor(), iNum
    'AddColors cLightPink, arrColor(), iNum
    'AddColors cHotPink, arrColor(), iNum
    'AddColors cDeepPink, arrColor(), iNum
    'AddColors cMagenta, arrColor(), iNum
    ''AddColors cBlack, arrColor(), iNum
    'AddColors cDimGray, arrColor(), iNum
    'AddColors cGray, arrColor(), iNum
    'AddColors cDarkGray, arrColor(), iNum
    'AddColors cSilver, arrColor(), iNum
    'AddColors cLightGray, arrColor(), iNum
    'AddColors cGainsboro, arrColor(), iNum
    'AddColors cWhiteSmoke, arrColor(), iNum
    'AddColors cWhite, arrColor(), iNum
    'AddColors cDarkBrown, arrColor(), iNum
    'AddColors cLightBrown, arrColor(), iNum
    'AddColors cKhaki, arrColor(), iNum
    ''AddColors cEmpty , arrColor(), iNum
End Sub ' AddSpectrumColors

' ################################################################################################################################################################
' END COLOR ARRAY FUNCTIONS @COLR
' ################################################################################################################################################################

' ################################################################################################################################################################
' BEGIN COLOR FUNCTIONS #COLOR
' ################################################################################################################################################################

Function cRed~& ()
    cRed = _RGB32(255, 0, 0)
End Function

Function cOrangeRed~& ()
    cOrangeRed = _RGB32(255, 69, 0)
End Function ' cOrangeRed~&

Function cDarkOrange~& ()
    cDarkOrange = _RGB32(255, 140, 0)
End Function ' cDarkOrange~&

Function cOrange~& ()
    cOrange = _RGB32(255, 165, 0)
End Function ' cOrange~&

Function cGold~& ()
    cGold = _RGB32(255, 215, 0)
End Function ' cGold~&

Function cYellow~& ()
    cYellow = _RGB32(255, 255, 0)
End Function ' cYellow~&

' LONG-HAIRED FRIENDS OF JESUS OR NOT,
' THIS IS NOT YELLOW ENOUGH (TOO CLOSE TO LIME)
' TO USE FOR OUR COMPLEX RAINBOW SEQUENCE:
Function cChartreuse~& ()
    cChartreuse = _RGB32(127, 255, 0)
End Function ' cChartreuse~&

' WE SUBSTITUTE THIS CSS3 COLOR FOR INBETWEEN LIME AND YELLOW:
Function cOliveDrab1~& ()
    cOliveDrab1 = _RGB32(192, 255, 62)
End Function ' cOliveDrab1~&

Function cLime~& ()
    cLime = _RGB32(0, 255, 0)
End Function ' cLime~&

Function cMediumSpringGreen~& ()
    cMediumSpringGreen = _RGB32(0, 250, 154)
End Function ' cMediumSpringGreen~&

' ADDED THIS FOR THE GAUGE COLOR:
Function cSpringGreen~& ()
    cSpringGreen = _RGB32(0, 255, 160)
End Function ' cSpringGreen~&

Function cCyan~& ()
    cCyan = _RGB32(0, 255, 255)
End Function ' cCyan~&

Function cDeepSkyBlue~& ()
    cDeepSkyBlue = _RGB32(0, 191, 255)
End Function ' cDeepSkyBlue~&

Function cDodgerBlue~& ()
    cDodgerBlue = _RGB32(30, 144, 255)
End Function ' cDodgerBlue~&

Function cSeaBlue~& ()
    cSeaBlue = _RGB32(0, 64, 255)
End Function ' cSeaBlue~&

Function cBlue~& ()
    cBlue = _RGB32(0, 0, 255)
End Function ' cBlue~&

Function cBluePurple~& ()
    cBluePurple = _RGB32(64, 0, 255)
End Function ' cBluePurple~&

Function cDeepPurple~& ()
    cDeepPurple = _RGB32(96, 0, 255)
End Function ' cDeepPurple~&

Function cPurple~& ()
    cPurple = _RGB32(128, 0, 255)
End Function ' cPurple~&

Function cPurpleRed~& ()
    cPurpleRed = _RGB32(128, 0, 192)
End Function ' cPurpleRed~&

Function cDarkRed~& ()
    cDarkRed = _RGB32(160, 0, 64)
End Function ' cDarkRed~&

Function cBrickRed~& ()
    cBrickRed = _RGB32(192, 0, 32)
End Function ' cBrickRed~&

Function cDarkGreen~& ()
    cDarkGreen = _RGB32(0, 100, 0)
End Function ' cDarkGreen~&

Function cGreen~& ()
    cGreen = _RGB32(0, 128, 0)
End Function ' cGreen~&

Function cOliveDrab~& ()
    cOliveDrab = _RGB32(107, 142, 35)
End Function ' cOliveDrab~&

Function cLightPink~& ()
    cLightPink = _RGB32(255, 182, 193)
End Function ' cLightPink~&

Function cHotPink~& ()
    cHotPink = _RGB32(255, 105, 180)
End Function ' cHotPink~&

Function cDeepPink~& ()
    cDeepPink = _RGB32(255, 20, 147)
End Function ' cDeepPink~&

Function cMagenta~& ()
    cMagenta = _RGB32(255, 0, 255)
End Function ' cMagenta~&

Function cBlack~& ()
    cBlack = _RGB32(0, 0, 0)
End Function ' cBlack~&

Function cDimGray~& ()
    cDimGray = _RGB32(105, 105, 105)
End Function ' cDimGray~&

Function cGray~& ()
    cGray = _RGB32(128, 128, 128)
End Function ' cGray~&

Function cDarkGray~& ()
    cDarkGray = _RGB32(169, 169, 169)
End Function ' cDarkGray~&

Function cSilver~& ()
    cSilver = _RGB32(192, 192, 192)
End Function ' cSilver~&

Function cLightGray~& ()
    cLightGray = _RGB32(211, 211, 211)
End Function ' cLightGray~&

Function cGainsboro~& ()
    cGainsboro = _RGB32(220, 220, 220)
End Function ' cGainsboro~&

Function cWhiteSmoke~& ()
    cWhiteSmoke = _RGB32(245, 245, 245)
End Function ' cWhiteSmoke~&

Function cWhite~& ()
    cWhite = _RGB32(255, 255, 255)
End Function ' cWhite~&

Function cDarkBrown~& ()
    cDarkBrown = _RGB32(128, 64, 0)
End Function ' cDarkBrown~&

Function cLightBrown~& ()
    cLightBrown = _RGB32(196, 96, 0)
End Function ' cLightBrown~&

Function cKhaki~& ()
    cKhaki = _RGB32(240, 230, 140)
End Function ' cKhaki~&

Function cEmpty~& ()
    cEmpty = _RGB32(0, 0, 0, 0)
End Function ' cEmpty~&

' ################################################################################################################################################################
' END COLOR FUNCTIONS @COLOR
' ################################################################################################################################################################

' ################################################################################################################################################################
' BEGIN TILE DEFINITIONS #TILE
' ################################################################################################################################################################

' /////////////////////////////////////////////////////////////////////////////

Function GetTiles$ (arrFontData%())
    Const cHEIGHT = 8
    Const cWIDTH = 8

    Dim RoutineName As String: RoutineName = "GetTiles$"
    Dim sError As String: sError = ""
    ReDim arrTileText(0 To 255) As String
    Dim iTileNum As Integer
    ReDim arrLines(-1) As String
    Dim iFromX As Integer
    Dim iFromY As Integer
    Dim sLine As String
    Dim sChar As String
    Dim sBinary As String
    Dim iValue As Integer
    Dim iLine As Integer
    Dim ub%, lb%

    If Len(sError) = 0 Then
        ReDim arrFontData%(0 To 255, 0 To 7)
        GetTileText arrTileText()
        lb% = LBound(arrTileText)
        ub% = UBound(arrTileText)
        If lb% <> 0 Or ub% <> 255 Then
            sError = "GetTileText returned array with invalid boundaries " + _
                "(" + _
                _TRIM$(str$( lb% )) + _
                " - " +_
                _TRIM$(str$( ub% )) + _
                ")"
        End If
    End If

    If Len(sError) = 0 Then
        For iTileNum = 0 To 255
            split arrTileText(iTileNum), Chr$(13), arrLines()
            iLine = 0
            For iFromY = LBound(arrLines) To UBound(arrLines)
                sLine = arrLines(iFromY)
                If Len(sLine) > 0 Then
                    sBinary = ""
                    For iFromX = 1 To Len(sLine)
                        sChar = Mid$(sLine, iFromX, 1)
                        If sChar = "." Then
                            sBinary = sBinary + "0"
                        Else
                            sBinary = sBinary + "1"
                        End If
                    Next iFromX
                    If Len(sBinary) = 8 Then
                        iValue = GetIntegerFromBinary%(sBinary)
                        arrFontData%(iTileNum, iLine) = iValue
                    Else
                        iLine = iLine + 1
                        sError = "Invalid data for tile " + _Trim$(Str$(iTileNum)) + " at line " + _Trim$(Str$(iLine))
                        Exit For
                    End If
                    iLine = iLine + 1
                    If iLine > 7 Then Exit For
                End If
            Next iFromY
            If Len(sError) > 0 Then Exit For
        Next iTileNum
    End If

    GetTiles$ = sError
End Function ' GetTiles$

' /////////////////////////////////////////////////////////////////////////////

Sub GetTileText (arrTileText() As String)
    ReDim arrTileText(0 To 255) As String
    Dim m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(0) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(1) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(2) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(3) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(4) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(5) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(6) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(7) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(8) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(9) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(10) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(11) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(12) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(13) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(14) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(15) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(16) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(17) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(18) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(19) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(20) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(21) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(22) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(23) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(24) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(25) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(26) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(27) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(28) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(29) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(30) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(31) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(32) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(33) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(34) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(35) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(36) = m$

    m$ = ""
    m$ = m$ + ".22...2." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".2...22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(37) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + ".22..222" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(38) = m$

    m$ = ""
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(39) = m$

    m$ = ""
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(40) = m$

    m$ = ""
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(41) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(42) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(43) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    arrTileText(44) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(45) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(46) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(47) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22.222." + Chr$(13)
    m$ = m$ + ".222.22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(48) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(49) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(50) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(51) = m$

    m$ = ""
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "....222." + Chr$(13)
    m$ = m$ + "...2222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(52) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(53) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(54) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(55) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(56) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(57) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(58) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    arrTileText(59) = m$

    m$ = ""
    m$ = m$ + "....222." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "....222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(60) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(61) = m$

    m$ = ""
    m$ = m$ + ".222...." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + ".222...." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(62) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(63) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22.222." + Chr$(13)
    m$ = m$ + ".22.222." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22...2." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(64) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(65) = m$

    m$ = ""
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(66) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(67) = m$

    m$ = ""
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(68) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(69) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(70) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22.222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(71) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(72) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(73) = m$

    m$ = ""
    m$ = m$ + "...2222." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(74) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + ".222...." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(75) = m$

    m$ = ""
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(76) = m$

    m$ = ""
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + ".222.222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".22.2.22" + Chr$(13)
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(77) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".222.22." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22.222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(78) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(79) = m$

    m$ = ""
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(80) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "....222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(81) = m$

    m$ = ""
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(82) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(83) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(84) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(85) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(86) = m$

    m$ = ""
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + ".22.2.22" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".222.222" + Chr$(13)
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(87) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(88) = m$

    m$ = ""
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(89) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(90) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(91) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(92) = m$

    m$ = ""
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(93) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(94) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(95) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(96) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(97) = m$

    m$ = ""
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(98) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(99) = m$

    m$ = ""
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(100) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(101) = m$

    m$ = ""
    m$ = m$ + "....222." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(102) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(103) = m$

    m$ = ""
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(104) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(105) = m$

    m$ = ""
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(106) = m$

    m$ = ""
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(107) = m$

    m$ = ""
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(108) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".22.2.22" + Chr$(13)
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(109) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(110) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(111) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(112) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(113) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(114) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".22222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(115) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "....222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(116) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(117) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(118) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22...22" + Chr$(13)
    m$ = m$ + ".22.2.22" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "..22.22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(119) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(120) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(121) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(122) = m$

    m$ = ""
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..2....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "..2....." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(123) = m$

    m$ = ""
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(124) = m$

    m$ = ""
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + ".....2.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....2.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(125) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".22....2" + Chr$(13)
    m$ = m$ + "2..2..2." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(126) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(127) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(128) = m$

    m$ = ""
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(129) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(130) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(131) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(132) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(133) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(134) = m$

    m$ = ""
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    arrTileText(135) = m$

    m$ = ""
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    arrTileText(136) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(137) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(138) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(139) = m$

    m$ = ""
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(140) = m$

    m$ = ""
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + ".222...." + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "....222." + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    arrTileText(141) = m$

    m$ = ""
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + "....222." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "..222..." + Chr$(13)
    m$ = m$ + ".222...." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    arrTileText(142) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    arrTileText(143) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    arrTileText(144) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(145) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(146) = m$

    m$ = ""
    m$ = m$ + "..22.22." + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(147) = m$

    m$ = ""
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    arrTileText(148) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(149) = m$

    m$ = ""
    m$ = m$ + "22....22" + Chr$(13)
    m$ = m$ + "222..222" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "222..222" + Chr$(13)
    m$ = m$ + "22....22" + Chr$(13)
    arrTileText(150) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(151) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(152) = m$

    m$ = ""
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    arrTileText(153) = m$

    m$ = ""
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "...222.." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(154) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(155) = m$

    m$ = ""
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    arrTileText(156) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(157) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + ".222.22." + Chr$(13)
    m$ = m$ + "..22.22." + Chr$(13)
    m$ = m$ + "..22.22." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(158) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + "..222222" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + ".......2" + Chr$(13)
    arrTileText(159) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(160) = m$

    m$ = ""
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    arrTileText(161) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(162) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(163) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(164) = m$

    m$ = ""
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    arrTileText(165) = m$

    m$ = ""
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    arrTileText(166) = m$

    m$ = ""
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    arrTileText(167) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    arrTileText(168) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "2222222." + Chr$(13)
    m$ = m$ + "222222.." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "2......." + Chr$(13)
    arrTileText(169) = m$

    m$ = ""
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    arrTileText(170) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(171) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    arrTileText(172) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(173) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(174) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(175) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(176) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(177) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(178) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(179) = m$

    m$ = ""
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    arrTileText(180) = m$

    m$ = ""
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    arrTileText(181) = m$

    m$ = ""
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    arrTileText(182) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(183) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(184) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(185) = m$

    m$ = ""
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(186) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    arrTileText(187) = m$

    m$ = ""
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(188) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(189) = m$

    m$ = ""
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(190) = m$

    m$ = ""
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    arrTileText(191) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    arrTileText(192) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    arrTileText(193) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(194) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(195) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...2...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "...2...." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(196) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + ".....2.." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".2222222" + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".....2.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(197) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + "2.2..2.2" + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + "2..222.2" + Chr$(13)
    m$ = m$ + "2.222..2" + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(198) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + "2.2..2.2" + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + "2.2..2.2" + Chr$(13)
    m$ = m$ + "2.2222.2" + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(199) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + "2.2..2.2" + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + "2.2222.2" + Chr$(13)
    m$ = m$ + "2.2..2.2" + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(200) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + "....22.." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(201) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(202) = m$

    m$ = ""
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    m$ = m$ + "..22...." + Chr$(13)
    arrTileText(203) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(204) = m$

    m$ = ""
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    arrTileText(205) = m$

    m$ = ""
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "2..22..2" + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "2..22..2" + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    arrTileText(206) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(207) = m$

    m$ = ""
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    arrTileText(208) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(209) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(210) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(211) = m$

    m$ = ""
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    arrTileText(212) = m$

    m$ = ""
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    arrTileText(213) = m$

    m$ = ""
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    arrTileText(214) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    arrTileText(215) = m$

    m$ = ""
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "2..22..2" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    m$ = m$ + "22..22.." + Chr$(13)
    m$ = m$ + "2..22..2" + Chr$(13)
    m$ = m$ + "..22..22" + Chr$(13)
    m$ = m$ + ".22..22." + Chr$(13)
    arrTileText(216) = m$

    m$ = ""
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    arrTileText(217) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(218) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    arrTileText(219) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(220) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(221) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(222) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22222" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(223) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(224) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(225) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    arrTileText(226) = m$

    m$ = ""
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    m$ = m$ + "22......" + Chr$(13)
    arrTileText(227) = m$

    m$ = ""
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    m$ = m$ + "222....." + Chr$(13)
    arrTileText(228) = m$

    m$ = ""
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    m$ = m$ + ".....222" + Chr$(13)
    arrTileText(229) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(230) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(231) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    arrTileText(232) = m$

    m$ = ""
    m$ = m$ + ".......2" + Chr$(13)
    m$ = m$ + "......22" + Chr$(13)
    m$ = m$ + ".....22." + Chr$(13)
    m$ = m$ + ".22.22.." + Chr$(13)
    m$ = m$ + ".2222..." + Chr$(13)
    m$ = m$ + ".222...." + Chr$(13)
    m$ = m$ + ".22....." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(233) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    arrTileText(234) = m$

    m$ = ""
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(235) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "22222..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(236) = m$

    m$ = ""
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(237) = m$

    m$ = ""
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "2222...." + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    m$ = m$ + "....2222" + Chr$(13)
    arrTileText(238) = m$

    m$ = ""
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "...2...." + Chr$(13)
    m$ = m$ + "...2...." + Chr$(13)
    m$ = m$ + "...2...." + Chr$(13)
    m$ = m$ + "...2...." + Chr$(13)
    m$ = m$ + "...2...." + Chr$(13)
    m$ = m$ + "...2...." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(239) = m$

    m$ = ""
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "...2.2.." + Chr$(13)
    m$ = m$ + "..2...2." + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + "...2.2.." + Chr$(13)
    m$ = m$ + "..22222." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(240) = m$

    m$ = ""
    m$ = m$ + "..22.22." + Chr$(13)
    m$ = m$ + ".2..2..2" + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + "..2...2." + Chr$(13)
    m$ = m$ + "...2.2.." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(241) = m$

    m$ = ""
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "...22..." + Chr$(13)
    m$ = m$ + "..2222.." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(242) = m$

    m$ = ""
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "...2.2.." + Chr$(13)
    m$ = m$ + "..2...2." + Chr$(13)
    m$ = m$ + ".2.....2" + Chr$(13)
    m$ = m$ + "..2...2." + Chr$(13)
    m$ = m$ + "...2.2.." + Chr$(13)
    m$ = m$ + "....2..." + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(243) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "2222.222" + Chr$(13)
    m$ = m$ + "222..222" + Chr$(13)
    m$ = m$ + "2222.222" + Chr$(13)
    m$ = m$ + "2222.222" + Chr$(13)
    m$ = m$ + "2222.222" + Chr$(13)
    m$ = m$ + "222...22" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(244) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "222..222" + Chr$(13)
    m$ = m$ + "22.22.22" + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + "2222.222" + Chr$(13)
    m$ = m$ + "222.2222" + Chr$(13)
    m$ = m$ + "22....22" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(245) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "2....222" + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + "22...222" + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + "2....222" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(246) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + "2222..22" + Chr$(13)
    m$ = m$ + "222.2.22" + Chr$(13)
    m$ = m$ + "22.22.22" + Chr$(13)
    m$ = m$ + "2......2" + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(247) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "2.....22" + Chr$(13)
    m$ = m$ + "2.222222" + Chr$(13)
    m$ = m$ + "2....222" + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + "2....222" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(248) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "22...222" + Chr$(13)
    m$ = m$ + "2.222222" + Chr$(13)
    m$ = m$ + "2....222" + Chr$(13)
    m$ = m$ + "2.222.22" + Chr$(13)
    m$ = m$ + "2.222.22" + Chr$(13)
    m$ = m$ + "22...222" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(249) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "2.....22" + Chr$(13)
    m$ = m$ + "2.222.22" + Chr$(13)
    m$ = m$ + "2222.222" + Chr$(13)
    m$ = m$ + "2222.222" + Chr$(13)
    m$ = m$ + "222.2222" + Chr$(13)
    m$ = m$ + "222.2222" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(250) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "22....22" + Chr$(13)
    m$ = m$ + "2..22..2" + Chr$(13)
    m$ = m$ + "22....22" + Chr$(13)
    m$ = m$ + "2..22..2" + Chr$(13)
    m$ = m$ + "2..22..2" + Chr$(13)
    m$ = m$ + "22....22" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(251) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "22...222" + Chr$(13)
    m$ = m$ + "2.222.22" + Chr$(13)
    m$ = m$ + "2.222.22" + Chr$(13)
    m$ = m$ + "22....22" + Chr$(13)
    m$ = m$ + "22222.22" + Chr$(13)
    m$ = m$ + "22...222" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(252) = m$

    m$ = ""
    m$ = m$ + ".222222." + Chr$(13)
    m$ = m$ + "22....22" + Chr$(13)
    m$ = m$ + "2.222..2" + Chr$(13)
    m$ = m$ + "2.22.2.2" + Chr$(13)
    m$ = m$ + "2.2.22.2" + Chr$(13)
    m$ = m$ + "2..222.2" + Chr$(13)
    m$ = m$ + "22....22" + Chr$(13)
    m$ = m$ + ".222222." + Chr$(13)
    arrTileText(253) = m$

    m$ = ""
    m$ = m$ + "2.2.2.2." + Chr$(13)
    m$ = m$ + "2.2.2.2." + Chr$(13)
    m$ = m$ + "2.2.2.2." + Chr$(13)
    m$ = m$ + "2.2.2.2." + Chr$(13)
    m$ = m$ + "2.2.2.2." + Chr$(13)
    m$ = m$ + "2.2.2.2." + Chr$(13)
    m$ = m$ + "2.2.2.2." + Chr$(13)
    m$ = m$ + "2.2.2.2." + Chr$(13)
    arrTileText(254) = m$

    m$ = ""
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    m$ = m$ + "22222222" + Chr$(13)
    m$ = m$ + "........" + Chr$(13)
    arrTileText(255) = m$

End Sub ' GetTileText

' ################################################################################################################################################################
' END TILE DEFINITIONS @TILE
' ################################################################################################################################################################
Reply
#7
(07-02-2025, 08:48 PM)madscijr Wrote: Steve, why do you use _UFontHeight instead of _FontHeight? _FontHeight is working for me, just curious why the different function? 

Okay, here's the skivvy on those two functions:

_FontHeight is basically an old font handling tool which reports back to you the size of your font that you loaded.  It's kinda primitive and is *always* the value that you set.  If you _LOADFONT("courier.ttf", 17, "monospace"), it's going to be size 17.   It takes the value you specify and makes it the absolute size of your font.

_UFontHeight doesn't do that.  Instead, it looks at the *base* of the font and makes the size according to that.   In many cases, those values will match, or only be 1 or 2 pixels different.

So, what's the difference?

Imagine a fairy tale font with a lot of flourishing under the capital letters, like you sometimes see at the start of pages in those style books.  That's a lot of UNDER-font and OVER-font, and _PRINTSTING and _FONTHEIGHT don't count those pixels in most cases.  They'll draw the letters, but cut off those flowing, curvy, extra flourishes.  You'll lose part of the font, which will pack things together nice and neatly and give you more lines on the screen.

_UPRINTSTRING and _UFONTHEIGHT tracks the extra space for over-font and under-font usage.  If you specify _LOADFONT("fairytale.ttf", 20, "monospace"), with _PRINTSTRING and _FONTHEIGHT, the font is going to be 20 pixels in size.  With _UPRINTSTRING and _UFONTHEIGHT, it might be 24 or 28 pixels in height, making certain that it reserves extra space for those excessive flourishes.

That's the difference in a nutshell.  PRINT and _PRINTSTRING doesn't reserve that extra over/under space for fonts, _UPRINTSTRING does.  You can end up with text being truncated and cut off (which could, in most cases, shorten the tail of p's, q's, or even in extreme cases, make rendering underline characters impossible) by using PRINT or _PRINTSTRING, depending on your font choice.  That won't happen with _UPRINTSTRING as it reserves that extra space and reports it with _UFONTHEIGHT.

*Most* of the time, it shouldn't be much of an issue for you, unless you're trying to print unicode characters.  (Which is what _UPrintString is specifically designed to do.)  Those all-important accents and such... those can be cut off with PRINT or _PRINTSTRING...  

So, since you were using _UPRINTSTRING, I swapped in the use of _UFONTHEIGHT to go with it.  The size isn't going to match up to your normal PRINT/_PRINTSTRING columns, as it reserves that little extra space to *FULLY* draw each character and not overlap on top of each other.   

It's why I wrote in my comments that you might want to swap to _PRINTSTRING instead, if you're going to go with _FONTHEIGHT and keep those rows matching PRINT statements...  It *could* truncate portions of your text (such as the accents above the standard font, or underlines under the standard font, or deep flourishes in various script fonts...), but if you're going to be PRINT for everything else, it's probably what you want to use for positioning and sizing here -- even if it does mean not drawing the font fully onto each line.
Reply
#8
That's very useful to know, thanks for explaining. 
In this case, it's just using a monospace font of 8x8 characters defined inside the program. 
But for other fonts I can see how that would make a difference.
Reply
#9
(07-02-2025, 10:24 PM)SMcNeill Wrote:
(07-02-2025, 08:48 PM)madscijr Wrote: Steve, why do you use _UFontHeight instead of _FontHeight? _FontHeight is working for me, just curious why the different function? 
Okay, here's the skivvy on those two functions:

_UFontHeight doesn't do that.  Instead, it looks at the *base* of the font and makes the size according to that.   In many cases, those values will match, or only be 1 or 2 pixels different.
I have a followup question - I notice there's no _UFontWidth, so for monospace we should use _FontWidth and for non-fixed-width fonts _UPRINTWIDTH ?
Reply
#10
There was never an issue with font width reporting, so no need for an additional _UFontWidth command.  Both Print and _UPrintString will print the same width characters.  The difference is in the height alone, which is why there was need for a _UFontHeight to slide in there for the different results than what _FontHeight would report for you.  Wink
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
Question Experimenting with a "StringList" type for simpler handling of string arrays/lists Heimdall 18 1,183 12-19-2025, 12:51 PM
Last Post: Heimdall
  Font Size in Threads Dimster 5 351 12-12-2025, 04:49 PM
Last Post: Dimster
  Sub not Reconizing Dim as String pmackay 18 1,436 10-16-2025, 03:32 PM
Last Post: pmackay
  error doing image collision detection with _MemGet madscijr 55 4,649 10-01-2025, 03:25 PM
Last Post: bplus
  Problem with font in Teletext browser. SquirrelMonkey 7 734 08-27-2025, 11:38 AM
Last Post: BDS107

Forum Jump:


Users browsing this thread: 1 Guest(s)