source: trunk/source/interfaces/XVT/src/G4UIxvt.cc @ 1274

Last change on this file since 1274 was 1274, checked in by garnier, 14 years ago

update...

File size: 24.9 KB
Line 
1//
2// ********************************************************************
3// * DISCLAIMER                                                       *
4// *                                                                  *
5// * The following disclaimer summarizes all the specific disclaimers *
6// * of contributors to this software. The specific disclaimers,which *
7// * govern, are listed with their locations in:                      *
8// *   http://cern.ch/geant4/license                                  *
9// *                                                                  *
10// * Neither the authors of this software system, nor their employing *
11// * institutes,nor the agencies providing financial support for this *
12// * work  make  any representation or  warranty, express or implied, *
13// * regarding  this  software system or assume any liability for its *
14// * use.                                                             *
15// *                                                                  *
16// * This  code  implementation is the  intellectual property  of the *
17// * GEANT4 collaboration.                                            *
18// * By copying,  distributing  or modifying the Program (or any work *
19// * based  on  the Program)  you indicate  your  acceptance of  this *
20// * statement, and all its terms.                                    *
21// ********************************************************************
22//
23//
24// $Id: G4UIxvt.cc,v 1.5 2002/12/04 22:03:09 asaim Exp $
25// GEANT4 tag $Name:  $
26//
27#ifdef G4UI_BUILD_XVT_SESSION
28
29////////////////////////////////////////////////////////////////////////////
30//                   XVT driver class implementation
31//                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32// Written by: Simon Prior
33//       Date: 23/04/97
34//
35// Updated for state machine: 12/08/97
36//
37// The update consisted of adding the new state methods and I also deleted
38// a lot of old redundant code (like ChangeDirectory etc which aren't
39// needed with the XVT GUI).
40//
41////////////////////////////////////////////////////////////////////////////
42#include "G4UIxvt.hh"
43#include "G4StateManager.hh"
44#include "G4UIxvtMessenger.hh"
45
46////////////////////////////////////////////////////////////////////////////
47//                   
48// G4UIxvt - Consructor
49//
50// Initalise the class variables.
51//
52// Note: number is the number of bytes transfered with each read or write.
53//
54////////////////////////////////////////////////////////////////////////////
55G4UIxvt::G4UIxvt()
56{ 
57  UI = G4UImanager::GetUIpointer();
58
59  iExit = false;
60  iCont = false;
61 
62  for(int i=0;i<4;i++)
63  { 
64    brktbl[i] = false; 
65  }
66 
67  noBreakFlag = true;
68  verboseFlag = true;
69  new G4UIxvtMessenger(this);
70
71  number = 100;
72  currentPosition = 0;
73  lastPosition = 100;
74}
75
76
77////////////////////////////////////////////////////////////////////////////
78//
79// ~G4UIxvt - Destructor
80//
81////////////////////////////////////////////////////////////////////////////
82G4UIxvt::~G4UIxvt()
83{
84
85}
86
87////////////////////////////////////////////////////////////////////////////
88//
89// Notify
90//
91// Notifies the user of the state changes of the system.
92//
93////////////////////////////////////////////////////////////////////////////
94//G4bool G4UIxvt::Notify(G4ApplicationState requestedState)
95//{
96//  G4StateManager * statM = G4StateManager::GetStateManager();
97//  G4ApplicationState previousState = statM->GetPreviousState();
98//
99//  if(verboseFlag)
100//  {
101//    writeGeantToXvt("========== STATE CHANGE ===========");
102//    writeGeantToXvt("FROM: " + statM->GetStateString(previousState));
103//    writeGeantToXvt("  TO: " + statM->GetStateString(requestedState));
104//    writeGeantToXvt("===================================");
105//  }
106//
107//  if(requestedState==Pause || breakRequested(previousState,requestedState))
108//  {
109//    additionalSession();
110//  }
111// 
112//  return true;
113//}
114 
115////////////////////////////////////////////////////////////////////////////
116//
117// breakRequested
118//
119// Notifies and puts breaks in the Geant4 run.
120//
121////////////////////////////////////////////////////////////////////////////
122G4bool G4UIxvt::breakRequested(G4ApplicationState previousState,
123                                    G4ApplicationState requestedState)
124{
125  if(noBreakFlag) return false;
126
127  G4bool ans = false;
128
129  if(previousState==G4State_Idle && requestedState==G4State_GeomClosed && brktbl[0])
130  { 
131    writeGeantToXvt("====== BREAKPOINT NOTIFICATION ======");
132    writeGeantToXvt("BreakPoint at: BEGIN OF RUN");
133    writeGeantToXvt("Enter 'continue' command to proceed");
134    writeGeantToXvt("=====================================");
135   
136    ans = true;
137  }
138
139  if(previousState==G4State_GeomClosed && requestedState==G4State_EventProc && brktbl[1])
140  { 
141    writeGeantToXvt("====== BREAKPOINT NOTIFICATION ======");
142    writeGeantToXvt("BreakPoint at: BEGIN OF EVENT");
143    writeGeantToXvt("Enter 'continue' command to proceed");
144    writeGeantToXvt("=====================================");
145   
146    ans = true;
147  }
148
149  if(previousState==G4State_EventProc && requestedState==G4State_GeomClosed && brktbl[2])
150  {     
151    writeGeantToXvt("====== BREAKPOINT NOTIFICATION ======");
152    writeGeantToXvt("BreakPoint at: END OF EVENT");
153    writeGeantToXvt("Enter 'continue' command to proceed");
154    writeGeantToXvt("=====================================");
155   
156    ans = true;
157  }
158
159  if(previousState==G4State_GeomClosed && requestedState==G4State_Idle && brktbl[3])
160  { 
161    writeGeantToXvt("====== BREAKPOINT NOTIFICATION ======");
162    writeGeantToXvt("BreakPoint at: END OF RUN");   
163    writeGeantToXvt("Enter 'continue' command to proceed");
164    writeGeantToXvt("=====================================");
165   
166    ans = true;
167  }
168
169  return ans;
170}
171
172////////////////////////////////////////////////////////////////////////////
173//
174// set_verbose
175//
176// Toggles the Verbose state of the GUI concerning the state machine.
177//
178////////////////////////////////////////////////////////////////////////////
179void G4UIxvt::set_verbose(void)
180{
181  verboseFlag = !verboseFlag;
182 
183  if (verboseFlag)   
184  {
185    writeGeantToXvt("Verbose mode switched ON");
186  }
187  else
188  {
189    writeGeantToXvt("Verbose mode switched OFF");
190  }
191}
192
193
194////////////////////////////////////////////////////////////////////////////
195//
196// SessionStart
197//
198// Informs user of Geant Kernel starting and does a 'brief' command listing.
199// Update: 12/08/97 - now used as main control of Geant (get command is
200//         currently called from here NOT from the UIManager.
201//
202////////////////////////////////////////////////////////////////////////////
203//void G4UIxvt::SessionStart(void)
204G4UIsession*  G4UIxvt::SessionStart(void)
205{
206  openConnections();
207  writeGeantToXvt("Connection to Geant open...\0");   
208 
209  G4UImanager * UI = G4UImanager::GetUIpointer();
210  G4UIcommandTree * comTree = UI->GetTree();
211
212  fillArrayEntries(comTree, 0);
213
214  G4cout << " --------- List of Array Entries ---------- " << G4endl;
215
216  listCommandArray();
217  briefListCommands();
218 
219  // --- Enter main program control --- //
220 
221  iExit = true;
222
223  while( iExit )
224  {
225    G4String newCommand = GetCommand();
226    if(newCommand.length()>1) UI->ApplyCommand(newCommand);
227  }   
228  return NULL;
229}
230
231
232////////////////////////////////////////////////////////////////////////////
233//
234// additionalSession
235//
236//
237//
238////////////////////////////////////////////////////////////////////////////
239void G4UIxvt::additionalSession(void)
240{
241  writeGeantToXvt("=== Entering Addtional Session ===");
242  iCont = true;
243  while( iCont )
244  {
245    G4String newCommand = GetCommand();
246    if(newCommand.length()>1) UI->ApplyCommand(newCommand);
247  }
248}
249
250
251////////////////////////////////////////////////////////////////////////////
252//
253// SessionTerminate
254//
255// Informs user that Geant has terminated.
256//
257////////////////////////////////////////////////////////////////////////////
258void G4UIxvt::SessionTerminate(void)
259{
260  writeGeantToXvt("XVT <-> Geant4 terminating...");
261}
262
263
264////////////////////////////////////////////////////////////////////////////
265//
266// openConnections                 
267//
268// This method opens the IPC connection.   
269//
270// Open the named pipes in the current directory using the
271// appropriate permissions.
272//
273////////////////////////////////////////////////////////////////////////////
274void G4UIxvt::openConnections(void)
275{         
276  int o_flags;
277 
278  o_flags = O_WRONLY | O_NONBLOCK;
279 
280  if((fd_GeantToXvt = open(GeantToXvt, o_flags)) == -1)
281  {
282    errorHandler("GeantToXvt pipe opening");
283  }
284 
285  o_flags = O_RDONLY | O_NONBLOCK;
286 
287  if((fd_XvtToGeant = open(XvtToGeant, o_flags)) == -1)
288  {
289    errorHandler("XvtToGeant pipe opening"); 
290  } 
291}
292
293
294////////////////////////////////////////////////////////////////////////////
295//                   
296// checkXvtToGeantPipe
297//
298// This method checks to see if the XvtToGeant pipe contains anything.
299// Thus meaning it will be readable without blocking.
300//
301// Returns 0 if nothing present, 1 otherwise.
302//
303////////////////////////////////////////////////////////////////////////////
304int G4UIxvt::checkXvtToGeantPipe(void)
305{
306  int nbytes;
307  ioctl(fd_XvtToGeant, FIONREAD, &nbytes);
308 
309  if (nbytes > 0)
310    return 1;
311  else
312    return 0;
313}
314
315
316////////////////////////////////////////////////////////////////////////////
317//                   
318// readXvtToGeant
319//
320// This method grabs the data in the XvtToGeant named pipe, and
321// returns it to the caller.
322//
323////////////////////////////////////////////////////////////////////////////
324G4String G4UIxvt::readXvtToGeant(void)
325{
326  int bytes_read = read(fd_XvtToGeant, textDump, number);
327  textDump[bytes_read] = '\0'; 
328  G4String newString = textDump;
329  return newString;
330}
331 
332 
333////////////////////////////////////////////////////////////////////////////
334//
335// writeGeantToXvt                 
336//
337// This method writes the passed string to the GeantToXvt named pipe.
338//
339////////////////////////////////////////////////////////////////////////////
340void G4UIxvt::writeGeantToXvt(const G4String& theString)
341{
342  int write_check = write(fd_GeantToXvt, theString, number);
343   
344  if(write_check == -1)
345    G4cout << "ERROR WITH WRITE!!" << G4endl;
346}
347
348
349///////////////////////////////////////////////////////////////////////////////
350//
351// errorHandler
352//
353// A general purpose error handler.  It can be called by any method.  A string
354// is passed so that this method simply prints a message via G4cout that explains
355// what the error is.
356//
357///////////////////////////////////////////////////////////////////////////////
358void G4UIxvt::errorHandler(const G4String& theError)
359{
360  G4cout << "Error with " << theError << G4endl; 
361}
362
363
364////////////////////////////////////////////////////////////////////////////
365//
366// GetCommand
367//
368// This method is called by SessionStart to get a command from the user.
369//
370// It enters a loop to repeatedly check the Geant end of the named pipe.
371// When something is present in the pipe (sent by XVT GUI) it then grabs it
372// and returns the string to the caller.
373//
374////////////////////////////////////////////////////////////////////////////
375G4String G4UIxvt::GetCommand()
376{
377  G4String newCommand('\0');
378  G4UImanager * UI = G4UImanager::GetUIpointer();
379  while( 1 )
380  {
381    int Done = 0;
382 
383    while (!Done)
384    {
385      if (checkXvtToGeantPipe())
386      {
387        newCommand = readXvtToGeant();
388        Done = 1;
389      }
390      else
391        ; // Pipe is empty so loop again
392    }
393
394    G4String nC = newCommand;
395   
396    if(nC == "getCommands")
397    {
398      sendArrayEntriesToXvt();
399    }
400    else if( nC == "/control/exit" )
401    { 
402      if( iCont )
403      { 
404        writeGeantToXvt("You are now processing RUN.");
405        writeGeantToXvt("Please abort it using \"/run/abort\" command first");
406        writeGeantToXvt("and use \"continue\" command until the application");
407        writeGeantToXvt("becomes Idle.");       
408      }
409      else
410      {
411        iExit = false;
412        newCommand = "/";
413        break;
414      }
415    }   
416    else if( nC(0,4) == "cont" )
417    { 
418      iCont = false;
419      newCommand = "/";
420      break;
421    }   
422    else
423    { 
424      break; 
425    }
426  }
427
428  if( newCommand(0) != '/' )
429    G4cerr << "IT GOT THERE!!!!" << G4endl;
430    // If you ever see the error message in the output something has gone
431    // wrong.
432
433  return newCommand;
434
435}
436
437
438////////////////////////////////////////////////////////////////////////////
439//
440// codeGen
441//
442// Traverses the command tree and retrieves the directories and
443// subdirectories of available commands.
444//
445// This does a 'brief' listing, i.e. does not List the guidance or
446// parameters.
447//
448// I have updated this method from the TCL implementation for XVT.
449// The differences are that G4cout is not used and some string concatenation
450// is Done differently (i.e. not with G4cout).
451//
452// This is still however not really needed and might be deleted.
453//
454////////////////////////////////////////////////////////////////////////////
455void G4UIxvt::codeGen(G4UIcommandTree * tree, int level)
456{ 
457  int treeEntry;
458  int commandEntry; 
459  treeEntry = tree->GetTreeEntry();
460  commandEntry = tree->GetCommandEntry();
461  G4String commandPath;
462  G4String pathName; //tree name
463  G4UIcommandTree * t;
464
465  // --- this loop lists the current directory and its commands --- //
466 
467  for(int com=0; com<commandEntry; com++)
468  {
469    commandPath = tree->GetCommand(com+1)->GetCommandPath();
470    if(level==0) 
471    {
472      // This is not normally executed   
473      writeGeantToXvt(commandPath);  // Unsure as to what this does         
474    }
475    else     
476    {     
477      writeGeantToXvt(commandPath + " command");  // this gives the commands
478    }
479  }
480
481  if(treeEntry == 0) 
482    return; //end recursion
483
484  for(int i=0; i< treeEntry; i++)
485  {
486    t = tree->GetTree(i+1);
487    pathName =  t->GetPathName();   
488    if(level == 0) 
489    {
490      writeGeantToXvt(pathName);  // This is the directory name
491    }
492    else
493    {     
494      writeGeantToXvt(pathName + " cascade"); // This is the sub dirs     
495    }
496     
497    codeGen(t, level+1);
498  }
499}
500
501
502////////////////////////////////////////////////////////////////////////////
503//
504// briefListCommands
505//
506// This method uses codeGen to traverse the tree and List the commands
507// and directories - it does a brief listing, i.e. no parameters or guidance
508// accompanying the text.
509//
510////////////////////////////////////////////////////////////////////////////
511void G4UIxvt::briefListCommands(void)
512{
513  writeGeantToXvt("--- Brief List of available commands ---");
514  G4UIcommandTree * comTree = UI->GetTree();
515  codeGen(comTree, 0);
516}
517
518
519////////////////////////////////////////////////////////////////////////////
520//
521// ListCurrentDirectory
522//
523// This is the XVT specific implementation of the 'List Current' method
524// from the G4UICommandTree class.
525//
526// It is almost the same only instead of any couts all the data is written
527// to the named pipe for XVT to process.
528//
529// Although this is entirely XVT specific it may be deleted because it is
530// not really needed. (most directory navigation methods that were so
531// important in the terminal session aren't needed in this XVT GUI
532// implementation.)
533//
534// I have left it here in case similar code is needed in the future - this
535// demonstrates how to access the command tree etc.
536//
537////////////////////////////////////////////////////////////////////////////
538void G4UIxvt::listCurrentDirectory(void)
539{
540  G4UIcommandTree * comTree = UI->GetTree();
541  G4String path = comTree->GetPathName();
542 
543  writeGeantToXvt("Command Directory Path: " + path);
544
545  // --- Guidance code --- //
546
547  G4UIcommand * tempGuidance = (G4UIcommand *)comTree->GetGuidance();
548 
549  if (tempGuidance != NULL)
550  {
551    writeGeantToXvt("Command: " + tempGuidance->GetCommandPath());
552    writeGeantToXvt("Guidance: ");
553
554    int n_guidanceEntry = tempGuidance->GetGuidanceEntries();
555
556    for (int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ )
557    {
558      writeGeantToXvt(tempGuidance->GetGuidanceLine(i_thGuidance));
559    }
560
561    int n_parameterEntry = tempGuidance->GetParameterEntries();
562 
563    if(n_parameterEntry > 0)
564    {
565      for( int i_thParameter=0; i_thParameter<n_parameterEntry; i_thParameter++ )
566      {
567        G4UIparameter * tempParameter = (G4UIparameter *)tempGuidance->GetParameter(i_thParameter);
568   
569        writeGeantToXvt("Parameter: " + tempParameter->GetParameterName());
570        writeGeantToXvt(tempParameter->GetParameterGuidance());
571        writeGeantToXvt("Parameter type: " + tempParameter->GetParameterType());
572     
573        // --- remember to fix the below bug --- //
574     
575        // writeGeantToXvt("Omittable: " + tempParameter->IsOmittable());
576     
577        writeGeantToXvt("Default Value: " + tempParameter->GetDefaultValue());
578        writeGeantToXvt("Parameter Range: " + tempParameter->GetParameterRange());
579      }
580    }                   
581  }
582 
583  // --- End of Guidance code --- //
584 
585  writeGeantToXvt("Sub Directories: ");
586 
587  int n_treeEntry = comTree->GetTreeEntry();
588 
589  for( int i_thTree = 0; i_thTree < n_treeEntry; i_thTree++ )
590  {
591    G4UIcommandTree * tempTree = comTree->GetTree(i_thTree + 1);   
592    writeGeantToXvt(tempTree->GetPathName() + tempTree->GetTitle());
593  }                     
594 
595  writeGeantToXvt("Commands : ");
596 
597  int n_commandEntry = comTree->GetCommandEntry();
598 
599  for( int i_thCommand = 0; i_thCommand < n_commandEntry; i_thCommand++ )
600  {
601    G4UIcommand * tempCommand = comTree->GetCommand(i_thCommand + 1);   
602    writeGeantToXvt(tempCommand->GetCommandName() + tempCommand->GetTitle());
603  }                     
604}
605
606////////////////////////////////////////////////////////////////////////////
607// Methods for handling the command information                           //
608////////////////////////////////////////////////////////////////////////////
609
610////////////////////////////////////////////////////////////////////////////
611//
612// sendArrayEntriesToXvt
613//
614// This goes through the commandArray when called and sends all the command
615// information down the named pipe to XVT.
616//
617// It must first send the control command 'comTree' to alert XVT of the
618// following commands - XVT can then take action to fill its own 'commandArray'
619// with the ensuing strings passed to it.
620//
621////////////////////////////////////////////////////////////////////////////
622void G4UIxvt::sendArrayEntriesToXvt(void)
623{
624  writeGeantToXvt("comTree");
625 
626  char theInt[5];
627  sprintf(theInt, "%d", currentPosition);
628 
629  writeGeantToXvt(theInt);
630
631  // --- Output all the Data from the array to the named pipe --- //
632 
633  for (int i = 0; i < currentPosition; i++)
634  {
635    // --- Send flag to XVT --- //
636    sprintf(theInt, "%d",commandArray[i].flag);     
637    writeGeantToXvt(theInt);
638   
639    // --- Send name and guidance --- //
640    writeGeantToXvt(commandArray[i].name);
641    writeGeantToXvt(commandArray[i].guidance);
642   
643    // --- Send number of parameters --- //
644    sprintf(theInt, "%d", commandArray[i].numOfParameters);
645    writeGeantToXvt(theInt);
646   
647    // --- if there are parameters send them next --- //
648    if (commandArray[i].numOfParameters > 0)
649    {
650      for(int x = 0; x < commandArray[i].numOfParameters; x++)
651      {
652        writeGeantToXvt(commandArray[i].parameters[x].name);
653        writeGeantToXvt(commandArray[i].parameters[x].guidance);
654        writeGeantToXvt(commandArray[i].parameters[x].defaultValue);
655        writeGeantToXvt(commandArray[i].parameters[x].range);
656        writeGeantToXvt(commandArray[i].parameters[x].candidate);
657        writeGeantToXvt(commandArray[i].parameters[x].type);
658        writeGeantToXvt(commandArray[i].parameters[x].omittable);     
659      }   
660    }             
661   
662    // --- Send number --- //
663    sprintf(theInt, "%d", commandArray[i].commandNumber);   
664    writeGeantToXvt(theInt);
665  }   
666}
667
668
669////////////////////////////////////////////////////////////////////////////
670//
671// fillArrayEntries
672//
673// This traverses the command tree and fills in the command structures in
674// the class variable 'commandArray'.
675//
676// Note: for flag value:
677//
678//       0 = Directory
679//       1 = command
680//       2 = subdirectory
681//
682////////////////////////////////////////////////////////////////////////////
683void G4UIxvt::fillArrayEntries(G4UIcommandTree * tree, int level)
684{
685  int treeEntry;
686  int commandEntry; 
687
688  treeEntry = tree->GetTreeEntry();
689  commandEntry = tree->GetCommandEntry();
690
691  G4String commandPath;
692  G4String pathName; //tree name
693  G4UIcommandTree * t;
694
695  // New variables
696  G4UIcommand * tempCommand;
697  G4UIparameter * tempParameter;
698 
699  // --- this loop lists the current directory and its commands --- //
700 
701  for(int com=0; com<commandEntry; com++)
702  {
703    tempCommand = (G4UIcommand *)tree->GetCommand(com+1);   
704   
705    commandPath = tree->GetCommand(com+1)->GetCommandPath();       
706    if(level==0) 
707    {
708      // --- This code shouldn't ever get executed --- //
709      G4cout << "Printing command Path" << commandPath << G4endl;
710    }
711    else     
712    {
713      commandArray[currentPosition].flag = 1;
714      commandArray[currentPosition].name = commandPath;     
715      commandArray[currentPosition].guidance = tempCommand->GetTitle();     
716      commandArray[currentPosition].numOfParameters = tempCommand->GetParameterEntries();
717           
718      int numParam = tempCommand->GetParameterEntries();
719     
720      if(numParam != 0)
721      {             
722        for(int x = 0; x < numParam; x++)
723        {
724          tempParameter = (G4UIparameter*)tempCommand->GetParameter(x); 
725
726          commandArray[currentPosition].parameters[x].name = tempParameter->GetParameterName();
727          commandArray[currentPosition].parameters[x].guidance = tempParameter->GetParameterGuidance();
728          commandArray[currentPosition].parameters[x].defaultValue = tempParameter->GetDefaultValue();
729          commandArray[currentPosition].parameters[x].range = tempParameter->GetParameterRange();
730          commandArray[currentPosition].parameters[x].candidate = tempParameter->GetParameterCandidate();
731          commandArray[currentPosition].parameters[x].type = tempParameter->GetParameterType();
732//          commandArray[currentPosition].parameters[x].omittable = tempParameter->IsOmittable();
733        }     
734      }
735     
736      commandArray[currentPosition].commandNumber = currentPosition;
737
738      currentPosition = currentPosition + 1;
739    }
740  }
741
742  if(treeEntry == 0) 
743    return; //end recursion
744 
745  G4UIcommand * treeGuidance; 
746 
747  for(int i=0; i< treeEntry; i++)
748  {
749    t = tree->GetTree(i+1);
750    pathName =  t->GetPathName();   
751   
752    treeGuidance = (G4UIcommand *)t->GetGuidance();
753   
754    if(level == 0) 
755    {
756      commandArray[currentPosition].flag = 0;
757      commandArray[currentPosition].name = pathName;
758      commandArray[currentPosition].guidance = treeGuidance->GetTitle();     
759      commandArray[currentPosition].numOfParameters = 0;
760      commandArray[currentPosition].commandNumber = currentPosition;
761
762      currentPosition = currentPosition + 1;
763    }
764    else
765    {     
766      commandArray[currentPosition].flag = 2;
767      commandArray[currentPosition].name = pathName;
768      commandArray[currentPosition].guidance = treeGuidance->GetTitle();     
769      commandArray[currentPosition].numOfParameters = 0;
770      commandArray[currentPosition].commandNumber = currentPosition;
771     
772      currentPosition = currentPosition + 1;
773    }
774     
775    fillArrayEntries(t, level+1);
776  }
777}
778
779
780////////////////////////////////////////////////////////////////////////////
781// A debugging routine                                                    //
782//                                                                        //
783// This method is purely used for debugging purposes - will be deleted    //
784// from the final code (when we are sure it is bug free)                  //
785//                                                                        //
786////////////////////////////////////////////////////////////////////////////
787void G4UIxvt::listCommandArray(void)
788{
789  for(int i = 0; i < currentPosition; i++)
790  {
791    G4cout << "CommandArray, Entry-> " << i << G4endl
792         << "Flag-> " << commandArray[i].flag << G4endl
793         << "Name-> " << commandArray[i].name << G4endl
794         << "Guidance-> " << commandArray[i].guidance << G4endl
795         << "Number of Parameters-> " << commandArray[i].numOfParameters << G4endl;
796         
797         int numParam = commandArray[i].numOfParameters;
798         
799         if (numParam != 0)
800         {
801           for(int x = 0; x < numParam; x++)
802           {
803             G4cout << "Parameters for this command: " << G4endl << G4endl
804                  << "Parameter Name-> "          << commandArray[i].parameters[x].name         << G4endl
805                  << "Parameter Guidance-> "      << commandArray[i].parameters[x].guidance     << G4endl
806                  << "Parameter Default Value-> " << commandArray[i].parameters[x].defaultValue << G4endl
807                  << "Parameter Range-> "         << commandArray[i].parameters[x].range        << G4endl
808                  << "Parameter Candidate-> "     << commandArray[i].parameters[x].candidate    << G4endl
809                  << "Parameter Type-> "          << commandArray[i].parameters[x].type         << G4endl
810                  << "Parameter Omittable-> "     << commandArray[i].parameters[x].omittable    << G4endl
811                  << G4endl << G4endl;
812           }
813         }
814         
815         G4cout << "Number-> " << commandArray[i].commandNumber << G4endl << G4endl;
816  }
817}
818
819#endif
Note: See TracBrowser for help on using the repository browser.