[31m-- Skywalker is another attempt of A. i. written with Ada.[m
[31m-- Skywalker 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-11-17 09:31:40 ; [m
[31m-- Version := 0.2.0r ; [m
[01;34mwith[m Gnat[31m.[mOs_Lib[31m;[m
[01;34muse[m Gnat[31m.[mOs_Lib[31m;[m
[01;34mwith[m Ada[31m.[mDirect_Io[31m;[m
[01;34mpackage[m [01;34mbody[m Sky[31m.[mStocks_manager [01;34mis[m
   [01;34mprocedure[m [01;30mStock_Add[m [31m([mTo [31m:[m [01;34min[m [01;34mout[m Stocks_Manager[31m;[m
			Stock [31m:[m [01;34min[m Stock_Record[31m)[m [01;34mis[m
      [31m-- Spec_Error is raised if no space left.[m
   [01;34mbegin[m
      [01;34mif[m To[31m.[mStock_Last [31m=[m Stock_Num_Max [01;34mthen[m
	 [01;34mraise[m Spec_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      To[31m.[m[01;30mStocks[m[31m([mTo[31m.[mStock_Last [31m+[m [35m1[m[31m)[m [31m:=[m Stock[31m;[m
      To[31m.[mStock_Last [31m:=[m To[31m.[mStock_Last [31m+[m [35m1[m[31m;[m
   [01;34mend[m Stock_Add[31m;[m
   
   [01;34mprocedure[m [01;30mUpdate_Stock[m[31m([mTo[31m:[m [01;34min[m [01;34mout[m Stocks_Manager[31m;[m
			  Stock [31m:[m [01;34min[m Stock_Record[31m)[m [01;34mis[m
      [31m-- If the stock more Qt is over Quantity_Range'last, Spec_error is raised.[m
      Done [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
   [01;34mbegin[m
      
      [01;34mif[m To[31m.[mStock_Last [31m=[m [35m0[m [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mTo[31m.[mStock_Last [01;34mloop[m
	 [01;34mif[m To[31m.[m[01;30mStocks[m[31m([mIter[31m).[mName [31m=[m Stock[31m.[mName [01;34mthen[m
	    
	    [01;34mif[m To[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m+[m Stock[31m.[mQuantity [31m<=[m Quantity_Range'Last [01;34mthen[m
	       To[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m:=[m 
		 To[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m+[m Stock[31m.[mQuantity[31m;[m
	       
	       To[31m.[m[01;30mStocks[m[31m([mIter[31m).[mUnit_Ht [31m:=[m Stock[31m.[mUnit_Ht[31m;[m
	       To[31m.[m[01;30mStocks[m[31m([mIter[31m).[mTVA_Rate [31m:=[mStock[31m.[mTVA_Rate[31m;[m
	       
	       Done [31m:=[m True[31m;[m
	       [01;34mexit[m[31m;[m
	    [01;34melse[m
	       
	       [01;34mraise[m Spec_Error[31m;[m
	    [01;34mend[m [01;34mif[m[31m;[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;34mif[m [01;34mnot[m Done [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m

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

   [01;34mend[m Update_Stock[31m;[m
   [01;34mprocedure[m [01;30mStock_Remove[m [31m([mFrom [31m:[m [01;34min[m [01;34mout[m Stocks_Manager[31m;[m
			   Stock_Num [31m:[m [01;34min[m Stock_Num_Range[31m)[m [01;34mis[m
      [31m-- Not_An_Stock is raised when not Stock_Num is not an stock.[m
      Done [31m:[m [32mBoolean[m [31m:=[m False[31m;[m      
   [01;34mbegin[m
      [01;34mif[m From[31m.[mStock_Last [31m=[m [35m0[m [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mFrom[31m.[mStock_Last [01;34mloop[m
	 [01;34mif[m From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mNum [31m=[m Stock_Num [01;34mthen[m
	    [01;34mfor[m Last [01;34min[m Iter[31m..[mFrom[31m.[mStock_Last[31m-[m[35m1[m [01;34mloop[m
	       From[31m.[m[01;30mStocks[m[31m([mLast[31m)[m [31m:=[m From[31m.[m[01;30mStocks[m[31m([mLast[31m+[m[35m1[m[31m);[m
	    [01;34mend[m [01;34mloop[m[31m;[m
	    From[31m.[m[01;30mStocks[m[31m([mFrom[31m.[mStock_Last[31m)[m [31m:=[m Null_Stock[31m;[m
	    From[31m.[mStock_Last [31m:=[m From[31m.[mStock_Last [31m-[m [35m1[m[31m;[m
	    Done [31m:=[m True[31m;[m
	    [01;34mexit[m[31m;[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;34mif[m [01;34mnot[m Done [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Stock_Remove[31m;[m
   
   [01;34mprocedure[m [01;30mAdd_To_Stock[m[31m([mFrom [31m:[m [01;34min[m [01;34mout[m Stocks_Manager[31m;[m
			  Stock_Num [31m:[m [01;34min[m Stock_Num_Range[31m;[m
			  Qt  [31m:[m [01;34min[m Quantity_Range[31m)[m [01;34mis[m
      Done [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
   [01;34mbegin[m
      [01;34mif[m From[31m.[mStock_Last [31m=[m [35m0[m [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mFrom[31m.[mStock_Last [01;34mloop[m
	 [01;34mif[m From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mNum [31m=[m Stock_Num [01;34mthen[m
	    [01;34mif[m From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m+[m Qt [31m<=[m Quantity_Range'Last [01;34mthen[m
	       From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m:=[m 
		 From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m+[m Qt[31m;[m
	       Done [31m:=[m True[31m;[m
	       [01;34mexit[m[31m;[m
	    [01;34melse[m
	       [01;34mraise[m Spec_Error[31m;[m
	    [01;34mend[m [01;34mif[m[31m;[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;34mif[m [01;34mnot[m Done [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Add_To_Stock[31m;[m
   
   
   [01;34mprocedure[m [01;30mAdd_To_Stock[m[31m([mFrom [31m:[m [01;34min[m [01;34mout[m Stocks_Manager[31m;[m
			  Name [31m:[m [01;34min[m Wstring_32[31m;[m
			  Qt  [31m:[m [01;34min[m Quantity_Range[31m)[m [01;34mis[m
      [31m-- If the stock more Qt is over Quantity_Range'last, Spec_error is raised.[m
      Done [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
   [01;34mbegin[m
      [01;34mif[m From[31m.[mStock_Last [31m=[m [35m0[m [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mFrom[31m.[mStock_Last [01;34mloop[m
	 [01;34mif[m From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mName [31m=[m Name [01;34mthen[m
	    [01;34mif[m From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m+[m Qt [31m<=[m Quantity_Range'Last [01;34mthen[m
	       From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m:=[m 
		 From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m+[m Qt[31m;[m
	       Done [31m:=[m True[31m;[m
	       [01;34mexit[m[31m;[m
	    [01;34melse[m
	       [01;34mraise[m Spec_Error[31m;[m
	    [01;34mend[m [01;34mif[m[31m;[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;34mif[m [01;34mnot[m Done [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Add_To_Stock[31m;[m
   
   
   [01;34mprocedure[m [01;30mRemove_From_Stock[m[31m([mFrom [31m:[m [01;34min[m [01;34mout[m Stocks_Manager[31m;[m
			       Name [31m:[m [01;34min[m Wstring_32[31m;[m
			       Qt  [31m:[m [01;34min[m Quantity_Range[31m)[m [01;34mis[m
      Done [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
   [01;34mbegin[m
      [01;34mif[m From[31m.[mStock_Last [31m=[m [35m0[m [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mFrom[31m.[mStock_Last [01;34mloop[m
	 [01;34mif[m From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mName [31m=[m Name [01;34mthen[m
	    
	    [01;34mif[m From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m+[m Qt [31m>[m Quantity_Range'First [01;34mthen[m
	       From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m:=[m 
		 From[31m.[m[01;30mStocks[m[31m([mIter[31m).[mQuantity [31m-[m Qt[31m;[m
	       Done [31m:=[m True[31m;[m
	       [01;34mexit[m[31m;[m
	    [01;34melse[m
	       [01;34mraise[m Spec_Error[31m;[m
	    [01;34mend[m [01;34mif[m[31m;[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;34mif[m [01;34mnot[m Done [01;34mthen[m
	 [01;34mraise[m Not_An_Stock[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Remove_From_Stock[31m;[m
   
   [01;34mfunction[m [01;30mIn_Stocks[m [31m([mStocks [31m:[m [01;34min[m Stocks_Manager[31m;[m Description [31m:[m [01;34min[m Wstring_32[31m)[m [01;34mreturn[m [32mBoolean[m [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m Stocks[31m.[mStock_Last [31m=[m [35m0[m [01;34mthen[m
	 [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mfor[m Iter [01;34min[m [35m1[m[31m..[mStocks[31m.[mStock_Last [01;34mloop[m
	 [01;34mif[m Stocks[31m.[m[01;30mStocks[m[31m([mIter[31m).[mName [31m=[m Description [01;34mthen[m
	    [01;34mreturn[m True[31m;[m
	 [01;34mend[m [01;34mif[m[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;34mreturn[m False[31m;[m
   [01;34mend[m In_Stocks[31m;[m
   
   
   [01;34mpackage[m Stock_Io [01;34mis[m [01;34mnew[m Ada[31m.[m[01;30mDirect_Io[m[31m([mStock_Record[31m);[m
   [01;34muse[m Stock_Io[31m;[m
   
   [01;34mprocedure[m Stocks_Save [01;34mis[m
      File [31m:[m File_Type[31m;[m
   [01;34mbegin[m
      
      
      [01;34mif[m Hardware[31m.[mStock_Last [31m/=[m [35m0[m [01;34mthen[m
	 [01;30mCreate[m[31m([mFile[31m,[m Out_File[31m,[m Hard_Filename[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
	 [01;34mfor[m Stock [01;34min[m [35m1[m[31m..[mHardware[31m.[mStock_Last [01;34mloop[m
	    [01;30mWrite[m[31m([mFile[31m,[m Hardware[31m.[m[01;30mstocks[m[31m([mStock[31m));[m
	 [01;34mend[m [01;34mloop[m[31m;[m
	 [01;30mClose[m[31m([mFile[31m);[m
      [01;34mend[m [01;34mif[m[31m;[m
      
      
      
      [01;34mif[m Software[31m.[mStock_Last [31m/=[m [35m0[m [01;34mthen[m
	 [01;30mCreate[m[31m([mFile[31m,[m Out_File[31m,[m Soft_Filename[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
	 [01;34mfor[m Stock [01;34min[m [35m1[m[31m..[mSoftware[31m.[mStock_Last [01;34mloop[m
	    [01;30mWrite[m[31m([mFile[31m,[m Software[31m.[m[01;30mstocks[m[31m([mStock[31m));[m
	 [01;34mend[m [01;34mloop[m[31m;[m
	 [01;30mClose[m[31m([mFile[31m);[m
      [01;34mend[m [01;34mif[m[31m;[m
      
   [01;34mend[m Stocks_Save[31m;[m
   
   [01;34mprocedure[m Stocks_Restore [01;34mis[m
      File [31m:[m File_Type[31m;[m
      Index [31m:[m Natural [31m:=[m [35m0[m[31m;[m
   [01;34mbegin[m
      [01;34mif[m [01;30mIs_Regular_File[m[31m([mHard_Filename[31m)[m [01;34mthen[m
	 [01;30mOpen[m[31m([mFile[31m,[m In_File[31m,[m Hard_Filename[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
	 [01;34mwhile[m [01;34mnot[m [01;30mEnd_Of_File[m[31m([mFile[31m)[m [01;34mloop[m
	    [01;30mRead[m[31m([mFile[31m,[m hardware[31m.[m[01;30mStocks[m[31m([mIndex [31m+[m [35m1[m[31m));[m
	    Index [31m:=[m Index [31m+[m [35m1[m[31m;[m
	 [01;34mend[m [01;34mloop[m[31m;[m
	 Hardware[31m.[mStock_Last [31m:=[m Index[31m;[m
	 [01;30mClose[m[31m([mFile[31m);[m
      [01;34mend[m [01;34mif[m[31m;[m
      
      Index [31m:=[m [35m0[m[31m;[m
      [01;34mif[m [01;30mIs_Regular_File[m[31m([mSoft_Filename[31m)[m [01;34mthen[m
	 [01;30mOpen[m[31m([mFile[31m,[m In_File[31m,[m Soft_Filename[31m,[m Form [31m=>[m [31m"WCEM=8"[m[31m);[m
	 [01;34mwhile[m [01;34mnot[m [01;30mEnd_Of_File[m[31m([mFile[31m)[m [01;34mloop[m
	    [01;30mRead[m[31m([mFile[31m,[m Software[31m.[m[01;30mStocks[m[31m([mIndex [31m+[m [35m1[m[31m));[m
	 Index [31m:=[m Index [31m+[m [35m1[m[31m;[m
	 [01;34mend[m [01;34mloop[m[31m;[m
	 Software[31m.[mStock_Last [31m:=[m Index[31m;[m
	 [01;30mClose[m[31m([mFile[31m);[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m Stocks_Restore[31m;[m

   
[01;34mend[m Sky[31m.[mStocks_manager [31m;[m 
