[31m-- aish is another attempt of A. i. written with Ada.[m
[31m-- Aish is Copyright (C) 2024 Manuel De Girardi ; [m
[31m--[m
[31m--   This program is free software; you can redistribute it and/or modify[m
[31m--   it under the terms of the GNU General Public License as published by[m
[31m--   the Free Software Foundation; either version 2 of the License, or[m
[31m--   (at your option) any later version.[m
[31m--[m
[31m--   This program is distributed in the hope that it will be useful,[m
[31m--   but WITHOUT ANY WARRANTY; without even the implied warranty of[m
[31m--   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the[m
[31m--   GNU General Public License for more details.[m
[31m--[m
[31m--   You should have received a copy of the GNU General Public License[m
[31m--   along with this program; if not, write to the Free Software[m
[31m--   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA[m
[31m--[m
[31m-- Date := "2024-04-29 20:25:34"[m
[31m-- Version := "1.1.0r"[m
[01;34mwith[m Text_Io[31m;[m
[01;34mwith[m GNAT[31m.[mDirectory_Operations[31m.[mIteration[31m;[m
[01;34mwith[m Gnat[31m.[mRegexp[31m;[m
[01;34mwith[m Gnat[31m.[mDirectory_Operations[31m;[m
[01;34mwith[m Gnat[31m.[mCommand_Line[31m;[m
[01;34mwith[m Ada[31m.[mStrings[31m.[mFixed[31m;[m
[01;34mwith[m Ada[31m.[mCharacters[31m.[mHandling[31m;[m
[01;34mwith[m System[31m.[mOs_Constants[31m;[m
[01;34muse[m System[31m.[mOs_Constants[31m;[m
[01;34mpackage[m [01;34mbody[m Ai[31m.[mShell [01;34mis[m
   
   [01;34muse[m Text_Io[31m;[m      
   [01;34muse[m Gnat[31m.[mDirectory_Operations[31m;[m
   [01;34muse[m Ada[31m.[mStrings[31m.[mFixed[31m;[m
   [01;34muse[m Ada[31m.[mCharacters[31m;[m
   
   [01;34mprocedure[m [01;30mParse[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[m Name [31m:[m [01;34mout[m String_Access[31m;[m Image [31m:[m [01;34mout[m String_Access[31m)[m [01;34mis[m
      current [31m:[m [01;34mconstant[m Natural [31m:=[m [01;30mIndex[m[31m([mLine[31m,[m [31m"="[m[31m);[m
      Top   [31m:[m [01;34mconstant[m Natural [31m:=[m [01;30mIndex[m[31m([m[01;30mLine[m[31m([mLine'First[31m..[mcurrent[31m),[m [31m" "[m[31m,[m backward[31m)+[m [35m1[m[31m;[m
      Bot   [31m:[m [01;34mconstant[m Natural [31m:=[m [01;30mIndex_Non_Blank[m[31m([mLine[31m,[m Backward[31m);[m
   [01;34mbegin[m
      [01;34mif[m [31m([mCurrent [31m=[m [35m0[m[31m)[m [01;34mor[m [31m([mTop [31m=[m [35m0[m[31m)[m [01;34mor[m [31m([mBot [31m=[m [35m0[m[31m)[m [01;34mthen[m
	 [01;34mreturn[m[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m	      
      Name [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[01;30mLine[m[31m([mTop[31m..[mcurrent[31m-[m[35m1[m[31m));[m
      Image [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[01;30mLine[m[31m([mCurrent[31m+[m[35m1[m[31m..[mBot[31m));[m
   [01;34mend[m Parse[31m;[m
   
   
   
   
   [01;34mfunction[m [01;30mMake[m [31m([mNames [31m:[m [01;34min[m [32mString[m[31m;[m Value [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m Attribut_Record [01;34mis[m
      Att [31m:[m Attribut_Record[31m;[m
   [01;34mbegin[m
      Att[31m.[mTags [31m:=[m [01;34mnew[m [32mString[m ' [31m([mNames[31m);[m
      [01;34mbegin[m
	 Att[31m.[mboo [31m:=[m [32mBoolean[m'[01;30mValue[m[31m([mValue[31m);[m
	 Att[31m.[mEnum [31m:=[m Boo[31m;[m
      [01;34mexception[m
	 [01;34mwhen[m Constraint_Error [31m=>[m
	    [01;34mbegin[m
	       Att[31m.[mInt [31m:=[m [32mInteger[m'[01;30mValue[m[31m([mValue[31m);[m
	       Att[31m.[mEnum [31m:=[m Int[31m;[m
	    [01;34mexception[m
	       [01;34mwhen[m Constraint_Error [31m=>[m
		  [01;34mbegin[m
		     Att[31m.[mFlt [31m:=[m [32mfloat[m'[01;30mValue[m[31m([mValue[31m);[m
		     Att[31m.[mEnum [31m:=[m Flt[31m;[m
		  [01;34mexception[m
		     [01;34mwhen[m Constraint_Error [31m=>[m
			[01;34mbegin[m
			   Att[31m.[mstr [31m:=[m [01;34mnew[m [32mString[m ' [31m([mValue[31m);[m
			   Att[31m.[mEnum [31m:=[m Str[31m;[m
			[01;34mend[m[31m;[m
		  [01;34mend[m[31m;[m
	    [01;34mend[m[31m;[m
      [01;34mend[m[31m;[m
      [01;34mreturn[m Att[31m;[m
   [01;34mend[m Make[31m;[m
   
   [01;34mfunction[m [01;30mnames[m [31m([mAtt [31m:[m [01;34min[m Attribut_Record[31m)[m [01;34mreturn[m [32mString[m [01;34mis[m
   [01;34mbegin[m
      [01;34mreturn[m Att[31m.[mTags[31m.[m[01;34mall[m[31m;[m
   [01;34mend[m Names[31m;[m
   [01;34mfunction[m [01;30mimages[m [31m([mAtt [31m:[m [01;34min[m Attribut_Record[31m)[m [01;34mreturn[m [32mString[m [01;34mis[m
   [01;34mbegin[m
      [01;34mcase[m Att[31m.[mEnum [01;34mis[m
	 [01;34mwhen[m Nil [31m=>[m
	    [01;34mreturn[m [31m""[m[31m;[m
	 [01;34mwhen[m Boo [31m=>[m
	    [01;34mreturn[m [32mBoolean[m'[01;30mImage[m[31m([mAtt[31m.[mBoo[31m);[m
	 [01;34mwhen[m Int [31m=>[m
	    [01;34mreturn[m [32mInteger[m'[01;30mImage[m[31m([mAtt[31m.[mInt[31m);[m
	 [01;34mwhen[m Flt [31m=>[m
	    [01;34mreturn[m [32mFloat[m'[01;30mImage[m[31m([mAtt[31m.[mFlt[31m);[m
	 [01;34mwhen[m Str [31m=>[m
	    [01;34mreturn[m Att[31m.[mStr[31m.[m[01;34mall[m[31m;[m
      [01;34mend[m [01;34mcase[m[31m;[m
   [01;34mend[m Images[31m;[m

   
   [01;34mprocedure[m [01;30mAlias[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[m Alias_Set [31m:[m [01;34min[m [01;34mout[m Attributs[31m)[m [01;34mis[m
      
      Command [31m:[m Gnat[31m.[mCommand_Line[31m.[mCommand_Line[31m;[m
      
      Args_List [31m:[m Argument_List_Access[31m;[m                  
      [31m--Buffer : U_Array_Access := Result.Wlines;[m
      Name   [31m:[m String_Access[31m;[m
      
      Image  [31m:[m String_Access[31m;[m
      Alias  [31m:[m Attribut_Record[31m;[m
   [01;34mbegin[m      
      Gnat[31m.[mCommand_Line[31m.[m[01;30mSet_Command_Line[m[31m([mCommand[31m,[m Line[31m);[m
      Gnat[31m.[mCommand_Line[31m.[m[01;30mBuild[m[31m([mCommand[31m,[m Args_List[31m,[m False[31m);[m
      
      [01;34mif[m Args_List'Last [31m>[m [35m2[m [01;34mthen[m
	 [31m--Buffer := Add_Line(Buffer, "alias : error : ");[m
	 [31m--Buffer := Add_Line(Buffer, "                -- To many argument in command --");[m
	 [31m--Buffer := Add_Line(Buffer, "                -- Try 'help cd' for more info --");[m
	 [01;34mreturn[m[31m;[m
      [01;34melsif[m Args_List'Last [31m=[m [35m2[m [01;34mthen[m
	 
	 [01;34mif[m [01;30mArgs_List[m[31m([m[35m2[m[31m)[m [31m/=[m [01;34mnull[m [01;34mand[m [01;34mthen[m [01;30mArgs_List[m[31m([m[35m2[m[31m).[m[01;34mall[m [31m/=[m [31m""[m [01;34mthen[m
	    
	    [01;30mParse[m[31m([mLine[31m,[m Name[31m,[m Image[31m);[m
	    
	    Alias [31m:=[m [01;30mMake[m[31m([mName[31m.[m[01;34mall[m[31m,[m Image[31m.[m[01;34mall[m[31m);[m
	    
	    Alias_Set[31m.[m[01;30mlist[m[31m([mAlias_Set[31m.[mIndex [31m+[m [35m1[m[31m)[m [31m:=[m Alias[31m;[m
	    Alias_Set[31m.[mIndex [31m:=[m Alias_Set[31m.[mIndex [31m+[m [35m1[m[31m;[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34melse[m
	 
	 [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mAlias_Set[31m.[mIndex [01;34mloop[m
	    
	    [01;30mPut_Line[m[31m([m[01;30mNames[m[31m([mAlias_Set[31m.[m[01;30mlist[m[31m([mIter[31m))[m [31m&[m [31m'='[m [31m&[m [01;30mimages[m[31m([mAlias_Set[31m.[m[01;30mlist[m[31m([mIter[31m)));[m
	 [01;34mend[m [01;34mloop[m[31m;[m
	 
      [01;34mend[m [01;34mif[m[31m;[m
      
      
   [01;34mexception[m
      [01;34mwhen[m [01;34mothers[m [31m=>[m
	 
	 [01;34mnull[m[31m;[m
   [01;34mend[m Alias[31m;[m
   
   [01;34mprocedure[m [01;30mUnalias[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[m Alias_Set [31m:[m [01;34min[m [01;34mout[m Attributs[31m)[m [01;34mis[m
      
      Command [31m:[m Gnat[31m.[mCommand_Line[31m.[mCommand_Line[31m;[m
      Args_List [31m:[m Argument_List_Access[31m;[m                  
   [01;34mbegin[m      
      Gnat[31m.[mCommand_Line[31m.[m[01;30mSet_Command_Line[m[31m([mCommand[31m,[m Line[31m);[m
      Gnat[31m.[mCommand_Line[31m.[m[01;30mBuild[m[31m([mCommand[31m,[m Args_List[31m,[m False[31m);[m
      
      [01;34mif[m Args_List'Last [31m>[m [35m2[m [01;34mthen[m
	 
	 [01;34mreturn[m[31m;[m
      [01;34melsif[m Args_List'Last [31m=[m [35m2[m [01;34mthen[m	 
	 [01;34mif[m [01;30mArgs_List[m[31m([m[35m2[m[31m)[m [31m/=[m [01;34mnull[m [01;34mand[m [01;34mthen[m [01;30mArgs_List[m[31m([m[35m2[m[31m).[m[01;34mall[m [31m/=[m [31m""[m [01;34mthen[m
	    [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mAlias_Set[31m.[mIndex [01;34mloop[m
	       [01;34mdeclare[m
		  Alias [31m:[m [01;34mconstant[m Attribut_Record [31m:=[m Alias_Set[31m.[m[01;30mList[m[31m([mIter[31m);[m
	       [01;34mbegin[m
		  [01;34mif[m [01;30mNames[m[31m([mAlias[31m)[m [31m=[m [01;30mArgs_List[m[31m([m[35m2[m[31m).[m[01;34mall[m [01;34mthen[m
		     [01;34mfor[m Left [01;34min[m Iter[31m..[mAlias_Set[31m.[mIndex [01;34mloop[m
			Alias_Set[31m.[m[01;30mList[m[31m([mLeft[31m)[m [31m:=[m Alias_Set[31m.[m[01;30mList[m[31m([mLeft[31m+[m[35m1[m[31m);[m
			Alias_Set[31m.[mIndex [31m:=[m Alias_Set[31m.[mIndex [31m-[m [35m1[m[31m;[m
		     [01;34mend[m [01;34mloop[m[31m;[m
		     [01;34mexit[m[31m;[m
		  [01;34mend[m [01;34mif[m[31m;[m
	       [01;34mend[m[31m;[m
	    [01;34mend[m [01;34mloop[m[31m;[m
	 
	 [01;34mend[m [01;34mif[m[31m;[m      
      [01;34mend[m [01;34mif[m[31m;[m

   [01;34mexception[m
      [01;34mwhen[m [01;34mothers[m [31m=>[m
	 [01;34mnull[m[31m;[m
	 
   [01;34mend[m Unalias[31m;[m
   
   
   
   
   [01;34mprocedure[m [01;30mSet[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[m Var_Set [31m:[m [01;34min[m [01;34mout[m Attributs[31m)[m [01;34mis[m
   [01;34mbegin[m
      [01;30mAlias[m[31m([mLine[31m,[m Var_Set[31m);[m      
   [01;34mend[m Set[31m;[m
   
   [01;34mprocedure[m [01;30mUnset[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[m Var_Set [31m:[m [01;34min[m [01;34mout[m Attributs[31m)[m [01;34mis[m
   [01;34mbegin[m
      [01;30mUnalias[m[31m([mLine[31m,[m Var_Set[31m);[m
   [01;34mend[m Unset[31m;[m
   
   [01;34mprocedure[m [01;30mPut[m[31m([mName [31m:[m [01;34min[m [32mString[m[31m;[m  Var_Set [31m:[m [01;34min[m [01;34mout[m Attributs[31m)[m [01;34mis[m
   [01;34mbegin[m
      [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mVar_Set[31m.[mIndex [01;34mloop[m
	 [01;34mif[m [01;30mNames[m[31m([mVar_Set[31m.[m[01;30mlist[m[31m([mIter[31m))[m [31m=[m Name [01;34mthen[m

	    Text_Io[31m.[m[01;30mPut[m[31m([m[01;30mimages[m[31m([mVar_Set[31m.[m[01;30mlist[m[31m([mIter[31m)));[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m	 
   [01;34mend[m Put[31m;[m
   
   [01;34mprocedure[m [01;30mPut_Line[m[31m([mName [31m:[m [01;34min[m [32mString[m[31m;[m  Var_Set [31m:[m [01;34min[m [01;34mout[m Attributs[31m)[m [01;34mis[m
   [01;34mbegin[m
      
      [01;30mPut[m[31m([mName[31m,[m Var_Set[31m);[m
      New_Line[31m;[m
   [01;34mend[m Put_Line[31m;[m
   
   
   
   
   
   
   
   
   Local_Prefix [31m:[m [01;34mconstant[m [32mString[m [31m:=[m [31m"./"[m[31m;[m
   
   [01;34mfunction[m [01;30mDelete_Local_Prefix[m[31m([mFilename [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m [32mString[m [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m Filename'Length [31m>[m [35m2[m [01;34mthen[m
         [01;34mif[m [01;30mFilename[m[31m([mFilename[31m'First..Filename'[mFirst[31m+[m[35m1[m[31m)[m [31m=[m Local_Prefix [01;34mthen[m
            [01;34mreturn[m [01;30mFilename[m[31m([mFilename[31m'First+2..Filename'[mLast[31m);[m
         [01;34melse[m
            [01;34mreturn[m Filename[31m;[m
         [01;34mend[m [01;34mif[m[31m;[m
      [01;34melse[m
         [01;34mreturn[m Filename[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Delete_Local_Prefix[31m;[m
   
   
   [01;34mfunction[m [01;30mNormalize_Quoted_Argument[m[31m([mArg [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m [32mString[m [01;34mis[m
      Local [31m:[m [32mString[m[31m([m[35m1[m[31m..[mArg'Length[31m)[m [31m:=[m Arg[31m;[m
      Local_Index [31m:[m Natural [31m:=[m [35m0[m[31m;[m
   [01;34mbegin[m
      [01;34mfor[m I [01;34min[m Arg[31m'First .. Arg'[mLast [01;34mloop[m 
         [01;34mif[m [01;30mArg[m[31m([mi[31m)[m [31m/=[m [31m'"'[m [01;34mthen[m
            [01;30mLocal[m[31m([mLocal_Index [31m+[m [35m1[m[31m)[m [31m:=[m [01;30mArg[m[31m([mI[31m);[m
            Local_Index [31m:=[m Local_Index [31m+[m [35m1[m[31m;[m
         [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;34mif[m Local_Index [31m/=[m [35m0[m [01;34mthen[m
         [01;34mreturn[m [01;30mLocal[m[31m([mLocal'First[31m..[mLocal_index[31m);[m
      [01;34melse[m
         [01;34mreturn[m Arg[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Normalize_Quoted_Argument[31m;[m

   
   [01;34mfunction[m [01;30mSearch_Regexp[m [31m([mPath [31m:[m [01;34min[m [32mString[m[31m;[m
                           Pattern [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m [32mString[m [01;34mis[m
      
      Full_Line [31m:[m String_Access [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[31m""[m[31m);[m
      
      
      [01;34mprocedure[m [01;30mAction[m [31m([mFilename [31m:[m [01;34min[m [32mString[m[31m;[m
                        Index    [31m:[m [01;34min[m Positive[31m;[m
                        Verax    [31m:[m [01;34min[m [01;34mout[m [32mBoolean[m[31m)[m [01;34mis[m
         
         Buffer [31m:[m String_Access [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[31m""[m[31m);[m
         Tmp    [31m:[m String_Access [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[31m""[m[31m);[m
         
         Is_Out [31m:[m [32mBoolean[m [31m:=[m True[31m;[m
         Regular_Exp [31m:[m Gnat[31m.[mRegexp[31m.[mRegexp[31m;[m
      [01;34mbegin[m
         
         [31m--Text_Io.Put_line("File : "& Filename & "; Pattern : " & Pattern); [m
         Regular_Exp [31m:=[m Gnat[31m.[mRegexp[31m.[m[01;30mCompile[m[31m([m[31m"*"[m [31m&[m Pattern[31m,[m True[31m,[m True[31m);[m
         
         
         [01;34mif[m Gnat[31m.[mRegexp[31m.[m[01;30mMatch[m[31m([mFilename[31m,[m Regular_Exp[31m)[m [01;34mthen[m
            [01;34mif[m Fixed[31m.[m[01;30mIndex[m[31m([mFilename[31m,[m [31m" "[m[31m)[m [31m/=[m [35m0[m [01;34mthen[m
               
               [01;34mfor[m I [01;34min[m Filename[31m'First..Filename'[mLast[31m-[m[35m1[m [01;34mloop[m
                  [01;34mif[m [01;30mFilename[m[31m([mI[31m)[m [31m=[m [32mCharacter[m'[01;30mVal[m[31m([m[35m32[m[31m)[m [01;34mthen[m                    
                     Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mTmp[31m.[m[01;34mall[m [31m&[m [31m" "[m[31m);[m
                     [01;30mFree[m[31m([mTmp[31m);[m
                     Tmp [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                     [01;30mFree[m[31m([mBuffer[31m);[m
                  [01;34melsif[m [01;30mFilename[m[31m([mI[31m)[m [31m=[m [31m'/'[m [01;34mthen[m
                     [01;34mif[m Fixed[31m.[m[01;30mIndex[m[31m([mFilename[31m,[m [31m" "[m[31m,[m I[31m)[m [31m>[m I [01;34mand[m Fixed[31m.[m[01;30mIndex[m[31m([mFilename[31m,[m [31m"/"[m[31m,[m I[31m+[m[35m1[m[31m)[m [31m>[m Fixed[31m.[m[01;30mIndex[m[31m([mFilename[31m,[m [31m" "[m[31m,[m I[31m)[m [01;34mthen[m
                        [01;34mif[m Is_Out [01;34mthen[m
                           Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mTmp[31m.[m[01;34mall[m [31m&[m [01;30mFilename[m[31m([mI[31m)[m [31m&[m [31m""""[m[31m);[m
                           [01;30mFree[m[31m([mTmp[31m);[m
                           Tmp [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                           [01;30mFree[m[31m([mBuffer[31m);[m
                           Is_Out [31m:=[m False[31m;[m
                        [01;34melse[m
                           Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mTmp[31m.[m[01;34mall[m [31m&[m [01;30mFilename[m[31m([mI[31m));[m
                           [01;30mFree[m[31m([mTmp[31m);[m
                           Tmp [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                           [01;30mFree[m[31m([mBuffer[31m);[m
                        [01;34mend[m [01;34mif[m[31m;[m
                        
                     [01;34melsif[m Fixed[31m.[m[01;30mIndex[m[31m([mFilename[31m,[m [31m" "[m[31m,[m I[31m)[m [31m>[m I [01;34mand[m Fixed[31m.[m[01;30mIndex[m[31m([mFilename[31m,[m [31m"/"[m[31m,[m I[31m+[m[35m1[m[31m)[m [31m=[m [35m0[m [01;34mthen[m
                        
                        [01;34mif[m Is_Out [01;34mthen[m
                           Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mTmp[31m.[m[01;34mall[m [31m&[m [01;30mFilename[m[31m([mI[31m)[m [31m&[m [31m""""[m[31m);[m
                           [01;30mFree[m[31m([mTmp[31m);[m
                           Tmp [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                           [01;30mFree[m[31m([mBuffer[31m);[m
                           Is_Out [31m:=[m False[31m;[m
                        [01;34melse[m
                           Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mTmp[31m.[m[01;34mall[m [31m&[m [01;30mFilename[m[31m([mI[31m));[m
                           [01;30mFree[m[31m([mTmp[31m);[m
                           Tmp [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                           [01;30mFree[m[31m([mBuffer[31m);[m
                        [01;34mend[m [01;34mif[m[31m;[m
                     [01;34melse[m
                        Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mTmp[31m.[m[01;34mall[m [31m&[m [01;30mFilename[m[31m([mI[31m));[m
                        [01;30mFree[m[31m([mTmp[31m);[m
                        Tmp [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                        [01;30mFree[m[31m([mBuffer[31m);[m
                     [01;34mend[m [01;34mif[m[31m;[m
                     
                  [01;34melse[m
                     Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mTmp[31m.[m[01;34mall[m [31m&[m [01;30mFilename[m[31m([mI[31m));[m
                     [01;30mFree[m[31m([mTmp[31m);[m
                     Tmp [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                     [01;30mFree[m[31m([mBuffer[31m);[m
                  [01;34mend[m [01;34mif[m[31m;[m
                  
               [01;34mend[m [01;34mloop[m[31m;[m
               Buffer [31m:=[m [01;34mnew[m [32mString[m [31m' (Tmp.all & Filename(Filename'[mLast[31m));[m
               [01;34mif[m [01;34mnot[m Is_Out [01;34mthen[m                 
                  Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mTmp[31m.[m[01;34mall[m [31m&[m [31m""""[m[31m);[m
                  [01;30mFree[m[31m([mTmp[31m);[m
                  Tmp [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                  [01;30mFree[m[31m([mBuffer[31m);[m
               [01;34mend[m [01;34mif[m[31m;[m
               [31m--Text_Io.Put_Line("Matched :" & Full_Line.all);[m
               [01;34mif[m Full_Line'Length [31m>[m [35m0[m [01;34mthen[m
                  Buffer [31m:=[m [01;34mnew[m [32mString[m [31m' (Full_Line.all & '[m ' [31m&[m [31m""[m [31m&[m [01;30mDelete_Local_Prefix[m[31m([mTmp[31m.[m[01;34mall[m[31m)[m [31m&[m [31m""[m[31m);[m
                  [01;30mFree[m[31m([mFull_Line[31m);[m
                  Full_Line [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                  [01;30mFree[m[31m([mBuffer[31m);[m
                  
               [01;34melse[m
                  Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mFull_Line[31m.[m[01;34mall[m [31m&[m [31m""[m [31m&[m [01;30mDelete_Local_Prefix[m[31m([mTmp[31m.[m[01;34mall[m[31m)[m [31m&[m [31m""[m[31m);[m
                  [01;30mFree[m[31m([mFull_Line[31m);[m
                  Full_Line [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                  [01;30mFree[m[31m([mBuffer[31m);[m            
               [01;34mend[m [01;34mif[m[31m;[m
               [31m--Text_Io.Put_Line("Matche :" & Tmp.all);[m
            [01;34melse[m
               [31m--Text_Io.Put_Line("Matched :" & filename);[m
               [01;34mif[m Full_Line'Length [31m>[m [35m0[m [01;34mthen[m
                  Buffer [31m:=[m [01;34mnew[m [32mString[m [31m' (Full_Line.all & '[m ' [31m&[m  [01;30mDelete_Local_Prefix[m[31m([mfilename[31m));[m
                  [01;30mFree[m[31m([mFull_Line[31m);[m
                  Full_Line [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                  [01;30mFree[m[31m([mBuffer[31m);[m            
               [01;34melse[m
                  Buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mFull_Line[31m.[m[01;34mall[m [31m&[m [31m""[m [31m&[m [01;30mDelete_Local_Prefix[m[31m([mfilename[31m)[m [31m&[m [31m""[m[31m);[m
                  [01;30mFree[m[31m([mFull_Line[31m);[m
                  Full_Line [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                  [01;30mFree[m[31m([mBuffer[31m);[m
                  
               [01;34mend[m [01;34mif[m[31m;[m
               [31m--Text_Io.Put_Line("Matche :" & filename);[m
            [01;34mend[m [01;34mif[m[31m;[m
         [01;34mend[m [01;34mif[m[31m;[m
         Verax [31m:=[m False[31m;[m
      [01;34mend[m Action[31m;[m
      
      
   
      
      [01;34mprocedure[m File_Search [01;34mis[m
         [01;34mnew[m Iteration[31m.[m[01;30mWildcard_iterator[m[31m([mAction[31m);[m
      
      
   [01;34mbegin[m
      
      
      [31m--Text_Io.Put_Line("pattern for : " & Expand_Path(Pattern));[m
      
      
      [01;34mif[m [01;30mExpand_Path[m[31m([mPattern[31m)[m [31m/=[m [31m""[m [01;34mthen[m
         
         [01;30mFile_Search[m[31m([mPath[31m);[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m Full_Line'Length [31m>[m [35m0[m [01;34mthen[m
         [01;34mdeclare[m
            Result [31m:[m [01;34mconstant[m [32mString[m [31m:=[m Full_Line[31m.[m[01;34mall[m[31m;[m
         [01;34mbegin[m
            [01;30mFree[m[31m([mFull_Line[31m);[m
            [01;34mreturn[m Result[31m;[m
         [01;34mend[m[31m;[m
      [01;34melse[m
         [01;34mreturn[m [01;30mExpand_Path[m[31m([mPattern[31m);[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mexception[m 
      [01;34mwhen[m [01;34mothers[m [31m=>[m
         [01;34mif[m Full_Line'Length [31m>[m [35m0[m [01;34mthen[m
            [01;34mdeclare[m
               Result [31m:[m [01;34mconstant[m [32mString[m [31m:=[m Full_Line[31m.[m[01;34mall[m[31m;[m
            [01;34mbegin[m
               [01;30mFree[m[31m([mFull_Line[31m);[m
               [01;34mreturn[m Result[31m;[m
            [01;34mend[m[31m;[m
         [01;34melse[m
            [01;34mreturn[m [01;30mExpand_Path[m[31m([mPattern[31m);[m
         [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Search_Regexp[31m;[m

   [01;34mfunction[m [01;30mExpand_filename[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m [32mString[m [01;34mis[m
      
      

      Absolute_Path [31m:[m [01;34mconstant[m [32mCharacter[m [31m:=[m [31m'/'[m[31m;[m

      
      [01;34mprocedure[m [01;30mRecursive_Expand[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[m Result [31m:[m [01;34min[m [01;34mout[m String_Access[31m)[m [01;34mis[m
         
         Start[31m,[m Stop [31m:[m Natural [31m:=[m [35m0[m[31m;[m
      [01;34mbegin[m
         [01;34mif[m Line'Length [31m>[m [35m1[m [01;34mthen[m            
            [01;34mif[m Start [31m=[m [35m0[m [01;34mthen[m
               Start [31m:=[m Line'First[31m;[m
            [01;34mend[m [01;34mif[m[31m;[m
            
            Stop [31m:=[m Fixed[31m.[m[01;30mIndex[m[31m([mLine[31m,[m [31m" "[m[31m,[m Start[31m+[m[35m1[m[31m);[m
            [01;34mif[m Stop [31m/=[m [35m0[m [01;34mthen[m
               [01;34mif[m [01;30mLine[m[31m([mStart[31m)[m [31m/=[m Absolute_Path [01;34mthen[m
                  
                  Result [31m:=[m [01;34mnew[m [32mString[m [31m' (Result.all & '[m ' [31m&[m [01;30mSearch_Regexp[m[31m([m[01;30mExpand_Path[m[31m([m[01;30mLine[m[31m([mStart[31m..[mStop[31m-[m[35m1[m[31m)),[m [01;30mLine[m[31m([mStart[31m..[mStop[31m-[m[35m1[m[31m)));[m
               [01;34melse[m               
                  
                  Result [31m:=[m [01;34mnew[m [32mString[m [31m' (Result.all & '[m ' [31m&[m [01;30mSearch_Regexp[m[31m([m[01;30mExpand_Path[m[31m([m[01;30mLine[m[31m([mStart[31m..[mStop[31m-[m[35m1[m[31m)),[m [01;30mLine[m[31m([mStart[31m..[mStop[31m-[m[35m1[m[31m)));[m
               [01;34mend[m [01;34mif[m[31m;[m          
               [01;30mRecursive_Expand[m[31m([m[01;30mLine[m[31m([mStop[31m+[m[35m1[m[31m..[mLine'last[31m),[m Result[31m);[m
               
               
            [01;34melse[m
               
               
               [01;34mif[m [01;30mLine[m[31m([mStart[31m)[m [31m/=[m Absolute_Path [01;34mthen[m
                  
                  Result [31m:=[m [01;34mnew[m [32mString[m [31m' (Result.all & '[m [31m' & Search_Regexp(Expand_Path(Line(Start..Line'[mlast[31m)),[m [01;30mLine[m[31m([mStart[31m..[mLine'Last[31m)));[m
               [01;34melse[m               
                  
                  Result [31m:=[m [01;34mnew[m [32mString[m [31m' (Result.all & '[m [31m' & Search_Regexp(Expand_Path(Line(Start..Line'[mlast[31m)),[m [01;30mLine[m[31m([mStart[31m..[mLine'Last[31m)));[m
               [01;34mend[m [01;34mif[m[31m;[m          
               
               
            [01;34mend[m [01;34mif[m[31m;[m
            
         [01;34melse[m
            [01;34mif[m Start [31m=[m [35m0[m [01;34mthen[m
               Start [31m:=[m Line'First[31m;[m
            [01;34mend[m [01;34mif[m[31m;[m
            [01;34mif[m [01;30mLine[m[31m([mStart[31m)[m [31m/=[m Absolute_Path [01;34mthen[m
               
               Result [31m:=[m [01;34mnew[m [32mString[m [31m' (Result.all & '[m [31m' & Search_Regexp(Expand_Path(Line(Start..Line'[mLast[31m)),[m [01;30mLine[m[31m([mStart[31m..[mLine'Last[31m)));[m
            [01;34melse[m                  
               
               Result [31m:=[m [01;34mnew[m [32mString[m [31m' (Result.all & '[m [31m' & Search_Regexp(Expand_Path(Line(Start..Line'[mlast[31m)),[m [01;30mLine[m[31m([mStart[31m..[mLine'Last[31m)));[m
            [01;34mend[m [01;34mif[m[31m;[m                       
            
         [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m Recursive_Expand[31m;[m
      Full_Set [31m:[m String_Access [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[31m""[m[31m);[m
   [01;34mbegin[m
      
      [01;30mRecursive_Expand[m[31m([m[01;30mLine[m[31m([mFixed[31m.[m[01;30mIndex_Non_Blank[m[31m([mLine[31m)..[mFixed[31m.[m[01;30mIndex_Non_Blank[m[31m([mLine[31m,[m Backward[31m)),[m Full_Set[31m);[m
      
      [01;34mif[m Full_Set'Length [31m>[m [35m0[m [01;34mthen[m
         [01;34mdeclare[m
            Result [31m:[m [01;34mconstant[m [32mString[m [31m:=[m Full_Set[31m.[m[01;34mall[m[31m([mFixed[31m.[m[01;30mIndex_Non_Blank[m[31m([mFull_Set[31m.[m[01;34mall[m[31m)..[mFixed[31m.[m[01;30mIndex_Non_Blank[m[31m([mFull_Set[31m.[m[01;34mall[m[31m,[m Backward[31m));[m
         [01;34mbegin[m
            [01;30mFree[m[31m([mFull_Set[31m);[m
            [01;34mreturn[m Result[31m;[m
         [01;34mend[m[31m;[m            
      [01;34melse[m
         [01;34mreturn[m [31m""[m[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      
   [01;34mend[m Expand_Filename[31m;[m
   
   
   
   [01;34mprocedure[m [01;30mChange_directory[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[mOld_Pwd [31m:[m [01;34min[m [01;34mout[m String_Access[31m)[m [01;34mis[m
      Command [31m:[m Gnat[31m.[mCommand_Line[31m.[mCommand_Line[31m;[m
      
      Args_List [31m:[m Argument_List_Access[31m;[m                  
      Buffer [31m:[m String_Access[31m;[m
   [01;34mbegin[m      
      Gnat[31m.[mCommand_Line[31m.[m[01;30mSet_Command_Line[m[31m([mCommand[31m,[m Line[31m);[m
      Gnat[31m.[mCommand_Line[31m.[m[01;30mBuild[m[31m([mCommand[31m,[m Args_List[31m,[m False[31m);[m
      [01;34mif[m Args_List'Last [31m>[m [35m2[m [01;34mthen[m
	 
	 [01;34mreturn[m[31m;[m
      [01;34melsif[m Args_List'Last [31m=[m [35m2[m [01;34mthen[m
	 [01;34mif[m [01;30mArgs_List[m[31m([m[35m2[m[31m)[m [31m/=[m [01;34mnull[m [01;34mand[m [01;34mthen[m [01;30mArgs_List[m[31m([m[35m2[m[31m).[m[01;34mall[m [31m/=[m [31m""[m [01;34mthen[m
	    [01;34mif[m [01;30mArgs_List[m[31m([m[35m2[m[31m).[m[01;34mall[m [31m=[m [31m"-"[m [01;34mthen[m
	       [01;34mif[m Old_Pwd'Length [31m/=[m [35m0[m [01;34mthen[m		  
		  
		  buffer [31m:=[m [01;34mnew[m [32mString[m ' [31m([mGet_Current_Dir[31m);[m
		  [01;30mChange_Dir[m[31m([mOld_Pwd[31m.[m[01;34mall[m[31m);[m
		  [01;30mFree[m[31m([mOld_Pwd[31m);[m
		  Old_Pwd [31m:=[m [01;34mnew[m [32mString[m ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
		  [01;30mFree[m[31m([mBuffer[31m);[m
		  
	       [01;34melse[m
		  
		  [01;30mPut_Line[m[31m([m[31m"no old_pwd."[m[31m);[m
	       [01;34mend[m [01;34mif[m[31m;[m
	    [01;34melse[m
	       [01;30mFree[m[31m([mOld_Pwd[31m);[m
	       Old_Pwd [31m:=[m [01;34mnew[m [32mString[m ' [31m([mGet_Current_Dir[31m);[m	       
	       [01;30mChange_Dir[m[31m([m[01;30mArgs_List[m[31m([m[35m2[m[31m).[m[01;34mall[m[31m);[m
	       
	    [01;34mend[m [01;34mif[m[31m;[m

	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34melse[m	 
	 [01;34mcase[m Target_Os [01;34mis[m
	    [01;34mwhen[m Windows [31m=>[m
	       [01;30mFree[m[31m([mOld_Pwd[31m);[m
	       Old_Pwd [31m:=[m [01;34mnew[m [32mString[m ' [31m([mGet_Current_Dir[31m);[m
	       [01;30mChange_Dir[m[31m([m[01;30mGetenv[m[31m([m[31m"HOMEPATH"[m[31m).[m[01;34mall[m[31m);[m	       
	       
	    [01;34mwhen[m Other_OS [31m=>[m
	       [01;30mFree[m[31m([mOld_Pwd[31m);[m
	       Old_Pwd [31m:=[m [01;34mnew[m [32mString[m ' [31m([mGet_Current_Dir[31m);[m
	       [01;30mChange_Dir[m[31m([m[01;30mGetenv[m[31m([m[31m"HOME"[m[31m).[m[01;34mall[m[31m);[m
	       
	 [01;34mend[m [01;34mcase[m[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m   

   [01;34mend[m Change_Directory[31m;[m
   
   [01;34muse[m Gnat[31m.[mRegexp[31m;[m   
   
   [01;34mprocedure[m [01;30mFind_At_Path[m [31m([mPath [31m:[m [01;34min[m [32mString[m[31m;[m
			   Pattern [31m:[m [01;34min[m [32mString[m[31m;[m
			   Result [31m:[m [01;34min[m Wide_Result_Access[31m)[m [01;34mis[m
      
      Reg_Exp [31m:[m [01;34mconstant[m Gnat[31m.[mRegexp[31m.[mRegexp [31m:=[m Gnat[31m.[mRegexp[31m.[m[01;30mCompile[m[31m([mPattern[31m,[m True[31m,[m True[31m);[m
      
      [01;34mprocedure[m [01;30mFind_Action[m [31m([mItem  [31m:[m        [32mString[m[31m;[m
			     Index [31m:[m        Positive[31m;[m
			     Quit  [31m:[m [01;34min[m [01;34mout[m [32mBoolean[m[31m)[m [01;34mis[m	 
	 Buffer [31m:[m U_array_Access[31m;[m
	 
	 
	 
      [01;34mbegin[m
	 [01;34mif[m [01;30mMatch[m[31m([mItem[31m,[m Reg_Exp[31m)[m [01;34mthen[m
	    Buffer [31m:=[m [01;34mnew[m [01;30mu_Array[m[31m([m[35m1[m[31m..([mResult[31m.[mWlines'Length[31m)+[m[35m1[m[31m);[m
	    [01;30mBuffer[m[31m([mBuffer[31m'First..Buffer'[mLast[31m-[m[35m1[m[31m)[m [31m:=[m Result[31m.[mWlines[31m.[m[01;34mall[m[31m;[m
	    [01;30mBuffer[m[31m([mBuffer'Last[31m)[m [31m:=[m [31m(+([mHandling[31m.[m[01;30mTo_Wide_String[m[31m([mItem[31m)));[m
	    [01;30mU_Array_free[m[31m([mResult[31m.[mWlines[31m);[m
	    Result[31m.[mWlines [31m:=[m [01;34mnew[m U_Array ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
	    Quit [31m:=[m False[31m;[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m Find_Action[31m;[m
      
      [01;34mprocedure[m Wildcard_Iterator [01;34mis[m
	 [01;34mnew[m GNAT[31m.[mDirectory_Operations[31m.[mIteration[31m.[m[01;30mWildcard_Iterator[m[31m([mFind_Action[31m);[m
      
   [01;34mbegin[m      
      [01;30mWildcard_Iterator[m[31m([mPath[31m);[m
   [01;34mend[m Find_At_Path[31m;[m
   
   [01;34mprocedure[m [01;30mCompletion[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[m
			 Full_Command [31m:[m [01;34mout[m Wide_String_Access[31m;[m
			 Result [31m:[m [01;34mout[m Wide_Result_Access[31m)[m [01;34mis[m
      
      Top [31m:[m [01;34mconstant[m Natural [31m:=[m Fixed[31m.[m[01;30mIndex_Non_Blank[m[31m([mLine[31m);[m
      Bot [31m:[m [01;34mconstant[m Natural [31m:=[m Fixed[31m.[m[01;30mIndex_Non_Blank[m[31m([mLine[31m,[m Backward[31m);[m
      
      Blank_Index [31m:[m [01;34mconstant[m Natural [31m:=[m Fixed[31m.[m[01;30mIndex[m[31m([m[01;30mLine[m[31m([mTop[31m..[mBot[31m),[m [31m" "[m[31m,[m Backward[31m);[m
      
      
      
   [01;34mbegin[m
      Result [31m:=[m [01;34mnew[m spawn_Result_Record[31m;[m
      Result[31m.[mWlines [31m:=[m [01;34mnew[m [01;30mU_Array[m [31m([m[35m1[m[31m..[m[35m1[m[31m);[m
      
      [01;34mif[m Blank_Index [31m<[m Bot [01;34mthen[m
	 [01;34mdeclare[m
	    Path [31m:[m [01;34mconstant[m [32mString[m [31m:=[m [01;30mLine[m[31m([mBlank_Index[31m+[m[35m1[m[31m..[mBot[31m);[m
	    Directory_Index [31m:[m [01;34mconstant[m Natural [31m:=[m 
	      Fixed[31m.[m[01;30mIndex[m[31m([mPath[31m,[m [31m"/"[m[31m,[m Backward[31m);[m
	 [01;34mbegin[m
	    [01;34mif[m Directory_Index [31m>[m [35m0[m [01;34mand[m 
	      Directory_Index [31m<[m Path'Last [01;34mthen[m
	       [01;34mdeclare[m
		  Directory [31m:[m [01;34mconstant[m [32mString[m [31m:=[m 
		    [01;30mPath[m[31m([mPath'First[31m..[mDirectory_Index[31m);[m
	       [01;34mbegin[m
		  [01;30mFind_At_Path[m[31m([mDirectory[31m,[m
			       [31m"*"[m [31m&[m [01;30mPath[m[31m([mDirectory_Index[31m+[m[35m1[m[31m..[mPath'Last[31m)[m [31m&[m [31m"*"[m[31m,[m
			       Result[31m);[m
	       [01;34mend[m[31m;[m
	    [01;34melsif[m Directory_Index [31m>[m [35m0[m [01;34mthen[m
	       [01;34mdeclare[m
		  Directory [31m:[m [01;34mconstant[m [32mString[m [31m:=[m 
		    [01;30mPath[m[31m([mPath'First[31m..[mDirectory_Index[31m);[m
	       [01;34mbegin[m

		  [01;30mFind_At_Path[m[31m([mDirectory[31m,[m 
			       [31m"*"[m[31m,[m
			       Result[31m);[m
	       [01;34mend[m[31m;[m
	    [01;34melse[m
	       [01;34mbegin[m

		  [01;30mFind_At_Path[m[31m([mGet_Current_Dir[31m,[m
			       [31m"*"[m [31m&[m Path [31m&[m [31m"*"[m[31m,[m
			       Result[31m);[m
	       [01;34mend[m[31m;[m
	    [01;34mend[m [01;34mif[m[31m;[m
	 [01;34mend[m[31m;[m
      [01;34melse[m

	 
	 [01;34mbegin[m
	    
	    [01;30mFind_At_Path[m[31m([mGet_Current_Dir[31m,[m
			 [31m"*"[m[31m,[m
			 Result[31m);[m
	 [01;34mend[m[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      
      [01;34mif[m Result[31m.[mWlines'Length [31m=[m [35m2[m [01;34mthen[m
	 Full_Command [31m:=[m [01;34mnew[m [32mWide_String[m [31m' (Handling.To_Wide_String(Line(Line'[mFirst[31m..[mBlank_Index[31m))[m [31m&[m Handling[31m.[m[01;30mTo_Wide_String[m[31m([m[01;30mDelete_Local_Prefix[m[31m([mHandling[31m.[m[01;30mTo_String[m[31m((-[mResult[31m.[m[01;30mWlines[m[31m([m[35m2[m[31m))))));[m
      [01;34mend[m [01;34mif[m[31m;[m
      

      
   [01;34mend[m Completion[31m;[m

   
   [01;34mfunction[m [01;30mInternal_Cmd_Value[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m Int_Cmd_Enum [01;34mis[m
      Cmd [31m:[m Int_Cmd_Enum  [31m:=[m None[31m;[m
      First_Space [31m:[m [01;34mconstant[m Natural [31m:=[m [01;30mIndex[m[31m([mLine[31m,[m [31m" "[m[31m);[m
   [01;34mbegin[m
      
      [01;34mif[m First_Space [31m/=[m [35m0[m [01;34mthen[m
	 [01;34mbegin[m
	    
	    Cmd [31m:=[m Int_Cmd_Enum[31m'Value(Line(Line'[mFirst[31m..[mFirst_Space[31m-[m[35m1[m[31m));[m
	    
	 [01;34mexception[m
	    [01;34mwhen[m [01;34mothers[m [31m=>[m
	       Cmd [31m:=[m None[31m;[m
	 [01;34mend[m[31m;[m
	 
      [01;34melsif[m [01;30mIndex_Non_Blank[m[31m([mLine[31m)[m [31m/=[m [35m0[m [01;34mthen[m
	 [01;34mbegin[m
	    Cmd [31m:=[m Int_Cmd_Enum'[01;30mValue[m[31m([m[01;30mLine[m[31m([m[01;30mIndex_Non_Blank[m[31m([mLine[31m)..[m[01;30mIndex_Non_Blank[m[31m([mLine[31m,[m Backward[31m)));[m
	 [01;34mexception[m
	    [01;34mwhen[m [01;34mothers[m [31m=>[m
	       Cmd [31m:=[m none[31m;[m
	 [01;34mend[m[31m;[m
	 
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mreturn[m Cmd[31m;[m
   [01;34mend[m Internal_Cmd_Value[31m;[m
     
   
   [01;34mfunction[m [01;30mCommand_Name[m [31m([mLine [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m [32mString[m [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m Line'Length [31m=[m [35m0[m [01;34mthen[m
	 [01;34mreturn[m [31m""[m[31m;[m
      [01;34melsif[m [01;30mIndex_Non_Blank[m[31m([mLine[31m)[m [31m=[m [35m0[m [01;34mthen[m
	 [01;34mreturn[m [31m""[m[31m;[m
      [01;34melsif[m [31m([m[01;30mIndex[m[31m([mLine[31m,[m [31m" "[m[31m)[m [31m>[m [01;30mIndex_Non_Blank[m[31m([mLine[31m))[m [01;34mthen[m
	[01;34mreturn[m [01;30mLine[m[31m([m[01;30mIndex_Non_Blank[m[31m([mLine[31m)..[m[01;30mIndex[m[31m([mLine[31m,[m [31m" "[m[31m)-[m[35m1[m[31m);[m
      [01;34melse[m
	 [01;34mreturn[m Line[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Command_Name[31m;[m
   
   [01;34mprocedure[m [01;30mAdd_Line[m [31m([mSet [31m:[m [01;34min[m [01;34mout[m Wide_String_Set[31m;[m
		       Last [31m:[m [01;34min[m [01;34mout[m Line_Index_Range[31m;[m
		       Line [31m:[m [01;34min[m [32mWide_String[m[31m)[m [01;34mis[m           
   [01;34mbegin[m
      Last [31m:=[m Set[31m.[mLine_Last[31m;[m
      [01;34mif[m Last [31m=[m Set[31m.[mLines'Last [01;34mthen[m
	 [01;30mWide_Free[m [31m([mSet[31m.[m[01;30mLines[m [31m([m [35m1[m [31m)[m [31m);[m
	 [01;34mfor[m Line [01;34min[m [35m1[m[31m..[mLast [31m-[m [35m1[m [01;34mloop[m
	    Set[31m.[m[01;30mLines[m[31m([mLine[31m)[m [31m:=[m Set[31m.[m[01;30mLines[m [31m([mLine [31m+[m [35m1[m[31m);[m
	 [01;34mend[m [01;34mloop[m[31m;[m
	 Set[31m.[m[01;30mlines[m[31m([mLast[31m)[m [31m:=[m [01;34mnew[m [32mWide_String[m ' [31m([mLine[31m);[m
      [01;34melse[m
	 Set[31m.[m[01;30mLines[m[31m([mLast[31m+[m[35m1[m[31m)[m [31m:=[m [01;34mnew[m [32mWide_String[m ' [31m([mLine[31m);[m
	 Last [31m:=[m Last [31m+[m [35m1[m[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      Set[31m.[mLine_Last [31m:=[m Last[31m;[m
   [01;34mend[m Add_Line[31m;[m
   
   
   [01;34mprocedure[m [01;30mSet_Free[m[31m([mSet [31m:[m [01;34min[m [01;34mout[m Wide_String_Set[31m)[m [01;34mis[m
   [01;34mbegin[m
      [01;34mfor[m Iter [01;34min[m Set[31m.[mLines ' [01;34mrange[m [01;34mloop[m
	 [01;30mWide_Free[m[31m([mSet[31m.[m[01;30mLines[m[31m([mIter[31m));[m
      [01;34mend[m [01;34mloop[m[31m;[m
      Set[31m.[mLine_Last [31m:=[m [35m0[m[31m;[m
   [01;34mend[m Set_Free[31m;[m


[01;34mend[m Ai[31m.[mShell [31m;[m 
