[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-08 13:45:24 ; [m
[31m-- Version := 0.45.0a ; [m
[01;34mwith[m Ada[31m.[mWide_Text_Io[31m;[m
[01;34mpackage[m [01;34mbody[m M[31m.[mStrings [01;34mis[m
   [01;34mpackage[m W_Io [01;34mrenames[m Ada[31m.[mWide_Text_Io[31m;[m
   
   [01;34mprocedure[m [01;30mAdd_Line[m [31m([mSet [31m:[m [01;34min[m [01;34mout[m Wide_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_Set[31m)[m [01;34mis[m
   [01;34mbegin[m
      
      Set[31m.[mLine_Last [31m:=[m [35m0[m[31m;[m
      [01;34mfor[m Iter [01;34min[m Set[31m.[mLines ' [01;34mrange[m [01;34mloop[m
	 [01;34mif[m Set[31m.[m[01;30mLines[m[31m([mIter[31m)[m [31m/=[m [01;34mnull[m [01;34mthen[m
	    [01;30mWide_Free[m[31m([mSet[31m.[m[01;30mLines[m[31m([mIter[31m));[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      
   [01;34mend[m Set_Free[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

      [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;34mprocedure[m [01;30mLoad_File[m [31m([mSet [31m:[m [01;34min[m [01;34mout[m Wide_String_Set[31m;[m Name [31m:[m [01;34min[m [32mString[m[31m;[m Last [31m:[m [01;34mout[m Line_Index_Range[31m)[m [01;34mis[m
      
      File [31m:[m W_Io[31m.[mFile_Type[31m;[m
      
   [01;34mbegin[m
      W_Io[31m.[m[01;30mOpen[m[31m([mFile[31m,[m W_Io[31m.[mIn_File[31m,[m Name[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
      Last [31m:=[m [35m0[m[31m;[m
      
      [01;34mwhile[m [01;34mnot[m W_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:=[mW_Io[31m.[m[01;30mGet_Line[m[31m([mFile[31m);[m
   	 [01;34mbegin[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[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      Set[31m.[mLine_Last [31m:=[m Last[31m;[m
      W_Io[31m.[m[01;30mClose[m[31m([mFile[31m);[m
   [01;34mend[m Load_File[31m;[m
   [01;34mprocedure[m [01;30mSave_File[m[31m([mFilename [31m:[m [01;34min[m [32mstring[m[31m;[m Lines_Table [31m:[m [01;34min[m Wide_String_Set[31m)[m [01;34mis[m
   [01;34mbegin[m
      [31m-- save buffer.[m
      [01;34mdeclare[m
	 File [31m:[m W_Io[31m.[mFile_Type[31m;[m
      [01;34mbegin[m

	 W_Io[31m.[m[01;30mCreate[m[31m([mFile[31m,[m W_Io[31m.[mOut_File[31m,[m Filename[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
	 [01;34mfor[m Line_Iter [01;34min[m [35m1[m[31m..[mLines_Table[31m.[mLine_Last [01;34mloop[m
	    [01;34mif[m Lines_Table[31m.[m[01;30mLines[m[31m([mLine_Iter[31m)[m [31m/=[m [01;34mnull[m [01;34mthen[m

	       
	       [01;34mdeclare[m
		  
		  Line [31m:[m [01;34mconstant[m [32mWide_String[m [31m:=[m 
		    Lines_Table[31m.[m[01;30mLines[m[31m([mLine_Iter[31m).[m[01;34mall[m[31m;[m
		  
	       [01;34mbegin[m
		  
		  W_Io[31m.[m[01;30mPut_Line[m[31m([mFile[31m,[m Line[31m);[m
		  
	       [01;34mend[m[31m;[m
	       
	    [01;34mend[m [01;34mif[m[31m;[m
	 [01;34mend[m [01;34mloop[m[31m;[m

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

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

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