ROOT logo
// Test program for ROOT native GUI classes 
// exactly like $ROOTSYS/test/guitest.cxx but using the new signal and slots
// communication mechanism. It is now possible to run this entire
// test program in the interpreter. Do either:
// .x guitest.C
// .x guitest.C++
// Authors: Bertrand Bellenot, Ilka Antcheva, Fons Rademakers,
//          Valeri Onuchin

#include <stdlib.h>

#include <TROOT.h>
#include <TApplication.h>
#include <TVirtualX.h>
#include <TVirtualPadEditor.h>
#include <TGResourcePool.h>
#include <TGListBox.h>
#include <TGListTree.h>
#include <TGFSContainer.h>
#include <TGClient.h>
#include <TGFrame.h>
#include <TGIcon.h>
#include <TGLabel.h>
#include <TGButton.h>
#include <TGTextEntry.h>
#include <TGNumberEntry.h>
#include <TGMsgBox.h>
#include <TGMenu.h>
#include <TGCanvas.h>
#include <TGComboBox.h>
#include <TGTab.h>
#include <TGSlider.h>
#include <TGDoubleSlider.h>
#include <TGFileDialog.h>
#include <TGTextEdit.h>
#include <TGShutter.h>
#include <TGProgressBar.h>
#include <TGColorSelect.h>
#include <RQ_OBJECT.h>
#include <TRootEmbeddedCanvas.h>
#include <TCanvas.h>
#include <TColor.h>
#include <TH1.h>
#include <TH2.h>
#include <TRandom.h>
#include <TSystem.h>
#include <TSystemDirectory.h>
#include <TEnv.h>
#include <TFile.h>
#include <TKey.h>
#include <TGDockableFrame.h>
#include <TGFontDialog.h>


enum ETestCommandIdentifiers {
   M_FILE_OPEN,
   M_FILE_SAVE,
   M_FILE_SAVEAS,
   M_FILE_PRINT,
   M_FILE_PRINTSETUP,
   M_FILE_EXIT,

   M_TEST_DLG,
   M_TEST_MSGBOX,
   M_TEST_SLIDER,
   M_TEST_SHUTTER,
   M_TEST_DIRLIST,
   M_TEST_FILELIST,
   M_TEST_PROGRESS,
   M_TEST_NUMBERENTRY,
   M_TEST_FONTDIALOG,
   M_TEST_NEWMENU,

   M_VIEW_ENBL_DOCK,
   M_VIEW_ENBL_HIDE,
   M_VIEW_DOCK,
   M_VIEW_UNDOCK,

   M_HELP_CONTENTS,
   M_HELP_SEARCH,
   M_HELP_ABOUT,

   M_CASCADE_1,
   M_CASCADE_2,
   M_CASCADE_3,

   M_NEW_REMOVEMENU,

   VId1,
   HId1,
   VId2,
   HId2,

   VSId1,
   HSId1,
   VSId2,
   HSId2
};


Int_t mb_button_id[13] = { kMBYes, kMBNo, kMBOk, kMBApply,
                           kMBRetry, kMBIgnore, kMBCancel,
                           kMBClose, kMBYesAll, kMBNoAll, 
                           kMBNewer, kMBAppend, kMBDismiss};

EMsgBoxIcon mb_icon[4] = { kMBIconStop, kMBIconQuestion,
                           kMBIconExclamation, kMBIconAsterisk };

const char *filetypes[] = { "All files",     "*",
                            "ROOT files",    "*.root",
                            "ROOT macros",   "*.C",
                            "Text files",    "*.[tT][xX][tT]",
                            0,               0 };

struct shutterData_t {
   const char *pixmap_name;
   const char *tip_text;
   Int_t       id;
   TGButton   *button;
};

shutterData_t histo_data[] = {
   { "h1_s.xpm",        "TH1",      1001,  0 },
   { "h2_s.xpm",        "TH2",      1002,  0 },
   { "h3_s.xpm",        "TH3",      1003,  0 },
   { "profile_s.xpm",   "TProfile", 1004,  0 },
   { 0,                 0,          0,     0 }
};

shutterData_t function_data[] = {
   { "f1_s.xpm",        "TF1",      2001,  0 },
   { "f2_s.xpm",        "TF2",      2002,  0 },
   { 0,                 0,          0,     0 }
};

shutterData_t tree_data[] = {
   { "ntuple_s.xpm",    "TNtuple",  3001,  0 },
   { "tree_s.xpm",      "TTree",    3002,  0 },
   { "chain_s.xpm",     "TChain",   3003,  0 },
   { 0,                 0,          0,     0 }
};


const char *editortxt1 =
"This is the ROOT text edit widget TGTextEdit. It is not intended as\n"
"a full developers editor, but it is relatively complete and can ideally\n"
"be used to edit scripts or to present users editable config files, etc.\n\n"
"The text edit widget supports standard emacs style ctrl-key navigation\n"
"in addition to the arrow keys. By default the widget has under the right\n"
"mouse button a popup menu giving access to several built-in functions.\n\n"
"Cut, copy and paste between different editor windows and any other\n"
"standard text handling application is supported.\n\n"
"Text can be selected with the mouse while holding the left button\n"
"or with the arrow keys while holding the shift key pressed. Use the\n"
"middle mouse button to paste text at the current mouse location."
;
const char *editortxt2 =
"Mice with scroll-ball are properly supported.\n\n"
"This are the currently defined key bindings:\n"
"Left Arrow\n"
"    Move the cursor one character leftwards.\n"
"    Scroll when cursor is out of frame.\n"
"Right Arrow\n"
"    Move the cursor one character rightwards.\n"
"    Scroll when cursor is out of frame.\n"
"Backspace\n"
"    Deletes the character on the left side of the text cursor and moves the\n"
"    cursor one position to the left. If a text has been marked by the user"
;
const char *editortxt3 =
"    (e.g. by clicking and dragging) the cursor will be put at the beginning\n"
"    of the marked text and the marked text will be removed.\n"
"Home\n"
"    Moves the text cursor to the left end of the line. If mark is TRUE text\n"
"    will be marked towards the first position, if not any marked text will\n"
"    be unmarked if the cursor is moved.\n"
"End\n"
"    Moves the text cursor to the right end of the line. If mark is TRUE text\n"
"    will be marked towards the last position, if not any marked text will\n"
"    be unmarked if the cursor is moved.\n"
"Delete"
;
const char *editortxt4 =
"    Deletes the character on the right side of the text cursor. If a text\n"
"    has been marked by the user (e.g. by clicking and dragging) the cursor\n"
"    will be put at the beginning of the marked text and the marked text will\n"
"    be removed.\n"
"Shift - Left Arrow\n"
"    Mark text one character leftwards.\n"
"Shift - Right Arrow\n"
"    Mark text one character rightwards.\n"
"Control-A\n"
"    Select the whole text.\n"
"Control-B\n"
"    Move the cursor one character leftwards."
;
const char *editortxt5 =
"Control-C\n"
"    Copy the marked text to the clipboard.\n"
"Control-D\n"
"    Delete the character to the right of the cursor.\n"
"Control-E\n"
"    Move the cursor to the end of the line.\n"
"Control-F\n"
"    Start Search Dialog.\n"
"Control-H\n"
"    Delete the character to the left of the cursor.\n"
"Control-K\n"
"    Delete marked text if any or delete all\n"
"    characters to the right of the cursor.\n"
"Control-L\n"
"    Start GoTo Line Dialog"
;
const char *editortxt6 =
"Control-U\n"
"    Delete all characters on the line.\n"
"Control-V\n"
"    Paste the clipboard text into line edit.\n"
"Control-X\n"
"    Cut the marked text, copy to clipboard.\n"
"Control-Y\n"
"    Paste the clipboard text into line edit.\n"
"Control-Z\n"
"    Undo action.\n\n"
"All other keys with valid ASCII codes insert themselves into the line.";


class TileFrame;


class TestMainFrame {

RQ_OBJECT("TestMainFrame")

private:
   TGMainFrame        *fMain;
   TGDockableFrame    *fMenuDock;
   TGCompositeFrame   *fStatusFrame;
   TGCanvas           *fCanvasWindow;
   TileFrame          *fContainer;
   TGTextEntry        *fTestText;
   TGButton           *fTestButton;
   TGColorSelect      *fColorSel;

   TGMenuBar          *fMenuBar;
   TGPopupMenu        *fMenuFile, *fMenuTest, *fMenuView, *fMenuHelp;
   TGPopupMenu        *fCascadeMenu, *fCascade1Menu, *fCascade2Menu;
   TGPopupMenu        *fMenuNew1, *fMenuNew2;
   TGLayoutHints      *fMenuBarLayout, *fMenuBarItemLayout, *fMenuBarHelpLayout;

public:
   TestMainFrame(const TGWindow *p, UInt_t w, UInt_t h);
   virtual ~TestMainFrame();

   // slots
   void CloseWindow();
   void DoButton();
   void HandleMenu(Int_t id);
   void HandlePopup() { printf("menu popped up\n"); }
   void HandlePopdown() { printf("menu popped down\n"); }

   void Created() { Emit("Created()"); } //*SIGNAL*
   void Welcome() { printf("TestMainFrame has been created. Welcome!\n"); }
};

class TestDialog {

RQ_OBJECT("TestDialog")

private:
   TGTransientFrame    *fMain;
   TGCompositeFrame    *fFrame1, *fF1, *fF2, *fF3, *fF4, *fF5;
   TGGroupFrame        *fF6, *fF7;
   TGButton            *fOkButton, *fCancelButton, *fStartB, *fStopB;
   TGButton            *fBtn1, *fBtn2, *fChk1, *fChk2, *fRad1, *fRad2;
   TGPictureButton     *fPicBut1;
   TGCheckButton       *fCheck1;
   TGCheckButton       *fCheckMulti;
   TGListBox           *fListBox;
   TGComboBox          *fCombo;
   TGTab               *fTab;
   TGTextEntry         *fTxt1, *fTxt2;
   TGLayoutHints       *fL1, *fL2, *fL3, *fL4;
   TRootEmbeddedCanvas *fEc1, *fEc2;
   Int_t                fFirstEntry;
   Int_t                fLastEntry;
   Bool_t               fFillHistos;
   TH1F                *fHpx;
   TH2F                *fHpxpy;

   void FillHistos();

public:
   TestDialog(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h,
               UInt_t options = kVerticalFrame);
   virtual ~TestDialog();

   // slots
   void DoClose();
   void CloseWindow();
   void DoOK();
   void DoCancel();
   void DoTab(Int_t id);
   void HandleButtons(Int_t id = -1);
   void HandleEmbeddedCanvas(Int_t event, Int_t x, Int_t y, TObject *sel);
};

class TestMsgBox {

RQ_OBJECT("TestMsgBox")

private:
   TGTransientFrame     *fMain;
   TGCompositeFrame     *f1, *f2, *f3, *f4, *f5;
   TGButton             *fTestButton, *fCloseButton;
   TGPictureButton      *fPictButton;
   TGRadioButton        *fR[4];
   TGCheckButton        *fC[13];
   TGGroupFrame         *fG1, *fG2;
   TGLayoutHints        *fL1, *fL2, *fL3, *fL4, *fL5, *fL6, *fL21;
   TGTextEntry          *fTitle, *fMsg;
   TGTextBuffer         *fTbtitle, *fTbmsg;
   TGLabel              *fLtitle, *fLmsg;
   TGGC                  fRedTextGC;

public:
   TestMsgBox(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h,
              UInt_t options = kVerticalFrame);
   virtual ~TestMsgBox();

   // slots
   void TryToClose();
   void CloseWindow();
   void DoClose();
   void DoRadio();
   void DoTest();
};


class TestSliders {

RQ_OBJECT("TestSliders")

private:
   TGTransientFrame  *fMain;
   TGVerticalFrame   *fVframe1, *fVframe2;
   TGLayoutHints     *fBly, *fBfly1;
   TGHSlider         *fHslider1, *fHslider2;
   TGVSlider         *fVslider1;
   TGDoubleVSlider   *fVslider2;
   TGTextEntry       *fTeh1, *fTev1, *fTeh2, *fTev2;
   TGTextBuffer      *fTbh1, *fTbv1, *fTbh2, *fTbv2;

public:
   TestSliders(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h);
   virtual ~TestSliders();

   // slots
   void CloseWindow();
   void DoText(const char *text);
   void DoSlider(Int_t pos = 0);
};


class TestShutter {

RQ_OBJECT("TestShutter")

private:
   TGTransientFrame *fMain;
   TGShutter        *fShutter;
   TGLayoutHints    *fLayout;
   const TGPicture  *fDefaultPic;

public:
   TestShutter(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h);
   ~TestShutter();

   void AddShutterItem(const char *name, shutterData_t *data);

   // slots
   void CloseWindow();
   void HandleButtons();
};


class TestDirList {

RQ_OBJECT("TestDirList")

protected:
   TGTransientFrame *fMain;
   TGListTree       *fContents;
   const TGPicture  *fIcon;
   TString DirName(TGListTreeItem* item);

public:
   TestDirList(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h);
   virtual ~TestDirList();

   // slots
   void OnDoubleClick(TGListTreeItem* item, Int_t btn);
   void CloseWindow();
};


class TestFileList {

RQ_OBJECT("TestFileList")

protected:
   TGTransientFrame *fMain;
   TGFileContainer  *fContents;
   TGPopupMenu      *fMenu;

   void DisplayFile(const TString &fname);
   void DisplayDirectory(const TString &fname);
   void DisplayObject(const TString& fname,const TString& name);

public:
   TestFileList(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h);
   virtual ~TestFileList();

   // slots
   void OnDoubleClick(TGLVEntry*,Int_t);
   void DoMenu(Int_t);
   void CloseWindow();
};

class TestProgress {

private:
   TGTransientFrame  *fMain;
   TGHorizontalFrame *fHframe1;
   TGVerticalFrame   *fVframe1;
   TGLayoutHints     *fHint1, *fHint2, *fHint3, *fHint4, *fHint5;
   TGHProgressBar    *fHProg1, *fHProg2, *fHProg3;
   TGVProgressBar    *fVProg1, *fVProg2;
   TGTextButton      *fGO;
   Bool_t             fClose;

public:
   TestProgress(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h);
   virtual ~TestProgress();

   // slots
   void CloseWindow();
   void DoClose();
   void DoGo();
};


class EntryTestDlg {

private:
   TGTransientFrame     *fMain;
   TGVerticalFrame      *fF1;
   TGVerticalFrame      *fF2;
   TGHorizontalFrame    *fF[13];
   TGLayoutHints        *fL1;
   TGLayoutHints        *fL2;
   TGLayoutHints        *fL3;
   TGLabel              *fLabel[13];
   TGNumberEntry        *fNumericEntries[13];
   TGCheckButton        *fLowerLimit;
   TGCheckButton        *fUpperLimit;
   TGNumberEntry        *fLimits[2];
   TGCheckButton        *fPositive;
   TGCheckButton        *fNonNegative;
   TGButton             *fSetButton;
   TGButton             *fExitButton;

//   static const char *const numlabel[13];
//   static const Double_t numinit[13];

public:
   EntryTestDlg(const TGWindow *p, const TGWindow *main);
   virtual ~EntryTestDlg();

   // slots
   void CloseWindow();
   void SetLimits();
   void DoOK();
};


class Editor {

private:
   TGTransientFrame *fMain;   // main frame of this widget
   TGTextEdit       *fEdit;   // text edit widget
   TGTextButton     *fOK;     // OK button
   TGLayoutHints    *fL1;     // layout of TGTextEdit
   TGLayoutHints    *fL2;     // layout of OK button

public:
   Editor(const TGWindow *main, UInt_t w, UInt_t h);
   virtual ~Editor();

   void   LoadFile(const char *file);
   void   LoadBuffer(const char *buffer);
   void   AddBuffer(const char *buffer);

   TGTextEdit *GetEditor() const { return fEdit; }

   void   SetTitle();
   void   Popup();

   // slots
   void   CloseWindow();
   void   DoOK();
   void   DoOpen();
   void   DoSave();
   void   DoClose();
};


class TileFrame {

RQ_OBJECT("TileFrame")

private:
   TGCompositeFrame *fFrame;
   TGCanvas         *fCanvas;

public:
   TileFrame(const TGWindow *p);
   virtual ~TileFrame() { delete fFrame; }

   TGFrame *GetFrame() const { return fFrame; }

   void SetCanvas(TGCanvas *canvas) { fCanvas = canvas; }
   void HandleMouseWheel(Event_t *event);
};

TileFrame::TileFrame(const TGWindow *p)
{
   // Create tile view container. Used to show colormap.

   fFrame = new TGCompositeFrame(p, 10, 10, kHorizontalFrame,
                                 TGFrame::GetWhitePixel());
   fFrame->Connect("ProcessedEvent(Event_t*)", "TileFrame", this,
                   "HandleMouseWheel(Event_t*)");
   fCanvas = 0;
   fFrame->SetLayoutManager(new TGTileLayout(fFrame, 8));

   gVirtualX->GrabButton(fFrame->GetId(), kAnyButton, kAnyModifier,
                         kButtonPressMask | kButtonReleaseMask |
                         kPointerMotionMask, kNone, kNone);
}

void TileFrame::HandleMouseWheel(Event_t *event)
{
   // Handle mouse wheel to scroll.

   if (event->fType != kButtonPress && event->fType != kButtonRelease)
      return;

   Int_t page = 0;
   if (event->fCode == kButton4 || event->fCode == kButton5) {
      if (!fCanvas) return;
      if (fCanvas->GetContainer()->GetHeight())
         page = Int_t(Float_t(fCanvas->GetViewPort()->GetHeight() *
                              fCanvas->GetViewPort()->GetHeight()) /
                              fCanvas->GetContainer()->GetHeight());
   }

   if (event->fCode == kButton4) {
      //scroll up
      Int_t newpos = fCanvas->GetVsbPosition() - page;
      if (newpos < 0) newpos = 0;
      fCanvas->SetVsbPosition(newpos);
   }
   if (event->fCode == kButton5) {
      // scroll down
      Int_t newpos = fCanvas->GetVsbPosition() + page;
      fCanvas->SetVsbPosition(newpos);
   }
}


TestMainFrame::TestMainFrame(const TGWindow *p, UInt_t w, UInt_t h)
{
   // Create test main frame. A TGMainFrame is a top level window.

   fMain = new TGMainFrame(p, w, h);

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   fMain->Connect("CloseWindow()", "TestMainFrame", this, "CloseWindow()");

   // Create menubar and popup menus. The hint objects are used to place
   // and group the different menu widgets with respect to eachother.
   fMenuDock = new TGDockableFrame(fMain);
   fMain->AddFrame(fMenuDock, new TGLayoutHints(kLHintsExpandX, 0, 0, 1, 0));
   fMenuDock->SetWindowName("GuiTest Menu");

   fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX);
   fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);
   fMenuBarHelpLayout = new TGLayoutHints(kLHintsTop | kLHintsRight);

   fMenuFile = new TGPopupMenu(gClient->GetRoot());
   fMenuFile->AddEntry("&Open...", M_FILE_OPEN);
   fMenuFile->AddEntry("&Save", M_FILE_SAVE);
   fMenuFile->AddEntry("S&ave as...", M_FILE_SAVEAS);
   fMenuFile->AddEntry("&Close", -1);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("&Print", M_FILE_PRINT);
   fMenuFile->AddEntry("P&rint setup...", M_FILE_PRINTSETUP);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("E&xit", M_FILE_EXIT);

   fMenuFile->DisableEntry(M_FILE_SAVEAS);
   fMenuFile->HideEntry(M_FILE_PRINT);

   fCascade2Menu = new TGPopupMenu(gClient->GetRoot());
   fCascade2Menu->AddEntry("ID = 2&3", M_CASCADE_1);
   fCascade2Menu->AddEntry("ID = 2&4", M_CASCADE_2);
   fCascade2Menu->AddEntry("ID = 2&5", M_CASCADE_3);

   fCascade1Menu = new TGPopupMenu(gClient->GetRoot());
   fCascade1Menu->AddEntry("ID = 4&1", 41);
   fCascade1Menu->AddEntry("ID = 4&2", 42);
   fCascade1Menu->AddEntry("ID = 4&3", 43);
   fCascade1Menu->AddSeparator();
   fCascade1Menu->AddPopup("Cascade&d 2", fCascade2Menu);

   fCascadeMenu = new TGPopupMenu(gClient->GetRoot());
   fCascadeMenu->AddEntry("ID = 5&1", 51);
   fCascadeMenu->AddEntry("ID = 5&2", 52);
   fCascadeMenu->AddEntry("ID = 5&3", 53);
   fCascadeMenu->AddSeparator();
   fCascadeMenu->AddPopup("&Cascaded 1", fCascade1Menu);

   fMenuTest = new TGPopupMenu(gClient->GetRoot());
   fMenuTest->AddLabel("Test different features...");
   fMenuTest->AddSeparator();
   fMenuTest->AddEntry("&Dialog...", M_TEST_DLG);
   fMenuTest->AddEntry("&Message Box...", M_TEST_MSGBOX);
   fMenuTest->AddEntry("&Sliders...", M_TEST_SLIDER);
   fMenuTest->AddEntry("Sh&utter...", M_TEST_SHUTTER);
   fMenuTest->AddEntry("&List Directory...", M_TEST_DIRLIST);
   fMenuTest->AddEntry("&File List...", M_TEST_FILELIST);
   fMenuTest->AddEntry("&Progress...", M_TEST_PROGRESS);
   fMenuTest->AddEntry("&Number Entry...", M_TEST_NUMBERENTRY);
   fMenuTest->AddEntry("F&ont Dialog...", M_TEST_FONTDIALOG);
   fMenuTest->AddSeparator();
   fMenuTest->AddEntry("Add New Menus", M_TEST_NEWMENU);
   fMenuTest->AddSeparator();
   fMenuTest->AddPopup("&Cascaded menus", fCascadeMenu);

   fMenuView = new TGPopupMenu(gClient->GetRoot());
   fMenuView->AddEntry("&Dock", M_VIEW_DOCK);
   fMenuView->AddEntry("&Undock", M_VIEW_UNDOCK);
   fMenuView->AddSeparator();
   fMenuView->AddEntry("Enable U&ndock", M_VIEW_ENBL_DOCK);
   fMenuView->AddEntry("Enable &Hide", M_VIEW_ENBL_HIDE);
   fMenuView->DisableEntry(M_VIEW_DOCK);

   fMenuDock->EnableUndock(kTRUE);
   fMenuDock->EnableHide(kTRUE);
   fMenuView->CheckEntry(M_VIEW_ENBL_DOCK);
   fMenuView->CheckEntry(M_VIEW_ENBL_HIDE);

   // When using the DockButton of the MenuDock,
   // the states 'enable' and 'disable' of menus have to be updated.
   fMenuDock->Connect("Undocked()", "TestMainFrame", this, "HandleMenu(=M_VIEW_UNDOCK)");

   fMenuHelp = new TGPopupMenu(gClient->GetRoot());
   fMenuHelp->AddEntry("&Contents", M_HELP_CONTENTS);
   fMenuHelp->AddEntry("&Search...", M_HELP_SEARCH);
   fMenuHelp->AddSeparator();
   fMenuHelp->AddEntry("&About", M_HELP_ABOUT);

   fMenuNew1 = new TGPopupMenu();
   fMenuNew1->AddEntry("Remove New Menus", M_NEW_REMOVEMENU);

   fMenuNew2 = new TGPopupMenu();
   fMenuNew2->AddEntry("Remove New Menus", M_NEW_REMOVEMENU);

   // Menu button messages are handled by the main frame (i.e. "this")
   // HandleMenu() method.
   fMenuFile->Connect("Activated(Int_t)", "TestMainFrame", this,
                      "HandleMenu(Int_t)");
   fMenuFile->Connect("PoppedUp()", "TestMainFrame", this, "HandlePopup()");
   fMenuFile->Connect("PoppedDown()", "TestMainFrame", this, "HandlePopdown()");
   fMenuTest->Connect("Activated(Int_t)", "TestMainFrame", this,
                      "HandleMenu(Int_t)");
   fMenuView->Connect("Activated(Int_t)", "TestMainFrame", this,
                      "HandleMenu(Int_t)");
   fMenuHelp->Connect("Activated(Int_t)", "TestMainFrame", this,
                      "HandleMenu(Int_t)");
   fCascadeMenu->Connect("Activated(Int_t)", "TestMainFrame", this,
                         "HandleMenu(Int_t)");
   fCascade1Menu->Connect("Activated(Int_t)", "TestMainFrame", this,
                          "HandleMenu(Int_t)");
   fCascade2Menu->Connect("Activated(Int_t)", "TestMainFrame", this,
                          "HandleMenu(Int_t)");
   fMenuNew1->Connect("Activated(Int_t)", "TestMainFrame", this,
                      "HandleMenu(Int_t)");
   fMenuNew2->Connect("Activated(Int_t)", "TestMainFrame", this,
                      "HandleMenu(Int_t)");

   fMenuBar = new TGMenuBar(fMenuDock, 1, 1, kHorizontalFrame);
   fMenuBar->AddPopup("&File", fMenuFile, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Test", fMenuTest, fMenuBarItemLayout);
   fMenuBar->AddPopup("&View", fMenuView, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Help", fMenuHelp, fMenuBarHelpLayout);

   fMenuDock->AddFrame(fMenuBar, fMenuBarLayout);

   // Create TGCanvas and a canvas container which uses a tile layout manager
   fCanvasWindow = new TGCanvas(fMain, 400, 240);
   fContainer = new TileFrame(fCanvasWindow->GetViewPort());
   fContainer->SetCanvas(fCanvasWindow);
   fCanvasWindow->SetContainer(fContainer->GetFrame());

   // use hierarchical cleaning for container
   fContainer->GetFrame()->SetCleanup(kDeepCleanup);

   // Fill canvas with 256 colored frames
   for (int i=0; i < 256; ++i)
      fCanvasWindow->AddFrame(new TGFrame(fCanvasWindow->GetContainer(),
                              32, 32, 0, TColor::RGB2Pixel(0,0,(i+1)&255)),
                              new TGLayoutHints(kLHintsExpandY | kLHintsRight));

   fMain->AddFrame(fCanvasWindow, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,
                                                    0, 0, 2, 2));

   // Create status frame containing a button and a text entry widget
   fStatusFrame = new TGCompositeFrame(fMain, 60, 20, kHorizontalFrame |
                                                      kSunkenFrame);

   fTestButton = new TGTextButton(fStatusFrame, "&Open editor...", 150);
   fTestButton->Connect("Clicked()", "TestMainFrame", this, "DoButton()");
   fTestButton->SetToolTipText("Pops up\ntext editor");
   fStatusFrame->AddFrame(fTestButton, new TGLayoutHints(kLHintsTop |
                          kLHintsLeft, 2, 0, 2, 2));
   fTestText = new TGTextEntry(fStatusFrame, new TGTextBuffer(100));
   fTestText->SetToolTipText("This is a text entry widget");
   fTestText->Resize(300, fTestText->GetDefaultHeight());
   fStatusFrame->AddFrame(fTestText, new TGLayoutHints(kLHintsTop | kLHintsLeft,
                                                       10, 2, 2, 2));
   Pixel_t yellow;
   gClient->GetColorByName("yellow", yellow);
   fColorSel = new TGColorSelect(fStatusFrame, yellow, 0);
   fStatusFrame->AddFrame(fColorSel, new TGLayoutHints(kLHintsTop |
                          kLHintsLeft, 2, 0, 2, 2));

   fMain->AddFrame(fStatusFrame, new TGLayoutHints(kLHintsBottom | kLHintsExpandX,
                   0, 0, 1, 0));

   fMain->SetWindowName("GuiTest Signal/Slots");

   fMain->MapSubwindows();

   // we need to use GetDefault...() to initialize the layout algorithm...
   fMain->Resize();
   fMain->MapWindow();
   fMain->Print();
   Connect("Created()", "TestMainFrame", this, "Welcome()");
   Created();
}

TestMainFrame::~TestMainFrame()
{
   // Delete all created widgets.

   delete fMenuFile;
   delete fMenuTest;
   delete fMenuView;
   delete fMenuHelp;
   delete fCascadeMenu;
   delete fCascade1Menu;
   delete fCascade2Menu;
   delete fMenuNew1;
   delete fMenuNew2;

   delete fContainer;
   delete fMain;
}

void TestMainFrame::CloseWindow()
{
   // Got close message for this MainFrame. Terminates the application.

   gApplication->Terminate();
}

void TestMainFrame::DoButton()
{
   // Handle button click.

   Editor *ed = new Editor(fMain, 600, 400);
   ed->LoadBuffer(editortxt1);
   ed->AddBuffer(editortxt2);
   ed->AddBuffer(editortxt3);
   ed->AddBuffer(editortxt4);
   ed->AddBuffer(editortxt5);
   ed->AddBuffer(editortxt6);
   ed->Popup();
}

void TestMainFrame::HandleMenu(Int_t id)
{
   // Handle menu items.

   switch (id) {

      case M_FILE_OPEN:
         {
            static TString dir(".");
            TGFileInfo fi;
            fi.fFileTypes = filetypes;
            fi.fIniDir    = StrDup(dir);
            printf("fIniDir = %s\n", fi.fIniDir);
            new TGFileDialog(gClient->GetRoot(), fMain, kFDOpen, &fi);
            printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir);
            dir = fi.fIniDir;
         }
         break;

      case M_FILE_SAVE:
         printf("M_FILE_SAVE\n");
         break;

      case M_FILE_PRINT:
         printf("M_FILE_PRINT\n");
         printf("Hiding itself, select \"Print Setup...\" to enable again\n");
         fMenuFile->HideEntry(M_FILE_PRINT);
         break;

      case M_FILE_PRINTSETUP:
         printf("M_FILE_PRINTSETUP\n");
         printf("Enabling \"Print\"\n");
         fMenuFile->EnableEntry(M_FILE_PRINT);
         break;

      case M_FILE_EXIT:
         CloseWindow();   // terminate theApp no need to use SendCloseMessage()
         break;

      case M_TEST_DLG:
         new TestDialog(gClient->GetRoot(), fMain, 400, 200);
         break;

      case M_TEST_MSGBOX:
         new TestMsgBox(gClient->GetRoot(), fMain, 400, 200);
         break;

      case M_TEST_SLIDER:
         new TestSliders(gClient->GetRoot(), fMain, 400, 200);
         break;

      case M_TEST_SHUTTER:
         new TestShutter(gClient->GetRoot(), fMain, 400, 200);
         break;

      case M_TEST_DIRLIST:
         new TestDirList(gClient->GetRoot(), fMain, 400, 200);
         break;

     case M_TEST_FILELIST:
         new TestFileList(gClient->GetRoot(), fMain, 400, 200);
         break;

      case M_TEST_PROGRESS:
         new TestProgress(gClient->GetRoot(), fMain, 600, 300);
         break;

      case M_TEST_NUMBERENTRY:
         new EntryTestDlg(gClient->GetRoot(), fMain);
         break;

      case M_TEST_FONTDIALOG:
         {
            TGFontDialog::FontProp_t prop;
            new TGFontDialog(gClient->GetRoot(), fMain, &prop);
            if (prop.fName != "")
               printf("Selected font: %s, size %d, italic %s, bold %s, color 0x%lx, align %u\n",
                      prop.fName.Data(), prop.fSize, prop.fItalic ? "yes" : "no",
                      prop.fBold ? "yes" : "no", prop.fColor, prop.fAlign);
         }
         break;

      case M_TEST_NEWMENU:
         {
            if (fMenuTest->IsEntryChecked(M_TEST_NEWMENU)) {
               HandleMenu(M_NEW_REMOVEMENU);
               return;
            }
            fMenuTest->CheckEntry(M_TEST_NEWMENU);
            TGPopupMenu *p = fMenuBar->GetPopup("Test");
            fMenuBar->AddPopup("New 1", fMenuNew1, fMenuBarItemLayout, p);
            p = fMenuBar->GetPopup("Help");
            fMenuBar->AddPopup("New 2", fMenuNew2, fMenuBarItemLayout, p);
            fMenuBar->MapSubwindows();
            fMenuBar->Layout();

            TGMenuEntry *e = fMenuTest->GetEntry("Add New Menus");
            fMenuTest->AddEntry("Remove New Menus", M_NEW_REMOVEMENU, 0, 0, e);
         }
         break;

      case M_NEW_REMOVEMENU:
         {
            fMenuBar->RemovePopup("New 1");
            fMenuBar->RemovePopup("New 2");
            fMenuBar->Layout();
            fMenuTest->DeleteEntry(M_NEW_REMOVEMENU);
            fMenuTest->UnCheckEntry(M_TEST_NEWMENU);
         }
         break;

      case M_VIEW_ENBL_DOCK:
         fMenuDock->EnableUndock(!fMenuDock->EnableUndock());
         if (fMenuDock->EnableUndock()) {
            fMenuView->CheckEntry(M_VIEW_ENBL_DOCK);
            fMenuView->EnableEntry(M_VIEW_UNDOCK);
         } else {
            fMenuView->UnCheckEntry(M_VIEW_ENBL_DOCK);
            fMenuView->DisableEntry(M_VIEW_UNDOCK);
         }
         break;

      case M_VIEW_ENBL_HIDE:
         fMenuDock->EnableHide(!fMenuDock->EnableHide());
         if (fMenuDock->EnableHide()) {
            fMenuView->CheckEntry(M_VIEW_ENBL_HIDE);
         } else {
            fMenuView->UnCheckEntry(M_VIEW_ENBL_HIDE);
         }
         break;

       case M_VIEW_DOCK:
         fMenuDock->DockContainer();
         fMenuView->EnableEntry(M_VIEW_UNDOCK);
         fMenuView->DisableEntry(M_VIEW_DOCK);
         break;

       case M_VIEW_UNDOCK:
         fMenuDock->UndockContainer();
         fMenuView->EnableEntry(M_VIEW_DOCK);
         fMenuView->DisableEntry(M_VIEW_UNDOCK);
         break;

      default:
         printf("Menu item %d selected\n", id);
         break;
   }
}


TestDialog::TestDialog(const TGWindow *p, const TGWindow *main, UInt_t w,
                       UInt_t h, UInt_t options)
{
   // Create a dialog window. A dialog window pops up with respect to its
   // "main" window.

   fMain = new TGTransientFrame(p, main, w, h, options);
   fMain->Connect("CloseWindow()", "TestDialog", this, "DoClose()");
   fMain->DontCallClose(); // to avoid double deletions.

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   fFrame1 = new TGHorizontalFrame(fMain, 60, 20, kFixedWidth);

   fOkButton = new TGTextButton(fFrame1, "&Ok", 1);
   fOkButton->Connect("Clicked()", "TestDialog", this, "DoOK()");
   fCancelButton = new TGTextButton(fFrame1, "&Cancel", 2);
   fCancelButton->Connect("Clicked()", "TestDialog", this, "DoCancel()");

   fL1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,
                           2, 2, 2, 2);
   fL2 = new TGLayoutHints(kLHintsBottom | kLHintsRight, 2, 2, 5, 1);

   fFrame1->AddFrame(fOkButton, fL1);
   fFrame1->AddFrame(fCancelButton, fL1);

   fFrame1->Resize(150, fOkButton->GetDefaultHeight());
   fMain->AddFrame(fFrame1, fL2);

   //--------- create Tab widget and some composite frames for Tab testing

   fTab = new TGTab(fMain, 300, 300);
   fTab->Connect("Selected(Int_t)", "TestDialog", this, "DoTab(Int_t)");

   fL3 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5);

   TGCompositeFrame *tf = fTab->AddTab("Tab 1");
   fF1 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame);
   fF1->AddFrame(new TGTextButton(fF1, "&Test button", 0), fL3);
   fF1->AddFrame(fTxt1 = new TGTextEntry(fF1, new TGTextBuffer(100)), fL3);
   fF1->AddFrame(fTxt2 = new TGTextEntry(fF1, new TGTextBuffer(100)), fL3);
   tf->AddFrame(fF1, fL3);
   fTxt1->Resize(150, fTxt1->GetDefaultHeight());
   fTxt2->Resize(150, fTxt2->GetDefaultHeight());

   tf = fTab->AddTab("Tab 2");
   fL1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,
                           200, 2, 2, 2);
   fF2 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame);
   fF2->AddFrame(fBtn1 = new TGTextButton(fF2, "&Button 1", 61), fL1);
   fF2->AddFrame(fBtn2 = new TGTextButton(fF2, "B&utton 2", 62), fL1);
   fF2->AddFrame(fChk1 = new TGCheckButton(fF2, "C&heck 1", 71), fL1);
   fF2->AddFrame(fChk2 = new TGCheckButton(fF2, "Chec&k 2", 72), fL1);
   fF2->AddFrame(fRad1 = new TGRadioButton(fF2, "&Radio 1", 81), fL1);
   fF2->AddFrame(fRad2 = new TGRadioButton(fF2, "R&adio 2", 82), fL1);
   fCombo = new TGComboBox(fF2, 88);
   fF2->AddFrame(fCombo, fL3);

   tf->AddFrame(fF2, fL3);

   int i;
   char tmp[20];
   for (i = 0; i < 20; i++) {

      sprintf(tmp, "Entry %i", i+1);
      fCombo->AddEntry(tmp, i+1);
   }

   fCombo->Resize(150, 20);

   fBtn1->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   fBtn2->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   fChk1->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   fChk2->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   fRad1->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   fRad2->Connect("Clicked()", "TestDialog", this, "HandleButtons()");

   //-------------- embedded canvas demo
   fFillHistos = kFALSE;
   fHpx   = 0;
   fHpxpy = 0;

   tf = fTab->AddTab("Tab 3");
   fF3 = new TGCompositeFrame(tf, 60, 20, kHorizontalFrame);
   fStartB = new TGTextButton(fF3, "Start &Filling Hists", 40);
   fStopB  = new TGTextButton(fF3, "&Stop Filling Hists", 41);
   fStartB->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   fStopB->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   fF3->AddFrame(fStartB, fL3);
   fF3->AddFrame(fStopB, fL3);

   fF5 = new TGCompositeFrame(tf, 60, 60, kHorizontalFrame);

   fL4 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX |
                           kLHintsExpandY, 5, 5, 5, 5);
   fEc1 = new TRootEmbeddedCanvas("ec1", fF5, 100, 100);
   fF5->AddFrame(fEc1, fL4);
   fEc2 = new TRootEmbeddedCanvas("ec2", fF5, 100, 100);
   fF5->AddFrame(fEc2, fL4);

   tf->AddFrame(fF3, fL3);
   tf->AddFrame(fF5, fL4);

   fEc1->GetCanvas()->SetBorderMode(0);
   fEc2->GetCanvas()->SetBorderMode(0);
   fEc1->GetCanvas()->SetBit(kNoContextMenu);
   fEc1->GetCanvas()->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)",
                              "TestDialog", this,
                              "HandleEmbeddedCanvas(Int_t,Int_t,Int_t,TObject*)");

   // make tab yellow
   Pixel_t yellow;
   gClient->GetColorByName("yellow", yellow);
   TGTabElement *tabel = fTab->GetTabTab("Tab 3");
   tabel->ChangeBackground(yellow);

   //-------------- end embedded canvas demo

   TGTextButton *bt;
   tf = fTab->AddTab("Tab 4");
   fF4 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame);
   fF4->AddFrame(bt = new TGTextButton(fF4, "A&dd Entry", 90), fL3);
   bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()");

   fF4->AddFrame(bt = new TGTextButton(fF4, "Remove &Entry", 91), fL3);
   bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()");

   fF4->AddFrame(fListBox = new TGListBox(fF4, 89), fL3);
   fF4->AddFrame(fCheckMulti = new TGCheckButton(fF4, "&Mutli Selectable", 92), fL3);
   fCheckMulti->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   tf->AddFrame(fF4, fL3);

   for (i = 0; i < 20; ++i)  {
      sprintf(tmp, "Entry %i", i);
      fListBox->AddEntry(tmp, i);
   }
   fFirstEntry = 0;
   fLastEntry  = 20;

   fListBox->Resize(150, 80);

   //--- tab 5
   tf = fTab->AddTab("Tab 5");
   tf->SetLayoutManager(new TGHorizontalLayout(tf));

   fF6 = new TGGroupFrame(tf, "Options", kVerticalFrame);
   fF6->SetTitlePos(TGGroupFrame::kRight); // right aligned
   tf->AddFrame(fF6, fL3);

   // 2 column, n rows
   fF6->SetLayoutManager(new TGMatrixLayout(fF6, 0, 2, 10));
   char buff[100];
   int j;
   for (j = 0; j < 4; j++) {
      sprintf(buff, "Module %i", j+1);
      fF6->AddFrame(new TGLabel(fF6, new TGHotString(buff)));

      TGTextBuffer *tbuf = new TGTextBuffer(10);
      tbuf->AddText(0, "0.0");

      TGTextEntry  *tent = new TGTextEntry(fF6, tbuf);
      tent->Resize(50, tent->GetDefaultHeight());
      tent->SetFont("-adobe-courier-bold-r-*-*-14-*-*-*-*-*-iso8859-1");
      fF6->AddFrame(tent);
   }
   fF6->Resize();

   // another matrix with text and buttons
   fF7 = new TGGroupFrame(tf, "Tab Handling", kVerticalFrame);
   tf->AddFrame(fF7, fL3);

   fF7->SetLayoutManager(new TGMatrixLayout(fF7, 0, 1, 10));

   fF7->AddFrame(bt = new TGTextButton(fF7, "Remove Tab", 101));
   bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   bt->Resize(90, bt->GetDefaultHeight());

   fF7->AddFrame(bt = new TGTextButton(fF7, "Add Tab", 103));
   bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   bt->Resize(90, bt->GetDefaultHeight());

   fF7->AddFrame(bt = new TGTextButton(fF7, "Remove Tab 5", 102));
   bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()");
   bt->Resize(90, bt->GetDefaultHeight());

   fF7->Resize(fF6->GetDefaultSize());

   //--- end of last tab

   TGLayoutHints *fL5 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
                                          kLHintsExpandY, 2, 2, 5, 1);
   fMain->AddFrame(fTab, fL5);

   fMain->MapSubwindows();
   fMain->Resize();

   // position relative to the parent's window
   fMain->CenterOnParent();

   fMain->SetWindowName("Dialog");

   fMain->MapWindow();
   //gClient->WaitFor(fMain);    // otherwise canvas contextmenu does not work
}

TestDialog::~TestDialog()
{
   // Delete test dialog widgets.

   fMain->DeleteWindow();  // deletes fMain
}

void TestDialog::FillHistos()
{
   // Fill histograms till user clicks "Stop Filling" button.

   static int cnt;

   if (!fHpx) {
      fHpx   = new TH1F("hpx","This is the px distribution",100,-4,4);
      fHpxpy = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4);
      fHpx->SetFillColor(kRed);
      cnt = 0;
   }

   const int kUPDATE = 1000;
   float px, py;
   TCanvas *c1 = fEc1->GetCanvas();
   TCanvas *c2 = fEc2->GetCanvas();

   while (fFillHistos) {
      gRandom->Rannor(px,py); //px and py will be two gaussian random numbers
      fHpx->Fill(px);
      fHpxpy->Fill(px,py);
      cnt++;
      if (!(cnt % kUPDATE)) {
         if (cnt == kUPDATE) {
            c1->cd();
            fHpx->Draw();
            c2->cd();
            fHpxpy->Draw("cont");
         }
         c1->Modified();
         c1->Update();
         c2->Modified();
         c2->Update();
         gSystem->ProcessEvents();  // handle GUI events
      }
   }
}

void TestDialog::DoClose()
{
   printf("\nTerminating dialog: via window manager\n");
   if (fFillHistos) {
      fFillHistos = kFALSE;
      TTimer::SingleShot(150, "TestDialog", this, "CloseWindow()");
   } else
      CloseWindow();

   // Close the Ged editor if it was activated.
   if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0)
      TVirtualPadEditor::Terminate();
}

void TestDialog::CloseWindow()
{
   // Called when window is closed via the window manager.

   delete this;
}

void TestDialog::DoOK()
{
   fFillHistos = kFALSE;
   printf("\nTerminating dialog: OK pressed\n");
   // Add protection against double-clicks
   fOkButton->SetState(kButtonDisabled);
   fCancelButton->SetState(kButtonDisabled);

   // Send a close message to the main frame. This will trigger the
   // emission of a CloseWindow() signal, which will then call
   // TestDialog::CloseWindow(). Calling directly CloseWindow() will cause
   // a segv since the OK button is still accessed after the DoOK() method.
   // This works since the close message is handled synchronous (via
   // message going to/from X server).
   //fMain->SendCloseMessage();

   // The same effect can be obtained by using a singleshot timer:
   TTimer::SingleShot(150, "TestDialog", this, "CloseWindow()");

   // Close the Ged editor if it was activated.
   if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0)
      TVirtualPadEditor::Terminate();
}


void TestDialog::DoCancel()
{
   fFillHistos = kFALSE;
   printf("\nTerminating dialog: Cancel pressed\n");
   // Add protection against double-clicks
   fOkButton->SetState(kButtonDisabled);
   fCancelButton->SetState(kButtonDisabled);
   TTimer::SingleShot(150, "TestDialog", this, "CloseWindow()");
   // Close the Ged editor if it was activated.
   if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0)
      TVirtualPadEditor::Terminate();
}

void TestDialog::HandleButtons(Int_t id)
{
   // Handle different buttons.

   if (id == -1) {
      TGButton *btn = (TGButton *) gTQSender;
      id = btn->WidgetId();
   }

   printf("DoButton: id = %d\n", id);

   char tmp[20];
   static int newtab = 0;

   switch (id) {
      case 40:  // start histogram filling
         fFillHistos = kTRUE;
         FillHistos();
         break;
      case 41:  // stop histogram filling
         fFillHistos = kFALSE;
         break;
      case 61:  // show item 1 in the combo box
         fCombo->Select(1);
         break;
      case 62:  // show item 2 in the combo box
         fCombo->Select(2);
         break;
      case 90:  // add one entry in list box
         fLastEntry++;
         sprintf(tmp, "Entry %i", fLastEntry);
         fListBox->AddEntry(tmp, fLastEntry);
         fListBox->MapSubwindows();
         fListBox->Layout();
         break;
      case 91:  // remove one entry in list box
         if (fFirstEntry <= fLastEntry) {
            fListBox->RemoveEntry(fFirstEntry);
            fListBox->Layout();
            fFirstEntry++;
         }
         break;
      case 101:  // remove tabs
         {
            TString s = fTab->GetTabTab(0)->GetString();
            if ((s == "Tab 3") && (fMain->MustCleanup() != kDeepCleanup)) {
               // Need to delete the embedded canvases
               // since RemoveTab() will Destroy the container
               // window, which in turn will destroy the embedded
               // canvas windows.
               delete fEc1; fEc1 = 0;
               delete fEc2; fEc2 = 0;
            }
            fTab->RemoveTab(0);
            fTab->Layout();
         }
         break;
      case 102:  // remove tab 5
         {
            int nt = fTab->GetNumberOfTabs();
            for (int i = 0 ; i < nt; i++) {
               TString s = fTab->GetTabTab(i)->GetString();
               if (s == "Tab 5") {
                  fTab->RemoveTab(i);
                  fTab->Layout();
                  break;
               }
            }
         }
         break;
      case 103:  // add tabs
         sprintf(tmp, "New Tab %d", ++newtab);
         fTab->AddTab(tmp);
         fTab->MapSubwindows();
         fTab->Layout();
         break;
      case 81:
         fRad2->SetState(kButtonUp);
         break;
      case 82:
         fRad1->SetState(kButtonUp);
         break;
      case 92:
         fListBox->SetMultipleSelections(fCheckMulti->GetState());
         break;
      default:
         break;
   }
}

void TestDialog::DoTab(Int_t id)
{
   printf("Tab item %d activated\n", id);
}

void TestDialog::HandleEmbeddedCanvas(Int_t event, Int_t x, Int_t y,
                                      TObject *sel)
{
   // Handle events in the left embedded canvas.

   if (event == kButton3Down)
      printf("event = %d, x = %d, y = %d, obj = %s::%s\n", event, x, y,
             sel->IsA()->GetName(), sel->GetName());
}

TestMsgBox::TestMsgBox(const TGWindow *p, const TGWindow *main,
                       UInt_t w, UInt_t h, UInt_t options) :
     fRedTextGC(TGButton::GetDefaultGC())
{
   // Create message box test dialog. Use this dialog to select the different
   // message dialog box styles and show the message dialog by clicking the
   // "Test" button.

   fMain = new TGTransientFrame(p, main, w, h, options);
   fMain->Connect("CloseWindow()", "TestMsgBox", this, "CloseWindow()");
   fMain->DontCallClose(); // to avoid double deletions.

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   //------------------------------
   // Set foreground color in graphics context for drawing of
   // TGlabel and TGButtons with text in red.

   Pixel_t red;
   gClient->GetColorByName("red", red);
   fRedTextGC.SetForeground(red);
   //---------------------------------

   int i;

   fMain->ChangeOptions((fMain->GetOptions() & ~kVerticalFrame) | kHorizontalFrame);

   f1 = new TGCompositeFrame(fMain, 60, 20, kVerticalFrame | kFixedWidth);
   f2 = new TGCompositeFrame(fMain, 60, 20, kVerticalFrame);
   f3 = new TGCompositeFrame(f2, 60, 20, kHorizontalFrame);
   f4 = new TGCompositeFrame(f2, 60, 20, kHorizontalFrame);
   f5 = new TGCompositeFrame(f2, 60, 20, kHorizontalFrame);

   fTestButton = new TGTextButton(f1, "&Test", 1, fRedTextGC());
   fTestButton->Connect("Clicked()", "TestMsgBox", this, "DoTest()");

   // Change background of fTestButton to green
   Pixel_t green;
   gClient->GetColorByName("green", green);
   fTestButton->ChangeBackground(green);

   fCloseButton = new TGTextButton(f1, "&Close", 2);
   fCloseButton->Connect("Clicked()", "TestMsgBox", this, "DoClose()");

   fPictButton = new TGPictureButton(f1, gClient->GetPicture("mb_stop_s.xpm"));

   f1->Resize(fTestButton->GetDefaultWidth()+40, fMain->GetDefaultHeight());

   fL1 = new TGLayoutHints(kLHintsTop | kLHintsExpandX,
                           2, 2, 3, 0);
   fL2 = new TGLayoutHints(kLHintsTop | kLHintsRight | kLHintsExpandX,
                           2, 5, 0, 2);
   fL21 = new TGLayoutHints(kLHintsTop | kLHintsRight,
                            2, 5, 10, 0);

   f1->AddFrame(fTestButton, fL1);
   f1->AddFrame(fCloseButton, fL1);
   f1->AddFrame(fPictButton, fL1);
   fMain->AddFrame(f1, fL21);

   //--------- create check and radio buttons groups

   fG1 = new TGGroupFrame(f3, new TGString("Buttons"),kVerticalFrame|kRaisedFrame);
   fG2 = new TGGroupFrame(f3, new TGString("Icons"),kVerticalFrame|kRaisedFrame);

   fL3 = new TGLayoutHints(kLHintsTop | kLHintsLeft |
                           kLHintsExpandX | kLHintsExpandY,
                           2, 2, 2, 2);
   fL4 = new TGLayoutHints(kLHintsTop | kLHintsLeft,
                           0, 0, 5, 0);

   fC[0]  = new TGCheckButton(fG1, new TGHotString("Yes"),        -1);
   fC[1]  = new TGCheckButton(fG1, new TGHotString("No"),         -1);
   fC[2]  = new TGCheckButton(fG1, new TGHotString("OK"),         -1);
   fC[3]  = new TGCheckButton(fG1, new TGHotString("Apply"),      -1);
   fC[4]  = new TGCheckButton(fG1, new TGHotString("Retry"),      -1);
   fC[5]  = new TGCheckButton(fG1, new TGHotString("Ignore"),     -1);
   fC[6]  = new TGCheckButton(fG1, new TGHotString("Cancel"),     -1);
   fC[7]  = new TGCheckButton(fG1, new TGHotString("Close"),      -1);
   fC[8]  = new TGCheckButton(fG1, new TGHotString("Yes to All"), -1);
   fC[9]  = new TGCheckButton(fG1, new TGHotString("No to All"),  -1);
   fC[10] = new TGCheckButton(fG1, new TGHotString("Newer Only"), -1);
   fC[11] = new TGCheckButton(fG1, new TGHotString("Append"),     -1);
   fC[12] = new TGCheckButton(fG1, new TGHotString("Dismiss"),    -1);

   for (i=0; i<13; ++i) fG1->AddFrame(fC[i], fL4);

   fR[0] = new TGRadioButton(fG2, new TGHotString("Stop"),        21);
   fR[1] = new TGRadioButton(fG2, new TGHotString("Question"),    22);
   fR[2] = new TGRadioButton(fG2, new TGHotString("Exclamation"), 23);
   fR[3] = new TGRadioButton(fG2, new TGHotString("Asterisk"),    24);

   for (i = 0; i < 4; ++i) {
      fG2->AddFrame(fR[i], fL4);
      fR[i]->Connect("Clicked()", "TestMsgBox", this, "DoRadio()");
   }

   fC[2]->SetState(kButtonDown);
   fR[0]->SetState(kButtonDown);

   f3->AddFrame(fG1, fL3);
   f3->AddFrame(fG2, fL3);

   fLtitle = new TGLabel(f4, new TGString("Title:"), fRedTextGC());
   fLmsg   = new TGLabel(f5, new TGString("Message:"));

   fTitle = new TGTextEntry(f4, fTbtitle = new TGTextBuffer(100));
   fMsg   = new TGTextEntry(f5, fTbmsg = new TGTextBuffer(100));

   fTbtitle->AddText(0, "MsgBox");
   fTbmsg->AddText(0, "This is a test message box.");

   fTitle->Resize(300, fTitle->GetDefaultHeight());
   fMsg->Resize(300, fMsg->GetDefaultHeight());

   fL5 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,
                           3, 5, 0, 0);
   fL6 = new TGLayoutHints(kLHintsRight | kLHintsCenterY,
                           0, 2, 0, 0);

   f4->AddFrame(fLtitle, fL5);
   f4->AddFrame(fTitle, fL6);
   f5->AddFrame(fLmsg, fL5);
   f5->AddFrame(fMsg, fL6);

   f2->AddFrame(f3, fL1);
   f2->AddFrame(f4, fL1);
   f2->AddFrame(f5, fL1);

   fMain->AddFrame(f2, fL2);

   fMain->MapSubwindows();
   fMain->Resize();

   // position relative to the parent's window
   fMain->CenterOnParent();

   fMain->SetWindowName("Message Box Test");

   fMain->MapWindow();
   gClient->WaitFor(fMain);
}

// Order is important when deleting frames. Delete children first,
// parents last.

TestMsgBox::~TestMsgBox()
{
   // Delete widgets created by dialog.

   fMain->DeleteWindow();  // deletes fMain
}

void TestMsgBox::CloseWindow()
{
   // Close dialog in response to window manager close.

   delete this;
}

void TestMsgBox::DoClose()
{
   // Handle Close button.

   CloseWindow();
}

void TestMsgBox::DoTest()
{
   // Handle test button.

   int i, buttons, retval;
   EMsgBoxIcon icontype = kMBIconStop;

   buttons = 0;
   for (i = 0; i < 13; i++)
      if (fC[i]->GetState() == kButtonDown)
         buttons |= mb_button_id[i];

   for (i = 0; i < 4; i++)
      if (fR[i]->GetState() == kButtonDown) {
         icontype = mb_icon[i];
         break;
      }

   // Since the message dialog box is created, we disable the
   // signal/slot communication mechanism, in order to ensure we
   // can't close the fMain window while the message box is open.
   fMain->Disconnect("CloseWindow()");
   fMain->Connect("CloseWindow()", "TestMsgBox", this, "TryToClose()");
   new TGMsgBox(gClient->GetRoot(), fMain,
                fTbtitle->GetString(), fTbmsg->GetString(),
                icontype, buttons, &retval);
   fMain->Disconnect("CloseWindow()");
   fMain->Connect("CloseWindow()", "TestMsgBox", this, "CloseWindow()");

}

void TestMsgBox::TryToClose()
{
   // The user try to close the main window,
   //  while a message dialog box is still open.
   printf("Can't close the window '%s' : a message box is still open\n", fMain->GetWindowName());
}

void TestMsgBox::DoRadio()
{
   // Handle radio buttons.

   TGButton *btn = (TGButton *) gTQSender;
   Int_t id = btn->WidgetId();

   if (id >= 21 && id <= 24) {
      for (int i = 0; i < 4; i++)
         if (fR[i]->WidgetId() != id)
            fR[i]->SetState(kButtonUp);
   }
}


TestSliders::TestSliders(const TGWindow *p, const TGWindow *main,
                         UInt_t w, UInt_t h)
{
   // Dialog used to test the different supported sliders.

   fMain = new TGTransientFrame(p, main, w, h);
   fMain->Connect("CloseWindow()", "TestSliders", this, "CloseWindow()");
   fMain->DontCallClose(); // to avoid double deletions.

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   fMain->ChangeOptions((fMain->GetOptions() & ~kVerticalFrame) | kHorizontalFrame);

   fVframe1 = new TGVerticalFrame(fMain, 0, 0, 0);

   fTeh1 = new TGTextEntry(fVframe1, fTbh1 = new TGTextBuffer(10), HId1);
   fTev1 = new TGTextEntry(fVframe1, fTbv1 = new TGTextBuffer(10), VId1);
   fTbh1->AddText(0, "0");
   fTbv1->AddText(0, "0");

   fTeh1->Connect("TextChanged(char*)", "TestSliders", this, "DoText(char*)");
   fTev1->Connect("TextChanged(char*)", "TestSliders", this, "DoText(char*)");

   fHslider1 = new TGHSlider(fVframe1, 100, kSlider1 | kScaleBoth, HSId1);
   fHslider1->Connect("PositionChanged(Int_t)", "TestSliders", this, "DoSlider(Int_t)");
   fHslider1->SetRange(0,50);

   fVslider1 = new TGVSlider(fVframe1, 100, kSlider2 | kScaleBoth, VSId1);
   fVslider1->Connect("PositionChanged(Int_t)", "TestSliders", this, "DoSlider(Int_t)");
   fVslider1->SetRange(0,8);

   fVframe1->Resize(100, 100);

   fVframe2 = new TGVerticalFrame(fMain, 0, 0, 0);
   fTeh2 = new TGTextEntry(fVframe2, fTbh2 = new TGTextBuffer(10), HId2);
   fTev2 = new TGTextEntry(fVframe2, fTbv2 = new TGTextBuffer(10), VId2);
   fTbh2->AddText(0, "0");
   fTbv2->AddText(0, "0");

   fTeh2->Connect("TextChanged(char*)", "TestSliders", this, "DoText(char*)");
   fTev2->Connect("TextChanged(char*)", "TestSliders", this, "DoText(char*)");

   fHslider2 = new TGHSlider(fVframe2, 150, kSlider2 | kScaleBoth, HSId2);
   fHslider2->Connect("PositionChanged(Int_t)", "TestSliders", this, "DoSlider(Int_t)");
   fHslider2->SetRange(0,3);

   fVslider2 = new TGDoubleVSlider(fVframe2, 100, kDoubleScaleBoth, VSId2);

   fVslider2->SetRange(-10,10);
   fVslider2->Connect("PositionChanged()", "TestSliders", this, "DoSlider()");
   fVframe2->Resize(100, 100);

   //--- layout for buttons: top align, equally expand horizontally
   fBly = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 3, 0);

   //--- layout for the frame: place at bottom, right aligned
   fBfly1 = new TGLayoutHints(kLHintsTop | kLHintsRight, 20, 10, 15, 0);

   fVframe1->AddFrame(fHslider1, fBly);
   fVframe1->AddFrame(fVslider1, fBly);
   fVframe1->AddFrame(fTeh1, fBly);
   fVframe1->AddFrame(fTev1, fBly);

   fVframe2->AddFrame(fHslider2, fBly);
   fVframe2->AddFrame(fVslider2, fBly);
   fVframe2->AddFrame(fTeh2, fBly);
   fVframe2->AddFrame(fTev2, fBly);

   fMain->AddFrame(fVframe2, fBfly1);
   fMain->AddFrame(fVframe1, fBfly1);

   fMain->SetWindowName("Slider Test");
   TGDimension size = fMain->GetDefaultSize();
   fMain->Resize(size);

   fMain->SetWMSize(size.fWidth, size.fHeight);
   fMain->SetWMSizeHints(size.fWidth, size.fHeight, size.fWidth, size.fHeight, 0, 0);
   fMain->SetMWMHints(kMWMDecorAll | kMWMDecorResizeH  | kMWMDecorMaximize |
                                     kMWMDecorMinimize | kMWMDecorMenu,
                      kMWMFuncAll |  kMWMFuncResize    | kMWMFuncMaximize |
                                     kMWMFuncMinimize,
                      kMWMInputModeless);

   // position relative to the parent's window
   fMain->CenterOnParent();

   fMain->MapSubwindows();
   fMain->MapWindow();

   gClient->WaitFor(fMain);
}

TestSliders::~TestSliders()
{
   // Delete dialog.

   fMain->DeleteWindow();  // deletes fMain
}

void TestSliders::CloseWindow()
{
   // Called when window is closed via the window manager.

   delete this;
}

void TestSliders::DoText(const char * /*text*/)
{
   // Handle text entry widgets.

   TGTextEntry *te = (TGTextEntry *) gTQSender;
   Int_t id = te->WidgetId();

   switch (id) {
      case HId1:
         fHslider1->SetPosition(atoi(fTbh1->GetString()));
         break;
      case VId1:
         fVslider1->SetPosition(atoi(fTbv1->GetString()));
         break;
      case HId2:
         fHslider2->SetPosition(atoi(fTbh2->GetString()));
         break;
      case VId2:
         fVslider2->SetPosition(atoi(fTbv2->GetString()),
                                     atoi(fTbv2->GetString())+2);
         break;
      default:
         break;
   }
}

void TestSliders::DoSlider(Int_t pos)
{
   // Handle slider widgets.

   Int_t id;
   TGFrame *frm = (TGFrame *) gTQSender;
   if (frm->IsA()->InheritsFrom(TGSlider::Class())) {
      TGSlider *sl = (TGSlider*) frm;
      id = sl->WidgetId();
   } else {
      TGDoubleSlider *sd = (TGDoubleSlider *) frm;
      id = sd->WidgetId();
   }

   char buf[32];
   sprintf(buf, "%d", pos);

#ifdef CINT_FIXED
   switch (id) {
   case HSId1:
#else
   if (id == HSId1) {
#endif
      fTbh1->Clear();
      fTbh1->AddText(0, buf);
      // Re-align the cursor with the characters.
      fTeh1->SetCursorPosition(fTeh1->GetCursorPosition());
      fTeh1->Deselect();
      gClient->NeedRedraw(fTeh1);
#ifdef CINT_FIXED
      break;
   case VSId1:
#else
   }
   else if (id == VSId1) {
#endif
      fTbv1->Clear();
      fTbv1->AddText(0, buf);
      fTev1->SetCursorPosition(fTev1->GetCursorPosition());
      fTev1->Deselect();
      gClient->NeedRedraw(fTev1);
#ifdef CINT_FIXED
      break;
   case HSId2:
#else
   }
   else if (id == HSId2) {
#endif
      fTbh2->Clear();
      fTbh2->AddText(0, buf);
      fTeh2->SetCursorPosition(fTeh2->GetCursorPosition());
      fTeh2->Deselect();
      gClient->NeedRedraw(fTeh2);
#ifdef CINT_FIXED
      break;
   case VSId2:
#else
   }
   else if (id == VSId2) {
#endif
      sprintf(buf, "%f", fVslider2->GetMinPosition());
      fTbv2->Clear();
      fTbv2->AddText(0, buf);
      fTev2->SetCursorPosition(fTev2->GetCursorPosition());
      fTev2->Deselect();
      gClient->NeedRedraw(fTev2);
#ifdef CINT_FIXED
      break;
   default:
      break;
#endif
   }
}


TestShutter::TestShutter(const TGWindow *p, const TGWindow *main,
                         UInt_t w, UInt_t h)
{
   // Create transient frame containing a shutter widget.

   fMain = new TGTransientFrame(p, main, w, h);
   fMain->Connect("CloseWindow()", "TestShutter", this, "CloseWindow()");
   fMain->DontCallClose(); // to avoid double deletions.

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   fDefaultPic = gClient->GetPicture("folder_s.xpm");
   fShutter = new TGShutter(fMain, kSunkenFrame);

   AddShutterItem("Histograms", histo_data);
   AddShutterItem("Functions", function_data);
   AddShutterItem("Trees", tree_data);

   fLayout = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
   fMain->AddFrame(fShutter, fLayout);

   fMain->MapSubwindows();
   fMain->Resize(80, 300);

   // position relative to the parent's window
   fMain->CenterOnParent();

   fMain->SetWindowName("Shutter Test");

   fMain->MapWindow();
   //gClient->WaitFor(fMain);
}

void TestShutter::AddShutterItem(const char *name, shutterData_t *data)
{
   TGShutterItem    *item;
   TGCompositeFrame *container;
   TGButton         *button;
   const TGPicture  *buttonpic;
   static int id = 5001;

   TGLayoutHints *l = new TGLayoutHints(kLHintsTop | kLHintsCenterX,
                                        5, 5, 5, 0);

   item = new TGShutterItem(fShutter, new TGHotString(name), id++);
   container = (TGCompositeFrame *) item->GetContainer();

   for (int i=0; data[i].pixmap_name != 0; i++) {
      buttonpic = gClient->GetPicture(data[i].pixmap_name);
      if (!buttonpic) {
         printf("<TestShutter::AddShutterItem>: missing pixmap \"%s\", using default",
                data[i].pixmap_name);
         buttonpic = fDefaultPic;
      }

      button = new TGPictureButton(container, buttonpic, data[i].id);

      container->AddFrame(button, l);
      button->Connect("Clicked()", "TestShutter", this, "HandleButtons()");
      button->SetToolTipText(data[i].tip_text);
      data[i].button = button;
   }

   fShutter->AddItem(item);
}

TestShutter::~TestShutter()
{
   // dtor

   gClient->FreePicture(fDefaultPic);
   fMain->DeleteWindow();  // deletes fMain
}

void TestShutter::CloseWindow()
{
   delete this;
}

void TestShutter::HandleButtons()
{
   TGButton *btn = (TGButton *) gTQSender;
   printf("Shutter button %d\n", btn->WidgetId());
}


TestDirList::TestDirList(const TGWindow *p, const TGWindow *main,
                         UInt_t w, UInt_t h)
{
   // Create transient frame containing a dirlist widget.

   fMain = new TGTransientFrame(p, main, w, h);
   fMain->Connect("CloseWindow()", "TestDirList", this, "CloseWindow()");
   fMain->DontCallClose(); // to avoid double deletions.

   fIcon = gClient->GetPicture("rootdb_t.xpm");
   TGLayoutHints *lo;

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   TGCanvas* canvas = new TGCanvas(fMain, 500, 300);
   fContents = new TGListTree(canvas, kHorizontalFrame);
   lo = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY | kLHintsBottom);
   fMain->AddFrame(canvas,lo);
   fContents->Connect("DoubleClicked(TGListTreeItem*,Int_t)","TestDirList",this,
                      "OnDoubleClick(TGListTreeItem*,Int_t)");
   fContents->Connect("Clicked(TGListTreeItem*,Int_t)","TestDirList",this,
                      "OnDoubleClick(TGListTreeItem*,Int_t)");
#ifdef G__WIN32
   fContents->AddItem(0,"c:\\");  // browse the upper directory
#else
   fContents->AddItem(0,"/");  // browse the upper directory
#endif

   // position relative to the parent's window
   fMain->CenterOnParent();

   fMain->SetWindowName("List Dir Test");

   fMain->MapSubwindows();
   fMain->Resize();
   fMain->MapWindow();
}

TestDirList::~TestDirList()
{
   // Cleanup.

   gClient->FreePicture(fIcon);
   delete fContents;
   fMain->DeleteWindow();  // delete fMain
}

void TestDirList::CloseWindow()
{
   delete this;
}

TString TestDirList::DirName(TGListTreeItem* item)
{
   // Returns an absolute path.

   TGListTreeItem* parent;
   TString dirname = item->GetText();

   while ((parent=item->GetParent())) {
      dirname = gSystem->ConcatFileName(parent->GetText(),dirname);
      item = parent;
   }

   return dirname;
}

void TestDirList::OnDoubleClick(TGListTreeItem* item, Int_t btn)
{
   // Show contents of directory.

   if ((btn!=kButton1) || !item || (Bool_t)item->GetUserData()) return;

   // use UserData to indicate that item was already browsed
   item->SetUserData((void*)1);

   TSystemDirectory dir(item->GetText(),DirName(item));

   TList *files = dir.GetListOfFiles();

   if (files) {
      TIter next(files);
      TSystemFile *file;
      TString fname;

      while ((file=(TSystemFile*)next())) {
         fname = file->GetName();
         if (file->IsDirectory()) {
            if ((fname!="..") && (fname!=".")) { // skip it
               fContents->AddItem(item,fname);
            }
         } else if (fname.EndsWith(".root")) {   // add root files
            fContents->AddItem(item,fname,fIcon,fIcon);
         }
      }
      delete files;
   }
}


TestFileList::TestFileList(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h)
{
   // Create transient frame containing a filelist widget.

   TGLayoutHints *lo;

   fMain = new TGTransientFrame(p, main, w, h);
   fMain->Connect("CloseWindow()", "TestDirList", this, "CloseWindow()");
   fMain->DontCallClose(); // to avoid double deletions.

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   TGMenuBar* mb = new TGMenuBar(fMain);
   lo = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 1, 1);
   fMain->AddFrame(mb, lo);

   fMenu = mb->AddPopup("&View");
   fMenu->AddEntry("Lar&ge Icons",kLVLargeIcons);
   fMenu->AddEntry("S&mall Icons",kLVSmallIcons);
   fMenu->AddEntry("&List",       kLVList);
   fMenu->AddEntry("&Details",    kLVDetails);
   fMenu->AddSeparator();
   fMenu->AddEntry("&Close",      10);
   fMenu->Connect("Activated(Int_t)","TestFileList",this,"DoMenu(Int_t)");

   TGListView* lv = new TGListView(fMain, w, h);
   lo = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
   fMain->AddFrame(lv,lo);

   Pixel_t white;
   gClient->GetColorByName("white", white);
   fContents = new TGFileContainer(lv, kSunkenFrame,white);
   fContents->Connect("DoubleClicked(TGFrame*,Int_t)", "TestFileList", this,
                      "OnDoubleClick(TGLVEntry*,Int_t)");

   // position relative to the parent's window
   fMain->CenterOnParent();

   fMain->SetWindowName("File List Test");
   fMain->MapSubwindows();
   fMain->MapWindow();
   fContents->SetDefaultHeaders();
   fContents->DisplayDirectory();
   fContents->AddFile("..");        // up level directory
   fContents->Resize();
   fContents->StopRefreshTimer();   // stop refreshing
   fMain->Resize();
}

TestFileList::~TestFileList()
{
   // Cleanup.

   delete fContents;
   delete fMenu;
   fMain->DeleteWindow();  // deletes fMain
}

void TestFileList::DoMenu(Int_t mode)
{
   // Switch view mode.

   if (mode<10) {
      fContents->SetViewMode((EListViewMode)mode);
   } else {
      delete this;
   }
}

void TestFileList::DisplayFile(const TString &fname)
{
   // Display content of ROOT file.

   TFile file(fname);
   fContents->RemoveAll();
   fContents->AddFile(gSystem->WorkingDirectory());
   fContents->SetPagePosition(0,0);
   fContents->SetColHeaders("Name","Title");

   TIter next(file.GetListOfKeys());
   TKey *key;

   while ((key=(TKey*)next())) {
      TString cname = key->GetClassName();
      TString name = key->GetName();
      TGLVEntry *entry = new TGLVEntry(fContents,name,cname);
      entry->SetSubnames(key->GetTitle());
      fContents->AddItem(entry);

      // user data is a filename
      entry->SetUserData((void*)StrDup(fname));
   }
   fMain->Resize();
}

void TestFileList::DisplayDirectory(const TString &fname)
{
   // Display content of directory.

   fContents->SetDefaultHeaders();
   gSystem->ChangeDirectory(fname);
   fContents->ChangeDirectory(fname);
   fContents->DisplayDirectory();
   fContents->AddFile("..");  // up level directory
   fMain->Resize();
}

void TestFileList::DisplayObject(const TString& fname,const TString& name)
{
   // Browse object located in file.

   TDirectory *sav = gDirectory;

   static TFile *file = 0;
   if (file) delete file;     // close
   file = new TFile(fname);   // reopen

   TObject* obj = file->Get(name);
   if (obj) {
      if (!obj->IsFolder()) {
         obj->Browse(0);
      } else obj->Print();
   }
   gDirectory = sav;
}

void TestFileList::OnDoubleClick(TGLVEntry *f, Int_t btn)
{
   // Handle double click.

   if (btn != kButton1) return;

   // set kWatch cursor
   ULong_t cur = gVirtualX->CreateCursor(kWatch);
   gVirtualX->SetCursor(fContents->GetId(), cur);

   TString name(f->GetTitle());
   const char* fname = (const char*)f->GetUserData();

   if (fname) {
      DisplayObject(fname, name);
   } else if (name.EndsWith(".root")) {
      DisplayFile(name);
   } else {
      DisplayDirectory(name);
   }
   // set kPointer cursor
   cur = gVirtualX->CreateCursor(kPointer);
   gVirtualX->SetCursor(fContents->GetId(), cur);
}

void TestFileList::CloseWindow()
{
   delete this;
}

TestProgress::TestProgress(const TGWindow *p, const TGWindow *main,
                           UInt_t w, UInt_t h)
{
   // Dialog used to test the different supported progress bars.

   fClose = kTRUE;

   fMain = new TGTransientFrame(p, main, w, h);
   fMain->Connect("CloseWindow()", "TestProgress", this, "DoClose()");
   fMain->DontCallClose();

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   fMain->ChangeOptions((fMain->GetOptions() & ~kVerticalFrame) | kHorizontalFrame);

   fHframe1 = new TGHorizontalFrame(fMain, 0, 0, 0);

   fVProg1 = new TGVProgressBar(fHframe1, TGProgressBar::kFancy, 300);
   fVProg1->SetBarColor("purple");
   fVProg2 = new TGVProgressBar(fHframe1, TGProgressBar::kFancy, 300);
   fVProg2->SetFillType(TGProgressBar::kBlockFill);
   fVProg2->SetBarColor("green");

   fHframe1->Resize(300, 300);

   fVframe1 = new TGVerticalFrame(fMain, 0, 0, 0);

   fHProg1 = new TGHProgressBar(fVframe1, 300);
   fHProg1->ShowPosition();
   fHProg2 = new TGHProgressBar(fVframe1, TGProgressBar::kFancy, 300);
   fHProg2->SetBarColor("lightblue");
   fHProg2->ShowPosition(kTRUE, kFALSE, "%.0f events");
   fHProg3 = new TGHProgressBar(fVframe1, TGProgressBar::kStandard, 300);
   fHProg3->SetFillType(TGProgressBar::kBlockFill);

   fGO = new TGTextButton(fVframe1, "Go", 10);
   fGO->Connect("Clicked()", "TestProgress", this, "DoGo()");

   fVframe1->Resize(300, 300);

   fHint1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 5, 10, 5, 5);
   fHint2 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, 5,  5, 10);
   fHint3 = new TGLayoutHints(kLHintsTop | kLHintsRight, 0, 50, 50, 0);
   fHint4 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0);
   fHint5 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0);

   fHframe1->AddFrame(fVProg1, fHint1);
   fHframe1->AddFrame(fVProg2, fHint1);

   fVframe1->AddFrame(fHProg1, fHint2);
   fVframe1->AddFrame(fHProg2, fHint2);
   fVframe1->AddFrame(fHProg3, fHint2);
   fVframe1->AddFrame(fGO,     fHint3);

   fMain->AddFrame(fHframe1, fHint4);
   fMain->AddFrame(fVframe1, fHint5);

   fMain->SetWindowName("Progress Test");
   TGDimension size = fMain->GetDefaultSize();
   fMain->Resize(size);

   // position relative to the parent's window
   fMain->CenterOnParent();

   fMain->MapSubwindows();
   fMain->MapWindow();

   gClient->WaitFor(fMain);
}

TestProgress::~TestProgress()
{
   // Delete dialog.

   fMain->DeleteWindow();   // deletes fMain
}

void TestProgress::CloseWindow()
{
   // Called when window is closed via the window manager.

   delete this;
}

void TestProgress::DoClose()
{
   // If fClose is false we are still in event processing loop in DoGo().
   // In that case, set the close flag true and use a timer to call
   // CloseWindow(). This gives us change to get out of the DoGo() loop.
   // Note: calling SendCloseMessage() will not work since that will
   // bring us back here (CloseWindow() signal is connected to this method)
   // with the fClose flag true, which will cause window deletion while
   // still being in the event processing loop (since SendCloseMessage()
   // is directly processed in ProcessEvents() without exiting DoGo()).

   if (fClose)
      CloseWindow();
   else {
      fClose = kTRUE;
      TTimer::SingleShot(150, "TestProgress", this, "CloseWindow()");
   }
}

void TestProgress::DoGo()
{
   // Handle Go button.

   fClose = kFALSE;
   fVProg1->Reset(); fVProg2->Reset();
   fHProg1->Reset(); fHProg2->Reset(); fHProg3->Reset();
   fVProg2->SetBarColor("green");
   int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
   int inc1 = 4, inc2 = 3, inc3 = 2, inc4 = 1;
   while (cnt1 < 100 || cnt2 < 100 || cnt3 < 100 || cnt4 <100) {
      if (cnt1 < 100) {
         cnt1 += inc1;
         fVProg1->Increment(inc1);
      }
      if (cnt2 < 100) {
         cnt2 += inc2;
         fVProg2->Increment(inc2);
         if (cnt2 > 75)
            fVProg2->SetBarColor("red");
      }
      if (cnt3 < 100) {
         cnt3 += inc3;
         fHProg1->Increment(inc3);
      }
      if (cnt4 < 100) {
         cnt4 += inc4;
         fHProg2->Increment(inc4);
         fHProg3->Increment(inc4);
      }
      gSystem->Sleep(100);
      gSystem->ProcessEvents();
      // if user closed window return
      if (fClose) return;
   }
   fClose = kTRUE;
}


// TGNumberEntry widget test dialog
//const char *const EntryTestDlg::numlabel[] = {
const char *numlabel[] = {
   "Integer",
   "One digit real",
   "Two digit real",
   "Three digit real",
   "Four digit real",
   "Real",
   "Degree.min.sec",
   "Min:sec",
   "Hour:min",
   "Hour:min:sec",
   "Day/month/year",
   "Month/day/year",
   "Hex"
};

//const Double_t EntryTestDlg::numinit[] = {
const Double_t numinit[] = {
   12345, 1.0, 1.00, 1.000, 1.0000, 1.2E-12,
   90 * 3600, 120 * 60, 12 * 60, 12 * 3600 + 15 * 60,
   19991121, 19991121, (Double_t) 0xDEADFACEU
};

EntryTestDlg::EntryTestDlg(const TGWindow *p, const TGWindow *main)
{
   // build widgets
   fMain = new TGTransientFrame(p, main, 10, 10, kHorizontalFrame);
   fMain->Connect("CloseWindow()", "EntryTestDlg", this, "CloseWindow()");
   fMain->DontCallClose(); // to avoid double deletions.

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   TGGC myGC = *gClient->GetResourcePool()->GetFrameGC();
   TGFont *myfont = gClient->GetFont("-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-1");
   if (myfont) myGC.SetFont(myfont->GetFontHandle());

   fF1 = new TGVerticalFrame(fMain, 200, 300);
   fL1 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2);
   fMain->AddFrame(fF1, fL1);
   fL2 = new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2);
   for (int i = 0; i < 13; i++) {
      fF[i] = new TGHorizontalFrame(fF1, 200, 30);
      fF1->AddFrame(fF[i], fL2);
      fNumericEntries[i] = new TGNumberEntry(fF[i], numinit[i], 12, i + 20,
                                             (TGNumberFormat::EStyle) i);
      fF[i]->AddFrame(fNumericEntries[i], fL2);
      fLabel[i] = new TGLabel(fF[i], numlabel[i], myGC(), myfont->GetFontStruct());
      fF[i]->AddFrame(fLabel[i], fL2);
   }
   fF2 = new TGVerticalFrame(fMain, 200, 500);
   fL3 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2);
   fMain->AddFrame(fF2, fL3);
   fLowerLimit = new TGCheckButton(fF2, "lower limit:", 4);
   fF2->AddFrame(fLowerLimit, fL3);
   fLimits[0] = new TGNumberEntry(fF2, 0, 12, 10);
   fLimits[0]->SetLogStep(kFALSE);
   fF2->AddFrame(fLimits[0], fL3);
   fUpperLimit = new TGCheckButton(fF2, "upper limit:", 5);
   fF2->AddFrame(fUpperLimit, fL3);
   fLimits[1] = new TGNumberEntry(fF2, 0, 12, 11);
   fLimits[1]->SetLogStep(kFALSE);
   fF2->AddFrame(fLimits[1], fL3);
   fPositive = new TGCheckButton(fF2, "Positive", 6);
   fF2->AddFrame(fPositive, fL3);
   fNonNegative = new TGCheckButton(fF2, "Non negative", 7);
   fF2->AddFrame(fNonNegative, fL3);
   fSetButton = new TGTextButton(fF2, " Set ", 2);
   fSetButton->Connect("Clicked()", "EntryTestDlg", this, "SetLimits()");
   fF2->AddFrame(fSetButton, fL3);
   fExitButton = new TGTextButton(fF2, " Close ", 1);
   fExitButton->Connect("Clicked()", "EntryTestDlg", this, "DoOK()");
   fF2->AddFrame(fExitButton, fL3);

   // set dialog box title
   fMain->SetWindowName("Number Entry Test");
   fMain->SetIconName("Number Entry Test");
   fMain->SetClassHints("NumberEntryDlg", "NumberEntryDlg");
   // resize & move to center
   fMain->MapSubwindows();
   UInt_t width = fMain->GetDefaultWidth();
   UInt_t height = fMain->GetDefaultHeight();
   fMain->Resize(width, height);
   fMain->CenterOnParent();
   // make the message box non-resizable
   fMain->SetWMSize(width, height);
   fMain->SetWMSizeHints(width, height, width, height, 0, 0);
   fMain->SetMWMHints(kMWMDecorAll | kMWMDecorResizeH | kMWMDecorMaximize |
                      kMWMDecorMinimize | kMWMDecorMenu,
                      kMWMFuncAll | kMWMFuncResize | kMWMFuncMaximize |
                      kMWMFuncMinimize, kMWMInputModeless);

   fMain->MapWindow();
   gClient->WaitFor(fMain);
}

EntryTestDlg::~EntryTestDlg()
{
   // dtor

   fMain->DeleteWindow();
}

void EntryTestDlg::CloseWindow()
{
   delete this;
}

void EntryTestDlg::DoOK()
{
   // Handle ok button.

   fMain->SendCloseMessage();
}

void EntryTestDlg::SetLimits()
{
   Double_t min = fLimits[0]->GetNumber();
   Bool_t low = (fLowerLimit->GetState() == kButtonDown);
   Double_t max = fLimits[1]->GetNumber();
   Bool_t high = (fUpperLimit->GetState() == kButtonDown);
   TGNumberFormat::ELimit lim;
   if (low && high) {
      lim = TGNumberFormat::kNELLimitMinMax;
   } else if (low) {
      lim = TGNumberFormat::kNELLimitMin;
   } else if (high) {
      lim = TGNumberFormat::kNELLimitMax;
   } else {
      lim = TGNumberFormat::kNELNoLimits;
   }
   Bool_t pos = (fPositive->GetState() == kButtonDown);
   Bool_t nneg = (fNonNegative->GetState() == kButtonDown);
   TGNumberFormat::EAttribute attr;
   if (pos) {
      attr = TGNumberFormat::kNEAPositive;
   } else if (nneg) {
      attr = TGNumberFormat::kNEANonNegative;
   } else {
      attr = TGNumberFormat::kNEAAnyNumber;
   }
   for (int i = 0; i < 13; i++) {
      fNumericEntries[i]->SetFormat(fNumericEntries[i]->GetNumStyle(), attr);
      fNumericEntries[i]->SetLimits(lim, min, max);
   }
}


Editor::Editor(const TGWindow *main, UInt_t w, UInt_t h)
{
   // Create an editor in a dialog.

   fMain = new TGTransientFrame(gClient->GetRoot(), main, w, h);
   fMain->Connect("CloseWindow()", "Editor", this, "CloseWindow()");
   fMain->DontCallClose(); // to avoid double deletions.

   // use hierarchical cleaning
   fMain->SetCleanup(kDeepCleanup);

   fEdit = new TGTextEdit(fMain, w, h, kSunkenFrame | kDoubleBorder);
   fL1 = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 3, 3, 3, 3);
   fMain->AddFrame(fEdit, fL1);
   fEdit->Connect("Opened()", "Editor", this, "DoOpen()");
   fEdit->Connect("Saved()",  "Editor", this, "DoSave()");
   fEdit->Connect("Closed()", "Editor", this, "DoClose()");

   // set selected text colors
   Pixel_t pxl;
   gClient->GetColorByName("#ccccff", pxl);
   fEdit->SetSelectBack(pxl);
   fEdit->SetSelectFore(TGFrame::GetBlackPixel());

   fOK = new TGTextButton(fMain, "  &OK  ");
   fOK->Connect("Clicked()", "Editor", this, "DoOK()");
   fL2 = new TGLayoutHints(kLHintsBottom | kLHintsCenterX, 0, 0, 5, 5);
   fMain->AddFrame(fOK, fL2);

   SetTitle();

   fMain->MapSubwindows();

   fMain->Resize();

   // editor covers right half of parent window
   fMain->CenterOnParent(kTRUE, TGTransientFrame::kRight);
}

Editor::~Editor()
{
   // Delete editor dialog.

   fMain->DeleteWindow();  // deletes fMain
}

void Editor::SetTitle()
{
   // Set title in editor window.

   TGText *txt = GetEditor()->GetText();
   Bool_t untitled = !strlen(txt->GetFileName()) ? kTRUE : kFALSE;

   char title[256];
   if (untitled)
      sprintf(title, "ROOT Editor - Untitled");
   else
      sprintf(title, "ROOT Editor - %s", txt->GetFileName());

   fMain->SetWindowName(title);
   fMain->SetIconName(title);
}

void Editor::Popup()
{
   // Show editor.

   fMain->MapWindow();
}

void Editor::LoadBuffer(const char *buffer)
{
   // Load a text buffer in the editor.

   fEdit->LoadBuffer(buffer);
}

void Editor::LoadFile(const char *file)
{
   // Load a file in the editor.

   fEdit->LoadFile(file);
}

void Editor::AddBuffer(const  char *buffer)
{
   // Add text to the editor.

   TGText txt;
   txt.LoadBuffer(buffer);
   fEdit->AddText(&txt);
}

void Editor::CloseWindow()
{
   // Called when closed via window manager action.

   delete this;
}

void Editor::DoOK()
{
   // Handle ok button.

   CloseWindow();
}

void Editor::DoOpen()
{
   SetTitle();
}

void Editor::DoSave()
{
   SetTitle();
}

void Editor::DoClose()
{
   // Handle close button.

   CloseWindow();
}


void guitest()
{
   new TestMainFrame(gClient->GetRoot(), 400, 220);
}

//---- Main program ------------------------------------------------------------
#ifdef STANDALONE
int main(int argc, char **argv)
{
   TApplication theApp("App", &argc, argv);

   if (gROOT->IsBatch()) {
      fprintf(stderr, "%s: cannot run in batch mode\n", argv[0]);
      return 1;
   }

   guitest();

   theApp.Run();

   return 0;
}
#endif
 guitest.C:1
 guitest.C:2
 guitest.C:3
 guitest.C:4
 guitest.C:5
 guitest.C:6
 guitest.C:7
 guitest.C:8
 guitest.C:9
 guitest.C:10
 guitest.C:11
 guitest.C:12
 guitest.C:13
 guitest.C:14
 guitest.C:15
 guitest.C:16
 guitest.C:17
 guitest.C:18
 guitest.C:19
 guitest.C:20
 guitest.C:21
 guitest.C:22
 guitest.C:23
 guitest.C:24
 guitest.C:25
 guitest.C:26
 guitest.C:27
 guitest.C:28
 guitest.C:29
 guitest.C:30
 guitest.C:31
 guitest.C:32
 guitest.C:33
 guitest.C:34
 guitest.C:35
 guitest.C:36
 guitest.C:37
 guitest.C:38
 guitest.C:39
 guitest.C:40
 guitest.C:41
 guitest.C:42
 guitest.C:43
 guitest.C:44
 guitest.C:45
 guitest.C:46
 guitest.C:47
 guitest.C:48
 guitest.C:49
 guitest.C:50
 guitest.C:51
 guitest.C:52
 guitest.C:53
 guitest.C:54
 guitest.C:55
 guitest.C:56
 guitest.C:57
 guitest.C:58
 guitest.C:59
 guitest.C:60
 guitest.C:61
 guitest.C:62
 guitest.C:63
 guitest.C:64
 guitest.C:65
 guitest.C:66
 guitest.C:67
 guitest.C:68
 guitest.C:69
 guitest.C:70
 guitest.C:71
 guitest.C:72
 guitest.C:73
 guitest.C:74
 guitest.C:75
 guitest.C:76
 guitest.C:77
 guitest.C:78
 guitest.C:79
 guitest.C:80
 guitest.C:81
 guitest.C:82
 guitest.C:83
 guitest.C:84
 guitest.C:85
 guitest.C:86
 guitest.C:87
 guitest.C:88
 guitest.C:89
 guitest.C:90
 guitest.C:91
 guitest.C:92
 guitest.C:93
 guitest.C:94
 guitest.C:95
 guitest.C:96
 guitest.C:97
 guitest.C:98
 guitest.C:99
 guitest.C:100
 guitest.C:101
 guitest.C:102
 guitest.C:103
 guitest.C:104
 guitest.C:105
 guitest.C:106
 guitest.C:107
 guitest.C:108
 guitest.C:109
 guitest.C:110
 guitest.C:111
 guitest.C:112
 guitest.C:113
 guitest.C:114
 guitest.C:115
 guitest.C:116
 guitest.C:117
 guitest.C:118
 guitest.C:119
 guitest.C:120
 guitest.C:121
 guitest.C:122
 guitest.C:123
 guitest.C:124
 guitest.C:125
 guitest.C:126
 guitest.C:127
 guitest.C:128
 guitest.C:129
 guitest.C:130
 guitest.C:131
 guitest.C:132
 guitest.C:133
 guitest.C:134
 guitest.C:135
 guitest.C:136
 guitest.C:137
 guitest.C:138
 guitest.C:139
 guitest.C:140
 guitest.C:141
 guitest.C:142
 guitest.C:143
 guitest.C:144
 guitest.C:145
 guitest.C:146
 guitest.C:147
 guitest.C:148
 guitest.C:149
 guitest.C:150
 guitest.C:151
 guitest.C:152
 guitest.C:153
 guitest.C:154
 guitest.C:155
 guitest.C:156
 guitest.C:157
 guitest.C:158
 guitest.C:159
 guitest.C:160
 guitest.C:161
 guitest.C:162
 guitest.C:163
 guitest.C:164
 guitest.C:165
 guitest.C:166
 guitest.C:167
 guitest.C:168
 guitest.C:169
 guitest.C:170
 guitest.C:171
 guitest.C:172
 guitest.C:173
 guitest.C:174
 guitest.C:175
 guitest.C:176
 guitest.C:177
 guitest.C:178
 guitest.C:179
 guitest.C:180
 guitest.C:181
 guitest.C:182
 guitest.C:183
 guitest.C:184
 guitest.C:185
 guitest.C:186
 guitest.C:187
 guitest.C:188
 guitest.C:189
 guitest.C:190
 guitest.C:191
 guitest.C:192
 guitest.C:193
 guitest.C:194
 guitest.C:195
 guitest.C:196
 guitest.C:197
 guitest.C:198
 guitest.C:199
 guitest.C:200
 guitest.C:201
 guitest.C:202
 guitest.C:203
 guitest.C:204
 guitest.C:205
 guitest.C:206
 guitest.C:207
 guitest.C:208
 guitest.C:209
 guitest.C:210
 guitest.C:211
 guitest.C:212
 guitest.C:213
 guitest.C:214
 guitest.C:215
 guitest.C:216
 guitest.C:217
 guitest.C:218
 guitest.C:219
 guitest.C:220
 guitest.C:221
 guitest.C:222
 guitest.C:223
 guitest.C:224
 guitest.C:225
 guitest.C:226
 guitest.C:227
 guitest.C:228
 guitest.C:229
 guitest.C:230
 guitest.C:231
 guitest.C:232
 guitest.C:233
 guitest.C:234
 guitest.C:235
 guitest.C:236
 guitest.C:237
 guitest.C:238
 guitest.C:239
 guitest.C:240
 guitest.C:241
 guitest.C:242
 guitest.C:243
 guitest.C:244
 guitest.C:245
 guitest.C:246
 guitest.C:247
 guitest.C:248
 guitest.C:249
 guitest.C:250
 guitest.C:251
 guitest.C:252
 guitest.C:253
 guitest.C:254
 guitest.C:255
 guitest.C:256
 guitest.C:257
 guitest.C:258
 guitest.C:259
 guitest.C:260
 guitest.C:261
 guitest.C:262
 guitest.C:263
 guitest.C:264
 guitest.C:265
 guitest.C:266
 guitest.C:267
 guitest.C:268
 guitest.C:269
 guitest.C:270
 guitest.C:271
 guitest.C:272
 guitest.C:273
 guitest.C:274
 guitest.C:275
 guitest.C:276
 guitest.C:277
 guitest.C:278
 guitest.C:279
 guitest.C:280
 guitest.C:281
 guitest.C:282
 guitest.C:283
 guitest.C:284
 guitest.C:285
 guitest.C:286
 guitest.C:287
 guitest.C:288
 guitest.C:289
 guitest.C:290
 guitest.C:291
 guitest.C:292
 guitest.C:293
 guitest.C:294
 guitest.C:295
 guitest.C:296
 guitest.C:297
 guitest.C:298
 guitest.C:299
 guitest.C:300
 guitest.C:301
 guitest.C:302
 guitest.C:303
 guitest.C:304
 guitest.C:305
 guitest.C:306
 guitest.C:307
 guitest.C:308
 guitest.C:309
 guitest.C:310
 guitest.C:311
 guitest.C:312
 guitest.C:313
 guitest.C:314
 guitest.C:315
 guitest.C:316
 guitest.C:317
 guitest.C:318
 guitest.C:319
 guitest.C:320
 guitest.C:321
 guitest.C:322
 guitest.C:323
 guitest.C:324
 guitest.C:325
 guitest.C:326
 guitest.C:327
 guitest.C:328
 guitest.C:329
 guitest.C:330
 guitest.C:331
 guitest.C:332
 guitest.C:333
 guitest.C:334
 guitest.C:335
 guitest.C:336
 guitest.C:337
 guitest.C:338
 guitest.C:339
 guitest.C:340
 guitest.C:341
 guitest.C:342
 guitest.C:343
 guitest.C:344
 guitest.C:345
 guitest.C:346
 guitest.C:347
 guitest.C:348
 guitest.C:349
 guitest.C:350
 guitest.C:351
 guitest.C:352
 guitest.C:353
 guitest.C:354
 guitest.C:355
 guitest.C:356
 guitest.C:357
 guitest.C:358
 guitest.C:359
 guitest.C:360
 guitest.C:361
 guitest.C:362
 guitest.C:363
 guitest.C:364
 guitest.C:365
 guitest.C:366
 guitest.C:367
 guitest.C:368
 guitest.C:369
 guitest.C:370
 guitest.C:371
 guitest.C:372
 guitest.C:373
 guitest.C:374
 guitest.C:375
 guitest.C:376
 guitest.C:377
 guitest.C:378
 guitest.C:379
 guitest.C:380
 guitest.C:381
 guitest.C:382
 guitest.C:383
 guitest.C:384
 guitest.C:385
 guitest.C:386
 guitest.C:387
 guitest.C:388
 guitest.C:389
 guitest.C:390
 guitest.C:391
 guitest.C:392
 guitest.C:393
 guitest.C:394
 guitest.C:395
 guitest.C:396
 guitest.C:397
 guitest.C:398
 guitest.C:399
 guitest.C:400
 guitest.C:401
 guitest.C:402
 guitest.C:403
 guitest.C:404
 guitest.C:405
 guitest.C:406
 guitest.C:407
 guitest.C:408
 guitest.C:409
 guitest.C:410
 guitest.C:411
 guitest.C:412
 guitest.C:413
 guitest.C:414
 guitest.C:415
 guitest.C:416
 guitest.C:417
 guitest.C:418
 guitest.C:419
 guitest.C:420
 guitest.C:421
 guitest.C:422
 guitest.C:423
 guitest.C:424
 guitest.C:425
 guitest.C:426
 guitest.C:427
 guitest.C:428
 guitest.C:429
 guitest.C:430
 guitest.C:431
 guitest.C:432
 guitest.C:433
 guitest.C:434
 guitest.C:435
 guitest.C:436
 guitest.C:437
 guitest.C:438
 guitest.C:439
 guitest.C:440
 guitest.C:441
 guitest.C:442
 guitest.C:443
 guitest.C:444
 guitest.C:445
 guitest.C:446
 guitest.C:447
 guitest.C:448
 guitest.C:449
 guitest.C:450
 guitest.C:451
 guitest.C:452
 guitest.C:453
 guitest.C:454
 guitest.C:455
 guitest.C:456
 guitest.C:457
 guitest.C:458
 guitest.C:459
 guitest.C:460
 guitest.C:461
 guitest.C:462
 guitest.C:463
 guitest.C:464
 guitest.C:465
 guitest.C:466
 guitest.C:467
 guitest.C:468
 guitest.C:469
 guitest.C:470
 guitest.C:471
 guitest.C:472
 guitest.C:473
 guitest.C:474
 guitest.C:475
 guitest.C:476
 guitest.C:477
 guitest.C:478
 guitest.C:479
 guitest.C:480
 guitest.C:481
 guitest.C:482
 guitest.C:483
 guitest.C:484
 guitest.C:485
 guitest.C:486
 guitest.C:487
 guitest.C:488
 guitest.C:489
 guitest.C:490
 guitest.C:491
 guitest.C:492
 guitest.C:493
 guitest.C:494
 guitest.C:495
 guitest.C:496
 guitest.C:497
 guitest.C:498
 guitest.C:499
 guitest.C:500
 guitest.C:501
 guitest.C:502
 guitest.C:503
 guitest.C:504
 guitest.C:505
 guitest.C:506
 guitest.C:507
 guitest.C:508
 guitest.C:509
 guitest.C:510
 guitest.C:511
 guitest.C:512
 guitest.C:513
 guitest.C:514
 guitest.C:515
 guitest.C:516
 guitest.C:517
 guitest.C:518
 guitest.C:519
 guitest.C:520
 guitest.C:521
 guitest.C:522
 guitest.C:523
 guitest.C:524
 guitest.C:525
 guitest.C:526
 guitest.C:527
 guitest.C:528
 guitest.C:529
 guitest.C:530
 guitest.C:531
 guitest.C:532
 guitest.C:533
 guitest.C:534
 guitest.C:535
 guitest.C:536
 guitest.C:537
 guitest.C:538
 guitest.C:539
 guitest.C:540
 guitest.C:541
 guitest.C:542
 guitest.C:543
 guitest.C:544
 guitest.C:545
 guitest.C:546
 guitest.C:547
 guitest.C:548
 guitest.C:549
 guitest.C:550
 guitest.C:551
 guitest.C:552
 guitest.C:553
 guitest.C:554
 guitest.C:555
 guitest.C:556
 guitest.C:557
 guitest.C:558
 guitest.C:559
 guitest.C:560
 guitest.C:561
 guitest.C:562
 guitest.C:563
 guitest.C:564
 guitest.C:565
 guitest.C:566
 guitest.C:567
 guitest.C:568
 guitest.C:569
 guitest.C:570
 guitest.C:571
 guitest.C:572
 guitest.C:573
 guitest.C:574
 guitest.C:575
 guitest.C:576
 guitest.C:577
 guitest.C:578
 guitest.C:579
 guitest.C:580
 guitest.C:581
 guitest.C:582
 guitest.C:583
 guitest.C:584
 guitest.C:585
 guitest.C:586
 guitest.C:587
 guitest.C:588
 guitest.C:589
 guitest.C:590
 guitest.C:591
 guitest.C:592
 guitest.C:593
 guitest.C:594
 guitest.C:595
 guitest.C:596
 guitest.C:597
 guitest.C:598
 guitest.C:599
 guitest.C:600
 guitest.C:601
 guitest.C:602
 guitest.C:603
 guitest.C:604
 guitest.C:605
 guitest.C:606
 guitest.C:607
 guitest.C:608
 guitest.C:609
 guitest.C:610
 guitest.C:611
 guitest.C:612
 guitest.C:613
 guitest.C:614
 guitest.C:615
 guitest.C:616
 guitest.C:617
 guitest.C:618
 guitest.C:619
 guitest.C:620
 guitest.C:621
 guitest.C:622
 guitest.C:623
 guitest.C:624
 guitest.C:625
 guitest.C:626
 guitest.C:627
 guitest.C:628
 guitest.C:629
 guitest.C:630
 guitest.C:631
 guitest.C:632
 guitest.C:633
 guitest.C:634
 guitest.C:635
 guitest.C:636
 guitest.C:637
 guitest.C:638
 guitest.C:639
 guitest.C:640
 guitest.C:641
 guitest.C:642
 guitest.C:643
 guitest.C:644
 guitest.C:645
 guitest.C:646
 guitest.C:647
 guitest.C:648
 guitest.C:649
 guitest.C:650
 guitest.C:651
 guitest.C:652
 guitest.C:653
 guitest.C:654
 guitest.C:655
 guitest.C:656
 guitest.C:657
 guitest.C:658
 guitest.C:659
 guitest.C:660
 guitest.C:661
 guitest.C:662
 guitest.C:663
 guitest.C:664
 guitest.C:665
 guitest.C:666
 guitest.C:667
 guitest.C:668
 guitest.C:669
 guitest.C:670
 guitest.C:671
 guitest.C:672
 guitest.C:673
 guitest.C:674
 guitest.C:675
 guitest.C:676
 guitest.C:677
 guitest.C:678
 guitest.C:679
 guitest.C:680
 guitest.C:681
 guitest.C:682
 guitest.C:683
 guitest.C:684
 guitest.C:685
 guitest.C:686
 guitest.C:687
 guitest.C:688
 guitest.C:689
 guitest.C:690
 guitest.C:691
 guitest.C:692
 guitest.C:693
 guitest.C:694
 guitest.C:695
 guitest.C:696
 guitest.C:697
 guitest.C:698
 guitest.C:699
 guitest.C:700
 guitest.C:701
 guitest.C:702
 guitest.C:703
 guitest.C:704
 guitest.C:705
 guitest.C:706
 guitest.C:707
 guitest.C:708
 guitest.C:709
 guitest.C:710
 guitest.C:711
 guitest.C:712
 guitest.C:713
 guitest.C:714
 guitest.C:715
 guitest.C:716
 guitest.C:717
 guitest.C:718
 guitest.C:719
 guitest.C:720
 guitest.C:721
 guitest.C:722
 guitest.C:723
 guitest.C:724
 guitest.C:725
 guitest.C:726
 guitest.C:727
 guitest.C:728
 guitest.C:729
 guitest.C:730
 guitest.C:731
 guitest.C:732
 guitest.C:733
 guitest.C:734
 guitest.C:735
 guitest.C:736
 guitest.C:737
 guitest.C:738
 guitest.C:739
 guitest.C:740
 guitest.C:741
 guitest.C:742
 guitest.C:743
 guitest.C:744
 guitest.C:745
 guitest.C:746
 guitest.C:747
 guitest.C:748
 guitest.C:749
 guitest.C:750
 guitest.C:751
 guitest.C:752
 guitest.C:753
 guitest.C:754
 guitest.C:755
 guitest.C:756
 guitest.C:757
 guitest.C:758
 guitest.C:759
 guitest.C:760
 guitest.C:761
 guitest.C:762
 guitest.C:763
 guitest.C:764
 guitest.C:765
 guitest.C:766
 guitest.C:767
 guitest.C:768
 guitest.C:769
 guitest.C:770
 guitest.C:771
 guitest.C:772
 guitest.C:773
 guitest.C:774
 guitest.C:775
 guitest.C:776
 guitest.C:777
 guitest.C:778
 guitest.C:779
 guitest.C:780
 guitest.C:781
 guitest.C:782
 guitest.C:783
 guitest.C:784
 guitest.C:785
 guitest.C:786
 guitest.C:787
 guitest.C:788
 guitest.C:789
 guitest.C:790
 guitest.C:791
 guitest.C:792
 guitest.C:793
 guitest.C:794
 guitest.C:795
 guitest.C:796
 guitest.C:797
 guitest.C:798
 guitest.C:799
 guitest.C:800
 guitest.C:801
 guitest.C:802
 guitest.C:803
 guitest.C:804
 guitest.C:805
 guitest.C:806
 guitest.C:807
 guitest.C:808
 guitest.C:809
 guitest.C:810
 guitest.C:811
 guitest.C:812
 guitest.C:813
 guitest.C:814
 guitest.C:815
 guitest.C:816
 guitest.C:817
 guitest.C:818
 guitest.C:819
 guitest.C:820
 guitest.C:821
 guitest.C:822
 guitest.C:823
 guitest.C:824
 guitest.C:825
 guitest.C:826
 guitest.C:827
 guitest.C:828
 guitest.C:829
 guitest.C:830
 guitest.C:831
 guitest.C:832
 guitest.C:833
 guitest.C:834
 guitest.C:835
 guitest.C:836
 guitest.C:837
 guitest.C:838
 guitest.C:839
 guitest.C:840
 guitest.C:841
 guitest.C:842
 guitest.C:843
 guitest.C:844
 guitest.C:845
 guitest.C:846
 guitest.C:847
 guitest.C:848
 guitest.C:849
 guitest.C:850
 guitest.C:851
 guitest.C:852
 guitest.C:853
 guitest.C:854
 guitest.C:855
 guitest.C:856
 guitest.C:857
 guitest.C:858
 guitest.C:859
 guitest.C:860
 guitest.C:861
 guitest.C:862
 guitest.C:863
 guitest.C:864
 guitest.C:865
 guitest.C:866
 guitest.C:867
 guitest.C:868
 guitest.C:869
 guitest.C:870
 guitest.C:871
 guitest.C:872
 guitest.C:873
 guitest.C:874
 guitest.C:875
 guitest.C:876
 guitest.C:877
 guitest.C:878
 guitest.C:879
 guitest.C:880
 guitest.C:881
 guitest.C:882
 guitest.C:883
 guitest.C:884
 guitest.C:885
 guitest.C:886
 guitest.C:887
 guitest.C:888
 guitest.C:889
 guitest.C:890
 guitest.C:891
 guitest.C:892
 guitest.C:893
 guitest.C:894
 guitest.C:895
 guitest.C:896
 guitest.C:897
 guitest.C:898
 guitest.C:899
 guitest.C:900
 guitest.C:901
 guitest.C:902
 guitest.C:903
 guitest.C:904
 guitest.C:905
 guitest.C:906
 guitest.C:907
 guitest.C:908
 guitest.C:909
 guitest.C:910
 guitest.C:911
 guitest.C:912
 guitest.C:913
 guitest.C:914
 guitest.C:915
 guitest.C:916
 guitest.C:917
 guitest.C:918
 guitest.C:919
 guitest.C:920
 guitest.C:921
 guitest.C:922
 guitest.C:923
 guitest.C:924
 guitest.C:925
 guitest.C:926
 guitest.C:927
 guitest.C:928
 guitest.C:929
 guitest.C:930
 guitest.C:931
 guitest.C:932
 guitest.C:933
 guitest.C:934
 guitest.C:935
 guitest.C:936
 guitest.C:937
 guitest.C:938
 guitest.C:939
 guitest.C:940
 guitest.C:941
 guitest.C:942
 guitest.C:943
 guitest.C:944
 guitest.C:945
 guitest.C:946
 guitest.C:947
 guitest.C:948
 guitest.C:949
 guitest.C:950
 guitest.C:951
 guitest.C:952
 guitest.C:953
 guitest.C:954
 guitest.C:955
 guitest.C:956
 guitest.C:957
 guitest.C:958
 guitest.C:959
 guitest.C:960
 guitest.C:961
 guitest.C:962
 guitest.C:963
 guitest.C:964
 guitest.C:965
 guitest.C:966
 guitest.C:967
 guitest.C:968
 guitest.C:969
 guitest.C:970
 guitest.C:971
 guitest.C:972
 guitest.C:973
 guitest.C:974
 guitest.C:975
 guitest.C:976
 guitest.C:977
 guitest.C:978
 guitest.C:979
 guitest.C:980
 guitest.C:981
 guitest.C:982
 guitest.C:983
 guitest.C:984
 guitest.C:985
 guitest.C:986
 guitest.C:987
 guitest.C:988
 guitest.C:989
 guitest.C:990
 guitest.C:991
 guitest.C:992
 guitest.C:993
 guitest.C:994
 guitest.C:995
 guitest.C:996
 guitest.C:997
 guitest.C:998
 guitest.C:999
 guitest.C:1000
 guitest.C:1001
 guitest.C:1002
 guitest.C:1003
 guitest.C:1004
 guitest.C:1005
 guitest.C:1006
 guitest.C:1007
 guitest.C:1008
 guitest.C:1009
 guitest.C:1010
 guitest.C:1011
 guitest.C:1012
 guitest.C:1013
 guitest.C:1014
 guitest.C:1015
 guitest.C:1016
 guitest.C:1017
 guitest.C:1018
 guitest.C:1019
 guitest.C:1020
 guitest.C:1021
 guitest.C:1022
 guitest.C:1023
 guitest.C:1024
 guitest.C:1025
 guitest.C:1026
 guitest.C:1027
 guitest.C:1028
 guitest.C:1029
 guitest.C:1030
 guitest.C:1031
 guitest.C:1032
 guitest.C:1033
 guitest.C:1034
 guitest.C:1035
 guitest.C:1036
 guitest.C:1037
 guitest.C:1038
 guitest.C:1039
 guitest.C:1040
 guitest.C:1041
 guitest.C:1042
 guitest.C:1043
 guitest.C:1044
 guitest.C:1045
 guitest.C:1046
 guitest.C:1047
 guitest.C:1048
 guitest.C:1049
 guitest.C:1050
 guitest.C:1051
 guitest.C:1052
 guitest.C:1053
 guitest.C:1054
 guitest.C:1055
 guitest.C:1056
 guitest.C:1057
 guitest.C:1058
 guitest.C:1059
 guitest.C:1060
 guitest.C:1061
 guitest.C:1062
 guitest.C:1063
 guitest.C:1064
 guitest.C:1065
 guitest.C:1066
 guitest.C:1067
 guitest.C:1068
 guitest.C:1069
 guitest.C:1070
 guitest.C:1071
 guitest.C:1072
 guitest.C:1073
 guitest.C:1074
 guitest.C:1075
 guitest.C:1076
 guitest.C:1077
 guitest.C:1078
 guitest.C:1079
 guitest.C:1080
 guitest.C:1081
 guitest.C:1082
 guitest.C:1083
 guitest.C:1084
 guitest.C:1085
 guitest.C:1086
 guitest.C:1087
 guitest.C:1088
 guitest.C:1089
 guitest.C:1090
 guitest.C:1091
 guitest.C:1092
 guitest.C:1093
 guitest.C:1094
 guitest.C:1095
 guitest.C:1096
 guitest.C:1097
 guitest.C:1098
 guitest.C:1099
 guitest.C:1100
 guitest.C:1101
 guitest.C:1102
 guitest.C:1103
 guitest.C:1104
 guitest.C:1105
 guitest.C:1106
 guitest.C:1107
 guitest.C:1108
 guitest.C:1109
 guitest.C:1110
 guitest.C:1111
 guitest.C:1112
 guitest.C:1113
 guitest.C:1114
 guitest.C:1115
 guitest.C:1116
 guitest.C:1117
 guitest.C:1118
 guitest.C:1119
 guitest.C:1120
 guitest.C:1121
 guitest.C:1122
 guitest.C:1123
 guitest.C:1124
 guitest.C:1125
 guitest.C:1126
 guitest.C:1127
 guitest.C:1128
 guitest.C:1129
 guitest.C:1130
 guitest.C:1131
 guitest.C:1132
 guitest.C:1133
 guitest.C:1134
 guitest.C:1135
 guitest.C:1136
 guitest.C:1137
 guitest.C:1138
 guitest.C:1139
 guitest.C:1140
 guitest.C:1141
 guitest.C:1142
 guitest.C:1143
 guitest.C:1144
 guitest.C:1145
 guitest.C:1146
 guitest.C:1147
 guitest.C:1148
 guitest.C:1149
 guitest.C:1150
 guitest.C:1151
 guitest.C:1152
 guitest.C:1153
 guitest.C:1154
 guitest.C:1155
 guitest.C:1156
 guitest.C:1157
 guitest.C:1158
 guitest.C:1159
 guitest.C:1160
 guitest.C:1161
 guitest.C:1162
 guitest.C:1163
 guitest.C:1164
 guitest.C:1165
 guitest.C:1166
 guitest.C:1167
 guitest.C:1168
 guitest.C:1169
 guitest.C:1170
 guitest.C:1171
 guitest.C:1172
 guitest.C:1173
 guitest.C:1174
 guitest.C:1175
 guitest.C:1176
 guitest.C:1177
 guitest.C:1178
 guitest.C:1179
 guitest.C:1180
 guitest.C:1181
 guitest.C:1182
 guitest.C:1183
 guitest.C:1184
 guitest.C:1185
 guitest.C:1186
 guitest.C:1187
 guitest.C:1188
 guitest.C:1189
 guitest.C:1190
 guitest.C:1191
 guitest.C:1192
 guitest.C:1193
 guitest.C:1194
 guitest.C:1195
 guitest.C:1196
 guitest.C:1197
 guitest.C:1198
 guitest.C:1199
 guitest.C:1200
 guitest.C:1201
 guitest.C:1202
 guitest.C:1203
 guitest.C:1204
 guitest.C:1205
 guitest.C:1206
 guitest.C:1207
 guitest.C:1208
 guitest.C:1209
 guitest.C:1210
 guitest.C:1211
 guitest.C:1212
 guitest.C:1213
 guitest.C:1214
 guitest.C:1215
 guitest.C:1216
 guitest.C:1217
 guitest.C:1218
 guitest.C:1219
 guitest.C:1220
 guitest.C:1221
 guitest.C:1222
 guitest.C:1223
 guitest.C:1224
 guitest.C:1225
 guitest.C:1226
 guitest.C:1227
 guitest.C:1228
 guitest.C:1229
 guitest.C:1230
 guitest.C:1231
 guitest.C:1232
 guitest.C:1233
 guitest.C:1234
 guitest.C:1235
 guitest.C:1236
 guitest.C:1237
 guitest.C:1238
 guitest.C:1239
 guitest.C:1240
 guitest.C:1241
 guitest.C:1242
 guitest.C:1243
 guitest.C:1244
 guitest.C:1245
 guitest.C:1246
 guitest.C:1247
 guitest.C:1248
 guitest.C:1249
 guitest.C:1250
 guitest.C:1251
 guitest.C:1252
 guitest.C:1253
 guitest.C:1254
 guitest.C:1255
 guitest.C:1256
 guitest.C:1257
 guitest.C:1258
 guitest.C:1259
 guitest.C:1260
 guitest.C:1261
 guitest.C:1262
 guitest.C:1263
 guitest.C:1264
 guitest.C:1265
 guitest.C:1266
 guitest.C:1267
 guitest.C:1268
 guitest.C:1269
 guitest.C:1270
 guitest.C:1271
 guitest.C:1272
 guitest.C:1273
 guitest.C:1274
 guitest.C:1275
 guitest.C:1276
 guitest.C:1277
 guitest.C:1278
 guitest.C:1279
 guitest.C:1280
 guitest.C:1281
 guitest.C:1282
 guitest.C:1283
 guitest.C:1284
 guitest.C:1285
 guitest.C:1286
 guitest.C:1287
 guitest.C:1288
 guitest.C:1289
 guitest.C:1290
 guitest.C:1291
 guitest.C:1292
 guitest.C:1293
 guitest.C:1294
 guitest.C:1295
 guitest.C:1296
 guitest.C:1297
 guitest.C:1298
 guitest.C:1299
 guitest.C:1300
 guitest.C:1301
 guitest.C:1302
 guitest.C:1303
 guitest.C:1304
 guitest.C:1305
 guitest.C:1306
 guitest.C:1307
 guitest.C:1308
 guitest.C:1309
 guitest.C:1310
 guitest.C:1311
 guitest.C:1312
 guitest.C:1313
 guitest.C:1314
 guitest.C:1315
 guitest.C:1316
 guitest.C:1317
 guitest.C:1318
 guitest.C:1319
 guitest.C:1320
 guitest.C:1321
 guitest.C:1322
 guitest.C:1323
 guitest.C:1324
 guitest.C:1325
 guitest.C:1326
 guitest.C:1327
 guitest.C:1328
 guitest.C:1329
 guitest.C:1330
 guitest.C:1331
 guitest.C:1332
 guitest.C:1333
 guitest.C:1334
 guitest.C:1335
 guitest.C:1336
 guitest.C:1337
 guitest.C:1338
 guitest.C:1339
 guitest.C:1340
 guitest.C:1341
 guitest.C:1342
 guitest.C:1343
 guitest.C:1344
 guitest.C:1345
 guitest.C:1346
 guitest.C:1347
 guitest.C:1348
 guitest.C:1349
 guitest.C:1350
 guitest.C:1351
 guitest.C:1352
 guitest.C:1353
 guitest.C:1354
 guitest.C:1355
 guitest.C:1356
 guitest.C:1357
 guitest.C:1358
 guitest.C:1359
 guitest.C:1360
 guitest.C:1361
 guitest.C:1362
 guitest.C:1363
 guitest.C:1364
 guitest.C:1365
 guitest.C:1366
 guitest.C:1367
 guitest.C:1368
 guitest.C:1369
 guitest.C:1370
 guitest.C:1371
 guitest.C:1372
 guitest.C:1373
 guitest.C:1374
 guitest.C:1375
 guitest.C:1376
 guitest.C:1377
 guitest.C:1378
 guitest.C:1379
 guitest.C:1380
 guitest.C:1381
 guitest.C:1382
 guitest.C:1383
 guitest.C:1384
 guitest.C:1385
 guitest.C:1386
 guitest.C:1387
 guitest.C:1388
 guitest.C:1389
 guitest.C:1390
 guitest.C:1391
 guitest.C:1392
 guitest.C:1393
 guitest.C:1394
 guitest.C:1395
 guitest.C:1396
 guitest.C:1397
 guitest.C:1398
 guitest.C:1399
 guitest.C:1400
 guitest.C:1401
 guitest.C:1402
 guitest.C:1403
 guitest.C:1404
 guitest.C:1405
 guitest.C:1406
 guitest.C:1407
 guitest.C:1408
 guitest.C:1409
 guitest.C:1410
 guitest.C:1411
 guitest.C:1412
 guitest.C:1413
 guitest.C:1414
 guitest.C:1415
 guitest.C:1416
 guitest.C:1417
 guitest.C:1418
 guitest.C:1419
 guitest.C:1420
 guitest.C:1421
 guitest.C:1422
 guitest.C:1423
 guitest.C:1424
 guitest.C:1425
 guitest.C:1426
 guitest.C:1427
 guitest.C:1428
 guitest.C:1429
 guitest.C:1430
 guitest.C:1431
 guitest.C:1432
 guitest.C:1433
 guitest.C:1434
 guitest.C:1435
 guitest.C:1436
 guitest.C:1437
 guitest.C:1438
 guitest.C:1439
 guitest.C:1440
 guitest.C:1441
 guitest.C:1442
 guitest.C:1443
 guitest.C:1444
 guitest.C:1445
 guitest.C:1446
 guitest.C:1447
 guitest.C:1448
 guitest.C:1449
 guitest.C:1450
 guitest.C:1451
 guitest.C:1452
 guitest.C:1453
 guitest.C:1454
 guitest.C:1455
 guitest.C:1456
 guitest.C:1457
 guitest.C:1458
 guitest.C:1459
 guitest.C:1460
 guitest.C:1461
 guitest.C:1462
 guitest.C:1463
 guitest.C:1464
 guitest.C:1465
 guitest.C:1466
 guitest.C:1467
 guitest.C:1468
 guitest.C:1469
 guitest.C:1470
 guitest.C:1471
 guitest.C:1472
 guitest.C:1473
 guitest.C:1474
 guitest.C:1475
 guitest.C:1476
 guitest.C:1477
 guitest.C:1478
 guitest.C:1479
 guitest.C:1480
 guitest.C:1481
 guitest.C:1482
 guitest.C:1483
 guitest.C:1484
 guitest.C:1485
 guitest.C:1486
 guitest.C:1487
 guitest.C:1488
 guitest.C:1489
 guitest.C:1490
 guitest.C:1491
 guitest.C:1492
 guitest.C:1493
 guitest.C:1494
 guitest.C:1495
 guitest.C:1496
 guitest.C:1497
 guitest.C:1498
 guitest.C:1499
 guitest.C:1500
 guitest.C:1501
 guitest.C:1502
 guitest.C:1503
 guitest.C:1504
 guitest.C:1505
 guitest.C:1506
 guitest.C:1507
 guitest.C:1508
 guitest.C:1509
 guitest.C:1510
 guitest.C:1511
 guitest.C:1512
 guitest.C:1513
 guitest.C:1514
 guitest.C:1515
 guitest.C:1516
 guitest.C:1517
 guitest.C:1518
 guitest.C:1519
 guitest.C:1520
 guitest.C:1521
 guitest.C:1522
 guitest.C:1523
 guitest.C:1524
 guitest.C:1525
 guitest.C:1526
 guitest.C:1527
 guitest.C:1528
 guitest.C:1529
 guitest.C:1530
 guitest.C:1531
 guitest.C:1532
 guitest.C:1533
 guitest.C:1534
 guitest.C:1535
 guitest.C:1536
 guitest.C:1537
 guitest.C:1538
 guitest.C:1539
 guitest.C:1540
 guitest.C:1541
 guitest.C:1542
 guitest.C:1543
 guitest.C:1544
 guitest.C:1545
 guitest.C:1546
 guitest.C:1547
 guitest.C:1548
 guitest.C:1549
 guitest.C:1550
 guitest.C:1551
 guitest.C:1552
 guitest.C:1553
 guitest.C:1554
 guitest.C:1555
 guitest.C:1556
 guitest.C:1557
 guitest.C:1558
 guitest.C:1559
 guitest.C:1560
 guitest.C:1561
 guitest.C:1562
 guitest.C:1563
 guitest.C:1564
 guitest.C:1565
 guitest.C:1566
 guitest.C:1567
 guitest.C:1568
 guitest.C:1569
 guitest.C:1570
 guitest.C:1571
 guitest.C:1572
 guitest.C:1573
 guitest.C:1574
 guitest.C:1575
 guitest.C:1576
 guitest.C:1577
 guitest.C:1578
 guitest.C:1579
 guitest.C:1580
 guitest.C:1581
 guitest.C:1582
 guitest.C:1583
 guitest.C:1584
 guitest.C:1585
 guitest.C:1586
 guitest.C:1587
 guitest.C:1588
 guitest.C:1589
 guitest.C:1590
 guitest.C:1591
 guitest.C:1592
 guitest.C:1593
 guitest.C:1594
 guitest.C:1595
 guitest.C:1596
 guitest.C:1597
 guitest.C:1598
 guitest.C:1599
 guitest.C:1600
 guitest.C:1601
 guitest.C:1602
 guitest.C:1603
 guitest.C:1604
 guitest.C:1605
 guitest.C:1606
 guitest.C:1607
 guitest.C:1608
 guitest.C:1609
 guitest.C:1610
 guitest.C:1611
 guitest.C:1612
 guitest.C:1613
 guitest.C:1614
 guitest.C:1615
 guitest.C:1616
 guitest.C:1617
 guitest.C:1618
 guitest.C:1619
 guitest.C:1620
 guitest.C:1621
 guitest.C:1622
 guitest.C:1623
 guitest.C:1624
 guitest.C:1625
 guitest.C:1626
 guitest.C:1627
 guitest.C:1628
 guitest.C:1629
 guitest.C:1630
 guitest.C:1631
 guitest.C:1632
 guitest.C:1633
 guitest.C:1634
 guitest.C:1635
 guitest.C:1636
 guitest.C:1637
 guitest.C:1638
 guitest.C:1639
 guitest.C:1640
 guitest.C:1641
 guitest.C:1642
 guitest.C:1643
 guitest.C:1644
 guitest.C:1645
 guitest.C:1646
 guitest.C:1647
 guitest.C:1648
 guitest.C:1649
 guitest.C:1650
 guitest.C:1651
 guitest.C:1652
 guitest.C:1653
 guitest.C:1654
 guitest.C:1655
 guitest.C:1656
 guitest.C:1657
 guitest.C:1658
 guitest.C:1659
 guitest.C:1660
 guitest.C:1661
 guitest.C:1662
 guitest.C:1663
 guitest.C:1664
 guitest.C:1665
 guitest.C:1666
 guitest.C:1667
 guitest.C:1668
 guitest.C:1669
 guitest.C:1670
 guitest.C:1671
 guitest.C:1672
 guitest.C:1673
 guitest.C:1674
 guitest.C:1675
 guitest.C:1676
 guitest.C:1677
 guitest.C:1678
 guitest.C:1679
 guitest.C:1680
 guitest.C:1681
 guitest.C:1682
 guitest.C:1683
 guitest.C:1684
 guitest.C:1685
 guitest.C:1686
 guitest.C:1687
 guitest.C:1688
 guitest.C:1689
 guitest.C:1690
 guitest.C:1691
 guitest.C:1692
 guitest.C:1693
 guitest.C:1694
 guitest.C:1695
 guitest.C:1696
 guitest.C:1697
 guitest.C:1698
 guitest.C:1699
 guitest.C:1700
 guitest.C:1701
 guitest.C:1702
 guitest.C:1703
 guitest.C:1704
 guitest.C:1705
 guitest.C:1706
 guitest.C:1707
 guitest.C:1708
 guitest.C:1709
 guitest.C:1710
 guitest.C:1711
 guitest.C:1712
 guitest.C:1713
 guitest.C:1714
 guitest.C:1715
 guitest.C:1716
 guitest.C:1717
 guitest.C:1718
 guitest.C:1719
 guitest.C:1720
 guitest.C:1721
 guitest.C:1722
 guitest.C:1723
 guitest.C:1724
 guitest.C:1725
 guitest.C:1726
 guitest.C:1727
 guitest.C:1728
 guitest.C:1729
 guitest.C:1730
 guitest.C:1731
 guitest.C:1732
 guitest.C:1733
 guitest.C:1734
 guitest.C:1735
 guitest.C:1736
 guitest.C:1737
 guitest.C:1738
 guitest.C:1739
 guitest.C:1740
 guitest.C:1741
 guitest.C:1742
 guitest.C:1743
 guitest.C:1744
 guitest.C:1745
 guitest.C:1746
 guitest.C:1747
 guitest.C:1748
 guitest.C:1749
 guitest.C:1750
 guitest.C:1751
 guitest.C:1752
 guitest.C:1753
 guitest.C:1754
 guitest.C:1755
 guitest.C:1756
 guitest.C:1757
 guitest.C:1758
 guitest.C:1759
 guitest.C:1760
 guitest.C:1761
 guitest.C:1762
 guitest.C:1763
 guitest.C:1764
 guitest.C:1765
 guitest.C:1766
 guitest.C:1767
 guitest.C:1768
 guitest.C:1769
 guitest.C:1770
 guitest.C:1771
 guitest.C:1772
 guitest.C:1773
 guitest.C:1774
 guitest.C:1775
 guitest.C:1776
 guitest.C:1777
 guitest.C:1778
 guitest.C:1779
 guitest.C:1780
 guitest.C:1781
 guitest.C:1782
 guitest.C:1783
 guitest.C:1784
 guitest.C:1785
 guitest.C:1786
 guitest.C:1787
 guitest.C:1788
 guitest.C:1789
 guitest.C:1790
 guitest.C:1791
 guitest.C:1792
 guitest.C:1793
 guitest.C:1794
 guitest.C:1795
 guitest.C:1796
 guitest.C:1797
 guitest.C:1798
 guitest.C:1799
 guitest.C:1800
 guitest.C:1801
 guitest.C:1802
 guitest.C:1803
 guitest.C:1804
 guitest.C:1805
 guitest.C:1806
 guitest.C:1807
 guitest.C:1808
 guitest.C:1809
 guitest.C:1810
 guitest.C:1811
 guitest.C:1812
 guitest.C:1813
 guitest.C:1814
 guitest.C:1815
 guitest.C:1816
 guitest.C:1817
 guitest.C:1818
 guitest.C:1819
 guitest.C:1820
 guitest.C:1821
 guitest.C:1822
 guitest.C:1823
 guitest.C:1824
 guitest.C:1825
 guitest.C:1826
 guitest.C:1827
 guitest.C:1828
 guitest.C:1829
 guitest.C:1830
 guitest.C:1831
 guitest.C:1832
 guitest.C:1833
 guitest.C:1834
 guitest.C:1835
 guitest.C:1836
 guitest.C:1837
 guitest.C:1838
 guitest.C:1839
 guitest.C:1840
 guitest.C:1841
 guitest.C:1842
 guitest.C:1843
 guitest.C:1844
 guitest.C:1845
 guitest.C:1846
 guitest.C:1847
 guitest.C:1848
 guitest.C:1849
 guitest.C:1850
 guitest.C:1851
 guitest.C:1852
 guitest.C:1853
 guitest.C:1854
 guitest.C:1855
 guitest.C:1856
 guitest.C:1857
 guitest.C:1858
 guitest.C:1859
 guitest.C:1860
 guitest.C:1861
 guitest.C:1862
 guitest.C:1863
 guitest.C:1864
 guitest.C:1865
 guitest.C:1866
 guitest.C:1867
 guitest.C:1868
 guitest.C:1869
 guitest.C:1870
 guitest.C:1871
 guitest.C:1872
 guitest.C:1873
 guitest.C:1874
 guitest.C:1875
 guitest.C:1876
 guitest.C:1877
 guitest.C:1878
 guitest.C:1879
 guitest.C:1880
 guitest.C:1881
 guitest.C:1882
 guitest.C:1883
 guitest.C:1884
 guitest.C:1885
 guitest.C:1886
 guitest.C:1887
 guitest.C:1888
 guitest.C:1889
 guitest.C:1890
 guitest.C:1891
 guitest.C:1892
 guitest.C:1893
 guitest.C:1894
 guitest.C:1895
 guitest.C:1896
 guitest.C:1897
 guitest.C:1898
 guitest.C:1899
 guitest.C:1900
 guitest.C:1901
 guitest.C:1902
 guitest.C:1903
 guitest.C:1904
 guitest.C:1905
 guitest.C:1906
 guitest.C:1907
 guitest.C:1908
 guitest.C:1909
 guitest.C:1910
 guitest.C:1911
 guitest.C:1912
 guitest.C:1913
 guitest.C:1914
 guitest.C:1915
 guitest.C:1916
 guitest.C:1917
 guitest.C:1918
 guitest.C:1919
 guitest.C:1920
 guitest.C:1921
 guitest.C:1922
 guitest.C:1923
 guitest.C:1924
 guitest.C:1925
 guitest.C:1926
 guitest.C:1927
 guitest.C:1928
 guitest.C:1929
 guitest.C:1930
 guitest.C:1931
 guitest.C:1932
 guitest.C:1933
 guitest.C:1934
 guitest.C:1935
 guitest.C:1936
 guitest.C:1937
 guitest.C:1938
 guitest.C:1939
 guitest.C:1940
 guitest.C:1941
 guitest.C:1942
 guitest.C:1943
 guitest.C:1944
 guitest.C:1945
 guitest.C:1946
 guitest.C:1947
 guitest.C:1948
 guitest.C:1949
 guitest.C:1950
 guitest.C:1951
 guitest.C:1952
 guitest.C:1953
 guitest.C:1954
 guitest.C:1955
 guitest.C:1956
 guitest.C:1957
 guitest.C:1958
 guitest.C:1959
 guitest.C:1960
 guitest.C:1961
 guitest.C:1962
 guitest.C:1963
 guitest.C:1964
 guitest.C:1965
 guitest.C:1966
 guitest.C:1967
 guitest.C:1968
 guitest.C:1969
 guitest.C:1970
 guitest.C:1971
 guitest.C:1972
 guitest.C:1973
 guitest.C:1974
 guitest.C:1975
 guitest.C:1976
 guitest.C:1977
 guitest.C:1978
 guitest.C:1979
 guitest.C:1980
 guitest.C:1981
 guitest.C:1982
 guitest.C:1983
 guitest.C:1984
 guitest.C:1985
 guitest.C:1986
 guitest.C:1987
 guitest.C:1988
 guitest.C:1989
 guitest.C:1990
 guitest.C:1991
 guitest.C:1992
 guitest.C:1993
 guitest.C:1994
 guitest.C:1995
 guitest.C:1996
 guitest.C:1997
 guitest.C:1998
 guitest.C:1999
 guitest.C:2000
 guitest.C:2001
 guitest.C:2002
 guitest.C:2003
 guitest.C:2004
 guitest.C:2005
 guitest.C:2006
 guitest.C:2007
 guitest.C:2008
 guitest.C:2009
 guitest.C:2010
 guitest.C:2011
 guitest.C:2012
 guitest.C:2013
 guitest.C:2014
 guitest.C:2015
 guitest.C:2016
 guitest.C:2017
 guitest.C:2018
 guitest.C:2019
 guitest.C:2020
 guitest.C:2021
 guitest.C:2022
 guitest.C:2023
 guitest.C:2024
 guitest.C:2025
 guitest.C:2026
 guitest.C:2027
 guitest.C:2028
 guitest.C:2029
 guitest.C:2030
 guitest.C:2031
 guitest.C:2032
 guitest.C:2033
 guitest.C:2034
 guitest.C:2035
 guitest.C:2036
 guitest.C:2037
 guitest.C:2038
 guitest.C:2039
 guitest.C:2040
 guitest.C:2041
 guitest.C:2042
 guitest.C:2043
 guitest.C:2044
 guitest.C:2045
 guitest.C:2046
 guitest.C:2047
 guitest.C:2048
 guitest.C:2049
 guitest.C:2050
 guitest.C:2051
 guitest.C:2052
 guitest.C:2053
 guitest.C:2054
 guitest.C:2055
 guitest.C:2056
 guitest.C:2057
 guitest.C:2058
 guitest.C:2059
 guitest.C:2060
 guitest.C:2061
 guitest.C:2062
 guitest.C:2063
 guitest.C:2064
 guitest.C:2065
 guitest.C:2066
 guitest.C:2067
 guitest.C:2068
 guitest.C:2069
 guitest.C:2070
 guitest.C:2071
 guitest.C:2072
 guitest.C:2073
 guitest.C:2074
 guitest.C:2075
 guitest.C:2076
 guitest.C:2077
 guitest.C:2078
 guitest.C:2079
 guitest.C:2080
 guitest.C:2081
 guitest.C:2082
 guitest.C:2083
 guitest.C:2084
 guitest.C:2085
 guitest.C:2086
 guitest.C:2087
 guitest.C:2088
 guitest.C:2089
 guitest.C:2090
 guitest.C:2091
 guitest.C:2092
 guitest.C:2093
 guitest.C:2094
 guitest.C:2095
 guitest.C:2096
 guitest.C:2097
 guitest.C:2098
 guitest.C:2099
 guitest.C:2100
 guitest.C:2101
 guitest.C:2102
 guitest.C:2103
 guitest.C:2104
 guitest.C:2105
 guitest.C:2106
 guitest.C:2107
 guitest.C:2108
 guitest.C:2109
 guitest.C:2110
 guitest.C:2111
 guitest.C:2112
 guitest.C:2113
 guitest.C:2114
 guitest.C:2115
 guitest.C:2116
 guitest.C:2117
 guitest.C:2118
 guitest.C:2119
 guitest.C:2120
 guitest.C:2121
 guitest.C:2122
 guitest.C:2123
 guitest.C:2124
 guitest.C:2125
 guitest.C:2126
 guitest.C:2127
 guitest.C:2128
 guitest.C:2129
 guitest.C:2130
 guitest.C:2131
 guitest.C:2132
 guitest.C:2133
 guitest.C:2134
 guitest.C:2135
 guitest.C:2136
 guitest.C:2137
 guitest.C:2138
 guitest.C:2139
 guitest.C:2140
 guitest.C:2141
 guitest.C:2142
 guitest.C:2143
 guitest.C:2144
 guitest.C:2145
 guitest.C:2146
 guitest.C:2147
 guitest.C:2148
 guitest.C:2149
 guitest.C:2150
 guitest.C:2151
 guitest.C:2152
 guitest.C:2153
 guitest.C:2154
 guitest.C:2155
 guitest.C:2156
 guitest.C:2157
 guitest.C:2158
 guitest.C:2159
 guitest.C:2160
 guitest.C:2161
 guitest.C:2162
 guitest.C:2163
 guitest.C:2164
 guitest.C:2165
 guitest.C:2166
 guitest.C:2167
 guitest.C:2168
 guitest.C:2169
 guitest.C:2170
 guitest.C:2171
 guitest.C:2172
 guitest.C:2173
 guitest.C:2174
 guitest.C:2175
 guitest.C:2176
 guitest.C:2177
 guitest.C:2178
 guitest.C:2179
 guitest.C:2180
 guitest.C:2181
 guitest.C:2182
 guitest.C:2183
 guitest.C:2184
 guitest.C:2185
 guitest.C:2186
 guitest.C:2187
 guitest.C:2188
 guitest.C:2189
 guitest.C:2190
 guitest.C:2191
 guitest.C:2192
 guitest.C:2193
 guitest.C:2194
 guitest.C:2195
 guitest.C:2196
 guitest.C:2197
 guitest.C:2198
 guitest.C:2199
 guitest.C:2200
 guitest.C:2201
 guitest.C:2202
 guitest.C:2203
 guitest.C:2204
 guitest.C:2205
 guitest.C:2206
 guitest.C:2207
 guitest.C:2208
 guitest.C:2209
 guitest.C:2210
 guitest.C:2211
 guitest.C:2212
 guitest.C:2213
 guitest.C:2214
 guitest.C:2215
 guitest.C:2216
 guitest.C:2217
 guitest.C:2218
 guitest.C:2219
 guitest.C:2220
 guitest.C:2221
 guitest.C:2222
 guitest.C:2223
 guitest.C:2224
 guitest.C:2225
 guitest.C:2226
 guitest.C:2227
 guitest.C:2228
 guitest.C:2229
 guitest.C:2230
 guitest.C:2231
 guitest.C:2232
 guitest.C:2233
 guitest.C:2234
 guitest.C:2235
 guitest.C:2236
 guitest.C:2237
 guitest.C:2238
 guitest.C:2239
 guitest.C:2240
 guitest.C:2241
 guitest.C:2242
 guitest.C:2243
 guitest.C:2244
 guitest.C:2245
 guitest.C:2246
 guitest.C:2247
 guitest.C:2248
 guitest.C:2249
 guitest.C:2250
 guitest.C:2251
 guitest.C:2252
 guitest.C:2253
 guitest.C:2254
 guitest.C:2255
 guitest.C:2256
 guitest.C:2257
 guitest.C:2258
 guitest.C:2259
 guitest.C:2260
 guitest.C:2261
 guitest.C:2262
 guitest.C:2263
 guitest.C:2264
 guitest.C:2265
 guitest.C:2266
 guitest.C:2267
 guitest.C:2268
 guitest.C:2269
 guitest.C:2270
 guitest.C:2271
 guitest.C:2272
 guitest.C:2273
 guitest.C:2274
 guitest.C:2275
 guitest.C:2276
 guitest.C:2277
 guitest.C:2278
 guitest.C:2279
 guitest.C:2280
 guitest.C:2281
 guitest.C:2282
 guitest.C:2283
 guitest.C:2284
 guitest.C:2285
 guitest.C:2286
 guitest.C:2287
 guitest.C:2288
 guitest.C:2289
 guitest.C:2290
 guitest.C:2291
 guitest.C:2292
 guitest.C:2293
 guitest.C:2294
 guitest.C:2295
 guitest.C:2296
 guitest.C:2297
 guitest.C:2298
 guitest.C:2299
 guitest.C:2300
 guitest.C:2301
 guitest.C:2302
 guitest.C:2303
 guitest.C:2304
 guitest.C:2305
 guitest.C:2306
 guitest.C:2307
 guitest.C:2308
 guitest.C:2309
 guitest.C:2310
 guitest.C:2311
 guitest.C:2312
 guitest.C:2313
 guitest.C:2314
 guitest.C:2315
 guitest.C:2316
 guitest.C:2317
 guitest.C:2318
 guitest.C:2319
 guitest.C:2320
 guitest.C:2321
 guitest.C:2322
 guitest.C:2323
 guitest.C:2324
 guitest.C:2325
 guitest.C:2326
 guitest.C:2327
 guitest.C:2328
 guitest.C:2329
 guitest.C:2330
 guitest.C:2331
 guitest.C:2332
 guitest.C:2333
 guitest.C:2334
 guitest.C:2335
 guitest.C:2336
 guitest.C:2337
 guitest.C:2338
 guitest.C:2339
 guitest.C:2340
 guitest.C:2341
 guitest.C:2342
 guitest.C:2343
 guitest.C:2344
 guitest.C:2345
 guitest.C:2346
 guitest.C:2347
 guitest.C:2348
 guitest.C:2349
 guitest.C:2350
 guitest.C:2351
 guitest.C:2352
 guitest.C:2353
 guitest.C:2354
 guitest.C:2355
 guitest.C:2356
 guitest.C:2357
 guitest.C:2358
 guitest.C:2359
 guitest.C:2360
 guitest.C:2361
 guitest.C:2362
 guitest.C:2363
 guitest.C:2364
 guitest.C:2365
 guitest.C:2366
 guitest.C:2367
 guitest.C:2368
 guitest.C:2369
 guitest.C:2370
 guitest.C:2371
 guitest.C:2372
 guitest.C:2373
 guitest.C:2374
 guitest.C:2375
 guitest.C:2376
 guitest.C:2377
 guitest.C:2378
 guitest.C:2379
 guitest.C:2380
 guitest.C:2381
 guitest.C:2382
 guitest.C:2383
 guitest.C:2384
 guitest.C:2385
 guitest.C:2386
 guitest.C:2387
 guitest.C:2388
 guitest.C:2389
 guitest.C:2390
 guitest.C:2391
 guitest.C:2392
 guitest.C:2393
 guitest.C:2394
 guitest.C:2395
 guitest.C:2396
 guitest.C:2397
 guitest.C:2398
 guitest.C:2399
 guitest.C:2400
 guitest.C:2401
 guitest.C:2402
 guitest.C:2403
 guitest.C:2404
 guitest.C:2405
 guitest.C:2406
 guitest.C:2407
 guitest.C:2408
 guitest.C:2409
 guitest.C:2410
 guitest.C:2411
 guitest.C:2412
 guitest.C:2413
 guitest.C:2414
 guitest.C:2415
 guitest.C:2416
 guitest.C:2417
 guitest.C:2418
 guitest.C:2419
 guitest.C:2420
 guitest.C:2421
 guitest.C:2422
 guitest.C:2423
 guitest.C:2424
 guitest.C:2425
 guitest.C:2426
 guitest.C:2427
 guitest.C:2428
 guitest.C:2429
 guitest.C:2430
 guitest.C:2431
 guitest.C:2432
 guitest.C:2433
 guitest.C:2434
 guitest.C:2435
 guitest.C:2436
 guitest.C:2437
 guitest.C:2438
 guitest.C:2439
 guitest.C:2440
 guitest.C:2441
 guitest.C:2442
 guitest.C:2443
 guitest.C:2444
 guitest.C:2445
 guitest.C:2446
 guitest.C:2447
 guitest.C:2448
 guitest.C:2449
 guitest.C:2450
 guitest.C:2451
 guitest.C:2452
 guitest.C:2453
 guitest.C:2454
 guitest.C:2455
 guitest.C:2456
 guitest.C:2457
 guitest.C:2458
 guitest.C:2459
 guitest.C:2460
 guitest.C:2461
 guitest.C:2462
 guitest.C:2463
 guitest.C:2464
 guitest.C:2465
 guitest.C:2466
 guitest.C:2467
 guitest.C:2468
 guitest.C:2469
 guitest.C:2470
 guitest.C:2471
 guitest.C:2472
 guitest.C:2473
 guitest.C:2474
 guitest.C:2475
 guitest.C:2476
 guitest.C:2477
 guitest.C:2478
 guitest.C:2479
 guitest.C:2480
 guitest.C:2481
 guitest.C:2482
 guitest.C:2483
 guitest.C:2484
 guitest.C:2485
 guitest.C:2486
 guitest.C:2487
 guitest.C:2488
 guitest.C:2489
 guitest.C:2490
 guitest.C:2491
 guitest.C:2492
 guitest.C:2493
 guitest.C:2494
 guitest.C:2495
 guitest.C:2496
 guitest.C:2497
 guitest.C:2498
 guitest.C:2499
 guitest.C:2500
 guitest.C:2501
 guitest.C:2502
 guitest.C:2503
 guitest.C:2504
 guitest.C:2505
 guitest.C:2506
 guitest.C:2507
 guitest.C:2508
 guitest.C:2509
 guitest.C:2510
 guitest.C:2511
 guitest.C:2512
 guitest.C:2513
 guitest.C:2514
 guitest.C:2515
 guitest.C:2516
 guitest.C:2517
 guitest.C:2518
 guitest.C:2519
 guitest.C:2520
 guitest.C:2521
 guitest.C:2522
 guitest.C:2523
 guitest.C:2524
 guitest.C:2525
 guitest.C:2526
 guitest.C:2527
 guitest.C:2528
 guitest.C:2529
 guitest.C:2530
 guitest.C:2531
 guitest.C:2532
 guitest.C:2533
 guitest.C:2534
 guitest.C:2535
 guitest.C:2536
 guitest.C:2537
 guitest.C:2538
 guitest.C:2539
 guitest.C:2540
 guitest.C:2541
 guitest.C:2542
 guitest.C:2543
 guitest.C:2544
 guitest.C:2545
 guitest.C:2546
 guitest.C:2547
 guitest.C:2548
 guitest.C:2549
 guitest.C:2550
 guitest.C:2551
 guitest.C:2552
 guitest.C:2553
 guitest.C:2554
 guitest.C:2555
 guitest.C:2556
 guitest.C:2557
 guitest.C:2558
 guitest.C:2559
 guitest.C:2560
 guitest.C:2561
 guitest.C:2562
 guitest.C:2563
 guitest.C:2564
 guitest.C:2565
 guitest.C:2566
 guitest.C:2567
 guitest.C:2568
 guitest.C:2569
 guitest.C:2570
 guitest.C:2571
 guitest.C:2572
 guitest.C:2573
 guitest.C:2574
 guitest.C:2575
 guitest.C:2576
 guitest.C:2577
 guitest.C:2578
 guitest.C:2579
 guitest.C:2580
 guitest.C:2581
 guitest.C:2582
 guitest.C:2583
 guitest.C:2584
 guitest.C:2585
 guitest.C:2586