From: Ezra B. <ezr...@us...> - 2010-07-31 06:38:28
|
Update of /cvsroot/win32forth/win32forth/src/lib In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv12349 Modified Files: FolderView.f Log Message: Improved update speed I think. EAB Index: FolderView.f =================================================================== RCS file: /cvsroot/win32forth/win32forth/src/lib/FolderView.f,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** FolderView.f 1 Feb 2010 01:32:31 -0000 1.4 --- FolderView.f 31 Jul 2010 06:38:12 -0000 1.5 *************** *** 3,11 **** anew -FolderView.f ! needs linklist.f needs listview.f needs quiksort.f needs statusbar.f \- ?exitm macro ?exitm " if exitm then" 0 value ThisViewer --- 3,13 ---- anew -FolderView.f ! \ needs linklist.f needs listview.f needs quiksort.f needs statusbar.f + 5 proc SHGetFileInfo As get-file-info + \- ?exitm macro ?exitm " if exitm then" 0 value ThisViewer *************** *** 26,31 **** Endbar ! INTERNAL ! EXTERNAL : BrowseFolder ( lpszTitle pszFolder hwndOwner -- flag ) --- 28,32 ---- Endbar ! also hidden : BrowseFolder ( lpszTitle pszFolder hwndOwner -- flag ) *************** *** 53,64 **** else drop false then r> Call CoTaskMemFree drop ; \ release memory ! MODULE \ ************************************************************************* \ Simple no frills wildcard (* and ?) pattern matching of files, emulates API I think. ! create filespec-name 100 allot filespec-name off ! create filespec-ext 100 allot filespec-ext off create filebuf max-path allot ! create filebuf-ext 100 allot : ?*-in-name { buf -- } \ first cell of buffer stores flag for * check --- 54,104 ---- else drop false then r> Call CoTaskMemFree drop ; \ release memory ! ! previous ! ! CODE COMPAREI ( adr1 len1 adr2 len2 -- n ) ! mov -4 [ebp], esi ! pop edi \ edi = adr2 ! pop ecx \ ecx = len1 ! pop esi \ esi = adr1 ! sub eax, eax \ default is 0 (strings match) ! cmp ecx, ebx \ compare lengths ! je short @@2 ! ja short @@1 ! dec eax \ if len1 < len2, default is -1 ! jmp short @@2 ! @@1: ! inc eax \ if len1 > len2, default is 1 ! mov ecx, ebx \ and use shorter length ! @@2: ! mov bl, BYTE [esi] ! mov bh, BYTE [edi] ! inc esi ! inc edi ! or bx, # $2020 ! cmp bh, bl ! loopz @@2 ! ! je short @@4 \ if equal, return default ! jnc short @@3 ! mov eax, # 1 \ if str1 > str2, return 1 ! jmp short @@4 ! @@3: ! mov eax, # -1 \ if str1 < str2, return -1 ! @@4: ! mov ebx, eax ! mov esi, -4 [ebp] ! xor edi, edi ! next c; \ ************************************************************************* \ Simple no frills wildcard (* and ?) pattern matching of files, emulates API I think. ! create filespec-name 40 allot filespec-name off ! create filespec-ext 40 allot filespec-ext off create filebuf max-path allot ! create filebuf-ext 32 allot ! ! : *.* ( -- addr cnt ) ! s" *.*" ; : ?*-in-name { buf -- } \ first cell of buffer stores flag for * check *************** *** 76,89 **** addr cnt ".ext-only" 1 /string filebuf-ext place ; ! : compare-buf { specname bufname \ speclen buflen specflag -- f } ! specname cell+ c@ to speclen specname @ to specflag ! bufname c@ to buflen speclen 0= specflag 0<> and ?dup ?exit \ assume single * in spec false \ default result speclen buflen > ?exit \ filespec greater so fail speclen 0 ! ?do specname cell+ 1+ i + c@ dup '?' <> ! if upc bufname 1+ i + c@ upc <> if unloop exit \ comparison failed then --- 116,129 ---- addr cnt ".ext-only" 1 /string filebuf-ext place ; ! : compare-buf { specname bufname \ speclen buflen specflag specaddr bufaddr -- f } ! specname cell+ count to speclen to specaddr specname @ to specflag ! bufname count to buflen to bufaddr speclen 0= specflag 0<> and ?dup ?exit \ assume single * in spec false \ default result speclen buflen > ?exit \ filespec greater so fail speclen 0 ! ?do specaddr i + c@ dup '?' <> ! if upc bufaddr i + c@ upc <> if unloop exit \ comparison failed then *************** *** 100,104 **** : match-specs? { specname speccnt fname fcnt -- f } ! specname speccnt s" *.*" str= ?dup ?exit \ special case fname fcnt parse-filename specname speccnt parse-filespecs --- 140,144 ---- : match-specs? { specname speccnt fname fcnt -- f } ! specname speccnt *.* str= ?dup ?exit \ special case fname fcnt parse-filename specname speccnt parse-filespecs *************** *** 106,180 **** filespec-ext filebuf-ext compare-buf and ; ! \ ************************************************************************** ! ! :Class FindFile <Super Object ! ! max-path bytes findpath ! 32 bytes findspecs ! ! :M FindFirstFile: ( addr cnt -- ior ) \ ior = 0 = success ! find-first-file nip ! ;M ! ! :M FindNextFile: ( -- ior ) \ ior = 0 = success ! find-next-file nip ;M ! ! :M FindClose: ( -- ior ) \ ior = 0 = success ! find-close drop ;M ! ! :M GetFileAttributes: ( -- n ) ! _Win32-Find-Data @ ;M ! ! :M GetFileName: ( -- adr cnt ) ! get-file-name zcount ;M ! ! :M GetFileSize: ( -- d ) ! _win32-find-data 7 cells+ 2@ ! ;M ! ! :M ClassInit: ( -- ) ! ClassInit: super ! findpath max-path erase ! s" *.*" findspecs place \ default ! ;M ! ! :M .or..?: ( -- f ) \ is found file directories . or ..? ! GetFileName: self drop c@ '.' = ;M ! ! :M IsDirectory?: ( -- f ) \ exclude . and .. ! GetFileAttributes: self FILE_ATTRIBUTE_DIRECTORY and ! \ .or..? not and ! ;M ! ! :M IsFile?: ( -- f ) ! GetFileAttributes: self FILE_ATTRIBUTE_DIRECTORY and 0= ! ;M ! ! :M SetUp: ( pathstr len spec$ cnt -- ) ! \ pathstr len = pointer to path to search ! \ spec$ cnt = file specs to search for ! dup 0= ! if 2drop s" *.*" ! then 31 min 0max findspecs place ! findpath place ;M ! ! :M FindFiles: ( -- f ) \ specs should be already setup ! new$ >r ! findpath count r@ place ! findspecs count dup ! if r@ ?+\ ! then r@ +place ! r> count FindFirstFile: self ! ;M ! ! :M FullPath: ( -- addr cnt ) \ return full path of directory found ! findpath count new$ dup>r place ! GetFileName: self dup ! if r@ ?+\ ! then r@ +place ! r> count ! ;M ! ! ;Class :Class FolderItem <super Object --- 146,151 ---- filespec-ext filebuf-ext compare-buf and ; ! 0 value hwndSmallIcons \ handle to imagelist for small icons ! 0 value hwndLargeIcons :Class FolderItem <super Object *************** *** 202,205 **** --- 173,184 ---- ;RecordSize: sizeof(Win32_Find_Data) + Record: psfi \ structure to be passed to SHGetFileInfo API call + int hIcon + int iIcon + int dwAttributes + max-path bytes szDisplayName + 80 bytes szTypeName + ;RecordSize: sizeof(psfi) + :M GetFileAttributes: ( -- n ) FileAttributes ;M *************** *** 230,234 **** :M Classinit: ( -- ) Classinit: super - \ Win32_Find_Data sizeof(Win32_Find_Data) erase 0 to iconhandle 0 to itemhandle --- 209,212 ---- *************** *** 239,256 **** Win32_Find_Data sizeof(Win32_Find_Data) ;M :M setup: ( addr cnt -- ) \ assumes name is set for FindFirstFile, FindNextFile etc. ! \ itemname max-path erase ! max-path min 0max dup>r itemname swap cmove ! itemname r> + off \ transfer the info _Win32-Find-Data Win32_Find_Data sizeof(Win32_Find_Data) cmove ! index itemname itemhandle Call ExtractAssociatedIcon to iconhandle ;M :M GetName: ( -- addrz ) ! itemname ;M :M GetName$: ( -- addr cnt ) ! itemname zcount ;M :M iconhandle: ( -- n ) --- 217,242 ---- Win32_Find_Data sizeof(Win32_Find_Data) ;M + : GetInfo ( -- ) \ get icon info, using attribute _suppose_ to prevent accessing each file on disk + [ SHGFI_ICON SHGFI_USEFILEATTRIBUTES or ] LITERAL + sizeof(psfi) + psfi + dir-attribute? if FILE_ATTRIBUTE_DIRECTORY else FILE_ATTRIBUTE_NORMAL then + itemname 1+ + get-file-info drop + hIcon to iconhandle ; + :M setup: ( addr cnt -- ) \ assumes name is set for FindFirstFile, FindNextFile etc. ! itemname place ! itemname +null \ transfer the info _Win32-Find-Data Win32_Find_Data sizeof(Win32_Find_Data) cmove ! GetInfo ;M :M GetName: ( -- addrz ) ! itemname 1+ ;M :M GetName$: ( -- addr cnt ) ! itemname count ;M :M iconhandle: ( -- n ) *************** *** 269,300 **** ;Class - :Class TreeList <super linked-list - - :M DeleteItem: { item \ flag -- } - Data@: self 0= ?exitm - false to flag - #Links: self 1+ 1 - ?do i >Link#: self Data@: self item = - if 0 Data!: self DeleteLink: self - item dispose - true to flag \ mark as found - leave - then - loop flag 0= abort" Item not found in list!" - ;M - - :M Total: ( -- n ) - Data@: self - if #links: self - else 0 - then ;M - - :M GetItem: { n -- obj | -1 } - -1 Total: self 0= ?exitm - n 1 Total: self between not ?exitm - drop n >Link#: self Data@: self ;M - - ;Class - :Class FolderListView <super ListView --- 255,258 ---- *************** *** 311,321 **** LV_ITEM LvItem FolderListView TheView - FindFile FileFinder int itemindex - int FolderList - int DirList int ThisItem \ temp pointer to new item - int hwndSmallIcons \ handle to imagelist for small icons - int hwndLargeIcons int sortorder int OnSelect \ called when an item is clicked --- 269,274 ---- *************** *** 332,345 **** StatusBar ViewStatusBar ! \ number of files shown is limited only by available memory ! \ however only first 4k will be sorted. Of course the buffer size could always be increased ! 16 1024 * constant RecBuffer-size ! RecBuffer-size cell / constant max-recs \ about 4000 files and directories for sorting ! int RecBuffer \ pointer to memory used for sorting max-path 1+ bytes Treepath ! \ path: thespecs ! 2 cells Class-allot ! max-path 1+ bytes thespecs : rootdir? { pathstr cnt -- f } \ f = true if path is at root --- 285,294 ---- StatusBar ViewStatusBar ! 32 1024 * constant max-files ! max-files cell * Pointer FolderList \ 32k max files shown in a folder ! max-files cell * Pointer DirList \ 32k max directories shown, 64k total in a listing max-path 1+ bytes Treepath ! path: thespecs : rootdir? { pathstr cnt -- f } \ f = true if path is at root *************** *** 347,372 **** pathstr cnt + 1- c@ ':' = ; ! : RecBuffer() ( n -- addr ) ! RecBuffer +cells ; ! ! : free-RecBuffer ( -- ) ! RecBuffer ?dup ! if release ! 0 to RecBuffer ! then ; ! ! : ReadRecBuffer { list -- } \ load temporary buffer with record pointers ! >FirstLink: List ! Total: List max-recs min 0max 0 ! ?do Data@: List i RecBuffer() ! ! >NextLink: List ! loop ; ! ! : writeRecBuffer { list -- } \ rewrite records to database ! >FirstLink: List ! Total: List max-recs min 0max 0 ! ?do i RecBuffer() @ Data!: List ! >NextLink: List ! loop ; : InitTheViewColumns ( -- ) --- 296,301 ---- pathstr cnt + 1- c@ ':' = ; ! : list[] ( list ndx -- addr ) ! cell under+ cells+ ; : InitTheViewColumns ( -- ) *************** *** 397,401 **** : CreateSmallImageList ( -- ) \ create small image list for list control ! Total: FolderList Total: DirList + \ maximum images dup \ number of images to use ILC_COLOR16 \ color depth --- 326,330 ---- : CreateSmallImageList ( -- ) \ create small image list for list control ! FolderList @ DirList @ + \ maximum images dup \ number of images to use ILC_COLOR16 \ color depth *************** *** 407,411 **** : CreateLargeImageList ( -- ) \ create large image list for listview control ! Total: FolderList Total: DirList + \ maximum images dup \ number of images to use ILC_COLOR16 \ color depth --- 336,340 ---- : CreateLargeImageList ( -- ) \ create large image list for listview control ! FolderList @ DirList @ + \ maximum images dup \ number of images to use ILC_COLOR16 \ color depth *************** *** 428,441 **** CreateSmallImageList CreateLargeImageList ! DirList ReadRecBuffer ! Total: DirList 0 ! ?do i RecBuffer() @ to item IconHandle: item ?dup if dup hwndLargeIcons Call ImageList_AddIcon drop hwndSmallIcons Call ImageList_AddIcon drop then ! loop FolderList ReadRecBuffer ! Total: FolderList 0 ! ?do i RecBuffer() @ to item IconHandle: item ?dup if dup hwndLargeIcons Call ImageList_AddIcon drop --- 357,368 ---- CreateSmallImageList CreateLargeImageList ! DirList @ 0 ! ?do DirList i list[] @ to item IconHandle: item ?dup if dup hwndLargeIcons Call ImageList_AddIcon drop hwndSmallIcons Call ImageList_AddIcon drop then ! loop FolderList @ 0 ! ?do FolderList i list[] @ to item IconHandle: item ?dup if dup hwndLargeIcons Call ImageList_AddIcon drop *************** *** 444,460 **** loop ; ! : AddFile ( str cnt -- ) ! Data@: FolderList ! if AddLink: FolderList ! then New> FolderItem dup Data!: FolderList to ThisItem hwnd SetHandle: ThisItem ! ( str cnt ) SetUp: ThisItem ; ! : AddDir ( str cnt -- ) ! Data@: DirList ! if AddLink: DirList ! then New> FolderItem dup Data!: DirList to ThisItem hwnd SetHandle: ThisItem ! ( str cnt ) SetUp: ThisItem ; : get-date-and-time ( obj -- timestr cnt datestr cnt ) --- 371,388 ---- loop ; ! : AddFile { str cnt -- } ! FolderList @ max-files >= ?exit \ don't abort, just don't add any more files ! New> FolderItem dup to ThisItem FolderList dup @ list[] ! ! FolderList incr hwnd SetHandle: ThisItem ! str cnt SetUp: ThisItem ! ; ! : AddDir { str cnt -- } ! DirList @ max-files >= ?exit \ don't abort, just don't add any more directories ! New> FolderItem dup to ThisItem DirList dup @ list[] ! ! DirList incr hwnd SetHandle: ThisItem ! str cnt SetUp: ThisItem ; : get-date-and-time ( obj -- timestr cnt datestr cnt ) *************** *** 471,488 **** : AddViewItem { list ndx \ obj -- } ! ndx 1+ GetItem: List to obj list FolderList = show-dirs? and \ #dirs 0<> and if #dirs +to ndx \ offset for files then \ first add the name ! LVIF_TEXT LVIF_PARAM or LVIF_IMAGE or SetMask: LvItem ndx SetiItem: LvItem obj SetlParam: LvItem ! ndx SetIImage: Lvitem GetFileName: obj drop SetpszText: LvItem ! Addr: LvItem InsertItem: TheView drop \ now we add subitems. \ size ! LVIF_TEXT SetMask: LvItem ndx SetiItem: LvItem 1 SetiSubItem: LVItem --- 399,416 ---- : AddViewItem { list ndx \ obj -- } ! list ndx list[] @ to obj list FolderList = show-dirs? and \ #dirs 0<> and if #dirs +to ndx \ offset for files then \ first add the name ! [ LVIF_TEXT LVIF_PARAM or LVIF_IMAGE or ] LITERAL SetMask: LvItem ndx SetiItem: LvItem obj SetlParam: LvItem ! ndx SetIImage: Lvitem GetFileName: obj drop SetpszText: LvItem ! LvItem InsertItem: TheView drop \ now we add subitems. \ size ! LVIF_TEXT SetMask: LvItem ndx SetiItem: LvItem 1 SetiSubItem: LVItem *************** *** 491,495 **** else z" " \ show no size for directories then SetpszText: LvItem ! Addr: LvItem ndx SetItemText: TheView drop obj get-date-and-time --- 419,423 ---- else z" " \ show no size for directories then SetpszText: LvItem ! LvItem ndx SetItemText: TheView drop obj get-date-and-time *************** *** 499,503 **** 2 SetiSubItem: LVItem ( date ) asciiz SetpszText: LvItem ! Addr: LvItem ndx SetItemText: TheView drop \ time LVIF_TEXT SetMask: LvItem --- 427,431 ---- 2 SetiSubItem: LVItem ( date ) asciiz SetpszText: LvItem ! LvItem ndx SetItemText: TheView drop \ time LVIF_TEXT SetMask: LvItem *************** *** 505,509 **** 3 SetiSubItem: LVItem ( time ) asciiz SetpszText: LvItem ! Addr: LvItem ndx SetItemText: TheView drop ; : show-files ( -- ) \ add file and stats to the listviewbox --- 433,437 ---- 3 SetiSubItem: LVItem ( time ) asciiz SetpszText: LvItem ! LvItem ndx SetItemText: TheView drop ; : show-files ( -- ) \ add file and stats to the listviewbox *************** *** 511,515 **** DestroyImageLists add-icons ! hwndSmallIcons LVSIL_SMALL SetImageList: TheView drop hwndLargeIcons LVSIL_NORMAL SetImageList: TheView drop 0 show-dirs? --- 439,443 ---- DestroyImageLists add-icons ! hwndSmallIcons LVSIL_SMALL SetImageList: TheView drop hwndLargeIcons LVSIL_NORMAL SetImageList: TheView drop 0 show-dirs? *************** *** 519,527 **** then SetItemCount: TheView drop show-dirs? ! if Total: DirList 0 ?do DirList i AddViewItem loop then show-files? ! if Total: FolderList 0 ?do FolderList i AddViewItem loop --- 447,455 ---- then SetItemCount: TheView drop show-dirs? ! if DirList @ 0 ?do DirList i AddViewItem loop then show-files? ! if FolderList @ 0 ?do FolderList i AddViewItem loop *************** *** 530,536 **** :M Start: ( parent -- ) Start: super ! new> TreeList to FolderList ! new> TreeList to DirList ! RecBuffer-Size malloc to RecBuffer ;M --- 458,463 ---- :M Start: ( parent -- ) Start: super ! FolderList off ! DirList off ;M *************** *** 549,555 **** Classinit: super treepath off ! -1 thespecs 2 cells - ! ! 0 thespecs cell- ! ! s" *.*" thespecs place ['] drop to OnSelect ['] drop to On_Update --- 476,480 ---- Classinit: super treepath off ! *.* thespecs place ['] drop to OnSelect ['] drop to On_Update *************** *** 566,594 **** 0.0 2to total-size 0 to hwndlabel - 0 to RecBuffer NextID to id SortAscending: [ self ] ;M : DisposeTheList ( -- ) ! FolderList ! if Folderlist DisposeList ! FolderList Dispose ! 0 to FolderList ! then DirList ! if DirList DisposeList ! DirList Dispose ! 0 to DirList ! then ; :M ~: ( -- ) DisposeTheList ! free-RecBuffer ;M :M Close: ( -- ) DisposeTheList - free-RecBuffer DestroyImageLists ;M \ scan a directory once for all files, compare each file found to file specs and add \ if match is found --- 491,533 ---- 0.0 2to total-size 0 to hwndlabel NextID to id SortAscending: [ self ] ;M : DisposeTheList ( -- ) ! FolderList lcount cells bounds ! ?do i @ dispose ! cell +loop FolderList off ! DirList lcount cells bounds ! ?do i @ dispose ! cell +loop DirList off ; :M ~: ( -- ) DisposeTheList ! ;M :M Close: ( -- ) DisposeTheList DestroyImageLists ;M + \ max-path bytes findpath + 32 bytes findspecs + max-path bytes fullpath$ + + : FindFirstFile ( -- f ) + TreePath count fullpath$ dup>r place + r@ ?+\ + *.* r@ +place + r> count find-first-file nip ; + + : get-path-file ( -- addr cnt ) \ return full path of directory found + TreePath count fullpath$ dup>r place + r@ ?+\ + get-file-name zcount r@ +place + r> count ; + + : GetFileSize ( -- d ) + _win32-find-data 7 cells+ 2@ ; + \ scan a directory once for all files, compare each file found to file specs and add \ if match is found *************** *** 597,613 **** 0 to #fls 0.0 2to total-size ! TreePath count s" *.*" Setup: FileFinder ! FindFiles: FileFinder begin 0= ! while IsDirectory?: FileFinder ! if .or..?: FileFinder not ! if FullPath: FileFinder AddDir ! 1 +to #dirs then else thespecs first-path" begin dup 0> ! while GetFileName: FileFinder match-specs? ! if FullPath: FileFinder AddFile ! GetFileSize: FileFinder 2+to total-size 1 +to #fls 0 0 \ set to leave --- 536,551 ---- 0 to #fls 0.0 2to total-size ! FindFirstFile begin 0= ! while dir-attribute? ! if get-file-name c@ '.' <> \ exclude . or .. ! if get-path-file AddDir ! 1 +to #dirs then else thespecs first-path" begin dup 0> ! while get-file-name zcount match-specs? ! if get-path-file AddFile ! GetFileSize 2+to total-size 1 +to #fls 0 0 \ set to leave *************** *** 615,620 **** then repeat 2drop ! then FindNextFile: FileFinder ! repeat FindClose: FileFinder ; : dosortorder ( n -- f ) --- 553,558 ---- then repeat 2drop ! then find-next-file nip ! repeat find-close drop ; : dosortorder ( n -- f ) *************** *** 622,639 **** : compare-recs ( n1 n2 -- f ) ! GetFileName: [ swap ] ! GetFileName: [ rot ] caps-compare dosortorder ; ! : (sort) { list -- } ! RecBuffer 0= ?exit \ if not allocated abort sorting ['] compare-recs is precedes \ set sort comparator ! Total: list 2 < ?exit ! list ReadRecBuffer \ load buffer ! 0 RecBuffer() Total: list sort \ ! list writeRecBuffer ; ! ! : sortfolder ( -- ) ! DirList (sort) ! FolderList (sort) ; :M Setpath: { addr cnt -- } \ check for valid path --- 560,573 ---- : compare-recs ( n1 n2 -- f ) ! >r GetFileName: [ ] r> GetFileName: [ ] ! comparei ( caps-compare ) dosortorder ; ! : sortfolders ( -- ) ['] compare-recs is precedes \ set sort comparator ! DirList @ 2 > ! if Dirlist lcount sort ! then FolderList @ 2 > ! if FolderList lcount sort ! then ; :M Setpath: { addr cnt -- } \ check for valid path *************** *** 644,650 **** then addr cnt lastchar '\' = if 1- ! then find-first-file ! if drop exitm \ does not exist so exit ! then @ FILE_ATTRIBUTE_DIRECTORY and \ something was found if addr cnt treepath place \ it is a directory treepath +null --- 578,583 ---- then addr cnt lastchar '\' = if 1- ! then find-first-file nip ?exitm ! dir-attribute? if addr cnt treepath place \ it is a directory treepath +null *************** *** 663,667 **** hwndlabel 0= ?exit hwndlabel Call IsWindow 0= ?exit ! treepath count asciiz 0 WM_SETTEXT hwndlabel Call SendMessage drop ; : show-stats ( -- ) --- 596,600 ---- hwndlabel 0= ?exit hwndlabel Call IsWindow 0= ?exit ! treepath 1+ 0 WM_SETTEXT hwndlabel Call SendMessage drop ; : show-stats ( -- ) *************** *** 681,689 **** then _Win32-Find-Data [ 11 cells max-path + 14 + ] LITERAL erase s" Building list..." "message ! FolderList DisposeList ! DirList DisposeList 0 to SelectedItem FindAllFiles ! SortFolder show-files show-path --- 614,621 ---- then _Win32-Find-Data [ 11 cells max-path + 14 + ] LITERAL erase s" Building list..." "message ! DisposeTheList 0 to SelectedItem FindAllFiles ! SortFolders show-files show-path *************** *** 814,818 **** :M GetListView: ( -- obj ) ! Addr: TheView ;M ;Class --- 746,750 ---- :M GetListView: ( -- obj ) ! TheView ;M ;Class |