40static const G4String TermColorString[8] ={
41 strESC+
"[30m", strESC+
"[31m", strESC+
"[32m", strESC+
"[33m",
42 strESC+
"[34m", strESC+
"[35m", strESC+
"[36m", strESC+
"[37m"
47 : promptSetting(prompt), promptString(
""), nColumn(80),
49 currentCommandDir(
"/")
129 if(absPath.length()==0)
return NULL;
130 if(absPath[absPath.length()-1] !=
'/')
return NULL;
131 if(absPath==
"/")
return cmdTree;
133 for(
G4int indx=1; indx<
G4int(absPath.length())-1; ) {
135 if(jslash !=
G4int(G4String::npos)) {
137 cmdTree= cmdTree-> GetTree(
G4String(absPath(0,jslash+1)));
142 if(cmdTree == NULL)
return NULL;
150 if(apath.empty())
return apath;
155 if(apath[(
size_t)0] !=
'/') bpath= currentCommandDir + apath;
159 for(
G4int indx=1; indx<=
G4int(bpath.length())-1; ) {
165 if(jslash !=
G4int(G4String::npos)) {
166 if(bpath.substr(indx,jslash-indx) ==
".."){
171 if(absPath.length() >= 2) {
172 absPath.
remove(absPath.length()-1);
174 if(jpre !=
G4int(G4String::npos)) absPath.
remove(jpre+1);
176 }
else if(bpath.substr(indx,jslash-indx) ==
"."){
178 if( !(jslash==indx && bpath(indx)==
'/') )
179 absPath+= bpath(indx, jslash-indx+1);
196 if(apath.empty())
return apath;
198 G4int lstr= apath.length();
202 if(apath[(
size_t)(lstr-1)]==
'/') Qsla=
TRUE;
206 for(
G4int i=lstr-1; i>=0; i--) {
207 if(Qsla && apath[(
size_t)i]!=
'/') Qsla=
FALSE;
208 if(apath[(
size_t)i]==
'/' && !Qsla) {
214 if(indx==-1)
return apath;
216 if(indx==0 && lstr==1) {
222 newPath= newPath(indx+1,lstr-indx-1);
243 G4int len= input.length();
244 if(! input.empty()) {
246 for(
G4int i=len-1; i>=0; i--) {
247 if(input[(
size_t)i]==
'/') {
253 if(indx != -1) vpath= GetAbsCommandDirPath(input(0,indx+1));
254 if(!(indx==0 && len==1)) vcmd= input(indx+1,len-indx-1);
261 if(GetCommandTree(tmpstr) != NULL) {
270 G4cout <<
"<" << input <<
">: No such directory" <<
G4endl;
278 G4int Ndir= atree-> GetTreeEntry();
279 G4int Ncmd= atree-> GetCommandEntry();
280 if(Ndir==0 && Ncmd==0)
return;
283 for(
G4int idir=1; idir<=Ndir; idir++) {
284 if(idir==1 && lsColorFlag) stream+= TermColorString[directoryColor];
285 G4String fpdir= atree-> GetTree(idir)-> GetPathName();
287 if(candidate.empty()) {
288 if(vcmd==
"" || fpdir==inputpath) {
289 stream+= GetCommandPathTail(fpdir); stream+=
" ";
293 if( fpdir.
index(candidate, 0) == 0) {
294 stream+= GetCommandPathTail(fpdir); stream+=
" ";
300 for(
G4int icmd=1; icmd<=Ncmd; icmd++){
301 if(icmd==1 && lsColorFlag) stream+= TermColorString[commandColor];
302 G4String fpcmd= atree-> GetPathName() +
303 atree-> GetCommand(icmd) -> GetCommandName();
305 if(candidate.empty()) {
306 if(vcmd==
"" || fpcmd==inputpath) {
307 stream+= GetCommandPathTail(fpcmd); stream+=
"* ";
311 if( fpcmd.
index(candidate, 0) == 0) {
312 stream+= GetCommandPathTail(fpcmd); stream+=
"* ";
318 if(!isMatch && candidate.empty())
320 <<
">: No such directory or command" << std::flush;
324 arrayString.
Show(nColumn);
G4DLLIMPORT std::ostream G4cout
G4ApplicationState GetCurrentState() const
static G4StateManager * GetStateManager()
G4String & remove(str_size)
G4String & append(const G4String &)
str_size index(const char *, G4int pos=0) const
G4String strip(G4int strip_Type=trailing, char c=' ')
static G4UImanager * GetUIpointer()
virtual void ResetTerminal()
virtual void MakePrompt(const char *msg=0)
virtual void ListCommand(const G4String &input, const G4String &candidate="") const
G4UIcommandTree * GetCommandTree(const G4String &dir) const
G4String currentCommandDir
G4VUIshell(const G4String &prompt="> ")
G4String GetCommandPathTail(const G4String &apath) const
G4String GetAbsCommandDirPath(const G4String &apath) const