37 ClassImp(TRemoteObject);
42 TRemoteObject::TRemoteObject()
51 TRemoteObject::TRemoteObject(
const char *name,
const char *title,
52 const char *classname) : TNamed(name, title)
55 fClassName = classname;
56 if ((fClassName ==
"TSystemDirectory") ||
57 (fClassName ==
"TFile"))
59 if (!strcmp(classname,
"TSystemDirectory") ||
60 !strcmp(classname,
"TSystemFile")) {
61 gSystem->GetPathInfo(name, fFileStat);
63 Long_t raddr = (Long_t)
this;
64 fRemoteAddress = raddr;
70 TRemoteObject::~TRemoteObject()
77 void TRemoteObject::Browse(TBrowser *b)
83 if (fClassName ==
"TSystemFile") {
85 b->ExecuteDefaultAction(
this);
88 if (fClassName ==
"TKey") {
89 if (b->GetRefreshFlag())
90 b->SetRefreshFlag(kFALSE);
91 gApplication->SetBit(TApplication::kProcessRemotely);
92 TObject *obj = (TObject *)gROOT->ProcessLine(Form(
"((TApplicationServer *)gApplication)->BrowseKey(\"%s\");", GetName()));
94 if (obj->IsA()->GetMethodWithPrototype(
"SetDirectory",
"TDirectory*"))
95 gROOT->ProcessLine(Form(
"((%s *)0x%lx)->SetDirectory(0);", obj->ClassName(), (ULong_t)obj));
97 b->SetRefreshFlag(kTRUE);
100 if (fClassName ==
"TSystemDirectory") {
101 if (b->GetRefreshFlag())
102 b->SetRefreshFlag(kFALSE);
103 gApplication->SetBit(TApplication::kProcessRemotely);
104 ret = (TList *)gROOT->ProcessLine(Form(
"((TApplicationServer *)gApplication)->BrowseDirectory(\"%s\");", GetTitle()));
107 while ((robj = (TRemoteObject *)next())) {
108 file = robj->GetName();
109 if (b->TestBit(TBrowser::kNoHidden) && file[0] ==
'.' && file[1] !=
'.' )
111 b->Add(robj, robj->GetName());
116 if (fClassName ==
"TFile") {
117 if (b->GetRefreshFlag())
118 b->SetRefreshFlag(kFALSE);
119 gApplication->SetBit(TApplication::kProcessRemotely);
120 ret = (TList *)gROOT->ProcessLine(Form(
"((TApplicationServer *)gApplication)->BrowseFile(\"%s\");", GetName()));
123 while ((robj = (TRemoteObject *)next())) {
125 b->Add(robj, robj->GetName());
135 TList *TRemoteObject::Browse()
140 TList *objects =
new TList;
142 static Int_t level = 0;
143 const char *name = GetTitle();
146 if (GetName()[0] ==
'.' && GetName()[1] ==
'.')
147 SetName(gSystem->BaseName(name));
149 TSystemDirectory dir(name, name);
150 TList *files = dir.GetListOfFiles();
157 while ((file=(TSystemFile*)next())) {
158 fname = file->GetName();
159 if (file->IsDirectory()) {
162 if (!strcmp(fname.Data(),
"."))
164 else if (!strcmp(fname.Data(),
".."))
165 sdirpath = gSystem->DirName(name);
168 if (!sdirpath.EndsWith(
"/"))
170 sdirpath += fname.Data();
172 sdir =
new TRemoteObject(fname.Data(), sdirpath.Data(),
"TSystemDirectory");
179 while ((file=(TSystemFile*)nextf())) {
180 fname = file->GetName();
181 if (!file->IsDirectory()) {
182 sdir =
new TRemoteObject(fname.Data(), gSystem->WorkingDirectory(),
"TSystemFile");
194 Bool_t TRemoteObject::GetFileStat(FileStat_t *buf)
196 buf->fDev = fFileStat.fDev;
197 buf->fIno = fFileStat.fIno;
198 buf->fMode = fFileStat.fMode;
199 buf->fUid = fFileStat.fUid;
200 buf->fGid = fFileStat.fGid;
201 buf->fSize = fFileStat.fSize;
202 buf->fMtime = fFileStat.fMtime;
203 buf->fIsLink = fFileStat.fIsLink;
210 void TRemoteObject::Streamer(TBuffer &b)
215 b >> fFileStat.fMode;
218 b >> fFileStat.fSize;
219 b >> fFileStat.fMtime;
220 b >> fFileStat.fIsLink;
230 b << fFileStat.fMode;
233 b << fFileStat.fSize;
234 b << fFileStat.fMtime;
235 b << fFileStat.fIsLink;