[31m-- main is main file of main project written with Ada.[m
[31m-- Main is Copyright (C) 2025 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 := 2026-10-11 17:08:47 ; [m
[31m-- Version := 0.48.0a ; [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 Ada[31m.[mStrings[31m.[mFixed[31m;[m
[01;34muse[m Ada[31m.[mStrings[31m;[m
[01;34muse[m Gnat[31m.[mDirectory_Operations[31m;[m
[01;34mwith[m Gnat[31m.[mCommand_Line[31m;[m
[01;34mwith[m Text_Io[31m;[m
[01;34muse[m Text_Io[31m;[m
[01;34mwith[m System[31m.[mOs_Constants[31m;[m
[01;34muse[m System[31m.[mOs_Constants[31m;[m
[01;34mwith[m Ada[31m.[mCharacters[31m.[mHandling[31m;[m
[01;34muse[m Ada[31m.[mCharacters[31m;[m
[01;34mwith[m Gnat[31m.[mOs_Lib[31m;[m
[01;34muse[m Gnat[31m;[m
[01;34mwith[m Ada[31m.[mWide_Text_Io[31m;[m
[01;34muse[m Ada[31m;[m
[01;34mwith[m System[31m.[mOs_Constants[31m;[m
[01;34muse[m System[31m.[mOs_Constants[31m;[m
[01;34mwith[m Gnat[31m.[mCommand_Line[31m;[m
[01;34muse[m Gnat[31m.[mCommand_Line[31m;[m
[01;34mwith[m Ada[31m.[mCharacters[31m.[mHandling[31m;[m
[01;34muse[m Ada[31m.[mCharacters[31m.[mHandling[31m;[m
[01;34mpackage[m [01;34mbody[m M[31m.[mTools [01;34mis[m
   [01;34mfunction[m [01;30mInteger_Image[m [31m([mValue [31m:[m [01;34min[m [32mInteger[m[31m)[m [01;34mreturn[m [32mString[m [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m Value [31m<[m [35m0[m [01;34mthen[m
	 [01;34mreturn[m 
	   [31m'-'[m [31m&[m [32mInteger[m'[01;30mImage[m[31m([mValue[31m)([mFixed[31m.[m[01;30mIndex_Non_Blank[m[31m([m[32mInteger[m'[01;30mImage[m[31m([mValue[31m)([m[35m2[m[31m..[m[32mInteger[m'[01;30mImage[m[31m([mValue[31m)[m'Last[31m))..[m[32mInteger[m'[01;30mImage[m[31m([mValue[31m)[m'Last[31m);[m
      [01;34melse[m
	 [01;34mreturn[m 
	   [32mInteger[m'[01;30mImage[m[31m([mValue[31m)([mFixed[31m.[m[01;30mIndex_Non_Blank[m[31m([m[32mInteger[m'[01;30mImage[m[31m([mValue[31m))..[m[32mInteger[m'[01;30mImage[m[31m([mValue[31m)[m'Last[31m);[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Integer_Image[31m;[m

   
   [01;34mfunction[m [01;30mSpawn[m[31m([mLine [31m:[m [01;34min[m [32mString[m[31m;[m Filename [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m M[31m.[mResults[31m.[mResult_Record [01;34mis[m
      Command [31m:[m Gnat[31m.[mCommand_Line[31m.[mCommand_Line[31m;[m
            
      Spawn_Result [31m:[m M[31m.[mResults[31m.[m[01;30mResult_Record[m[31m([mM[31m.[mResults[31m.[mSpawn[31m);[m
	        
      Buffer_args[31m,[m Arguments_List [31m:[m Os_Lib[31m.[mArgument_List_Access[31m;[m                  
      
      File [31m:[m Wide_Text_Io[31m.[mFile_Type[31m;[m      
      Deleted [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
      
      Exec_Path [31m:[m Os_Lib[31m.[mString_Access[31m;[m
      Initialized [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
      
      
      Home [31m:[m Os_Lib[31m.[mString_Access[31m;[m
      
      Out_Filename [31m:[m String_Access[31m;[m
      PID [31m:[m Process_Id[31m;[m
   [01;34mbegin[m
      [01;34mcase[m Target_Os [01;34mis[m
	 [01;34mwhen[m Windows [31m=>[m	    
	    Home [31m:=[m [01;30mGetenv[m[31m([m[31m"HOMEPATH"[m[31m);[m
	 [01;34mwhen[m [01;34mothers[m [31m=>[m
	    Home [31m:=[m [01;30mGetenv[m[31m([m[31m"HOME"[m[31m);[m
      [01;34mend[m [01;34mcase[m[31m;[m
[31m--      Out_Filename := new String ' (Home.all & Directory_Separator & Filename); [m
      Out_Filename [31m:=[m [01;34mnew[m [32mString[m ' [31m([mFilename[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 Arguments_List[31m,[m False[31m);[m
      
      [01;34mif[m [01;30mArguments_List[m[31m([m[35m1[m[31m)[m [31m/=[m [01;34mnull[m [01;34mand[m [01;34mthen[m [01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m [31m/=[m [31m""[m [01;34mthen[m
         
         
         [01;34mif[m Arguments_List'length [31m>[m [35m1[m [01;34mthen[m
            
            Buffer_Args [31m:=[m [01;34mnew[m [01;30mArgument_List[m[31m([m[35m1[m[31m..[mArguments_List'length [31m-[m [35m1[m[31m);[m
            
            [01;34mfor[m I [01;34min[m [35m1[m[31m..[mArguments_List'length [31m-[m [35m1[m [01;34mloop[m
	       
               [01;30mBuffer_Args[m[31m([mI[31m)[m [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[01;30mNormalize_Quoted_argument[m[31m([m[01;30mArguments_List[m[31m([mI[31m+[m[35m1[m[31m).[m[01;34mall[m[31m));[m
	       
            [01;34mend[m [01;34mloop[m[31m;[m            
            
            Spawn_Result [31m:=[m [31m([mName         [31m=>[m M[31m.[mResults[31m.[mSpawn[31m,[m
			     Wlines       [31m=>[m [01;34mnull[m[31m,[m
			     Count        [31m=>[m [35m0[m[31m,[m
			     Initialized  [31m=>[m False[31m,[m
                             Process_Id   [31m=>[m Invalid_Pid[31m,[m			  
                             Program_Name [31m=>[m M[31m.[mResults[31m.[m[31m"+"[m[31m([m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)),[m
                             Args          [31m=>[m Buffer_Args[31m,[m
                             Output_File  [31m=>[m M[31m.[mResults[31m.[m[31m"+"[m[31m([m[01;30mTo_Wide_String[m[31m([mOut_Filename[31m.[m[01;34mall[m[31m)),[m
                             Success      [31m=>[m False[31m,[m
                             Return_Code  [31m=>[m [35m0[m[31m,[m
                             Err_To_Out   [31m=>[m True
                             
                            [31m);[m
            
            
            
            
         [01;34melse[m
            
            
            Spawn_Result [31m:=[m [31m([mName         [31m=>[m M[31m.[mResults[31m.[mSpawn[31m,[m
			     Wlines       [31m=>[m [01;34mnull[m[31m,[m
			     Count        [31m=>[m [35m0[m[31m,[m
			     Initialized  [31m=>[m False[31m,[m
                             Process_Id   [31m=>[m Invalid_Pid[31m,[m                             
                             Program_Name [31m=>[m M[31m.[mResults[31m.[m[31m"+"[m[31m([m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)),[m
                             Args          [31m=>[m [01;34mnew[m Argument_List  ' [31m([m[35m1[m[31m..[m[35m0[m [31m=>[m [01;34mnew[m [32mString[m ' [31m([m[31m""[m [31m&[m [32mCharacter[m'[01;30mVal[m[31m([m[35m0[m[31m))),[m
                             Output_File  [31m=>[m M[31m.[mResults[31m.[m[31m"+"[m[31m([m[01;30mTo_Wide_String[m[31m([mOut_Filename[31m.[m[01;34mall[m[31m)),[m
                             Success      [31m=>[m False[31m,[m
                             Return_Code  [31m=>[m [35m0[m[31m,[m
                             Err_To_Out   [31m=>[m True
                               
                            [31m);[m
         [01;34mend[m [01;34mif[m[31m;[m
         
         
         
         [01;34mif[m [01;30mLocate_Exec_On_Path[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)[m [31m/=[m [01;34mnull[m [01;34mthen[m
            Exec_Path [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[01;30mLocate_Exec_On_Path[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m).[m[01;34mall[m[31m);[m         
                              
	    
            [01;34mif[m [01;30mIs_Executable_File[m[31m([mExec_Path[31m.[m[01;34mall[m[31m)[m [01;34mthen[m                                             
               
	       [31m--  Os_Lib.Spawn(Program_Name => Exec_Path.all,[m
	       [31m--  		    Args         => Spawn_Result.Args.all,                           [m
	       [31m--  		    Output_File  => To_String(-Spawn_Result.Output_File),[m
	       [31m--  		    Success      => Spawn_Result.Success,[m
	       [31m--  		    Return_Code  => Spawn_Result.Return_Code,[m
	       [31m--  		    Err_To_Out   => Spawn_Result.Err_To_out[m
	       [31m--  		   );[m

	       Spawn_Result[31m.[mProcess_id [31m:=[m Os_Lib[31m.[m[01;30mNon_Blocking_Spawn[m[31m([mProgram_Name [31m=>[m Exec_Path[31m.[m[01;34mall[m[31m,[m
								    Args         [31m=>[m Spawn_Result[31m.[mArgs[31m.[m[01;34mall[m[31m,[m                           
								    Output_File  [31m=>[m [01;30mTo_String[m[31m([mM[31m.[mResults[31m.[m[31m"-"[m[31m([mSpawn_Result[31m.[mOutput_File[31m)),[m
								    [31m--Success      => Spawn_Result.Success,[m
								    [31m--Return_Code  => Spawn_Result.Return_Code,[m
								    Err_To_Out   [31m=>[m Spawn_Result[31m.[mErr_To_out
								   [31m);[m
               
               [01;34mif[m Spawn_Result[31m.[mProcess_Id [31m/=[m Gnat[31m.[mOs_Lib[31m.[mInvalid_Pid [01;34mthen[m
                  
                  Gnat[31m.[mOs_Lib[31m.[m[01;30mWait_Process[m[31m([mSpawn_Result[31m.[mProcess_Id[31m,[m Spawn_Result[31m.[mSuccess[31m);[m
                  
               [01;34mend[m [01;34mif[m[31m;[m               

               Spawn_Result[31m.[mWlines [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[m[01;30mU_Array[m[31m([m[35m1[m[31m..[m[35m1[m[31m);[m
               
               Wide_Text_Io[31m.[m[01;30mOpen[m[31m([mFile[31m,[m Wide_Text_Io[31m.[mIn_File[31m,[m [01;30mTo_String[m[31m([mM[31m.[mResults[31m.[m[31m"-"[m[31m([mSpawn_Result[31m.[mOutput_File[31m)),[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m

               [01;34mwhile[m [01;34mnot[m Wide_Text_Io[31m.[m[01;30mEnd_Of_File[m[31m([mFile[31m)[m [01;34mloop[m

                  [01;34mdeclare[m
                     
                     Line [31m:[m [01;34mconstant[m [32mWide_String[m [31m:=[m Wide_Text_Io[31m.[m[01;30mGet_Line[m[31m([mFile[31m);[m
                     Buffer [31m:[m M[31m.[mResults[31m.[mU_Array_Access[31m;[m
                  [01;34mbegin[m
		     [01;34mif[m M[31m.[mResults[31m.[m[31m"/="[m[31m([mSpawn_Result[31m.[mWlines[31m,[m [01;34mnull[m[31m)[m [01;34mthen[m
			
			[01;34mif[m Initialized [01;34mthen[m
			   Buffer [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[m[01;30mU_Array[m[31m([m[35m1[m[31m..([mSpawn_Result[31m.[mWlines'Length[31m)+[m[35m1[m[31m);[m
			   [01;30mBuffer[m[31m([mBuffer'First[31m..[mBuffer'Last[31m-[m[35m1[m[31m)[m [31m:=[m Spawn_Result[31m.[mWlines[31m.[m[01;34mall[m[31m;[m
			   [01;30mBuffer[m[31m([mBuffer'Last[31m)[m [31m:=[m [31m([mM[31m.[mResults[31m.[m[31m"+"[m[31m([mLine[31m));[m
			[01;34melse[m
			   Buffer [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[m[01;30mU_array[m[31m([m[35m1[m[31m..[m[35m1[m[31m);[m
			   [01;30mBuffer[m[31m([mBuffer'Last[31m)[m [31m:=[m [31m([mM[31m.[mResults[31m.[m[31m"+"[m[31m([mLine[31m));[m
			   Initialized [31m:=[m True[31m;[m
			[01;34mend[m [01;34mif[m[31m;[m

                        

                     [01;34mend[m [01;34mif[m[31m;[m
                     M[31m.[mResults[31m.[m[01;30mU_Array_Free[m[31m([mSpawn_Result[31m.[mWlines[31m);[m
                     Spawn_Result[31m.[mWlines [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[mU_Array ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                     M[31m.[mResults[31m.[m[01;30mU_Array_Free[m[31m([mBuffer[31m);[m
                     
                  [01;34mend[m[31m;[m
                  
               [01;34mend[m [01;34mloop[m[31m;[m

               Wide_Text_Io[31m.[m[01;30mClose[m[31m([mFile[31m);[m

	       Spawn_Result[31m.[mSuccess [31m:=[m True[31m;[m
	       
               [31m--Delete_File (Name => To_String((-Spawn_Result.Output_File)), Success => deleted);[m
               Spawn_Result[31m.[mReturn_Code [31m:=[m Gnat[31m.[mOs_Lib[31m.[mErrno[31m;[m
               [31m--  if Spawn_Result.Success then      [m
               [31m--     Spawn_Result.Return_Code := Gnat.Os_Lib.Errno;[m
               [31m--  end if;[m
            [01;34melse[m
               Spawn_Result[31m.[mWlines [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[mU_Array ' [31m([m[35m1[m [31m=>[m [31m([mM[31m.[mResults[31m.[m[31m"+"[m[31m([m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)[m [31m&[m [31m" : command not found."[m[31m)));[m               
               Spawn_Result[31m.[mReturn_Code [31m:=[m [35m127[m[31m;[m
            [01;34mend[m [01;34mif[m[31m;[m
         [01;34melse[m            
            Spawn_Result[31m.[mWlines [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[mU_Array ' [31m([m[35m1[m [31m=>[m [31m([mM[31m.[mResults[31m.[m[31m"+"[m[31m([m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)[m [31m&[m [31m" : command not found."[m[31m)));[m               
            Spawn_Result[31m.[mReturn_Code [31m:=[m [35m127[m[31m;[m
         [01;34mend[m [01;34mif[m[31m;[m         
      [01;34melse[m         
         Spawn_Result[31m.[mWlines [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[mU_Array ' [31m([m[35m1[m [31m=>[m [31m([mM[31m.[mResults[31m.[m[31m"+"[m[31m([m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)[m [31m&[m [31m" : command not found."[m[31m)));[m                        
         Spawn_Result[31m.[mReturn_Code [31m:=[m [35m127[m[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      
      [01;34mreturn[m Spawn_Result[31m;[m
   [01;34mend[m Spawn[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'First[31m..[mFilename'First[31m+[m[35m1[m[31m)[m [31m=[m Local_Prefix [01;34mthen[m
            [01;34mreturn[m [01;30mFilename[m[31m([mFilename'First[31m+[m[35m2[m[31m..[mFilename'Last[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'First [31m..[m Arg'Last [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'First[31m..[mFilename'Last[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([mTmp[31m.[m[01;34mall[m [31m&[m [01;30mFilename[m[31m([mFilename'Last[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([mFull_Line[31m.[m[01;34mall[m [31m&[m [31m' '[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([mFull_Line[31m.[m[01;34mall[m [31m&[m [31m' '[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([mResult[31m.[m[01;34mall[m [31m&[m [31m' '[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([mResult[31m.[m[01;34mall[m [31m&[m [31m' '[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([mResult[31m.[m[01;34mall[m [31m&[m [31m' '[m [31m&[m [01;30mSearch_Regexp[m[31m([m[01;30mExpand_Path[m[31m([m[01;30mLine[m[31m([mStart[31m..[mLine'last[31m)),[m [01;30mLine[m[31m([mStart[31m..[mLine'Last[31m)));[m
               [01;34melse[m               
                  
                  Result [31m:=[m [01;34mnew[m [32mString[m ' [31m([mResult[31m.[m[01;34mall[m [31m&[m [31m' '[m [31m&[m [01;30mSearch_Regexp[m[31m([m[01;30mExpand_Path[m[31m([m[01;30mLine[m[31m([mStart[31m..[mLine'last[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([mResult[31m.[m[01;34mall[m [31m&[m [31m' '[m [31m&[m [01;30mSearch_Regexp[m[31m([m[01;30mExpand_Path[m[31m([m[01;30mLine[m[31m([mStart[31m..[mLine'Last[31m)),[m [01;30mLine[m[31m([mStart[31m..[mLine'Last[31m)));[m
            [01;34melse[m                  
               
               Result [31m:=[m [01;34mnew[m [32mString[m ' [31m([mResult[31m.[m[01;34mall[m [31m&[m [31m' '[m [31m&[m [01;30mSearch_Regexp[m[31m([m[01;30mExpand_Path[m[31m([m[01;30mLine[m[31m([mStart[31m..[mLine'last[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 M[31m.[mResults[31m.[mWide_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 M[31m.[mResults[31m.[mU_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 M[31m.[mResults[31m.[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'First[31m..[mBuffer'Last[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([mM[31m.[mResults[31m.[m[31m"+"[m[31m([mHandling[31m.[m[01;30mTo_Wide_String[m[31m([mItem[31m)));[m
	    M[31m.[mResults[31m.[m[01;30mU_Array_free[m[31m([mResult[31m.[mWlines[31m);[m
	    Result[31m.[mWlines [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[mU_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 M[31m.[mResults[31m.[mWide_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 M[31m.[mResults[31m.[mspawn_Result_Record[31m;[m
      Result[31m.[mWlines [31m:=[m [01;34mnew[m M[31m.[mResults[31m.[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([mHandling[31m.[m[01;30mTo_Wide_String[m[31m([m[01;30mLine[m[31m([mLine'First[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(([mM[31m.[mResults[31m.[m[31m"-"[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;34muse[m Adam[31m.[mResults[31m;[m
   
   [01;34mfunction[m [01;30mShell_Spawn[m[31m([mLine [31m:[m [01;34min[m [32mString[m[31m)[m [01;34mreturn[m Adam[31m.[mResults[31m.[mSpawn_Result_Type [01;34mis[m
      
      Command [31m:[m Gnat[31m.[mCommand_Line[31m.[mCommand_Line[31m;[m
            
      Spawn_Result [31m:[m Adam[31m.[mResults[31m.[mSpawn_Result_Type[31m;[m
	        
      Buffer_args[31m,[m Arguments_List [31m:[m Os_Lib[31m.[mArgument_List_Access[31m;[m                  
      
      File [31m:[m Wide_Text_Io[31m.[mFile_Type[31m;[m      
      
      Home [31m:[m [01;34mconstant[m Os_Lib[31m.[mString_Access [31m:=[m [01;30mGetenv[m[31m([m[31m"HOME"[m[31m);[m
      
      Out_Filename [31m:[m [01;34mconstant[m [32mString[m [31m:=[m Home[31m.[m[01;34mall[m [31m&[m [31m"/.out_file.txt"[m[31m;[m
      
      Deleted [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
      
      Exec_Path [31m:[m Os_Lib[31m.[mString_Access[31m;[m
      Initialized [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
      
      
      
      GnuShell_Filename [31m:[m [01;34mconstant[m [32mString[m [31m:=[m Home[31m.[m[01;34mall[m [31m&[m [31m"/.buffer.txt"[m[31m;[m
      
      GnuShell_File [31m:[m Wide_Text_Io[31m.[mFile_Type[31m;[m      
      
   [01;34mbegin[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 Arguments_List[31m,[m False[31m);[m
      
      [01;34mif[m [01;30mArguments_List[m[31m([m[35m1[m[31m)[m [31m/=[m [01;34mnull[m [01;34mand[m [01;34mthen[m [01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m [31m/=[m [31m""[m [01;34mthen[m         
         
         [01;34mif[m Arguments_List'length [31m>[m [35m1[m [01;34mthen[m
            
            Buffer_Args [31m:=[m [01;34mnew[m [01;30mArgument_List[m[31m([m[35m1[m[31m..[mArguments_List'length [31m-[m [35m1[m[31m);[m
            
            [01;34mfor[m I [01;34min[m [35m1[m[31m..[mArguments_List'length [31m-[m [35m1[m [01;34mloop[m
	       
               [01;30mBuffer_Args[m[31m([mI[31m)[m [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[01;30mNormalize_Quoted_argument[m[31m([m[01;30mArguments_List[m[31m([mI[31m+[m[35m1[m[31m).[m[01;34mall[m[31m));[m
	       
            [01;34mend[m [01;34mloop[m[31m;[m            
            
            Spawn_Result [31m:=[m [31m([m
                             Process_Id   [31m=>[m Invalid_Pid[31m,[m			  
                             Program_Name [31m=>[m [31m+[m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m3[m[31m).[m[01;34mall[m[31m),[m
                             Args          [31m=>[m Buffer_Args[31m,[m
                             Output_File  [31m=>[m [31m+[m[01;30mTo_Wide_String[m[31m([mOut_Filename[31m),[m
                             Success      [31m=>[m False[31m,[m
                             Return_Code  [31m=>[m [35m0[m[31m,[m
                             Err_To_Out   [31m=>[m True[31m,[m
                             File_content [31m=>[m [01;34mnull[m			    
                            [31m);[m
            
            
            
            
         [01;34melse[m
            
            
            Spawn_Result [31m:=[m [31m([m
                             Process_Id   [31m=>[m Invalid_Pid[31m,[m                             
                             Program_Name [31m=>[m [31m+[m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m3[m[31m).[m[01;34mall[m[31m),[m
                             Args          [31m=>[m [01;34mnew[m Argument_List  ' [31m([m[35m1[m[31m..[m[35m0[m [31m=>[m [01;34mnew[m [32mString[m ' [31m([m[31m""[m [31m&[m [32mCharacter[m'[01;30mVal[m[31m([m[35m0[m[31m))),[m
                             Output_File  [31m=>[m [31m+[m[01;30mTo_Wide_String[m[31m([mOut_Filename[31m),[m
                             Success      [31m=>[m False[31m,[m
                             Return_Code  [31m=>[m [35m0[m[31m,[m
                             Err_To_Out   [31m=>[m True[31m,[m
                             File_content [31m=>[m [01;34mnull[m
                               
                            [31m);[m
         [01;34mend[m [01;34mif[m[31m;[m
         
         
         
         [01;34mif[m [01;30mLocate_Exec_On_Path[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)[m [31m/=[m [01;34mnull[m [01;34mthen[m
            Exec_Path [31m:=[m [01;34mnew[m [32mString[m ' [31m([m[01;30mLocate_Exec_On_Path[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m).[m[01;34mall[m[31m);[m         
                              
            
            [01;34mif[m [01;30mIs_Executable_File[m[31m([mExec_Path[31m.[m[01;34mall[m[31m)[m [01;34mthen[m
                              
               
               
               Spawn_Result[31m.[mProcess_Id [31m:=[m 
                 [01;30mNon_Blocking_Spawn[m[31m([mProgram_Name [31m=>[m Exec_Path[31m.[m[01;34mall[m[31m,[m
                                    Args         [31m=>[m Spawn_Result[31m.[mArgs[31m.[m[01;34mall[m[31m,[m                           
                                    Output_File  [31m=>[m [01;30mTo_String[m[31m((-[mSpawn_Result[31m.[mOutput_File[31m)),[m
                                    Err_To_Out   [31m=>[m Spawn_Result[31m.[mErr_To_out
                                   [31m);[m
               
               [01;34mif[m Spawn_Result[31m.[mProcess_Id [31m/=[m Gnat[31m.[mOs_Lib[31m.[mInvalid_Pid [01;34mthen[m
                  
                  Gnat[31m.[mOs_Lib[31m.[m[01;30mWait_Process[m[31m([mSpawn_Result[31m.[mProcess_Id[31m,[m Spawn_Result[31m.[mSuccess[31m);[m
                  
               [01;34mend[m [01;34mif[m[31m;[m               
               
               Spawn_Result[31m.[mFile_Content [31m:=[m [01;34mnew[m [01;30mVariadic_Array[m[31m([m[35m1[m[31m..[m[35m1[m[31m);[m
               
	       
               Wide_Text_Io[31m.[m[01;30mOpen[m[31m([mFile[31m,[m Wide_Text_Io[31m.[mIn_File[31m,[m [01;30mTo_String[m[31m(-[mSpawn_Result[31m.[mOutput_File[31m),[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
	       
   	       [01;34mbegin[m
   	       	  Wide_Text_Io[31m.[m[01;30mOpen[m[31m([mGnushell_File[31m,[m Wide_Text_Io[31m.[mAppend_File[31m,[m Gnushell_Filename[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
   	       [01;34mexception[m
   	       	  [01;34mwhen[m [01;34mothers[m [31m=>[m
   	       	     Wide_Text_Io[31m.[m[01;30mCreate[m[31m([mGnushell_File[31m,[m Wide_Text_Io[31m.[mOut_File[31m,[m Gnushell_Filename[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
   	       [01;34mend[m[31m;[m
   	       [01;34mwhile[m [01;34mnot[m Wide_Text_Io[31m.[m[01;30mEnd_Of_File[m[31m([mFile[31m)[m [01;34mloop[m

                  [01;34mdeclare[m
                     
                     Line [31m:[m [01;34mconstant[m [32mWide_String[m [31m:=[m Wide_Text_Io[31m.[m[01;30mGet_Line[m[31m([mFile[31m);[m
                     
                  [01;34mbegin[m
                     Wide_Text_Io[31m.[m[01;30mPut_Line[m[31m([mGnushell_File[31m,[m Line[31m);[m
                     
                  [01;34mend[m[31m;[m
                  
               [01;34mend[m [01;34mloop[m[31m;[m
   	       Wide_Text_Io[31m.[m[01;30mClose[m[31m([mFile[31m);[m
   	       Wide_Text_Io[31m.[m[01;30mClose[m[31m([mGnushell_File[31m);[m
   	       Wide_Text_Io[31m.[m[01;30mOpen[m[31m([mGnushell_File[31m,[m Wide_Text_Io[31m.[mIn_File[31m,[m Gnushell_Filename[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
               [01;34mwhile[m [01;34mnot[m Wide_Text_Io[31m.[m[01;30mEnd_Of_File[m[31m([mGnushell_File[31m)[m [01;34mloop[m

                  [01;34mdeclare[m
                     
                     Line [31m:[m [01;34mconstant[m [32mWide_String[m [31m:=[m Wide_Text_Io[31m.[m[01;30mGet_Line[m[31m([mGnuShell_File[31m);[m
                     Buffer [31m:[m Variadic_Access[31m;[m
                  [01;34mbegin[m
   		     [01;34mif[m Spawn_Result[31m.[mFile_Content [31m/=[m [01;34mnull[m [01;34mthen[m
			
   			[01;34mif[m Initialized [01;34mthen[m
   			   Buffer [31m:=[m [01;34mnew[m [01;30mVariadic_Array[m[31m([m[35m1[m[31m..([mSpawn_Result[31m.[mFile_Content'Length[31m)+[m[35m1[m[31m);[m
   			   [01;30mBuffer[m[31m([mBuffer'First[31m..[mBuffer'Last[31m-[m[35m1[m[31m)[m [31m:=[m Spawn_Result[31m.[mFile_Content[31m.[m[01;34mall[m[31m;[m
   			   [01;30mBuffer[m[31m([mBuffer'Last[31m)[m [31m:=[m [31m(+([mLine[31m));[m
   			[01;34melse[m
   			   Buffer [31m:=[m [01;34mnew[m [01;30mVariadic_Array[m[31m([m[35m1[m[31m..[m[35m1[m[31m);[m
   			   [01;30mBuffer[m[31m([mBuffer'Last[31m)[m [31m:=[m [31m(+([mLine[31m));[m
   			   Initialized [31m:=[m True[31m;[m
   			[01;34mend[m [01;34mif[m[31m;[m
                        

                     [01;34mend[m [01;34mif[m[31m;[m
                     
                     Spawn_Result[31m.[mFile_Content [31m:=[m [01;34mnew[m Variadic_Array ' [31m([mBuffer[31m.[m[01;34mall[m[31m);[m
                     
                     
                  [01;34mend[m[31m;[m
                  
               [01;34mend[m [01;34mloop[m[31m;[m
               Wide_Text_Io[31m.[m[01;30mClose[m[31m([mGnushell_File[31m);[m	 
               
               [01;30mDelete_File[m [31m([mName [31m=>[m [01;30mTo_String[m[31m((-[mSpawn_Result[31m.[mOutput_File[31m)),[m Success [31m=>[m deleted[31m);[m
               [31m--Wide_Text_Io.Put_Line("Deleted file : "& (-Spawn_Result.Output_File));[m
               [01;34mif[m [01;34mnot[m Spawn_Result[31m.[mSuccess [01;34mthen[m      
                  Spawn_Result[31m.[mReturn_Code [31m:=[m Gnat[31m.[mOs_Lib[31m.[mErrno[31m;[m
               [01;34mend[m [01;34mif[m[31m;[m
            [01;34melse[m
               Spawn_Result[31m.[mFile_Content [31m:=[m [01;34mnew[m Variadic_Array ' [31m([m[35m1[m [31m=>[m [31m(+([m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)[m [31m&[m [31m" : command not found."[m[31m)));[m               
               Spawn_Result[31m.[mReturn_Code [31m:=[m [35m127[m[31m;[m
            [01;34mend[m [01;34mif[m[31m;[m
         [01;34melse[m            
            Spawn_Result[31m.[mFile_Content [31m:=[m [01;34mnew[m Variadic_Array ' [31m([m[35m1[m [31m=>[m [31m(+([m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)[m [31m&[m [31m" : command not found."[m[31m)));[m               
            Spawn_Result[31m.[mReturn_Code [31m:=[m [35m127[m[31m;[m
         [01;34mend[m [01;34mif[m[31m;[m         
      [01;34melse[m         
         Spawn_Result[31m.[mFile_Content [31m:=[m [01;34mnew[m Variadic_Array ' [31m([m[35m1[m [31m=>[m [31m(+([m[01;30mTo_Wide_String[m[31m([m[01;30mArguments_List[m[31m([m[35m1[m[31m).[m[01;34mall[m[31m)[m [31m&[m [31m" : command not found."[m[31m)));[m                        
         Spawn_Result[31m.[mReturn_Code [31m:=[m [35m127[m[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      
      [01;34mreturn[m Spawn_Result[31m;[m
   [01;34mend[m Shell_Spawn[31m;[m    

[01;34mend[m M[31m.[mTools [31m;[m 
