TEAM-ADA Archives

Team Ada: Ada Programming Language Advocacy


Options: Use Forum View

Use Monospaced Font
Show Text Part by Default
Condense Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
"Team Ada: Ada Advocacy Issues (83 & 95)" <[log in to unmask]>
TASH Mailing List <[log in to unmask]>
Wed, 3 Mar 1999 12:30:12 -0500
"Terry J. Westley" <[log in to unmask]>
text/plain; charset="iso-8859-1"
text/plain (77 lines)
I'm not sure we should measure the "march of progress" based
on ease of writing print statements, but...

Mike Bates writes:
> If you want to make the contrast more dramatic, add some plain text, a
> variable-length string, and an integer in hexadecimal.
> How many lines does it take to do this in Ada, C++, or Java:
>       printf("The result for %-30s is %10.2f (%08x)\n", x, y, z);
> My question: Has anyone written good Ada equivalents to printf and
> scanf?

In a soon-to-be-released version of TASH, an Ada binding to Tcl/Tk,
you could do the above with the Ada program whose source text is
at the end of this email message.  The output of this program is:

The result for a piece of pi                  is       3.14 (00000059)
The result for a half piece of pi             is       1.57 (00000052)

Of course, this is not pure Ada; it depends on linking with Tcl/Tk
and using the TASH binding.  I haven't yet started scanf and it
probably will not be in the next release of TASH.  By the way,
this new version of TASH will also have regexp capability.

Terry J. Westley, Principal Engineer
Veridian Engineering, Calspan Operations
[log in to unmask]
Author of TASH, an Ada binding to Tcl/Tk.
Visit the TASH web site at

-------------- Ada source code follows; cut here ------------------
with Ada.Text_IO;
with Tash.Floats;
with Tash.Integers;
with Tash.Lists;
with Tash.Strings;

procedure Test_Format is

   use type Tash.Strings.Tash_String;
   use type Tash.Floats.Tash_Float;
   use type Tash.Integers.Tash_Integer;

   X : Tash.Strings.Tash_String;
   Y : Tash.Floats.Tash_Float;
   Z : Tash.Integers.Tash_Integer;

begin -- Test_Format

   -- Initialize some Tash objects to
   -- hold a string, float, and integer
   X := +"a piece of pi";
   Y := +3.14159;
   Z := +89;

   -- Demonstrate use of C-style printf
   Ada.Text_IO.Put_Line (Tash.Lists.Format (
      FormatString => "The result for %-30s is %10.2f (%08x)",
      Values       => Tash.Lists.Create (X, Y, Z)));

   -- Demonstrate use of C-style printf without explictly
   -- creating the Tash objects: X, Y, and Z
   Ada.Text_IO.Put_Line (
      Tash.Lists.Format (
         "The result for %-30s is %10.2f (%08x)",
         Tash.Lists.Create (+"a half piece of pi", +1.5708, +82)));

end Test_Format;