25 ClassImp(TSystemDirectory);
30 TSystemDirectory::TSystemDirectory()
39 TSystemDirectory::TSystemDirectory(
const char *dirname,
const char *path) :
40 TSystemFile(dirname, path)
49 TSystemDirectory::TSystemDirectory(
const TSystemDirectory& sd) :
51 fDirsInBrowser(sd.fDirsInBrowser),
52 fFilesInBrowser(sd.fFilesInBrowser)
59 TSystemDirectory& TSystemDirectory::operator=(
const TSystemDirectory& sd)
62 TSystemFile::operator=(sd);
63 fDirsInBrowser=sd.fDirsInBrowser;
64 fFilesInBrowser=sd.fFilesInBrowser;
72 TSystemDirectory::~TSystemDirectory()
74 delete fDirsInBrowser;
75 delete fFilesInBrowser;
84 TList *TSystemDirectory::GetListOfFiles()
const
86 void *dir = gSystem->OpenDirectory(GetTitle());
90 TList *contents =
new TList;
92 while ((file = gSystem->GetDirEntry(dir))) {
93 if (IsItDirectory(file)) {
95 if (file[0] ==
'.' && file[1] ==
'\0')
96 sdirpath = GetTitle();
97 else if (file[0] ==
'.' && file[1] ==
'.' && file[2] ==
'.')
98 sdirpath = gSystem->DirName(GetTitle());
100 sdirpath = GetTitle();
101 if (!sdirpath.EndsWith(
"/"))
105 contents->Add(
new TSystemDirectory(file, sdirpath.Data()));
107 contents->Add(
new TSystemFile(file, GetTitle()));
109 gSystem->FreeDirectory(dir);
116 void TSystemDirectory::SetDirectory(
const char *name)
125 Bool_t TSystemDirectory::IsItDirectory(
const char *name)
const
128 Long_t id, flags, modtime;
129 const char *dirfile = GetTitle();
130 TString savDir = gSystem->WorkingDirectory();
132 gSystem->ChangeDirectory(dirfile);
133 flags =
id = size = modtime = 0;
134 gSystem->GetPathInfo(name, &
id, &size, &flags, &modtime);
135 Int_t isdir = (Int_t)flags & 2;
137 gSystem->ChangeDirectory(savDir);
138 return isdir ? kTRUE : kFALSE;
144 void TSystemDirectory::Browse(TBrowser *b)
149 if (!fDirsInBrowser) fDirsInBrowser =
new TOrdCollection;
150 if (!fFilesInBrowser) fFilesInBrowser =
new TOrdCollection(10);
152 const char *name = GetTitle();
154 TSystemDirectory *sdir;
157 gSystem->ChangeDirectory(name);
159 if (GetName()[0] ==
'.' && GetName()[1] ==
'.')
160 SetName(gSystem->BaseName(name));
162 void *dir = gSystem->OpenDirectory(name);
167 while ((file = gSystem->GetDirEntry(dir))) {
168 if (b->TestBit(TBrowser::kNoHidden) && file[0] ==
'.' && file[1] !=
'.' )
170 if (IsItDirectory(file)) {
172 if (!strcmp(file,
"."))
174 else if (!strcmp(file,
".."))
175 sdirpath = gSystem->DirName(name);
178 if (!sdirpath.EndsWith(
"/"))
182 if (!(sdir = FindDirObj(sdirpath.Data()))) {
183 sdir =
new TSystemDirectory(file, sdirpath.Data());
184 fDirsInBrowser->Add(sdir);
188 if (!(sfile = FindFileObj(file, gSystem->WorkingDirectory()))) {
189 sfile =
new TSystemFile(file, gSystem->WorkingDirectory());
190 fFilesInBrowser->Add(sfile);
195 gSystem->FreeDirectory(dir);
202 TSystemDirectory *TSystemDirectory::FindDirObj(
const char *name)
204 int size = fDirsInBrowser->GetSize();
205 for (
int i = 0; i < size; i++) {
206 TSystemDirectory *obj = (TSystemDirectory *) fDirsInBrowser->At(i);
207 if (!strcmp(name, obj->GetTitle()))
217 TSystemFile *TSystemDirectory::FindFileObj(
const char *name,
const char *dir)
219 int size = fFilesInBrowser->GetSize();
220 for (
int i = 0; i < size; i++) {
221 TSystemFile *obj = (TSystemFile *) fFilesInBrowser->At(i);
222 if (!strcmp(name, obj->GetName()) && !strcmp(dir, obj->GetTitle()))