class interface STD_INPUT_OUTPUT
   -- 
   --  To have the useful io of class ANY.
   -- 

creation
   make

feature(s) from INPUT_STREAM
   --  State of the stream :

   same_is_connected: BOOLEAN
      --  True when the corresponding stream is connected
      --  to some physical input device.


   end_of_input: BOOLEAN
      --  Has end-of-input been reached ?
      --  True when the last character has been read.

      require
         same_is_connected

feature(s) from INPUT_STREAM
   --  To read one character at a time :

   read_character
      --  Read a character and assign it to last_character.

      require
         not end_of_input
      ensure
         not push_back_flag

   last_character: CHARACTER
      --  Last character read with read_character.

      require
         same_is_connected

   push_back_flag: BOOLEAN
      --  True in one char is already pushed back.


   unread_character
      --  Un-read the last character read.
      -- 

      require
         not push_back_flag
      ensure
         push_back_flag

feature(s) from INPUT_STREAM
   --  Skipping separators :

   skip_separators
      --  Stop doing read_character as soon as end_of_file is reached
      --  or as soon as last_character is not is_separator.
      --  When first character is already not is_separator nothing 
      --  is done. 


   skip_separators_using (separators: STRING)
      --  Same job as skip_separators using separators.

      require
         separators /= Void

feature(s) from INPUT_STREAM
   --  To read one number at a time :

   read_integer
      --  Read an integer according to the Eiffel syntax.
      --  Make result available in last_integer.
      --  Heading separators are automatically skipped using 
      --  is_separator of class CHARACTER.
      --  Trailing separators are not skipped.

      require
         not end_of_input

   last_integer: INTEGER
      --  Last integer read using read_integer.


   read_real
      --  Read a REAL and make the result available in last_real
      --  and in last_double.
      --  The integral part is available in last_integer.

      require
         not end_of_input

   last_real: REAL
      --  Last real read with read_real.


   read_double
      --  Read a DOUBLE and make the result available in 
      --  last_double. 

      require
         not end_of_input

   last_double: DOUBLE
      --  Last double read with read_double.


feature(s) from INPUT_STREAM
   --  To read one line or one word at a time :

   last_string: STRING
      --  Access to a unique STRING to get the result computed
      --  with read_line, read_word or newline.
      --  No new STRING is allocated.


   read_line
      --  Read a complete line ended by '%N' or end_of_input. 
      --  Make the result available in last_string.
      --  Character '%N' is not added in last_string. 
      --  
      --  NOTE: the result is available in last_string without any 
      --        memory allocation.

      require
         not end_of_input

   read_word
      --  Read a word using is_separator of class CHARACTER. 
      --  Result is available in last_string (no allocation 
      --  of memory).
      --  Heading separators are automatically skipped.
      --  Trailing separators are not skipped (last_character is
      --  left on the first one).  
      --  If end_of_input is encountered, Result can be the 
      --  empty string.

      require
         not end_of_input

   newline
      --  Consume input until newline ('%N') is found.
      --  Corresponding STRING is stored in last_string.


feature(s) from INPUT_STREAM
   --  Other features :

   read_line_in (str: STRING)
      --  Same jobs as read_line but storage is directly done in str.
      -- 

      require
         not end_of_input

   read_word_using (separators: STRING)
      --  Same jobs as read_word using separators.

      require
         not end_of_input;
         separators /= Void

   read_tail_in (str: STRING)
      --  Read all remaining character of the file in str.

      require
         str /= Void
      ensure
         end_of_input

feature(s) from OUTPUT_STREAM
   --  State of the stream :

   is_connected: BOOLEAN

feature(s) from OUTPUT_STREAM
   --  To write one character at a time :

   put_character (c: CHARACTER)
      require
         is_connected

feature(s) from OUTPUT_STREAM
   put_string (s: STRING)
      --  Output s to current output device.

      require
         is_connected;
         s /= Void

feature(s) from OUTPUT_STREAM
   --  To write a number :

   put_integer (i: INTEGER)
      --  Output i to current output device.

      require
         is_connected

   put_integer_format (i, s: INTEGER)
      --  Output i to current output device using at most
      --  s character.

      require
         is_connected

   put_real (r: REAL)
      --  Output r to current output device.

      require
         is_connected

   put_real_format (r: REAL; f: INTEGER)
      --  Output r with only f digit for the fractionnal part.
      --  Examples: 
      --     put_real(3.519,2) print "3.51".

      require
         is_connected;
         f >= 0

   put_double (d: DOUBLE)
      --  Output d to current output device.

      require
         is_connected

   put_double_format (d: DOUBLE; f: INTEGER)
      --  Output d with only f digit for the fractionnal part.
      --  Examples: 
      --     put_double(3.519,2) print "3.51". 

      require
         is_connected;
         f >= 0

feature(s) from OUTPUT_STREAM
   --  Other features :   

   put_boolean (b: BOOLEAN)
      --  Output b to current output device according
      --  to the Eiffel format.

      require
         is_connected

   put_pointer (p: POINTER)
      --  Output a viewable version of p.

      require
         is_connected

   put_new_line
      --  Output a newline character.

      require
         is_connected

   put_spaces (nb: INTEGER)
      --  Output nb spaces character.

      require
         nb >= 0

   append_file (file_name: STRING)
      require
         is_connected;
         file_exists(file_name)

   flush

feature(s) from STD_INPUT
   make


end of STD_INPUT_OUTPUT