[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-12 09:45:23"[m
[31m-- Version := "0.0.8r"[m

[31m-- Code page of this file : Windows west Europe[m
[31m-- Tabulation : 3[m
[31m-- Contact : les-ziboux@rasama.org[m

[01;34mwith[m Ada[31m.[mWide_Text_Io[31m;[m

[01;34mpackage[m [01;34mbody[m Sky[31m.[mAnsi[31m.[mWindows [01;34mis[m
   [01;34mpackage[m W_Io [01;34mrenames[m Ada[31m.[mWide_Text_Io[31m;[m
   
   [01;34mfunction[m [01;30mReal_Length[m [31m([mLine [31m:[m [01;34min[m [32mWide_String[m[31m)[m [01;34mreturn[m Natural [01;34mis[m
      Count [31m:[m Natural [31m:=[m [35m0[m[31m;[m
      In_Escape [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
      Terminated [31m:[m [32mBoolean[m [31m:=[m False[31m;[m
   [01;34mbegin[m
      [01;34mfor[m I [01;34min[m Line'[01;34mRange[m [01;34mloop[m
	 [01;34mdeclare[m
	    Char [31m:[m [01;34mconstant[m Wide_Character [31m:=[m [01;30mLine[m[31m([mI[31m);[m
	 [01;34mbegin[m
	    
	    [01;34mif[m In_Escape [01;34mthen[m
	       [01;34mcase[m Char [01;34mis[m
		  [01;34mwhen[m [31m'm'[m [31m=>[m		  
		     In_Escape [31m:=[m false[31m;[m	       
		  [01;34mwhen[m [01;34mothers[m [31m=>[m
		     [01;34mnull[m[31m;[m
	       [01;34mend[m [01;34mcase[m[31m;[m
	    [01;34melse[m
	       [01;34mcase[m Char [01;34mis[m
		  [01;34mwhen[m Wide_Character'[01;30mVal[m[31m([m[35m27[m[31m)[m [31m=>[m
		     In_Escape [31m:=[m True[31m;[m
		     
		  [01;34mwhen[m Wide_Character'[01;30mVal[m[31m([m[35m9[m[31m)[m [31m=>[m
		     
		     Count [31m:=[m Count [31m+[m [35m4[m[31m;[m
		     
		  [01;34mwhen[m [01;34mothers[m [31m=>[m
		     
		     Count [31m:=[m Count [31m+[m [35m1[m[31m;[m		     

	       [01;34mend[m [01;34mcase[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;34mreturn[m Count[31m;[m
   [01;34mend[m Real_Length[31m;[m
   
   
   [01;34mprocedure[m Clear_Screen [01;34mis[m
   [01;34mbegin[m      
      [31m--Ansi_Console.Clear_Screen;                        [m
      [01;34mnull[m[31m;[m
   [01;34mend[m Clear_Screen[31m;[m
      
   
   [01;34mprocedure[m Initialize [01;34mis[m
   [01;34mbegin[m
      [31m-- Initialisation[m
      [01;30mSet_Screen_Mode[m [31m([mColor_Text_Mode_80x25[31m);[m
      Disable_Line_Wrapping[31m;[m [31m-- Pour éviter les mauvaises surprises d'affichage.[m
      [01;30mSet_Background_Color[m [31m([mBlack[31m);[m [31m-- La couleur la plus supportable pour un fond.[m
      [01;30mSet_Text_Attributes[m [31m([mDefault_Text_Attributes[31m);[m [31m--(Bold_Text); -- Texte en couleur claire.[m
      Clear_Screen[31m;[m [31m-- Évidement...[m
   [01;34mend[m Initialize[31m;[m

   [01;34mprocedure[m Leave_And_Restore_Defaults [01;34mis[m
   [01;34mbegin[m
      [31m-- Avant de quitter, on restitue l'environnement[m
      Enable_Line_Wrapping[31m;[m [31m-- En condition normal, toujours[m
      [01;30mSet_Background_Color[m [31m([mBlack[31m);[m [31m-- Couleur normal la plus courante[m
      [01;30mSet_Text_Color[m [31m([mWhite[31m);[m [31m-- Couleur normal la plus courante[m
      [01;30mSet_Text_Attributes[m [31m([mDefault_Text_Attributes[31m);[m
      Clear_Screen[31m;[m [31m-- Si on effaçais pas, le reste d'écran défilerait : pas joli.[m
		    [31m-- On ne peut pas restaurer le mode d'écran, car on n'a aucun moyen de[m
		    [31m-- connaître le mode graphique qui était actif au démarrage.[m
   [01;34mend[m Leave_And_Restore_Defaults[31m;[m
   
   
   [31m-- Dessine un fond d'espace de travail. Le rectangle défini par[m
   [31m-- les coordonnées et les dimensions, est rempli avec un caractère[m
   [31m-- spécial.   [m
   [01;34mprocedure[m [01;30mDraw_Desktop_Background[m [31m([m
				      L      [31m:[m [01;34min[m Line_Type[31m;[m
				      C      [31m:[m [01;34min[m Column_Type[31m;[m
				      H      [31m:[m [01;34min[m Height_Type[31m;[m
				      W      [31m:[m [01;34min[m Width_Type[31m;[m
				      Color  [31m:[m [01;34min[m Color_Type[31m)[m [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Screen[m [31m([mL[31m,[m C[31m,[m H[31m,[m W[31m)[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mfor[m j [01;34min[m [35m1[m[31m..[mW [01;34mloop[m
	 [01;30mDraw_Buffer[m [31m(([mC [31m-[m [35m1[m[31m)[m [31m+[m j[31m)[m [31m:=[m Wide_Character'[01;30mVal[m[31m([m[35m32[m[31m);[m [31m-- Old : 176.[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;30mSet_Text_Color[m [31m([mColor[31m);[m
      [01;34mfor[m i [01;34min[m [35m1[m[31m..[mH [01;34mloop[m
	 [01;30mMove_Cursor_To[m [31m(([mL [31m-[m [35m1[m[31m)[m [31m+[m i[31m,[m C[31m);[m
	 W_io[31m.[m[01;30mPut[m [31m([m[01;30mDraw_Buffer[m [31m([mC[31m..([mC[31m-[m [35m1[m[31m)[m [31m+[m W[31m));[m
      [01;34mend[m [01;34mloop[m[31m;[m
   [01;34mend[m Draw_Desktop_Background[31m;[m
   
      
   [31m-- Dessine un fenêtre, c'est-à-dire un cadre, un fond rempli d'espace,[m
   [31m-- et un bouton « ferme » en haut à droite du cadre.[m
   
   [01;34mprocedure[m [01;30mDraw_Window[m [31m([mW [31m:[m [01;34min[m Window_Type[31m)[m
   [01;34mis[m
      [01;34mtype[m Frame_Component_Enum [01;34mis[m [31m([m
   				    Top_Left_Corner[31m,[m
   				    Top_Right_Corner[31m,[m
   				    Bottom_Right_Corner[31m,[m
   				    Bottom_Left_Corner[31m,[m
   				    Horizontal_Border[31m,[m
   				    Vertical_Border
   				   [31m);[m
      Frame_Component [31m:[m [01;34mconstant[m
   	[01;34marray[m [31m([mFrame_Type_Enum[31m,[m Frame_Component_Enum[31m)[m [01;34mof[m Wide_Character [31m:=[m [31m([m
   									    Double_Line_Frame [31m=>[m [31m([m
   												  Top_Left_Corner     [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Top_Right_Corner    [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Bottom_Right_Corner [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Bottom_Left_Corner  [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Horizontal_Border   [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m45[m[31m),[m
   												  Vertical_Border     [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m124[m[31m)),[m
   									    Single_Line_Frame [31m=>[m [31m([m
   												  Top_Left_Corner     [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Top_Right_Corner    [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Bottom_Right_Corner [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Bottom_Left_Corner  [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Horizontal_Border   [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m45[m[31m),[m
   												  Vertical_Border     [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m124[m[31m)));[m
      Client_Background [31m:[m [01;34mconstant[m Wide_Character [31m:=[m Wide_Character'[01;30mVal[m [31m([m[35m32[m[31m);[m
      Close_Box_Symbol  [31m:[m [01;34mconstant[m Wide_Character [31m:=[m [31m'X'[m[31m;[m
      [31m-- Pourrait être aussi Character'Val(254)[m
   [01;34mbegin[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Screen[m [31m([mW[31m.[mL[31m,[m W[31m.[mC[31m,[m W[31m.[mH[31m,[m W[31m.[mW[31m)[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m W[31m.[mW [31m<[m [35m5[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m W[31m.[mH [31m<[m [35m2[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;30mSet_Text_Color[m [31m([mW[31m.[mFrame_Color[31m);[m

      [31m-- Bottom side[m
      [01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Bottom_Left_Corner[31m);[m
      [01;34mfor[m i [01;34min[m [35m2[m [31m..[m W[31m.[mW [31m-[m [35m1[m [01;34mloop[m
   	 [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m i[31m)[m [31m:=[m
   	   [01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Horizontal_Border[31m);[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Bottom_Right_Corner[31m);[m
      [01;30mMove_Cursor_To[m [31m(([mW[31m.[mL [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mH[31m,[m W[31m.[mC[31m);[m
      W_io[31m.[m[01;30mPut[m [31m([m[01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m..([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m));[m

      [31m-- Top side[m
      [01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Top_Left_Corner[31m);[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW [31m-[m [35m3[m[31m)[m [31m:=[m [31m'['[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW [31m-[m [35m2[m[31m)[m [31m:=[m [31m'X'[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW [31m-[m [35m1[m[31m)[m [31m:=[m [31m']'[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Top_Right_Corner[31m);[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL[31m,[m W[31m.[mC[31m);[m
      W_io[31m.[m[01;30mPut[m [31m([m[01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m..([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m));[m

      [31m-- Middle[m
      [01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Vertical_Border[31m);[m
      [01;34mfor[m i [01;34min[m [35m2[m [31m..[m W[31m.[mW [31m-[m [35m1[m [01;34mloop[m
   	 [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m i[31m)[m [31m:=[m Client_Background[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Vertical_Border[31m);[m
      [01;34mfor[m i [01;34min[m [35m2[m[31m..[mW[31m.[mH [31m-[m [35m1[m [01;34mloop[m
   	 [01;30mMove_Cursor_To[m [31m(([mW[31m.[mL [31m-[m [35m1[m[31m)[m [31m+[m i[31m,[m W[31m.[mC[31m);[m
   	 W_io[31m.[m[01;30mPut[m [31m([m[01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m..([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m));[m
      [01;34mend[m [01;34mloop[m[31m;[m

      [31m-- Button[m
      [01;30mSet_Text_Color[m [31m([mW[31m.[mClose_Box_Color[31m);[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL[31m,[m [31m([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW [31m-[m [35m2[m[31m);[m
      W_io[31m.[m[01;30mPut[m [31m([mClose_Box_Symbol[31m);[m
   [01;34mend[m[31m;[m
   
   
   [01;34mprocedure[m [01;30mEnlight_Window[m [31m([mW [31m:[m [01;34min[m Window_Type[31m)[m
   [01;34mis[m
      [01;34mtype[m Frame_Component_Enum [01;34mis[m [31m([m
   				    Top_Left_Corner[31m,[m
   				    Top_Right_Corner[31m,[m
   				    Bottom_Right_Corner[31m,[m
   				    Bottom_Left_Corner[31m,[m
   				    Horizontal_Border[31m,[m
   				    Vertical_Border
   				   [31m);[m
      Frame_Component [31m:[m [01;34mconstant[m
   	[01;34marray[m [31m([mFrame_Type_Enum[31m,[m Frame_Component_Enum[31m)[m [01;34mof[m Wide_Character [31m:=[m [31m([m
   									    Double_Line_Frame [31m=>[m [31m([m
   												  Top_Left_Corner     [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Top_Right_Corner    [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Bottom_Right_Corner [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Bottom_Left_Corner  [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Horizontal_Border   [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m45[m[31m),[m
   												  Vertical_Border     [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m124[m[31m)),[m
   									    Single_Line_Frame [31m=>[m [31m([m
   												  Top_Left_Corner     [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Top_Right_Corner    [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Bottom_Right_Corner [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Bottom_Left_Corner  [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m43[m[31m),[m
   												  Horizontal_Border   [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m45[m[31m),[m
   												  Vertical_Border     [31m=>[m Wide_Character'[01;30mVal[m[31m([m[35m124[m[31m)));[m
      Client_Background [31m:[m [01;34mconstant[m Wide_Character [31m:=[m Wide_Character'[01;30mVal[m [31m([m[35m32[m[31m);[m
      Close_Box_Symbol  [31m:[m [01;34mconstant[m Wide_Character [31m:=[m [31m'X'[m[31m;[m
      [31m-- Pourrait être aussi Character'Val(254)[m
   [01;34mbegin[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Screen[m [31m([mW[31m.[mL[31m,[m W[31m.[mC[31m,[m W[31m.[mH[31m,[m W[31m.[mW[31m)[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m W[31m.[mW [31m<[m [35m5[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m W[31m.[mH [31m<[m [35m2[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;30menlight_Text_Color[m [31m([mW[31m.[mFrame_Color[31m);[m

      [31m-- Bottom side[m
      [01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Bottom_Left_Corner[31m);[m
      [01;34mfor[m i [01;34min[m [35m2[m [31m..[m W[31m.[mW [31m-[m [35m1[m [01;34mloop[m
   	 [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m i[31m)[m [31m:=[m
   	   [01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Horizontal_Border[31m);[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Bottom_Right_Corner[31m);[m
      [01;30mMove_Cursor_To[m [31m(([mW[31m.[mL [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mH[31m,[m W[31m.[mC[31m);[m
      [01;30mPut[m [31m([m[01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m..([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m));[m

      [31m-- Top side[m
      [01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Top_Left_Corner[31m);[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW [31m-[m [35m3[m[31m)[m [31m:=[m [31m'['[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW [31m-[m [35m2[m[31m)[m [31m:=[m [31m'X'[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW [31m-[m [35m1[m[31m)[m [31m:=[m [31m']'[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Top_Right_Corner[31m);[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL[31m,[m W[31m.[mC[31m);[m
      [01;30mPut[m [31m([m[01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m..([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m));[m

      [31m-- Middle[m
      [01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Vertical_Border[31m);[m
      [01;34mfor[m i [01;34min[m [35m2[m [31m..[m W[31m.[mW [31m-[m [35m1[m [01;34mloop[m
   	 [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m i[31m)[m [31m:=[m Client_Background[31m;[m
      [01;34mend[m [01;34mloop[m[31m;[m
      [01;30mDraw_Buffer[m [31m(([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m)[m [31m:=[m
   	[01;30mFrame_Component[m [31m([mW[31m.[mFrame_Type[31m,[m Vertical_Border[31m);[m
      [01;34mfor[m i [01;34min[m [35m2[m[31m..[mW[31m.[mH [31m-[m [35m1[m [01;34mloop[m
   	 [01;30mMove_Cursor_To[m [31m(([mW[31m.[mL [31m-[m [35m1[m[31m)[m [31m+[m i[31m,[m W[31m.[mC[31m);[m
   	 [01;30mPut[m [31m([m[01;30mDraw_Buffer[m [31m([mW[31m.[mC[31m..([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW[31m));[m
      [01;34mend[m [01;34mloop[m[31m;[m

      [31m-- Button[m
      [01;30mEnlight_Text_Color[m [31m([mW[31m.[mClose_Box_Color[31m);[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL[31m,[m [31m([mW[31m.[mC [31m-[m [35m1[m[31m)[m [31m+[m W[31m.[mW [31m-[m [35m2[m[31m);[m
      [01;30mPut[m [31m([mClose_Box_Symbol[31m);[m
   [01;34mend[m[31m;[m

   

   [31m-- Dessine un caractère dans la zone cliente d'une fenêtre, aux coordonnées[m
   [31m-- spécifiées avec la couleur indiquée.[m
   [01;34mprocedure[m [01;30mDraw[m [31m([m
		   W      [31m:[m [01;34min[m Window_Type[31m;[m
		   L      [31m:[m [01;34min[m Client_Line_Type[31m;[m
		   C      [31m:[m [01;34min[m Client_Column_Type[31m;[m
		   Color  [31m:[m [01;34min[m Color_Type[31m;[m
		   Ch     [31m:[m [01;34min[m Wide_Character[31m)[m
   [01;34mis[m
   [01;34mbegin[m
      [31m-- ((W.L + 1) - 1) + L = W.L + L[m
      [31m-- ((W.C + 1) - 1) + C = W.C + C[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Screen[m [31m([mW[31m.[mL [31m+[m L[31m,[m W[31m.[mC [31m+[m C[31m,[m [35m1[m[31m,[m [35m1[m[31m)[m [01;34mthen[m
	 [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Client[m [31m([mW[31m,[m L[31m,[m C[31m,[m [35m1[m[31m,[m [35m1[m[31m)[m [01;34mthen[m
	 [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;30mSet_Text_Color[m [31m([mColor[31m);[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL [31m+[m L[31m,[m W[31m.[mC [31m+[m C[31m);[m
      W_io[31m.[m[01;30mPut[m [31m([mCh[31m);[m
   [01;34mend[m[31m;[m

   [31m-- Dessine du texte dans la zone cliente d'une fenêtre, aux coordonnées[m
   [31m-- spécifiées avec la couleur indiquée.[m
   [01;34mprocedure[m [01;30mDraw[m [31m([m
		   W      [31m:[m [01;34min[m Window_Type[31m;[m
		   L      [31m:[m [01;34min[m Client_Line_Type[31m;[m
		   C      [31m:[m [01;34min[m Client_Column_Type[31m;[m
		   Color  [31m:[m [01;34min[m Color_Type[31m;[m
		   Text   [31m:[m [01;34min[m [32mWide_String[m[31m)[m
   [01;34mis[m
   [01;34mbegin[m
      [31m-- ((W.L + 1) - 1) + L = W.L + L[m
      [31m-- ((W.C + 1) - 1) + C = W.C + C[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Screen[m [31m([mW[31m.[mL [31m+[m L[31m,[m W[31m.[mC [31m+[m C[31m,[m [35m1[m[31m,[m [01;30mReal_Length[m[31m([mText[31m))[m [01;34mthen[m
	 [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Client[m [31m([mW[31m,[m L[31m,[m C[31m,[m [35m1[m[31m,[m [01;30mReal_Length[m[31m([mText[31m))[m [01;34mthen[m
	 [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;30mSet_Text_Color[m [31m([mColor[31m);[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL [31m+[m L[31m,[m W[31m.[mC [31m+[m C[31m);[m
      W_io[31m.[m[01;30mPut[m [31m([mText[31m);[m
   [01;34mend[m[31m;[m
   
   [01;34mprocedure[m [01;30mEnlight_Draw[m [31m([m
			   W      [31m:[m [01;34min[m Window_Type[31m;[m
			   L      [31m:[m [01;34min[m Client_Line_Type[31m;[m
			   C      [31m:[m [01;34min[m Client_Column_Type[31m;[m
			   Color  [31m:[m [01;34min[m Color_Type[31m;[m
			   Text   [31m:[m [01;34min[m [32mWide_String[m[31m)[m
   [01;34mis[m
   [01;34mbegin[m
      [31m-- ((W.L + 1) - 1) + L = W.L + L[m
      [31m-- ((W.C + 1) - 1) + C = W.C + C[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Screen[m [31m([mW[31m.[mL [31m+[m L[31m,[m W[31m.[mC [31m+[m C[31m,[m [35m1[m[31m,[m [01;30mReal_Length[m[31m([mText[31m))[m [01;34mthen[m
	 [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Client[m [31m([mW[31m,[m L[31m,[m C[31m,[m [35m1[m[31m,[m [01;30mReal_Length[m[31m([mText[31m))[m [01;34mthen[m
	 [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;30mEnlight_Text_Color[m [31m([mColor[31m);[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL [31m+[m L[31m,[m W[31m.[mC [31m+[m C[31m);[m
      W_io[31m.[m[01;30mPut[m [31m([mText[31m);[m
   [01;34mend[m[31m;[m
   
   
   
   
   [31m-- Dessine du texte centré. Comme c'est le centrage qui donne la coordonnée[m
   [31m-- horizontal, on ne spécifie bien sûre que la coordonnée vertical.[m
   [01;34mprocedure[m [01;30mDraw_Centered[m [31m([m
			    W      [31m:[m [01;34min[m Window_Type[31m;[m
			    L      [31m:[m [01;34min[m Client_Line_Type[31m;[m
			    Color  [31m:[m [01;34min[m Color_Type[31m;[m
			    Text   [31m:[m [01;34min[m [32mWide_String[m[31m)[m
   [01;34mis[m
      C2 [31m:[m Natural[31m;[m
   [01;34mbegin[m
      [31m-- (W.L + 1) - 1 = W.L[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Screen[m [31m([mW[31m.[mL [31m+[m L[31m,[m W[31m.[mC [31m+[m [35m1[m[31m,[m [35m1[m[31m,[m [01;30mReal_Length[m[31m([mText[31m))[m [01;34mthen[m
	 [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m [01;34mnot[m [01;30mFit_In_Client[m [31m([mW[31m,[m L[31m,[m [35m1[m[31m,[m [35m1[m[31m,[m [01;30mReal_Length[m[31m([mText[31m))[m [01;34mthen[m
	 [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m W[31m.[mW [31m-[m [35m2[m [31m<[m [01;30mReal_Length[m[31m([mText[31m)[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [31m-- (W.C - 1) + 1 = W.C[m
      C2 [31m:=[m W[31m.[mC [31m+[m [31m([mW[31m.[mW [31m-[m [35m2[m [31m-[m [01;30mReal_Length[m[31m([mText[31m))[m [31m/[m [35m2[m[31m;[m
      [01;30mSet_Text_Color[m [31m([mColor[31m);[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL [31m+[m L[31m,[m C2[31m);[m
      W_io[31m.[m[01;30mPut[m [31m([mText[31m);[m
   [01;34mend[m[31m;[m
   
   [01;34mprocedure[m [01;30mMove_Cursor_To[m [31m([m
			     W [31m:[m [01;34min[m Window_Type[31m;[m
			     L [31m:[m [01;34min[m Client_Line_Type[31m;[m
			     C [31m:[m [01;34min[m Client_Column_Type[31m)[m
   [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m L [31m<[m [35m1[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m L [31m>[m W[31m.[mH [31m-[m [35m2[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m C [31m<[m [35m1[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;34mif[m C [31m>[m W[31m.[mW [31m-[m [35m2[m [01;34mthen[m [01;34mraise[m Metric_Error[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
      [01;30mMove_Cursor_To[m [31m([mW[31m.[mL [31m+[m L[31m,[m W[31m.[mC [31m+[m C[31m);[m
   [01;34mend[m[31m;[m

   [01;34mfunction[m [01;30mIs_Printable[m [31m([mC [31m:[m [01;34min[m Wide_Character[31m)[m
			 [01;34mreturn[m [32mBoolean[m
   [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m Wide_Character'[01;30mPos[m [31m([mC[31m)[m [01;34min[m [35m0[m[31m..[m[35m31[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34melse[m [01;34mreturn[m True[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m
   [01;34mend[m[31m;[m
   
   
   [31m-- Test si le rectangle défini par (L, C)-(H, W) passe dans l'écran.[m
   [01;34mfunction[m [01;30mFit_In_Screen[m [31m([m
			   L [31m:[m [01;34min[m Line_Type[31m;[m
			   C [31m:[m [01;34min[m Column_Type[31m;[m
			   H [31m:[m [01;34min[m Height_Type[31m;[m
			   W [31m:[m [01;34min[m Width_Type[31m)[m
			  [01;34mreturn[m [32mBoolean[m
   [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m C [31m<[m [35m1[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m [31m([mC [31m-[m [35m1[m[31m)[m [31m+[m W [31m>[m Term_Columns_Max [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m L [31m<[m [35m1[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m [31m([mL [31m-[m [35m1[m[31m)[m [31m+[m H [31m>[m Term_Lines_Max [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mreturn[m True[31m;[m
   [01;34mend[m[31m;[m

   [31m-- Test si le rectangle défini par (L, C)-(H, W) passe dans la fenêtre.[m
   [01;34mfunction[m [01;30mFit_In_Window[m [31m([m
			   Window [31m:[m [01;34min[m Window_Type[31m;[m
			   L [31m:[m [01;34min[m Line_Type[31m;[m
			   C [31m:[m [01;34min[m Column_Type[31m;[m
			   H [31m:[m [01;34min[m Height_Type[31m;[m
			   W [31m:[m [01;34min[m Width_Type[31m)[m
			  [01;34mreturn[m [32mBoolean[m
   [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m C [31m<[m [35m1[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m [31m([mC [31m-[m [35m1[m[31m)[m [31m+[m W [31m>[m Window[31m.[mW [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m L [31m<[m [35m1[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m [31m([mL [31m-[m [35m1[m[31m)[m [31m+[m H [31m>[m Window[31m.[mH [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mreturn[m True[31m;[m
   [01;34mend[m[31m;[m

   [31m-- Test si le rectangle défini par (L, C)-(H, W) passe dans la zone[m
   [31m-- cliente de la fenêtre. Notez que l'argument est bien une fenêtre, et non[m
   [31m-- un type Client_Type.[m
   [01;34mfunction[m [01;30mFit_In_Client[m [31m([m
			   Window [31m:[m [01;34min[m Window_Type[31m;[m
			   L [31m:[m [01;34min[m Line_Type[31m;[m
			   C [31m:[m [01;34min[m Column_Type[31m;[m
			   H [31m:[m [01;34min[m Height_Type[31m;[m
			   W [31m:[m [01;34min[m Width_Type[31m)[m
			  [01;34mreturn[m [32mBoolean[m
   [01;34mis[m
   [01;34mbegin[m
      [01;34mif[m C [31m<[m [35m1[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m [31m([mC [31m-[m [35m1[m[31m)[m [31m+[m W [31m>[m Window[31m.[mW [31m-[m [35m2[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m L [31m<[m [35m1[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mif[m [31m([mL [31m-[m [35m1[m[31m)[m [31m+[m H [31m>[m Window[31m.[mH [31m-[m [35m2[m [01;34mthen[m [01;34mreturn[m False[31m;[m
      [01;34mend[m [01;34mif[m[31m;[m

      [01;34mreturn[m True[31m;[m
   [01;34mend[m[31m;[m

[01;34mend[m Sky[31m.[mAnsi[31m.[mWindows [31m;[m 
