with text_io;                             use text_io;
with Complex_Polynomial_Systems;          use Complex_Polynomial_Systems;
with Complex_Multivariate_Polynomials_io;
 use Complex_Multivariate_Polynomials_io;

package Complex_Polynomial_Systems_io is

-- DESCRIPTION :
--  This package contains routines for the input and output
--  of human-readable polynomial systems.
--  Note that for every write-procedure, there is a read-
--  procedure that can read the written system.
--  See also the package for the input and output
--  of polynomials in n unknowns.

-- THE INPUT OPERATIONS :

  procedure get ( n : in natural; s : out Poly_Sys );
  procedure get ( n,m : in natural; s : out Poly_Sys );
  procedure get ( file : in file_type; n : in natural; s : out Poly_Sys );
  procedure get ( file : in file_type; n,m : in natural; s : out Poly_Sys );
  procedure get ( s : out Poly_Sys );
  procedure get ( file : in file_type; s : out Poly_Sys );

  -- DESCRIPTION :
  --   A polynomial system is read; n polynomials are read.

  -- REQUIRED : 
  --  * all unknows must begin with a letter and may have
  --    no symbols like '+', '-', '*', '^', '/', ';' or brackets in them;
  --    i = sqrt(-1) is reserved for complex numbers representation
  --  * each symbol is limited to 3 characters
  --  * the input is terminated by the delimiter
  --  * no blanks may occur in the numbers
  --  * if a file is specified, then it must be opened for input
  --  * n and m should both be on the first line !
  --  * if n stands alone, it should be followed immediately by an 
  --    end-of-line symbol.
 
  -- NOTE :
  --   The end_of_line symbol is not read.

  -- ON ENTRY :
  --   file       file_type where the input is,
  --              if not specified, then standard input is assumed;
  --   n          the number of equations,
  --              if not specified, then n will first be read;
  --   m          the number of unknowns;
  --              if not specified, then m will first be read. 

  -- ON RETURN :
  --   s         a polynomial system.

-- MORE USER FRIENDLY INPUT OPERATIONS :

  procedure get ( lp : in out Link_to_Poly_Sys );
  procedure get ( file : in file_type; lp : in out Link_to_Poly_Sys );

  -- DESCRIPTION :
  --   The first routine asks for a file name, while the second one
  --   assumes everything is on file and nothing has to be read from
  --   standard input.

  -- NOTE :
  --   The end_of_line symbol is read at the end of the polynomial system.

-- THE OUTPUT OPERATIONS :

  procedure put ( n : out natural; s : in Poly_Sys; pow : in power := '*' );
  procedure put ( n,m : out natural; s : in Poly_Sys; pow : in power := '*' );
  procedure put ( file : in file_type;
                  n : out natural; s : in Poly_Sys; pow : in power := '*' );
  procedure put ( file : in file_type;
                  n,m : out natural; s : in Poly_Sys; pow : in power := '*' );
  procedure put ( s : in Poly_Sys; pow : in power );
  procedure put ( file : in file_type; s : in Poly_Sys; pow : in power );
  procedure put ( s : in Poly_Sys );
  procedure put ( file : in file_type; s : in Poly_Sys );

  -- DESCRIPTION :
  --   A polynomial system is written on standard output or on file.

  -- ON ENTRY :
  --   file       file where the output must come;
  --              if not specified, then standard output is assumed
  --   s          a polynomial system;
  --   pow        kind of power symbol used.

  -- ON RETURN :
  --   n          the number of equations of p,
  --              if not specified, n will first be written;
  --   m          the number of unknowns.
  --              if not specified, m will first be written.

  procedure put_line ( s : in Poly_Sys );
  procedure put_line ( file : in file_type; s : in Poly_Sys );
  procedure put_line ( s : in Poly_Sys; pow : in Power );
  procedure put_line ( file : in file_type; s : in Poly_Sys; pow : in Power );

  -- DESCRIPTION :
  --   Writes the polynomials, every term on a separate line.

  procedure Display_Format;

  -- DESCRIPTION :
  --   Displays on screen the formatting rules as on-line help facility.

end Complex_Polynomial_Systems_io;
