Re: Pragma for conditional compilation? (Ada 2005 vs. 95)



As for the "pragma Ada_05 ( name ) ;" It looks like it will not
work for your "Ada_95" user defined package and "Ada_05" Ada
defined package.

Now for conditional compilation, well I did forget to add the
sixth one. Which is the laymans answer and it always works, if you
follow the instructions.
--
-- Uncomment one and only one of the following lines:
--
-- with Package_1 ; use Package_1 ; -- Ada_95 version package

-- with Package_2 ; use Package_2 ; -- Ada_2005 version package



Now to show one example of the IF-THEN-ELSE-END concept. And it
is a lot of work if you have more than a couple of routines to
set up.

-- -------- --
-- TEST.ADB --
-- -------- --
--
-- There are a number of ways to use the "IF-THEN-ELSE-END"
-- structure, this version is one. And it does generate code
-- for the "IF-THEN-ELSE-END" statements.
--

with Test1 ;

procedure test is

--
-- True: use Alpha routines aka "user included package"
--
-- False: use Beta routine aka "system define package"
--
package IO_Package is new Test1 ( False ) ;

use IO_Package ; -- Assign default package

--
-- Use User created package
--
package Package_IO is new Test1 ( True ) ;


begin

Put_Line.all ( "This is a test" ) ;

Package_IO.Put_Line.all ( "Try this One" ) ;

end test ;


-- --------- --
-- TEST1.ADS --
-- --------- --

--
-- This Generic package defines the program global routines, the
-- redefined Ada system routines and the user created routines.
--
with Ada.Text_IO ;

generic

Configure : boolean ;

package test1 is

type Procedure_String_Type is access procedure ( item : String ) ;

-------------------------------
-- Define package procedures --
-------------------------------
Put_Line : Procedure_String_Type ;

--
-- define other declared routines/variables needed
--

private

-------------------------------
-- Emulate system procedures --
-------------------------------
procedure Alpha ( szTemp : string ) ;


-----------------------------------------------
-- Redefine/Rename system supplied procedure --
-----------------------------------------------

procedure Beta ( Item : in String ) renames Ada.Text_IO.Put_Line ;

end test1 ;


-- --------- --
-- TEST1.ADB --
-- --------- --

--
-- This Generic body package defines the user created routines and
-- this package does contain a initialize routine that configures
-- the package.
--

--
-- IF-THEN-ELSE-END -- Yes, the compiler does generate code for
-- -- this type of statament.
-- -- Also, it is easy to insert a statement in
-- -- the wrong place.
--
-- This works! Even though there is a person that says this will
-- not work.
-- If this does not you better find a different language to use.
-- Because it means the Ada "IF" statement does not work?
--

with Ada.Text_IO ;

package body test1 is

-------------------------------
-- Emulate system procedures --
-------------------------------
procedure Alpha ( szTemp : string ) is
begin
Ada.Text_IO.Put_Line ( "Alpha: " & szTemp ) ;
end ;

-----------------------
-- Initial package --
-----------------------
begin -- test1
--
-- Like I said, this is the old way of doing this by embedding
-- the configuration code in the source. But it does work.
-- Of course you could use a CASE statement instead, if you need
-- more than two options or packages set up.
--
if Configure then
Put_Line := Alpha'Access ;
else
Put_Line := Beta'Access ;
end if ;

end test1 ;




In <1190929570.915553.284000@xxxxxxxxxxxxxxxxxxxxxxxxxxx>, Jerry <lanceboyle@xxxxxxxxx> writes:
On Sep 27, 8:26 am, a...@xxxxxxxx (anon) wrote:

Thanks, anon, for the detailed answer.


The third real old way is to code in the option by a "IF-THEN-ELSE-END"
statements and use a Global constant variable(s). Its low tech but it
still works.

OK, but my "problem" is in declaring types which I want to be visible
in 95 but not visible in 05, as 05 provides them itself. An "IF-THEN-
ELSE-END" solution would have to be in the executable part of the
program (right?).


The fifth is a "NON STANDARD" way that GNAT introduce with the
pre-release of Ada_2005 which is to use the "pragma Ada_05 ( name ) ;"

Example:

-- For GNAT you can create a routine that is define and is usable
-- only in Ada_2005 specs, by using the GNAT pragma Ada_05.
--
-- Gnat uses this concept in the Ada.Text_IO package. Just
-- search for "Ada_05" in the file "a-textio.ads". There are
-- two Get_Line functions. If the system is compiled with
-- "pragma Ada_83 ;" or "pragma Ada_95" the compile will not
-- allow a call to these routines. But under Ada_05 the routine is
-- visible.
--
-- Defined in the specification file.

procedure Routine ;
pragma Ada_05 ( Routine ) ;

--
-- Defined in the body file.
--
procedure Routine is
begin -- Routine
null ;
end Routine ;

Same comment as above--how would this work for type declarations?
Could I follow the type declaration with the pragma? Also, I need to
conditionally have a with clause. For example, if using Ada 2005, I
need a line like this:

with Ada.Numerics.Long_Real_Arrays;
use Ada.Numerics.Long_Real_Arrays;

(This is where the vector and matrix declarations are.)

Jerry



.



Relevant Pages

  • Re: file copy routine crashes on XP SP2
    ... copy/paste/experiment merchant when it comes to API stuff), ... method seems pretty comon in VB6 code sites. ... Anyway, the routine has ... the new package) This is a bit drastic, ...
    (microsoft.public.vb.general.discussion)
  • Re: Real Time IO routines answering Simon Wright part 2
    ... A few Ada conferences back in the early to ... -- Package must be included with program source code, ... Uses the default Put routine. ...
    (comp.lang.ada)
  • Re: Check for modules presence
    ... import routine that just pushes the name of the package onto array ... array and dies if it's not empty. ... There are a number of issues with it, such as it only detecting missing modules ... that have had their import routine called, but that's what use does anyway. ...
    (perl.beginners)
  • Re: But is it beautiful code?
    ... package similar to the one I posted in 1990. ... I would expect notinit to be set in the cfgspaceroutine. ... determine the return data type. ... Overall, it is reminiscent of an assembly program, so ...
    (comp.programming)
  • Re: who can tell me why
    ... head, maybe you're writing a class which does SQL stuff, and puts things ... Only if you do not specify the package name in front of the class name ... when declaring the variable, ... Why would you routinely specify the package name in a declaration, ...
    (comp.lang.java.programmer)