source: trunk/geant4/interfaces/html/G4UItcsh_8cc-source.html @ 574

Last change on this file since 574 was 571, checked in by garnier, 17 years ago

r581@mac-90108: laurentgarnier | 2007-08-17 17:30:26 +0200
deplacement de frame

  • Property svn:mime-type set to text/html
File size: 50.6 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
3<title>G4UItcsh.cc Source File</title>
4<link href="doxygen.css" rel="stylesheet" type="text/css">
5</head><body>
6<!-- Generated by Doxygen 1.3.4 -->
7<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div>
8<h1>G4UItcsh.cc</h1><a href="G4UItcsh_8cc.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">//</span>
900002 <span class="comment">// ********************************************************************</span>
1000003 <span class="comment">// * License and Disclaimer                                           *</span>
1100004 <span class="comment">// *                                                                  *</span>
1200005 <span class="comment">// * The  Geant4 software  is  copyright of the Copyright Holders  of *</span>
1300006 <span class="comment">// * the Geant4 Collaboration.  It is provided  under  the terms  and *</span>
1400007 <span class="comment">// * conditions of the Geant4 Software License,  included in the file *</span>
1500008 <span class="comment">// * LICENSE and available at  http://cern.ch/geant4/license .  These *</span>
1600009 <span class="comment">// * include a list of copyright holders.                             *</span>
1700010 <span class="comment">// *                                                                  *</span>
1800011 <span class="comment">// * Neither the authors of this software system, nor their employing *</span>
1900012 <span class="comment">// * institutes,nor the agencies providing financial support for this *</span>
2000013 <span class="comment">// * work  make  any representation or  warranty, express or implied, *</span>
2100014 <span class="comment">// * regarding  this  software system or assume any liability for its *</span>
2200015 <span class="comment">// * use.  Please see the license in the file  LICENSE  and URL above *</span>
2300016 <span class="comment">// * for the full disclaimer and the limitation of liability.         *</span>
2400017 <span class="comment">// *                                                                  *</span>
2500018 <span class="comment">// * This  code  implementation is the result of  the  scientific and *</span>
2600019 <span class="comment">// * technical work of the GEANT4 collaboration.                      *</span>
2700020 <span class="comment">// * By using,  copying,  modifying or  distributing the software (or *</span>
2800021 <span class="comment">// * any work based  on the software)  you  agree  to acknowledge its *</span>
2900022 <span class="comment">// * use  in  resulting  scientific  publications,  and indicate your *</span>
3000023 <span class="comment">// * acceptance of all terms of the Geant4 Software license.          *</span>
3100024 <span class="comment">// ********************************************************************</span>
3200025 <span class="comment">//</span>
3300026 <span class="comment">//</span>
3400027 <span class="comment">// $Id: G4UItcsh.cc,v 1.12 2006/06/29 19:09:54 gunter Exp $</span>
3500028 <span class="comment">// GEANT4 tag $Name: geant4-08-01-patch-01 $</span>
3600029 <span class="comment">//</span>
3700030
3800031 <span class="preprocessor">#ifndef WIN32</span>
3900032 <span class="preprocessor"></span>
4000033 <span class="preprocessor">#include "G4Types.hh"</span>
4100034 <span class="preprocessor">#include "G4StateManager.hh"</span>
4200035 <span class="preprocessor">#include "G4UIcommandStatus.hh"</span>
4300036 <span class="preprocessor">#include "<a class="code" href="G4UItcsh_8hh.html">G4UItcsh.hh</a>"</span>
4400037 <span class="preprocessor">#include &lt;ctype.h&gt;</span>
4500038 <span class="preprocessor">#include &lt;sstream&gt;</span>
4600039
4700040 <span class="comment">// ASCII character code</span>
48<a name="l00041"></a><a class="code" href="G4UItcsh_8cc.html#a0">00041</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a0">AsciiCtrA</a> = <span class="charliteral">'\001'</span>;
49<a name="l00042"></a><a class="code" href="G4UItcsh_8cc.html#a1">00042</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a1">AsciiCtrB</a> = <span class="charliteral">'\002'</span>;
50<a name="l00043"></a><a class="code" href="G4UItcsh_8cc.html#a2">00043</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a2">AsciiCtrC</a> = <span class="charliteral">'\003'</span>;
51<a name="l00044"></a><a class="code" href="G4UItcsh_8cc.html#a3">00044</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a3">AsciiCtrD</a> = <span class="charliteral">'\004'</span>;
52<a name="l00045"></a><a class="code" href="G4UItcsh_8cc.html#a4">00045</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a4">AsciiCtrE</a> = <span class="charliteral">'\005'</span>;
53<a name="l00046"></a><a class="code" href="G4UItcsh_8cc.html#a5">00046</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a5">AsciiCtrF</a> = <span class="charliteral">'\006'</span>;
54<a name="l00047"></a><a class="code" href="G4UItcsh_8cc.html#a6">00047</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a6">AsciiCtrK</a> = <span class="charliteral">'\013'</span>;
55<a name="l00048"></a><a class="code" href="G4UItcsh_8cc.html#a7">00048</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a7">AsciiCtrL</a> = <span class="charliteral">'\014'</span>;
56<a name="l00049"></a><a class="code" href="G4UItcsh_8cc.html#a8">00049</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a8">AsciiCtrN</a> = <span class="charliteral">'\016'</span>;
57<a name="l00050"></a><a class="code" href="G4UItcsh_8cc.html#a9">00050</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a9">AsciiCtrP</a> = <span class="charliteral">'\020'</span>;
58<a name="l00051"></a><a class="code" href="G4UItcsh_8cc.html#a10">00051</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a10">AsciiCtrQ</a> = <span class="charliteral">'\021'</span>;
59<a name="l00052"></a><a class="code" href="G4UItcsh_8cc.html#a11">00052</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a11">AsciiCtrS</a> = <span class="charliteral">'\023'</span>;
60<a name="l00053"></a><a class="code" href="G4UItcsh_8cc.html#a12">00053</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a12">AsciiCtrZ</a> = <span class="charliteral">'\032'</span>;
61<a name="l00054"></a><a class="code" href="G4UItcsh_8cc.html#a13">00054</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a13">AsciiTAB</a>   = <span class="charliteral">'\011'</span>;
62<a name="l00055"></a><a class="code" href="G4UItcsh_8cc.html#a14">00055</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>    = <span class="charliteral">'\010'</span>;
63<a name="l00056"></a><a class="code" href="G4UItcsh_8cc.html#a15">00056</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a15">AsciiDEL</a>   = '\177';
64<a name="l00057"></a><a class="code" href="G4UItcsh_8cc.html#a16">00057</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="G4UItcsh_8cc.html#a16">AsciiESC</a>   = <span class="charliteral">'\033'</span>;
6500058
66<a name="l00059"></a><a class="code" href="G4UItcsh_8cc.html#a17">00059</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="G4UItcsh_8cc.html#a17">AsciiPrintableMin</a> = 32;
6700060
68<a name="l00062"></a><a class="code" href="classG4UItcsh.html#a0">00062</a> <a class="code" href="classG4UItcsh.html#a0">G4UItcsh::G4UItcsh</a>(<span class="keyword">const</span> G4String&amp; prompt, G4int maxhist)
6900063   : <a class="code" href="classG4VUIshell.html">G4VUIshell</a>(prompt),
7000064     commandLine(""), cursorPosition(1),
7100065     commandHistory(maxhist), maxHistory(maxhist),
7200066     currentHistoryNo(1), relativeHistoryIndex(0)
7300068 { 
7400069   <span class="comment">// get current terminal mode</span>
7500070   tcgetattr(0, &amp;<a class="code" href="classG4UItcsh.html#p7">tios</a>);
7600071 }
7700072
78<a name="l00074"></a><a class="code" href="classG4UItcsh.html#a1">00074</a> <a class="code" href="classG4UItcsh.html#a1">G4UItcsh::~G4UItcsh</a>()
7900076 {
8000077 }
8100078   
82<a name="l00080"></a><a class="code" href="classG4UItcsh.html#b0">00080</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b0">G4UItcsh::MakePrompt</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* msg)
8300082 {
8400083   <span class="keywordflow">if</span>(<a class="code" href="classG4VUIshell.html#p0">promptSetting</a>.length()&lt;=1) {
8500084     <a class="code" href="classG4VUIshell.html#p1">promptString</a>= <a class="code" href="classG4VUIshell.html#p0">promptSetting</a>;
8600085     <span class="keywordflow">return</span>;
8700086   }
8800087
8900088   <a class="code" href="classG4VUIshell.html#p1">promptString</a>=<span class="stringliteral">""</span>;
9000089   size_t i;
9100090   <span class="keywordflow">for</span>(i=0; i&lt;<a class="code" href="classG4VUIshell.html#p0">promptSetting</a>.length()-1; i++){
9200091     <span class="keywordflow">if</span>(<a class="code" href="classG4VUIshell.html#p0">promptSetting</a>[i]==<span class="charliteral">'%'</span>){
9300092       <span class="keywordflow">switch</span> (<a class="code" href="classG4VUIshell.html#p0">promptSetting</a>[i+1]) {
9400093       <span class="keywordflow">case</span> <span class="charliteral">'s'</span><span class="comment">// current application status</span>
9500094         {
9600095           G4String stateStr;
9700096           <span class="keywordflow">if</span>(msg)
9800097           { stateStr = msg; }
9900098           <span class="keywordflow">else</span>
10000099           {
10100100             G4StateManager* statM= G4StateManager::GetStateManager();
10200101             stateStr= statM-&gt; GetStateString(statM-&gt;GetCurrentState());
10300102           }
10400103           <a class="code" href="classG4VUIshell.html#p1">promptString</a>.append(stateStr);
10500104           i++;
10600105         }
10700106         <span class="keywordflow">break</span>;
10800107       <span class="keywordflow">case</span> <span class="charliteral">'/'</span><span class="comment">// current working directory</span>
10900108         <a class="code" href="classG4VUIshell.html#p1">promptString</a>.append(<a class="code" href="classG4VUIshell.html#p6">currentCommandDir</a>);
11000109         i++;
11100110         <span class="keywordflow">break</span>;
11200111       <span class="keywordflow">case</span> <span class="charliteral">'h'</span><span class="comment">// history#</span>
11300112         {
11400113         std::ostringstream os;
11500114         os &lt;&lt; <a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>;
11600115         <a class="code" href="classG4VUIshell.html#p1">promptString</a>.append(os.str());
11700116         i++;
11800117         }
11900118         <span class="keywordflow">break</span>;
12000119       <span class="keywordflow">default</span>:
12100120         <span class="keywordflow">break</span>;
12200121       }
12300122     } <span class="keywordflow">else</span> {
12400123       <a class="code" href="classG4VUIshell.html#p1">promptString</a>.append(G4String(<a class="code" href="classG4VUIshell.html#p0">promptSetting</a>[i]));
12500124     }
12600125   }
12700126
12800127   <span class="comment">// append last chaacter</span>
12900128   <span class="keywordflow">if</span>(i == <a class="code" href="classG4VUIshell.html#p0">promptSetting</a>.length()-1)
13000129     <a class="code" href="classG4VUIshell.html#p1">promptString</a>.append(G4String(<a class="code" href="classG4VUIshell.html#p0">promptSetting</a>[i]));
13100130 }
13200131
13300132 <span class="comment">// --------------------------------------------------------------------</span>
13400133 <span class="comment">//      commad line operations</span>
13500134 <span class="comment">// --------------------------------------------------------------------</span>
136<a name="l00136"></a><a class="code" href="classG4UItcsh.html#b2">00136</a> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b2">G4UItcsh::InitializeCommandLine</a>()
13700138 {
13800139   <a class="code" href="classG4UItcsh.html#p0">commandLine</a>= <span class="stringliteral">""</span>;
13900140   <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>= 1;
14000141 }
14100142
142<a name="l00144"></a><a class="code" href="classG4UItcsh.html#b4">00144</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b4">G4UItcsh::InsertCharacter</a>(<span class="keywordtype">char</span> cc)
14300146 {
14400147   <span class="keywordflow">if</span>( ! (cc &gt;= <a class="code" href="G4UItcsh_8cc.html#a17">AsciiPrintableMin</a>  &amp;&amp; isprint(cc)) ) <span class="keywordflow">return</span>;
14500148
14600149   <span class="comment">// display...</span>
14700150   G4cout &lt;&lt; cc;
14800151   size_t i;
14900152   <span class="keywordflow">for</span>(i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-1; i&lt;<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length() ;i++)
15000153     G4cout &lt;&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>[i];
15100154   <span class="keywordflow">for</span>(i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-1; i&lt;commandLine.length() ;i++)
15200155     G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>;
15300156   G4cout &lt;&lt; std::flush;
15400157     
15500158   <span class="comment">// command line string...</span>
15600159   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#b1">IsCursorLast</a>()) {  <span class="comment">// add</span>
15700160     commandLine+= cc;
15800161   } <span class="keywordflow">else</span> { <span class="comment">// insert</span>
15900162     commandLine.insert(<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-1, G4String(cc));
16000163   }
16100164   <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>++;
16200165 }
16300166   
164<a name="l00168"></a><a class="code" href="classG4UItcsh.html#b5">00168</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b5">G4UItcsh::BackspaceCharacter</a>()
16500170 {
16600171   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>==1) <span class="keywordflow">return</span>;
16700172
16800173   <span class="comment">// display...</span>
16900174   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#b1">IsCursorLast</a>()) { 
17000175     G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a> &lt;&lt; <span class="charliteral">' '</span> &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a> &lt;&lt; std::flush;
17100176   } <span class="keywordflow">else</span> {
17200177     G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>;
17300178     size_t i;
17400179     <span class="keywordflow">for</span>(i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-2; i&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()-1 ;i++){
17500180       G4cout &lt;&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>[i+1];
17600181     }
17700182     G4cout &lt;&lt; <span class="charliteral">' '</span>;
17800183     <span class="keywordflow">for</span>(i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-2; i&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length() ;i++){
17900184       G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>;
18000185     }
18100186     G4cout &lt;&lt; std::flush;
18200187   }
18300188
18400189   <span class="comment">// command line string...</span>
18500190   <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.erase(<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-2, 1);
18600191
18700192   <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>--;
18800193 }
18900194
190<a name="l00196"></a><a class="code" href="classG4UItcsh.html#b6">00196</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b6">G4UItcsh::DeleteCharacter</a>()
19100198 {
19200199   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#b1">IsCursorLast</a>()) <span class="keywordflow">return</span>;
19300200
19400201   <span class="comment">// display...</span>
19500202   size_t i;
19600203   <span class="keywordflow">for</span>(i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-1; i&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()-1 ;i++){
19700204     G4cout &lt;&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>[i+1];
19800205   }
19900206   G4cout &lt;&lt; <span class="charliteral">' '</span>;
20000207   <span class="keywordflow">for</span>(i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-1; i&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length() ;i++){
20100208     G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>;
20200209   }
20300210   G4cout &lt;&lt; std::flush;
20400211
20500212   <span class="comment">// command lin string...</span>
20600213   <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.erase(<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-1, 1);
20700214 }
20800215
209<a name="l00217"></a><a class="code" href="classG4UItcsh.html#b7">00217</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b7">G4UItcsh::ClearLine</a>()
21000219 {
21100220   <span class="comment">// display...</span>
21200221   G4int i;
21300222   <span class="keywordflow">for</span>(i= <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>; i&gt;=2; i--) G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>;
21400223   <span class="keywordflow">for</span>(i=1; i&lt;=G4int(<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()); i++) G4cout &lt;&lt; <span class="charliteral">' '</span>;
21500224   <span class="keywordflow">for</span>(i=1; i&lt;=G4int(<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()); i++) G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>;
21600225   G4cout &lt;&lt; std::flush;
21700226   
21800227   <span class="comment">// command line string...</span>
21900228   <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.erase();
22000229   cursorPosition= 1;
22100230 }
22200231
223<a name="l00233"></a><a class="code" href="classG4UItcsh.html#b8">00233</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b8">G4UItcsh::ClearAfterCursor</a>()
22400235 {
22500236   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#b1">IsCursorLast</a>()) <span class="keywordflow">return</span>;
22600237
22700238   <span class="comment">// display...</span>
22800239   G4int i;
22900240   <span class="keywordflow">for</span>(i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>; i&lt;=G4int(<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()); i++) G4cout &lt;&lt; <span class="charliteral">' '</span>;
23000241   <span class="keywordflow">for</span>(i=<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length(); i&gt;=cursorPosition; i--) G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>;
23100242   G4cout &lt;&lt; std::flush;
23200243
23300244   <span class="comment">// command line string...</span>
23400245   <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.erase(cursorPosition-1,
23500246                     <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()-cursorPosition+1);
23600247 }
23700248
238<a name="l00250"></a><a class="code" href="classG4UItcsh.html#b9">00250</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b9">G4UItcsh::ClearScreen</a>()
23900252 {
24000253   <span class="keywordflow">if</span>(! <a class="code" href="classG4UItcsh.html#p8">clearString</a>.empty() ) {
24100254     G4cout &lt;&lt; <a class="code" href="classG4UItcsh.html#p8">clearString</a>;
24200255
24300256     G4cout &lt;&lt; <a class="code" href="classG4VUIshell.html#p1">promptString</a> &lt;&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a> &lt;&lt; std::flush;
24400257     <span class="comment">// reset cursur position</span>
24500258     <span class="keywordflow">for</span>(G4int i=<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()+1; i&gt;=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>+1; i--)
24600259       G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a> &lt;&lt; std::flush;
24700260   }
24800261 }
24900262
250<a name="l00264"></a><a class="code" href="classG4UItcsh.html#b10">00264</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b10">G4UItcsh::ForwardCursor</a>()
25100266 {
25200267   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#b1">IsCursorLast</a>()) <span class="keywordflow">return</span>;
25300268
25400269   G4cout &lt;&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>[(size_t)(<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-1)] &lt;&lt; std::flush;
25500270   <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>++;
25600271 }
25700272
258<a name="l00274"></a><a class="code" href="classG4UItcsh.html#b11">00274</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b11">G4UItcsh::BackwardCursor</a>()
25900276 {
26000277   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>==1) <span class="keywordflow">return</span>;
26100278
26200279   <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>--;
26300280   G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a> &lt;&lt; std::flush;
26400281 }
26500282
266<a name="l00284"></a><a class="code" href="classG4UItcsh.html#b12">00284</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b12">G4UItcsh::MoveCursorTop</a>()
26700286 {
26800287   <span class="keywordflow">for</span>(G4int i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>; i&gt;1; i--){
26900288     G4cout &lt;&lt; <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>;
27000289   }
27100290   G4cout &lt;&lt; std::flush;
27200291   cursorPosition=1;
27300292 }
27400293
275<a name="l00295"></a><a class="code" href="classG4UItcsh.html#b13">00295</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b13">G4UItcsh::MoveCursorEnd</a>()
27600297 {
27700298   <span class="keywordflow">for</span>(size_t i=<a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>-1; i&lt;<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length(); i++){
27800299     G4cout &lt;&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a>[i];
27900300   }
28000301   G4cout &lt;&lt; std::flush;
28100302   <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>=<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()+1;
28200303 }
28300304
284<a name="l00306"></a><a class="code" href="classG4UItcsh.html#b15">00306</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b15">G4UItcsh::PreviousCommand</a>()
28500308 {
28600309   G4int nhmax= <a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>-1 &gt;= <a class="code" href="classG4UItcsh.html#p4">maxHistory</a> ?
28700310                  <a class="code" href="classG4UItcsh.html#p4">maxHistory</a> : <a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>-1;
28800311
28900312   <span class="comment">// retain current input</span>
29000313   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#p6">relativeHistoryIndex</a>==0) <a class="code" href="classG4UItcsh.html#p2">commandLineBuf</a>= <a class="code" href="classG4UItcsh.html#p0">commandLine</a>;
29100314
29200315   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#p6">relativeHistoryIndex</a>&gt;=-nhmax+1 &amp;&amp; <a class="code" href="classG4UItcsh.html#p6">relativeHistoryIndex</a>&lt;=0) {
29300316     <a class="code" href="classG4UItcsh.html#b7">ClearLine</a>();
29400317     <a class="code" href="classG4UItcsh.html#p6">relativeHistoryIndex</a>--;
29500318     commandLine= <a class="code" href="classG4UItcsh.html#b20">RestoreHistory</a>(<a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>+<a class="code" href="classG4UItcsh.html#p6">relativeHistoryIndex</a>);
29600319
29700320     G4cout &lt;&lt; commandLine &lt;&lt; std::flush;
29800321     <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>= commandLine.length()+1;
29900322   }
30000323 }
30100324
302<a name="l00326"></a><a class="code" href="classG4UItcsh.html#b14">00326</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b14">G4UItcsh::NextCommand</a>()
30300328 { 
30400329   G4int nhmax= <a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>-1 &gt;= <a class="code" href="classG4UItcsh.html#p4">maxHistory</a> ?
30500330                  <a class="code" href="classG4UItcsh.html#p4">maxHistory</a> : <a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>-1;
30600331
30700332   <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#p6">relativeHistoryIndex</a>&gt;=-nhmax &amp;&amp; <a class="code" href="classG4UItcsh.html#p6">relativeHistoryIndex</a>&lt;=-1) {
30800333     <a class="code" href="classG4UItcsh.html#b7">ClearLine</a>();
30900334     relativeHistoryIndex++;
31000335
31100336     <span class="keywordflow">if</span>(relativeHistoryIndex==0) <a class="code" href="classG4UItcsh.html#p0">commandLine</a>= <a class="code" href="classG4UItcsh.html#p2">commandLineBuf</a>;
31200337     <span class="keywordflow">else</span> <a class="code" href="classG4UItcsh.html#p0">commandLine</a>= <a class="code" href="classG4UItcsh.html#b20">RestoreHistory</a>(<a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>+relativeHistoryIndex);
31300338
31400339     G4cout &lt;&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a> &lt;&lt; std::flush;     
31500340     <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>= <a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()+1;
31600341   }
31700342 }
31800343
31900344
320<a name="l00346"></a><a class="code" href="classG4UItcsh.html#b16">00346</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b16">G4UItcsh::ListMatchedCommand</a>()
32100348 {
32200349   G4cout &lt;&lt; G4endl;
32300350   
32400351   <span class="comment">// input string</span>
32500352   G4String input= G4String(<a class="code" href="classG4UItcsh.html#p0">commandLine</a>).strip(G4String::leading);
32600353   <span class="comment">// target token is last token</span>
32700354   G4int jhead= input.last(<span class="charliteral">' '</span>);
32800355   <span class="keywordflow">if</span>(jhead != G4int(G4String::npos)) {
32900356     input.remove(0, jhead);
33000357     input= input.strip(G4String::leading);
33100358   }
33200359
33300360   <span class="comment">// command tree of "user specified directory"</span>
33400361   G4String vpath= <a class="code" href="classG4VUIshell.html#p6">currentCommandDir</a>;
33500362   G4String vcmd;
33600363
33700364   <span class="keywordflow">if</span>( !input.empty() ) {
33800365     G4int len= input.length();
33900366     G4int indx=-1;
34000367     <span class="keywordflow">for</span>(G4int i=len-1; i&gt;=0; i--) {
34100368       <span class="keywordflow">if</span>(input[(size_t)i]==<span class="charliteral">'/'</span>) {
34200369         indx= i;
34300370         <span class="keywordflow">break</span>;
34400371       }   
34500372     }
34600373     <span class="comment">// get abs. path</span>
34700374     <span class="keywordflow">if</span>(indx != -1) vpath= <a class="code" href="classG4VUIshell.html#b2">GetAbsCommandDirPath</a>(input(0,indx+1)); 
34800375     <span class="keywordflow">if</span>(!(indx==0  &amp;&amp; len==1)) vcmd= input(indx+1,len-indx-1);  <span class="comment">// care for "/"</span>
34900376   }
35000377
35100378   <span class="comment">// list matched dirs/commands</span>
35200379   <a class="code" href="classG4VUIshell.html#a6">ListCommand</a>(vpath, vpath+vcmd);
35300380
35400381   G4cout &lt;&lt; <a class="code" href="classG4VUIshell.html#p1">promptString</a> &lt;&lt; <a class="code" href="classG4UItcsh.html#p0">commandLine</a> &lt;&lt; std::flush;
35500382 }
35600383
357<a name="l00385"></a><a class="code" href="classG4UItcsh.html#b17">00385</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b17">G4UItcsh::CompleteCommand</a>()
35800387 {
35900388   <span class="comment">// inputting string</span>
36000389   G4String input= G4String(<a class="code" href="classG4UItcsh.html#p0">commandLine</a>).strip(G4String::leading);
36100390   <span class="comment">// target token is last token</span>
36200391   G4int jhead= input.last(<span class="charliteral">' '</span>);
36300392   <span class="keywordflow">if</span>(jhead != G4int(G4String::npos)) {
36400393     input.remove(0, jhead);
36500394     input= input.strip(G4String::leading);
36600395   }
36700396
36800397   <span class="comment">// command tree of "user specified directory"  </span>
36900398   G4String vpath= <a class="code" href="classG4VUIshell.html#p6">currentCommandDir</a>;
37000399   G4String vcmd;
37100400
37200401   G4int len= input.length();
37300402   <span class="keywordflow">if</span>(!input.empty()) {
37400403     G4int indx= -1;
37500404     <span class="keywordflow">for</span>(G4int i=len-1; i&gt;=0; i--) {
37600405       <span class="keywordflow">if</span>(input(i)==<span class="charliteral">'/'</span>) {
37700406         indx= i;
37800407         <span class="keywordflow">break</span>;
37900408       }   
38000409     }
38100410     <span class="comment">// get abs. path</span>
38200411     <span class="keywordflow">if</span>(indx != -1) vpath= <a class="code" href="classG4VUIshell.html#b2">GetAbsCommandDirPath</a>(input(0,indx+1)); 
38300412     <span class="keywordflow">if</span>(!(indx==0  &amp;&amp; len==1)) vcmd= input(indx+1,len-indx-1);  <span class="comment">// care for "/"</span>
38400413   }
38500414
38600415   G4UIcommandTree* atree= <a class="code" href="classG4VUIshell.html#b1">GetCommandTree</a>(vpath);  <span class="comment">// get command tree</span>
38700416   <span class="keywordflow">if</span>(atree == NULL) <span class="keywordflow">return</span>;
38800417
38900418   <span class="comment">// list matched directories/commands</span>
39000419   G4String stream, strtmp;
39100420   G4String inputpath= vpath+vcmd;
39200421   G4int nMatch= 0;
39300422
39400423   <span class="keywordtype">int</span> Ndir= atree-&gt; GetTreeEntry();
39500424   <span class="keywordtype">int</span> Ncmd= atree-&gt; GetCommandEntry();
39600425   
39700426   <span class="comment">// directory ...</span>
39800427   <span class="keywordflow">for</span>(G4int idir=1; idir&lt;=Ndir; idir++) {
39900428     G4String fpdir= atree-&gt; GetTree(idir)-&gt; GetPathName();
40000429     <span class="comment">// matching test</span>
40100430     <span class="keywordflow">if</span>( fpdir.index(inputpath, 0) == 0) {
40200431       <span class="keywordflow">if</span>(nMatch==0) {
40300432         stream= <a class="code" href="classG4VUIshell.html#b3">GetCommandPathTail</a>(fpdir);
40400433       } <span class="keywordflow">else</span> {
40500434         strtmp= <a class="code" href="classG4VUIshell.html#b3">GetCommandPathTail</a>(fpdir);
40600435         stream= <a class="code" href="classG4UItcsh.html#b18">GetFirstMatchedString</a>(stream, strtmp);
40700436       }
40800437       nMatch++;
40900438     }
41000439   }
41100440   
41200441   <span class="comment">// command ...</span>
41300442   <span class="keywordflow">for</span>(G4int icmd=1; icmd&lt;=Ncmd; icmd++){
41400443     G4String fpcmd= atree-&gt; GetPathName() +
41500444                     atree-&gt; GetCommand(icmd) -&gt; GetCommandName();
41600445     <span class="comment">// matching test</span>
41700446     <span class="keywordflow">if</span>( fpcmd.index(inputpath, 0) ==0) {
41800447       <span class="keywordflow">if</span>(nMatch==0) {
41900448         stream= <a class="code" href="classG4VUIshell.html#b3">GetCommandPathTail</a>(fpcmd) + <span class="stringliteral">" "</span>;
42000449       } <span class="keywordflow">else</span> {
42100450         strtmp= <a class="code" href="classG4VUIshell.html#b3">GetCommandPathTail</a>(fpcmd) + <span class="stringliteral">" "</span>;
42200451         stream= <a class="code" href="classG4UItcsh.html#b18">GetFirstMatchedString</a>(stream, strtmp);
42300452       }
42400453       nMatch++;
42500454     }
42600455   }
42700456
42800457   <span class="keywordflow">if</span>(nMatch==0) <span class="keywordflow">return</span><span class="comment">// no matched</span>
42900458
43000459   <span class="comment">// display...</span>
43100460   input= <a class="code" href="classG4UItcsh.html#p0">commandLine</a>;
43200461   <span class="comment">// target token is last token</span>
43300462   jhead= input.last(<span class="charliteral">' '</span>);
43400463   <span class="keywordflow">if</span>(jhead == G4int(G4String::npos)) jhead=0;
43500464   <span class="keywordflow">else</span> jhead++;
43600465
43700466   G4int jt= input.find_last_of(<span class="charliteral">'/'</span>);
43800467   <span class="keywordflow">if</span>(jt&lt;jhead) jt=G4String::npos;
43900468
44000469   <span class="keywordflow">if</span>(jt==G4int(G4String::npos)) jt= jhead;
44100470   <span class="keywordflow">else</span> jt++;
44200471
44300472   G4String dspstr;
44400473   G4int i;
44500474   <span class="keywordflow">for</span>(i=jt; i&lt;=G4int(input.length())-1; i++) dspstr+= G4String(<a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>); <span class="comment">// cleanup</span>
44600475   <span class="keywordflow">for</span>(i=jt; i&lt;=G4int(input.length())-1; i++) dspstr+= G4String(<span class="charliteral">' '</span>);
44700476   <span class="keywordflow">for</span>(i=jt; i&lt;=G4int(input.length())-1; i++) dspstr+= G4String(<a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>);
44800477
44900478   dspstr+= stream;
45000479   G4cout &lt;&lt; dspstr &lt;&lt; std::flush;
45100480
45200481   <span class="comment">// command line string</span>
45300482   input.remove(jt);
45400483   input+= stream;
45500484
45600485   commandLine= input;
45700486   <a class="code" href="classG4UItcsh.html#p1">cursorPosition</a>= commandLine.length()+1;
45800487 }
45900488
46000489
46100490 <span class="comment">// --------------------------------------------------------------------</span>
46200491 <span class="comment">//      commad line</span>
46300492 <span class="comment">// --------------------------------------------------------------------</span>
464<a name="l00494"></a><a class="code" href="classG4UItcsh.html#b3">00494</a> <span class="comment"></span>G4String <a class="code" href="classG4UItcsh.html#b3">G4UItcsh::ReadLine</a>()
46500496 {
46600497   <a class="code" href="classG4UItcsh.html#b2">InitializeCommandLine</a>();
46700498
46800499   <span class="keywordtype">char</span> cc;
46900500   <span class="keywordflow">do</span><span class="comment">// input loop</span>
47000501     G4cin.get(cc);
47100502
47200503     <span class="comment">// treatment for special character</span>
47300504     <span class="keywordflow">switch</span>(cc){
47400505     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a0">AsciiCtrA</a>:       <span class="comment">// ... move cursor to the top</span>
47500506       <a class="code" href="classG4UItcsh.html#b12">MoveCursorTop</a>();
47600507       <span class="keywordflow">break</span>;
47700508     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a1">AsciiCtrB</a>:       <span class="comment">// ... backward cursor</span>
47800509       <a class="code" href="classG4UItcsh.html#b11">BackwardCursor</a>();
47900510       <span class="keywordflow">break</span>;
48000511     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a3">AsciiCtrD</a>:       <span class="comment">// ... delete/exit/show matched list</span>
48100512       <span class="keywordflow">if</span>(<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.length()!=0 &amp;&amp; <a class="code" href="classG4UItcsh.html#b1">IsCursorLast</a>()) <a class="code" href="classG4UItcsh.html#b16">ListMatchedCommand</a>();
48200513       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.empty()) {
48300514         G4cout &lt;&lt; G4endl;
48400515         exit(0);
48500516       } <span class="keywordflow">else</span> <a class="code" href="classG4UItcsh.html#b6">DeleteCharacter</a>();
48600517       <span class="keywordflow">break</span>;
48700518     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a4">AsciiCtrE</a>:       <span class="comment">// ... move cursor to the end</span>
48800519       <a class="code" href="classG4UItcsh.html#b13">MoveCursorEnd</a>();
48900520       <span class="keywordflow">break</span>;
49000521     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a5">AsciiCtrF</a>:       <span class="comment">// ... forward cursor</span>
49100522       <a class="code" href="classG4UItcsh.html#b10">ForwardCursor</a>();
49200523       <span class="keywordflow">break</span>;
49300524     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a6">AsciiCtrK</a>:       <span class="comment">// ... clear after the cursor</span>
49400525       <a class="code" href="classG4UItcsh.html#b8">ClearAfterCursor</a>();
49500526       <span class="keywordflow">break</span>;
49600527     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a7">AsciiCtrL</a>:       <span class="comment">// ... clear screen</span>
49700528       <span class="comment">// ClearScreen();</span>
49800529       <span class="keywordflow">break</span>;
49900530     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a8">AsciiCtrN</a>:     <span class="comment">// ... next command</span>
50000531       <a class="code" href="classG4UItcsh.html#b14">NextCommand</a>();
50100532       <span class="keywordflow">break</span>;
50200533     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a9">AsciiCtrP</a>:     <span class="comment">// ... previous command</span>
50300534       <a class="code" href="classG4UItcsh.html#b15">PreviousCommand</a>();
50400535       <span class="keywordflow">break</span>;
50500536     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a13">AsciiTAB</a>:         <span class="comment">// ... command completion</span>
50600537       <span class="keywordflow">if</span>( (!<a class="code" href="classG4UItcsh.html#p0">commandLine</a>.empty()) &amp;&amp; <a class="code" href="classG4UItcsh.html#b1">IsCursorLast</a>()) <a class="code" href="classG4UItcsh.html#b17">CompleteCommand</a>();
50700538       <span class="keywordflow">break</span>;
50800539     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a15">AsciiDEL</a>:         <span class="comment">// ... backspace</span>
50900540       <a class="code" href="classG4UItcsh.html#b5">BackspaceCharacter</a>();
51000541       <span class="keywordflow">break</span>;
51100542     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a14">AsciiBS</a>:          <span class="comment">// ... backspace</span>
51200543       <a class="code" href="classG4UItcsh.html#b5">BackspaceCharacter</a>();
51300544       <span class="keywordflow">break</span>;
51400545     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a2">AsciiCtrC</a>:       <span class="comment">// ... kill prompt</span>
51500546       <span class="keywordflow">break</span>;
51600547     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a10">AsciiCtrQ</a>:       <span class="comment">// ... restarts suspeded output</span>
51700548       <span class="keywordflow">break</span>;
51800549     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a11">AsciiCtrS</a>:       <span class="comment">// ... suspend output</span>
51900550       <span class="keywordflow">break</span>;
52000551     <span class="keywordflow">case</span> <a class="code" href="G4UItcsh_8cc.html#a12">AsciiCtrZ</a>:       <span class="comment">// ... suspend</span>
52100552       <span class="keywordflow">break</span>;
52200553     <span class="keywordflow">default</span>:
52300554       <span class="keywordflow">break</span>;
52400555     }
52500556
52600557     <span class="comment">// treatment for ESC. character</span>
52700558     <span class="keywordflow">if</span>( cc == <a class="code" href="G4UItcsh_8cc.html#a16">AsciiESC</a>) { <span class="comment">// ESC</span>
52800559       G4cin.get(cc);
52900560       <span class="keywordflow">if</span> (cc == <span class="charliteral">'['</span> || <span class="charliteral">'O'</span>) { <span class="comment">// care for another termcap, such as konsole</span>
53000561         G4cin.get(cc);
53100562         <span class="keywordflow">switch</span>(cc) {
53200563         <span class="keywordflow">case</span> <span class="charliteral">'A'</span>: <span class="comment">// [UP]</span>
53300564           cc = <span class="charliteral">'P'</span> - <span class="charliteral">'@'</span>;
53400565           <a class="code" href="classG4UItcsh.html#b15">PreviousCommand</a>();  <span class="comment">// ... show previous commad</span>
53500566           <span class="keywordflow">break</span>;
53600567         <span class="keywordflow">case</span> <span class="charliteral">'B'</span>: <span class="comment">// [DOWN]</span>
53700568           cc = <span class="charliteral">'N'</span> - <span class="charliteral">'@'</span>;
53800569           <a class="code" href="classG4UItcsh.html#b14">NextCommand</a>();  <span class="comment">// ... show next commad</span>
53900570           <span class="keywordflow">break</span>;
54000571         <span class="keywordflow">case</span> <span class="charliteral">'C'</span>: <span class="comment">// [RIGHT]</span>
54100572           cc = <span class="charliteral">'F'</span> - <span class="charliteral">'@'</span>;
54200573           <a class="code" href="classG4UItcsh.html#b10">ForwardCursor</a>();   <span class="comment">// ... forward cursor</span>
54300574           <span class="keywordflow">break</span>;
54400575         <span class="keywordflow">case</span> <span class="charliteral">'D'</span>: <span class="comment">// [LEFT]</span>
54500576           cc = <span class="charliteral">'B'</span> - <span class="charliteral">'@'</span>;
54600577           <a class="code" href="classG4UItcsh.html#b11">BackwardCursor</a>();      <span class="comment">// ... backward cursor</span>
54700578           <span class="keywordflow">break</span>;
54800579         <span class="keywordflow">default</span><span class="comment">// who knows !?</span>
54900580           cc = 0;
55000581           <span class="keywordflow">break</span>;
55100582         }
55200583       }
55300584     }
55400585
55500586     <span class="comment">// insert character to command line and display</span>
55600587     <a class="code" href="classG4UItcsh.html#b4">InsertCharacter</a>(cc);
55700588   
55800589   } <span class="keywordflow">while</span>( cc != <span class="charliteral">'\n'</span>);
55900590
56000591   <span class="keywordflow">return</span> <a class="code" href="classG4UItcsh.html#p0">commandLine</a>;
56100592 }
56200593
563<a name="l00595"></a><a class="code" href="classG4UItcsh.html#a3">00595</a> G4String <a class="code" href="classG4UItcsh.html#a3">G4UItcsh::GetCommandLine</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* msg)
56400597 {
56500598   <a class="code" href="classG4UItcsh.html#b21">SetTermToInputMode</a>();
56600599
56700600   <a class="code" href="classG4UItcsh.html#b0">MakePrompt</a>(msg); <span class="comment">// update</span>
56800601   <a class="code" href="classG4UItcsh.html#p6">relativeHistoryIndex</a>= 0;
56900602
57000603   G4cout &lt;&lt; <a class="code" href="classG4VUIshell.html#p1">promptString</a> &lt;&lt; std::flush;
57100604
57200605   G4String newCommand= <a class="code" href="classG4UItcsh.html#b3">ReadLine</a>();  <span class="comment">// read line...</span>
57300606   <span class="comment">// multi-line</span>
57400607   <span class="keywordflow">while</span>( (newCommand.length() &gt; 0) &amp;&amp;
57500608          ( newCommand[newCommand.length()-1] == <span class="charliteral">'_'</span>) ) {
57600609     newCommand.remove(newCommand.length()-1);
57700610     G4cout &lt;&lt; G4endl;
57800611     <a class="code" href="classG4VUIshell.html#p1">promptString</a>= <span class="stringliteral">"? "</span>;
57900612     G4cout &lt;&lt; <a class="code" href="classG4VUIshell.html#p1">promptString</a> &lt;&lt; std::flush;
58000613     G4String newLine= <a class="code" href="classG4UItcsh.html#b3">ReadLine</a>();
58100614     newCommand.append(newLine);
58200615   }
58300616
58400617   <span class="comment">// update history...</span>
58500618   G4bool isMeaningfull= FALSE; <span class="comment">// check NULL command</span>
58600619   <span class="keywordflow">for</span> (size_t i=0; i&lt;newCommand.length(); i++) {
58700620     <span class="keywordflow">if</span>(newCommand[i] != <span class="charliteral">' '</span>) {
58800621       isMeaningfull= TRUE;
58900622       <span class="keywordflow">break</span>;
59000623     }
59100624   }
59200625   <span class="keywordflow">if</span>( !newCommand.empty() &amp;&amp; isMeaningfull) <a class="code" href="classG4UItcsh.html#b19">StoreHistory</a>(newCommand);
59300626
59400627   <span class="comment">// reset terminal</span>
59500628   <a class="code" href="classG4UItcsh.html#b22">RestoreTerm</a>();
59600629
59700630   G4cout &lt;&lt; G4endl;
59800631   <span class="keywordflow">return</span> newCommand;
59900632 }
60000633
601<a name="l00635"></a><a class="code" href="classG4UItcsh.html#b18">00635</a> G4String <a class="code" href="classG4UItcsh.html#b18">G4UItcsh::GetFirstMatchedString</a>(<span class="keyword">const</span> G4String&amp; str1,
60200636                                          <span class="keyword">const</span> G4String&amp; str2) <span class="keyword">const</span>
60300638 {
60400639   <span class="keywordtype">int</span> nlen1= str1.length();
60500640   <span class="keywordtype">int</span> nlen2= str2.length();
60600641
60700642   <span class="keywordtype">int</span> nmin = nlen1&lt;nlen2 ? nlen1 : nlen2;
60800643
60900644   G4String strMatched;
61000645   <span class="keywordflow">for</span>(size_t i=0; G4int(i)&lt;nmin; i++){
61100646     <span class="keywordflow">if</span>(str1[i]==str2[i]) {
61200647       strMatched+= str1[i];
61300648     } <span class="keywordflow">else</span> {
61400649       <span class="keywordflow">break</span>;
61500650     }
61600651   }
61700652
61800653   <span class="keywordflow">return</span> strMatched;
61900654 }
62000655
62100656 <span class="comment">// --------------------------------------------------------------------</span>
62200657 <span class="comment">//      history</span>
62300658 <span class="comment">// --------------------------------------------------------------------</span>
624<a name="l00660"></a><a class="code" href="classG4UItcsh.html#b19">00660</a> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b19">G4UItcsh::StoreHistory</a>(G4String aCommand)
62500662 {
62600663   G4int i= <a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>%<a class="code" href="classG4UItcsh.html#p4">maxHistory</a>;
62700664   <span class="keywordflow">if</span>(i==0) i=<a class="code" href="classG4UItcsh.html#p4">maxHistory</a>;
62800665
62900666   <a class="code" href="classG4UItcsh.html#p3">commandHistory</a>[i-1]= aCommand;  <span class="comment">// 0-offset</span>
63000667   <a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>++;
63100668 }
63200669
633<a name="l00671"></a><a class="code" href="classG4UItcsh.html#b20">00671</a> G4String <a class="code" href="classG4UItcsh.html#b20">G4UItcsh::RestoreHistory</a>(G4int histNo)
63400673 {
63500674   <span class="keywordflow">if</span>(histNo&gt;= <a class="code" href="classG4UItcsh.html#p5">currentHistoryNo</a>) <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
63600675
63700676   G4int index= histNo%<a class="code" href="classG4UItcsh.html#p4">maxHistory</a>;
63800677   <span class="keywordflow">if</span>(index==0) index= <a class="code" href="classG4UItcsh.html#p4">maxHistory</a>;
63900678
64000679   <span class="keywordflow">return</span> <a class="code" href="classG4UItcsh.html#p3">commandHistory</a>[index-1]; <span class="comment">// 0-offset</span>
64100680 }
64200681
64300682 <span class="comment">// --------------------------------------------------------------------</span>
64400683 <span class="comment">//      terminal mode</span>
64500684 <span class="comment">// --------------------------------------------------------------------</span>
646<a name="l00686"></a><a class="code" href="classG4UItcsh.html#b21">00686</a> <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b21">G4UItcsh::SetTermToInputMode</a>()
64700688 { 
64800689   termios tiosbuf= <a class="code" href="classG4UItcsh.html#p7">tios</a>;
64900690
65000691   tiosbuf.c_iflag &amp;= ~(BRKINT | ISTRIP);
65100692   tiosbuf.c_iflag |= (IGNBRK | IGNPAR);
65200693   tiosbuf.c_lflag &amp;= ~(ICANON | IEXTEN | ECHO);
65300694   tiosbuf.c_cc[VMIN] = 1;
65400695   tiosbuf.c_cc[VTIME] = 0;
65500696   
65600697   tcsetattr(0, TCSAFLUSH, &amp;tiosbuf);
65700698 }
65800699
65900700
660<a name="l00702"></a><a class="code" href="classG4UItcsh.html#b22">00702</a> <span class="keywordtype">void</span> <a class="code" href="classG4UItcsh.html#b22">G4UItcsh::RestoreTerm</a>()
66100704 {
66200705   tcsetattr(0, TCSAFLUSH, &amp;<a class="code" href="classG4UItcsh.html#p7">tios</a>);
66300706 } 
66400707
66500708 <span class="preprocessor">#endif</span>
66600709 <span class="preprocessor"></span>
667</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Jun 22 11:07:02 2007 by
668<a href="http://www.doxygen.org/index.html">
669<img src="doxygen.png" alt="doxygen" align="middle" border=0 > 
670</a>1.3.4 </small></address>
671</body>
672</html>
Note: See TracBrowser for help on using the repository browser.