1
1
Fork 0
mirror of https://github.com/FellippeHeitor/InForm.git synced 2024-05-12 06:50:12 +00:00

Remove dir to fix file name case

This commit is contained in:
Samuel Gomes 2023-11-19 10:22:47 +05:30
parent 28d9a5b56b
commit 1ad363bec8
8 changed files with 0 additions and 1518 deletions

View file

@ -1,181 +0,0 @@
'-----------------------------------------------------------------------------------------------------------------------
' Base64 Encoder and Decoder library
' Copyright (c) 2023 Samuel Gomes
'-----------------------------------------------------------------------------------------------------------------------
$IF BASE64_BAS = UNDEFINED THEN
$LET BASE64_BAS = TRUE
'-------------------------------------------------------------------------------------------------------------------
' Test code for debugging the library
'-------------------------------------------------------------------------------------------------------------------
'DEFLNG A-Z
'OPTION _EXPLICIT
'CONST ITERATIONS = 1000000
'CONST LOREM_IPSUM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut " + _
' "labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip " + _
' "ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat " + _
' "nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
'DIM encTxt AS STRING, decTxt AS STRING, i AS LONG, t AS DOUBLE
'PRINT ITERATIONS; "iterations,"; LEN(LOREM_IPSUM); "bytes."
'PRINT "Base64 encode..."
't = TIMER
'FOR i = 1 TO ITERATIONS
' encTxt = Base64_Encode(LOREM_IPSUM)
'NEXT
'PRINT USING "#####.##### seconds"; TIMER - t
'PRINT "Base64 decode..."
't = TIMER
'FOR i = 1 TO ITERATIONS
' decTxt = Base64_Decode(encTxt)
'NEXT
'PRINT USING "#####.##### seconds"; TIMER - t
'IF _STRCMP(decTxt, LOREM_IPSUM) = 0 THEN
' PRINT "Passed"
'ELSE
' PRINT "Failed"
'END IF
'END
'-------------------------------------------------------------------------------------------------------------------
' Converts a normal string or binary data to a base64 string
FUNCTION Base64_Encode$ (s AS STRING)
CONST BASE64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
DIM srcSize AS _UNSIGNED LONG: srcSize = LEN(s)
DIM srcSize3rem AS _UNSIGNED LONG: srcSize3rem = srcSize MOD 3
DIM srcSize3mul AS _UNSIGNED LONG: srcSize3mul = srcSize - srcSize3rem
DIM buffer AS STRING: buffer = SPACE$(((srcSize + 2) \ 3) * 4) ' preallocate complete buffer
DIM j AS _UNSIGNED LONG: j = 1
DIM i AS _UNSIGNED LONG: FOR i = 1 TO srcSize3mul STEP 3
DIM char1 AS _UNSIGNED _BYTE: char1 = ASC(s, i)
DIM char2 AS _UNSIGNED _BYTE: char2 = ASC(s, i + 1)
DIM char3 AS _UNSIGNED _BYTE: char3 = ASC(s, i + 2)
ASC(buffer, j) = ASC(BASE64_CHARACTERS, 1 + (_SHR(char1, 2)))
j = j + 1
ASC(buffer, j) = ASC(BASE64_CHARACTERS, 1 + (_SHL((char1 AND 3), 4) OR _SHR(char2, 4)))
j = j + 1
ASC(buffer, j) = ASC(BASE64_CHARACTERS, 1 + (_SHL((char2 AND 15), 2) OR _SHR(char3, 6)))
j = j + 1
ASC(buffer, j) = ASC(BASE64_CHARACTERS, 1 + (char3 AND 63))
j = j + 1
NEXT i
' Add padding
IF srcSize3rem > 0 THEN
char1 = ASC(s, i)
ASC(buffer, j) = ASC(BASE64_CHARACTERS, 1 + (_SHR(char1, 2)))
j = j + 1
IF srcSize3rem = 1 THEN
ASC(buffer, j) = ASC(BASE64_CHARACTERS, 1 + (_SHL(char1 AND 3, 4)))
j = j + 1
ASC(buffer, j) = 61 ' "="
j = j + 1
ASC(buffer, j) = 61 ' "="
ELSE ' srcSize3rem = 2
char2 = ASC(s, i + 1)
ASC(buffer, j) = ASC(BASE64_CHARACTERS, 1 + (_SHL((char1 AND 3), 4) OR _SHR(char2, 4)))
j = j + 1
ASC(buffer, j) = ASC(BASE64_CHARACTERS, 1 + (_SHL(char2 AND 15, 2)))
j = j + 1
ASC(buffer, j) = 61 ' "="
END IF
END IF
Base64_Encode = buffer
END FUNCTION
' Converts a base64 string to a normal string or binary data
FUNCTION Base64_Decode$ (s AS STRING)
DIM srcSize AS _UNSIGNED LONG: srcSize = LEN(s)
DIM buffer AS STRING: buffer = SPACE$((srcSize \ 4) * 3) ' preallocate complete buffer
DIM j AS _UNSIGNED LONG: j = 1
DIM AS _UNSIGNED _BYTE index, char1, char2, char3, char4
DIM i AS _UNSIGNED LONG: FOR i = 1 TO srcSize STEP 4
index = ASC(s, i): GOSUB find_index: char1 = index
index = ASC(s, i + 1): GOSUB find_index: char2 = index
index = ASC(s, i + 2): GOSUB find_index: char3 = index
index = ASC(s, i + 3): GOSUB find_index: char4 = index
ASC(buffer, j) = _SHL(char1, 2) OR _SHR(char2, 4)
j = j + 1
ASC(buffer, j) = _SHL(char2 AND 15, 4) OR _SHR(char3, 2)
j = j + 1
ASC(buffer, j) = _SHL(char3 AND 3, 6) OR char4
j = j + 1
NEXT i
' Remove padding
IF RIGHT$(s, 2) = "==" THEN
buffer = LEFT$(buffer, LEN(buffer) - 2)
ELSEIF RIGHT$(s, 1) = "=" THEN
buffer = LEFT$(buffer, LEN(buffer) - 1)
END IF
Base64_Decode = buffer
EXIT FUNCTION
find_index:
IF index >= 65 AND index <= 90 THEN
index = index - 65
ELSEIF index >= 97 AND index <= 122 THEN
index = index - 97 + 26
ELSEIF index >= 48 AND index <= 57 THEN
index = index - 48 + 52
ELSEIF index = 43 THEN
index = 62
ELSEIF index = 47 THEN
index = 63
END IF
RETURN
END FUNCTION
' Loads a binary file encoded with Bin2Data
' Usage:
' 1. Encode the binary file with Bin2Data
' 2. Include the file or it's contents
' 3. Load the file like so:
' Restore label_generated_by_bin2data
' Dim buffer As String
' buffer = LoadResource ' buffer will now hold the contents of the file
FUNCTION Base64_LoadResource$
DIM ogSize AS LONG, resize AS LONG, isComp AS _BYTE
DIM buffer AS STRING, chunk AS STRING, i AS LONG
READ ogSize, resize, isComp ' read the header
buffer = SPACE$(resize) ' preallocate complete buffer
' Read the whole resource data
DO WHILE i < resize
READ chunk
MID$(buffer, i + 1) = chunk
i = i + LEN(chunk)
LOOP
' Decode the data
buffer = Base64_Decode(buffer)
' Expand the data if needed
IF isComp THEN buffer = _INFLATE$(buffer, ogSize)
Base64_LoadResource = buffer
END FUNCTION
$END IF

View file

@ -1,957 +0,0 @@
'#######################################################################################
'# Animated GIF decoder v1.0 #
'# By Zom-B #
'# #
'# https://qb64phoenix.com/qb64wiki/index.php/GIF_Images #
'#######################################################################################
' Adapted for use with InForm's PictureBox controls by @FellippeHeitor
' Refactored by a740g to use include guards and conditional compiles
$IF GIFPLAY_BAS = UNDEFINED THEN
$LET GIFPLAY_BAS = TRUE
'$INCLUDE:'GIFPlay.bi'
SUB UpdateGif (ID AS LONG)
SHARED GIFData() AS GIFDATA
STATIC GifOverlay AS LONG
DIM i AS LONG, newFrame AS LONG
i = GetGifIndex(ID)
IF i = 0 THEN EXIT SUB
IF GifOverlay = 0 THEN
GifOverlay = LoadOverlayImage&
END IF
IF GIFData(i).IsPlaying OR GIFData(i).LastFrameServed = 0 THEN
IF GIFData(i).LastFrameUpdate > 0 AND TIMER - GIFData(i).LastFrameUpdate < GIFData(i).LastFrameDelay THEN
'Wait for the GIF's frame delay
ELSE
GIFData(i).Frame = GIFData(i).Frame + 1
GIFData(i).LastFrameServed = GIFData(i).Frame
GIFData(i).LastFrameUpdate = TIMER
END IF
END IF
$IF INFORM_BI = DEFINED THEN
BeginDraw ID
$END IF
newFrame = GetGifFrame&(i)
IF newFrame THEN _PUTIMAGE , newFrame
IF GIFData(i).IsPlaying = FALSE AND GIFData(i).HideOverlay = FALSE AND GIFData(i).totalFrames > 1 THEN
_PUTIMAGE (_WIDTH / 2 - _WIDTH(GifOverlay) / 2, _HEIGHT / 2 - _HEIGHT(GifOverlay) / 2), GifOverlay
END IF
$IF INFORM_BI = DEFINED THEN
EndDraw ID
$END IF
END SUB
FUNCTION GifIsPlaying%% (ID AS LONG)
SHARED GIFData() AS GIFDATA
DIM i AS LONG: i = GetGifIndex(ID)
GifIsPlaying = GIFData(i).IsPlaying
END FUNCTION
FUNCTION GifWidth% (ID AS LONG)
SHARED GIFData() AS GIFDATA
DIM i AS LONG: i = GetGifIndex(ID)
GifWidth = GIFData(i).width
END FUNCTION
FUNCTION GifHeight% (ID AS LONG)
SHARED GIFData() AS GIFDATA
DIM i AS LONG: i = GetGifIndex(ID)
GifHeight = GIFData(i).height
END FUNCTION
FUNCTION TotalFrames& (ID AS LONG)
SHARED GIFData() AS GIFDATA
DIM i AS LONG: i = GetGifIndex(ID)
TotalFrames = GIFData(i).totalFrames
END FUNCTION
SUB HideGifOverlay (ID AS LONG)
SHARED GIFData() AS GIFDATA
DIM i AS LONG: i = GetGifIndex(ID)
GIFData(i).HideOverlay = TRUE
END SUB
SUB PlayGif (ID AS LONG)
SHARED GIFData() AS GIFDATA
DIM i AS LONG: i = GetGifIndex(ID)
GIFData(i).IsPlaying = TRUE
END SUB
SUB PauseGif (ID AS LONG)
SHARED GIFData() AS GIFDATA
DIM i AS LONG: i = GetGifIndex(ID)
GIFData(i).IsPlaying = FALSE
END SUB
SUB StopGif (ID AS LONG)
SHARED GIFData() AS GIFDATA
DIM i AS LONG: i = GetGifIndex(ID)
GIFData(i).IsPlaying = FALSE
GIFData(i).Frame = 1
END SUB
FUNCTION OpenGif%% (ID AS LONG, filename$)
SHARED GIFData() AS GIFDATA
SHARED GIFFrameData() AS FRAMEDATA
SHARED TotalGIFLoaded AS LONG, TotalGIFFrames AS LONG
DIM i AS LONG, Index AS LONG
DIM byte~%%, palette$, delay~%
$IF INFORM_BI = DEFINED THEN
IF Control(ID).Type <> __UI_Type_PictureBox THEN ERROR 5: EXIT FUNCTION
$END IF
Index = GetGifIndex&(ID)
IF Index = 0 THEN
TotalGIFLoaded = TotalGIFLoaded + 1
Index = TotalGIFLoaded
REDIM _PRESERVE GIFData(1 TO TotalGIFLoaded) AS GIFDATA
ELSE
CloseGif ID
END IF
GIFData(Index).ID = ID
GIFData(Index).file = FREEFILE
IF NOT _FILEEXISTS(filename$) THEN EXIT FUNCTION
OPEN filename$ FOR BINARY AS GIFData(Index).file
GET GIFData(Index).file, , GIFData(Index).sigver
GET GIFData(Index).file, , GIFData(Index).width
GET GIFData(Index).file, , GIFData(Index).height
GET GIFData(Index).file, , byte~%%
GIFData(Index).bpp = (byte~%% AND 7) + 1
GIFData(Index).sortFlag = (byte~%% AND 8) > 0
GIFData(Index).colorRes = (byte~%% \ 16 AND 7) + 1
GIFData(Index).colorTableFlag = (byte~%% AND 128) > 0
GIFData(Index).numColors = 2 ^ GIFData(Index).bpp
GET GIFData(Index).file, , GIFData(Index).bgColor
GET GIFData(Index).file, , byte~%%
IF byte~%% = 0 THEN GIFData(Index).aspect = 0 ELSE GIFData(Index).aspect = (byte~%% + 15) / 64
IF GIFData(Index).sigver <> "GIF87a" AND GIFData(Index).sigver <> "GIF89a" THEN
'Invalid version
GOTO LoadError
END IF
IF NOT GIFData(Index).colorTableFlag THEN
'No Color Table
GOTO LoadError
END IF
palette$ = SPACE$(3 * GIFData(Index).numColors)
GET GIFData(Index).file, , palette$
GIFData(Index).palette = palette$
DO
GET GIFData(Index).file, , byte~%%
SELECT CASE byte~%%
CASE &H2C ' Image Descriptor
TotalGIFFrames = TotalGIFFrames + 1
GIFData(Index).totalFrames = GIFData(Index).totalFrames + 1
IF GIFData(Index).firstFrame = 0 THEN
GIFData(Index).firstFrame = TotalGIFFrames
END IF
IF TotalGIFFrames > UBOUND(GIFFrameData) THEN
REDIM _PRESERVE GIFFrameData(0 TO TotalGIFFrames * 2) AS FRAMEDATA
END IF
GIFFrameData(TotalGIFFrames).ID = ID
GIFFrameData(TotalGIFFrames).thisFrame = GIFData(Index).totalFrames
GET GIFData(Index).file, , GIFFrameData(TotalGIFFrames).left
GET GIFData(Index).file, , GIFFrameData(TotalGIFFrames).top
GET GIFData(Index).file, , GIFFrameData(TotalGIFFrames).width
GET GIFData(Index).file, , GIFFrameData(TotalGIFFrames).height
GET GIFData(Index).file, , byte~%%
GIFFrameData(TotalGIFFrames).localColorTableFlag = (byte~%% AND 128) > 0
GIFFrameData(TotalGIFFrames).interlacedFlag = (byte~%% AND 64) > 0
GIFFrameData(TotalGIFFrames).sortFlag = (byte~%% AND 32) > 0
GIFFrameData(TotalGIFFrames).palBPP = (byte~%% AND 7) + 1
GIFFrameData(TotalGIFFrames).addr = LOC(GIFData(Index).file) + 1
IF GIFFrameData(TotalGIFFrames).localColorTableFlag THEN
SEEK GIFData(Index).file, LOC(GIFData(Index).file) + 3 * 2 ^ GIFFrameData(TotalGIFFrames).palBPP + 1
END IF
GET GIFData(Index).file, , GIFFrameData(TotalGIFFrames).minimumCodeSize
IF GIFFrameData(TotalGIFFrames).disposalMethod > 2 THEN
'Unsupported disposalMethod
GOTO LoadError
END IF
SkipGIFBlocks GIFData(Index).file
CASE &H3B ' Trailer
EXIT DO
CASE &H21 ' Extension Introducer
GET GIFData(Index).file, , byte~%% ' Extension Label
SELECT CASE byte~%%
CASE &HFF, &HFE ' Application Extension, Comment Extension
SkipGIFBlocks GIFData(Index).file
CASE &HF9
IF TotalGIFFrames > UBOUND(GIFFrameData) THEN
REDIM _PRESERVE GIFFrameData(0 TO TotalGIFFrames * 2) AS FRAMEDATA
END IF
GIFFrameData(TotalGIFFrames).ID = ID
GET GIFData(Index).file, , byte~%% ' Block Size (always 4)
GET GIFData(Index).file, , byte~%%
GIFFrameData(TotalGIFFrames).transparentFlag = (byte~%% AND 1) > 0
GIFFrameData(TotalGIFFrames).userInput = (byte~%% AND 2) > 0
GIFFrameData(TotalGIFFrames).disposalMethod = byte~%% \ 4 AND 7
GET GIFData(Index).file, , delay~%
IF delay~% = 0 THEN GIFFrameData(TotalGIFFrames).delay = 0.1 ELSE GIFFrameData(TotalGIFFrames).delay = delay~% / 100
GET GIFData(Index).file, , GIFFrameData(TotalGIFFrames).transColor
SkipGIFBlocks GIFData(Index).file
CASE ELSE
'Unsupported extension Label
GOTO LoadError
END SELECT
CASE ELSE
'Unsupported chunk
GOTO LoadError
END SELECT
LOOP
REDIM _PRESERVE GIFFrameData(0 TO TotalGIFFrames) AS FRAMEDATA
GIFData(Index).IsPlaying = FALSE
OpenGif = TRUE
EXIT FUNCTION
LoadError:
GIFData(Index).ID = 0
CLOSE GIFData(Index).file
FOR i = 1 TO TotalGIFFrames
IF GIFFrameData(i).ID = ID THEN
GIFFrameData(i).ID = 0
END IF
NEXT
END FUNCTION
FUNCTION GetGifIndex& (ID AS LONG)
SHARED GIFData() AS GIFDATA
SHARED TotalGIFLoaded AS LONG
DIM i AS LONG: FOR i = 1 TO TotalGIFLoaded
IF GIFData(i).ID = ID THEN
GetGifIndex = i
EXIT FOR
END IF
NEXT i
END FUNCTION
SUB CloseGif (ID AS LONG)
SHARED GIFData() AS GIFDATA
SHARED GIFFrameData() AS FRAMEDATA
DIM i AS LONG, Index AS LONG
Index = GetGifIndex(ID)
IF Index = 0 THEN EXIT SUB
FOR i = 0 TO UBOUND(GIFFrameData)
IF GIFFrameData(i).ID = ID THEN
GIFFrameData(i).ID = 0
IF GIFFrameData(i).addr < -1 THEN
_FREEIMAGE GIFFrameData(i).addr
END IF
END IF
NEXT
CLOSE GIFData(Index).file
GIFData(Index).ID = 0
GIFData(Index).firstFrame = 0
END SUB
SUB SkipGIFBlocks (file AS INTEGER)
DIM byte~%%
DO
GET file, , byte~%% ' Block Size
SEEK file, LOC(file) + byte~%% + 1
LOOP WHILE byte~%%
END SUB
FUNCTION GetGifFrame& (Index AS LONG)
SHARED GIFData() AS GIFDATA
SHARED GIFFrameData() AS FRAMEDATA
DIM i AS LONG
DIM frame AS LONG, previousFrame AS LONG
DIM w AS INTEGER, h AS INTEGER
DIM img&, actualFrame&
DIM prevDest AS LONG
IF GIFData(Index).Frame > GIFData(Index).totalFrames THEN
GIFData(Index).Frame = 1
END IF
FOR i = 1 TO UBOUND(GIFFrameData)
IF GIFFrameData(i).ID = GIFData(Index).ID AND GIFFrameData(i).thisFrame = GIFData(Index).Frame THEN
frame = i
EXIT FOR
ELSEIF GIFFrameData(i).ID = GIFData(Index).ID AND GIFFrameData(i).thisFrame < GIFData(Index).Frame THEN
previousFrame = i
END IF
NEXT
GIFData(Index).LastFrameDelay = GIFFrameData(frame).delay - (GIFFrameData(frame).delay / 10)
IF GIFFrameData(frame).addr > 0 THEN
prevDest = _DEST
w = GIFFrameData(frame).width
h = GIFFrameData(frame).height
img& = _NEWIMAGE(w, h, 256)
actualFrame& = _NEWIMAGE(GIFData(Index).width, GIFData(Index).height, 256)
_DEST img&
DecodeFrame GIFData(Index), GIFFrameData(frame)
_DEST actualFrame&
IF GIFFrameData(frame).localColorTableFlag THEN
_COPYPALETTE img&
ELSE
FOR i = 0 TO GIFData(Index).numColors - 1
_PALETTECOLOR i, _RGB32(ASC(GIFData(Index).palette, i * 3 + 1), ASC(GIFData(Index).palette, i * 3 + 2), ASC(GIFData(Index).palette, i * 3 + 3))
NEXT
END IF
IF GIFData(Index).Frame > 1 THEN
SELECT CASE GIFFrameData(previousFrame).disposalMethod
CASE 0, 1
_PUTIMAGE , GIFFrameData(previousFrame).addr
CASE 2
CLS , GIFData(Index).bgColor
_CLEARCOLOR GIFData(Index).bgColor
END SELECT
ELSE
CLS , GIFData(Index).bgColor
END IF
IF GIFFrameData(frame).transparentFlag THEN
_CLEARCOLOR GIFFrameData(frame).transColor, img&
END IF
_PUTIMAGE (GIFFrameData(frame).left, GIFFrameData(frame).top), img&
_FREEIMAGE img&
GIFFrameData(frame).addr = actualFrame&
GIFData(Index).LoadedFrames = GIFData(Index).LoadedFrames + 1
GIFData(Index).GifLoadComplete = (GIFData(Index).LoadedFrames = GIFData(Index).totalFrames)
_DEST prevDest
END IF
GetGifFrame& = GIFFrameData(frame).addr
END FUNCTION
SUB DecodeFrame (gifdata AS GIFDATA, GifFrameData AS FRAMEDATA)
DIM byte AS _UNSIGNED _BYTE
DIM prefix(4095), suffix(4095), colorStack(4095)
DIM startCodeSize AS INTEGER, clearCode AS INTEGER
DIM endCode AS INTEGER, minCode AS INTEGER, startMaxCode AS INTEGER
DIM nvc AS INTEGER, codeSize AS INTEGER
DIM maxCode AS INTEGER, bitPointer AS INTEGER, blockSize AS INTEGER
DIM blockPointer AS INTEGER, x AS INTEGER, y AS INTEGER
DIM palette$, i AS LONG, c&, stackPointer AS INTEGER
DIM currentCode AS INTEGER, code AS INTEGER, lastColor AS INTEGER
DIM oldCode AS INTEGER, WorkCode&, LastChar AS INTEGER
DIM interlacedPass AS INTEGER, interlacedStep AS INTEGER
DIM file AS INTEGER, a$, loopStart!
startCodeSize = gifdata.bpp + 1
clearCode = 2 ^ gifdata.bpp
endCode = clearCode + 1
minCode = endCode + 1
startMaxCode = clearCode * 2 - 1
nvc = minCode
codeSize = startCodeSize
maxCode = startMaxCode
IF GifFrameData.interlacedFlag THEN interlacedPass = 0: interlacedStep = 8
bitPointer = 0
blockSize = 0
blockPointer = 0
x = 0
y = 0
file = gifdata.file
SEEK file, GifFrameData.addr
IF GifFrameData.localColorTableFlag THEN
palette$ = SPACE$(3 * 2 ^ GifFrameData.palBPP)
GET file, , palette$
FOR i = 0 TO gifdata.numColors - 1
c& = _RGB32(ASC(palette$, i * 3 + 1), ASC(palette$, i * 3 + 2), ASC(palette$, i * 3 + 3))
_PALETTECOLOR i, c&
NEXT
END IF
GET file, , byte ' minimumCodeSize
loopStart! = TIMER
DO
IF TIMER - loopStart! > 2 THEN EXIT DO
GOSUB GetCode
stackPointer = 0
IF code = clearCode THEN 'Reset & Draw next color direct
nvc = minCode ' \
codeSize = startCodeSize ' Preset default codes
maxCode = startMaxCode ' /
GOSUB GetCode
currentCode = code
lastColor = code
colorStack(stackPointer) = lastColor
stackPointer = 1
ELSEIF code <> endCode THEN 'Draw direct color or colors from suffix
currentCode = code
IF currentCode = nvc THEN 'Take last color too
currentCode = oldCode
colorStack(stackPointer) = lastColor
stackPointer = stackPointer + 1
END IF
WHILE currentCode >= minCode 'Extract colors from suffix
colorStack(stackPointer) = suffix(currentCode)
stackPointer = stackPointer + 1
currentCode = prefix(currentCode) 'Next color from suffix is described in
WEND ' the prefix, else prefix is the last col.
lastColor = currentCode ' Last color is equal to the
colorStack(stackPointer) = lastColor ' last known code (direct, or from
stackPointer = stackPointer + 1 ' Prefix)
suffix(nvc) = lastColor 'Automatically, update suffix
prefix(nvc) = oldCode 'Code from the session before (for extracting from suffix)
nvc = nvc + 1
IF nvc > maxCode AND codeSize < 12 THEN
codeSize = codeSize + 1
maxCode = maxCode * 2 + 1
END IF
END IF
FOR i = stackPointer - 1 TO 0 STEP -1
PSET (x, y), colorStack(i)
x = x + 1
IF x = GifFrameData.width THEN
x = 0
IF GifFrameData.interlacedFlag THEN
y = y + interlacedStep
IF y >= GifFrameData.height THEN
SELECT CASE interlacedPass
CASE 0: interlacedPass = 1: y = 4
CASE 1: interlacedPass = 2: y = 2
CASE 2: interlacedPass = 3: y = 1
END SELECT
interlacedStep = 2 * y
END IF
ELSE
y = y + 1
END IF
END IF
NEXT
oldCode = code
LOOP UNTIL code = endCode
GET file, , byte
EXIT SUB
GetCode:
IF bitPointer = 0 THEN GOSUB ReadByteFromBlock: bitPointer = 8
WorkCode& = LastChar \ (2 ^ (8 - bitPointer))
WHILE codeSize > bitPointer
GOSUB ReadByteFromBlock
WorkCode& = WorkCode& OR LastChar * (2 ^ bitPointer)
bitPointer = bitPointer + 8
WEND
bitPointer = bitPointer - codeSize
code = WorkCode& AND maxCode
RETURN
ReadByteFromBlock:
IF blockPointer = blockSize THEN
GET file, , byte: blockSize = byte
a$ = SPACE$(blockSize): GET file, , a$
blockPointer = 0
END IF
blockPointer = blockPointer + 1
LastChar = ASC(MID$(a$, blockPointer, 1))
RETURN
END SUB
FUNCTION gifOverlayImage$
DIM A$
A$ = MKI$(64) + MKI$(64)
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000J000005000`M0000M20004<000`e0000V30008?000Pl0000"
A$ = A$ + "V3000L=000@`0000M2000L70000D0000J000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000003000PQ0000<30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?0000c0000620000300000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "00030000^1000X<000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000:3000h60000300000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000l0000@N0000Q30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000Q3000T7000`30000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000010000\5000`g0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "O3000\5000@0000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000R0000X;000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000j2000420"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000A1000D>000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000@i0000A100000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000@00000520008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000@Q0000100000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000P10000M20008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b3000d9000P1000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000000000000000P1"
A$ = A$ + "0000^20008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000^2000H00000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000@00000L20008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0000W00001000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000120008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b300088000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000000000@10008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000A10000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000P0000@>000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000@>00008000000000000000000000000000000000000000000000000"
A$ = A$ + "000010000T;000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000i2000400"
A$ = A$ + "000000000000000000000000000000000000000000000\5000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?0000G00000000000000000000"
A$ = A$ + "000000000000000000000l0000Pg0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000N3000l0000000000000000000000000000000000"
A$ = A$ + "00@N0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000@N000000000000000000000000000000`20000Q30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000Q3000`000000"
A$ = A$ + "00000000000000000000^10008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000PK000000000000000000001000"
A$ = A$ + "0l<000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000@30004000000000000000L3000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "000m0000f3000P?000Pn0000j3000X?000Pn0000h3000@?000`l0000b300"
A$ = A$ + "08?000Pl0000b30008?000@m0000h3000X?0000n0000f30008?000`l0000"
A$ = A$ + "g3000T?000Pn0000j3000X?000Pn0000j3000X?000Pn0000j3000X?000Pn"
A$ = A$ + "0000j3000P?000`l0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00`=000000000000000R0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b3000D?0000n0000j3000X?000Pn0000"
A$ = A$ + "j3000X?000Pn0000j3000X?000Pn0000i3000H?000Pl0000b30008?000@m"
A$ = A$ + "0000j3000X?000Pn0000j3000X?000Pm0000g3000X?000Pn0000j3000X?0"
A$ = A$ + "00Pn0000j3000X?000Pn0000j3000X?000Pn0000j3000X?000Pn0000i300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl00009200000000000000"
A$ = A$ + "<30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b3000H?000Pn0000jOb9WX?WLb9oNk]gnooooooooooooooooooooooZ"
A$ = A$ + "[^JoniWOl3000X?000Pn0000h30008?000Pl0000g3000X?^hRKoooooo;]d"
A$ = A$ + "Bk?000Pn0000h3000T?000PnZ[^jnooooooooooooooooooooooooooooooo"
A$ = A$ + "oooooooooooooooooooooooooooo\a6Kk3000X?000@m0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b3000d<000000000K00008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b3000H?000Pn0000j_jZ"
A$ = A$ + "[foooooooooooooooooooooooooooooooooooooooooooooooo_dB;]oWLb9"
A$ = A$ + "j3000X?000Pm0000b3000L?000PnhR;^mooooo_dB;]o0000j3000P?000@n"
A$ = A$ + "0000j[^jZkoooooooooooooooooooooooooooooooooooooooooooooooooo"
A$ = A$ + "oooooooooc6K\]?000Pn0000e30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000L000005000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b3000@?000Pn0000j;]dBkoooooooooooGLa5g_Oni7o"
A$ = A$ + "0000j3000X?000PnIUEFk_jZ[foooooooooook]gNk?000Pn0000j3000@?0"
A$ = A$ + "00`m0000jS;^hfooooooB;]dn3000X?0000n0000i3000X_jZ[^oooooogHS"
A$ = A$ + "=b?000Pn0000j3000X?000Pn0000j3000X?000Pn0000j3000X?000Pn0000"
A$ = A$ + "i30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300085000@O"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "000n0000jc9WLboooooooooooc6K\]?000Pn0000j3000X?000Pn0000j300"
A$ = A$ + "0X?000PnIUEFkoooooooooooLb9Wl3000X?000Pm0000g3000X?^hRKooooo"
A$ = A$ + "o;]dBk?000Pn0000h3000T?000PnZ[^jnoooooOS=f8o0000j3000X?000Pn"
A$ = A$ + "0000j3000X?000Pn0000j3000X?000Pn0000h3000<?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000@O0000T20008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?0000m0000jOb9WXoooooooooo"
A$ = A$ + "ogHS=b?000Pn0000i3000H?000`l0000b30008?000@m0000h3000X?WLb9o"
A$ = A$ + "oooook]gNk?000Pn0000h3000L?000PnhR;^mooooo_dB;]o0000j3000P?0"
A$ = A$ + "00@n0000j[^jZkoooooo=fHSl3000X?000@m0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000T20008<000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000f3000X?WLb9oooooo[^jZk?000Pn0000j3000<?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b3000@?000PnWLb9jGLa5g?WLb9oWLb9j300"
A$ = A$ + "0X?000`m0000jS;^hfooooooB;]dn3000X?0000n0000i3000X_jZ[^ooooo"
A$ = A$ + "ogHS=b?000Pn0000e30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008<0"
A$ = A$ + "00@f0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "0P?000PnNk]gnooooo?WLb9o0000j3000L?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000h3000X?000Pn0000j3000X?0000n0000g3000X?^hRKo"
A$ = A$ + "ooooo;]dBk?000Pn0000h3000T?000PnZ[^jnoooooOS=f8o0000j3000X?0"
A$ = A$ + "00Pn0000j3000X?000Pn0000j3000P?000Pm0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000@e0000V30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000@n0000jC?mdooooooo"
A$ = A$ + "\a6Kk3000X?000@m0000b30008?000`l0000h3000X?000Pn0000j3000X?0"
A$ = A$ + "00Pn0000j3000X?0000n0000c3000L?000PnhR;^mooooo_dB;]o0000j300"
A$ = A$ + "0P?000@n0000j[^jZkoooooo=fHSl3000X?000Pn0000j3000X?000Pn0000"
A$ = A$ + "j3000X?000Pn0000j3000H?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000P30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000j3000Xooooooooooo?d@3]?000Pn0000c300"
A$ = A$ + "08?000Pl0000i3000X?000Pn0000j3000X?000Pn0000j3000X?000Pn0000"
A$ = A$ + "j3000X?000`m0000jS;^hfooooooB;]dn3000X?0000n0000i3000X_jZ[^o"
A$ = A$ + "ooooooooooooooooooooooooooooooooooooooooooooooooB;]dn3000X?0"
A$ = A$ + "000n0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "0`>000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000X?000Pnooooooooooo@3=dn0000j3000<?000Pl0000e3000X?K\afn"
A$ = A$ + "ooooooooooooooooooooooooooooooooooooogHS=b?000Pn0000g3000X?^"
A$ = A$ + "hRKoooooo;]dBk?000Pn0000h3000T?000PnZ[^jnooooooooooooooooooo"
A$ = A$ + "ooooooooooooooooooooooooooooo;]dBk?000Pn0000h30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?0000k0000V30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pn0000jooooooo"
A$ = A$ + "oooo\a6Kk3000X?000@m0000b3000D?000Pn\a6Kkooooooooooooooooooo"
A$ = A$ + "ooooooooooooooooooOS=f8o0000j3000L?000PnhR;^mooooo_dB;]o0000"
A$ = A$ + "j3000P?000@n0000j[^jZkoooooo=fHSl3000X?000Pn0000j3000X?000Pn"
A$ = A$ + "0000j3000X?000Pn0000j3000H?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000P3000T=000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000h3000X_gNk]ooooooc9WLb?000Pn0000"
A$ = A$ + "f30008?000Pl0000i3000X?000Pn0000j3000X?000Pn0000j[^jZkoooooo"
A$ = A$ + "=fHSl3000X?000`m0000jS;^hfooooooB;]dn3000X?0000n0000i3000X_j"
A$ = A$ + "Z[^oooooogHS=b?000Pn0000j3000X?000Pn0000j3000X?000Pn0000h300"
A$ = A$ + "0H?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000D=000P`0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b3000H?000PnLb9Wlooooo_gNk]o0000j3000T?000`l0000b3000<?0"
A$ = A$ + "000n0000j3000X?000Pn0000j3000X_jZ[^oooooogHS=b?000Pn0000g300"
A$ = A$ + "0X?^hRKoooooo;]dBk?000Pn0000h3000T?000PnZ[^jnoooooOS=f8o0000"
A$ = A$ + "j3000D?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000P`0000T20008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0000m0000j?d@"
A$ = A$ + "3]oooooooooookWOna?000Pn0000i3000H?0000m0000b30008?0000m0000"
A$ = A$ + "g3000T?000PnZ[^jnoooooOS=f8o0000j3000L?000PnhR;^mooooo_dB;]o"
A$ = A$ + "0000j3000P?000@n0000j[^jZkoooooo=fHSl3000X?000@m0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000T2000d7000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b3000P?000PnLb9Wlooooooooooo"
A$ = A$ + "niWOl3000X?000Pn0000j3000X?000Pn0000j3000X?000PnniWOlC?mdooo"
A$ = A$ + "oooo=fHSl3000X?000`m0000jS;^hfooooooB;]dn3000X?0000n0000i300"
A$ = A$ + "0X_jZ[^oooooogHS=b?000Pn0000e30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b3000d7000PD0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?0000m0000j3000X?^hRKooooooooooo_dB;]oLb9Wl300"
A$ = A$ + "0X?000Pn0000jOb9WX?WLb9oZ[^jnoooooooooooZ[^jnWEFI]?000Pn0000"
A$ = A$ + "g3000X?^hRKoooooo;]dBk?000Pn0000h3000T?000PnZ[^jnoooooOS=f8o"
A$ = A$ + "0000j3000D?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000PD0000L000"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000D?000Pn0000jc9WLboooooooooooooooooooooooooooooooooooooo"
A$ = A$ + "oooooooooooooooo[^jZm3000X?000Pn0000h3000L?000PnhR;^mooooo_d"
A$ = A$ + "B;]o0000j3000P?000@n0000j[^jZkoooooo=fHSl3000X?000@m0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000L000000000@c0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000e3000X?0"
A$ = A$ + "00Pn0000jc9WLbOa5GLooooooooooooooooooooooGLa5g?WLb9o0000j300"
A$ = A$ + "0X?000Pn0000g3000<?000`m0000jS;^hfooooooB;]dn3000X?0000n0000"
A$ = A$ + "i3000X_jZ[^oooooogHS=b?000Pn0000e30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000>300000000000000920008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?0000m0000h3000X?000Pn0000"
A$ = A$ + "j3000X?000Pn0000j3000X?000Pn0000j3000X?0000n0000e30008?000Pl"
A$ = A$ + "0000e3000X?000Pn0000j3000X?000Pn0000f3000L?000Pn0000j3000X?0"
A$ = A$ + "00Pn0000j3000<?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b3000T8000000000"
A$ = A$ + "00000P3000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?0000m0000f3000P?000Pn0000j3000X?0"
A$ = A$ + "00Pn0000h3000H?0000m0000b30008?000Pl0000b30008?000@m0000h300"
A$ = A$ + "0X?0000n0000f30008?000`l0000g3000T?000Pn0000h3000<?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?0000>00000000000000@00000@30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?0000d0000100000000000000000000h6000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000^10000000000"
A$ = A$ + "00000000000000030000R30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000R3000`000000000000000000000000000000"
A$ = A$ + "0T7000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b3000T700000000000000000000000000000000000`30000N30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b3000h=000@4000000000000"
A$ = A$ + "00000000000000000000000000000`5000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?0000G000000000000000000000000000000000000"
A$ = A$ + "0000000000@00000j20008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000P^"
A$ = A$ + "000010000000000000000000000000000000000000000000000000000420"
A$ = A$ + "000i0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?0000i0000Q0000000000000000000"
A$ = A$ + "00000000000000000000000000000000000000000000A10008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000A1000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000`P0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl000042000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "00000000000010000`9000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000L2000400000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000000000000000P1"
A$ = A$ + "0000^20008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000^2000H00000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000H0000@W0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000M2000H00000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000010000D8000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl000052000400000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000A1000D>000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000@i0000A1000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000P80000j20008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000P^0000Q0000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000400"
A$ = A$ + "000G0000O30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b3000l=0000G"
A$ = A$ + "000010000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000000000000000000000000000000000000000000000000l0000@N0000"
A$ = A$ + "Q30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000Q3000X7000`3000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "00000000000000000000000000000000000000000`0000PK0000;30008?0"
A$ = A$ + "00Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b300"
A$ = A$ + "08?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000`b0000"
A$ = A$ + "^1000`000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000<0000920000=000Pl0000"
A$ = A$ + "b30008?000Pl0000b30008?000Pl0000b30008?000Pl0000b30008?000Pl"
A$ = A$ + "0000b30008?000Pl0000@3000T80000<0000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000J000005000@N0000N20008<0"
A$ = A$ + "000f0000Y30008?000@k0000R30008=000P`0000N2000T70000D0000J000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "000000000000000000000000000000000000000000000000000000000000"
A$ = A$ + "0000%%00"
gifOverlayImage$ = A$
END FUNCTION
FUNCTION LoadOverlayImage&
$IF INFORM_BI = UNDEFINED THEN
DECLARE CUSTOMTYPE LIBRARY
SUB __UI_MemCopy ALIAS memcpy (BYVAL dest AS _OFFSET, BYVAL source AS _OFFSET, BYVAL bytes AS LONG)
END DECLARE
$END IF
DIM MemoryBlock AS _MEM, TempImage AS LONG
DIM NewWidth AS INTEGER, NewHeight AS INTEGER, A$, BASFILE$
A$ = gifOverlayImage$
IF LEN(A$) = 0 THEN EXIT FUNCTION
NewWidth = CVI(LEFT$(A$, 2))
NewHeight = CVI(MID$(A$, 3, 2))
A$ = MID$(A$, 5)
BASFILE$ = gifUnpack$(A$)
TempImage = _NEWIMAGE(NewWidth, NewHeight, 32)
MemoryBlock = _MEMIMAGE(TempImage)
__UI_MemCopy MemoryBlock.OFFSET, _OFFSET(BASFILE$), LEN(BASFILE$)
_MEMFREE MemoryBlock
LoadOverlayImage& = TempImage
END FUNCTION
FUNCTION gifUnpack$ (PackedData$)
'Adapted from Dav's BIN2BAS
'http://www.qbasicnews.com/dav/qb64.php
DIM A$, i&, B$, C%, F$, C$, t%, B&, X$, btemp$
A$ = PackedData$
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 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
gifUnpack$ = btemp$
END FUNCTION
$END IF

View file

@ -1,129 +0,0 @@
' MessageBox compatibility functions
' These basically emulate the legacy InForm MessageBox routines
' All it does is calls the new QB64-PE _MESSAGEBOX$ function
'$INCLUDE:'MessageBox.bi'
$IF MESSAGEBOX_BAS = UNDEFINED THEN
$LET MESSAGEBOX_BAS = TRUE
FUNCTION MessageBox& (message AS STRING, caption AS STRING, setup AS LONG)
DIM dialogType AS STRING
IF setup AND MsgBox_YesNo THEN
dialogType = "yesno"
ELSEIF setup AND MsgBox_YesNoCancel THEN
dialogType = "yesnocancel"
ELSEIF setup AND MsgBox_OkCancel THEN
dialogType = "okcancel"
ELSEIF setup AND MsgBox_OkOnly THEN
dialogType = "ok"
END IF
DIM iconType AS STRING
IF setup AND MsgBox_Critical THEN
iconType = "error"
ELSEIF setup AND MsgBox_Question THEN
iconType = "question"
ELSEIF setup AND MsgBox_Exclamation THEN
iconType = "warning"
ELSEIF setup AND MsgBox_Information THEN
iconType = "info"
END IF
DIM defaultButton AS LONG
IF setup AND MsgBox_DefaultButton3 THEN
SELECT CASE dialogType
CASE "yesnocancel"
defaultButton = 0
CASE "yesno"
defaultButton = 0
CASE "okcancel"
defaultButton = 0
CASE "ok"
defaultButton = 1
END SELECT
ELSEIF setup AND MsgBox_DefaultButton2 THEN
SELECT CASE dialogType
CASE "yesnocancel"
defaultButton = 2
CASE "yesno"
defaultButton = 0
CASE "okcancel"
defaultButton = 0
CASE "ok"
defaultButton = 1
END SELECT
ELSEIF setup AND MsgBox_DefaultButton1 THEN
SELECT CASE dialogType
CASE "yesnocancel"
defaultButton = 1
CASE "yesno"
defaultButton = 1
CASE "okcancel"
defaultButton = 1
CASE "ok"
defaultButton = 1
END SELECT
END IF
DIM __caption AS STRING
IF caption = "" THEN
IF __UI_CurrentTitle <> "" THEN
__caption = __UI_CurrentTitle
ELSEIF _TITLE$ <> "" THEN
__caption = _TITLE$
ELSE
__caption = COMMAND$(0)
END IF
ELSE
__caption = caption
END IF
_DELAY 0.2 ' delay a bit so that the interface can redraw before the messagebox kicks in
DIM returnValue AS LONG: returnValue = _MESSAGEBOX(__caption, message, dialogType, iconType, defaultButton)
SELECT CASE returnValue
CASE 0
SELECT CASE dialogType
CASE "yesnocancel"
MessageBox = MsgBox_Cancel
CASE "yesno"
MessageBox = MsgBox_No
CASE "okcancel"
MessageBox = MsgBox_Cancel
CASE "ok"
MessageBox = MsgBox_Ok
END SELECT
CASE 1
SELECT CASE dialogType
CASE "yesnocancel"
MessageBox = MsgBox_Yes
CASE "yesno"
MessageBox = MsgBox_Yes
CASE "okcancel"
MessageBox = MsgBox_Ok
CASE "ok"
MessageBox = MsgBox_Ok
END SELECT
CASE 2
SELECT CASE dialogType
CASE "yesnocancel"
MessageBox = MsgBox_No
CASE "yesno"
MessageBox = MsgBox_No
CASE "okcancel"
MessageBox = MsgBox_Cancel
CASE "ok"
MessageBox = MsgBox_Ok
END SELECT
END SELECT
END FUNCTION
SUB MessageBox (message AS STRING, caption AS STRING, setup AS LONG)
DIM returnValue AS LONG: returnValue = MessageBox(message, caption, setup)
END SUB
$END IF

View file

@ -1,40 +0,0 @@
' MessageBox compatibility functions
' These basically emulate the legacy InForm MessageBox routines
' All it does is calls the new QB64-PE _MESSAGEBOX$ function
$IF MESSAGEBOX_BI = UNDEFINED THEN
$LET MESSAGEBOX_BI = TRUE
'Messagebox constants
CONST MsgBox_OkOnly = 1
CONST MsgBox_OkCancel = 2
CONST MsgBox_AbortRetryIgnore = 4
CONST MsgBox_YesNoCancel = 8
CONST MsgBox_YesNo = 16
CONST MsgBox_RetryCancel = 32
CONST MsgBox_CancelTryagainContinue = 64
CONST MsgBox_Critical = 128
CONST MsgBox_Question = 256
CONST MsgBox_Exclamation = 512
CONST MsgBox_Information = 1024
CONST MsgBox_DefaultButton1 = 2048
CONST MsgBox_DefaultButton2 = 4096
CONST MsgBox_DefaultButton3 = 8192
CONST MsgBox_Defaultbutton4 = 16384
CONST MsgBox_AppModal = 32768
CONST MsgBox_SystemModal = 65536
CONST MsgBox_SetForeground = 131072
CONST MsgBox_Ok = 1
CONST MsgBox_Yes = 2
CONST MsgBox_No = 3
CONST MsgBox_Cancel = 4
CONST MsgBox_Abort = 5
CONST MsgBox_Retry = 6
CONST MsgBox_Ignore = 7
CONST MsgBox_Tryagain = 8
CONST MsgBox_Continue = 9
$END IF

View file

@ -1,68 +0,0 @@
'#######################################################################################
'# Animated GIF decoder v1.0 #
'# By Zom-B #
'# #
'# http://www.qb64.org/wiki/GIF_Images #
'#######################################################################################
'Adapted for use with InForm's PictureBox controls by @FellippeHeitor
$IF GIFPLAY_BI = UNDEFINED THEN
$LET GIFPLAY_BI = TRUE
$IF INFORM_BI = UNDEFINED THEN
OPTION _EXPLICIT
CONST FALSE = 0, TRUE = NOT FALSE
$END IF
TYPE GIFDATA
ID AS LONG
file AS INTEGER
sigver AS STRING * 6
width AS _UNSIGNED INTEGER
height AS _UNSIGNED INTEGER
bpp AS _UNSIGNED _BYTE
sortFlag AS _BYTE ' Unused
colorRes AS _UNSIGNED _BYTE
colorTableFlag AS _BYTE
bgColor AS _UNSIGNED _BYTE
aspect AS SINGLE ' Unused
numColors AS _UNSIGNED INTEGER
palette AS STRING * 768
firstFrame AS LONG
totalFrames AS LONG
IsPlaying AS _BYTE
Frame AS LONG
LoadedFrames AS LONG
GifLoadComplete AS _BYTE
LastFrameServed AS LONG
LastFrameUpdate AS SINGLE
LastFrameDelay AS SINGLE
HideOverlay AS _BYTE
END TYPE
TYPE FRAMEDATA
ID AS LONG
thisFrame AS LONG
addr AS LONG
left AS _UNSIGNED INTEGER
top AS _UNSIGNED INTEGER
width AS _UNSIGNED INTEGER
height AS _UNSIGNED INTEGER
localColorTableFlag AS _BYTE
interlacedFlag AS _BYTE
sortFlag AS _BYTE ' Unused
palBPP AS _UNSIGNED _BYTE
minimumCodeSize AS _UNSIGNED _BYTE
transparentFlag AS _BYTE 'GIF89a-specific (animation) values
userInput AS _BYTE ' Unused
disposalMethod AS _UNSIGNED _BYTE
delay AS SINGLE
transColor AS _UNSIGNED _BYTE
END TYPE
REDIM GIFData(0) AS GIFDATA
REDIM GIFFrameData(0) AS FRAMEDATA
DIM TotalGIFLoaded AS LONG, TotalGIFFrames AS LONG
$END IF

View file

@ -1,99 +0,0 @@
': This program uses
': InForm - GUI library for QB64 - Beta version 9
': Fellippe Heitor, 2016-2019 - fellippe@qb64.org - @fellippeheitor
': https://github.com/FellippeHeitor/InForm
'-----------------------------------------------------------
': Controls' IDs: ------------------------------------------------------------------
DIM SHARED gifplaySample AS LONG
DIM SHARED PictureBox1 AS LONG
DIM SHARED LoadBT AS LONG
DIM SHARED PlayBT AS LONG
': External modules: ---------------------------------------------------------------
'$INCLUDE:'../../InForm/InForm.bi'
'$INCLUDE:'../../InForm/extensions/GIFPlay.bi'
'$INCLUDE:'GIFPlaySample.frm'
': Event procedures: ---------------------------------------------------------------
SUB __UI_BeforeInit
END SUB
SUB __UI_OnLoad
Control(PlayBT).Disabled = True
END SUB
SUB __UI_BeforeUpdateDisplay
UpdateGif PictureBox1
END SUB
SUB __UI_BeforeUnload
END SUB
SUB __UI_Click (id AS LONG)
SELECT CASE id
CASE gifplaySample
CASE LoadBT
'file 'globe.gif' comes from:
'https://en.wikipedia.org/wiki/GIF#/media/File:Rotating_earth_(large).gif
IF OpenGif(PictureBox1, "globe.gif") THEN
Control(PlayBT).Disabled = False
IF TotalFrames(PictureBox1) > 1 THEN
Caption(PlayBT) = "Play"
ELSE
Caption(PlayBT) = "Static gif"
Control(PlayBT).Disabled = True
END IF
Caption(LoadBT) = "globe.gif loaded"
Control(LoadBT).Disabled = True
ELSE
_DELAY 0.2: _MESSAGEBOX "GIFPlay Sample", "File 'globe.gif' could not be found.", "error"
END IF
CASE PlayBT
IF GifIsPlaying(PictureBox1) THEN
PauseGif PictureBox1
Caption(PlayBT) = "Play"
ELSE
PlayGif PictureBox1
Caption(PlayBT) = "Pause"
END IF
CASE PictureBox1
HideGifOverlay PictureBox1
END SELECT
END SUB
SUB __UI_MouseEnter (id AS LONG)
END SUB
SUB __UI_MouseLeave (id AS LONG)
END SUB
SUB __UI_FocusIn (id AS LONG)
END SUB
SUB __UI_FocusOut (id AS LONG)
END SUB
SUB __UI_MouseDown (id AS LONG)
END SUB
SUB __UI_MouseUp (id AS LONG)
END SUB
SUB __UI_KeyPress (id AS LONG)
END SUB
SUB __UI_TextChanged (id AS LONG)
END SUB
SUB __UI_ValueChanged (id AS LONG)
END SUB
SUB __UI_FormResized
END SUB
'$INCLUDE:'../../InForm/InForm.ui'
'$INCLUDE:'../../InForm/xp.uitheme'
'$INCLUDE:'../../InForm/extensions/GIFPlay.bas'

View file

@ -1,44 +0,0 @@
': This form was generated by
': InForm - GUI library for QB64 - v1.5
': Fellippe Heitor, 2016-2023 - fellippe@qb64.org - @fellippeheitor
': https://github.com/FellippeHeitor/InForm
'-----------------------------------------------------------
SUB __UI_LoadForm
DIM __UI_NewID AS LONG, __UI_RegisterResult AS LONG
__UI_NewID = __UI_NewControl(__UI_Type_Form, "gifplaySample", 300, 281, 0, 0, 0)
__UI_RegisterResult = 0
SetCaption __UI_NewID, "GIFPlay Sample"
Control(__UI_NewID).Font = SetFont("arial.ttf", 12)
Control(__UI_NewID).HasBorder = False
__UI_NewID = __UI_NewControl(__UI_Type_PictureBox, "PictureBox1", 230, 230, 36, 12, 0)
__UI_RegisterResult = 0
Control(__UI_NewID).Stretch = True
Control(__UI_NewID).HasBorder = True
Control(__UI_NewID).Align = __UI_Center
Control(__UI_NewID).VAlign = __UI_Middle
Control(__UI_NewID).BorderSize = 1
__UI_NewID = __UI_NewControl(__UI_Type_Button, "LoadBT", 123, 23, 36, 247, 0)
__UI_RegisterResult = 0
SetCaption __UI_NewID, "Load globe.gif"
Control(__UI_NewID).HasBorder = False
Control(__UI_NewID).CanHaveFocus = True
__UI_NewID = __UI_NewControl(__UI_Type_Button, "PlayBT", 80, 23, 186, 247, 0)
__UI_RegisterResult = 0
SetCaption __UI_NewID, "Play"
Control(__UI_NewID).HasBorder = False
Control(__UI_NewID).CanHaveFocus = True
END SUB
SUB __UI_AssignIDs
gifplaySample = __UI_GetID("gifplaySample")
PictureBox1 = __UI_GetID("PictureBox1")
LoadBT = __UI_GetID("LoadBT")
PlayBT = __UI_GetID("PlayBT")
END SUB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB