[bb] FILE SELECTOR (save/load) for BlitzUI by mrtricks [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:38

Previous topic - Next topic

BlitzBot

Title : FILE SELECTOR (save/load) for BlitzUI
Author : mrtricks
Posted : 1+ years ago

Description : Instructions are at the top of the code in Rems: Just Include this file as "save_gui.bb" and with a few inserted lines in Chris Fuller's BlitzUI code, you have a full-featured file selector much like those in other Windows apps. More advanced than that which comes with BlitzUI.

(I've used a couple of icons from the icons.bb file included with BlitzUI... And made a couple new for the "Go up one folder" button and the "New Folder" button.)


Code :
Code (blitzbasic) Select
;---------------------------------;
;---FILE SELECTOR by Robin King---;
;-----------19 Jun 2003-----------;
;---for BlitzUI by Chris Fuller---;
;---------------------------------;

;INSTRUCTIONS: (Hope this isn't too confusing!)
;
; Save this as "save_gui.bb"
;
; In your main program, after the line:
;
;
;
;--------------------------------------------------------
;;;; Initialise(  )
;--------------------------------------------------------
;
;
;
; ...type the Line:
;
;
;
;--------------------------------------------------------
;;;; Include "save_gui.bb"
;--------------------------------------------------------
;
;
;
; Next, in the GUI code, after the section:
;
;
;
;--------------------------------------------------------
;;;; ;Event Handling
;;;; Select appEvent
;;;; Case EVENT_WINDOW
;;;; Select appWindowEvent
;;;;
;;;; - ALL YOUR WINDOW EVENTS
;;;;
;;;; End Select
;;;; Case EVENT_MENU
;;;; Select appMenuEvent
;;;;
;;;; - ALL YOUR MENU EVENTS
;;;;
;;;; End Select
;;;; Case EVENT_GADGET
;;;; Select appGadgetEvent
;;;;
;;;; - ALL YOUR GADGET EVENTS
;;;;
;;;; End Select
;--------------------------------------------------------
;
;
;
; ... type this line:
;
;
;
;--------------------------------------------------------
;;;; FILE_SELECTOR_GADGETS
;--------------------------------------------------------
;
;
;
; NB: It's VERY important that it comes before the final:
;
;
;
;--------------------------------------------------------
;;;; End Select
;--------------------------------------------------------
;
;
; Then, just AFTER that final End Select and before
; the DrawMouse(  ) Line, Type:
;
;
;
;--------------------------------------------------------
;;;; SAVE_GUI_OTHER_FUNCTIONS
;--------------------------------------------------------
;
;
;
; These are functions that need to be called every frame,
; such as checking for double-click.
;
;
;
;
; Then: to start the save dialogue running
; (at any point in your program), type:
;
;
;
;--------------------------------------------------------
;;;; SAVE_DIALOGUE( "All Files (.*);Image Files (.bmp .jpg .tif)*;Blitz Code (.bb)" , "New File" )
;--------------------------------------------------------
;
;
;
; The first parameter is all the extensions you wish to show
; in the file selector - Put the description (if you want), then IN BRACKETS,
; the actual extensions separated by a space. The * after the brackets in the Image
; Files entry in the example above denotes that this filter is the default one.
; Put "" if you wish not to filter at all.
;
; The first extension in a group will be appended to a save name if there is none
; added by the user. (ie if you type in Image1, it will be called Image1.bmp)
;
; And the 2nd parameter is a default Filename you want to save as.
; (Again, put "" if you want it left blank.)
;
;
;
; To start the open dialogue running
; (at any point in your program), type:
;
;
;
;--------------------------------------------------------
;;;; OPEN_DIALOGUE( "All Files (.*);Image Files (.bmp .jpg .tif)*;Blitz Code (.bb)" )
;--------------------------------------------------------
;
;
;
; The first parameter is all the extensions you wish to show
; in the file selector - Put the description (if you want), then IN BRACKETS
; (only if you've put descriptions),
; the actual extensions separated by a space. Separate the filter groups with a semi colon (;)
; The * After the brackets in the Image
; Files entry in the example above denotes that this filter is the default one.
; Put "" if you wish not to filter at all.
;
;
;
;
;
;
;
;
;
; Lastly, you must include functions in your main program:
; OPEN(f$) and SAVE(f$) - where f$ is the filename -
; where you do your file saving and opening.
;

;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------



;create images for buttons and file list
Global imgNew, imgOpen, imgNewFolder, imgUpFolder
MAKE_ICONS



;Main File selector Window
Global win_sav = Window(100,100,266,316,"Save/Open","0",1,0,0,1)
Global btn_sav_up = Button(212,8,20,21,"","0",1,0,0)
sendmessage(btn_sav_up,"BM_SETIMAGE",imgUpFolder)
Global btn_sav_newfolder = Button(234,8,21,21,"","0",1,0,0)
sendmessage(btn_sav_newfolder,"BM_SETIMAGE",imgNewFolder)
Global btn_sav_yes = Button(195,237,60,21,"Save","0",1,0,0)
Global btn_sav_no = Button(195,262,60,21,"Cancel","0",1,0,0)
Global lbl_sav_saveas = Label(8,242,"Name:",0)
Global lst_sav_files = ListBox(8,33,247,200,20,20,10,0)
Global txt_sav_filename = TextBox(40,237,152,21,0,0,18,10,0)
Global cbo_sav_foldername = ComboBox(8,8,200,21)
Global cbo_sav_filter = ComboBox(8,262,184,21)

;Create new folder Window
Global win_newfolder = Window(180,150,219,87,"Create New Folder","0",1,0,0,1)
Global btn_newfolder_yes = Button(148,33,60,21,"Create","0",1,0,0)
Global btn_newfolder_no = Button(86,33,60,21,"Cancel","0",1,0,0)
Global txt_newfolder = TextBox(8,8,200,21,0,0,18,10,1)
SendMessage(txt_newfolder,"TM_SETTEXT",0,"New Folder")

;File already exists. Overwrite? Window
Global win_overwrite = Window(210,180,204,88,"Warning","0",1,0,0,0)
Global btn_overwrite_yes = Button(30,34,60,21,"Yes","0",1,0,0)
Global btn_overwrite_no = Button(110,34,60,21,"No","0",1,0,0)
l$="That file already exists."+Chr(10)+"Do you wish to overwrite?"
Global lbl_overwrite = Label(100,4,l$,1)

;Folder already exists window
Global win_folderalreadyexists = Window(210,180,204,88,"Warning","0",1,0,0,0)
Global btn_folderalreadyexists_okay = Button(72,34,60,21,"Okay","0",1,0,0)
l$="That folder already exists."+Chr(10)+"Please choose a different name."
Global lbl_folderalreadyexists = Label(102,3,l$,1)

;Filename contains illegal characters Window
Global win_illegalchars = Window(210,180,204,88,"Warning","0",1,0,0,0)
Global btn_illegalchars_okay = Button(72,34,54,20,"Okay","0",1,0,0)
l$="The characters  / * "+Chr$(34)+" ? : | < > are"+Chr(10)+"not allowed and have been edited out."
Global lbl_illegalchars = Label(102,3,l$,1)



;close all folders
sendmessage(win_sav,"WM_CLOSE")
sendmessage(win_newfolder,"WM_CLOSE")
sendmessage(win_overwrite,"WM_CLOSE")
sendmessage(win_folderalreadyexists,"WM_CLOSE")
sendmessage(win_illegalchars,"WM_CLOSE")

;for folder sorting
Type folderitem
Field name$
Field what
End Type

;other save_gui variables
Global doubleclick=300,singleclick,doubleclicked
Global path$

Global filter$,extension$

Global save_open ;1=open, 2=save
Global file_list







;--------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------
Function FILE_SELECTOR_GADGETS()
;--------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------

Select appGadgetEvent

;-------MAIN FILE SELECTOR WINDOW------------------------------------------------------------

;CREATE NEW FOLDER BUTTON
Case btn_sav_newfolder
sendmessage(win_newfolder,"WM_OPEN")
sendmessage(win_newfolder,"WM_SETMODAL")
If FileType("New Folder")>1
a=1
While FileType("New Folder "+Str$(a))>1
a=a+1
Wend
SendMessage(txt_newfolder,"TM_SETTEXT",0,"New Folder "+Str$(a))
Else
SendMessage(txt_newfolder,"TM_SETTEXT",0,"New Folder")
EndIf
;GO UP A FOLDER
Case btn_sav_up
ft=FileType(sendmessage(txt_sav_filename,"TM_GETTEXT"))
If MOVE_DIR_UP()=True
If ft=2 Then sendmessage(txt_sav_filename,"TM_SETTEXT",0,"")
GET_DIR
EndIf
;CHOOSE FOLDER FROM COMBO BOX
Case cbo_sav_foldername
i=sendmessage(cbo_sav_foldername,"CM_GETINDEX")+1
c$=sendmessage(cbo_sav_foldername,"CM_GETCAPTION")
f$=""
a=0
Repeat
sendmessage(cbo_sav_foldername,"CM_SETINDEX",a)
cn$=sendmessage(cbo_sav_foldername,"CM_GETCAPTION")
f$=f$+cn$+""
a=a+1
Until cn$=c$
ChangeDir f$
; sendmessage(txt_sav_filename,"TM_SETTEXT",0,f$)
If FileType(sendmessage(txt_sav_filename,"TM_GETTEXT"))=2
sendmessage(txt_sav_filename,"TM_SETTEXT",0,"")
EndIf
GET_DIR
;CLICK ON A LIST ENTRY
Case lst_sav_files
f$=SendMessage(lst_sav_files,"LM_GETCAPTION")
If f$<>"" Then sendmessage(txt_sav_filename,"TM_SETTEXT",0,f$)
;are you double clicking, ie selecting?
If doubleclicked
doubleclicked=False
SELECT_ITEM(f$)
EndIf
;SAVE/OPEN/OVERWRITE BUTTON
Case btn_sav_yes
f$=SendMessage(txt_sav_filename,"TM_GETTEXT")
If f$<>"" Then SELECT_ITEM(f$)
;CANCEL SAVE
Case btn_sav_no
sendmessage(win_sav,"WM_CLOSE")
;PRESS ENTER WHILE TYPING FILENAME
Case txt_sav_filename
If KeyHit(28) Or KeyHit(156)
f$=SendMessage(txt_sav_filename,"TM_GETTEXT")
If f$<>"" Then SELECT_ITEM(f$)
EndIf
;CONFIRM SAVE BUTTON
Case btn_sav_yes
f$=SendMessage(txt_sav_filename,"TM_GETTEXT")
SELECT_ITEM(f$)
;CHANGE FILTER
Case cbo_sav_filter
f$=sendmessage(cbo_sav_filter,"CM_GETCAPTION")
filter$=EXTRACT_FILTER$(f$)
extension$=EXTRACT_EXTENSION$(filter$)
GET_DIR




;-------CREATE NEW FOLDER WINDOW------------------------------------------------------------

;CANCEL CREATE NEW FOLDER
Case btn_newfolder_no
sendmessage(win_newfolder,"WM_CLOSE")
;CONFIRM CREATE NEW FOLDER
Case btn_newfolder_yes
CREATE_NEW_FOLDER
;ALTERNATIVE CONFIRM - PRESS RETURN OR ENTER
Case txt_newfolder
If KeyHit(28) Or KeyHit(156) Then CREATE_NEW_FOLDER



;-------ESCAPE FOLDER ALREADY EXISTS WINDOW--------------------------------------------------

;OKAY
Case btn_folderalreadyexists_okay
sendmessage(win_folderalreadyexists,"WM_CLOSE")



;-------ESCAPE ILLEGAL CHARS WINDOW----------------------------------------------------------

;OKAY
Case btn_illegalchars_okay
sendmessage(win_illegalchars,"WM_CLOSE")



;-------OVERWRITE WINDOW---------------------------------------------------------------------

;NO
Case btn_overwrite_no
sendmessage(win_overwrite,"WM_CLOSE")
;YES
Case btn_overwrite_yes
sendmessage(win_overwrite,"WM_CLOSE")
f$=sendmessage(txt_sav_filename,"TM_GETTEXT")
sendmessage(win_sav,"WM_CLOSE")
SAVE(f$) ;perhaps put a backup of original file?

End Select

End Function






;-------------------------------------------------------------------------------------------------
Function SAVE_GUI_OTHER_FUNCTIONS()
;doubleclick?
If MouseHit(1)
If MilliSecs()<=singleclick+doubleclick
doubleclicked=True: singleclick=0
Else
singleclick=MilliSecs()
EndIf
EndIf
;change confirm button text
f$=SendMessage(txt_sav_filename,"TM_GETTEXT")
If FileType(f$)<>2
;cannot end with .
While Right$(f$,1)="."
f$=Left$(f$,Len(f$)-1)
Wend
;get current extension
If Instr(f$,".",1)
a=Len(f$)
While Mid$(f$,a,1)<>"."
a=a-1
Wend
ext$=Right$(f$,Len(f$)-(a-1))
Else
ext$=""
EndIf
If Instr(filter$,ext$,1)=0 Or (ext$="" And f$<>"")
;If Instr(f$,".",1)=0
f$=f$+extension$
EndIf
EndIf
Select FileType(f$)
Case 0
If save_open=2
SendMessage(btn_sav_yes,"BM_SETTEXT","Save")
If f$=""
SendMessage(btn_sav_yes,"BM_DISABLE")
Else
SendMessage(btn_sav_yes,"BM_ENABLE")
EndIf
Else
SendMessage(btn_sav_yes,"BM_SETTEXT","Open")
SendMessage(btn_sav_yes,"BM_DISABLE")
EndIf
Case 1
If save_open=2
SendMessage(btn_sav_yes,"BM_SETTEXT","Overwrite")
Else
SendMessage(btn_sav_yes,"BM_SETTEXT","Open")
EndIf
SendMessage(btn_sav_yes,"BM_ENABLE")
Case 2
If save_open=2 Then SendMessage(btn_sav_yes,"BM_SETTEXT","Open")
SendMessage(btn_sav_yes,"BM_ENABLE")
End Select

End Function



;-------------------------------------------------------------------------------------------------
Function CREATE_NEW_FOLDER()

f$=SendMessage(txt_newfolder,"TM_GETTEXT")
;does it already exist?
If f$<>""
If FileType(f$)>0
sendmessage(win_folderalreadyexists,"WM_OPEN")
sendmessage(win_folderalreadyexists,"WM_SETMODAL")
Else
;need to stop certain chars ie *:/?"<>|
ff$=ILLEGAL_CHARS(f$)
If ff$=f$
;create new folder
sendmessage(win_newfolder,"WM_CLOSE")
CreateDir CurrentDir$()+f$
GET_DIR
Else
sendmessage(txt_newfolder,"TM_SETTEXT",0,ff$)
sendmessage(win_illegalchars,"WM_OPEN")
sendmessage(win_illegalchars,"WM_SETMODAL")
EndIf
EndIf
EndIf

End Function



;-------------------------------------------------------------------------------------------------
Function ILLEGAL_CHARS$(f$)
a=0
Repeat
a=a+1
For b=1 To 9
If Mid$(f$,a,1)=Mid$("*:/?<>|"+Chr$(34),b,1)
f$=Left$(f$,a-1)+Right$(f$,Len(f$)-a)
a=0
Exit
EndIf
Next
Until a=Len(f$)
Return f$

End Function



;-------------------------------------------------------------------------------------------------
Function SAVE_DIALOGUE(f$,n$)
If sendmessage(win_sav,"WM_VISIBLE")=0
sendmessage(win_sav,"WM_OPEN")
sendmessage(win_sav,"WM_SETMODAL")
save_open=2
SendMessage(btn_sav_yes,"BM_SETTEXT","Save")
SendMessage(btn_sav_newfolder,"BM_ENABLE")
sendmessage(win_sav,"WM_SETCAPTION","Save") ;doesn't yet work - may in future BlitzUI's

;filter box
sendmessage(cbo_sav_filter,"CM_RESET") ;get rid of all items in combo box
aa=0: fa=0
Repeat
a=Instr(f$,";",1)
If a>0
fi$=Left$(f$,a-1)
f$=Right$(f$,Len(f$)-a)
Else
fi$=f$
EndIf
If Right$(fi$,1)="*"
fa=aa
fi$=Left$(fi$,Len(fi$)-1)
EndIf
AddComboBoxItem(cbo_sav_filter,0,fi$)
aa=aa+1
Until a=0
sendmessage(cbo_sav_filter,"CM_SETINDEX",fa)
f$=sendmessage(cbo_sav_filter,"CM_GETCAPTION")
filter$=EXTRACT_FILTER$(f$)

;default extension
extension$=EXTRACT_EXTENSION$(filter$)
;If Len(n$)>Len(extension$)
; If Right$(n$,Len(extension$))<>extension$ Then n$=n$+extension$
;Else
; If n$<>"" Then n$=n$+extension$
;EndIf
sendmessage(txt_sav_filename,"TM_SETTEXT",0,n$)

GET_DIR

EndIf
End Function



;-------------------------------------------------------------------------------------------------
Function OPEN_DIALOGUE(f$)
If sendmessage(win_sav,"WM_VISIBLE")=0
sendmessage(win_sav,"WM_OPEN")
sendmessage(win_sav,"WM_SETMODAL")
save_open=1
SendMessage(btn_sav_yes,"BM_SETTEXT","Open")
SendMessage(btn_sav_yes,"BM_DISABLE")
SendMessage(btn_sav_newfolder,"BM_DISABLE")

sendmessage(win_sav,"WM_SETCAPTION","Open") ;doesn't yet work - may in future BlitzUI's

;filter box
sendmessage(cbo_sav_filter,"CM_RESET") ;get rid of all items in combo box
aa=0: fa=0
Repeat
a=Instr(f$,";",1)
If a>0
fi$=Left$(f$,a-1)
f$=Right$(f$,Len(f$)-a)
Else
fi$=f$
EndIf
If Right$(fi$,1)="*"
fa=aa
fi$=Left$(fi$,Len(fi$)-1)
EndIf
AddComboBoxItem(cbo_sav_filter,0,fi$)
aa=aa+1
Until a=0
sendmessage(cbo_sav_filter,"CM_SETINDEX",fa)
f$=sendmessage(cbo_sav_filter,"CM_GETCAPTION")
filter$=EXTRACT_FILTER$(f$)
extension$=""

GET_DIR

EndIf
End Function



;-------------------------------------------------------------------------------------------------
Function EMPTY_DIR_LIST()
For dir.folderitem=Each folderitem
Delete dir
Next
End Function



;-------------------------------------------------------------------------------------------------
Function EXTRACT_EXTENSION$(f$)
If f$=""
e$=""
Else
a=Instr(f$," ",1)
If a>0
e$=Left$(f$,a-1)
Else
e$=f$
EndIf
EndIf
Return e$
End Function



;-------------------------------------------------------------------------------------------------
Function EXTRACT_FILTER$(f$)
If f$="All Files" Then f$=""
a=Instr(f$,"(",1)
If a>0 Then f$=Right$(f$,Len(f$)-a)
a=Instr(f$,")",1)
If a>0 Then f$=Left$(f$,a-1)
If f$=".*" Then f$=""
Return f$
End Function



;-------------------------------------------------------------------------------------------------
Function EXTRACT_TOP_DIR$(p$)
;;take off last
;p$=Left$(p$,Len(p$)-1)
If Instr(p$,"",1)<Len(p$)
l=Len(p$)-1
While Mid$(p$,l,1)<>""
l=l-1
Wend
p$=Right$(p$,Len(p$)-l)
EndIf
Return p$
End Function



;------------------------------------------------------------------------------------------
Function MOVE_DIR_UP()
LastSlash=0
Slash=0
Repeat
Slash=Instr(path$,"",Slash+1)
If Slash>0 And Slash<Len(path$)
LastSlash=Slash
EndIf
Until Slash=0
If Left(path$,LastSlash)<>path$
path$=Left(path$,LastSlash)
EndIf
If path$<>CurrentDir$()
ChangeDir path$
Return True
Else
Return False
EndIf
End Function



;------------------------------------------------------------------------------------------
Function SELECT_ITEM(f$)
;cannot end with .
While Right$(f$,1)="."
f$=Left$(f$,Len(f$)-1)
Wend
;add default extension?
If FileType(f$)<>2
;get current extension
If Instr(f$,".",1)
a=Len(f$)
While Mid$(f$,a,1)<>"."
a=a-1
Wend
ext$=Right$(f$,Len(f$)-(a-1))
Else
ext$=""
EndIf
If Instr(filter$,ext$,1)=0 Or (ext$="" And f$<>"")
;If Right$(f$,Len(extension$))<>extension$
f$=f$+extension$
EndIf
EndIf
Select FileType(f$)
;folder?
Case 2
sendmessage(txt_sav_filename,"TM_SETTEXT",0,"")
path$=CurrentDir$()+f$
ChangeDir path$
GET_DIR()
;file already existing?
Case 1
If save_open=2
sendmessage(win_overwrite,"WM_OPEN")
sendmessage(win_overwrite,"WM_SETMODAL")
Else
sendmessage(win_sav,"WM_CLOSE")
OPEN(f$)
EndIf
;new filename?
Case 0
If save_open=2
;any illegal characters ie *:/?"<>|
ff$=ILLEGAL_CHARS(f$)
If ff$=f$
While Right$(f$,1)="."
f$=Left$(f$,Len(f$)-1)
Wend
;NOW does it already exist?
If FileType(f$)<>0
Else
;create new file
sendmessage(win_sav,"WM_CLOSE")
SAVE(f$)
EndIf
Else
sendmessage(txt_sav_filename,"TM_SETTEXT",0,ff$)
sendmessage(win_illegalchars,"WM_OPEN")
sendmessage(win_illegalchars,"WM_SETMODAL")
EndIf
EndIf
End Select
End Function



;------------------------------------------------------------------------------------------
Function GET_DIR()

;set folder name
path$=CurrentDir$()
;If Len(path$)>3 Then folder$=EXTRACT_TOP_DIR$(path$) Else folder$=path$
folder$=EXTRACT_TOP_DIR$(path$)
;sendmessage(txt_sav_foldername,"TM_SETTEXT",0,folder$)

;folder combo box
path_c$=path$
n=0 ;number of folders
o=1
Repeat
o=Instr(path_c$,"",o)+1
If o>1 n=n+1
If KeyDown(1) End
Until o=1
nm=n
sendmessage(cbo_sav_foldername,"CM_RESET")
Repeat
path_t$=EXTRACT_TOP_DIR$(path_c$)
AddComboBoxItem(cbo_sav_foldername,n,Left$(path_t$,Len(path_t$)-1))
path_c$=Left$(path_c$,Len(path_c$)-Len(path_t$))
n=n-1
If KeyDown(1) End
Until path_c$=""
sendmessage(cbo_sav_foldername,"CM_SETINDEX",nm-1)



EMPTY_DIR_LIST
;put files into type
items=0
thisdir=ReadDir(path$)
Repeat
;f$=Lower$(NextFile$(thisdir))
f$=NextFile$(thisdir)
If f$<>"" And f$<>"." And f$<>".."
;extension filtering
legal=False
If filter$="" Or FileType(f$)=2
legal=True
Else
;get the extension of the item
If Instr(f$,".",1)
ff=Len(f$)
While Mid$(f$,ff,1)<>"."
ff=ff-1
Wend
ext$=Right$(f$,Len(f$)-(ff-1))
If Instr(filter$,ext$,1)>0
legal=True
EndIf
EndIf
EndIf
If legal
dir.folderitem=New folderitem
dir
ame$=f$
dirwhat=FileType(f$)
items=items+1
EndIf
EndIf
Until f$=""
CloseDir thisdir
;SORT ALPHABETICALLY AND INTO FOLDERS / FILES / FILE TYPES
dir.folderitem=First folderitem
Repeat
If dir=Null Then Exit
a$=Lower$(dir
ame$): aa=dirwhat
;put extension before name
If Instr(a$,".")
aaa=Len(a$)
Repeat
aaa=aaa-1
Until Mid$(a$,aaa,1)="."
a$=Right$(a$,Len(a$)-(aaa-1))+Left$(a$,aaa-1)
EndIf
dir.folderitem=After dir
If dir=Null Then Exit
b$=Lower$(dir
ame$): bb=dirwhat
;put extension before name
If Instr(b$,".")
bbb=Len(b$)
Repeat
bbb=bbb-1
Until Mid$(b$,bbb,1)="."
b$=Right$(b$,Len(b$)-(bbb-1))+Left$(b$,bbb-1)
EndIf
If (bb=aa And a$>b$) Or bb>aa
Insert dir Before Before dir
If dir.folderitem<>First folderitem Then dir=Before dir
EndIf
Forever
;put into GUI
file_list=0
sendmessage(lst_sav_files,"LM_RESET") ;get rid of all items in list
For dir.folderitem=Each folderitem
If dirwhat=2
AddListBoxItem(lst_sav_files,0,dir
ame$,imgOpen)
Else
AddListBoxItem(lst_sav_files,0,dir
ame$,imgNew)
EndIf
file_list=file_list+1
Next
End Function



;------------------------------------------------------------------------------------------
Function MAKE_ICONS()

Restore NewIcon
imgNew = createimage(16, 16)
for A = 0 to 15
for B = 0 to 15
read RGB
writepixel B, A, RGB, imagebuffer( imgNew )
next
next
MaskImage imgNew, 255, 0, 0

Restore OpenIcon
imgOpen = CreateImage(16, 16)
For A = 0 To 15
For B = 0 To 15
Read RGB
WritePixel B, A, RGB, ImageBuffer( imgOpen )
Next
Next
MaskImage imgOpen, 255, 0, 0

Restore NewFolderIcon
imgNewFolder = CreateImage(16, 16)
For A = 0 To 15
For B = 0 To 15
Read RGB
WritePixel B, A, RGB, ImageBuffer( imgNewFolder )
Next
Next
MaskImage imgNewFolder, 0, 255, 0

Restore UpFolderIcon
imgUpFolder = CreateImage(16, 16)
For A = 0 To 15
For B = 0 To 15
Read RGB
WritePixel B, A, RGB, ImageBuffer( imgUpFolder )
Next
Next
MaskImage imgUpFolder, 0, 255, 0

End Function



;NEW ICON
;--------
.NewIcon
Data -65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536
Data -65536,-65536,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-65536,-65536,-65536,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-8355712,-16777216,-65536,-65536,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-8355712,-1,-16777216,-65536,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-16777216,-16777216,-16777216,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-1,-1,-1,-1,-1,-1,-1,-1,-1,-16777216,-65536,-65536,-65536
Data -65536,-65536,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-65536,-65536,-65536
Data -65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536


;OPEN ICON
;---------
.OpenIcon
Data -65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536
Data -65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-16777216,-16777216,-16777216,-65536,-65536,-65536,-65536
Data -65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-16777216,-65536,-65536,-65536,-16777216,-65536,-16777216,-65536
Data -65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-16777216,-16777216,-65536
Data -65536,-16777216,-16777216,-16777216,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-16777216,-16777216,-16777216,-65536
Data -16777216,-459584,-459584,-459584,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-65536,-65536,-65536,-65536,-65536
Data -16777216,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-16777216,-65536,-65536,-65536,-65536,-65536
Data -16777216,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-16777216,-65536,-65536,-65536,-65536,-65536
Data -16777216,-459584,-459584,-459584,-459584,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-65536
Data -16777216,-459584,-459584,-459584,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-65536
Data -16777216,-459584,-459584,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-65536,-65536
Data -16777216,-459584,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-65536,-65536,-65536
Data -16777216,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-65536,-65536,-65536,-65536
Data -16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-65536,-65536,-65536,-65536,-65536
Data -65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536
Data -65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536

;NEW FOLDER ICON
;---------
.NewFolderIcon
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-65536,-16711936,-16711936,-16711936,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-65536,-16711936,-16711936,-65536,-16711936,-16711936,-65536,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-65536,-16711936,-65536,-16711936,-65536,-16711936,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-65536,-65536,-65536,-16711936,-16711936,-16711936
Data -16711936,-16711936,-16777216,-16777216,-16777216,-16711936,-16711936,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536,-65536
Data -16711936,-16777216,-459584,-459584,-459584,-16777216,-16777216,-16777216,-16777216,-16777216,-65536,-65536,-65536,-16711936,-16711936,-16711936
Data -16711936,-16777216,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-65536,-459584,-65536,-16711936,-65536,-16711936,-16711936
Data -16711936,-16777216,-459584,-459584,-459584,-459584,-459584,-459584,-65536,-459584,-459584,-65536,-16711936,-16711936,-65536,-16711936
Data -16711936,-16777216,-459584,-459584,-459584,-459584,-16777216,-16777216,-16777216,-16777216,-16777216,-65536,-16777216,-16777216,-16777216,-16777216
Data -16711936,-16777216,-459584,-459584,-459584,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216
Data -16711936,-16777216,-459584,-459584,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-16711936
Data -16711936,-16777216,-459584,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-16711936,-16711936
Data -16711936,-16777216,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16711936,-16711936,-16711936,-16711936


;UP FOLDER ICON
;---------
.UpFolderIcon
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16777216,-16777216,-16711936,-16711936,-16711936,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16777216,-65281,-65281,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16777216,-65281,-65281,-65281,-65281,-16777216,-16711936,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16777216,-16777216,-16777216,-65281,-65281,-16777216,-16777216,-16777216,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16777216,-65281,-65281,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16711936,-16777216,-65281,-65281,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16711936,-16777216,-16777216,-16777216,-16711936,-16711936,-16711936,-16711936,-16777216,-65281,-65281,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16777216,-459584,-459584,-459584,-16777216,-16777216,-16777216,-16777216,-16777216,-65281,-65281,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16777216,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-16777216,-65281,-65281,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16777216,-459584,-459584,-459584,-459584,-459584,-459584,-459584,-16777216,-65281,-65281,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16777216,-459584,-459584,-459584,-459584,-16777216,-16777216,-16777216,-16777216,-65281,-65281,-16777216,-16777216,-16777216,-16777216
Data -16711936,-16777216,-459584,-459584,-459584,-16777216,-7829504,-4145152,-7829504,-16777216,-65281,-65281,-16777216,-4145152,-7829504,-16777216
Data -16711936,-16777216,-459584,-459584,-16777216,-7829504,-4145152,-7829504,-4145152,-16777216,-65281,-65281,-16777216,-7829504,-16777216,-16711936
Data -16711936,-16777216,-459584,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-16777216,-16777216,-16777216,-16777216,-16711936,-16711936
Data -16711936,-16777216,-16777216,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-4145152,-7829504,-16777216,-16711936,-16711936,-16711936
Data -16711936,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16777216,-16711936,-16711936,-16711936,-16711936


;------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------


Comments : none...