a small birthday present for you 2
understand the usage of quads and recursive
directoryscans.
i posted this normaly only for the ALPHA-versions, but
now it seems to work perfectly in the betas.
Code: Select all
;
; Directory Scanner , shows bytes of Directorys
;
; (c) 2006 By Siegfried Rings
;
; Purpose: - To evaluate PB4's quad-support
; and find the biggest waster on my harddisks
;
; I DON'T LIKE 2 COMMENT MY SOURCE !
Enumeration
#Window_0
#String_DirectoryName
#ListIcon_DirectoryGrid
#Button_DirectoryDown
#Button_DirectoryScan
#Button_DirectoryPick
#CheckBoxGadget_SortFlag
EndEnumeration
Structure MyDirectoryStructure
Name.s
Length.q
EndStructure
Global NewList MyDirectory.MyDirectoryStructure()
Global wSize.q
Global Size1.q
Procedure.q GetDirectorySize(d,f.s)
k=d+1
sz.q
If ExamineDirectory(k,f,"*.*")
While NextDirectoryEntry(k)
FileType=DirectoryEntryType(k)
FileName.s = DirectoryEntryName(k)
If FileType = 2
If FileName<>"." And FileName<>".."
SetWindowTitle(#Window_0,"wait... scanning directory " + f+FileName)
sz=sz+GetDirectorySize(k,f+FileName+"\")
EndIf
Else
sz=sz+FileSize(f+FileName)
EndIf
Wend
FinishDirectory(k)
EndIf
ProcedureReturn sz
EndProcedure
Procedure.s FormatNumber(Number.q,Max)
dummy.s=StrU(Number.q)
l1=Len(dummy)
For i=L1 To 1 Step -1
dummy2.s=Mid(dummy,i,1)+dummy2
p+1
If p=3 And I<>1
dummy2.s ="."+dummy2.s
p=0
EndIf
Next
dummy2=Right(Space(max)+dummy2,max)
ProcedureReturn dummy2
EndProcedure
Procedure ShowDirectorySorted()
SortFlag=GetGadgetState(#CheckBoxGadget_SortFlag)
If SortFlag =0
SortStructuredList(MyDirectory(), 2, OffsetOf(MyDirectoryStructure\Name), #PB_String)
Else
SortStructuredList(MyDirectory(), 1, OffsetOf(MyDirectoryStructure\Length), #PB_Quad)
EndIf
ClearGadgetItems(#ListIcon_DirectoryGrid)
P=1
ForEach MyDirectory()
Content.s=MyDirectory()\Name+Chr(10)+FormatNumber(MyDirectory()\length,20)
AddGadgetItem(#ListIcon_DirectoryGrid,-1, content )
Next
t= CountGadgetItems(#ListIcon_DirectoryGrid) -1
For I=0 To t
P+1
If P=1
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_BackColor,RGB(250,250,150))
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_FrontColor,RGB(0,0,0))
Else
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_BackColor,RGB(100,100,100))
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_FrontColor,RGB(200,200,100))
P=0
EndIf
Next
Content.s=".."+ Chr(10)+ "--------------------"
AddGadgetItem(#ListIcon_DirectoryGrid,-1, content )
Filename.s="..sum of directorys in '"+GetGadgetText(#String_DirectoryName)+"'"
Content.s=Filename+ Chr(10)+ FormatNumber(wsize,20)
AddGadgetItem(#ListIcon_DirectoryGrid,-1, content )
I=CountGadgetItems(#ListIcon_DirectoryGrid) -1
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_BackColor,RGB(250,250,100),1)
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_FrontColor,RGB(100,100,250),1)
Filename.s="..single files in '"+GetGadgetText(#String_DirectoryName)+"'"
Content.s=Filename+ Chr(10)+ FormatNumber(size1,20)
AddGadgetItem(#ListIcon_DirectoryGrid,-1, content )
I=CountGadgetItems(#ListIcon_DirectoryGrid) -1
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_FrontColor,RGB(250,250,250),1)
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_BackColor,RGB(100,100,250),1)
Content.s=".."+ Chr(10)+ "--------------------"
AddGadgetItem(#ListIcon_DirectoryGrid,-1, content )
Filename.s=".. complete size of '" + GetGadgetText(#String_DirectoryName)+"'"
Content.s=Filename+Chr(10)+FormatNumber(Wsize+size1,20)
AddGadgetItem(#ListIcon_DirectoryGrid,-1, content )
I=CountGadgetItems(#ListIcon_DirectoryGrid) -1
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_BackColor,RGB(250,100,100),1)
SetGadgetItemColor(#ListIcon_DirectoryGrid,I,#PB_Gadget_FrontColor,RGB(250,250,100),1)
EndProcedure
Procedure ScanDirectory()
ClearList( MyDirectory())
StartDirectory.s=GetGadgetText(#String_DirectoryName)
If Right(StartDirectory,1)<>"\"
StartDirectory + "\"
SetGadgetText(#String_DirectoryName,StartDirectory)
EndIf
wSize.q=0
Size1.q=0
Size.q=0
SetWindowTitle(#Window_0,"wait... scanning directory " + StartDirectory)
If ExamineDirectory(0,StartDirectory,"*.*")
While NextDirectoryEntry(k)
FileType=DirectoryEntryType(k)
FileName$ = DirectoryEntryName(k)
If FileType = 2
If FileName$<>"." And FileName$<>".."
size=GetDirectorySize(1,StartDirectory+FileName$+"\")
If size<>0
wSize=Wsize+size
Content.s=FileName$ + Chr(10) + FormatNumber(size,20)
AddElement(MyDirectory())
MyDirectory()\Name=FileName$
MyDirectory()\Length=size
EndIf
EndIf
ElseIf FileType = 1
size1.q=size1.q+FileSize(StartDirectory+FileName$)
EndIf
Wend
FinishDirectory(k)
SetWindowTitle(#Window_0,"Ready scanning directory " + StartDirectory)
EndIf
EndProcedure
hwnd=OpenWindow(#Window_0, 1, 1, 800, 600, "DirectorySize in Bytes per Folder", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If hwnd
StringGadget(#String_DirectoryName, 0, 0, 510, 20, "c:\")
ButtonGadget(#Button_DirectoryDown, 515, 0, 20, 20, "..")
ButtonGadget(#Button_DirectoryPick, 540, 0, 50, 20, "pick")
FontID1 = LoadFont(1, "Courier New", 10)
ButtonGadget(#Button_DirectoryScan, 595, 0, 50, 20, "Scan")
CheckBoxGadget(#CheckBoxGadget_SortFlag, 650, 0, 100, 20, "Sort-ABC")
ListIconGadget(#ListIcon_DirectoryGrid, 0, 25, 800, 575, "Name", 610)
AddGadgetColumn(#ListIcon_DirectoryGrid, 1, "Size", 180)
SetGadgetFont(#ListIcon_DirectoryGrid, FontID1)
SetGadgetText(#String_DirectoryName,"c:\Winnt\system32") ;init-Directory
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
If Eventtype=#PB_EventType_LeftDoubleClick
If gadgetID=#ListIcon_DirectoryGrid
pos=GetGadgetState(#ListIcon_DirectoryGrid)
dummy.s=GetGadgetItemText(#ListIcon_DirectoryGrid,pos,0)
If Left(dummy,2)<>".."
SetGadgetText(#String_DirectoryName,GetGadgetText(#String_DirectoryName)+dummy)
ScanDirectory()
ShowDirectorySorted()
Else
dummy=GetGadgetText(#String_DirectoryName)
If Right(dummy,1)="\"
dummy=Left(dummy,Len(dummy)-1)
EndIf
l =Len(dummy)
For i=l To 1 Step -1
If Mid(dummy,i,1)="\"
dummy=Left(dummy,I-1)
Break
EndIf
Next i
dummy=dummy + "\"
SetGadgetText(#String_DirectoryName,dummy)
ScanDirectory()
ShowDirectorySorted()
EndIf
EndIf
EndIf
If EventType=#PB_EventType_LeftClick
Select GadgetID
Case #Button_DirectoryPick
SetGadgetText(#String_DirectoryName,PathRequester("get your directory to scan",GetGadgetText(#String_DirectoryName)))
ScanDirectory()
ShowDirectorySorted()
Case #Button_DirectoryDown
dummy.s=GetGadgetText(#String_DirectoryName)
If Right(dummy,1)="\"
dummy=Left(dummy,Len(dummy)-1)
EndIf
l=Len(dummy)
For i=l To 1 Step -1
If Mid(dummy,i,1)="\"
dummy=Left(dummy,I-1)
Break
EndIf
Next i
dummy=dummy + "\"
SetGadgetText(#String_DirectoryName,dummy)
ScanDirectory()
ShowDirectorySorted()
Case #Button_DirectoryScan
scandirectory()
ShowDirectorySorted()
Case #CheckBoxGadget_SortFlag
state=GetGadgetState(#CheckBoxGadget_SortFlag)
If state=1
SetGadgetText(#CheckBoxGadget_SortFlag,"Sort-NR")
Else
SetGadgetText(#CheckBoxGadget_SortFlag,"Sort-ABC")
EndIf
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
EndIf
End