Well, I never said the visual actually 'synced' with the music. How its typically done is you take the sound byte info and run it through the FFT algorithm. You can google "spectrum analyzer", should give a few results.
I'm posting my latest version now incase I don't have time to do more before the challenge ends. Clicking on 'my computer' may give funky results since the checklist for drives doesn't actually work (DBC issue, not mine).
EDIT: Took a few minutes to add tooltips to filenames that were too long to fit within the parent window. Just hold your mouse over a long filename for 1sec and it should popup.
set display mode 1024,768,32
dim viewPointer(2) : `0=viewport offset, 1=scroll amount, 2=timestamp
dim WIN_X(1) : `File browser window location, 0=location,1=mouse offset
dim WIN_Y(1) : `File browser window location, 0=location,1=mouse offset
dim WIN_WIDTH(1) : `Width of file window, 0=width,1=mouse offset
dim WIN_HEIGHT(1) : `height of file window, excluding title and status bars,0=width,1=mouse offset
dim FLAGS(4) : `1=mouse, 2=titleMove, 3=scrollbarMove, 4=resize
dim THUMB(1) : `scrollbar thumb position (local position)
dim MOUSE(3) : `0=mouse click count, 1=timestamp of last click, 2=delay allowed for clicks
dim _FData(2) : `0=file count, 1=file view offset, 2=current selected file, 3=click flag
dim TEMP#(0) : `whatever temp value I need to hold globally
dim files$(0,3) : `1=file name, 2=file size, 3=folder flag
dim IMAGE(1) : `0=original width, 1=original height
dim imgExt$(3) : `image extensions
dim sfxExt$(3) : `sound extensions
dim musicExt$(3) : `music extensions
dim MZFix(1) : `fix for the mousemovez command
dim ICON_FOLDER(0) : `image number for folder icon
dim ICON_SFX(2) : `image number for play/pause button icons,0=play,1=pause,2=current
dim FILE_TYPE(0) : `1=image, 2=sfx, 3=music, 4=video
dim volSlider(1) : `volume slider, 0=drag flag, 1=value %
dim bars(10) : `1-10 spectrum bar values, 0=timestamp for update
dim mouseHover(2) : `0=timestamp, 1=hover delay before showing tooltips, 2=file index to show
_FData(0) = 0 : `file count
_FData(1) = 0 : `file view offset
_FData(2) = -1 : `currently selected file
THUMB(0) = 0 : `scrollbar thumb position (local position)
MOUSE(2) = 300 : `delay allowed for double clicks (milliseconds)
WIN_X(0,0) = 200 : `File browser window location
WIN_Y(0,0) = 100 : `File browser window location
WIN_WIDTH(0) = 400 : `Width of file window
WIN_HEIGHT(0) = 160 : `height of file window, excluding title and status bars
ICON_FOLDER(0)=1 : `image number for folder icon
ICON_SFX(0)=2 : `image number for play button icon
ICON_SFX(1)=3 : `image number for pause button icon
mouseHover(1)=1000 : `delay(ms) before tooltips appear
rem supported image extensions
imgExt$(1) = ".jpg" : imgExt$(2) = ".png" : imgExt$(3) = ".bmp"
rem supported sound extensions
sfxExt$(1) = ".wav" : sfxExt$(2) = ".mp3" : sfxExt$(3) = ".wma"
rem supported music extensions
musicExt$(1) = ".xm" : musicExt$(2) = ".mid" : musicExt$(3) = ".mp3"
sprite 1,1,1,99 : `create default sprite for image preview
gosub getImages
rem default directory
setDir("C:\Documents and Settings\Phaelax\My Documents")
`setDir("G:\")
lastFile$ = ""
sync on
set text font "Arial", 1
set text size 14
DO
cls
selectedFileIndex = drawFileList(WIN_X(0),WIN_Y(0),WIN_WIDTH(0),WIN_HEIGHT(0),_FData(1))
if selectedFileIndex > -1 then lastFile$ = files$(selectedFileIndex,1)
ink rgb(255,255,255),0
set cursor 1,1
print mousemovey()
sync
LOOP
REM **************************************************
REM Set the current directory
REM **************************************************
function setDir(path$)
rem clear current file list
r = _FData(0)
undim files$(r,3)
rem set current path and get files
set dir path$
perform checklist for files
_FData(0) = checklist quantity()+1 : r = _FData(0)
_FData(1) = 0
dim files$(r,3)
files$(1,1) = "My Computer"
files$(1,2) = ""
files$(1,3) = "2"
rem fill array with file names and dates
find first
for i = 2 to _FData(0)
files$(i,1) = get file name$()
files$(i,2) = get file date$()
files$(i,3) = str$(get file type())
find next
next i
_FData(2) = -1
endfunction
REM **************************************************
REM Set the current directory to display drive listing
REM **************************************************
function setDirDrives()
rem clear current file list
r = _FData(0)
undim files$(r,3)
rem get list of available drives
perform checklist for drives
_FData(0) = checklist quantity() : r = _FData(0)
_FData(1) = 0
dim files$(r,3)
rem fill array with drive names
find first
for i = 1 to _FData(0)
files$(i,1) = get file name$()
files$(i,2) = get file date$()
files$(i,3) = str$(get file type())
find next
next i
_FData(2) = -1
endfunction
REM **************************************************
REM Displays and handles file list and preview window
REM Returns the index of the currently selected file
REM or -1 if no selection is made
REM **************************************************
function drawFileList(x,y,width,height,offset)
MIN_WIDTH = 400 : `minimum width for window
MIN_HEIGHT = 160 : `minimum height for window
if width < MIN_WIDTH then width = MIN_WIDTH
if height < MIN_HEIGHT then height = MIN_HEIGHT
_titleX = x : `title bar X-coord (also starting window location)
_titleY = y : `title bar Y-coord (also starting window location)
_titleHeight = 16 : `title bar height
_listX = _titleX : `X location to display list at
_listY = _titleY + _titleHeight+1 : `Y location to display list at
_lineHeight = 16 : `display height of each row
_listWidth = width/2 : `display width of each row
_listHeight = height : `total display height for list view
_listOffset = offset : `file number in list to start display from
_thumbWidth = 16 : `scrollbar thumb width
_thumbHeight = (_showCount * height) / _FData(0) : `scrollbar thumb height
if _thumbHeight > height then _thumbHeight = height
_thumbX = _listX + _listWidth : `scrollbar thumb X position
_thumbY = _listY + THUMB(0) : `scrollbar thumb Y position
_previewX = _thumbX + _thumbWidth : `preview window X position
_previewY = _listY : `preview window Y position
_previewWidth = width/2 - _thumbWidth : `preview window width
_previewHeight = _listHeight : `preview window height
_previewSize = getMin(_previewWidth,_previewHeight)-48 : `dimension of image preview
_showCount = height/_lineHeight : `number of rows to display
_titleWidth = width : `width of title bar (also width of entire window)
_statusX = _titleX : `X location of status bar
_statusY = _listY+_listHeight : `Y location of status bar
_statusWidth = _titleWidth : `width of status bar
_statusHeight = 18 : `height of status bar
_scrollDelay = 25 : `delay between scrolling steps
_scrollStartStep = 12 : `initial step amount in scrolling
_backgroundColor = rgb(177,194,207) : `background color for list and preview windows
_foregroundColor = rgb(255,255,255) : `foreground color for list and preview windows
_highlightBgColor1 = rgb(185,199,212) : `background color of highlighted row
_highlightBgColor2 = rgb(144,165,187) : `background color of highlighted row
_titleFontColor = rgb(22,69,110) : `text color for title bar
SELECTED_FILE_INDEX = -1
if FLAGS(4) = 13
H# = _listHeight - _thumbHeight
V# = _FData(0)*_lineHeight - _listHeight
THUMB(0) = (viewPointer(0) * H#) / V#
endif
rem reset mouse flag
if mouseclick() = 0 then FLAGS(1) = 0 : MOUSE(3) = 0
if MOUSE(1) + MOUSE(2) < timer() then MOUSE(0) = 0
if mouseclick() = 1 and MOUSE(3) = 0
MOUSE(3) = 1
MOUSE(0) = MOUSE(0)+1
MOUSE(1) = timer()
endif
if mousemovex() or mousemovey() then mouseHover(0) = timer()
rem display list
ink _backgroundColor,0
box _listX, _listY, (_listX+_listWidth), (_listY+_listHeight)
ink _foregroundColor,0
rem loop through files currently displayed in view
_listOffset = viewPointer(0)/_lineHeight
_pixelOffset = viewPointer(0) - _listOffset*_lineHeight
max = _listOffset + _showCount + 1
if max > _FData(0) then max = _FData(0)
for i = 1+_listOffset to max
ly = _listY + (i-_listOffset-1)*_lineHeight - _pixelOffset
rem if currently selected file
if i = _FData(2)
ink _highlightBackColor,0
gradientVerticalBox(_listX, ly, _listX+_listWidth, ly+_lineHeight,_highlightBgColor1,_highlightBgColor2)
ink _foregroundColor,0
endif
if files$(i,3) = "1" then paste image ICON_FOLDER(0),_listX+2,ly+3, 1
if files$(i,3) = "2" then box _listX+2,ly+3,_listX+12,ly+13
text 16+_listX, ly, capLength$(files$(i,1),_listWidth)
rem file selection
if FLAGS(1)=0 AND mouseWithin(_listX,ly,_listX+_listWidth,ly+_lineHeight)
rem handle tooltip trigger
if mouseHover(0)+mouseHover(1) <= timer() and text width(files$(i,1)) > _listWidth
mouseHover(2) = i
else
mouseHover(2) = -1
endif
if mouseclick() = 1
FLAGS(1) = 1
SELECTED_FILE_INDEX = i
rem new selection so delete any existing image preview or loaded sound files
if SELECTED_FILE_INDEX <> _FData(2)
FILE_TYPE(0) = -1
if sound exist(1) = 1 then delete sound 1
if music exist(1) = 1 then delete music 1
if image exist(99) = 1 then delete image 99
hide sprite 1
rem set global currently selected file
_FData(2) = SELECTED_FILE_INDEX
rem check if this selected file is an image
if isImage(files$(i,1))
FILE_TYPE(0) = 1
load image get dir$()+"\"+files$(i,1), 99
sprite 1, _previewX+4, _previewY+10, 99
set sprite 1,1,0
show sprite 1
IMAGE(0) = sprite width(1)
IMAGE(1) = sprite height(1)
scaleSprite(1, _previewSize)
endif
rem check if this selected file is a sound file
if isSound(files$(i,1))
FILE_TYPE(0) = 2
sprite 1,_previewX+_previewWidth/2-5, _previewY+_previewSize/2-5, ICON_SFX(0)
size sprite 1, 10, 10
set sprite 1,1,1
show sprite 1
if sound exist(1) then delete sound 1
ICON_SFX(2) = ICON_SFX(0)
resetSpectrum()
pauseSpectrum()
endif
rem check if this selected file is a music file
if isMusic(files$(i,1))
FILE_TYPE(0) = 3
sprite 1, _previewX+_previewWidth/2-5, _previewY+_previewSize/2-5, ICON_SFX(0)
size sprite 1, 10, 10
set sprite 1,1,1
show sprite 1
if music exist(1) then delete music 1
ICON_SFX(2) = ICON_SFX(0)
resetSpectrum()
pauseSpectrum()
endif
endif
endif
rem double click to change directories
if MOUSE(0) > 1
MOUSE(0) = 0
if files$(i,3) = "1"
setDir(get dir$()+"\"+files$(i,1))
THUMB(0) = 1
viewPointer(0) = 0
exitfunction -1
endif
if files$(i,3) = "2"
setDirDrives()
THUMB(0) = 1
viewPointer(0) = 0
exitfunction -1
endif
endif
endif
next i
rem draw scrollbar track
gradientHorizontalBox(_thumbX,_listY,_thumbX+_thumbWidth-8,_listY+_listHeight, rgb(82,112,133), _backgroundColor)
gradientHorizontalBox(_thumbX+8,_listY,_thumbX+_thumbWidth,_listY+_listHeight, _backgroundColor,rgb(82,112,133))
rem draw scrollbar thumb
gradientHorizontalBox(_thumbX, _thumbY, (_thumbX+_thumbWidth)-8, _thumbY+_thumbHeight, rgb(51,63,72), rgb(89,96,101))
gradientHorizontalBox(_thumbX+8, _thumbY, (_thumbX+_thumbWidth), _thumbY+_thumbHeight, rgb(89,96,101),rgb(51,63,72))
rem draw preview window
ink _backgroundColor,0
box _previewX+1, _previewY, (_previewX+_previewWidth), (_previewY+_previewHeight)
ink 0,0
rem if a file is selected, display preview information
if _FData(2) > -1
rem if display a preview for an image
if FILE_TYPE(0) = 1
sx = (_previewX + _previewWidth/2) - (sprite width(1)/2)
sy = _previewY + (_previewSize-sprite height(1))/2
sprite 1,sx,sy,99
endif
rem if previewing a sound file
if FILE_TYPE(0) = 2
sx = _previewX+_previewWidth/2
sy = _previewY+_previewSize/2
_handleSpectrum(sx-62,sy-49)
gradientVerticalBox(sx-71,sy-9,sx+54,sy+8, rgb(215,229,237), rgb(164,165,171))
sprite 1,sx-67,sy-5,ICON_SFX(2)
_handleVolumeSlider(1,sx-55,sy-5)
if mouseclick() = 1 AND mouseWithin(sprite x(1),sprite y(1),sprite x(1)+sprite width(1),sprite y(1)+sprite height(1)) AND FLAGS(1) = 0
FLAGS(1) = 1
if sound exist(1)
if sound playing(1)
if sound paused(1)
resume sound 1
ICON_SFX(2) = ICON_SFX(1)
resumeSpectrum()
else
pause sound 1
ICON_SFX(2) = ICON_SFX(0)
pauseSpectrum()
endif
endif
else
file$ = get dir$()+"\"+files$(_FData(2),1)
load sound file$,1
play sound 1
ICON_SFX(2) = ICON_SFX(1)
resumeSpectrum()
endif
endif
endif
rem if previewing a music file
if FILE_TYPE(0) = 3
sx = _previewX+_previewWidth/2
sy = _previewY+_previewSize/2
_handleSpectrum(sx-62,sy-49)
gradientVerticalBox(sx-62,sy-9,sx+63,sy+8, rgb(215,229,237), rgb(164,165,171))
sprite 1,sx-58,sy-5,ICON_SFX(2)
_handleVolumeSlider(1,sx-46,sy-5)
if mouseclick() = 1 AND mouseWithin(sprite x(1),sprite y(1),sprite x(1)+sprite width(1),sprite y(1)+sprite height(1)) AND FLAGS(1) = 0
FLAGS(1) = 1
if music exist(1)
if music playing(1)
if music paused(1)
resume music 1
ICON_SFX(2) = ICON_SFX(1)
resumeSpectrum()
else
pause music 1
ICON_SFX(2) = ICON_SFX(0)
pauseSpectrum()
endif
endif
else
file$ = get dir$()+"\"+files$(_FData(2),1)
load music file$,1
play music 1
ICON_SFX(2) = ICON_SFX(1)
resumeSpectrum()
endif
endif
endif
rem if previewing a video file
if FILE_TYPE(0) = 4
endif
rem display selected file info (name, creation date, size)
ink 0,0
text _previewX+4, _previewY+_previewSize+2, capLength$(files$(_FData(2),1),_previewWidth)
text _previewX+4, _previewY+_previewSize+14, "Date: "+files$(_FData(2),2)
fs$ = bytesToKB$(file size(get dir$()+"\"+files$(_FData(2),1)))
text _previewX+4, _previewY+_previewSize+26, "Size: "+fs$+"KB"
endif
rem draw title bar
gradientVerticalBox(_titleX, _titleY, (_titleX+_titleWidth), (_titleY+_titleHeight),rgb(132,195,248),rgb(44,103,153))
title$ = get dir$()+"\"+files$(_FData(2),1)
ink _titleFontColor,0
text _titleX+2, _titleY, capLength$(title$,_titleWidth)
rem draw status bar
gradientVerticalBox(_statusX, _statusY, (_statusX+_statusWidth), (_statusY+_statusHeight),rgb(76,94,107),_backgroundColor)
ink 0,0
text _statusX+8, _statusY+2, str$(_FData(0))+" objects"
rem draw window outline
ink rgb(34,51,66),0
box _titleX-1,_titleY-1,_titleX+_titleWidth+1,_titleY-1
box (_titleX-1), (_statusY+_statusHeight+1), (_titleX+_titleWidth+1), (_statusY+_statusHeight+1)
box x-1,_titleY,x-1,_statusY+_statusHeight
box x+_titleWidth+1,_titleY,x+_titleWidth+1,_statusY+_statusHeight
rem draw tooltip
if mouseHover(2) > -1
ly = _listY + (mouseHover(2)-_listOffset-1)*_lineHeight - _pixelOffset
ink rgb(66,148,203),0
box 14+_listX,ly,16+_listX+text width( files$(mouseHover(2),1)),ly+_lineHeight
ink rgb(255,255,255),0
text 16+_listX, ly, files$(mouseHover(2),1)
endif
rem ----------------------------
rem drag window by title bar
rem ----------------------------
if mouseclick() = 1 AND mouseWithin(_titleX, _titleY, (_titleX+_titleWidth), (_titleY+_titleHeight)) AND FLAGS(1) = 0
FLAGS(1) = 1
FLAGS(2) = 1
WIN_X(1) = WIN_X(0) - mousex()
WIN_Y(1) = WIN_Y(0) - mousey()
endif
if FLAGS(2) = 1
if mouseclick() = 0 then FLAGS(2) = 0
WIN_X(0) = mousex() + WIN_X(1)
WIN_Y(0) = mousey() + WIN_Y(1)
if WIN_X(0) < 0 then WIN_X(0) = 0 : WIN_X(1) = WIN_X(0) - mousex()
if WIN_Y(0) < 0 then WIN_Y(0) = 0 : WIN_Y(1) = WIN_Y(0) - mousey()
if WIN_X(0)+_titleWidth > screen width()-1 then WIN_X(0) = screen width()-1 - _titleWidth : WIN_X(1) = WIN_X(0) - mousex()
h = (_statusY+_statusHeight) - _titleY
if WIN_Y(0)+h > screen height()-1 then WIN_Y(0) = screen height()-1 - h : WIN_Y(1) = WIN_Y(0) - mousey()
endif
rem ----------------------------
rem scrollbar control
rem ----------------------------
direction = getMouseScrollDirection()
if direction > 0 then viewPointer(1) = _scrollStartStep
if direction < 0 then viewPointer(1) = 0-_scrollStartStep
if viewPointer(1) <> 0
if viewPointer(2) + _scrollDelay <= timer()
viewPointer(2) = timer()
viewPointer(0) = viewPointer(0) + viewPointer(1)
if viewPointer(1) > 0
viewPointer(1) = viewPointer(1) - 1
if viewPointer(1) < 0 then viewPointer(1) = 0
else
if viewPointer(1) < 0
viewPointer(1) = viewPointer(1) + 1
if viewPointer(1) > 0 then viewPointer(1) = 0
endif
endif
if viewPointer(0) < 0 then viewPointer(0) = 0
if viewPointer(0) > _FData(0)*_lineHeight - _listHeight then viewPointer(0) = _FData(0)*_lineHeight - _listHeight
rem position thumb to match view scroll
H# = _listHeight - _thumbHeight
V# = _FData(0)*_lineHeight - _listHeight
if V# <= 0
THUMB(0) = 0
else
THUMB(0) = (viewPointer(0) * H#) / V#
endif
THUMB(0) = (viewPointer(0) * H#) / V#
endif
endif
if viewPointer(0) > _FData(0)*_lineHeight - _listHeight then viewPointer(0) = _FData(0)*_lineHeight - _listHeight
if viewPointer(0) < 0 then viewPointer(0) = 0
if mouseclick() = 1 AND mouseWithin(_thumbX, _thumbY, _thumbX+_thumbWidth,_thumbY+_thumbHeight) AND FLAGS(1) = 0
FLAGS(1) = 1
FLAGS(3) = 1
THUMB(1) = _thumbY - mousey()
endif
if FLAGS(3) = 1
if mouseclick() = 0 then FLAGS(3) = 0
setThumbPos((mousey() - _listY) + THUMB(1),_listHeight, _thumbHeight)
endif
rem ----------------------------
rem resize window
rem ----------------------------
rem draw resize box
a = _titleX + _titleWidth
b = _statusY + _statusHeight
ink 0,0
line a-3,b+1,a+1,b-3
line a-7,b+1,a+1,b-7
line a-11,b+1,a+1,b-11
if mouseclick() = 1 AND mouseWithin(a-10, b-10, a, b) AND FLAGS(1) = 0
FLAGS(1) = 1
FLAGS(4) = 1
WIN_WIDTH(1) = _titleX + _titleWidth - mousex()
WIN_HEIGHT(1) = _titleY + _listHeight - mousey()
TEMP#(0) = (0.0 + THUMB(0))/_listHeight
endif
if FLAGS(4) = 1
if mouseclick() = 0 then FLAGS(4) = 0
rem window dimensions
WIN_WIDTH(0) = (mousex() - _titleX) + WIN_WIDTH(1)
WIN_HEIGHT(0) = (mousey() - _titleY) + WIN_HEIGHT(1)
rem position thumb
H# = _listHeight - _thumbHeight
V# = _FData(0)*_lineHeight - _listHeight
if V# <= 0
THUMB(0) = 0
else
THUMB(0) = (viewPointer(0) * H#) / V#
endif
rem scale image preview, if available
if _FData(2) > -1 and FILE_TYPE(0) = 1
scaleSprite(1, _previewSize)
endif
endif
endfunction SELECTED_FILE_INDEX
REM **************************************************
REM handles rendering and events of the volume slider
REM **************************************************
function _handleVolumeSlider(sliderNo, x, y)
gradientVerticalBox(x,y,x+104,y+9,rgb(164,165,171),rgb(215,229,237))
ink rgb(82,82,82),0
box x+volSlider(1),y,x+volSlider(1)+4,y+9
if mouseclick() = 1 AND mouseWithin(x+volSlider(1),y,x+volSlider(1)+4,y+9) AND FLAGS(1) = 0
FLAGS(1) = 1
volSlider(0) = mousex() - (x+volSlider(1))
endif
if volSlider(0) > -1
volSlider(1) = (mousex() - volSlider(0)) - x
if volSlider(1) < 0 then volSlider(1) = 0
if volSlider(1) > 100 then volSlider(1) = 100
if mouseclick() = 0 then volSlider(0) = -1
endif
endfunction
REM **************************************************
REM Get direction of mouse wheel scroll
REM **************************************************
function getMouseScrollDirection()
z = mousemovez()
if z < MZFix(1) then MZFix(1) = z : exitfunction 1
if z > MZFix(1) then MZFix(1) = z : exitfunction -1
endfunction 0
REM **************************************************
REM Safely sets the scrollbar thumb position
REM **************************************************
function setThumbPos(pos, _listHeight, _thumbHeight)
if pos < 0 then pos = 0
H# = _listHeight - _thumbHeight
if H# = 0 then exitfunction
if pos > H# then pos = H#
THUMB(0) = pos
V# = _FData(0)*16 - _listHeight
viewPointer(0) = (pos*V#) / H#
endfunction
REM **************************************************
REM Scales a sprite so the largest dimension matches
REM 'size' while maintaining the correct aspect ratio
REM **************************************************
function scaleSprite(sprNo, size)
if IMAGE(0) = 0 then exitfunction
ratio# = IMAGE(1) / (0.0+IMAGE(0))
rem if width is greater than height
if IMAGE(0) > IMAGE(1)
size sprite sprNo, size, size*ratio#
else
size sprite sprNo, size/ratio#, size
endif
endfunction
REM **************************************************
REM Returns true if file name has an image extension
REM **************************************************
function isImage(file$)
for j = 1 to 3
if endsWith(file$, imgExt$(j)) = 1 then exitfunction 1
next j
endfunction 0
REM **************************************************
REM Returns true if file name has a sound extension
REM **************************************************
function isSound(file$)
for j = 1 to 3
if endsWith(file$, sfxExt$(j)) = 1 then exitfunction 1
next j
endfunction
REM **************************************************
REM Returns true if file name has a music extension
REM **************************************************
function isMusic(file$)
for j = 1 to 3
if endsWith(file$, musicExt$(j)) = 1 then exitfunction 1
next j
endfunction
REM **************************************************
REM Returns true if string$ ends with suffix$
REM **************************************************
function endsWith(string$, suffix$)
if len(suffix$) > len(string$) then exitfunction 0
L = len(string$)
for k = len(suffix$) to 1 step -1
if mid$(suffix$,k) <> mid$(string$,L) then exitfunction 0
dec L
next k
endfunction 1
REM **************************************************
REM Returns the string truncated to a specified width
REM in pixels.
REM **************************************************
function capLength$(string$, width)
L = len(string$)
min = width / text width("A")
for j = min to L
if text width(left$(string$,j)) > width then exitfunction left$(string$,j-1)
next j
endfunction string$
REM **************************************************
REM Converts bytes into KB limited to 2 decimals
REM **************************************************
function bytesToKB$(b)
k$ = str$( b/1024.0)
for j = len(k$) to 1 step -1
if mid$(k$,j) = "."
k$ = left$(k$,j+2)
exitfunction k$
endif
next j
endfunction k$
REM **************************************************
REM Draws a spectrum meter from (X,Y) to (X+125,Y+40)
REM **************************************************
function _handleSpectrum(x,y)
gradientVerticalBox(x,y,x+125,y+40,rgb(240,242,245),rgb(194,204,216))
for j = 0 to 9
drawMeter(x+3+(j*12),y+37,bars(j+1))
next j
if bars(0) + 100 <= timer()
for j = 1 to 10
bars(j) = rnd(17)
next j
bars(0) = timer()
endif
endfunction
REM **************************************************
REM Draws a spectrum bar from (X,Y) to (X+10,Y-40)
REM **************************************************
function drawMeter(x,y,value)
for k = 0 to 17
if k <= value : ink rgb(17,21,26),0 : else : ink rgb(152,164,178),0 : endif
box x,y-k*2,x+10,y-k*2
next k
endfunction
REM **************************************************
REM Resets all spectrum values
REM **************************************************
function resetSpectrum()
for j = 1 to 10
bars(j) = -1
next j
endfunction
REM **************************************************
REM Pauses the spectrum
REM **************************************************
function pauseSpectrum()
bars(0) = timer()+65535
endfunction
REM **************************************************
REM Resumes the spectrum
REM **************************************************
function resumeSpectrum()
bars(0) = 0
endfunction
REM **************************************************
REM Draws a box with a horizontal gradient
REM **************************************************
function gradientHorizontalBox(left,top,right,bottom,color1,color2)
width#=right-left
for x=left to right-1
t# = (x-left) / width#
ink getTransitionalColor(color1,color2,t#),0
box x,top,x+1,bottom
next x
endfunction
REM **************************************************
REM Draws a box with a vertical gradient
REM **************************************************
function gradientVerticalBox(left,top,right,bottom,color1,color2)
height#=bottom-top
for y=top to bottom-1
t# = (y-top) / height#
ink getTransitionalColor(color1,color2,t#),0
box left,y,right,y+1
next y
endfunction
REM **************************************************
REM Returns a linear interpolated color between base
REM color and target color. Percent ranges from 0 to 1
REM **************************************************
function getTransitionalColor(base, target, percent#)
br = rgbr(base)
bg = rgbg(base)
bb = rgbb(base)
tr = rgbr(target)
tg = rgbg(target)
tb = rgbb(target)
tr = br + (tr-br)*percent#
tg = bg + (tg-bg)*percent#
tb = bb + (tb-bb)*percent#
color = rgb(tr,tg,tb)
endfunction color
REM **************************************************
REM Checks to see if mouse is within the specified
REM coordinates
REM **************************************************
function mouseWithin(x1,y1,x2,y2)
if mousex() > x1 and mousex() < x2 and mousey() > y1 and mousey() < y2 then exitfunction 1
endfunction 0
REM **************************************************
REM Get largest of two values
REM **************************************************
function getMax(x,y)
if x > y then exitfunction x
endfunction y
REM **************************************************
REM Get smallest of two values
REM **************************************************
function getMin(x,y)
if x > y then exitfunction y
endfunction x
getImages:
rem -------- draw folder icon --------
ink rgb(175,171,104),0
restore Folder
for y = 1 to 10
for x = 1 to 12
read z
if z = 1 then dot x,y
next x
next y
get image ICON_FOLDER(0),1,1,12,10,1
rem -------- draw play button icon --------
cls
ink rgb(9,92,137),0
restore PlayButton
for y = 1 to 11
for x = 1 to 12
read z
if z = 1 then dot x,y
next x
next y
get image ICON_SFX(0),1,1,12,12,1
rem -------- pause button icon --------
cls
ink rgb(9,92,137),0
box 1,1,3,12
box 8,1,10,12
get image ICON_SFX(1),1,1,12,12
RETURN
Folder:
data 0,1,1,1,0,0,0,0,0,0,0,0
data 1,1,1,1,1,0,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1,1,1,0
PlayButton:
data 1,1,0,0,0,0,0,0,0,0,0,0
data 1,1,1,1,0,0,0,0,0,0,0,0
data 1,1,1,1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,0,0,0,0
data 1,1,1,1,1,1,1,1,1,1,0,0
data 1,1,1,1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1,1,0,0
data 1,1,1,1,1,1,1,1,0,0,0,0
data 1,1,1,1,1,1,0,0,0,0,0,0
data 1,1,1,1,0,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0,0,0,0