comp.lang.ada
 help / color / mirror / Atom feed
From: "Smark" <not.provided@all.com>
Subject: Re: redirecting the standard output
Date: Thu, 12 Apr 2001 09:01:24 -0500
Date: 2001-04-12T09:01:24-05:00	[thread overview]
Message-ID: <9b4cfn$s6j7@cui1.lmms.lmco.com> (raw)
In-Reply-To: 3ad59c42$1@pull.gecm.com

So the trick was to use VxWorks' "open" and "ioGlobalStdSet" rather than
Ada.Text_Io's "Open" and "Set_Output" ... interesting.

Mark


"Martin Dowie" <martin.dowie@gecm.com> wrote in message
news:3ad59c42$1@pull.gecm.com...
> Cheers Graham! That's done the trick!
>
> And in return to the community here is the Ada equivilant we will
> be using (feel free to add your own comments :-)
>
>
> -- vxworks.ads
> --------------
> with Interfaces.C;
>
> package VxWorks is
>
>   subtype A_Status is Interfaces.C.Int;
>
>   use type A_Status;
>
>   Ok    : constant A_Status :=  0;
>   Error : constant A_Status := -1;
>
> end VxWorks;
>
> -- vxworks-iolib.ads
> --------------------
> with Interfaces.C;
> with Interfaces.C.Strings;
>
> package VxWorks.ioLib is
>
>    O_RDONLY : constant := 16#0000#;
>    O_WRONLY : constant := 16#0001#;
>    O_RDWR   : constant := 16#0002#;
>    O_CREAT  : constant := 16#0200#;
>
>    subtype A_File is Interfaces.C.Int;
>
>    function Open (Name  : Interfaces.C.Strings.Chars_Ptr;
>                   Flags : Interfaces.C.Int;
>     Mode  : Interfaces.C.Int) return A_File;
>
>    function Close (File : A_File) return A_Status;
>
>    STD_IN  : constant A_File := 0;
>    STD_OUT : constant A_File := 1;
>    STD_ERR : constant A_File := 2;
>
>    function ioGlobalStdGet (StdFd : A_File) return A_File;
>
>    procedure ioGlobalStdSet (StdFd : A_File;
>                              NewFd : A_File);
>
>    function ioTaskStdGet (TaskId : Interfaces.C.Int := 0;
>      StdFd : A_File) return A_File;
>
>    procedure ioTaskStdSet (TaskId : Interfaces.C.Int := 0;
>       StdFd : A_File;
>                            NewFd : A_File);
>
> private
>
>    pragma Import (C, Open,           "open");
>    pragma Import (C, Close,          "close");
>    pragma Import (C, ioGlobalStdGet, "ioGlobalStdGet");
>    pragma Import (C, ioGlobalStdSet, "ioGlobalStdSet");
>    pragma Import (C, ioTaskStdGet,   "ioTaskStdGet");
>    pragma Import (C, ioTaskStdSet,   "ioTaskStdSet");
>
> end VxWorks.ioLib;
>
>
> -- text.ads
> ------------
> package Text is
>
>    procedure Send_Outputs_To_Null_Device;
>
>    procedure Return_Outputs_To_Standard_Devices;
>
> end Text;
>
>
> -- text.adb
> ------------
> with Interfaces.C.Strings;
> with VxWorks;
> with VxWorks.ioLib;
>
> package body Text is
>
>    Null_Device,
>    Standard_Output,
>    Standard_Error   : VxWorks.ioLib.A_File;
>
>
>    procedure Send_Outputs_To_Null_Device is
>
>       use type VxWorks.ioLib.A_File;
>
>    begin
>
>       Null_Device := VxWorks.ioLib.Open (Name  =>
> Interfaces.C.Strings.New_String ("/null"),
>                                          Flags => VxWorks.ioLib.O_RDWR,
>                                          Mode  => 0);
>
>       if Null_Device = VxWorks.Error then
>          return;
>       end if;
>
>       Standard_Output := VxWorks.ioLib.ioGlobalStdGet (StdFd =>
> VxWorks.ioLib.STD_OUT);
>       Standard_Error  := VxWorks.ioLib.ioGlobalStdGet (StdFd =>
> VxWorks.ioLib.STD_ERR);
>
>       VxWorks.ioLib.ioGlobalStdSet (StdFd => VxWorks.ioLib.STD_OUT,
>                                     NewFd => Null_Device);
>
>       VxWorks.ioLib.ioGlobalStdSet (StdFd => VxWorks.ioLib.STD_ERR,
>                                     NewFd => Null_Device);
>
>    end Send_Outputs_To_Null_Device;
>
>
>    procedure Return_Outputs_To_Standard_Devices is
>
>       Status : VxWorks.A_Status;
>
>    begin
>
>       VxWorks.ioLib.ioGlobalStdSet (StdFd => VxWorks.ioLib.STD_OUT,
>                                     NewFd => Standard_Output);
>
>       VxWorks.ioLib.ioGlobalStdSet (StdFd => VxWorks.ioLib.STD_ERR,
>                                     NewFd => Standard_Error);
>
>       Status := VxWorks.ioLib.Close (File => Null_Device);
>
>    end Return_Outputs_To_Standard_Devices;
>
> end Text;
>
>
> -- test.adb
> -----------
> with Ada.Real_Time; use Ada.Real_Time;
> with Ada.Text_IO;   use Ada.Text_IO;
> with Text;
>
> procedure Test is
>
>    procedure Display (Item : String; Result : out Duration) is
>
>       Start_Time,
>       End_Time : Time;
>
>    begin
>
>       Start_Time := Clock;
>
>       for I in 1 .. 10_000 loop
>
>           Put (Item => Item);
>
>       end loop;
>
>       End_Time := Clock;
>
>       Result := To_Duration (TS => End_Time - Start_Time);
>
>    end Display;
>
>    Times : array (Natural range 1 .. 10) of Duration;
>
>    Test_String : constant String := "1234567890";
>
> begin
>
>    Text.Send_Outputs_To_Null_Device;
>
>    for Index in Times'Range loop
>
>       Test (Item   => Test_String (1 .. Index),
>             Result => Times (Index));
>
>    end loop;
>
>    Text.Return_Outputs_To_Standard_Devices;
>
>    for Index in Times'Range loop
>
>       Put_Line (Integer'Image (Index) & " Time =" & Duration'Image (Times
> (Index)));
>
>    end loop;
>
> end Display;
>
>
>
> "Graham Baxter" <gbaxter@NOSPAM.bcs.org.uk> wrote in message
> news:3AD42861.A6C58874@NOSPAM.bcs.org.uk...
> >
> >
> > Martin Dowie wrote:
> > >
> > > This time with a subject... :-)
> > >
> > > Target System: PowerPC, AdaMULTI v1.8.9b, VxWorks 5.4
> > >
> > > How do I redirect the standard output? I'd like to redirect it to device
> > > "/null"
> > >
> > > Attempts:
> > >  Open (DevNull, Append_File, "/null");
> > >  Open (DevNull, "/null", "/null");
> > >
> > > just cause Status_Error, i.e. the device is already "open". So how can
> > > I then "Set_Output (DevNull);" without having the device object in
> > > File_Type form?..
> >
> > --
> > Try:
> >
> > int fd = open("/null",O_RDWR,0);
> > if(fd != ERROR)
> > {
> >     ioGlobalStdSet(STD_IN,fd);
> >     ioGlobalStdSet(STD_OUT,fd);
> >     ioGlobalStdSet(STD_ERR,fd);
> > }
> >
> >
> >
> > Regards,
> >
> >
> > Graham Baxter
> > Freelance Software Engineer
> > gbaxter@NOSPAM.bcs.org.uk
>
>





  reply	other threads:[~2001-04-12 14:01 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-04-10 14:32 redirecting the standard output Martin Dowie
2001-04-10 15:01 ` redirecting the standard output to different std outputs? Frank
2001-04-10 16:17   ` Mark Biggar
2001-04-10 20:38     ` James Rogers
2001-04-13 16:23   ` Tucker Taft
2001-04-10 16:08 ` redirecting the standard output Stephen Leake
2001-04-10 16:46   ` Stephen Leake
2001-04-10 17:13     ` Smark
2001-04-10 21:00   ` Ted Dennison
2001-04-11  7:32   ` Martin Dowie
2001-04-11 12:04     ` Stephen Leake
2001-04-11 14:15       ` Martin Dowie
2001-04-12  1:41     ` tmoran
2001-04-12  7:08       ` Martin Dowie
2001-04-10 16:46 ` Smark
2001-04-11 12:06   ` Stephen Leake
2001-04-11 14:11     ` Martin Dowie
2001-04-11  0:04 ` Jeff Creem
2001-04-11  9:48 ` Graham Baxter
2001-04-12 12:23   ` Martin Dowie
2001-04-12 14:01     ` Smark [this message]
2001-04-12 19:52       ` martin.m.dowie
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox