Specyfikacja pakietu JEWL

------------------------------------------------------------------------------
--                                                                          --
--                                 J E W L                                  --
--                                                                          --
--   Pakiet zapewniający Wejście/Wyjście oraz funkcje okienkowe dla         --
--   dla początkujących.                                                    --
--                                                                          --
--   Prawa (C) John English 2000. Adres kontaktowy: je@brighton.ac.uk       --
--   To oprogramowanie zostało wydane zgodnie z założeniami GNU Powszechnej --
--   Licencji Publicznej i jest przeznaczone głównie dla użytku             --
--   edukacyjnego. Skontaktuj się z autorem by zgłosić błędy, sugestie      --
--   i modyfikacje.                                                         --
--                                                                          --
------------------------------------------------------------------------------

with Ada.Finalization;

package JEWL is

  ----------------------------------------------------------------------------
  --
  --                               UŻYWANE TYPY
  --
  --  Następujące typy są użyte w innych miejscach w tekście tego pakietu:
  --
  --  Angle_Type      : kąt określony jako wartość całkowita pomiędzy 0 a 359
  --                    stopni.
  --  Colour_Type     : kolor określony jako wartość RGB.
  --  Font_Type       : czcionka wyznaczona poprzez nazwę, wielkość i styl.
  --  Point_Type      : para współrzędnych (X,Y) w oknie.
  --  Point_List      : tablica par (X,Y).
  --
  ----------------------------------------------------------------------------

  type    Angle_Type     is mod 360;
  subtype Colour_Range   is Integer range 0..255;
  type    Colour_Type    is record
                              Red    : Colour_Range;
                              Green  : Colour_Range;
                              Blue   : Colour_Range;
                            end record;
  type    Font_Type (Length : Natural)
                         is record
                              Name   : String (1..Length);
                              Size   : Positive;
                              Bold   : Boolean := False;
                              Italic : Boolean := False;
                            end record;

  type    Point_Type     is record
                              X,Y : Integer;
                            end record;
  type    Point_List     is array (Positive range <>) of Point_Type;

  ----------------------------------------------------------------------------
  --
  --                           OPERACJE NA UŻYWANYCH TYPACH
  --
  --  Operacje na kolorach:
  --    Light    : Generowanie rozjaśnionej wersji koloru, np. Light(Red).
  --    Dark     : Generowanie przyciemnionej wersji koloru, np. Dark(Green).
  --
  --  Operacje na czcionkach:
  --    Font     : Generowanie czcionki o wyznaczonych właściwościach.
  --    Name     : Pobranie nazwy używanej czcionki.
  --    Size     : Pobranie rozmiaru czcionki w punktach.
  --    Bold     : Sprawdzenie czy czcionka jest pogrubiona.
  --    Italic   : Sprawdzenie czy czcionka jest pochylona.
  --
  --  Operacje na współrzędnych:
  --    Endpoint : Obliczenie punktu końcowego linii zaczynającej się w punkcie startowym,
  --               z długości i kątem.
  --    Inside   : Sprawdzenie czy dany punkt jest w środku wyznaczonego prostokąta
  --               (definiowane za pomocą dwóch współrzędnych położonych na przekątnej).
  --    P1 + P2  : Dodaje dwie współrzędne (P1.X+P2.X, P1.Y+P2.Y).
  --    P1 - P2  : Odejmuje dwie współrzędne (P1.X-P2.X, P1.Y-P2.Y).
  --
  ----------------------------------------------------------------------------

  function Light    (Colour : Colour_Type) return Colour_Type;
  function Dark     (Colour : Colour_Type) return Colour_Type;

  function Font     (Name   : String;
                     Size   : Positive;
                     Bold   : Boolean  := False;
                     Italic : Boolean  := False)
                                           return Font_Type;
  function Name     (Font   : Font_Type)   return String;
  function Size     (Font   : Font_Type)   return Natural;
  function Bold     (Font   : Font_Type)   return Boolean;
  function Italic   (Font   : Font_Type)   return Boolean;

  function Endpoint (From   : Point_Type;
                     Length : Positive;
                     Angle  : Angle_Type)  return Point_Type;
  function Inside   (Point  : Point_Type;
                     From   : Point_Type;
                     To     : Point_Type)  return Boolean;
  function "+"      (P1, P2 : Point_Type)  return Point_Type;
  function "-"      (P1, P2 : Point_Type)  return Point_Type;

  ----------------------------------------------------------------------------
  --  Zmiany nazw dla amerykańskiej odmiany angielskiego
  ----------------------------------------------------------------------------

  subtype Color_Range is Colour_Range;
  subtype Color_Type  is Colour_Type;

private

  -- szczegóły implementacji

end JEWL;