// @(#)root/guitml:$Id$
// Author: Bertrand Bellenot   26/09/2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TROOT.h"
#include "TApplication.h"
#include "TSystem.h"
#include "TGMenu.h"
#include "TGComboBox.h"
#include "TGFrame.h"
#include "TGButton.h"
#include "TGTextBuffer.h"
#include "TGTextEntry.h"
#include "TGStatusBar.h"
#include "TGFileDialog.h"
#include "TFile.h"
#include "TBrowser.h"
#include "TGHtml.h"
#include "TString.h"
#include "TUrl.h"
#include "TSocket.h"
#include "Riostream.h"
#include "TGHtmlBrowser.h"
#include "TGText.h"

#ifdef WIN32
#include "TWin32SplashThread.h"
#endif

#include <stdlib.h>

//_____________________________________________________________________________
//
// TGHtmlBrowser
//
// A very simple HTML browser.
//_____________________________________________________________________________

ClassImp(TGHtmlBrowser)

enum EMyMessageTypes {
   kM_FILE_OPEN,
   kM_FILE_SAVEAS,
   kM_FILE_BROWSE,
   kM_FILE_EXIT,
   kM_FAVORITES_ADD,
   kM_TOOLS_CLEARHIST,
   kM_HELP_ABOUT
};

static const char *gHtmlFTypes[] = {
   "HTML files",    "*.htm*",
   "All files",     "*",
    0,               0
};

const char *HtmlError[] = {
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd\"> ",
"<HTML><HEAD><TITLE>RHTML cannot display the webpage</TITLE> ",
"<META http-equiv=Content-Type content=\"text/html; charset=UTF-8\"></HEAD> ",
"<BODY> ",
"<TABLE cellSpacing=0 cellPadding=0 width=730 border=0> ",
"  <TBODY> ",
"  <TR> ",
"    <TD id=infoIconAlign vAlign=top align=left width=60 rowSpan=2> ",
"    <IMG src=\"info.gif\"> ",
"    </TD> ",
"    <TD id=mainTitleAlign vAlign=center align=left width=*> ",
"      <H1 id=mainTitle>RHTML cannot display the webpage</H1></TD></TR> ",
"  <TR> ",
"    <TD class=errorCodeAndDivider id=errorCodeAlign align=right>&nbsp;  ",
"      <DIV class=divider></DIV></TD></TR> ",
"  <TR> ",
"      <UL> ",
"      </UL> ",
"    <TD>&nbsp; </TD> ",
"    <TD id=MostLikelyAlign vAlign=top align=left> ",
"      <H3 id=likelyCauses>Most likely causes:</H3> ",
"      <UL> ",
"        <LI id=causeNotConnected>You are not connected to the Internet.  ",
"        <LI id=causeSiteProblem>The website is encountering problems.  ",
"        <LI id=causeErrorInAddress>There might be a typing error in the address.  ",
"        <LI id=causeOtherError>  ",
"        </LI></UL></TD></TR> ",
"  <TR> ",
"    <TD id=infoBlockAlign vAlign=top align=right>&nbsp; </TD> ",
"    <TD id=moreInformationAlign vAlign=center align=left> ",
"      <H4> ",
"      <TABLE> ",
"        <TBODY> ",
"        <TR> ",
"          <TD vAlign=top><SPAN id=moreInfoContainer></SPAN><ID  ",
"            id=moreInformation>More information</ID> ",
"      </TD></TR></TBODY></TABLE></H4> ",
"      <DIV class=infoBlock id=infoBlockID> ",
"      <P><ID id=errorExpl1>This problem can be caused by a variety of issues,  ",
"      including:</ID>  ",
"      <UL> ",
"        <LI id=errorExpl2>Internet connectivity has been lost.  ",
"        <LI id=errorExpl3>The website is temporarily unavailable.  ",
"        <LI id=errorExpl4>The Domain Name Server (DNS) is not reachable.  ",
"        <LI id=errorExpl5>The Domain Name Server (DNS) does not have a listing  ",
"        for the website's domain.  ",
"      <P></P> ",
"      <P></P></DIV></TD></TR></TBODY></TABLE></BODY></HTML> ",
0
};

//______________________________________________________________________________
TGHtmlBrowser::TGHtmlBrowser(const char *filename, const TGWindow *p, UInt_t w, UInt_t h)
             : TGMainFrame(p, w, h)
{
   // TGHtmlBrowser constructor.

   SetCleanup(kDeepCleanup);
   fNbFavorites = 1000;
   fMenuBar = new TGMenuBar(this, 35, 50, kHorizontalFrame);

   fMenuFile = new TGPopupMenu(gClient->GetDefaultRoot());
   fMenuFile->AddEntry(" &Open...\tCtrl+O", kM_FILE_OPEN, 0,
                       gClient->GetPicture("ed_open.png"));
   fMenuFile->AddEntry(" Save &As...\tCtrl+A", kM_FILE_SAVEAS, 0,
                       gClient->GetPicture("ed_save.png"));
   fMenuFile->AddEntry(" &Browse...\tCtrl+B", kM_FILE_BROWSE);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry(" E&xit\tCtrl+Q", kM_FILE_EXIT, 0,
                       gClient->GetPicture("bld_exit.png"));
   fMenuFile->Associate(this);

   fMenuFavorites = new TGPopupMenu(gClient->GetDefaultRoot());
   fMenuFavorites->AddEntry("&Add to Favorites", kM_FAVORITES_ADD, 0,
                            gClient->GetPicture("bld_plus.png"));
   fMenuFavorites->AddSeparator();
   fMenuFavorites->AddEntry("http://root.cern.ch", fNbFavorites++, 0,
                            gClient->GetPicture("htmlfile.gif"));
   fMenuFavorites->Associate(this);

   fMenuTools = new TGPopupMenu(gClient->GetDefaultRoot());
   fMenuTools->AddEntry("&Clear History", kM_TOOLS_CLEARHIST, 0,
                        gClient->GetPicture("ed_delete.png"));
   fMenuTools->Associate(this);

   fMenuHelp = new TGPopupMenu(gClient->GetDefaultRoot());
   fMenuHelp->AddEntry(" &About...", kM_HELP_ABOUT, 0, gClient->GetPicture("about.xpm"));
   fMenuHelp->Associate(this);

   fMenuBar->AddPopup("&File", fMenuFile, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
   fMenuBar->AddPopup("&Favorites", fMenuFavorites, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
   fMenuBar->AddPopup("&Tools", fMenuTools, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
   fMenuBar->AddPopup("&Help", fMenuHelp, new TGLayoutHints(kLHintsTop | kLHintsRight));

   AddFrame(fMenuBar, new TGLayoutHints(kLHintsTop | kLHintsExpandX));

   // vertical frame
   fVerticalFrame = new TGVerticalFrame(this,727,600,kVerticalFrame);

   fHorizontalFrame = new TGHorizontalFrame(fVerticalFrame,727,600);

   fBack = new TGPictureButton(fHorizontalFrame,gClient->GetPicture("GoBack.gif"));
   fBack->SetStyle(gClient->GetStyle());
   fBack->SetToolTipText("Go Back");
   fHorizontalFrame->AddFrame(fBack, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY,2,2,2,2));
   fBack->Connect("Clicked()", "TGHtmlBrowser", this, "Back()");

   fForward = new TGPictureButton(fHorizontalFrame,gClient->GetPicture("GoForward.gif"));
   fForward->SetStyle(gClient->GetStyle());
   fForward->SetToolTipText("Go Forward");
   fHorizontalFrame->AddFrame(fForward, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY,2,2,2,2));
   fForward->Connect("Clicked()", "TGHtmlBrowser", this, "Forward()");

   fReload = new TGPictureButton(fHorizontalFrame,gClient->GetPicture("ReloadPage.gif"));
   fReload->SetStyle(gClient->GetStyle());
   fReload->SetToolTipText("Reload Page");
   fHorizontalFrame->AddFrame(fReload, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY,2,2,2,2));
   fReload->Connect("Clicked()", "TGHtmlBrowser", this, "Reload()");

   fStop = new TGPictureButton(fHorizontalFrame,gClient->GetPicture("StopLoading.gif"));
   fStop->SetStyle(gClient->GetStyle());
   fStop->SetToolTipText("Stop Loading");
   fHorizontalFrame->AddFrame(fStop, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY,2,2,2,2));
   fStop->Connect("Clicked()", "TGHtmlBrowser", this, "Stop()");

   fHome = new TGPictureButton(fHorizontalFrame,gClient->GetPicture("GoHome.gif"));
   fHome->SetStyle(gClient->GetStyle());
   fHome->SetToolTipText("Go to ROOT HomePage\n  (http://root.cern.ch)");
   fHorizontalFrame->AddFrame(fHome, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY,2,2,2,2));
   fHome->Connect("Clicked()", "TGHtmlBrowser", this, "Selected(=\"http://root.cern.ch\")");

   // combo box
   fURLBuf   = new TGTextBuffer(256);
   fComboBox = new TGComboBox(fHorizontalFrame, "");
   fURL      = fComboBox->GetTextEntry();
   fURLBuf   = fURL->GetBuffer();
   fComboBox->Resize(200, fURL->GetDefaultHeight());
   fURL->Connect("ReturnPressed()", "TGHtmlBrowser", this, "URLChanged()");

   if (filename) {
      fComboBox->AddEntry(filename, 1);
      fURL->SetText(filename);
   }
   fComboBox->Select(0);
   fComboBox->Connect("Selected(char *)", "TGHtmlBrowser", this, "Selected(char *)");

   fHorizontalFrame->AddFrame(fComboBox, new TGLayoutHints(kLHintsLeft | kLHintsCenterY | kLHintsExpandX,2,2,2,2));

   fVerticalFrame->AddFrame(fHorizontalFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,2));

   // embedded canvas
   fHtml = new TGHtml(fVerticalFrame, 10, 10, -1);
   fVerticalFrame->AddFrame(fHtml, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX | kLHintsExpandY,2,2,2,2));

   AddFrame(fVerticalFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX | kLHintsExpandY,2,2,2,2));

   // status bar
   fStatusBar = new TGStatusBar(this,100,20);
   Int_t partsusBar[] = {75,25};
   fStatusBar->SetParts(partsusBar,2);
   AddFrame(fStatusBar, new TGLayoutHints(kLHintsBottom | kLHintsExpandX));

   fHtml->Connect("MouseOver(const char *)", "TGHtmlBrowser", this, "MouseOver(const char *)");
   fHtml->Connect("MouseDown(const char *)", "TGHtmlBrowser", this, "MouseDown(const char *)");

   MapSubwindows();
   Resize(GetDefaultSize());
   MapWindow();
   Resize(w, h);

   if (filename)
      Selected(filename);
}

//______________________________________________________________________________
Ssiz_t ReadSize(const char *url)
{
   // Read (open) remote files.

   char buf[4096];
   TUrl fUrl(url);

   // Give full URL so Apache's virtual hosts solution works.
   TString msg = "HEAD ";
   msg += fUrl.GetProtocol();
   msg += "://";
   msg += fUrl.GetHost();
   msg += ":";
   msg += fUrl.GetPort();
   msg += "/";
   msg += fUrl.GetFile();
   msg += " HTTP/1.0";
   msg += "\r\n";
   msg += "User-Agent: ROOT-TWebFile/1.1";
   msg += "\r\n\r\n";

   TString uri(url);
   if (!uri.BeginsWith("http://"))
      return 0;
   TSocket s(fUrl.GetHost(), fUrl.GetPort());
   if (!s.IsValid())
      return 0;
   if (s.SendRaw(msg.Data(), msg.Length()) == -1)
      return 0;
   if (s.RecvRaw(buf, 4096) == -1) {
      return 0;
   }
   TString reply(buf);
   Ssiz_t idx = reply.Index("Content-length:", 0, TString::kIgnoreCase);
   if (idx > 0) {
      idx += 15;
      TString slen = reply(idx, reply.Length() - idx);
      return (Ssiz_t)atol(slen.Data());
   }
   return 0;
}

//______________________________________________________________________________
static char *ReadRemote(const char *url)
{
   // Read (open) remote files.

   static char *buf = 0;
   TUrl fUrl(url);

   Ssiz_t size = ReadSize(url);
   if (size <= 0) size = 1024*1024;

   TString msg = "GET ";
   msg += fUrl.GetProtocol();
   msg += "://";
   msg += fUrl.GetHost();
   msg += ":";
   msg += fUrl.GetPort();
   msg += "/";
   msg += fUrl.GetFile();
   msg += "\r\n";

   TString uri(url);
   if (!uri.BeginsWith("http://"))
      return 0;
   TSocket s(fUrl.GetHost(), fUrl.GetPort());
   if (!s.IsValid())
      return 0;
   if (s.SendRaw(msg.Data(), msg.Length()) == -1)
      return 0;
   buf = (char *)calloc(size+1, sizeof(char));
   if (s.RecvRaw(buf, size) == -1) {
      free(buf);
      return 0;
   }
   return buf;
}

//______________________________________________________________________________
void TGHtmlBrowser::Selected(const char *uri)
{
   // Open (browse) selected URL.

   char *buf = 0;
   FILE *f;

   if (CheckAnchors(uri))
      return;

   TString surl(gSystem->UnixPathName(uri));
   if (!surl.BeginsWith("http://") && !surl.BeginsWith("ftp://") &&
       !surl.BeginsWith("file://")) {
      if (surl.BeginsWith("file:"))
         surl.ReplaceAll("file:", "file://");
      else
         surl.Prepend("file://");
   }
   if (surl.EndsWith(".root")) {
      // in case of root file, just open it and refresh browsers
      gVirtualX->SetCursor(fHtml->GetId(), gVirtualX->CreateCursor(kWatch));
      gROOT->ProcessLine(Form("TFile::Open(\"%s\");", surl.Data()));
      Clicked((char *)surl.Data());
      gROOT->RefreshBrowsers();
      gVirtualX->SetCursor(fHtml->GetId(), gVirtualX->CreateCursor(kPointer));
      return;
   }
   gVirtualX->SetCursor(fHtml->GetId(), gVirtualX->CreateCursor(kWatch));
   TUrl url(surl.Data());
   if (surl.EndsWith(".pdf", TString::kIgnoreCase)) {
      // special case: open pdf files with external viewer
      // works only on Windows for the time being...
      if (!gVirtualX->InheritsFrom("TGX11")) {
         TString cmd = TString::Format("explorer %s", surl.Data());
         gSystem->Exec(cmd.Data());
      }
      gVirtualX->SetCursor(fHtml->GetId(), gVirtualX->CreateCursor(kPointer));
      return;
   }
   if (surl.EndsWith(".gif") || surl.EndsWith(".jpg") || surl.EndsWith(".png")) {
      // special case: single picture
      fHtml->Clear();
      char imgHtml[1024];
      snprintf(imgHtml, 1000, "<IMG src=\"%s\"> ", surl.Data());
      fHtml->ParseText(imgHtml);
      fHtml->SetBaseUri(url.GetUrl());
      fURL->SetText(surl.Data());
      if (!fComboBox->FindEntry(surl.Data()))
         fComboBox->AddEntry(surl.Data(), fComboBox->GetNumberOfEntries()+1);
      fHtml->Layout();
      gVirtualX->SetCursor(fHtml->GetId(), gVirtualX->CreateCursor(kPointer));
      return;
   }
   if ((!strcmp(url.GetProtocol(), "http"))) {
      // standard web page
      buf = ReadRemote(url.GetUrl());
      if (buf) {
         fHtml->Clear();
         fHtml->Layout();
         fHtml->SetBaseUri(url.GetUrl());
         fHtml->ParseText(buf);
         free(buf);
         fURL->SetText(surl.Data());
         if (!fComboBox->FindEntry(surl.Data()))
            fComboBox->AddEntry(surl.Data(), fComboBox->GetNumberOfEntries()+1);
      }
      else {
         fHtml->Clear();
         fHtml->Layout();
         fHtml->SetBaseUri("");
         for (int i=0; HtmlError[i]; i++) {
            fHtml->ParseText((char *)HtmlError[i]);
         }
      }
   }
   else {
      // local file
      f = fopen(url.GetFile(), "r");
      if (f) {
         TString fpath = url.GetUrl();
         fpath.ReplaceAll(gSystem->BaseName(fpath.Data()), "");
         fpath.ReplaceAll("file://", "");
         fHtml->Clear();
         fHtml->Layout();
         fHtml->SetBaseUri(fpath.Data());
         buf = (char *)calloc(4096, sizeof(char));
         if (buf) {
            while (fgets(buf, 4096, f)) {
               fHtml->ParseText(buf);
            }
            free(buf);
         }
         fclose(f);
         fURL->SetText(surl.Data());
         if (!fComboBox->FindEntry(surl.Data()))
            fComboBox->AddEntry(surl.Data(), fComboBox->GetNumberOfEntries()+1);
      }
      else {
         fHtml->Clear();
         fHtml->Layout();
         fHtml->SetBaseUri("");
         for (int i=0; HtmlError[i]; i++) {
            fHtml->ParseText((char *)HtmlError[i]);
         }
      }
   }
   // restore cursor
   gVirtualX->SetCursor(fHtml->GetId(), gVirtualX->CreateCursor(kPointer));
   fHtml->Layout();
   Ssiz_t idx = surl.Last('#');
   if (idx > 0) {
      idx +=1; // skip #
      TString anchor = surl(idx, surl.Length() - idx);
      fHtml->GotoAnchor(anchor.Data());
   }
   SetWindowName(Form("%s - RHTML",surl.Data()));
}

//______________________________________________________________________________
void TGHtmlBrowser::URLChanged()
{
   // URL combobox has changed.

   const char *string = fURL->GetText();
   if (string) {
      Selected(gSystem->UnixPathName(string));
   }
}

//______________________________________________________________________________
void TGHtmlBrowser::Back()
{
   // Handle "Back" navigation button.

   Int_t index = 0;
   const char *string = fURL->GetText();
   TGLBEntry * lbe1 = fComboBox->FindEntry(string);
   if (lbe1)
      index = lbe1->EntryId();
   if (index > 0) {
      fComboBox->Select(index - 1, kTRUE);
      TGTextLBEntry *entry = (TGTextLBEntry *)fComboBox->GetSelectedEntry();
      if (entry) {
         string = entry->GetTitle();
         if (string)
            Selected(string);
      }
   }
}

//______________________________________________________________________________
Bool_t TGHtmlBrowser::CheckAnchors(const char *uri)
{
   // Check if we just change position in the page (using anchor)
   // and return kTRUE if any anchor has been found and followed.

   TString surl(gSystem->UnixPathName(uri));

   if (!fHtml->GetBaseUri())
      return kFALSE;
   TString actual = fHtml->GetBaseUri();
   Ssiz_t idx = surl.Last('#');
   Ssiz_t idy = actual.Last('#');
   TString short1(surl.Data());
   TString short2(actual.Data());
   if (idx > 0)
      short1 = surl(0, idx);
   if (idy > 0)
      short2 = actual(0, idy);

   if (short1 == short2) {
      if (idx > 0) {
         idx +=1; // skip #
         TString anchor = surl(idx, surl.Length() - idx);
         fHtml->GotoAnchor(anchor.Data());
      }
      else {
         fHtml->ScrollToPosition(TGLongPosition(0, 0));
      }
      fHtml->SetBaseUri(surl.Data());
      if (!fComboBox->FindEntry(surl.Data()))
         fComboBox->AddEntry(surl.Data(), fComboBox->GetNumberOfEntries()+1);
      fURL->SetText(surl.Data());
      fComboBox->Select(fComboBox->GetNumberOfEntries(), kFALSE);
      SetWindowName(Form("%s - RHTML",surl.Data()));
      return kTRUE;
   }
   return kFALSE;
}

//______________________________________________________________________________
void TGHtmlBrowser::Forward()
{
   // Handle "Forward" navigation button.

   Int_t index = 0;
   const char *string = fURL->GetText();
   TGLBEntry * lbe1 = fComboBox->FindEntry(string);
   if (lbe1)
      index = lbe1->EntryId();
   if (index < fComboBox->GetNumberOfEntries()) {
      fComboBox->Select(index + 1, kTRUE);
      TGTextLBEntry *entry = (TGTextLBEntry *)fComboBox->GetSelectedEntry();
      if (entry) {
         string = entry->GetTitle();
         if (string)
            Selected(string);
      }
   }
}

//______________________________________________________________________________
void TGHtmlBrowser::Reload()
{
   // Handle "Reload" navigation button.

   const char *string = fURL->GetText();
   if (string)
      Selected(string);
}

//______________________________________________________________________________
void TGHtmlBrowser::Stop()
{
   // Handle "Reload" navigation button.

}

//______________________________________________________________________________
void TGHtmlBrowser::MouseOver(const char *url)
{
   // Handle "MouseOver" TGHtml signal.

   fStatusBar->SetText(url, 0);
}

//______________________________________________________________________________
void TGHtmlBrowser::MouseDown(const char *url)
{
   // Handle "MouseDown" TGHtml signal.

   Selected(url);
}

//______________________________________________________________________________
Bool_t TGHtmlBrowser::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
{
   // Process Events.

   switch (GET_MSG(msg)) {
   case kC_COMMAND:
      {
         switch (GET_SUBMSG(msg)) {

            case kCM_MENU:
            case kCM_BUTTON:

               switch(parm1) {

                  case kM_FILE_EXIT:
                     CloseWindow();
                     break;

                  case kM_FILE_OPEN:
                     {
                        static TString dir(".");
                        TGFileInfo fi;
                        fi.fFileTypes = gHtmlFTypes;
                        fi.fIniDir    = StrDup(dir);
                        new TGFileDialog(fClient->GetRoot(), this,
                                         kFDOpen, &fi);
                        dir = fi.fIniDir;
                        if (fi.fFilename) {
                           Selected(Form("file://%s",
                              gSystem->UnixPathName(fi.fFilename)));
                        }
                     }
                     break;

                  case kM_FILE_SAVEAS:
                     {
                        static TString sdir(".");
                        TGFileInfo fi;
                        fi.fFileTypes = gHtmlFTypes;
                        fi.fIniDir    = StrDup(sdir);
                        new TGFileDialog(fClient->GetRoot(), this,
                                         kFDSave, &fi);
                        sdir = fi.fIniDir;
                        if (fi.fFilename) {
                           TGText txt(fHtml->GetText());
                           txt.Save(gSystem->UnixPathName(fi.fFilename));
                        }
                     }
                     break;

                  case kM_FAVORITES_ADD:
                     fMenuFavorites->AddEntry(Form("%s",
                           fURL->GetText()), fNbFavorites++, 0,
                           gClient->GetPicture("htmlfile.gif"));
                     break;

                  case kM_TOOLS_CLEARHIST:
                     fComboBox->RemoveEntries(1,fComboBox->GetNumberOfEntries());
                     break;

                  case kM_FILE_BROWSE:
                     new TBrowser();
                     break;

                  case kM_HELP_ABOUT:
                     {
#ifdef R__UNIX
                        TString rootx;
# ifdef ROOTBINDIR
                        rootx = ROOTBINDIR;
# else
                        rootx = gSystem->Getenv("ROOTSYS");
                        if (!rootx.IsNull()) rootx += "/bin";
# endif
                        rootx += "/root -a &";
                        gSystem->Exec(rootx);
#else
#ifdef WIN32
                        new TWin32SplashThread(kTRUE);
#else
                        char str[32];
                        snprintf(str, 32, "About ROOT %s...", gROOT->GetVersion());
                        TRootHelpDialog *hd = new TRootHelpDialog(this, str,
                                                                  600, 400);
                        hd->SetText(gHelpAbout);
                        hd->Popup();
#endif
#endif
                     }
                     break;

                  default:
                     {
                        if (parm1 < 1000) break;
                        TGMenuEntry *entry = fMenuFavorites->GetEntry(parm1);
                        if (!entry) break;
                        const char *shortcut = entry->GetName();
                        if (shortcut)
                           Selected(shortcut);
                     }
                     break;
               }
               break;
         }
         break;
      }
   }
   return kTRUE;
}

 TGHtmlBrowser.cxx:1
 TGHtmlBrowser.cxx:2
 TGHtmlBrowser.cxx:3
 TGHtmlBrowser.cxx:4
 TGHtmlBrowser.cxx:5
 TGHtmlBrowser.cxx:6
 TGHtmlBrowser.cxx:7
 TGHtmlBrowser.cxx:8
 TGHtmlBrowser.cxx:9
 TGHtmlBrowser.cxx:10
 TGHtmlBrowser.cxx:11
 TGHtmlBrowser.cxx:12
 TGHtmlBrowser.cxx:13
 TGHtmlBrowser.cxx:14
 TGHtmlBrowser.cxx:15
 TGHtmlBrowser.cxx:16
 TGHtmlBrowser.cxx:17
 TGHtmlBrowser.cxx:18
 TGHtmlBrowser.cxx:19
 TGHtmlBrowser.cxx:20
 TGHtmlBrowser.cxx:21
 TGHtmlBrowser.cxx:22
 TGHtmlBrowser.cxx:23
 TGHtmlBrowser.cxx:24
 TGHtmlBrowser.cxx:25
 TGHtmlBrowser.cxx:26
 TGHtmlBrowser.cxx:27
 TGHtmlBrowser.cxx:28
 TGHtmlBrowser.cxx:29
 TGHtmlBrowser.cxx:30
 TGHtmlBrowser.cxx:31
 TGHtmlBrowser.cxx:32
 TGHtmlBrowser.cxx:33
 TGHtmlBrowser.cxx:34
 TGHtmlBrowser.cxx:35
 TGHtmlBrowser.cxx:36
 TGHtmlBrowser.cxx:37
 TGHtmlBrowser.cxx:38
 TGHtmlBrowser.cxx:39
 TGHtmlBrowser.cxx:40
 TGHtmlBrowser.cxx:41
 TGHtmlBrowser.cxx:42
 TGHtmlBrowser.cxx:43
 TGHtmlBrowser.cxx:44
 TGHtmlBrowser.cxx:45
 TGHtmlBrowser.cxx:46
 TGHtmlBrowser.cxx:47
 TGHtmlBrowser.cxx:48
 TGHtmlBrowser.cxx:49
 TGHtmlBrowser.cxx:50
 TGHtmlBrowser.cxx:51
 TGHtmlBrowser.cxx:52
 TGHtmlBrowser.cxx:53
 TGHtmlBrowser.cxx:54
 TGHtmlBrowser.cxx:55
 TGHtmlBrowser.cxx:56
 TGHtmlBrowser.cxx:57
 TGHtmlBrowser.cxx:58
 TGHtmlBrowser.cxx:59
 TGHtmlBrowser.cxx:60
 TGHtmlBrowser.cxx:61
 TGHtmlBrowser.cxx:62
 TGHtmlBrowser.cxx:63
 TGHtmlBrowser.cxx:64
 TGHtmlBrowser.cxx:65
 TGHtmlBrowser.cxx:66
 TGHtmlBrowser.cxx:67
 TGHtmlBrowser.cxx:68
 TGHtmlBrowser.cxx:69
 TGHtmlBrowser.cxx:70
 TGHtmlBrowser.cxx:71
 TGHtmlBrowser.cxx:72
 TGHtmlBrowser.cxx:73
 TGHtmlBrowser.cxx:74
 TGHtmlBrowser.cxx:75
 TGHtmlBrowser.cxx:76
 TGHtmlBrowser.cxx:77
 TGHtmlBrowser.cxx:78
 TGHtmlBrowser.cxx:79
 TGHtmlBrowser.cxx:80
 TGHtmlBrowser.cxx:81
 TGHtmlBrowser.cxx:82
 TGHtmlBrowser.cxx:83
 TGHtmlBrowser.cxx:84
 TGHtmlBrowser.cxx:85
 TGHtmlBrowser.cxx:86
 TGHtmlBrowser.cxx:87
 TGHtmlBrowser.cxx:88
 TGHtmlBrowser.cxx:89
 TGHtmlBrowser.cxx:90
 TGHtmlBrowser.cxx:91
 TGHtmlBrowser.cxx:92
 TGHtmlBrowser.cxx:93
 TGHtmlBrowser.cxx:94
 TGHtmlBrowser.cxx:95
 TGHtmlBrowser.cxx:96
 TGHtmlBrowser.cxx:97
 TGHtmlBrowser.cxx:98
 TGHtmlBrowser.cxx:99
 TGHtmlBrowser.cxx:100
 TGHtmlBrowser.cxx:101
 TGHtmlBrowser.cxx:102
 TGHtmlBrowser.cxx:103
 TGHtmlBrowser.cxx:104
 TGHtmlBrowser.cxx:105
 TGHtmlBrowser.cxx:106
 TGHtmlBrowser.cxx:107
 TGHtmlBrowser.cxx:108
 TGHtmlBrowser.cxx:109
 TGHtmlBrowser.cxx:110
 TGHtmlBrowser.cxx:111
 TGHtmlBrowser.cxx:112
 TGHtmlBrowser.cxx:113
 TGHtmlBrowser.cxx:114
 TGHtmlBrowser.cxx:115
 TGHtmlBrowser.cxx:116
 TGHtmlBrowser.cxx:117
 TGHtmlBrowser.cxx:118
 TGHtmlBrowser.cxx:119
 TGHtmlBrowser.cxx:120
 TGHtmlBrowser.cxx:121
 TGHtmlBrowser.cxx:122
 TGHtmlBrowser.cxx:123
 TGHtmlBrowser.cxx:124
 TGHtmlBrowser.cxx:125
 TGHtmlBrowser.cxx:126
 TGHtmlBrowser.cxx:127
 TGHtmlBrowser.cxx:128
 TGHtmlBrowser.cxx:129
 TGHtmlBrowser.cxx:130
 TGHtmlBrowser.cxx:131
 TGHtmlBrowser.cxx:132
 TGHtmlBrowser.cxx:133
 TGHtmlBrowser.cxx:134
 TGHtmlBrowser.cxx:135
 TGHtmlBrowser.cxx:136
 TGHtmlBrowser.cxx:137
 TGHtmlBrowser.cxx:138
 TGHtmlBrowser.cxx:139
 TGHtmlBrowser.cxx:140
 TGHtmlBrowser.cxx:141
 TGHtmlBrowser.cxx:142
 TGHtmlBrowser.cxx:143
 TGHtmlBrowser.cxx:144
 TGHtmlBrowser.cxx:145
 TGHtmlBrowser.cxx:146
 TGHtmlBrowser.cxx:147
 TGHtmlBrowser.cxx:148
 TGHtmlBrowser.cxx:149
 TGHtmlBrowser.cxx:150
 TGHtmlBrowser.cxx:151
 TGHtmlBrowser.cxx:152
 TGHtmlBrowser.cxx:153
 TGHtmlBrowser.cxx:154
 TGHtmlBrowser.cxx:155
 TGHtmlBrowser.cxx:156
 TGHtmlBrowser.cxx:157
 TGHtmlBrowser.cxx:158
 TGHtmlBrowser.cxx:159
 TGHtmlBrowser.cxx:160
 TGHtmlBrowser.cxx:161
 TGHtmlBrowser.cxx:162
 TGHtmlBrowser.cxx:163
 TGHtmlBrowser.cxx:164
 TGHtmlBrowser.cxx:165
 TGHtmlBrowser.cxx:166
 TGHtmlBrowser.cxx:167
 TGHtmlBrowser.cxx:168
 TGHtmlBrowser.cxx:169
 TGHtmlBrowser.cxx:170
 TGHtmlBrowser.cxx:171
 TGHtmlBrowser.cxx:172
 TGHtmlBrowser.cxx:173
 TGHtmlBrowser.cxx:174
 TGHtmlBrowser.cxx:175
 TGHtmlBrowser.cxx:176
 TGHtmlBrowser.cxx:177
 TGHtmlBrowser.cxx:178
 TGHtmlBrowser.cxx:179
 TGHtmlBrowser.cxx:180
 TGHtmlBrowser.cxx:181
 TGHtmlBrowser.cxx:182
 TGHtmlBrowser.cxx:183
 TGHtmlBrowser.cxx:184
 TGHtmlBrowser.cxx:185
 TGHtmlBrowser.cxx:186
 TGHtmlBrowser.cxx:187
 TGHtmlBrowser.cxx:188
 TGHtmlBrowser.cxx:189
 TGHtmlBrowser.cxx:190
 TGHtmlBrowser.cxx:191
 TGHtmlBrowser.cxx:192
 TGHtmlBrowser.cxx:193
 TGHtmlBrowser.cxx:194
 TGHtmlBrowser.cxx:195
 TGHtmlBrowser.cxx:196
 TGHtmlBrowser.cxx:197
 TGHtmlBrowser.cxx:198
 TGHtmlBrowser.cxx:199
 TGHtmlBrowser.cxx:200
 TGHtmlBrowser.cxx:201
 TGHtmlBrowser.cxx:202
 TGHtmlBrowser.cxx:203
 TGHtmlBrowser.cxx:204
 TGHtmlBrowser.cxx:205
 TGHtmlBrowser.cxx:206
 TGHtmlBrowser.cxx:207
 TGHtmlBrowser.cxx:208
 TGHtmlBrowser.cxx:209
 TGHtmlBrowser.cxx:210
 TGHtmlBrowser.cxx:211
 TGHtmlBrowser.cxx:212
 TGHtmlBrowser.cxx:213
 TGHtmlBrowser.cxx:214
 TGHtmlBrowser.cxx:215
 TGHtmlBrowser.cxx:216
 TGHtmlBrowser.cxx:217
 TGHtmlBrowser.cxx:218
 TGHtmlBrowser.cxx:219
 TGHtmlBrowser.cxx:220
 TGHtmlBrowser.cxx:221
 TGHtmlBrowser.cxx:222
 TGHtmlBrowser.cxx:223
 TGHtmlBrowser.cxx:224
 TGHtmlBrowser.cxx:225
 TGHtmlBrowser.cxx:226
 TGHtmlBrowser.cxx:227
 TGHtmlBrowser.cxx:228
 TGHtmlBrowser.cxx:229
 TGHtmlBrowser.cxx:230
 TGHtmlBrowser.cxx:231
 TGHtmlBrowser.cxx:232
 TGHtmlBrowser.cxx:233
 TGHtmlBrowser.cxx:234
 TGHtmlBrowser.cxx:235
 TGHtmlBrowser.cxx:236
 TGHtmlBrowser.cxx:237
 TGHtmlBrowser.cxx:238
 TGHtmlBrowser.cxx:239
 TGHtmlBrowser.cxx:240
 TGHtmlBrowser.cxx:241
 TGHtmlBrowser.cxx:242
 TGHtmlBrowser.cxx:243
 TGHtmlBrowser.cxx:244
 TGHtmlBrowser.cxx:245
 TGHtmlBrowser.cxx:246
 TGHtmlBrowser.cxx:247
 TGHtmlBrowser.cxx:248
 TGHtmlBrowser.cxx:249
 TGHtmlBrowser.cxx:250
 TGHtmlBrowser.cxx:251
 TGHtmlBrowser.cxx:252
 TGHtmlBrowser.cxx:253
 TGHtmlBrowser.cxx:254
 TGHtmlBrowser.cxx:255
 TGHtmlBrowser.cxx:256
 TGHtmlBrowser.cxx:257
 TGHtmlBrowser.cxx:258
 TGHtmlBrowser.cxx:259
 TGHtmlBrowser.cxx:260
 TGHtmlBrowser.cxx:261
 TGHtmlBrowser.cxx:262
 TGHtmlBrowser.cxx:263
 TGHtmlBrowser.cxx:264
 TGHtmlBrowser.cxx:265
 TGHtmlBrowser.cxx:266
 TGHtmlBrowser.cxx:267
 TGHtmlBrowser.cxx:268
 TGHtmlBrowser.cxx:269
 TGHtmlBrowser.cxx:270
 TGHtmlBrowser.cxx:271
 TGHtmlBrowser.cxx:272
 TGHtmlBrowser.cxx:273
 TGHtmlBrowser.cxx:274
 TGHtmlBrowser.cxx:275
 TGHtmlBrowser.cxx:276
 TGHtmlBrowser.cxx:277
 TGHtmlBrowser.cxx:278
 TGHtmlBrowser.cxx:279
 TGHtmlBrowser.cxx:280
 TGHtmlBrowser.cxx:281
 TGHtmlBrowser.cxx:282
 TGHtmlBrowser.cxx:283
 TGHtmlBrowser.cxx:284
 TGHtmlBrowser.cxx:285
 TGHtmlBrowser.cxx:286
 TGHtmlBrowser.cxx:287
 TGHtmlBrowser.cxx:288
 TGHtmlBrowser.cxx:289
 TGHtmlBrowser.cxx:290
 TGHtmlBrowser.cxx:291
 TGHtmlBrowser.cxx:292
 TGHtmlBrowser.cxx:293
 TGHtmlBrowser.cxx:294
 TGHtmlBrowser.cxx:295
 TGHtmlBrowser.cxx:296
 TGHtmlBrowser.cxx:297
 TGHtmlBrowser.cxx:298
 TGHtmlBrowser.cxx:299
 TGHtmlBrowser.cxx:300
 TGHtmlBrowser.cxx:301
 TGHtmlBrowser.cxx:302
 TGHtmlBrowser.cxx:303
 TGHtmlBrowser.cxx:304
 TGHtmlBrowser.cxx:305
 TGHtmlBrowser.cxx:306
 TGHtmlBrowser.cxx:307
 TGHtmlBrowser.cxx:308
 TGHtmlBrowser.cxx:309
 TGHtmlBrowser.cxx:310
 TGHtmlBrowser.cxx:311
 TGHtmlBrowser.cxx:312
 TGHtmlBrowser.cxx:313
 TGHtmlBrowser.cxx:314
 TGHtmlBrowser.cxx:315
 TGHtmlBrowser.cxx:316
 TGHtmlBrowser.cxx:317
 TGHtmlBrowser.cxx:318
 TGHtmlBrowser.cxx:319
 TGHtmlBrowser.cxx:320
 TGHtmlBrowser.cxx:321
 TGHtmlBrowser.cxx:322
 TGHtmlBrowser.cxx:323
 TGHtmlBrowser.cxx:324
 TGHtmlBrowser.cxx:325
 TGHtmlBrowser.cxx:326
 TGHtmlBrowser.cxx:327
 TGHtmlBrowser.cxx:328
 TGHtmlBrowser.cxx:329
 TGHtmlBrowser.cxx:330
 TGHtmlBrowser.cxx:331
 TGHtmlBrowser.cxx:332
 TGHtmlBrowser.cxx:333
 TGHtmlBrowser.cxx:334
 TGHtmlBrowser.cxx:335
 TGHtmlBrowser.cxx:336
 TGHtmlBrowser.cxx:337
 TGHtmlBrowser.cxx:338
 TGHtmlBrowser.cxx:339
 TGHtmlBrowser.cxx:340
 TGHtmlBrowser.cxx:341
 TGHtmlBrowser.cxx:342
 TGHtmlBrowser.cxx:343
 TGHtmlBrowser.cxx:344
 TGHtmlBrowser.cxx:345
 TGHtmlBrowser.cxx:346
 TGHtmlBrowser.cxx:347
 TGHtmlBrowser.cxx:348
 TGHtmlBrowser.cxx:349
 TGHtmlBrowser.cxx:350
 TGHtmlBrowser.cxx:351
 TGHtmlBrowser.cxx:352
 TGHtmlBrowser.cxx:353
 TGHtmlBrowser.cxx:354
 TGHtmlBrowser.cxx:355
 TGHtmlBrowser.cxx:356
 TGHtmlBrowser.cxx:357
 TGHtmlBrowser.cxx:358
 TGHtmlBrowser.cxx:359
 TGHtmlBrowser.cxx:360
 TGHtmlBrowser.cxx:361
 TGHtmlBrowser.cxx:362
 TGHtmlBrowser.cxx:363
 TGHtmlBrowser.cxx:364
 TGHtmlBrowser.cxx:365
 TGHtmlBrowser.cxx:366
 TGHtmlBrowser.cxx:367
 TGHtmlBrowser.cxx:368
 TGHtmlBrowser.cxx:369
 TGHtmlBrowser.cxx:370
 TGHtmlBrowser.cxx:371
 TGHtmlBrowser.cxx:372
 TGHtmlBrowser.cxx:373
 TGHtmlBrowser.cxx:374
 TGHtmlBrowser.cxx:375
 TGHtmlBrowser.cxx:376
 TGHtmlBrowser.cxx:377
 TGHtmlBrowser.cxx:378
 TGHtmlBrowser.cxx:379
 TGHtmlBrowser.cxx:380
 TGHtmlBrowser.cxx:381
 TGHtmlBrowser.cxx:382
 TGHtmlBrowser.cxx:383
 TGHtmlBrowser.cxx:384
 TGHtmlBrowser.cxx:385
 TGHtmlBrowser.cxx:386
 TGHtmlBrowser.cxx:387
 TGHtmlBrowser.cxx:388
 TGHtmlBrowser.cxx:389
 TGHtmlBrowser.cxx:390
 TGHtmlBrowser.cxx:391
 TGHtmlBrowser.cxx:392
 TGHtmlBrowser.cxx:393
 TGHtmlBrowser.cxx:394
 TGHtmlBrowser.cxx:395
 TGHtmlBrowser.cxx:396
 TGHtmlBrowser.cxx:397
 TGHtmlBrowser.cxx:398
 TGHtmlBrowser.cxx:399
 TGHtmlBrowser.cxx:400
 TGHtmlBrowser.cxx:401
 TGHtmlBrowser.cxx:402
 TGHtmlBrowser.cxx:403
 TGHtmlBrowser.cxx:404
 TGHtmlBrowser.cxx:405
 TGHtmlBrowser.cxx:406
 TGHtmlBrowser.cxx:407
 TGHtmlBrowser.cxx:408
 TGHtmlBrowser.cxx:409
 TGHtmlBrowser.cxx:410
 TGHtmlBrowser.cxx:411
 TGHtmlBrowser.cxx:412
 TGHtmlBrowser.cxx:413
 TGHtmlBrowser.cxx:414
 TGHtmlBrowser.cxx:415
 TGHtmlBrowser.cxx:416
 TGHtmlBrowser.cxx:417
 TGHtmlBrowser.cxx:418
 TGHtmlBrowser.cxx:419
 TGHtmlBrowser.cxx:420
 TGHtmlBrowser.cxx:421
 TGHtmlBrowser.cxx:422
 TGHtmlBrowser.cxx:423
 TGHtmlBrowser.cxx:424
 TGHtmlBrowser.cxx:425
 TGHtmlBrowser.cxx:426
 TGHtmlBrowser.cxx:427
 TGHtmlBrowser.cxx:428
 TGHtmlBrowser.cxx:429
 TGHtmlBrowser.cxx:430
 TGHtmlBrowser.cxx:431
 TGHtmlBrowser.cxx:432
 TGHtmlBrowser.cxx:433
 TGHtmlBrowser.cxx:434
 TGHtmlBrowser.cxx:435
 TGHtmlBrowser.cxx:436
 TGHtmlBrowser.cxx:437
 TGHtmlBrowser.cxx:438
 TGHtmlBrowser.cxx:439
 TGHtmlBrowser.cxx:440
 TGHtmlBrowser.cxx:441
 TGHtmlBrowser.cxx:442
 TGHtmlBrowser.cxx:443
 TGHtmlBrowser.cxx:444
 TGHtmlBrowser.cxx:445
 TGHtmlBrowser.cxx:446
 TGHtmlBrowser.cxx:447
 TGHtmlBrowser.cxx:448
 TGHtmlBrowser.cxx:449
 TGHtmlBrowser.cxx:450
 TGHtmlBrowser.cxx:451
 TGHtmlBrowser.cxx:452
 TGHtmlBrowser.cxx:453
 TGHtmlBrowser.cxx:454
 TGHtmlBrowser.cxx:455
 TGHtmlBrowser.cxx:456
 TGHtmlBrowser.cxx:457
 TGHtmlBrowser.cxx:458
 TGHtmlBrowser.cxx:459
 TGHtmlBrowser.cxx:460
 TGHtmlBrowser.cxx:461
 TGHtmlBrowser.cxx:462
 TGHtmlBrowser.cxx:463
 TGHtmlBrowser.cxx:464
 TGHtmlBrowser.cxx:465
 TGHtmlBrowser.cxx:466
 TGHtmlBrowser.cxx:467
 TGHtmlBrowser.cxx:468
 TGHtmlBrowser.cxx:469
 TGHtmlBrowser.cxx:470
 TGHtmlBrowser.cxx:471
 TGHtmlBrowser.cxx:472
 TGHtmlBrowser.cxx:473
 TGHtmlBrowser.cxx:474
 TGHtmlBrowser.cxx:475
 TGHtmlBrowser.cxx:476
 TGHtmlBrowser.cxx:477
 TGHtmlBrowser.cxx:478
 TGHtmlBrowser.cxx:479
 TGHtmlBrowser.cxx:480
 TGHtmlBrowser.cxx:481
 TGHtmlBrowser.cxx:482
 TGHtmlBrowser.cxx:483
 TGHtmlBrowser.cxx:484
 TGHtmlBrowser.cxx:485
 TGHtmlBrowser.cxx:486
 TGHtmlBrowser.cxx:487
 TGHtmlBrowser.cxx:488
 TGHtmlBrowser.cxx:489
 TGHtmlBrowser.cxx:490
 TGHtmlBrowser.cxx:491
 TGHtmlBrowser.cxx:492
 TGHtmlBrowser.cxx:493
 TGHtmlBrowser.cxx:494
 TGHtmlBrowser.cxx:495
 TGHtmlBrowser.cxx:496
 TGHtmlBrowser.cxx:497
 TGHtmlBrowser.cxx:498
 TGHtmlBrowser.cxx:499
 TGHtmlBrowser.cxx:500
 TGHtmlBrowser.cxx:501
 TGHtmlBrowser.cxx:502
 TGHtmlBrowser.cxx:503
 TGHtmlBrowser.cxx:504
 TGHtmlBrowser.cxx:505
 TGHtmlBrowser.cxx:506
 TGHtmlBrowser.cxx:507
 TGHtmlBrowser.cxx:508
 TGHtmlBrowser.cxx:509
 TGHtmlBrowser.cxx:510
 TGHtmlBrowser.cxx:511
 TGHtmlBrowser.cxx:512
 TGHtmlBrowser.cxx:513
 TGHtmlBrowser.cxx:514
 TGHtmlBrowser.cxx:515
 TGHtmlBrowser.cxx:516
 TGHtmlBrowser.cxx:517
 TGHtmlBrowser.cxx:518
 TGHtmlBrowser.cxx:519
 TGHtmlBrowser.cxx:520
 TGHtmlBrowser.cxx:521
 TGHtmlBrowser.cxx:522
 TGHtmlBrowser.cxx:523
 TGHtmlBrowser.cxx:524
 TGHtmlBrowser.cxx:525
 TGHtmlBrowser.cxx:526
 TGHtmlBrowser.cxx:527
 TGHtmlBrowser.cxx:528
 TGHtmlBrowser.cxx:529
 TGHtmlBrowser.cxx:530
 TGHtmlBrowser.cxx:531
 TGHtmlBrowser.cxx:532
 TGHtmlBrowser.cxx:533
 TGHtmlBrowser.cxx:534
 TGHtmlBrowser.cxx:535
 TGHtmlBrowser.cxx:536
 TGHtmlBrowser.cxx:537
 TGHtmlBrowser.cxx:538
 TGHtmlBrowser.cxx:539
 TGHtmlBrowser.cxx:540
 TGHtmlBrowser.cxx:541
 TGHtmlBrowser.cxx:542
 TGHtmlBrowser.cxx:543
 TGHtmlBrowser.cxx:544
 TGHtmlBrowser.cxx:545
 TGHtmlBrowser.cxx:546
 TGHtmlBrowser.cxx:547
 TGHtmlBrowser.cxx:548
 TGHtmlBrowser.cxx:549
 TGHtmlBrowser.cxx:550
 TGHtmlBrowser.cxx:551
 TGHtmlBrowser.cxx:552
 TGHtmlBrowser.cxx:553
 TGHtmlBrowser.cxx:554
 TGHtmlBrowser.cxx:555
 TGHtmlBrowser.cxx:556
 TGHtmlBrowser.cxx:557
 TGHtmlBrowser.cxx:558
 TGHtmlBrowser.cxx:559
 TGHtmlBrowser.cxx:560
 TGHtmlBrowser.cxx:561
 TGHtmlBrowser.cxx:562
 TGHtmlBrowser.cxx:563
 TGHtmlBrowser.cxx:564
 TGHtmlBrowser.cxx:565
 TGHtmlBrowser.cxx:566
 TGHtmlBrowser.cxx:567
 TGHtmlBrowser.cxx:568
 TGHtmlBrowser.cxx:569
 TGHtmlBrowser.cxx:570
 TGHtmlBrowser.cxx:571
 TGHtmlBrowser.cxx:572
 TGHtmlBrowser.cxx:573
 TGHtmlBrowser.cxx:574
 TGHtmlBrowser.cxx:575
 TGHtmlBrowser.cxx:576
 TGHtmlBrowser.cxx:577
 TGHtmlBrowser.cxx:578
 TGHtmlBrowser.cxx:579
 TGHtmlBrowser.cxx:580
 TGHtmlBrowser.cxx:581
 TGHtmlBrowser.cxx:582
 TGHtmlBrowser.cxx:583
 TGHtmlBrowser.cxx:584
 TGHtmlBrowser.cxx:585
 TGHtmlBrowser.cxx:586
 TGHtmlBrowser.cxx:587
 TGHtmlBrowser.cxx:588
 TGHtmlBrowser.cxx:589
 TGHtmlBrowser.cxx:590
 TGHtmlBrowser.cxx:591
 TGHtmlBrowser.cxx:592
 TGHtmlBrowser.cxx:593
 TGHtmlBrowser.cxx:594
 TGHtmlBrowser.cxx:595
 TGHtmlBrowser.cxx:596
 TGHtmlBrowser.cxx:597
 TGHtmlBrowser.cxx:598
 TGHtmlBrowser.cxx:599
 TGHtmlBrowser.cxx:600
 TGHtmlBrowser.cxx:601
 TGHtmlBrowser.cxx:602
 TGHtmlBrowser.cxx:603
 TGHtmlBrowser.cxx:604
 TGHtmlBrowser.cxx:605
 TGHtmlBrowser.cxx:606
 TGHtmlBrowser.cxx:607
 TGHtmlBrowser.cxx:608
 TGHtmlBrowser.cxx:609
 TGHtmlBrowser.cxx:610
 TGHtmlBrowser.cxx:611
 TGHtmlBrowser.cxx:612
 TGHtmlBrowser.cxx:613
 TGHtmlBrowser.cxx:614
 TGHtmlBrowser.cxx:615
 TGHtmlBrowser.cxx:616
 TGHtmlBrowser.cxx:617
 TGHtmlBrowser.cxx:618
 TGHtmlBrowser.cxx:619
 TGHtmlBrowser.cxx:620
 TGHtmlBrowser.cxx:621
 TGHtmlBrowser.cxx:622
 TGHtmlBrowser.cxx:623
 TGHtmlBrowser.cxx:624
 TGHtmlBrowser.cxx:625
 TGHtmlBrowser.cxx:626
 TGHtmlBrowser.cxx:627
 TGHtmlBrowser.cxx:628
 TGHtmlBrowser.cxx:629
 TGHtmlBrowser.cxx:630
 TGHtmlBrowser.cxx:631
 TGHtmlBrowser.cxx:632
 TGHtmlBrowser.cxx:633
 TGHtmlBrowser.cxx:634
 TGHtmlBrowser.cxx:635
 TGHtmlBrowser.cxx:636
 TGHtmlBrowser.cxx:637
 TGHtmlBrowser.cxx:638
 TGHtmlBrowser.cxx:639
 TGHtmlBrowser.cxx:640
 TGHtmlBrowser.cxx:641
 TGHtmlBrowser.cxx:642
 TGHtmlBrowser.cxx:643
 TGHtmlBrowser.cxx:644
 TGHtmlBrowser.cxx:645
 TGHtmlBrowser.cxx:646
 TGHtmlBrowser.cxx:647
 TGHtmlBrowser.cxx:648
 TGHtmlBrowser.cxx:649
 TGHtmlBrowser.cxx:650
 TGHtmlBrowser.cxx:651
 TGHtmlBrowser.cxx:652
 TGHtmlBrowser.cxx:653
 TGHtmlBrowser.cxx:654
 TGHtmlBrowser.cxx:655
 TGHtmlBrowser.cxx:656
 TGHtmlBrowser.cxx:657
 TGHtmlBrowser.cxx:658
 TGHtmlBrowser.cxx:659
 TGHtmlBrowser.cxx:660
 TGHtmlBrowser.cxx:661
 TGHtmlBrowser.cxx:662
 TGHtmlBrowser.cxx:663
 TGHtmlBrowser.cxx:664
 TGHtmlBrowser.cxx:665
 TGHtmlBrowser.cxx:666
 TGHtmlBrowser.cxx:667
 TGHtmlBrowser.cxx:668
 TGHtmlBrowser.cxx:669
 TGHtmlBrowser.cxx:670
 TGHtmlBrowser.cxx:671
 TGHtmlBrowser.cxx:672
 TGHtmlBrowser.cxx:673
 TGHtmlBrowser.cxx:674