31 ClassImp(TArchiveFile);
 
   44 TArchiveFile::TArchiveFile(
const char *archive, 
const char *member, TFile *file)
 
   47       Error(
"TArchiveFile", 
"must specify a valid TFile");
 
   50    fArchiveName = archive;
 
   53    if (fMemberName.IsDigit())
 
   54       fMemberIndex = atoi(fMemberName);
 
   55    fMembers     = 
new TObjArray;
 
   63 TArchiveFile::~TArchiveFile()
 
   71 Long64_t TArchiveFile::GetMemberFilePosition()
 const 
   73    return fCurMember ? fCurMember->GetFilePosition() : 0;
 
   79 Int_t TArchiveFile::GetNumberOfMembers()
 const 
   81    return fMembers->GetEntriesFast();
 
   88 Int_t TArchiveFile::SetMember(
const char *member)
 
   93    return SetCurrentMember();
 
  100 Int_t TArchiveFile::SetMember(Int_t idx)
 
  105    return SetCurrentMember();
 
  121 TArchiveFile *TArchiveFile::Open(
const char *url, TFile *file)
 
  124       ::Error(
"TArchiveFile::Open", 
"must specify a valid TFile to access %s",
 
  129    TString archive, member, type;
 
  131    if (!ParseUrl(url, archive, member, type))
 
  136    if ((h = gROOT->GetPluginManager()->FindHandler(
"TArchiveFile", type))) {
 
  137       if (h->LoadPlugin() == -1)
 
  139       f = (TArchiveFile*) h->ExecPlugin(3, archive.Data(), member.Data(), file);
 
  149 Bool_t TArchiveFile::ParseUrl(
const char *url, TString &archive, TString &member,
 
  160    TString urloptions = u.GetOptions();
 
  161    TObjArray *objOptions = urloptions.Tokenize(
"&");
 
  162    for (Int_t n = 0; n < objOptions->GetEntries(); n++) {
 
  164       TString loption = ((TObjString*)objOptions->At(n))->GetName();
 
  165       TObjArray *objTags = loption.Tokenize(
"=");
 
  166       if (objTags->GetEntries() == 2) {
 
  168          TString key   = ((TObjString*)objTags->At(0))->GetName();
 
  169          TString value = ((TObjString*)objTags->At(1))->GetName();
 
  171          if (!key.CompareTo(
"zip", TString::kIgnoreCase)) {
 
  172             archive = u.GetFile();
 
  186    if (!strlen(u.GetAnchor())) {
 
  187       archive = u.GetFile();
 
  192    archive = u.GetFile();
 
  193    member  = u.GetAnchor();
 
  196    if (archive == 
"" || member == 
"") {
 
  206 ClassImp(TArchiveMember);
 
  211 TArchiveMember::TArchiveMember()
 
  225 TArchiveMember::TArchiveMember(
const char *name)
 
  239 TArchiveMember::TArchiveMember(
const TArchiveMember &member)
 
  242    fName         = member.fName;
 
  243    fComment      = member.fComment;
 
  244    fModTime      = member.fModTime;
 
  245    fPosition     = member.fPosition;
 
  246    fFilePosition = member.fFilePosition;
 
  247    fCsize        = member.fCsize;
 
  248    fDsize        = member.fDsize;
 
  249    fDirectory    = member.fDirectory;
 
  255 TArchiveMember &TArchiveMember::operator=(
const TArchiveMember &rhs)
 
  258       TObject::operator=(rhs);
 
  260       fComment      = rhs.fComment;
 
  261       fModTime      = rhs.fModTime;
 
  262       fPosition     = rhs.fPosition;
 
  263       fFilePosition = rhs.fFilePosition;
 
  266       fDirectory    = rhs.fDirectory;