-- $Id: sumcol.gnat,v 1.0 2003/06/11 12:06:00 dada Exp $ -- http://dada.perl.it/shootout/ -- Ada 95 code by C.C. with Text_IO, Ada.Strings.Fixed, Ada.IO_Exceptions; procedure SumCol is package IE renames Ada.IO_Exceptions; package AS renames Ada.Strings; function Read_Line return String is Buf : String (1 .. 4096); Last : Natural; begin -- (End_Error here (in ObjectAda) on unusual missing final "\n") Text_IO.Get_Line (Text_IO.Standard_Input, Item => Buf, Last => Last); if Last < Buf'Last or else Text_IO.End_Of_File (Text_IO.Standard_Input) then return Buf (1 .. Last); else return Buf & Read_Line; end if; end Read_Line; Sum : Integer := 0; begin while not Text_IO.End_Of_File loop declare Line : String := AS.Fixed.Trim (Read_Line, Side => AS.Right); begin Sum := Sum + Integer'Value (Line); -- Fail 0 or 2 numbers per line end; end loop; Text_IO.Put_Line (AS.Fixed.Trim (Natural'Image (Sum), Side => AS.Left)); exception -- Catch error from Get_Line Integer'Value when Constraint_Error | IE.Device_Error | IE.End_Error => Text_IO.Put_Line ("> Error near line" & Text_IO.Count'Image (Text_IO.Line)); end SumCol;