Logo ROOT   6.14/05
Reference Guide
MakeTutorials.C
Go to the documentation of this file.
1 // This script generates the html pages for the ROOT tutorials hierarchy.
2 // It creates $ROOTSYS/htmldoc if not already there
3 // It creates $ROOTSYS/htmldoc/tutorials if not already there
4 // It creates $ROOTSYS/htmldoc/tutorials/index.html (index to all directory tutorials)
5 // It creates $ROOTSYS/htmldoc/tutorials/dir/index.html with index of tutorials in dir
6 // It creates $ROOTSYS/htmldoc/tutorials/dir/*.C.html with one html file for each tutorial
7 // Author: Rene Brun
8 
9 #include "THtml.h"
10 #include "TDocOutput.h"
11 #include "TROOT.h"
12 #include "TSystem.h"
13 #include "TEnv.h"
14 #include "TDatime.h"
15 #include "TStyle.h"
16 #include "TList.h"
17 #include <iostream>
18 #include <fstream>
19 
20 using namespace std;
21 
22 void scandir(THtml& html, const char *dir, const char *title, TObjLink* toplnk);
23 
24 
25 void AppendLink(TString& links, int id, const TNamed* n)
26 {
27  // Used to construct the context links (prev/up/next) at the top of each html page.
28  // "links" contains the html code that AppendLink() adds to.
29  // "id" contains the pass (id == 0: prev, 1: up, 2: next)
30  // "n" points to a TNamed that has the URL (without trailing ".html") as the name
31  // and the title as the title.
32 
33  static const char* tag[] = {"&lt;", "^", "&gt;"}; // "<" "^" ">"
34  static const char* name[] = {"prev", "up", "next"}; // for CSS
35  static const TNamed emptyName;
36 
37  // for CSS
38  TString arrowid("contextheadarrow_"); arrowid += name[id];
39  TString entryid("contextheadentry_"); entryid += name[id];
40  TString ardivid("divcontextheadar_"); ardivid += name[id];
41  if (!n) n = &emptyName;
42 
43  TString title;
44  // format for prev, next: script: title (if not empty)
45  // format for up: title
46  if (id != 1) title = n->GetName();
47  if (title.Length()) title += ": ";
48  title += n->GetTitle();
49  const char* mytag = tag[id];
50  // if we don't have a link we don't write <^>
51  if (!n->GetName()[0]) mytag = "";
52  // td for "<" "^" ">"
53  TString arrow = TString::Format("<td id=\"%s\"><div id=\"%s\">"
54  "<a class=\"contextheadarrow\" href=\"%s.html\">%s</a></div></td>",
55  arrowid.Data(), ardivid.Data(), n->GetName(), mytag);
56  // td for the text
57  TString entry = TString::Format("<td class=\"contextheadentry\" id=\"%s\">"
58  "<a class=\"contextheadentry\" href=\"%s.html\">%s</a></td>",
59  entryid.Data(), n->GetName(), title.Data());
60  if (id == 2)
61  // "next" has the text first
62  links += entry + arrow;
63  else
64  links += arrow + entry;
65 }
66 
67 
68 void MakeTopLinks(TString &links, const char* name, const char* title, const char* upLink, const char* upTitle,
69  TObjLink *lnk, const char* dir)
70 {
71 // Create the html code for the navigation box at the top of each page,
72 // showing a link to the previous and next tutorial and to the upper level.
73 // "links" will hold the html code after the function returns,
74 // "title" is the title for the page, displayed below the naviation links
75 // "upLink" is the URL for the up link,
76 // "upTitle" is the text to display for the link.
77 // "lnk" has TNamed as prev and next, with name as URL and title as
78 // title for the previous and next links.
79 
80  links = "<div id=\"toplinks\"><div class=\"descrhead\">"
81  "<table class=\"descrtitle\" id=\"contexttitle\"><tr class=\"descrtitle\">";
82  TObjLink *prevlnk = lnk ? lnk->Prev() : 0;
83  TObjLink *nextlnk = lnk ? lnk->Next() : 0;
84 
85  TNamed* prevname = prevlnk ? (TNamed*)prevlnk->GetObject() : 0;
86  AppendLink(links, 0, prevname);
87 
88  TNamed upname;
89  if (upLink && upLink[0])
90  upname.SetNameTitle(upLink, upTitle);
91  AppendLink(links, 1, &upname);
92 
93  TNamed* nextname = nextlnk ? (TNamed*)nextlnk->GetObject() : 0;
94  AppendLink(links, 2, nextname);
95 
96  links += TString("</tr></table></div><h1 class=\"convert\">") + title + "</h1></div>\n";
97  TString suburl = dir;
98  TString subtitle = dir;
99  if (name) {
100  if (!subtitle.EndsWith("/")) {
101  subtitle += '/';
102  }
103  subtitle += TString(name);
104  suburl = subtitle + "?view=markup";
105  }
106  links += TString::Format("<div class=\"location\"><h2>From <a href=\"http://root.cern.ch/viewvc/trunk/tutorials/%s\">$ROOTSYS/tutorials/%s</a></h2></div>",
107  suburl.Data(), subtitle.Data());
108 }
109 
110 void writeHeader(THtml& html, ostream& out, const char *title, const char* relPath="../") {
111  // Write the html file header
112  // "html" THtml object to use
113  // "out" where to write to
114  // "title" title to display in the browser's bar
115  // "relPath" relative path to the root of the documentation output,
116  // i.e. where to find ROOT.css generated below by THtml::CreateAuxiliaryFiles()
117 
118  TDocOutput docout(html);
119  docout.WriteHtmlHeader(out, title, relPath);
120 }
121 
122 void writeTrailer(THtml& html, ostream& out) {
123  // Write the html file trailer
124  // "html" THtml object to use
125  // "out" where to write to
126 
127  TDocOutput docout(html);
128  docout.WriteHtmlFooter(out);
129 }
130 
131 void writeItem(ostream& out, Int_t numb, const char *ref, const char *name, const char *title, Bool_t isnew) {
132  // Write a list entry in the directory index.
133  // "out" where to write to
134  // "numb" number of the current line
135  // "ref" URL of the line's page
136  // "name" name to display for the link
137  //
138  const char *imagenew = "";
139  cout << "writingItem: " << numb << ", ref=" << ref << ", name=" << name << ", title=" << title << endl;
140  if (isnew) imagenew = " <img src=\"http://root.cern.ch/root/images/new01.gif\" alt=\"new\" align=\"top\" />";
141  out << "<li class=\"idxl" << numb%2 << "\">";
142  out << "<a href=\"" << ref << "\"><span class=\"typename\">" << numb << ". " << name << "</span></a> "
143  << title << imagenew << "</li>" << endl;
144 }
145 
146 void writeItemDir(THtml& html, ostream& out, TObjLink* lnk) {
147  // Process a tutorial directory: add a list entry for it in the
148  // topmost index and add all tutorials in this directory.
149  // "html" THtml object to use
150  // "out" where to write the html code to
151  // "lnk" a TObjLink with Prev() and Next() pointing to TNamed that
152  // hold the URL (name) and the title (title) for the previous
153  // and next tutorial directory.
154 
155  static int n=0;
156  const char *dir = lnk->GetObject()->GetName();
157  const char *title = lnk->GetObject()->GetTitle();
158  out << "<li class=\"idxl" << (n++)%2 << "\"><a href=\"" << dir << "/index.html\">"
159  << "<span class=\"typename\">" << dir << "</span></a>" << title << "</li>" << endl;
160 
161  scandir(html, dir, title, lnk);
162 }
163 
164 void writeTutorials(THtml& html) {
165  // Process all tutorials by looking over the directories in
166  // $ROOTSYS/tutorials, generating index pages showing them
167  // and index pages for each directory showing its tutorials,
168  // and by converting all tutorials to html code, including
169  // the graphics output where possible. The latter is done
170  // using THtml::Convert().
171 
172  // tutorials and their titles; ordered by "significance"
173  const char* tutorials[][2] = {
174  {"hist", "Histograms"},
175  {"graphics", "Basic Graphics"},
176  {"graphs", "TGraph, TGraphErrors, etc"},
177  {"gui", "Graphics User Interface"},
178  {"fit", "Fitting tutorials"},
179  {"fitsio", "CFITSIO interface"},
180  {"io", "Input/Output"},
181  {"tree", "Trees I/O, Queries, Graphics"},
182  {"math", "Math tutorials"},
183  {"matrix", "Matrix packages tutorials"},
184  {"geom", "Geometry package"},
185  {"gl", "OpenGL examples"},
186  {"eve", "Event Display"},
187  {"fft", "Fast Fourier Transforms"},
188  {"foam", "TFoam example"},
189  {"image", "Image Processing"},
190  {"mlp", "Neural Networks"},
191  {"net", "Network, Client/server"},
192  {"physics", "Physics misc"},
193  {"proof", "PROOF tutorials"},
194  {"pyroot", "Python-ROOT"},
195  {"pythia", "Pythia event generator"},
196  {"quadp", "Quadratic Programming package"},
197  {"roofit", "RooFit tutorials"},
198  {"roostats", "Roostats tutorials"},
199  {"ruby", "Ruby-ROOT"},
200  {"spectrum", "Peak Finder, Deconvolutions"},
201  {"splot", "TSPlot example"},
202  {"sql", "SQL Data Bases interfaces"},
203  {"thread", "Multi-Threading examples"},
204  {"unuran", "The Unuran package"},
205  {"xml", "XML tools"},
206  {0, 0}
207  };
208 
209  // the output file for the directory index
210  ofstream fptop("htmldoc/tutorials/index.html");
211  writeHeader(html, fptop,"ROOT Tutorials");
212  TString topLinks;
213  MakeTopLinks(topLinks, 0, "ROOT Tutorials", "../index", "ROOT", 0, "");
214  fptop << topLinks << endl;
215  fptop << "<ul id=\"indx\">" << endl;
216 
217  // Iterate over all tutorial directories.
218  // We need prev and next, so keep prev, curr, and next
219  // in a TList containing three TNamed, and sweep through
220  // the char array tutorials.
221  TList contextList;
222  TNamed prev;
223  TNamed curr(tutorials[0][0], tutorials[0][1]);
224  TNamed next(tutorials[1][0], tutorials[1][1]);
225  contextList.AddLast(&prev);
226  contextList.AddLast(&curr);
227  contextList.AddLast(&next);
228  TObjLink* lnk = contextList.FirstLink();
229  lnk = lnk->Next(); // "curr" is the second link
230  const char** iTut = tutorials[2];
231  while (iTut[0]) {
232  writeItemDir(html, fptop, lnk);
233  prev = curr;
234  curr = next;
235  next.SetNameTitle(iTut[0], iTut[1]);
236  ++iTut; // skip name
237  ++iTut; // skip title
238  }
239 
240  fptop << "</ul>" << endl;
241  fptop << "<p><a href=\"http://root.cern.ch/drupal/content/downloading-root\">Download ROOT</a> and run the tutorials in $ROOTSYS/tutorials yourself!</p>" << endl;
242  writeTrailer(html, fptop);
243 }
244 
245 void GetMacroTitle(const char *fullpath, TString &comment, Bool_t &compile) {
246  // Find the best line with a title by scanning the first 50 lines of a macro.
247  // "fullpath" location of the macro
248  // "comment" is set to the comment (i.e. title) found in the macro
249  // "compile" is set to true if the macro should be compiled, i.e. the
250  // title line starts with "//+ " (note the space)
251  compile = kFALSE;
252  FILE *fp = fopen(fullpath,"r");
253  char line[250];
254  int nlines = 0;
255  while (fgets(line,240,fp)) {
256  nlines++;
257  char *com = strstr(line,"//");
258  if (com) {
259  if (strstr(line,"Author")) continue;
260  if (strstr(line,"@(#)")) continue;
261  if (strstr(line,"****")) continue;
262  if (strstr(line,"////")) continue;
263  if (strstr(line,"====")) continue;
264  if (strstr(line,"....")) continue;
265  if (strstr(line,"----")) continue;
266  if (strstr(line,"____")) continue;
267  if (strlen(com+1) < 5) continue;
268  if (!strncmp(com,"//+ ", 4)) {
269  compile = kTRUE;
270  com += 2; // skip "+ ", too.
271  }
272  comment = com+2;
273  break;
274  }
275  if (nlines > 50) break;
276  }
277  fclose(fp);
278 }
279 
280 Bool_t IsNew(const char *filename) {
281  // Check if filename in SVN is newer than 6 months
282  gSystem->Exec(Form("svn info %s > MakeTutorials-tmp.log",filename));
283  FILE *fpdate = fopen("MakeTutorials-tmp.log","r");
284  char line[250];
285  Bool_t isnew = kFALSE;
286  TDatime today;
287  Int_t now = 365*(today.GetYear()-1)+12*(today.GetMonth()-1) + today.GetDay();
288  Int_t year,month,day;
289  while (fgets(line,240,fpdate)) {
290  const char *com = strstr(line,"Last Changed Date: ");
291  if (com) {
292  sscanf(&com[19],"%d-%d-%d",&year,&month,&day);
293  Int_t filedate = 365*(year-1) + 12*(month-1) + day; //see TDatime::GetDate
294  if (now-filedate< 6*30) isnew = kTRUE;
295  break;
296  }
297  }
298  fclose(fpdate);
299  gSystem->Unlink("MakeTutorials-tmp.log");
300  return isnew;
301 }
302 
303 Bool_t CreateOutput_Dir(const char* dir) {
304  // Whether THtml::Convert() should run the tutorials in the
305  // directory "dir" and store their output
306 
307  if (strstr(dir,"net")) return kFALSE;
308  if (strstr(dir,"xml")) return kFALSE;
309  if (strstr(dir,"sql")) return kFALSE;
310  if (strstr(dir,"proof")) return kFALSE;
311  if (strstr(dir,"foam")) return kFALSE;
312  if (strstr(dir,"unuran")) return kFALSE;
313  if (strstr(dir,"roofit")) return kFALSE;
314  if (strstr(dir,"thread")) return kFALSE;
315  return kTRUE;
316 }
317 Bool_t CreateOutput_Tutorial(const char* tut) {
318  // Whether THtml::Convert() should run the tutorial "tut"
319  // and store its output
320 
321  static const char* vetoed[] = {
322  "geodemo",
323  "peaks2",
324  "testUnfold",
325  "readCode",
326  "importCode",
327  "hadd",
328  "line3Dfit",
329  "gtime",
330  "games",
331  "guiWithCINT",
332  "Qt",
333  "rs401d_FeldmanCousins",
334  "graph_edit_playback",
335  "fitpanel_playback",
336  "guitest_playback",
337  "geom_cms_playback",
338  "gviz3d.C",
339  0
340  };
341 
342  for (const char** iVetoed = vetoed; *iVetoed; ++iVetoed)
343  if (strstr(tut, *iVetoed))
344  return kFALSE;
345 
346  return kTRUE;
347 }
348 
349 void scandir(THtml& html, const char *dir, const char *title, TObjLink* toplnk) {
350  // Process a directory containing tutorials by converting all tutorials to
351  // html and creating an index of all tutorials in the directory.
352 
353  TString fullpath("htmldoc/tutorials/");
354  fullpath += dir;
355  if (!gSystem->OpenDirectory(fullpath)) gSystem->MakeDirectory(fullpath);
356  fullpath += "/index.html";
357  // The index for the current directory
358  ofstream fpind(fullpath);
359  writeHeader(html, fpind, title, "../../");
360 
361  TString topLinks;
362  // Creates links to prev: "hist.html", up: ".html", next: "graph.html".
363  MakeTopLinks(topLinks, 0, title, ".", "ROOT Tutorials", toplnk, dir);
364  // But we need links to prev: "../hist/index.html", up: "../index.html", next: "graph/index.html",
365  // so the following works:
366  topLinks.ReplaceAll("href=\"", "href=\"../");
367  topLinks.ReplaceAll("href=\"../http://", "href=\"http://");
368  topLinks.ReplaceAll("href=\"../https://", "href=\"https://");
369  topLinks.ReplaceAll(".html\"", "/index.html\"");
370  // Also prepend "ROOT Tutorials" to the current title:
371  topLinks.ReplaceAll("<h1 class=\"convert\">", "<h1 class=\"convert\">ROOT Tutorials: ");
372  fpind << topLinks << endl;
373  fpind << "<ul id=\"indx\">" << endl;
374 
375  TString outpath("htmldoc/tutorials/");
376  outpath += dir;
377  TString inpath("$ROOTSYS/tutorials/");
378  inpath += dir;
379  inpath += "/";
380  gSystem->ExpandPathName(inpath);
381  void *thedir = gSystem->OpenDirectory(inpath);
382  if (!thedir) {
383  printf("MakeTutorials.C: error opening directory %s", inpath.Data());
384  return;
385  }
386  const char *direntry;
387  THashList h;
388  while ((direntry = gSystem->GetDirEntry(thedir))) {
389  if(*direntry =='.') continue;
390  const char *CC = strstr(direntry,".C");
391  // must end on ".C"
392  if (!CC || *(CC+2)) continue;
393  // do not even document these; they are part of another tutorial:
394  if(strstr(direntry,"h1anal")) continue;
395  if(strstr(direntry,"hsimpleProxy")) continue;
396  if(strstr(direntry,"tv3")) continue;
397  if(strstr(direntry,"tvdemo")) continue;
398  if(strstr(direntry,"na49")) continue;
399  if(strstr(direntry,"fit1_C")) continue;
400  if(strstr(direntry,"c1.C")) continue;
401  if(strstr(direntry,"MDF.C")) continue;
402  if(strstr(direntry,"cms_calo_detail")) continue;
403  TString atut(inpath + direntry);
404  TString comment;
405  Bool_t compile;
406  GetMacroTitle(atut,comment, compile);
407  TNamed *named = new TNamed(direntry,comment.Data());
408  if (compile) named->SetBit(BIT(14));
409  h.Add(named);
410  }
411  h.Sort();
412  int numb = 0;
413  TObjLink *lnk = h.FirstLink();
414  while (lnk) {
415  TNamed* named = (TNamed*)lnk->GetObject();
416  Bool_t compile = named->TestBit(BIT(14));
417  direntry = named->GetName();
418  TString atut(inpath + direntry);
419  numb++;
420  TString iname(direntry);
421  iname += ".html";
422  writeItem(fpind, numb, iname, direntry, named->GetTitle(), IsNew(atut));
423  Int_t includeOutput = THtml::kNoOutput;
424  if (!gROOT->IsBatch()) {
425  if (compile)
426  includeOutput = THtml::kCompiledOutput;
427  else
428  includeOutput = THtml::kInterpretedOutput;
429  includeOutput |= THtml::kSeparateProcessOutput;
430  }
431  if (!CreateOutput_Dir(dir) || !CreateOutput_Tutorial(direntry))
432  includeOutput = THtml::kNoOutput;
433 
434  TString links;
435  TString tutTitle(named->GetName());
436  tutTitle += ": ";
437  tutTitle += named->GetTitle();
438  MakeTopLinks(links,named->GetName(),tutTitle,"index",title,lnk, dir);
439  html.Convert(atut,named->GetTitle(),outpath,"../../",includeOutput,links);
440  gROOT->GetListOfCanvases()->Delete();
441  gROOT->CloseFiles();
442  gROOT->GetListOfFunctions()->Delete();
443  gROOT->GetListOfBrowsers()->Delete();
444  gROOT->GetListOfGeometries()->Delete();
445  //gROOT->GetListOfSpecials()->Delete();
446  // Create some styles
447  gStyle = 0;
449  gROOT->SetStyle("Default");
450  lnk = lnk->Next();
451  }
452  fpind << "</ul>" << endl;
453  writeTrailer(html, fpind);
454 }
455 
457  // Bring the ROOT tutorials on the web, see http://root.cern.ch/root/html/tutorials/.
458  // Demonstrates the use of THtml:Convert() in a realistic context.
459 
460  if (!gSystem->OpenDirectory("htmldoc")) gSystem->MakeDirectory("htmldoc");
461  if (!gSystem->OpenDirectory("htmldoc/tutorials")) gSystem->MakeDirectory("htmldoc/tutorials");
462  gEnv->SetValue("Unix.*.Root.Html.SourceDir", "$(ROOTSYS)");
463  gEnv->SetValue("Root.Html.ViewCVS","http://root.cern.ch/viewcvs/trunk/%f?view=log");
464  gEnv->SetValue("Root.Html.Search", "http://www.google.com/search?q=%s+site%3A%u");
465  THtml html;
466  html.LoadAllLibs();
467  //gROOT->ProcessLine(".x htmlLoadlibs.C");
468  html.CreateAuxiliaryFiles();
469  writeTutorials(html);
470 }
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:47
void writeTutorials(THtml &html)
TLine * line
void writeTrailer(THtml &html, ostream &out)
R__EXTERN TStyle * gStyle
Definition: TStyle.h:406
#define BIT(n)
Definition: Rtypes.h:78
Bool_t CreateOutput_Dir(const char *dir)
Bool_t IsNew(const char *filename)
virtual int MakeDirectory(const char *name)
Make a directory.
Definition: TSystem.cxx:825
static void LoadAllLibs()
Load all libraries known to ROOT via the rootmap system.
Definition: THtml.cxx:2202
#define gROOT
Definition: TROOT.h:410
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition: TObject.h:172
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
STL namespace.
virtual void SetNameTitle(const char *name, const char *title)
Set all the TNamed parameters (name and title).
Definition: TNamed.cxx:154
virtual void AddLast(TObject *obj)
Add object at the end of the list.
Definition: TList.cxx:149
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:694
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=0)
Set the value of a resource or create a new resource.
Definition: TEnv.cxx:736
virtual void Sort(Bool_t order=kSortAscending)
Sort linked list.
Definition: TList.cxx:933
virtual const char * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
Definition: TSystem.cxx:851
virtual int Unlink(const char *name)
Unlink, i.e. remove, a file.
Definition: TSystem.cxx:1357
Int_t GetDay() const
Definition: TDatime.h:67
void scandir(THtml &html, const char *dir, const char *title, TObjLink *toplnk)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
Definition: TString.cxx:2286
virtual void CreateAuxiliaryFiles() const
copy CSS, javascript file, etc to the output dir
Definition: THtml.cxx:1291
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
Definition: THashList.h:34
TArrow * arrow
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
Int_t GetMonth() const
Definition: TDatime.h:66
void writeItemDir(THtml &html, ostream &out, TObjLink *lnk)
void WriteHtmlFooter(std::ostream &out, const char *dir, const char *lastUpdate, const char *author, const char *copyright, const char *footer)
Write HTML footer.
XFontStruct * id
Definition: TGX11.cxx:108
A doubly linked list.
Definition: TList.h:44
void writeHeader(THtml &html, ostream &out, const char *title, const char *relPath="../")
R__EXTERN TSystem * gSystem
Definition: TSystem.h:540
void MakeTutorials()
char * Form(const char *fmt,...)
virtual Int_t Exec(const char *shellcmd)
Execute a command.
Definition: TSystem.cxx:661
void Convert(const char *filename, const char *title, const char *dirname="", const char *relpath="../", Int_t includeOutput=kNoOutput, const char *context="")
It converts a single text file to HTML.
Definition: THtml.cxx:1462
virtual TObjLink * FirstLink() const
Definition: TList.h:108
#define h(i)
Definition: RSha256.hxx:106
void WriteHtmlHeader(std::ostream &out, const char *titleNoSpecial, const char *dir, TClass *cls, const char *header)
Write HTML header.
const Bool_t kFALSE
Definition: RtypesCore.h:88
static void BuildStyles()
Create some standard styles.
Definition: TStyle.cxx:421
R__EXTERN TEnv * gEnv
Definition: TEnv.h:171
Bool_t CreateOutput_Tutorial(const char *tut)
void writeItem(ostream &out, Int_t numb, const char *ref, const char *name, const char *title, Bool_t isnew)
virtual const char * GetTitle() const
Returns title of object.
Definition: TObject.cxx:401
void AppendLink(TString &links, int id, const TNamed *n)
Definition: MakeTutorials.C:25
virtual void Add(TObject *obj)
Definition: TList.h:87
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
Definition: TSystem.cxx:834
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
Definition: TSystem.cxx:1254
virtual const char * GetName() const
Returns name of object.
Definition: TObject.cxx:357
Int_t GetYear() const
Definition: TDatime.h:65
const Bool_t kTRUE
Definition: RtypesCore.h:87
const Int_t n
Definition: legend1.C:16
void MakeTopLinks(TString &links, const char *name, const char *title, const char *upLink, const char *upTitle, TObjLink *lnk, const char *dir)
Definition: MakeTutorials.C:68
Definition: THtml.h:40
char name[80]
Definition: TGX11.cxx:109
virtual const char * GetTitle() const
Returns title of object.
Definition: TNamed.h:48
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
Definition: TDatime.h:37
void GetMacroTitle(const char *fullpath, TString &comment, Bool_t &compile)