Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/intercoms/src/G4UIbatch.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /intercoms/src/G4UIbatch.cc (Version 11.3.0) and /intercoms/src/G4UIbatch.cc (Version 7.1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                    <<   3 // * DISCLAIMER                                                       *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th <<   5 // * The following disclaimer summarizes all the specific disclaimers *
  6 // * the Geant4 Collaboration.  It is provided <<   6 // * of contributors to this software. The specific disclaimers,which *
  7 // * conditions of the Geant4 Software License <<   7 // * govern, are listed with their locations in:                      *
  8 // * LICENSE and available at  http://cern.ch/ <<   8 // *   http://cern.ch/geant4/license                                  *
  9 // * include a list of copyright holders.      << 
 10 // *                                                9 // *                                                                  *
 11 // * Neither the authors of this software syst     10 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     11 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     12 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     13 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  <<  14 // * use.                                                             *
 16 // * for the full disclaimer and the limitatio << 
 17 // *                                               15 // *                                                                  *
 18 // * This  code  implementation is the result  <<  16 // * This  code  implementation is the  intellectual property  of the *
 19 // * technical work of the GEANT4 collaboratio <<  17 // * GEANT4 collaboration.                                            *
 20 // * By using,  copying,  modifying or  distri <<  18 // * By copying,  distributing  or modifying the Program (or any work *
 21 // * any work based  on the software)  you  ag <<  19 // * based  on  the Program)  you indicate  your  acceptance of  this *
 22 // * use  in  resulting  scientific  publicati <<  20 // * statement, and all its terms.                                    *
 23 // * acceptance of all terms of the Geant4 Sof << 
 24 // *******************************************     21 // ********************************************************************
 25 //                                                 22 //
 26 // G4UIbatch                                   << 
 27 //                                                 23 //
 28 // Author: M.Asai, 2000                        <<  24 // $Id: G4UIbatch.cc,v 1.13 2005/05/19 16:40:45 asaim Exp $
 29 // ------------------------------------------- <<  25 // GEANT4 tag $Name: geant4-07-01 $
                                                   >>  26 //
 30                                                    27 
 31 #include "G4UIbatch.hh"                            28 #include "G4UIbatch.hh"
 32                                                << 
 33 #include "G4UImanager.hh"                          29 #include "G4UImanager.hh"
                                                   >>  30 #include "G4ios.hh"
 34                                                    31 
 35 #include <string>                              <<  32 G4bool G4UIbatch::commandFailed = false;
 36 #include <vector>                              << 
 37                                                << 
 38 // ------------------------------------------- << 
 39 static void Tokenize(const G4String& str, std: << 
 40 {                                              << 
 41   const char* delimiter = " ";                 << 
 42                                                << 
 43   G4String::size_type pos0 = str.find_first_no << 
 44   G4String::size_type pos = str.find_first_of( << 
 45                                                    33 
 46   while (pos != G4String::npos || pos0 != G4St <<  34 G4UIbatch::G4UIbatch(const char* fileName,G4UIsession* prevSession) 
 47     if (str[(G4int)pos0] == '\"') {            <<  35  : previousSession(prevSession), macroFileName(fileName),
 48       pos = str.find_first_of('\"', pos0 + 1); <<  36    openFailed(false)
 49       if (pos != G4String::npos) {             <<  37 {
 50         pos++;                                 <<  38   UImanager = G4UImanager::GetUIpointer();
 51       }                                        <<  39   UImanager->SetSession(this);
 52     }                                          <<  40   macroFile.open((char*)fileName);
 53     if (str[(G4int)pos0] == '\'') {            <<  41   if(macroFile.fail())
 54       pos = str.find_first_of('\'', pos0 + 1); <<  42   {
 55       if (pos != G4String::npos) {             <<  43     G4cerr << "macro file <" << fileName << "> could not open."
 56         pos++;                                 <<  44          << G4endl;
 57       }                                        <<  45     openFailed = true;
 58     }                                          <<  46     commandFailed = true;
 59                                                << 
 60     tokens.emplace_back(str.substr(pos0, pos - << 
 61     pos0 = str.find_first_not_of(delimiter, po << 
 62     pos = str.find_first_of(delimiter, pos0);  << 
 63   }                                            << 
 64 }                                              << 
 65                                                << 
 66 // ------------------------------------------- << 
 67 G4UIbatch::G4UIbatch(const char* fileName, G4U << 
 68   : G4UIsession(1), previousSession(prevSessio << 
 69 {                                              << 
 70   macroStream.open(fileName, std::ios::in);    << 
 71   if (macroStream.fail()) {                    << 
 72     G4cerr << "ERROR: Can not open a macro fil << 
 73            << ">. Set macro path with \"/contr << 
 74     lastRC = fParameterUnreadable;             << 
 75   }                                                47   }
 76   else {                                       <<  48   else
 77     isOpened = true;                           <<  49   {
                                                   >>  50     commandFailed = false;
 78   }                                                51   }
 79                                                << 
 80   G4UImanager::GetUIpointer()->SetSession(this << 
 81 }                                                  52 }
 82                                                    53 
 83 // ------------------------------------------- <<  54 G4UIbatch::~G4UIbatch() 
 84 G4UIbatch::~G4UIbatch()                        << 
 85 {                                                  55 {
 86   if (isOpened) {                              <<  56   if(!openFailed) macroFile.close();
 87     macroStream.close();                       << 
 88   }                                            << 
 89 }                                                  57 }
 90                                                    58 
 91 // ------------------------------------------- <<  59 G4UIsession * G4UIbatch::SessionStart() 
 92 G4String G4UIbatch::ReadCommand()              << 
 93 {                                                  60 {
 94   enum                                         <<  61   if(!openFailed)
 95   {                                                62   {
 96     BUFSIZE = 4096                             <<  63     char commandLine[256];
 97   };                                           <<  64     G4int lineLength = 255;
 98   static G4ThreadLocal char* linebuf = nullptr << 
 99   if (linebuf == nullptr) {                    << 
100     linebuf = new char[BUFSIZE];               << 
101   }                                            << 
102   const char ctrM = 0x0d;                      << 
103                                                << 
104   G4String cmdtotal = "";                      << 
105   G4bool qcontinued = false;                   << 
106   while (macroStream.good()) {                 << 
107     macroStream.getline(linebuf, BUFSIZE);     << 
108                                                << 
109     G4String cmdline(linebuf);                 << 
110                                                << 
111     // TAB-> ' ' conversion                    << 
112     G4String::size_type nb = 0;                << 
113     while ((nb = cmdline.find('\t', nb)) != G4 << 
114       cmdline.replace(nb, 1, " ");             << 
115     }                                          << 
116                                                << 
117     // strip                                   << 
118     G4StrUtil::strip(cmdline);                 << 
119     G4StrUtil::rstrip(cmdline, ctrM);          << 
120                                                << 
121     // skip null line if single line           << 
122     if (!qcontinued && cmdline.empty()) {      << 
123       continue;                                << 
124     }                                          << 
125                                                    65 
126     // '#' is treated as echoing something     <<  66     while(1)
127     if (cmdline[(std::size_t)0] == '#') {      <<  67     {
128       return cmdline;                          <<  68       macroFile.getline( commandLine, lineLength );
129     }                                          <<  69       if( macroFile.bad() )
130                                                <<  70       {
131     // tokenize...                             <<  71         G4cout << "Cannot read " << macroFileName << "." << G4endl;
132     std::vector<G4String> tokens;              <<  72         commandFailed = true;
133     Tokenize(cmdline, tokens);                 << 
134     qcontinued = false;                        << 
135     for (G4int i = 0; i < G4int(tokens.size()) << 
136       // string after '#" is ignored           << 
137       if (tokens[i][(std::size_t)0] == '#') {  << 
138         break;                                     73         break;
139       }                                            74       }
140       // '\' or '_' is treated as continued li <<  75       if( macroFile.eof() ) break;
141       if (tokens[i] == "\\" || tokens[i] == "_ <<  76       commandLine[lineLength] = '\0';
142         qcontinued = true;                     <<  77       G4String commandString = commandLine;
143         // check nothing after line continuati <<  78       G4String nC= commandString.strip(G4String::both);
144         if (i != G4int(tokens.size()) - 1) {   <<  79       if( commandLine[0] == '#')
145           G4Exception("G4UIbatch::ReadCommand" <<  80       { if(G4UImanager::GetUIpointer()->GetVerboseLevel()==2)
146                       "unexpected character af <<  81         { G4cout << commandLine << G4endl; }
147         }                                      << 
148         break;  // stop parsing                << 
149       }                                            82       }
150       cmdtotal += tokens[i];                   <<  83       else if( nC.length() == 0 )
151       cmdtotal += " ";                         <<  84       { continue; }
152     }                                          <<  85       else if(nC == "exit")
153                                                <<  86       { break; }
154     if (qcontinued) {                          <<  87       else
155       continue;  // read the next line         <<  88       { 
156     }                                          <<  89         G4int rc = UImanager->ApplyCommand(commandLine);
157                                                <<  90         if(rc)
158     if (!cmdtotal.empty()) {                   <<  91         {
159       break;                                   <<  92           switch(rc) 
160     }                                          <<  93           {
161     if (macroStream.eof()) {                   <<  94           case fCommandNotFound:
162       break;                                   <<  95             G4cerr << "***** COMMAND NOT FOUND <"
163     }                                          <<  96                    << commandLine << "> *****" << G4endl;
164   }                                            <<  97             break;
165                                                <<  98           case fIllegalApplicationState:
166   // strip again                               <<  99             G4cerr << "***** Illegal application state <"
167   G4StrUtil::strip(cmdtotal);                  << 100                    << commandLine << "> *****" << G4endl;
168                                                << 101             break;
169   // finally,                                  << 102           default:
170   if (macroStream.eof() && cmdtotal.empty()) { << 103             G4int pn = rc%100;
171     return "exit";                             << 104             G4cerr << "***** Illegal parameter (" << pn << ") <"
172   }                                            << 105                    << commandLine << "> *****" << G4endl;
173                                                << 106           }
174   return cmdtotal;                             << 107           G4cerr << "***** Command ignored *****" << G4endl;
175 }                                              << 108           commandFailed = true;
176                                                << 109         }
177 // ------------------------------------------- << 110         if(commandFailed) break;
178 G4int G4UIbatch::ExecCommand(const G4String& c << 
179 {                                              << 
180   G4UImanager* UI = G4UImanager::GetUIpointer( << 
181   G4int rc = UI->ApplyCommand(command);        << 
182                                                << 
183   switch (rc) {                                << 
184     case fCommandSucceeded:                    << 
185       break;                                   << 
186     case fCommandNotFound:                     << 
187       G4cerr << "***** COMMAND NOT FOUND <" << << 
188       break;                                   << 
189     case fIllegalApplicationState:             << 
190       G4cerr << "***** Illegal application sta << 
191       break;                                   << 
192     default:                                   << 
193       G4int pn = rc % 100;                     << 
194       G4cerr << "***** Illegal parameter (" << << 
195   }                                            << 
196                                                << 
197   return rc;                                   << 
198 }                                              << 
199                                                << 
200 // ------------------------------------------- << 
201 G4UIsession* G4UIbatch::SessionStart()         << 
202 {                                              << 
203   if (!isOpened) {                             << 
204     return previousSession;                    << 
205   }                                            << 
206                                                << 
207   while (true) {                               << 
208     G4String newCommand = ReadCommand();       << 
209                                                << 
210     if (newCommand == "exit") {                << 
211       break;                                   << 
212     }                                          << 
213                                                << 
214     // just echo something                     << 
215     if (newCommand[(std::size_t)0] == '#') {   << 
216       if (G4UImanager::GetUIpointer()->GetVerb << 
217         G4cout << newCommand << G4endl;        << 
218       }                                           111       }
219       continue;                                << 
220     }                                          << 
221                                                << 
222     // execute command                         << 
223     G4int rc = ExecCommand(newCommand);        << 
224     if (rc != fCommandSucceeded) {             << 
225       G4cerr << G4endl << "***** Batch is inte << 
226       lastRC = rc;                             << 
227       break;                                   << 
228     }                                             112     }
229   }                                               113   }
230                                                << 
231   return previousSession;                         114   return previousSession;
232 }                                                 115 }
233                                                   116 
234 // ------------------------------------------- << 117 void G4UIbatch::PauseSessionStart(G4String Prompt) 
235 void G4UIbatch::PauseSessionStart(const G4Stri << 
236 {                                                 118 {
237   G4cout << "Pause session <" << Prompt << ">     119   G4cout << "Pause session <" << Prompt << "> start." << G4endl;
238                                                << 
239   SessionStart();                                 120   SessionStart();
240                                                << 
241   G4cout << "Pause session <" << Prompt << ">     121   G4cout << "Pause session <" << Prompt << "> Terminate." << G4endl;
242 }                                                 122 }
                                                   >> 123 
                                                   >> 124 
243                                                   125