home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / a-tiwtio.ads < prev    next >
Text File  |  1996-09-28  |  11KB  |  316 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT RUNTIME COMPONENTS                          --
  4. --                                                                          --
  5. --             A D A . T E X T _ I O . W I D E _ T E X T _ I O              --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.3 $                              --
  10. --                                                                          --
  11. -- This specification is adapted from the Ada Reference Manual for use with --
  12. -- GNAT.  In accordance with the copyright of that document, you can freely --
  13. -- copy and modify this specification,  provided that if you redistribute a --
  14. -- modified version,  any changes that you have made are clearly indicated. --
  15. --                                                                          --
  16. ------------------------------------------------------------------------------
  17.  
  18. --  In GNAT, package Wide_Text_IO is a private child of Ada.Text_IO. This
  19. --  allows Wide_Text_IO to share the declarations in the private part of
  20. --  Text_IO (as well as sharing its routines). The Ada.Wide_Text_IO unit
  21. --  in the standard library is simply a renaming of his private child.
  22.  
  23. --  Note: the generic subpackages of Wide_Text_IO (Integer_IO, Float_IO,
  24. --  Fixed_IO, Modular_IO, Decimal_IO and Enumeration_IO) appear as private
  25. --  children in GNAT. These children are with'ed automatically if they are
  26. --  referenced, so this rearrangement is invisible to user programs, but has
  27. --  the advantage that only the needed parts of Wide_Text_IO are processed
  28. --  and loaded.
  29.  
  30. with System.WCh_Con;
  31.  
  32. private package Ada.Text_IO.Wide_Text_IO is
  33.  
  34.    type File_Type is limited private;
  35.    type File_Mode is (In_File, Out_File, Append_File);
  36.  
  37.    type Count is new Ada.Text_IO.Count;
  38.  
  39.    subtype Positive_Count is Count range 1 .. Count'Last;
  40.  
  41.    Unbounded : constant Count := 0;
  42.    --  Line and page length
  43.  
  44.    subtype Field is Ada.Text_IO.Field;
  45.  
  46.    subtype Number_Base is Integer range 2 .. 16;
  47.  
  48.    type Type_Set is (Lower_Case, Upper_Case);
  49.  
  50.    ---------------------
  51.    -- File Management --
  52.    ---------------------
  53.  
  54.    procedure Create
  55.      (File : in out File_Type;
  56.       Mode : in File_Mode := Out_File;
  57.       Name : in String := "";
  58.       Form : in String := "");
  59.  
  60.    procedure Open
  61.      (File : in out File_Type;
  62.       Mode : in File_Mode;
  63.       Name : in String;
  64.       Form : in String := "");
  65.  
  66.    procedure Close  (File : in out File_Type);
  67.    procedure Delete (File : in out File_Type);
  68.    procedure Reset  (File : in out File_Type; Mode : in File_Mode);
  69.    procedure Reset  (File : in out File_Type);
  70.  
  71.    function Mode (File : in File_Type) return File_Mode;
  72.    function Name (File : in File_Type) return String;
  73.    function Form (File : in File_Type) return String;
  74.  
  75.    function Is_Open (File : in File_Type) return Boolean;
  76.  
  77.    ------------------------------------------------------
  78.    -- Control of default input, output and error files --
  79.    ------------------------------------------------------
  80.  
  81.    procedure Set_Input  (File : in File_Type);
  82.    procedure Set_Output (File : in File_Type);
  83.    procedure Set_Error  (File : in File_Type);
  84.  
  85.    function Standard_Input  return File_Type;
  86.    function Standard_Output return File_Type;
  87.    function Standard_Error  return File_Type;
  88.  
  89.    function Current_Input  return File_Type;
  90.    function Current_Output return File_Type;
  91.    function Current_Error  return File_Type;
  92.  
  93.    type File_Access is access constant File_Type;
  94.  
  95.    function Standard_Input  return File_Access;
  96.    function Standard_Output return File_Access;
  97.    function Standard_Error  return File_Access;
  98.  
  99.    function Current_Input  return File_Access;
  100.    function Current_Output return File_Access;
  101.    function Current_Error  return File_Access;
  102.  
  103.    --------------------
  104.    -- Buffer control --
  105.    --------------------
  106.  
  107.    procedure Flush (File : in out File_Type);
  108.    procedure Flush;
  109.  
  110.    --------------------------------------------
  111.    -- Specification of line and page lengths --
  112.    --------------------------------------------
  113.  
  114.    procedure Set_Line_Length (File : in File_Type; To : in Count);
  115.    procedure Set_Line_Length (To : in Count);
  116.  
  117.    procedure Set_Page_Length (File : in File_Type; To : in Count);
  118.    procedure Set_Page_Length (To : in Count);
  119.  
  120.    function Line_Length (File : in File_Type) return Count;
  121.    function Line_Length return Count;
  122.  
  123.    function Page_Length (File : in File_Type) return Count;
  124.    function Page_Length return Count;
  125.  
  126.    ------------------------------------
  127.    -- Column, Line, and Page Control --
  128.    ------------------------------------
  129.  
  130.    procedure New_Line (File : in File_Type; Spacing : in Positive_Count := 1);
  131.    procedure New_Line (Spacing : in Positive_Count := 1);
  132.  
  133.    procedure Skip_Line (File : in File_Type; Spacing : in Positive_Count := 1);
  134.    procedure Skip_Line (Spacing : in Positive_Count := 1);
  135.  
  136.    function End_Of_Line (File : in File_Type) return Boolean;
  137.    function End_Of_Line return Boolean;
  138.  
  139.    procedure New_Page (File : in File_Type);
  140.    procedure New_Page;
  141.  
  142.    procedure Skip_Page (File : in File_Type);
  143.    procedure Skip_Page;
  144.  
  145.    function End_Of_Page (File : in File_Type) return Boolean;
  146.    function End_Of_Page return Boolean;
  147.  
  148.    function End_Of_File (File : in File_Type) return Boolean;
  149.    function End_Of_File return Boolean;
  150.  
  151.    procedure Set_Col (File : in File_Type;  To : in Positive_Count);
  152.    procedure Set_Col (To : in Positive_Count);
  153.  
  154.    procedure Set_Line (File : in File_Type; To : in Positive_Count);
  155.    procedure Set_Line (To : in Positive_Count);
  156.  
  157.    function Col (File : in File_Type) return Positive_Count;
  158.    function Col return Positive_Count;
  159.  
  160.    function Line (File : in File_Type) return Positive_Count;
  161.    function Line return Positive_Count;
  162.  
  163.    function Page (File : in File_Type) return Positive_Count;
  164.    function Page return Positive_Count;
  165.  
  166.    -----------------------------
  167.    -- Characters Input-Output --
  168.    -----------------------------
  169.  
  170.    procedure Get (File : in File_Type; Item : out Wide_Character);
  171.    procedure Get (Item : out Wide_Character);
  172.    procedure Put (File : in File_Type; Item : in Wide_Character);
  173.    procedure Put (Item : in Wide_Character);
  174.  
  175.    procedure Look_Ahead
  176.      (File        : in File_Type;
  177.       Item        : out Wide_Character;
  178.       End_Of_Line : out Boolean);
  179.  
  180.    procedure Look_Ahead
  181.      (Item        : out Wide_Character;
  182.       End_Of_Line : out Boolean);
  183.  
  184.    procedure Get_Immediate
  185.      (File : in File_Type;
  186.       Item : out Wide_Character);
  187.  
  188.    procedure Get_Immediate
  189.      (Item : out Wide_Character);
  190.  
  191.    procedure Get_Immediate
  192.      (File      : in File_Type;
  193.       Item      : out Wide_Character;
  194.       Available : out Boolean);
  195.  
  196.    procedure Get_Immediate
  197.      (Item      : out Wide_Character;
  198.       Available : out Boolean);
  199.  
  200.    --------------------------
  201.    -- Strings Input-Output --
  202.    --------------------------
  203.  
  204.    procedure Get (File : in File_Type; Item : out Wide_String);
  205.    procedure Get (Item : out Wide_String);
  206.    procedure Put (File : in File_Type; Item : in Wide_String);
  207.    procedure Put (Item : in Wide_String);
  208.  
  209.    procedure Get_Line
  210.      (File : in File_Type;
  211.       Item : out Wide_String;
  212.       Last : out Natural);
  213.  
  214.    procedure Get_Line
  215.      (Item : out Wide_String;
  216.       Last : out Natural);
  217.  
  218.    procedure Put_Line
  219.      (File : in File_Type;
  220.       Item : in Wide_String);
  221.  
  222.    procedure Put_Line
  223.      (Item : in Wide_String);
  224.  
  225.    --  Exceptions
  226.  
  227.    Status_Error : exception renames IO_Exceptions.Status_Error;
  228.    Mode_Error   : exception renames IO_Exceptions.Mode_Error;
  229.    Name_Error   : exception renames IO_Exceptions.Name_Error;
  230.    Use_Error    : exception renames IO_Exceptions.Use_Error;
  231.    Device_Error : exception renames IO_Exceptions.Device_Error;
  232.    End_Error    : exception renames IO_Exceptions.End_Error;
  233.    Data_Error   : exception renames IO_Exceptions.Data_Error;
  234.    Layout_Error : exception renames IO_Exceptions.Layout_Error;
  235.  
  236. private
  237.    -------------------------------------
  238.    -- Wide_Text_IO File Control Block --
  239.    -------------------------------------
  240.  
  241.    package FCB renames System.File_Control_Block;
  242.  
  243.    Default_Wide_Encoding_Method :
  244.      System.Wch_Con.WC_Encoding_Method := System.Wch_Con.WCEM_Hex;
  245.  
  246.    type Wide_Text_AFCB is new Ada.Text_IO.Text_AFCB with record
  247.  
  248.       WC_Method : System.WCh_Con.WC_Encoding_Method :=
  249.                     Default_Wide_Encoding_Method;
  250.       --  Encoding method to be used for this file
  251.  
  252.       Saved_Wide_Character : Wide_Character range
  253.                                Wide_Character'Val (16#0080#) ..
  254.                                Wide_Character'Val (16#FFFF#);
  255.       --  This field is valid only if Before_Wide_Character is set. It
  256.       --  contains a wide character read by Look_Ahead. If Look_Ahead
  257.       --  reads a character in the range 16#0000# to 16#007F#, then it
  258.       --  can use ungetc to put it back, but ungetc cannot be called
  259.       --  more than once, so for characters above this range, we don't
  260.       --  try to back up the file. Instead we save the character in this
  261.       --  field and set the flag Before_Wide_Character to indicate that
  262.       --  we are logically positioned before this character even though
  263.       --  the stream is physically positioned after it.
  264.  
  265.    end record;
  266.  
  267.    type File_Type is access all Wide_Text_AFCB;
  268.  
  269.    function AFCB_Allocate
  270.      (Control_Block : Wide_Text_AFCB)
  271.       return          FCB.AFCB_Ptr;
  272.  
  273.    procedure AFCB_Close (File : access Wide_Text_AFCB);
  274.    procedure AFCB_Free  (File : access Wide_Text_AFCB);
  275.  
  276.    --  Note: The Read and Write operations are inherited from Text_IO
  277.  
  278.    --  The following representation clause allows the use of unchecked
  279.    --  conversion for rapid translation between the File_Mode type
  280.    --  used in this package and System.File_IO.
  281.  
  282.    for File_Mode use
  283.      (In_File     => 0,  -- System.File_IO.File_Mode'Pos (In_File)
  284.       Out_File    => 2,  -- System.File_IO.File_Mode'Pos (Out_File)
  285.       Append_File => 3); -- System.File_IO.File_Mode'Pos (Append_File)
  286.  
  287.    ----------------------
  288.    -- Utility Routines --
  289.    ----------------------
  290.  
  291.    procedure Setup (File : File_Type);
  292.    --  Setup fields of file control block following Open or Create. This is
  293.    --  in the spec so it can be accessed from Ada.Wide_Text_IO.C_Streams.
  294.    --  The special task required is to set the wide text encoding method
  295.    --  from a possible specification in the form file.
  296.  
  297.    --------------------
  298.    -- Standard Files --
  299.    --------------------
  300.  
  301.    Standard_Err_AFCB : aliased Wide_Text_AFCB;
  302.    Standard_In_AFCB  : aliased Wide_Text_AFCB;
  303.    Standard_Out_AFCB : aliased Wide_Text_AFCB;
  304.  
  305.    Standard_Err : aliased File_Type := Standard_Err_AFCB'Access;
  306.    Standard_In  : aliased File_Type := Standard_In_AFCB'Access;
  307.    Standard_Out : aliased File_Type := Standard_Out_AFCB'Access;
  308.    --  Standard files
  309.  
  310.    Current_In   : aliased File_Type := Standard_In;
  311.    Current_Out  : aliased File_Type := Standard_Out;
  312.    Current_Err  : aliased File_Type := Standard_Err;
  313.    --  Current files
  314.  
  315. end Ada.Text_IO.Wide_Text_IO;
  316.