Specyfikacja Pakietu JEWL.IO
------------------------------------------------------------------------------
-- --
-- J E W L . I O --
-- --
-- Rozszerzony pakiet Wejścia/Wyjścia dla początkujących używający --
-- graficznych dialogów dla wejścia, który wypisuje także informację --
-- dziennika to zwykłego wyjścia. --
-- --
-- Poniższa dokumentacja zakłada, że jesteś obeznany z głównymi --
-- możliwościami oferowanymi przez Ada.Text_IO. --
-- --
-- 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.Text_IO;
package JEWL.IO is
----------------------------------------------------------------------------
--
-- Kilka lokalnych nazw typów z Ada.Text_IO
--
subtype Positive_Count is Ada.Text_IO.Positive_Count;
subtype File_Type is Ada.Text_IO.File_Type;
----------------------------------------------------------------------------
--
-- Wyjątki, które pakiet może wywołać
--
Input_Cancelled : exception; -- użytkownik anulował dialog wejścia
----------------------------------------------------------------------------
--
-- Procedury wyświetlające wiadomości
--
procedure Message (Text : in String); -- wiadomość informacyjna
procedure Error (Text : in String); -- wiadomość o błędzie
function Query (Text : in String) return Boolean; -- pytanie tak/nie
----------------------------------------------------------------------------
--
-- Przejście do nowej linii, jak w Ada.Text_IO
--
procedure New_Line (Spacing : in Ada.Text_IO.Positive_Count := 1)
renames Ada.Text_IO.New_Line;
----------------------------------------------------------------------------
--
-- Otwieranie i zamykanie plików, używając standardowych dialogów by pobrać nazwy plików
--
procedure Open (File : in out File_Type; -- otwórz istniejący plik
Title : in String := "Wybierz plik wejściowy");
procedure Create (File : in out File_Type; -- stwórz nowy plik
Title : in String := "Wybierz plik wyjściowy");
procedure Append (File : in out File_Type; -- dopisz do istniejącego/nowego pliku
Title : in String := "Wybierz plik wyjściowy");
procedure Close (File : in out Ada.Text_IO.File_Type)
renames Ada.Text_IO.Close;
-- zamknij otwarty plik
----------------------------------------------------------------------------
--
-- Standardowe pozycjonowanie pliku i zapytania, jak w Ada.Text_IO
--
procedure New_Line (File : in Ada.Text_IO.File_Type;
Spacing : in Positive_Count := 1)
renames Ada.Text_IO.New_Line;
procedure Skip_Line (File : in Ada.Text_IO.File_Type;
Spacing : in Positive_Count := 1)
renames Ada.Text_IO.Skip_Line;
function End_Of_Line (File : in Ada.Text_IO.File_Type)
return Boolean
renames Ada.Text_IO.End_Of_Line;
function End_Of_File (File : in Ada.Text_IO.File_Type)
return Boolean
renames Ada.Text_IO.End_Of_File;
----------------------------------------------------------------------------
--
-- PODSTAWOWE OPERACJE WEJŚCIA/WYJŚCIA
--
-- ---- WEJŚCIE ----
--
-- Dla każdego typu skalarnego (z podstawowymi pakietami dla enumeracji, typów
-- całkowitych i zmiennoprzecinkowych i wsparcia dostarczonego jako standard dla
-- Stringów, znaków (Character), Integer-ów, Float-ów, i Bool):
--
-- Get (Item => X, -- pobierz wartość do X,
-- Default => Y, -- z początkową domyślną wartością Y (opcjonalnie)
-- Prompt => Z); -- wyświetlając Z jako echo (szept) (opcjonalnie),
--
-- Get (File => F,
-- Item => X); -- pobierz wartość do X z pliku F
--
-- Echo (szept) jest zawsze stringiem; domyślna wartość zależy od typów danych, które
-- biorą udział. W przypadku Stringa moze dojść do dwuznaczności jako, że echo i
-- domyślne wartości są Stringami. Rekomendowany sposób to ustawienie parametrów
-- jako "Prompt=>X" i "Default=>X", by uniknąć dwuznaczności.
--
-- Strings są trochę inne: istnieje funkcja, która pobiera String
-- (unconstrained) i procedura, która pobiera wartość do String ale jednocześnie zwraca
-- długość Stringa:
--
-- S := Get (Prompt => Y, -- opcjonalnie
-- Default => Z); -- opcjonalnie
--
-- Get (Item => X, -- pobierz wartość do X,
-- Length => L, -- którego długość wynosi L,
-- Prompt => Y, -- wyświetlając Y jako echo (opcjonalnie),
-- Default => Z); -- z początkową domyślną wartością Z (opcjonalnie)
--
-- Get (File => F,
-- Item => X, -- pobierz wartość do X z pliku F,
-- Length => L); -- której długość wynosi L
--
-- ---- WYJŚCIE ----
--
-- Wartości mogą być wysłane do standardowego wyjścia lub do pliku, z lub bez nową
-- linią na końcu:
--
-- Put (Item => X); -- zapisz wartość X na standardowym wyjściu
-- Put (File => F,
-- Item => X); -- zapisz wartość X do pliku
--
-- Put_Line (Item => X); -- zapisz wartość X i nową linię na standardowym wyjściu
-- Put_Line (File => F,
-- Item => X); -- zapisz wartość X i nową linię do pliku
--
-- ---- Konwersja typów ----
--
-- S := To_String(X) -- konwertuj nie-String do typu String
-- S := S & X; -- połącz String i X
-- S := X & S; -- połącz X i String
--
----------------------------------------------------------------------------
--
-- Wejście Stringów i Znaków
--
function Get (Prompt : in String := "Wpisz swój tekst:";
Default : in String := "")
return String; -- wyświetl dialog z nazwą (Prompt)
-- i pole tekstowe (wartość początkowa domyślna)
-- i zwróć zawartość pola tekstowego
-- jako String (unconstrained)
procedure Get (Item : out String;
Length : out Natural;
Prompt : in String := "Wpisz swój tekst:";
Default : in String := "");
-- użyj tego samego dialogu by pobrać string
-- do zmiennej, maksymalna długość jest limitowana rozmiarem -- Item i aktualną długością przechowywaną
-- w Length, z wartością początkową
procedure Get (File : in Ada.Text_IO.File_Type;
Item : out Character)
renames Ada.Text_IO.Get;
-- pobierz znak z pliku, z Text_IO
procedure Get (File : in Ada.Text_IO.File_Type;
Item : out String;
Length : out Natural)
renames Ada.Text_IO.Get_Line;
-- pobierz string i jego długość z pliku,
-- z Text_IO
----------------------------------------------------------------------------
-- Zmiana nazw dla zawartości z Ada.Text_IO
----------------------------------------------------------------------------
procedure Get_Line (Item : out String;
Length : out Natural ;
Prompt : in String := "Wpisz swój tekst:";
Default : in String := "") renames Get;
procedure Get_Line (File : in Ada.Text_IO.File_Type;
Item : out String;
Length : out Natural) renames Get;
----------------------------------------------------------------------------
--
-- Wyjście Stringów i Znaków
--
procedure Put (Item : in String)
renames Ada.Text_IO.Put;
-- wypisuje string
procedure Put (Item : in Character)
renames Ada.Text_IO.Put;
-- wypisuje znak
procedure Put (File : in Ada.Text_IO.File_Type;
Item : in Character)
renames Ada.Text_IO.Put;
-- zapisuj znak do pliku
procedure Put (File : in Ada.Text_IO.File_Type;
Item : in String)
renames Ada.Text_IO.Put;
-- zapisuje string do pliku
----------------------------------------------------------------------------
--
-- Wyjście Stringów i Znaków, z nową linią
--
procedure Put_Line (Item : in String)
renames Ada.Text_IO.Put_Line;
-- wypisuje string i nową linię
procedure Put_Line (Item : in Character);
-- wypisuje znak i nową linię
procedure Put_Line (File : in Ada.Text_IO.File_Type;
Item : in String)
renames Ada.Text_IO.Put_Line;
-- zapisuje string i nową linię do pliku
procedure Put_Line (File : in File_Type;
Item : in Character);
-- zapisuj znak i nową linię do pliku
----------------------------------------------------------------------------
--
-- LICZBY CAŁKOWITE WEJŚCIE, WYJŚCIE I KONWERSJA
--
----------------------------------------------------------------------------
--
-- Liczby całkowite Wejście
--
procedure Get (Item : out Integer;
Prompt : in String := "Wprowadź l. całkowitą:");
-- wyświetl dialog z tekstem (Prompt)
-- i puste pole tekstowe, które zwraca
-- zawartość pola tekstowego jako liczbę całkowitą
procedure Get (Item : out Integer;
Default : in Integer;
Prompt : in String := "Wprowadź l. całkowitą:");
-- wyświetl dialog i pole tekstowe
-- zainicjalizowane z wartością domyślną
procedure Get (File : in File_Type;
Item : out Integer);
-- odczytaj liczbę całkowitą z pliku
----------------------------------------------------------------------------
--
-- Liczby całkowite Wyjście
--
procedure Put (Item : in Integer);
-- wypisz liczbę całkowitą
procedure Put (File : in File_Type;
Item : in Integer);
-- zapisz liczbę całkowitą do pliku
----------------------------------------------------------------------------
--
-- Liczby całkowite Wyjście z nową linią
--
procedure Put_Line (Item : in Integer);
-- wypisz liczbę całkowitą i nową linię
procedure Put_Line (File : in File_Type;
Item : in Integer);
-- zapisz liczbę całkowitą i nową linię do pliku
----------------------------------------------------------------------------
--
-- Procedury zmiany typu liczb całkowitych
--
function To_String (Item : Integer) return String;
-- zmiana l. całkowitej na string
function "&" (Left : String;
Right : Integer) return String;
-- połącz String & l. całkowitą
function "&" (Left : Integer;
Right : String) return String;
-- połącz l. całkowitą & String
----------------------------------------------------------------------------
--
-- LICZBY ZMIENNOPRZECINKOWE WEJŚCIE, WYJŚCIE I KONWERSJA
--
----------------------------------------------------------------------------
--
-- Liczby zmiennoprzecinkowe Wejście
--
procedure Get (Item : out Float;
Prompt : in String := "Wprowadź l. rzeczywistą:");
-- wyświetl dialog z napisem (Prompt)
-- i puste pole które zwraca zawartość
-- jako liczbę zmiennoprzecinkową
procedure Get (Item : out Float;
Default : in Float;
Prompt : in String := "Wprowadź l. rzeczywistą:");
-- wyświetl ten sam dialog z polem tekstowym
-- z zainicjalizowaną wartością domyślną
procedure Get (File : in File_Type;
Item : out Float);
-- odczytaj l. zmiennoprzecinkową z pliku
----------------------------------------------------------------------------
--
-- Liczby zmiennoprzecinkowe Wyjście
--
procedure Put (Item : in Float);
procedure Put (File : in File_Type;
Item : in Float);
----------------------------------------------------------------------------
--
-- Liczby zmiennoprzecinkowe Wyjście, z nową linią
--
procedure Put_Line (Item : in Float);
procedure Put_Line (File : in File_Type;
Item : in Float);
----------------------------------------------------------------------------
--
-- Procedury zmiany typu liczb zmiennoprzecinkowych
--
function To_String (Item : Float) return String;
function "&" (Left : String;
Right : Float) return String;
function "&" (Left : Float;
Right : String) return String;
----------------------------------------------------------------------------
--
-- Zmienne BOOL WEJŚCIE, WYJŚCIE I KONWERSJA
--
----------------------------------------------------------------------------
--
-- Bool Wejście
--
procedure Get (Item : out Boolean;
Prompt : in String := "Tak czy nie?");
-- Wyświetl dialog z przyciskami Tak/Nie/Anuluj
procedure Get (Item : out Boolean;
Default : in Boolean;
Prompt : in String := "Tak");
-- wyświetl dialog z polem zaznaczania
-- inicjalizowany jak wyznaczono przez wartość domyślną
procedure Get (File : in File_Type;
Item : out Boolean);
-- odczytaj Bool z pliku
----------------------------------------------------------------------------
--
-- Boolean Wyjście
--
procedure Put (Item : in Boolean);
procedure Put (File : in File_Type;
Item : in Boolean);
----------------------------------------------------------------------------
--
-- Boolean Wyjście, z nową linią
--
procedure Put_Line (Item : in Boolean);
procedure Put_Line (File : in File_Type;
Item : in Boolean);
----------------------------------------------------------------------------
--
-- Procedury konwersji Bool
--
function To_String (Item : Boolean) return String;
function "&" (Left : String;
Right : Boolean) return String;
function "&" (Left : Boolean;
Right : String) return String;
----------------------------------------------------------------------------
--
-- TYP WYLICZENIOWY WEJŚCIE, WYJŚCIE I KONWERSJA
--
----------------------------------------------------------------------------
generic
type Item_Type is (<>);
package Enumeration_IO is
--------------------------------------------------------------------------
--
-- Typ wyliczeniowy Wejście
--
procedure Get (Item : out Item_Type;
Prompt : in String := "Wybierz wartość:");
-- wyświetl dialog z tekstem (Prompt)
-- i combobox z wartościami zaczynającymi
-- się od typu Item_Type
procedure Get (Item : out Item_Type;
Default : in Item_Type;
Prompt : in String := "Wybierz wartość:");
-- wyświetl dialog z combobox
-- zainicjalizowany z wartością domyślną
procedure Get (File : in File_Type;
Item : out Item_Type);
-- odczytaj wartość Item_Type z pliku
--------------------------------------------------------------------------
--
-- Typ wyliczeniowy Wyjście
--
procedure Put (Item : in Item_Type);
procedure Put (File : in File_Type;
Item : in Item_Type);
--------------------------------------------------------------------------
--
-- Typ wyliczeniowy Wyjście, z nową linią
--
procedure Put_Line (Item : in Item_Type);
procedure Put_Line (File : in File_Type;
Item : in Item_Type);
--------------------------------------------------------------------------
--
-- Procedury konwersji typu wyliczeniowego
--
function To_String (Item : Item_Type) return String;
function "&" (Left : String;
Right : Item_Type) return String;
function "&" (Left : Item_Type;
Right : String) return String;
end Enumeration_IO;
----------------------------------------------------------------------------
--
-- PODSTAWOWY TYP CAŁKOWITY WEJŚCIE, WYJŚCIE I KONWERSJA
--
----------------------------------------------------------------------------
generic
type Item_Type is range <>;
package Integer_IO is
--------------------------------------------------------------------------
--
-- Podstawowy typ całkowity Wejście
--
procedure Get (Item : out Item_Type;
Prompt : in String := "Wprowadź l. całkowitą:");
-- wyświetl dialog z tekstem (Prompt)
-- i puste pole tekstowe, które zwraca
-- zawartość pola tekstowego jako Item_Type
-- o wartości całkowitej
procedure Get (Item : out Item_Type;
Default : in Item_Type;
Prompt : in String := "Wprowadź l. całkowitą:");
-- wyświetl ten sam dialog
-- zainicjalizowany wartością domyślną
procedure Get (File : in File_Type;
Item : out Item_Type);
-- odczytaj wartość Item_Type z pliku
--------------------------------------------------------------------------
--
-- Podstawowy typ całkowity Wyjście
--
procedure Put (Item : in Item_Type);
procedure Put (File : in File_Type;
Item : in Item_Type);
--------------------------------------------------------------------------
--
-- Podstawowy typ całkowity Wyjście, z nową linią
--
procedure Put_Line (Item : in Item_Type);
procedure Put_Line (File : in File_Type;
Item : in Item_Type);
--------------------------------------------------------------------------
--
-- Procedury konwersji podstawowego typu całkowitego
--
function To_String (Item : Item_Type) return String;
function "&" (Left : String;
Right : Item_Type) return String;
function "&" (Left : Item_Type;
Right : String) return String;
end Integer_IO;
----------------------------------------------------------------------------
--
-- PODSTAWOWY TYP ZMIENNOPRZECINKOWY WEJŚCIE, WYJŚCIE I KONWERSJA
--
----------------------------------------------------------------------------
generic
type Item_Type is digits <>;
package Float_IO is
--------------------------------------------------------------------------
--
-- Podstawowy typ zmiennoprzecinkowy Wejście
--
procedure Get (Item : out Item_Type;
Prompt : in String := "Wprowadź l. zmiennoprzecinkową:");
-- wyświetl dialog z tekstem (Prompt)
-- i puste pole tekstowe, które zwraca
-- zawartość pola tekstowego jako Item_Type
-- o wartości zmiennoprzecinkowej
procedure Get (Item : out Item_Type;
Default : in Item_Type;
Prompt : in String := "Wprowadź l. zmiennoprzecinkową:");
-- wyświetl ten sam dialog z polem tekstowym
-- zainicjalizowanym wartością domyślną
procedure Get (File : in File_Type;
Item : out Item_Type);
-- read an Item_Type value from a file
--------------------------------------------------------------------------
--
-- Podstawowy typ zmiennoprzecinkowy Wyjście
--
procedure Put (Item : in Item_Type);
procedure Put (File : in File_Type;
Item : in Item_Type);
--------------------------------------------------------------------------
--
-- Podstawowy typ zmiennoprzecinkowy Wyjście, z nową linią
--
procedure Put_Line (Item : in Item_Type);
procedure Put_Line (File : in File_Type;
Item : in Item_Type);
--------------------------------------------------------------------------
--
-- Procedury konwersji podstawowego typu zmiennoprzecinkowego
--
function To_String (Item : Item_Type) return String;
function "&" (Left : String;
Right : Item_Type) return String;
function "&" (Left : Item_Type;
Right : String) return String;
end Float_IO;
end JEWL.IO;