REM Open or select multiple files
OFN_ALLOWMULTISELECT = &200 :REM Thanks to Michael Hutton for ADD WIN CONSTANTS
OFN_EXPLORER = &80000
OFN_HIDEREADONLY = &4
OFN_OVERWRITEPROMPT = &2
REM Define OpenFile Structure for Open Dialog box
DIM Ofn{lStructSize%, hwndOwner%, hInstance%, lpstrFilter%, \
\ lpstrCustomFilter%, nMaxCustFilter%, nFilterIndex%, \
\ lpstrFile%, nMaxFile%, lpstrFileTitle%, \
\ nMaxFileTitle%, lpstrInitialDir%, lpstrTitle%, \
\ flags%, nFileOffset{l&,h&}, nFileExtension{l&,h&}, \
\ lpstrDefExt%, lCustData%, lpfnHook%, lpTemplateName%}
DIM FileName% 7999 :REM Room for 256 file titles.
filter$ = "Media files"+CHR$0+"*.MP3;*.WMA;*.WAV;*.MID"+CHR$0+"All files"+CHR$0+"*.*"+CHR$0+CHR$0
Ofn.lStructSize% = DIM(Ofn{})
Ofn.hwndOwner% = @hwnd%
Ofn.lpstrFilter% = !^filter$
Ofn.lpstrFile% = FileName% :REM A pointer to where all the file names are returned.
Ofn.nMaxFile% = 8000
Ofn.flags% = OFN_HIDEREADONLY OR OFN_ALLOWMULTISELECT OR OFN_EXPLORER
DIM Song%(256) :REM Holds offset to start of song(n)'s filename in returned string.
SYS "GetOpenFileName", Ofn{} TO R% :REM Normal Open Dialog operation
a$=""
IF $$FileName%="" THEN PRINT "None Selected":END
nFiles%=0
IF Ofn.nFileExtension.l& THEN
nFiles%=1
ELSE :REM More than one file
I%=Ofn.nFileOffset.l& : REM First file name starts at FileName%?nFileOffset.l&
Song%(nFiles%)=I% : REM Format in FileName% Path null title1 null title2 null title3 null : I% points to first null
REPEAT
WHILE FileName%?I% >0 AND I% < 7999 :REM Look for Zero's that terminate title strings.
I%+=1
ENDWHILE
nFiles%+=1 :I%+=1
Song%(nFiles%)=I% :REM Save the position of the title within $$FileName%
:REM Song (n)'s filename starts at Song%(n) offset from FileName%
UNTIL FileName%?I%=0 OR nFiles%=256
ENDIF
Fn$=$$FileName%
REM Test
PRINT "Number of files :"; nFiles%
IF nFiles%>1 THEN
FOR Trk%=0 TO nFiles%-1
a$=Fn$+"\"+$$(FileName%+Song%(Trk%))
PRINTa$
NEXT
ELSE a$=Fn$
ENDIF
END