WITH   Ada.Unchecked_Conversion ;
WITH   Interfaces.C ;
WITH   System ;
WITH   Win32 ;
WITH   Win32.Crt.Strings ;
WITH   Win32.Windef ;
WITH   Win32.Wingdi ;
WITH   Win32.Winuser ;

PACKAGE BODY   CharTb11_Pkg  IS

   FUNCTION   CP   ( I_Str : Win32.CHAR_Array )  RETURN  Win32.LPCSTR  IS
      FUNCTION   UC  IS
         new Ada.Unchecked_Conversion ( System.Address , Win32.LPCSTR );
   BEGIN
      RETURN  UC ( I_Str(I_Str'First)'Address );
   END CP;

   FUNCTION   CPS   ( I_Str : Win32.CHAR_Array )  RETURN  Win32.LPSTR  IS
      FUNCTION   UC  IS
         new Ada.Unchecked_Conversion ( System.Address , Win32.LPSTR );
   BEGIN
      RETURN  UC ( I_Str(I_Str'First)'Address );
   END CPS;

   USE TYPE   Win32.CHAR_Array ;      --- To get "&"

   Nul : Win32.Char RENAMES Win32.Nul ;

   IgnoredI : Win32.INT ;
   IgnoredP : Win32.PSTR ;

   C_MainPMTitle : CONSTANT Win32.CHAR_Array := "Information"  &  Nul ;

   CRLFz : CONSTANT Win32.CHAR_Array := Win32.Char(Character'Val(13))  &  Win32.Char(Character'Val(10))  &  Nul ;

   L_Buffer : ALIASED Win32.CHAR_Array(0..4096);
   L_Buf01z : ALIASED Win32.CHAR_Array(0..1);

   PROCEDURE   ShowCharTb11  IS
      L_Code : Standard.INTEGER ;
   BEGIN
      L_Buffer(0) := Nul ;

      L_Buf01z(1) := Nul ;

      ----- LOOP 1
      FOR L_i in 0..15 LOOP

         ----- LOOP 2
         FOR L_j in 0..15 LOOP
            L_Code := L_i*16  +  L_j ;

            L_Buf01z(0) := Win32.Char(Character'Val(L_Code));
            IgnoredP := Win32.Crt.Strings.StrCat ( CPS(L_Buffer) , CP(L_Buf01z) );
         END LOOP;--j

         IgnoredP := Win32.Crt.Strings.StrCat ( CPS(L_Buffer) , CP(CRLFz) );
      END LOOP;--i

      IgnoredI := Win32.Winuser.MessageBox ( System.Null_Address
                                           , CP(L_Buffer)
                                           , CP(C_MainPMTitle)
                                           , Win32.Winuser.MB_OK or Win32.Winuser.MB_ICONEXCLAMATION );
   END ShowCharTb11;
END CharTb11_Pkg;
