Welcome, Guest |
You have to register before you can post on our site.
|
|
|
_TITLE and extended ASCII characters. |
Posted by: Pete - 11-15-2022, 04:25 PM - Forum: Help Me!
- Replies (37)
|
|
I'd like to put CHR$(240), three small horizontal lines, in my title bar, but the _TITLE function cannot convert extended ASCII characters. Is there another method that wold print the 3 horizontal bars into the title bar so it doesn't look like this: ð
Pete
|
|
|
DAY 009:_PutImage |
Posted by: bplus - 11-15-2022, 12:00 AM - Forum: Keyword of the Day!
- Replies (46)
|
|
Here is what it looks like in Wiki:
Quote:_PUTIMAGE [STEP] [(dx1, dy1)-[STEP][(dx2, dy2)]][, sourceHandle&][, destHandle&][, ][STEP][(sx1, sy1)[-STEP][(sx2, sy2)]][_SMOOTH]
Yikes! but all we are doing is copying an image from Source Image Handle and rectangular section to Destination Image Handle and rectangular section.
After working with it for awhile now this is what I see:
(for the moment ignore all that STEPping)
_PutImage rectangle, handle, handle, rectangle
2 line rectangles on either end of the parameters.
2 Image handles in the middle of the parameters.
What belongs to what, the order is: D,S,D,S
D for Destination where you want the rectangle image to go.
S for Source where the image is coming from.
(Kind of an odd sequence but... let us continue.)
Now Rectangle knowledge from working with Line (left, top)-(right, bottom) format comes in handy here (as does the practice with Step). (top, left) corner to (bottom, right) corner defines the rectangle space we are grabbing from Source and then pasting into the Destination.
If you want to fill the whole destination rectangle with the image, leave destination rectangle blank and it will fill the destination image by default. Same with the other end, if you want to use the whole image from the Source handle leave the Source rectangle blank as default.
Where do image handles come from?
Well most important is the current screen image, it is 0 automatically.
You can start an Image handle, say IH& Long Type from
IH& = _LoadImage("Filename.ext")
or
IH& = _NewImage(width, height, colorMode) ' starts a container to draw and/or _PutImage and/or start font and print.
STEP allows you to use the last graphics command (x, y) as the start for the next graphics, a very handy use of step for images is to start with the (x,y) location of the top left corner of the rectangle and -Step(ImageWidth, ImageHeight) instead of adding width to x height to y and finding the absolute position value for the 2nd (x, y).
I think this covers the most common uses of _PutImage there are plenty more details to go over, maybe pick those off with discussion?
|
|
|
Function to calculate FPS with another FPS |
Posted by: TerryRitchie - 11-14-2022, 05:37 PM - Forum: Utilities
- No Replies
|
|
In another post I asked for help in how to determine slower frame rates within a master frame rate for a Pac-Man clone I'm working on. DSMan decoded some of the original Ms. Pac-Man assembly code to reveal how it was being accomplished.
I took that idea and created a function that will determine any frame rate within a master frame rate up to 60 FPS. The function and demo code created to show the function in action are below. With this function you can change the frame rate of a game at any time and still maintain any object's desired slower frame rate.
There is an anomaly in the slope that you'll see as it is drawn. I'm not really sure what to make of this? Any ideas?
Code: (Select All) ' Getting slower frame rates within a master frame rate
DIM F(60) AS INTEGER ' frame counters
DIM FramesPerSecond AS INTEGER ' game's frames per second
DIM Dummy AS INTEGER ' used to set intital data
DIM Frame AS INTEGER ' frame counter
DIM Wipe AS INTEGER ' trigger a clearing of frame counters
DIM x AS INTEGER ' cycle through 1 to FramesPerSecond
'+--------------+
'+ Example code |
'+--------------+
Frame = 0 ' reset frame counter
FramesPerSecond = 60 ' set game FPS
SCREEN _NEWIMAGE(640, 480, 32) ' create graphics screen
DO ' begin various FPS loop
Dummy = FPS(-1, FramesPerSecond) ' create frame data set
DO ' begin demo loop
_LIMIT FramesPerSecond ' limit loop to game's frame rate
CLS ' clear the screen
LOCATE 2, 2: PRINT "Counting down from 60 FPS to 1 FPS" ' inform user of progress
LOCATE 3, 2: PRINT "Frames per second ="; FramesPerSecond
LOCATE 4, 1: PRINT INT(Frame / FramesPerSecond) + 1; "of 5 seconds elapsed"
Frame = Frame + 1 ' increment game frame counter
Wipe = 0 ' reset frame counter wipe trigger
IF Frame = FramesPerSecond * 5 THEN Frame = 0: Wipe = -1 ' when 5 seconds has elapsed reset frame counter and trigger a wipe
FOR x = 1 TO FramesPerSecond ' cycle through all available frame rates
IF Wipe THEN F(x) = 0 ' clear frame counter if wipe triggered
IF FPS(x, Frame) THEN F(x) = F(x) + 1 ' is this frame rate's frame active during this frame in the game?
LINE (10, 200 - x * 2)-(10 + F(x), 200 - x * 2) ' yes, draw a line showing progress of frames counted
NEXT x
_DISPLAY ' update the screen with changes
LOOP UNTIL Wipe OR _KEYDOWN(27) ' leave when user presses the ESC key or a wipe triggered
FramesPerSecond = FramesPerSecond - 1 ' decrease the game's frames per second
IF FramesPerSecond < 1 THEN FramesPerSecond = 60 ' reset the game's frame rate when needed
LOOP UNTIL _KEYDOWN(27) ' leave when user presses the ESC key
SYSTEM ' return to the operating system
'--------------------------------------------------------------------------------------------------------------------------------------------+-----+
FUNCTION FPS (TargetFPS AS INTEGER, Frame AS INTEGER) STATIC ' | FPS |
'+---------------------------------------------------------------------------------------------------------------------------------------+-----+
'| Returns frame rates embedded in a master frame rate |
'| |
'| Usage: dummy = FPS(-1, 60) When the target FPS is less than 1 a new data set is created for the requested frame rate |
'| MoveNow = FPS(24, InputFrame) Will return -1 (TRUE) if input frame is on during the target frame rate |
'| |
'| Example: IF FPS(Object.FPS, GameFrame) then Move(Object) Move the object if the object's frame is on within the game's current frame count |
'+---------------------------------------------------------------------------------------------------------------------------------------------+
DIM f AS INTEGER ' frame counter/value
DIM b AS SINGLE ' bit counter/step rate
DIM FramesCreated AS INTEGER ' numer of frames calculated
IF TargetFPS < 1 THEN ' calculate frame counters?
REDIM FPSnum(Frame) AS _UNSIGNED _INTEGER64 ' yes, resize 64bit value array
REDIM Bit(Frame) AS _UNSIGNED _INTEGER64 ' resize bit value array
FOR b = 1 TO Frame ' cycle through bit values
Bit(b) = 2 ^ (b - 1) ' calculate value of each bit
NEXT b
FOR f = 1 TO Frame ' cycle through requested frames
FOR b = 1 TO Frame STEP (Frame / f) ' cycle through bits at current frames per second
FPSnum(f) = FPSnum(f) + Bit(b) ' calculate which bits are turned on
NEXT b
NEXT f
FramesCreated = Frame ' remember number of frames created
EXIT FUNCTION ' leave function
END IF
IF FramesCreated = 0 THEN EXIT FUNCTION ' no data created yet, leave
f = Frame ' don't modify input value
IF f < 1 THEN EXIT FUNCTION ' invalid frame number requested, leave
IF f > FramesCreated THEN f = f MOD FramesCreated ' keep frame number within range
IF FPSnum(TargetFPS) AND Bit(f) THEN FPS = -1 ' report if bit is on for current frame in requested FPS
END FUNCTION
'---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
BAM "SDLC" Tools |
Posted by: CharlieJV - 11-14-2022, 04:43 AM - Forum: QBJS, BAM, and Other BASICs
- No Replies
|
|
Just in case you geek out on this kind of stuff or are otherwise interested/curious...
SDLC = Software Development Life Cycle
I'm just in the process of laying out BAM's "SDLC" Tools, starting out with the basics:
- Idea Manager
- Requirement Manager
- Change Request Manager
- Issue Manager
- Task Manager
Imagine you're working on a complex QB64PE project.
You have an idea, you add it to BAM via the Idea Manager.
That Idea may eventually get deleted/dropped, or may transition into being a new Requirement, or transition into being a Change Request to a previously fulfilled Requirement (a requirement can be a defined need to solve a defined problem, might be a feature, might be a constraint).
If it is a new requirement, eventually that requirement transitions into being a task. When that task gets completed, it transitions to being a fulfilled requirement AND a completed task.
If a Change Request, that change request is linked to some previously fulfilled requirement, and eventually the change request transitions into being a task. When done, that task transitions to being a completed task AND an implemented change request.
An issue (problem/bug/whatever), that issue might be related to a previously fulfilled requirement, and eventually the issue transitions into being a task (AND an issue in the process of being resolved). Or the issue transitions into being a new requirement, and the new requirement eventually transitions into also is a task (AND an issue being resolved).
Something like that.
Just piecing together "flow" to have an idea how to build the "managers" of all this info, and the "editors" for all of this info.
|
|
|
Clouds |
Posted by: james2464 - 11-13-2022, 08:12 PM - Forum: Programs
- Replies (6)
|
|
Not the most useful program, but I enjoyed making it.
3 mysterious monoliths have been placed on the shore. You can use your mouse wheel while hovering over them to find out what they do.
Code: (Select All) 'clouds
'james2464 - Nov 13 2022
Dim Shared scx, scy, ct As Integer
scx = 800: scy = 600
Screen _NewImage(scx, scy, 32)
Const PI = 3.141592654#
Randomize Timer
Dim Shared bg&, cd&(200)
bg& = _NewImage(scx + 1, scy + 1, 32)
For ct = 1 To 180
cd&(ct) = _NewImage(301, 151, 32)
Next ct
Dim Shared c(100) As Long
colour1
Type movingcloud
x As Single
y As Single
xv As Single
s As Single
End Type
Dim Shared cloud(180) As movingcloud
Dim Shared cloudtotal, wind
cloudtotal = 180
wind = 1.0
makeclouds
background1
_PutImage (1, 1)-(scx - 1, scy - 1), 0, bg&, (1, 1)-(scx - 1, scy - 1) 'take snapshot of screen
cloudtotal = 30
'=====================================================
Do
_Limit 30
'------------------- mouse stuff -------------------
Do While _MouseInput
mx% = _MouseX
my% = _MouseY
If mx% > 400 And mx% < 430 Then
If my% > 480 Then
cloudtotal = cloudtotal - _MouseWheel * 2
End If
End If
If mx% > 500 And mx% < 530 Then
If my% > 480 Then
wind = wind - _MouseWheel * .2
End If
End If
If mx% > 600 And mx% < 630 Then
If my% > 480 Then
For ct = 1 To cloudtotal
cloud(ct).y = cloud(ct).y - _MouseWheel * 5
If cloud(ct).y > 390 Then cloud(ct).y = 390
If cloud(ct).y < 10 Then cloud(ct).y = 10
'adjust speed and scale accordingly
cloud(ct).xv = Rnd * .3 + ((400 - cloud(ct).y) / 500) * 5
cloud(ct).s = ((400 - cloud(ct).y) / 500) * 1.5
Next ct
End If
End If
Loop
If cloudtotal > 180 Then cloudtotal = 180
'----------------------------------------------------
Cls
_PutImage (0, 0)-(scx, scy), bg&, 0 'draw background
For ct = 1 To cloudtotal
_PutImage (cloud(ct).x, cloud(ct).y)-(cloud(ct).x + (500 * cloud(ct).s), cloud(ct).y + (150 * cloud(ct).s)), cd&(ct), 0 'cloud
cloud(ct).x = cloud(ct).x + (cloud(ct).xv * wind)
If wind > 0 Then
If cloud(ct).x > 1000 Then
cloud(ct).x = -800
cloud(ct).y = Rnd * 555 - 10
If cloud(ct).y > 390 Then
cloud(ct).y = Rnd * 30 + 360
End If
newcloud
End If
Else
If cloud(ct).x < -800 Then
cloud(ct).x = 1000
cloud(ct).y = Rnd * 555 - 10
If cloud(ct).y > 390 Then
cloud(ct).y = Rnd * 30 + 360
End If
newcloud
End If
End If
Next ct
_Display
Loop
Sub background1
Cls
'sky
Line (1, 1)-(scx - 1, scy - 1), c(1), BF
y = 400
For t = 1 To y
m = 255 * ((400 - t) / 400)
c(99) = _RGBA(150, 150, 255, m)
Line (1, t)-(scx - 1, t), c(99)
Next t
'water
ty = scy - y
For t = y To scy
t2 = ((scy - t) * 2)
m = 255 * ((scy - t2) / scy)
c(99) = _RGBA(50, 50, 150, m)
Line (1, t)-(scx - 1, t), c(99)
Next t
'beach
x = scx
For t = 410 To scy
r = Rnd * (x / 30 + 2)
x = x - r
c(99) = _RGB(150, 150, 130)
Line (x, t)-(scx, t), c(99)
Next t
'control monoliths
c(99) = _RGB(120, 120, 100) 'cloud total
Line (400, 480)-(430, scy - 10), c(99), BF
c(99) = _RGB(100, 130, 100) 'wind
Line (500, 480)-(530, scy - 10), c(99), BF
c(99) = _RGB(130, 100, 100) 'distance
Line (600, 480)-(630, scy - 10), c(99), BF
End Sub
Sub colour1
c(0) = _RGB(0, 0, 0)
c(1) = _RGB(255, 255, 255)
c(2) = _RGB(255, 255, 0)
c(3) = _RGB(255, 0, 0)
c(4) = _RGB(0, 255, 0)
c(5) = _RGB(0, 255, 255)
c(6) = _RGB(255, 0, 255)
c(7) = _RGB(30, 30, 255)
c(8) = _RGB(150, 150, 250)
c(9) = _RGB(250, 150, 150)
c(10) = _RGB(150, 250, 150)
c(11) = _RGB(150, 150, 255) 'sky blue
c(12) = _RGB(150, 75, 125) 'cars
c(13) = _RGB(255, 0, 0)
c(14) = _RGB(50, 150, 50) 'ground
End Sub
Sub makeclouds
'create cloud images with clear background
For ct = 1 To cloudtotal
Cls 'cloud 1
Line (0, 0)-(302, 152), c(1), B
b = Int(Rnd * 110 + 3) 'number of circles per cloud
For t = 1 To b
fct = fct + 1
If ct / 6 = Int(ct / 6) Then
x1 = Rnd * 120 - 60
Else
x1 = Rnd * 300 - 150
End If
If x1 < -120 Then x1 = x1 + 50
If x1 > 120 Then x1 = x1 - 50
y1 = Rnd * 70 + 60 - (t / 5)
d1 = Rnd * 14 + 7
If y1 + d1 > 120 Then y1 = 120 - d1 - Rnd * 10
'circle construction
t3 = Int(Rnd * 400) + 30 'resolution
For t2 = 1 To t3
rr = Rnd * 6.3 'random radian
rl = Rnd * (d1 * .8) 'random line length
dx = Cos(rr) * rl: dy = Sin(rr) * rl
dx2 = x1 + dx
dy2 = y1 + dy
g1 = 240 - y1 * .3 'darkness
g2 = 240 - y1 * .3 'darkness
g3 = 255 - y1 * .3 'darkness
a = 255 - (rl * 9)
c(99) = _RGB(g1, g2, g3)
Circle (150 + dx2, 10 + dy2), 1, c(99)
'Sleep
Next t2
Next t
_PutImage (1, 1)-(301, 151), 0, cd&(ct), (1, 1)-(300, 150)
_ClearColor c(0), cd&(ct)
'starting position
cloud(ct).x = Rnd * 1400 - 600
cloud(ct).y = Rnd * 555 - 10
If cloud(ct).y > 390 Then
cloud(ct).y = Rnd * 30 + 360
End If
newcloud
Next ct
End Sub
Sub newcloud
'initial speed
cloud(ct).xv = Rnd * .3 + ((400 - cloud(ct).y) / 500) * 5
'scale
cloud(ct).s = ((400 - cloud(ct).y) / 500) * 1.5
End Sub
|
|
|
Seamless Patterns for backgrounds SUB |
Posted by: Dav - 11-13-2022, 04:19 AM - Forum: Programs
- No Replies
|
|
I put this pattern SUB together for a puzzle game but decided not to use it. It will tile 1 of 40 different small seamless patterns on the screen. You can specify the color and size of the patterns. The DEMO code shows all the patterns and how to use the SUB.
The main thing I got out of making this was coming up with a tidy way to place/retrieve small graphics for a program in one SUB. Plan to use this method sometimes in future projects.
- Dav
Code: (Select All) '=============
'PATTERNS.BAS
'=============
'QB64PE code by Dav, NOV/2022
'Collection of 40 different seamless patterns.
'Can be used for making backgrounds for games.
'Patterns have transparent background and can be
'layered on top of each other for different effects.
'Pattern color and size can be specified.
'===================================================
'DEMO below randomly shows all 40 available patterns
RANDOMIZE TIMER
SCREEN _NEWIMAGE(900, 700, 32)
DO
'get a random pattern...
style = INT(RND * 40) + 1 'get random pattern number
size = INT(RND * 200) + 100 'get random pattern size
clr& = _RGB(RND * 255, RND * 255, RND * 255) 'random color
'call SUB, it will tile the pattern on the entire screen.
tile style, size, clr&
'show what pattern number and size is being used
LOCATE 1, 1: PRINT "Style:"; style; ", size:"; size;
'a demo effect, blur the screen, removes jaggies..
FOR x = 0 TO _WIDTH - 1
FOR y = 0 TO _HEIGHT - 1
p1~& = POINT(x, y)
p2~& = POINT(x + 1, y)
p3~& = POINT(x, y + 1)
p4~& = POINT(x + 1, y + 1)
p5~& = POINT(x - 1, y)
p6~& = POINT(x, y - 1)
p7~& = POINT(x - 1, y - 1)
p8~& = POINT(x - 1, y + 1)
p9~& = POINT(x + 1, y - 1)
r = _RED32(p1~&) + _RED32(p2~&) + _RED32(p3~&) + _RED32(p4~&) + _RED32(p5~&) + _RED32(p6~&) + _RED32(p7~&) + _RED32(p8~&) + _RED32(p9~&)
g = _GREEN32(p1~&) + _GREEN32(p2~&) + _GREEN32(p3~&) + _GREEN32(p4~&) + _GREEN32(p5~&) + _GREEN32(p6~&) + _GREEN32(p7~&) + _GREEN32(p8~&) + _GREEN32(p9~&)
b = _BLUE32(p1~&) + _BLUE32(p2~&) + _BLUE32(p3~&) + _BLUE32(p4~&) + _BLUE32(p5~&) + _BLUE32(p6~&) + _BLUE32(p7~&) + _BLUE32(p8~&) + _BLUE32(p9~&)
PSET (x, y), _RGB(r / 9, g / 9, b / 9)
NEXT
NEXT
_DISPLAY
_DELAY .3
'once in a while, show 25 random tiles at random places.
'This shows how to grab single tiles, and use however you wish.
IF INT(RND * 10) = 1 THEN
FOR d = 1 TO 25
LINE (0, 0)-(_WIDTH, _HEIGHT), _RGBA(0, 0, 0, 32), BF
sz = INT(RND * 100 + 100) 'random size
tl = INT(RND * 40) + 1 'random tile of 40
t& = _NEWIMAGE(sz, sz, 32): _DEST t&
tile tl, sz, _RGB(RND * 255, RND * 255, 255): _DEST 0
_PUTIMAGE (RND * _WIDTH, RND * _HEIGHT), t&
LOCATE 1, 1: PRINT "Style:"; tl; ", size:"; sz;
_DELAY .1: _DISPLAY
_FREEIMAGE t&
NEXT
END IF
'for demo, fade previous pattern mostly out, leaving some.
'this is just to show that patterns can be layered on top.
LINE (0, 0)-(_WIDTH, _HEIGHT), _RGBA(0, 0, 0, 160), BF
LOOP UNTIL INKEY$ <> ""
SUB tile (pattern, size, clr&)
'SUB Coded by Dav, NOV/2022.
'tile SUB will tile 1 of 40 patterns on screen.
'The tile patterns are seamless.
'pattern: number of pattern to use
'size: size of tile in pixels (100 is normal)
'clr&: color of pattern
'----------------------
'By default, the SUB tiles the pattern on entire screen,
'but you can retrieve just one tile to use by doing this:
'Make a new image of the tile size you want, and _DEST to it.
'tile25& = _NEWIMAGE(300, 300, 32): _DEST t&
'Now get the tile to the image, then reset _DEST back to main
'tile 25, 300, _RGB(255, 0, 0): _DEST 0
'After that you can _PUTIMAGE tile25& anywhere in your code.
SELECT CASE pattern
CASE 1
A$ = ""
A$ = A$ + "haIkF7T3233345mO3bmofbffP7`27;TMm\mkWX:[H]^<fVIHMBQ8LBQ:D<a4"
A$ = A$ + "N41jQPd5VGnaiFLoC1AhT2EXHR9<1[0m##j2fWKQiE;9o74R`95Z#a4CH2V1"
A$ = A$ + "jQPC:<Wo;E2i?hm?Ui?giF<QW#PN88M1k;VH9iG?DZS:4QC:DQR9V`O?#?4T"
A$ = A$ + "^0BClfnjc#HQSWjX2EXHR9<1[0m##j2fWKQiE;9o74R`95Z#a4CXP1jQPd5#"
A$ = A$ + "DQT;Si9LlD7EX25C<QW#PN88M1k;VhE9%%L2"
CASE 2
A$ = ""
A$ = A$ + "haIkF6T433323TO#noofNf=8:bQR5MZ>:?KmT4Z#VIfekbl<3?l34<fKB#j["
A$ = A$ + ":A:5lNHB4Q3=cQ`<FT02OKc`85AHF02=QW[]8J2`IhK0MJNR>N>^JikA;cE0"
A$ = A$ + "A3\1AG93L0K#XIBm:QVK>gPXSN9NS0QSNl47mb7Li>nQj7BTBB6bd#lJ3[9Z"
A$ = A$ + "MMgQFK7GV0JB#HgTgYjC\ck:l=P86IE=H6<209N2M[ZaS#28:a:>Y_\4cZLG"
A$ = A$ + "QoD14<fKB#j[Ji^Dj7QXQ0iBG\L\5Te^X?<;8oo^38l\]KRVXSk`Y8Gd3N^Z"
A$ = A$ + "JQ07[#oEec^0A38Li^_NM#=CZgH[FZCnGE[2RSNi3^Lg3[ZYBi^>2IJ8\\Qe"
A$ = A$ + "4e^^k#[]S;C0=98\KbkDm9NLE]D4S\Z6<361P4?Q^Eeh35914UH5WdGFRIE^"
A$ = A$ + "k508%%L2"
CASE 3
A$ = ""
A$ = A$ + "haIkF6U333323eg0^ogf9]e>1Y1Y6=7GbDh;CNO<=JRa0O:kKQHA4L`^N:G0"
A$ = A$ + "b>Oi09W_1GKbdo:8[Ii0VGKmd40VCNd4\2X0Ngi=I\90VoO41O?0LTnJZP4="
A$ = A$ + "egPCjg0oQU43iJ^iLDPI94JPXabD01G]91PRI5:j]TRVQKU;ik?ZCR\a1:b<"
A$ = A$ + "d4NaJeT04SZU04<[0LTnjU3TXgIhNVBanSR^iLDPI94J0[eJQ?8hZ=90D<[#"
A$ = A$ + "A_U\c`A_T_oXVK>_7#A^Tc>okoPG070]XJY01c:07Y_Ni09jM6^WYD\oXXK>"
A$ = A$ + "75HF2Q6`J]Fh32^JC205c:DdK9k<Ld;ik?ZiVck1DT;i\con?h5`1#;ZF:#`"
A$ = A$ + "\2`Aj[G>#RNWQkI:5k?:jVcA1VU#H12>>T1_04l;%%h1"
CASE 4
A$ = ""
A$ = A$ + "haIkF_T3332340M^1nnOK[D9903>]RXIlZhUn5T3o189R8bBoD8QnnmI=iQ#"
A$ = A$ + "RLl;94H9Ro1lXboK1=Bfc;66<?`QdB4V0`0\2ce^;<\O;^4[0Z0JTK`O<d1["
A$ = A$ + "0ZIRJMIR1HIWP>0FQPQ`4`5d9PQ;2d1LNLNIWF0L86bb;6^mT;M#FjfZ?I#F"
A$ = A$ + "OCK5bTSaDQ`kKhf0V>m:<1P1H5V[MGHHoFL9F1D1d8g`?SMnfKKa#7\2XV9Z"
A$ = A$ + "eU96PUM2j0H5262C0G#W06^8#7`iaiUMJ1`QH8;okKhBPl38UFjgg`]9`knU"
A$ = A$ + "3CWN5V0`0\2ce^;<\O;^4[0Z0JTK`O<d1[0ZIRJMIR1HIWP>0FQPQ`4`5d9P"
A$ = A$ + "Q;2d1LNLNIWF0L86bbon6^48[_Y]2IbaHZ#hm=LK0CWN5V0`0\2ce^;<\O;^"
A$ = A$ + "4[0Z0JTKhWa>Ok]]HX3F1Dc4ejb43`b>1M0\213Q9P;XC03G4X3hlhlb>]0h"
A$ = A$ + "#<TUG;TVn^OYW1O0nDPf%%%0"
CASE 5
A$ = ""
A$ = A$ + "haIkH^U[33234UM0koMkmSZ81N6o2<dDY;o5<WJ8`<hdNKXe7Jc?<>X:8JfM"
A$ = A$ + "UVXS4]6RHW372<7=Ic=7N4#>00I_kC#04MKa7RP2<e_hUmKRXcRX#8?m7VX3"
A$ = A$ + "1D809V;1PhA<ZSki9D7l0FOGR?#Zo63?7Shcc#o?[ONjiCd\45mJ?4a0S<#Q"
A$ = A$ + "4[;3B#L<3PJ]nX4baLN2hZX:80ATE`U882Ek`Y9HRC21LY##2E3061f2ATJF"
A$ = A$ + "YNcC0RK\OldY9ACfbCL3mAiUZY8d3b_1a?BYJI847^cO[V;18S[W0=;:T07?"
A$ = A$ + "G9UUH>VRLFeDDWP>H[5hZ_49;^4K]m\4b0Z4;LX6fR>VDSoKEF>T^l7ikJ5W"
A$ = A$ + "l>EaMjadV8I9HOl32\gU`H>f^d0X;F>TWRlcQ=1K:#JNiH1Rd[3CR_cnACfL"
A$ = A$ + "cQ7aGAOL122#1nEGagm6gOLUk1?HYJi[00=;L8\<HhHI9`1fGZD=MCA]CeT9"
A$ = A$ + "lHP29fYD]`4Gi#m;E>7Th2OG[L<WWhoo7>U`<e?Q#N:::1J3H#P]#4YVEP\>"
A$ = A$ + "1a=f?NjdTX9Ki9^Qnh:5gM3oZGZCm;_h>#6G?1JFD81>N^B:;aL<5i\ZYX>1"
A$ = A$ + "M`F;`EO9BFL9fJkI9T1D907k`4T8J40B#2J4=R5=0lcQUeW?QhTgAnfi5^Vh"
A$ = A$ + "WioQS0hDJP3197TNbDn1B<?7Vdn4S0]Lh#l70h:S%%%0"
CASE 6
A$ = ""
A$ = A$ + "haIkF7TT423256VK0goKk<CGSbS0h2cOfem6UlIe64`BcnmWog?koO[WS0^k"
A$ = A$ + "J#8H`W3nJ0:haQ:32JJjCi?1dD^`P^VSBWbN`mMAB_[WRP`MaiC`9PHYdi70"
A$ = A$ + "^b]e]04DK8jj>8PYj54\4HCGe6PDJR0D`M1Z;Q1bCbfm65l#9R0<CRd0>Xkf"
A$ = A$ + "=^?N5TW477Ag6:M0d#\Te`TPfALES0QD?P_601WkO>WDB#8H`MY95P2NLXbP"
A$ = A$ + "PVVnDnC0Wl]9M=7U>UmPdDbhhcf#ie0h#\Djl30GifjF02Z=4MM74`Dm22F2"
A$ = A$ + "\Y[J3#:=A0:h^0eU`0i9IkNS2NX4A0V9AJ07dMk6g7_2bCRSSXK3U>0J8FbJ"
A$ = A$ + "h_O3gB?kanWc9U4426LGJB1XP77Z<8XYY?Uo4`9OKBGcAYCI?8=U<>n\=DN="
A$ = A$ + "0>4;U>o0`E^]^5PPJ3AGg11<E_PPU0KjZf0TBC4P2^;#M9<#NBf^gXP7:A4P"
A$ = A$ + "IBT6`1Mg^ama[PlThh8jf#Y3P6RU\6nkg`]dcN\oiLB91QP1gUVD0:haQ:32"
A$ = A$ + "JJjCi?1LbgVdeLDjDf3BC9SS?K3UG3P3aBYc?0LUK[K18Xf#deM#0Ce;8H9`"
A$ = A$ + "V^Z=0Yd41XPk2DG23TWT]k=:hQB41HV4Y1L#g]KLOl:8?9>>R^=Dj0XQH9[Q"
A$ = A$ + "on=L2lSo%%L2"
CASE 7
A$ = ""
A$ = A$ + "haIkH7U3332330=gPLo_]CkSY1SHQ6HWBZJoYFlZd6[d4F=c<omQ5L#3l?7j"
A$ = A$ + "0g1B]0g1BeQfcJPa4M8<^=d_H810l5IK`RR\QVR<bP4V7P\<#djZf??E?Od3"
A$ = A$ + "IlLN:e[>e:eCQc\ci2PQ6W9Tan[2^:]0Lbb3VOC[4Pk0Y6#O#14593X\:8UN"
A$ = A$ + "]gXnPj1h4T746g6bHM5JAmco=86^d2b:Pc\ci2PQ6W98KoEX?>N`dOgf7nN_"
A$ = A$ + "1_AX20^3TZ3]We0S92#jm1E1gXnPj1h4T70b?_7^IPVWco1bXNeYFYN:LVM>"
A$ = A$ + "G0<dh<QoOgB[03GUF0>Ii1c_YE2`MPD3X?X0RRT1DF5TB_fKDO#m0L2b32SK"
A$ = A$ + "3I\^2]Xnim`53GJ1I5`IfiL1`#Sc4T\oZG`2%%L2"
CASE 8
A$ = ""
A$ = A$ + "haIkF7T2334344DoPiooKcEC26K1IJHQN?ZjP`H#d9GNcUGnO`#031<4`#03"
A$ = A$ + "1<00`g1`oSd7BO8m1PEPL9i^iEPY?lml2`?c5^5#^CRLX4iB9bYBTKUf`m4H"
A$ = A$ + "3g:`6^g2Y?Tn#j30[`6>Kh>M`6^EP=L?1f`]2\Qc6^2#j3Y?0\2Kh\Qkd1Kh"
A$ = A$ + "F1f`m4H3g:`6>Kh:0Y?Tn0`:\Qc6^C7\QK5Lf=LO0DT2%%h1"
CASE 9
A$ = ""
A$ = A$ + "haIkF7UZ433256fMPkoMkLi>SA<HJQbigWjlD;OI#C8NX^k^5obWnkI]`RPP"
A$ = A$ + "B302oCh`T5Q5\;Z^<h[hWn;2Q>A8lKcemG42Q\KjQO3\2Q^3]jb43U078`FC"
A$ = A$ + "YX#V5X36Y8]GR?<WnD0Nb>P3R#XCT3SETYRXLFH_1T2Ugg3L42ifT1:=08TS"
A$ = A$ + "lT`T5Q5\;Z^<8Beh1hTng_Qk>Xk#[^<a#9`12\eD::TI1jPA:BkUh3cY?5PW"
A$ = A$ + "\3hP84j4i`H5IZ8:W5fK0Y#imm07Q#^=IPB302i8?9<IAH1kRZ;3RD=N0>Yo"
A$ = A$ + "mKh^3j>dZ;C<D2LP0K=UR2IFP>HTRdN9n`LjC1h9k0>82Q>A><FAV:RbIQm6"
A$ = A$ + "#:DNO?`A8TKC6Xd0P#>bC2CF4F`^XjbP8ES7PCjOo6^kP^3]jb43U078`FCY"
A$ = A$ + "X#V5X36Y8]GR?<WnD0Nb>P3R#XCT3SETYRXLFH_1T2O0Cg3M%%%0"
CASE 10
A$ = ""
A$ = A$ + "haIkH_U\422340UM#fokfk;MTT^3#CHniF3OY078R1\:]6]H^K\dVFBlm]4D"
A$ = A$ + "H#3CR\h7BdhZ`\hXZ;nUT7XoL=Y3RRo8F6`hSYXhRH?g4dFbTX8j[:2<BL_U"
A$ = A$ + "hiIceDgel9ABLg80`8LOAg[ZAQN=aEFM04f7471EaM^RU3J`A6[;lmU<H`H\"
A$ = A$ + "[0G9B1jRk[Wn:6Fi55]d\C4X;NM=;ece;XN9QK58#\8#G09;D2M:D4TX8l`k"
A$ = A$ + "ZEF<H1];XcVRE5=OQ#lMBFPK>91Z[GWA#>k[T8[TfYJ=D=LG#lFFf]`DD=mI"
A$ = A$ + "Zh<K36:>bfiaRcM\DZhY2SB6<5[:j___9ghDk3;#T\oWkb4C2Ah5k6RHB]A8"
A$ = A$ + "S?<JZ0gLfC<F6U^0Z178_CG#9haBe4d4ChFLBT41BBNJAAKB8BfEY;J^JcB9"
A$ = A$ + "::JM?M\l3bJR^XkeDB<m<^K;Jg204ZXRh:W>2JnBAa1nm>c5`DB;3>ML5aJ]"
A$ = A$ + "\A3_W`eR[#WOIocoQ[ThX7;U9>ha[iRSmIRAR3mi^a2b7Q7Wm\Sh:[>02k3R"
A$ = A$ + "SPZh>Gab1=h8Se5nnB6<H<fEP[4Y0MameCO53[lRRFJf92d5_^VUjij5D_T`"
A$ = A$ + "]248F4X;PT5:Q>5:2BD4NhMe:;6\Pf5dICaZRV_#8n>9;`=WT0mcoQ;f#e`M"
A$ = A$ + "1aKIIg2CaWo3gBRcM\DZhY2SB6<5[:j___9ghDk3;#T\oWkb4C2Ah5k6RHB]"
A$ = A$ + "A8S?<JZ0gLfC<F6U^0Z178_CG#9haBe4d4ChFLBT41BBNJAAKB8BfEY;J^Jc"
A$ = A$ + "B9::JM?M\l3bJR^XkeDB<m<^K;Jg204ZXRh:W>2JnBAaodo3g9;O10Xh%%h1"
CASE 11
A$ = ""
A$ = A$ + "haIkG7T3522340UK#_ogfo>CE6n1Sc<B=dUmU040;eF37aPl53R_14U3PD`6"
A$ = A$ + "0T0h:5BPcT:8AQ>hP416WFUkC4?GW24Me]M=L0l[V0bgNo2Yg6`i;7<8OePU"
A$ = A$ + "IQ#\W:7cm^WZ9QQE^83#Q7hl]T>R74i`1T9N#d5D1a3__mYWOn=5HiZKRD2F"
A$ = A$ + "ZVH[\8<Om0LnMoL_3\<;4Rm<n=PEmkgaPUoLfdK9oYI;RPmnf2MPR6[l=jW0"
A$ = A$ + "UkC4?GW24Me]M=L0l[V0bgNo2Yg6`i;7<8OePUIQ#\W:7cm^WZ9QQE^83#Q7"
A$ = A$ + "hl]T>R74i`1T9N#d5D1a3__mYWOn=5HiZKRD2FZVH[\8<Om0LnMoLnRO?hHW"
A$ = A$ + "%%%0"
CASE 12
A$ = ""
A$ = A$ + "haI_FVU]T3233UMPgokfnLjGAR7T0c#\oZ#bGPHV:AnOdl1Ak=FPX19PmSH8"
A$ = A$ + "8VXQ0IBV]?:WC8f0<C9>4RhGY4S0AKG2QT?JZ\21Y8<X5^#WV#Dih;3T:J2R"
A$ = A$ + "`RShd3Mfa4ofig\QbI3R`P3?Zng1h[A0cWHWShRMEJR__8NfBK6RW<Q4gHCM"
A$ = A$ + "_4N`A]94RXK388iTW#\0T[n4F\8QOV0_h4QTV8^HjGfX899DKHh?#fH8I8JV"
A$ = A$ + "X;R<a8c9Jn`#0=GT8<2lBBgNMR2n>ZIm`;oX4\HUTT45Ln#iXJXeSik\bAlI"
A$ = A$ + "gGEam^V_Z?km3PEH7S?oM8ZhmlO^\=h=Dnk#lF37;];a5k:SMDjJU44aMGJe"
A$ = A$ + "4Q9eEfRB8Lb_>Zf#S44n9eaGI`9PiHSVm3I52gTRa4BKI2SlEN::\6<i1bPn"
A$ = A$ + ">4AWSn[10E`Tje5:^aO:2=loI3TfTXR_SBF?ZHOE9W?ZhLN9gGEam^UlnA5_"
A$ = A$ + "3VneiCN?GMN\5S[B0cWHWShRMEJR__8NfBK6RW<Q4gHCM_4N`A]94RXK388i"
A$ = A$ + "TW#\0KOeG>2o<inGj7G<_mSGZ=<nBJL_4AO<Ac4MAT96I>Ac762XiR4QAPGB"
A$ = A$ + "jf[CD`gA=[7Ni7UP5[TTTXPc7:7E3]N<OWE>R?knZ:^gelEmI_O0\2kHli_3"
A$ = A$ + "A5_WocU]1_QbO7RgJhHYM9beECe6jNiB2R8kB;L<BBdKC[^K\YfihjXG7Eka"
A$ = A$ + "SaLRWFRXI#]FP`<h`L\AVaH81Hl2iKC;7QjgV>JjCAQa85QEgc4dGPhA8fGS"
A$ = A$ + "o[1XaH61`Zk25Gi?5I00G8PT85aI4oCC%%L2"
CASE 13
A$ = ""
A$ = A$ + "haIkHVT435224UK0goKKFTZB1Jg>`P[2[Djo;i[289ZZZ<IjG[#Q19eH5:HU"
A$ = A$ + "df4DVo:5da]?RPTQ#mOe2A8=QK6T#bA<bCX;U0mHC1ZW#0>lo9ARHZU07iO?"
A$ = A$ + "161V6aSkgA\89bZRlM<a3F7#PR??FALXgM4niNAP#e4`a9946QMmVWXkj^3Q"
A$ = A$ + "0MLoafd[l2dLbb44[eRP<JD1Ha[H4=8lRm:_TfV#Wa^MTZa9:^E=F1b05;?S"
A$ = A$ + "h5GC0fA7?:WBH_Wh5GKC:N]280Q82`5?b?71lCY6RkGigB0m212OVOXg<4V9"
A$ = A$ + "6gnWbSL=1LLG4nhAbKN825Bdd?Zf7KDim73nog3g61IbH2_P8^`;f[lBJK2_"
A$ = A$ + "8f]PD]38:\TaB2g<X#bVk:XE=<1oV1d>jhAim4ng#JDim4[KoH_cS8J[E]7g"
A$ = A$ + "LgbE>\Dde4#PR?cGALXgM4niNAP#e4`a9946Q?N<;AgeM721jhnS]YGi5XiT"
A$ = A$ + "U98F[51IdX2`RGa8J#h5kEN9]=Q>SMk8ESCDL[J\2T1:FN6a;^VXUFeVCaE_"
A$ = A$ + "A2GbAP;N]280Q82`5?b?71lCY6RkGigB0m212OVOXg<4V96gnWbSL=1LLG4n"
A$ = A$ + "hAbKN825BlooQKQ0=E]<1aJ]88C6C86a7#>m%%h1"
CASE 14
A$ = ""
A$ = A$ + "haIkI7]M\32250Uo0oooKkZMV6U37D0IjC=?=ALWXXBFmNUQiBnibfbkVTl2"
A$ = A$ + "1=6`gg]dH91H0a[k^G\Jd=lLG3RY1BT:QLY`>:eQjA<38m60NiH?VMSUO3;j"
A$ = A$ + "?]c4c1SH4c]?S;5mM<HWXWScW4gGFJ_0G]#nJkg9dcFZ06E94Z=9K6F`jK11"
A$ = A$ + "_j6?GTF8PPFPE5[ZH]EXMo8A5faG\7E2AZ989_7AXO7aGJC8#`_=I5`c<Q`2"
A$ = A$ + "6dSJkN574TYa[fEQ9e<b8lNC>?YK5S03GC:9Z#N47Bk`BKN1o3`laIJQX5>k"
A$ = A$ + "ZG3FE\d8<H7V#Y5VOma2db`eC\RK:]k8JJk3G86A\S1i53hJcaIf[XTHCh22"
A$ = A$ + "_Nij:8<394lTNGbhi5k:A_\4NY`K?`<j\ij2XC3<F?2XHPK5WlR6ODnRePAC"
A$ = A$ + "954VBIWGJ;8NO_IiK\NaN2Y4od0863R#B;lK;D9SHR6ODnRfB9K5M_db5nO#"
A$ = A$ + "ii^I[2B2;`bVZHOTjETB3N]7#l7E_b>1UAfDb9AgO:Jkn]?l7QOM?:6SN5hL"
A$ = A$ + "UDUa#B9N?_EQ9S;DWGloOcI0QX5`ICMo_C\d8I3_>DJQiGO\0]<Lm4[hVBk>"
A$ = A$ + "RVfn`5RA\FiiM#E?Z:6`EiSc<1K#Q3#JYc42U;``=oo8PfTh119]_G0K6PoG"
A$ = A$ + "0lBCI4c6NVejY?:T>5dC>ZHY5VOYOBjnOUP4PEmIoSbCXV\QB9E5d5:XjCPU"
A$ = A$ + "F^##aa]XE53m5<2^l`9I#mZMEHkiZD2CO?E6\PP=[=3LHgJN1ic=Hb\1Qo7D"
A$ = A$ + "N^[11OOfB`IcG8\SBMXN4jRG=60NiH?VMSUO3;j?]c4#E6X2ZNoCMAO73f9j"
A$ = A$ + "ihl9amUUl4O1AMi9%%%0"
CASE 15
A$ = ""
A$ = A$ + "haIkF6T204234[o0ooof5IIQ5K;X`#AX97WLc3f<6C\o<nQ>QI96M2K5m2gn"
A$ = A$ + "WAW8HoeXC4^?=j49k00#;YRoM;inA9g1;iNN9M9UdGA3g^2g>=LaRTM00XU#"
A$ = A$ + "3gA2Jh^=Q`WT<Q]RNQKW6^HAb>00dBXQk81=LgV#hCBV`FA_`]C3G\8I700J"
A$ = A$ + "9d`MTP6^=5?0njXC%%%0"
CASE 16
A$ = ""
A$ = A$ + "haIcF^U[63224VM0koMkiUoT3G4EJ7VDNY1;OHJ56DUeVnkQeL_Y1QX[HdE0"
A$ = A$ + "o_HOR4SoU084=`XU0^UkChgAh4RaMI^:gT7#Do2ie47nUXI7d4nCf7CDGRj["
A$ = A$ + "A[gTG#8Ak54;U<F[I\LCN:a1321j_36W7E40[[dXIcS?nIjX`dWW06#_bhe<"
A$ = A$ + "EGCh2JXi7fh3nX82akGZL;jB8I3;AUFc69S?91SoED>cIDkBY7TQF25=A6Jk"
A$ = A$ + "DVAaHF;Uk<doV<H8>H#8#oM`hlXR0HMU6=KNla?C75Vnl4`0jE6_VYjJ2G#3"
A$ = A$ + "=o`6O`75A8NoBUKAG29KH9ZdJf8Il99Hl_RbI>SJG:mP<dBXX9b#KWb<:6cJ"
A$ = A$ + "YLWQngT13a1321j_36W7E40[[dXIcS?nIjX`dWW06#_bhe<EGCh2JXi7fh3n"
A$ = A$ + "X82akGZL;jB8I3;AUFc69S?91SoED>cIDkBY7TQF25=A6JkDVAaHF;Uk<doV"
A$ = A$ + "<H8>H#8#oM`hlXR0HMU6=KNla?C75Vnl4`0jE6_VYjJ2G#3=o`6O`75A8NoB"
A$ = A$ + "UKAG29KH9ZdJf8IdVh?0jnV:%%%0"
CASE 17
A$ = ""
A$ = A$ + "haIkG6S303233<oPnoo]M[2#hj`0^ADOS8^N34#ZGG28N8e^Fg86=JUW\nT6"
A$ = A$ + "D3g`=>V68`=X6_^;cW#^S6dhC^_K_AWlhjCK#<LSbg01^1a#F3co3mc^:^3j"
A$ = A$ + "6eZ12L3RQO_ZN4AV3Wf=]Xaano7^QK\S68`=X6nQgU#aiQni:g`=fA34h6D3"
A$ = A$ + "oNEm8gA3Jl9gg]gXCNLmY=86^AiKP0gPH8[QioQnIG5g1MSJe01^1a`_GE?R"
A$ = A$ + "8cQCkVFdhHoo3g`=fA34h6D3=?lN3T`:%%h1"
CASE 18
A$ = ""
A$ = A$ + "haIkF_U2532346Nf1cnOgNP3UBD;D#b_=FjlFlkUXh=k#doha\IPO;PgF#QL"
A$ = A$ + "D32WeH#H:21=;S8PK21HC3[;SMPXQ`n_41e=<;dO>:AHI7kUHQ:L1M:#mNaL"
A$ = A$ + "Bh:IcP:d3I>MN;`cO:MF#QLD32WeH#H:21=;S8PK21HC3[;SMPXQ`n_41e=l"
A$ = A$ + "gOh^3THQ:L1M:#mNaLBh:IcP:d3I>MN;`cO:MF#QLD32WeH#H:21=;S8PK21"
A$ = A$ + "HC3[;SMPXQ`n_41e=lgOh^3THQ:L1M:#mNaLBh:IcP:d3I>MN;`cO:MF#QLD"
A$ = A$ + "32WeH#H:21=;S8PK21HC3[;SMPXQ`n_41e=lgOh^3THQ:L1M:#mNaLBh:IKP"
A$ = A$ + "O<]=%%h1"
CASE 19
A$ = ""
A$ = A$ + "haIkH7U2333330eg0Mo_]ko4[a\FXE2BnD?XU2Y>Z]Zn58i20E#J#_PlP>19"
A$ = A$ + "2k2b4F5T:0Fn5fPZ8BF#]^b4fb]H2gHX9gPCL63]i_N3Pa09oXm[NjKh30d="
A$ = A$ + "0I1dG8c2X38c208BF00Ab208b11?Ob50?g9:0N>I#0lLB]0hi9W2PW=Inc2M"
A$ = A$ + "WlbjI3I1hEo`TC2lbFQ1lbFQ1lbFQ1lbFGH5ZR8I1ej:CH;gR9LSQVL3>aI<"
A$ = A$ + "dVoj=063TlkoQkk0M3#F0m5b\0j0b\00RT50#T\00RL#`cWL1`cMR2PWC640"
A$ = A$ + "?WD;0NNbY0hICVO4n#iA%%h1"
CASE 20
A$ = ""
A$ = A$ + "haIkF7T[333240UK`Lo_]EoOUMZ1l6[QA6Y`Vj>?U5>a12\l2P7TCo5B52dg"
A$ = A$ + "8R`oo0G<\2P9mco82SeHMI=`?5M8:F?1_HM5\Mi_#00f8m2P_j94b;\AfjBZ"
A$ = A$ + "#jVZ2hiPA5c1Maf<R:HaR;T5?^V>1:^G9iI^Rc^BN7DA_49m4_cY170gidi3"
A$ = A$ + "P]O`b;40P=B_0h[N2Ql2KT]^T:T^YZ0N>HDaL#G\=SX2F\h2IaS[YCPRkEBN"
A$ = A$ + "V[h\[Tg1Ed;AB?akLJ`1`M>Mn0Hk7\l210HSd;0nZW#8_`6I[;Y2YKZ:PW36"
A$ = A$ + "E<7d5Kc8ZP5;^#FlhJj4XhNUTWi:>k:iM#5mBTdCl>W6L0LWCW?0fn1;_#00"
A$ = A$ + "f8m2P_j94b;\AfjBZ#jVZ2hiPA5c1Maf<R:HaR;T5?^6F`70m<C9%%%0"
CASE 21
A$ = ""
A$ = A$ + "haIkF6T334225UK0goKKWVD4a<\H6o#X4IS<nZQd?82cG6A4oKUVGQ18anjb"
A$ = A$ + "o<\0B=N\o5i?6<]?KfOC`960RA#P`Z[h<02QG_eR4HU^e=00VRRf4S03\1F;"
A$ = A$ + ";23LOBKGPa8bQ\5X;aX;PDZ[B1H_LZo_Q2LVD28#l_mG33XjfB3IL0=gDd9b"
A$ = A$ + "Zc<LM1TQFieXWR24EME6g15iBLFG106RWgYP0DM;\NkJ^YB_ZmHPa8bQ\5X;"
A$ = A$ + "aX;PRF9n2#6gc5QDLFG104o8kkVbk7J^YXCTMVQ3=83]b[AoI6^k0ag;I8NN"
A$ = A$ + "W22#e]`j][iV:mZfS16S87bFP^4S^0:JUh;0IL?G4BaIM50#lS\_K:_OXiVR"
A$ = A$ + ">AfI6>dP<d:_6mWIh^34O_TQhiM:80Eg2[g^VKZd[J?6H<RL8K1jB<j2XXER"
A$ = A$ + "_0TamLA8WLFoNG`75GG;%%%0"
CASE 22
A$ = ""
A$ = A$ + "haIkD7K3003234<K#fo]=]<0>5FLdR47Eom<VkL2^8i]P012T?Rl]76248#2"
A$ = A$ + "SDM\5248#2SdMA7248K2YjH;48#P46YkR>48#f4BeaF8#P09<Bg5M8#P\9T7"
A$ = A$ + "9L;<%%%0"
CASE 23
A$ = ""
A$ = A$ + "haIeE7TS532330egPLo_]SDk#o9h`VR=BUUnEYF;J0PoGam2dB5lT>CjPhgK"
A$ = A$ + "^n1X3R4D4M###X6R:PjS81ZYn0TGS7C:0H6JVQVKln0UO#PcO=d`W0<eVU]l"
A$ = A$ + "c0m5I<Ai3^3\1Yo242[?1F8dMd<D3P0X762U[4#1P7h:U_SA?dOKR<hYJc_N"
A$ = A$ + "M#J7Rg1e0A2:R>888D3A5jVEg5ZYn0TGS7C:0H6JVQVKln0UO#PcO=d`W0<e"
A$ = A$ + "VU]lc0m5I<Ai3^3\1Yo242[?1F8dMd<D3P0X762U[4#1P7h:U_SA?dOKR<hY"
A$ = A$ + "Jc_NM#J7Rg1e0A2:R>888D3A5jVEg5ZYn0TGS7C:0H6JVQVKln0UO#PcO=d`"
A$ = A$ + "W0<eVU]lc0m5I<Ai3^3\1Yo242[?1F8dMd<D3P0X762U[4#1P7h:U_SA?dOK"
A$ = A$ + "R<hYJc_NM#J7Rg1e0A2:R>888D3A5jVEg5ZYn0TGS7C:0H6JVQVKln0UO#Pc"
A$ = A$ + "O=d`W0<eVU]lc0m5I<Ai3^3\1Yo242[?1F8dMd<D3P0X762U[4#1P7HIZ4h?"
A$ = A$ + "eW_m%%%0"
CASE 24
A$ = ""
A$ = A$ + "haIkH7TK532346VKP_ogf^hUB6?f^BiUOfe\Zh_X2SQPZJ4A\:?aW78HEY[:"
A$ = A$ + "P`bG0kQPP9b0#XnF=;TG3FJG71FjNcR6RTX1544A66\P>m]W?8PL6UjTPgAS"
A$ = A$ + "S0GO<F[c1k4N^L<g4aPU>ZA0PkYXo#=0TJDAE0PdDdL931H1e5>HH;R467`1"
A$ = A$ + "SQR3lmV]`1Nimd22bPfGR3T`FC;2LR]iicdWjLlh4b1S=>HH]<Q5B==EH1Ke"
A$ = A$ + "LES3\]nXnc4#ZN>SDPEoFXQ#OnDaOo_76o3j2B`5_kR0IA7#1FBTda2Mm=D#"
A$ = A$ + "UlZ06Nn]X?3<Yo4aKQa[G81A\d22k2UjTPmQ3;LZO_:Lffc_El5#NCS1<A60"
A$ = A$ + "2Wjk^o<][S0jmSeM]g2ABdP22RD_gW26_IT4bIDZC2N7=>2LmaH]>7\Chiba"
A$ = A$ + "LC43FjX610^WRn3e0#ZA5E10BCAcU<4P5DGhPQ]8BHL07<6:>`gKf27hUgC;"
A$ = A$ + "883JO9>#2K=]8`9fVW?COZcaSC87<fhPQeb4F8edDQ5\EcE=>`fjSj?C0Yji"
A$ = A$ + "<B1FmKQ62miC5omoNhoo?L?0\T8YS5jjKXP:iE1<llKAO6HBo9Rg2SG_#2RH"
A$ = A$ + "Y54f5:e91k37Fh70A2fm%%%0"
CASE 25
A$ = ""
A$ = A$ + "haIkF5T33323;o0noof]MY2GR1bHHaZR?e:Za>4bV;UoKH_Q09^4QZGLSLKG"
A$ = A$ + "_N5d[P?j_#cnj``\:A0m:gOdKQF[k`HM=P7?3=fDo`aR<f;O_:6o`#P4PFVV"
A$ = A$ + "bJk#D[IR[Xmh?JQ97e^C7]Ho5lV7Sl3bD63Vi9eD_OoXnUCCS>moHWEcng4D"
A$ = A$ + "#IdFCSmN7A6_#H[WhW31m0fUjE=BklaIWQk0cGmEJP7EI6^UQ090]<=UefQX"
A$ = A$ + "FCVQSbH`<OVQSL8J`GQNO6#IdFCI6^7?4d3HGZGe8]c7I6^<3WW5mgG6ZHHX"
A$ = A$ + "5g4481XUYY\f>4eJb<LD63Vic<LT3A3n:dkc0:SfJ:c`mhQPN0kBmZ6YMn8c"
A$ = A$ + "`UIhl\Xonb#533]hVP090]<=UefQXFCVQSbH`<OVQSL8J`GQNO6#I`:f?_7B"
A$ = A$ + "QII4fj78N9iK%%h1"
CASE 26
A$ = ""
A$ = A$ + "haIkD7K3002334T=`kofB9<04YX`UfG:GWC>gjjB:9P0124MV8Ul948#PXh0"
A$ = A$ + "248#li4cKU7124CUHPC`8#P0aC28#P0AW96h4<248#lT0248#dIRe6#2%%L2"
CASE 27
A$ = ""
A$ = A$ + "haIkH6^333224fg0NoOKgBfbZL09RX;fdkneLhGdD>XTfJ?09_eF8^fU8:T#"
A$ = A$ + "ld4GkB45R4M77S0>kK;A[oI`_o78d?McCh;83>PbC\?_;eLJo94d:^<2\6BI"
A$ = A$ + "n;#X;K`Zf?;3[^6S0>JmNn^bN3OV4VGbhd6]<AW<gFm2;`4463Wh6X61eiZl"
A$ = A$ + "9]19#[_CPZ4n5DZ0CAP6lk:1WQ[>15eFDNWh0=>SjBPdW9A;hga=eVP8B;<O"
A$ = A$ + "#Am?efN?8<G1WQSc`]H2>3gYYmW##[hb8`J8Ui_0Q^\1[Jko<>CC07]N?OGI"
A$ = A$ + "_Q?C2c;ILJSFVXCVK[NQ5H22SQCL3DSPjLEnTfP4Xeg9#E2o2:EPY8#3nMUP"
A$ = A$ + "c`EWPRJ;:_CLP6WAM9#jcTPO7>Z5[G#\%%L2"
CASE 28
A$ = ""
A$ = A$ + "haIkD_T2033240]g0_ogf^[T:Ja1o#ReIIPgVaXGGM?dC:BH2oQ#1WXhmcS8"
A$ = A$ + "ffeR#9]DH:hR>Vdj=Q1hi8FN>Da:M4Ag^n4LLb21lLkZdTF]_AOh`G3\98he"
A$ = A$ + "io[0_Mm9hh]C8PWCObYl65JTO<25LR2R_d>R0KG;2UhDH:hR91T:6DQnQ[Re"
A$ = A$ + "Pg2ZPei^8`KG;2UdBQYP;jHB[g46PWSHii#5[dA4MkjC`a9;4`c][BCJen6m"
A$ = A$ + "Q3O=`VPPGWo_2lfeWPSg>Q0N>m9WbKDXAna8D`9:8nBk82\M]8DRCQYP;:8g"
A$ = A$ + "^[L^%%%0"
CASE 29
A$ = ""
A$ = A$ + "haIkF6U333323=g0^ogfmg4>4[YThBeT<ObS:35JU7SD4A<F6J1[I72hJ\0Y"
A$ = A$ + "7D9?0X#42JATPA^0l:3bC8BASF^]JiSTOm=jM0bOHT1H=R^QRnNC60fo#5b0"
A$ = A$ + "`1>d6j0I=:ST6`Ra#=8fn9^#SigW?00FJc=hMPYlY3>MPil3X2=0Fm:1]7M<"
A$ = A$ + "DdUcY0^6f3gF0kQ[2:JH?L_jo`nZ1E?Im>mmV>#Ng0EX3T_aPf#78BPL=f3W"
A$ = A$ + "m`M<H>o0Z`NhXA735MiL:P[Qm`]5`NhZPR6f3Wm`93Tg=#5j0iK<X=d1R48G"
A$ = A$ + "Sm`I?L73Vc?P:\7>Jda#AG>W2hJH?LK1\7^:XXQm`I?LZ0`n7Z#60>`Qf#78"
A$ = A$ + "[AITd0F<6]i_job37VoOg3gX6R1;B;5l1XV9%%h1"
CASE 30
A$ = ""
A$ = A$ + "haI]I7UL333240M_1Lo_]MjT9f2HG9`1[?e;P\\DgVYe\k1n<\dX?HLhoYXb"
A$ = A$ + "6#f::lI:Rl<P\A^fcAi88JEZ00A[N>HN00LY6`KU[00`UO3<1`NOF0T]:3lc"
A$ = A$ + "\9Ql5SjP\E>`<A[63\`X=8KeG8fXAS]`j8[RXX=#cFMOf>8P`ddD]C#mFMm9"
A$ = A$ + "77POjDZF9XD[0N9XGZffh^hZ5GB7HM1k0TBe\^`YCiD5FG`Z0[YJFGP=_>l:"
A$ = A$ + "?_>E[?le9?`[5:VWf?>XCL4mBEP2^O_c>ZJ3b[9KBLBK4?TJEZC;WhNiiPi1"
A$ = A$ + "0`57Pm#\E^>10^lKP90fkcd3OYd>5`?cV4bG<B0f3M2eL[AK`hP57GE`VO;#"
A$ = A$ + "kT>YYEjT\GHMTEEQS1dcF?TOPe0ADgCT0j2`3bOGMLnMPG#G0M1#PH\V[2D4"
A$ = A$ + "jThlS09ai0H=0Mheh09:j0#RkT#QXXY0EnX6dO7>e#e_70RUjjm^>l:1W2e8"
A$ = A$ + "W8\Fe6F?dcIGW3_b#li=D#:9:eZf`blR8Z2QGIHiiUE0b;1=`I>`]MK0aMT6"
A$ = A$ + "27J_0\L5K9<X8P:PIRF=6HaAJ?O2`9P\l[O2bdk1IW8?1_=X^>H;W]BXD[n>"
A$ = A$ + "ah#::bRUL3b:2[QXE0C1P0MRRTE4;MK[l_>73j459[8]6SMQY2d?:2k1KG[<"
A$ = A$ + "ke0A<`68njnLWLe93LK\BlUjje;=aY;`FmUS#jmT3ETPl6inUD#N<4O=24[P"
A$ = A$ + "45MXR8H>00LiWPeMT8k2:8eYNPo\\0H7PhSKjl_=8Kee==;930;?EV9ZH<`B"
A$ = A$ + "SdNna0LS<[2g>moiTl48Z#T4]45e7b7RdXC8ZHi#WLMHRO?::2a_>#8aa1QF"
A$ = A$ + "Y08J56301dQGI8n9>3j`[aQ:aMai[35CedPE6j7gmmWTZ0_A>89j8]g2KAnl"
A$ = A$ + "enk`m7`H%%L2"
CASE 31
A$ = ""
A$ = A$ + "haIkF6U333323=g0^ogfmg4>4[YThBeT<ObS:35JU7SD4A<F6J1[I72hJ\0Y"
A$ = A$ + "7D9?0X#42JATPA^0l:3bC8BASF^]JiSTOm=jM0bOHT1H=R^QRnNC60fo#5b0"
A$ = A$ + "`1>d6j0I=:ST6`Ra#=8fn9^#SigW?00FJc=hMPYlY3>MPil3X2=0Fm:1]7M<"
A$ = A$ + "DdUcY0^6f3gF0kQ[2:JH?L_jo`nZ1E?Im>mmV>#Ng0EX3T_aPf#78BPL=f3W"
A$ = A$ + "m`M<H>o0Z`NhXA735MiL:P[Qm`]5`NhZPR6f3Wm`93Tg=#5j0iK<X=d1R48G"
A$ = A$ + "Sm`I?L73Vc?P:\7>Jda#AG>W2hJH?LK1\7^:XXQm`I?LZ0`n7Z#60>`Qf#78"
A$ = A$ + "[AITd0F<6]i_job37VoOg3gX6R1;B;5l1XV9%%h1"
CASE 32
A$ = ""
A$ = A$ + "haIkF7S4334235UK0goK[kG#SQMAD9:iETaC2aOgc73\o608fX#ZH339R=>4"
A$ = A$ + "4S0HXmC2f2#a7`G0oLV72kaoPkF8I?n`i>8M?n?0^10kI=;l<]`g=;lK\5^E"
A$ = A$ + "HLJSQEn3BJ0UgIL24NgG46oMhI``]8i`X=E8PeWWJhJ1ZQ[3Dl1D=L9kE3gO"
A$ = A$ + "SJh:2;L[`hdF=L?0ZQ[5X6^o0e`e2D3GM`?WiQ`Ne`U3Pm\6e`E4FhFQaY]J"
A$ = A$ + "hN0D3G;#=Lo1ZQ[5X6^jPO>c3QmZQ;70kI=ZQ[8\`]2SCKe`m0X6^F0]6^?0"
A$ = A$ + "U;8^%%%0"
CASE 33
A$ = ""
A$ = A$ + "haIkF5]K4422do0nooKK_[g238X`jjUnPGJJd<0cjP>QF[A_nenl[KcS0#On"
A$ = A$ + "e]a0hooAI`K8:HS1XaDQ[7U1_Ql3j_=OnLTbnkZgo9[eAiG:ZKSi8o>M^\8M"
A$ = A$ + "_81S2cFEg>09QF:>J:>hn^Sl]O>leZk`A\FYPU=<53kiHDQUBFKSjjP;eU8m"
A$ = A$ + "JEDQUjKl6l[hUX1jRjA00I=i9_PjNe>dDaQifdZ0`eEO[DnNBNCd20I;e5E_"
A$ = A$ + ">5Kf;:O7^o0`^B[14n_bmIGL4YE[aAenA47[i`I0`\ajRW8:S3g80>KKM1A3"
A$ = A$ + "bnANW[Z;ZN?T37VAGf?__KmCNIe5KJYLhZkRBn1=`Qk<3gfi`G[^37cLhZjn"
A$ = A$ + "LVQc^I30Q>L;10bJbCN1emZMXYR3c]YE1P[[nFYlmTlVX50bFZ;ZNM:f\GDW"
A$ = A$ + "IhRh8B[FSSZmS8>FcQc0PISe5?AD67^A0LfWIh^;#mCNIe5KJYLhZkRBn1=`"
A$ = A$ + "Qk<3gfi`G[^37cLhZjnLVQc^I30Q>L;10bJbCN1emZMXYR3c]YE1P[[nFYlm"
A$ = A$ + "TlVX50bFZ;ZNM:f\GDWIhRh8B[FSSZmS8>FcQc0PISe5?AD67^A0LfWIh^;#"
A$ = A$ + "mCNIe5KJYLhZkRBn1=`Qk<3gfi`G[^37cLhZjnLVQc^I30Q>L;10bJbCN1em"
A$ = A$ + "ZMXYR3c]YE1P[[nFYlmTlVX50bFZ;ZNM:f\GDWIhRh8B[:`1EgQ;U;:0\eIh"
A$ = A$ + "jO:fGZd_?T_KCM1A3bnANW[Z[_lIFGc_Rch76hX?%%%0"
CASE 34
A$ = ""
A$ = A$ + "haIkH7TJ343445]_1emof6<6S=Jj:42oi_bJIm0K4B]D[9cn8Ulo3TM:\`V4"
A$ = A$ + "JhZ4NhDbM0YUC2YUC2YUC2YUC2YUC2YUC2YUC263QiQ`jQ`n:Qj3QjlI:27<"
A$ = A$ + "CAhPI:27<W3NhB>omi;idmU\VcfOUa_kWi]957DGLhPjV<>XF\`1_;DcM195"
A$ = A$ + "Q3B:27Tc1?L9oU`1;i?5>H=oQ`1ULdQal#Im#IOUBmQBM^biE:WkZLoQbmP:"
A$ = A$ + "gW[dGROOKToO:mkZdg^bk?DN7Ubk1oUV]0QNcFP#_I;#Xg\58dKf24nnMhnk"
A$ = A$ + "P`jQ`n:Qj3QjlI:27<CAhPI:27<W3NhB>omi;idmU\Vkg?gg_3gFnmnnSJa2"
A$ = A$ + "7l^#=g5TD4>8Y8L#>7l`UlG27\ToDhPel727DbA76c3Ue3UmE:e7:ei:WGYL"
A$ = A$ + "^[bm7:g3ZLO^BO9gGoEo0l\f%%h1"
CASE 35
A$ = ""
A$ = A$ + "haIkHVU333324=g0^ogfZ^YfJ<fJ6SW#Ubl9hGn`4<;77gUmB7ME?_`4f75O"
A$ = A$ + "nOL^4A;CP;H2[A1Wo;?[ClfCTM22_S7n2<W8AP89#0NRDB2<P`[mcV05hBNE"
A$ = A$ + "d#;:AICe`8bmQ<1?_VLI20?kX0INU]7A\Sf?l49e6eYC\ok:cVA\J<gJd<kh"
A$ = A$ + "4]fc?7dKM`WbXN;Y[E9=gEcZ144e\j<1aUlZT1:6R2Vh`AXHVC9c>[H70BfU"
A$ = A$ + "QRMb8IgBWNSG9AXh^b\#V0G`4FS2>_UiOkK87dk`Bo]T^^24912#Q[OP1Dfj"
A$ = A$ + "iX0Gb[R6Ja7oXXYJhS3Vg3I:VM>gb44=a5IWQ#a>IJL>a8?aOD[J39foMUIc"
A$ = A$ + "8F=VK=JVMLRFkiW3j]>hCID_UdeZTVkZIe02RJFMVPhBNEb053A1CLh8D<cY"
A$ = A$ + "TIWE\309kb#a>IT\KY=ghe=0\ic`%%%0"
CASE 36
A$ = ""
A$ = A$ + "haIkF_T3423330=g0Oo_]c:ZXY9KH\=OcBoZDQfP80kZHDH^408Gl0EKA\2P"
A$ = A$ + ">4iL5#<7[1be7L]P`14TQ7e^h0^L]MO`DPF0H;#6PAA7FfKn#ANckmAQdUT4"
A$ = A$ + "`bTK6>[#E_0O`A_[E`agiknAS#8mHL_PRLf#E>IX<W9dD];W6Hh0d#O`igWo"
A$ = A$ + "bQd:40H[d10Ia14\QYZE40F61[Mci1]_PlPUlo4>YNGnPS_c77JQD8E?5`ao"
A$ = A$ + "cm<HG`5jXP:hilbb5oU[en3V2d20K1b0<:j`bNc7:bKN_?:T^TT0FV>dbhQF"
A$ = A$ + "V?dA_[E`agiknAS#8mHL_PRLf#E>IX<W9dD];W6Hh0d#O`igWo^1TFR0089l"
A$ = A$ + "1P\h02f`De:20bCJm3#a%%L2"
CASE 37
A$ = ""
A$ = A$ + "haIkF6U332333=g0^ogf9a6E5AcD2hd#D]o1`?nP8J\\8OeFCbI14lSMe5;#"
A$ = A$ + "dl;7#aWPT0_cC9N1a_3ngeoW1>^O[1KG4DPaO:X1GWE1moVQne;k:claZYDo"
A$ = A$ + "OD=`<f1W#Dbne^GJ?8[m2h0FVF#P\?IP3Xh_bIDJRMh<3RO7<`N#7?dWhd7h"
A$ = A$ + "P1hIH;HoZRUMalAkRMhL0H7>G0;C;8#fW<`1DlGi<:=a>LV1a_32>SZ7LW6I"
A$ = A$ + "n1N6FfQK8#aWMhRE\3W30k`i2HIJ11bnT1>PRo:WAY9fQc<8nM#`IDmPkd8c"
A$ = A$ + "?`c`b>L31:n\3G\RMhL0VD7^AUP#2nPl%%L2"
CASE 38
A$ = ""
A$ = A$ + "haIkH6U[43225UM0koMk;IBJEh2J1AnjiG]Lid15:d<<c4^hO[;:`C[;A`l2"
A$ = A$ + "TD4TfjTO82G2Qd9=b_KCA\f5#=>Q`8NNJY6WHfXMM107WHTYLZmT>UShYhc:"
A$ = A$ + "XN;n`ciH4?oVK8dV3BHo^RP`C80A7[MAEQ2FiY;#LDic:Ri2n?oJ#L25Ki=0"
A$ = A$ + "daRW]38`cdbK8Kl0B>VHe>5fFfkeESkl9PR_QJa3jY_##W#XEl86<Q9#1GRd"
A$ = A$ + "2]LFMkL>iD9Fl7geakP>?P]?dP4MdC\UNk_VPldf9>OW8nTcS8dV[W`CX2R>"
A$ = A$ + "Fk2gS5RWX2CL]b7F2lLQ10;L:5QlB[PBkGH2MlI7Dj0<41N>k1LD3iM^8^?1"
A$ = A$ + "1\GWbD#1KN2R#TgUYha4d2Pb86<N:E#LOQ6>[Z?W35FCnQ8L94BWd8LjgJ_N"
A$ = A$ + "_T>j9fB_mmCLT>US8nTc44?oVK8dV3Bhe4NR`C80A7[MAEQ2FiYooOh`PBbF"
A$ = A$ + "N30M\hIk02l<]l6b6?PTS9F]CQ]UmNMeh>O2XhKXFlPNj;4d94J5?R1CH2D`"
A$ = A$ + "U8]#;WEg>WC>ERooo`iAdA?aFj]oJ2bCKWhlMRhC>?R#K^N2?Q:8jH];L?F8"
A$ = A$ + "NR:<ae:OH9`c560\`YD4b;]2:]OQ9daWM#Y3`#4hi\7`A=TgiRhn44`NM:C1"
A$ = A$ + "5\i982ANGVR7C#;0:SHnk9:Qh?0\%%L2"
CASE 39
A$ = ""
A$ = A$ + "haIkF6U[53224eM`\og]_g7RPXdNEAR=AoKba9E74BCYD2o_BdB:L3PlZAh7"
A$ = A$ + "0`#h;8oECe2=HN7#4IE2=#^fW3ENoIM\BFe_2f0X=?^S#Nk6A?H:RI9giE3>"
A$ = A$ + "_j705a`>TGC[6WjM=USBIiT7bL8>fNm#>D[g[46D4CiP?3:7N1RX?Wb<J95O"
A$ = A$ + ":#0I5PQ`G#n[VZ5J`l>P8bNYM^jH^977bHYUM\BFe_2f0X=?^SklZC34#F1H"
A$ = A$ + "8l5`G[W05a`>TGC[6Wko`5ZS]G?T3ejm:Q15aD>hcPbQGP8jcY<SFBaW24#F"
A$ = A$ + "1H8l5ToZYJQ6<_38R\GJW[>VKbaQ<FJI7[TEm[P=0JcSkh>_jd01TE062O1l"
A$ = A$ + "ej9#A<\3iedZain?LQjHke3i#]N_BH#A<U3n<XLh58RnL:cXUDlY01TE062O"
A$ = A$ + "1i_JZFX1ck0R8kUfiZSiVLL8SUFfa:IEo:H3Pflh>^c[>=#0I5PQ`G0O]N2D"
A$ = A$ + "43k#N=]JL^o3GX>fNm#>D[g[46D4CiP?3:7N1RX?Wb<J95>1n3`Q%%L2"
CASE 40
A$ = ""
A$ = A$ + "haIkF7K3043244lk0goMkWj2h0QA3Y[4CjMn^^cm5<TlG#N8T628#DG01R`1"
A$ = A$ + "8#bR\Wm2#V7B3148Z;P0Ah048IAfcN18c3YQ024e5#P8L02T\8kI_0TiQd#0"
A$ = A$ + "1Rj28#4>01BFTO0M%%L2"
CASE ELSE: EXIT SUB
END SELECT
origdest = _DEST
v& = _NEWIMAGE(100, 100, 256)
DIM m AS _MEM: m = _MEMIMAGE(v&)
btemp$ = ""
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
btemp$ = _INFLATE$(btemp$, m.SIZE)
_MEMPUT m, m.OFFSET, btemp$: _MEMFREE m
BASIMAGE1& = _COPYIMAGE(v&): _FREEIMAGE v&
_DEST BASIMAGE1&
_CLEARCOLOR 0: _PALETTECOLOR 15, clr&, BASIMAGE1&
_DEST origdest
'tile the image on screen
FOR x = 0 TO _WIDTH STEP size
FOR y = 0 TO _HEIGHT STEP size
_PUTIMAGE (x, y)-(x + size, y + size), BASIMAGE1&
NEXT
NEXT
_FREEIMAGE BASIMAGE1&
END SUB
|
|
|
What is the maximum size of Bidimensional Array? |
Posted by: Pedro - 11-12-2022, 06:02 PM - Forum: Help Me!
- Replies (11)
|
|
Greetings to all and congratulations for the creators of this forum and qb64Pe programmers.
I am programing something in QB64, and I need to create an array bidimensional of 3^14. I need 13 different values in each cell, so I used _bit*4 to store.
But the down array is the max lenght array I get
matrix = 3 ^ 10
DIM disaci(matrix, matrix) AS _BIT * 4
If I considerer only one bit for cell to store, then I can up lenght array to 3^11.
The question is: Can I make this array with QB64?
matrix = 3 ^ 14
DIM disaci(matrix, matrix) AS _BIT * 4
or forget it?
Thank you very much for attention
|
|
|
DAY 007: _PRESERVE |
Posted by: SMcNeill - 11-12-2022, 08:35 AM - Forum: Keyword of the Day!
- Replies (4)
|
|
This is another one of those commands that, unfortunately, we see people using wrong all the time. Let's see if we can help showcase a bit of a better way to use it than what many are doing for their standard practice.
First, let's start with the same basic questions as every day.
What is it? _PRESERVE is a command which is used when REDIM-ing an array and one wishes to preserve the existing data within it. It mainly only works properly with single dimensional arrays, so I'm not going to talk about the issues it faces with multi-dimensional arrays here. If someone is truly curious about those problems, go watch my movie-length video on REDIM and how it interacts with _MEM commands and memory. https://qb64phoenix.com/forum/showthread...707#pid707
How's it used? Place your _PRESERVE statement after REDIM and then set your array to the new size that you need it to be. The syntax here is rather simple for folks to grasp.
So how's it used wrongly?? Let me share a BAD example of the command to begin with -- we see this type of code all the time:
Code: (Select All) OPEN "myfile.txt" FOR INPUT AS #1
DO UNTIL EOF(1)
count = count + 1
IF count > UBOUND(array) THEN REDIM _PRESERVE array(count) AS STRING
LINE INPUT array(count)
LOOP
A file is opened where one might not know the length of the file contents, but they want to read each line into an array. How do many people do this? They end up reading the file one line at a time and growing the array with REDIM and _PRESERVE until it's large enough to hold all their data.
As I've said many times regarding this practice: Yuck! Yucky! YUCK!!
Let me showcase why this is a bad practice:
Code: (Select All) Limit = 5000000 '5,000,000 -- only a limit of five million
count = 0: t## = Timer
ReDim Array(0) As Long 'a standard redimable array, with a starting index of zero
Do
count = count + 1
If count > UBound(Array) Then ReDim _Preserve Array(count) As Long
Loop Until count >= Limit
Print Using " ##.##### seconds to redim and preserve our array as we go one increment at a time."; Timer - t##
Print "Phew! That took a wee bit to just redim and count, now didn't it?"
Print "IS there a better way??"
Print
Print "How about:"
count = 0: t## = Timer
ReDim _Preserve Array(100000) As Long 'start with an arbitary large number to begin with...
Do
count = count + 1
If count > UBound(Array) Then ReDim _Preserve Array(count + 100000) As Long 'add a large number of elements all at once, instead of 1 at a time
Loop Until count >= Limit
ReDim _Preserve Array(count) As Long 'resize the array to the max size AFTER the loop is finished.
Print Using " ##.##### seconds to redim and preserve our array as we go in large chunks."; Timer - t##
Now there's two REDIM and _PRESERVE loops inside the above code. Let's explain them both a little:
The first loop does nothing but counts from 0 to 5,000,000 and redims and preserves as we see above -- WITHOUT any calls to load data from the drive or anything else. All I want to show here is *how long* it takes for REDIM and PRESERVE to resize our array in this manner.
Our second loop works a wee bit different than the first -- instead of resizing itself one element at a time, it resizes in *large chunks*. At the end of our loops, BOTH arrays are the exact same size -- but there's a slight difference in the speed and performance between the two routines as show in the image below.
12.2 seconds for the first loop to run and resize. 0.1 seconds for the second loop. AND REMEMBER -- This isn't actually reading data or assigning data to the array, or anything else with these loops. This is the simple speed difference in how long it takes them both to resize and count to five million!
Use REDIM and _PRESERVE properly in your code, and you may be able to cut down load/processing times from multiple seconds/minutes to just fractions of a second. _PRESERVE is an important command for any programmer's tool box, but it's definitely one which needs to be used properly so that it doesn't bog down your programs unnecessarily.
|
|
|
|