From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,c099e8bb1678b9a3 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news1.google.com!news.glorb.com!wns13feed!worldnet.att.net!attbi_s04.POSTED!53ab2750!not-for-mail From: "Steve" Newsgroups: comp.lang.ada References: Subject: Re: Accessing Windows environment vairables in ObjectADA on windows X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1437 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441 Message-ID: NNTP-Posting-Host: 24.21.42.251 X-Complaints-To: abuse@comcast.net X-Trace: attbi_s04 1097896176 24.21.42.251 (Sat, 16 Oct 2004 03:09:36 GMT) NNTP-Posting-Date: Sat, 16 Oct 2004 03:09:36 GMT Organization: Comcast Online Date: Sat, 16 Oct 2004 03:09:36 GMT Xref: g2news1.google.com comp.lang.ada:5303 Date: 2004-10-16T03:09:36+00:00 List-Id: Here is an example that works with ObjectAda 7.2.2: with ADA.Text_IO; with Win32; with Win32.WinBase; with Interfaces.C; with Interfaces.C.Strings; procedure GetEnvVar is use type interfaces.c.unsigned_long; use type interfaces.c.size_t; EnvVar : aliased Interfaces.C.Char_Array := Interfaces.C.To_C( "TEST_SOURCE_DIR" ); EnvVal : aliased Interfaces.C.Char_Array(0..99); len : Win32.DWORD; last : Interfaces.C.size_t; begin Len:=100; Len:=Win32.WinBase.GetEnvironmentVariable( EnvVar(0)'unchecked_access, EnvVal(0)'unchecked_access, EnvVal'Length); if Len > 0 then last := Interfaces.C.size_t( Len - 1 ); Ada.Text_IO.Put_Line( Interfaces.C.To_Ada( EnvVal(0..last) & Interfaces.C.NUL ) ); else Ada.Text_IO.Put_Line( "Env var not found" ); end if; end GetEnvVar; You'll need to include: c:\program files\aonix\objectada\win32ada\binding\lib In the "Normal" directory links, and: c:\program files\aonix\objectada\apilib In the "Linker only" directory links for this example to work. Steve (The Duck) "TARAN TRIPATHI" wrote in message news:b949b6a7.0410142325.3a379563@posting.google.com... > Hi All, > > This is what I have. > > I have a win batch file which sets an environment variable say > "TEST_SOURCE_DIR" > > setlocal > .. > set TEST_SOURCE_DIR=%1 > ... > endlocal > > For the purpose of seeing how to do it I used set TEST_SOURCE_DIR=C:\ > on command prompt to set the variable. > > I have to access this evironment variable in my ADA code. > This is test code I wrote: > > with ADA.Text_IO,System.RTS.Win32; > procedure GetEnvVar is > EnvVal:String(1..100):=(others=>' '); > len:System.RTS.Win32.DWORD:=100; > begin > Len:=System.RTS.Win32.GetEnvironmentVariable("TEST_SOURCE_DIR",EnvVal'Addres s,Len); > Ada.Text_IO.Put_Line(EnvVal); > end GetEnvVar; > > The GetEnvironmentVariable function is defined in System.RTS32.Win32 > packages in Win32INT file. > > The problem is that the GetEnvironmentVariable function returns null > for TEST_SOURCE_DIR but gives the correct value for all other Env > variables like HOME, ALLUSERSPROFILE,APPDATA, PROCESSOR_ARCHITECTURE > etc, but never for TEST_SOURCE_DIR. > > Also the funnier thing is that if I donot catch the return value of > GetEnvironmentVariable funtion and use it as such > System.RTS.Win32.GetEnvironmentVariable("TEST_SOURCE_DIR",EnvVal'Address,Len ); > I get a compiler error > " Error: line 34 col 19 LRM:5.1(4), Procedure call, entry call, or > code statement expected, Continuing " > which relates to BNF for simple statement. I believe we need not > necessarily capture the return value of any function(?) > > Does the variable being local or system variable make any difference? > > I googled many a times for this but no help. I've looked around at > FAQ's and the > adahome reference pages, but I haven't found anything. > I an using ObjectAda 7.2 on Windows NT. > > I'm not supposed to use florist package or POSIX/ADA interface. Even a > C library is not assured so that I can use #pragma > Interface(C,getenv). > I have to use the GetEnvironmentVariable function. > > Any help or pointers would be appreciated. > Thanx in advance. > > Regards, > Taran.