comp.lang.ada
 help / color / mirror / Atom feed
* Ada and X/Motif
@ 1997-06-03  0:00 markovi
  1997-06-04  0:00 ` Martin C. Carlisle
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: markovi @ 1997-06-03  0:00 UTC (permalink / raw)



-- 
I am programming a user interface in Ada using X/Motif routines. The 
interface between X and Ada is implemented through X bindings.
I have the following problem: to create a colormap, allocate colors
and store a color I call consequently the bindings for 
XCreateColormap, XAllocColorCells and XStoreColor. When these
functions are called in the main ada routine, they work properly.
If I call any (or all) of the above functions in a separate procedure
and then call this procedure in the main routine, the XStoreColor
function does not store the color in the colormap. There is no error
message, just the function does not do what it is supposed to do. Any
help?

Thanks!

------
Uliyana Markova

Array Systems Computing Inc.
1120 Finch Ave.West, 8th floor
Toronto, Ontario M3J 3H7
e-mail: uliyana@array.ca




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ada and X/Motif
  1997-06-03  0:00 Ada and X/Motif markovi
  1997-06-04  0:00 ` Martin C. Carlisle
@ 1997-06-04  0:00 ` jim hopper
  1997-06-09  0:00 ` Christopher Green
  2 siblings, 0 replies; 6+ messages in thread
From: jim hopper @ 1997-06-04  0:00 UTC (permalink / raw)



Have you looked at Xforms?? its a gui builder and library that makes
building x gui's very simple.  there is a nice extension to it that
converts the c code xforms spits out to ada95.  

its available on a wide variety of platforms (shameless plug : I just
ported it to mac for use with gnat on the Mac, download from the xforms
site)  and has excellent documentation.

i know this isn't a direct answer but using this toolkit may allow you
to do what you want with less work.

http://bragg.phys.uwm.edu/xforms  <== xforms home
ftp://ocsystems.com/xada/aforms-0.8.11.tar.gz  <== aforms source
http://www.ocsystems.com/xada/xforms1.html   <== x ada web site

jim hopper

--------

In article <3394CED4.2BF7@interlog.com>
markovi@interlog.com writes:

> I am programming a user interface in Ada using X/Motif routines. The 
> interface between X and Ada is implemented through X bindings.
> I have the following problem: to create a colormap, allocate colors
> and store a color I call consequently the bindings for 
> XCreateColormap, XAllocColorCells and XStoreColor. When these
> functions are called in the main ada routine, they work properly.
> If I call any (or all) of the above functions in a separate procedure
> and then call this procedure in the main routine, the XStoreColor
> function does not store the color in the colormap. There is no error
> message, just the function does not do what it is supposed to do. Any
> help?




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ada and X/Motif
  1997-06-03  0:00 Ada and X/Motif markovi
@ 1997-06-04  0:00 ` Martin C. Carlisle
  1997-06-04  0:00 ` jim hopper
  1997-06-09  0:00 ` Christopher Green
  2 siblings, 0 replies; 6+ messages in thread
From: Martin C. Carlisle @ 1997-06-04  0:00 UTC (permalink / raw)



>If I call any (or all) of the above functions in a separate procedure
>and then call this procedure in the main routine, the XStoreColor
>function does not store the color in the colormap. There is no error
>message, just the function does not do what it is supposed to do. Any
>help?

Given that you don't mention what X binding you are using, this is very
difficult to guess.  I'll venture two suggestions from my experience with
Win32 bindings.

1)  If the binding is yours, you may need to add something like
pragma Convention(Stdcall,XStoreColor);

2)  You may have forgotten to call some important initialization routine
(I had similar behavior under Win32 when I forgot InitCommonControls)

--Martin

-- 
Martin C. Carlisle, Computer Science, US Air Force Academy
mcc@cs.usafa.af.mil, http://www.usafa.af.mil/dfcs/bios/carlisle.html
DISCLAIMER:  This content in no way reflects the opinions, standard or 
policy of the US Air Force Academy or the United States Government.




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ada and X/Motif
  1997-06-03  0:00 Ada and X/Motif markovi
  1997-06-04  0:00 ` Martin C. Carlisle
  1997-06-04  0:00 ` jim hopper
@ 1997-06-09  0:00 ` Christopher Green
  1997-06-10  0:00   ` Uliyana Markova
  1997-06-10  0:00   ` Jeff W. Boote
  2 siblings, 2 replies; 6+ messages in thread
From: Christopher Green @ 1997-06-09  0:00 UTC (permalink / raw)



In article <3394CED4.2BF7@interlog.com>,  Uliyana Markova <markovi@interlog.com> wrote:
>I am programming a user interface in Ada using X/Motif routines. The 
>interface between X and Ada is implemented through X bindings.
>I have the following problem: to create a colormap, allocate colors
>and store a color I call consequently the bindings for 
>XCreateColormap, XAllocColorCells and XStoreColor. When these
>functions are called in the main ada routine, they work properly.
>If I call any (or all) of the above functions in a separate procedure
>and then call this procedure in the main routine, the XStoreColor
>function does not store the color in the colormap. There is no error
>message, just the function does not do what it is supposed to do. Any
>help?

Any chance you could post or email an example, and provide information
on what Ada compiler, set of bindings, and X11 implementation you are 
using? 

Since XStoreColor() does not return a status to indicate whether it
succeeded, the only way to determine whether the color was stored is
to observe it on the display.  For this to happen, the colormap must
also have been installed; XSetWindowColormap() does this (actually,
the window manager detects the colormap change and installs the color-
map).  So either XSetWindowColormap() must also be called in the sub-
program; or the subprogram must return the colormap, and the main pro-
gram must call XSetWindowColormap().

Just as a place to start looking, I'd look for variables that may not be
correctly passed between main and subprogram, or variables that do not 
have an adequate lifetime when the binding functions are called from the 
subprogram.  Remember that many X Window System objects are represented
by C pointers, and a C pointer to a local variable becomes a dangling 
pointer when the subprogram returns.

Chris Green                                  Email cgreen@atc.com
Advanced Technology Center                   Phone (714) 583-9119
22982 Mill Creek Drive                                   ext. 220
Laguna Hills, CA 92653                       Fax   (714) 583-9213




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ada and X/Motif
  1997-06-09  0:00 ` Christopher Green
  1997-06-10  0:00   ` Uliyana Markova
@ 1997-06-10  0:00   ` Jeff W. Boote
  1 sibling, 0 replies; 6+ messages in thread
From: Jeff W. Boote @ 1997-06-10  0:00 UTC (permalink / raw)



Christopher Green (cgreen@yosemite.atc.com) wrote:

:> Since XStoreColor() does not return a status to indicate whether it
:> succeeded, the only way to determine whether the color was stored is
:> to observe it on the display.

Or call XQueryColor.

jeff
--
Jeff W. Boote  <boote@ucar.edu>          ***************************************
Scientific Computing Division            * There are more things in heaven and *
National Center for Atmospheric Research * earth, Horatio, Than are dreamt of  *
Boulder                                  * in your philosophy.          Hamlet *
                                         ***************************************




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ada and X/Motif
  1997-06-09  0:00 ` Christopher Green
@ 1997-06-10  0:00   ` Uliyana Markova
  1997-06-10  0:00   ` Jeff W. Boote
  1 sibling, 0 replies; 6+ messages in thread
From: Uliyana Markova @ 1997-06-10  0:00 UTC (permalink / raw)



Christopher Green wrote:
> 
> In article <3394CED4.2BF7@interlog.com>,  Uliyana Markova <markovi@interlog.com> wrote
:
> >I am programming a user interface in Ada using X/Motif routines. The
> >interface between X and Ada is implemented through X bindings.
> >I have the following problem: to create a colormap, allocate colors
> >and store a color I call consequently the bindings for
> >XCreateColormap, XAllocColorCells and XStoreColor. When these
> >functions are called in the main ada routine, they work properly.
> >If I call any (or all) of the above functions in a separate procedure
> >and then call this procedure in the main routine, the XStoreColor
> >function does not store the color in the colormap. There is no error
> >message, just the function does not do what it is supposed to do. Any
> >help?
> 
> Any chance you could post or email an example, and provide information
> on what Ada compiler, set of bindings, and X11 implementation you are
> using?
 
Thanks a lot for responding. I am sorry I did not specify the versions
on a first place. I am using X11 Release 5, the ada compiler is 
VADSself Version 6.2.3-0 and the ada bindings are downloaded from the
DEC's web site. 
 
Here is an example of one of a version that does not work. 
------------------------------
with X_Lib;
with Xt;
with X;
with Xm_String;
with System;
 
package Color_Pkg is
        procedure Color;
end Color_Pkg;
 
package body Color_Pkg is
 
colormap        : X.Colormap_Type;
pixel_cells     : X_Lib.Vector_Of_Colormap_Index_Type ( 1..256 ) :=
                ( others => X_Lib.Colormap_Index_Init);
 
package Manipulate_Colormap is new Xt.Manipulate_Avt ( 
        X.Colormap_Type );
 
procedure Color is
 
plane_masks     : X_Lib.Vector_Of_Plane_Mask_Type ( 1..0 );
dpy             : X_Lib.Display_Type;
screen_num      : X_Lib.Screen_Number_Type;
Visual_Info     : X_Lib.Visual_Info_Type;
toplevel        : Ip_Toplevel.Toplevel_Widget;
al              : Xt.Arg_List_Type ( 0..0 );
color           : X_Lib.Color_Type;
color_test      : X_Lib.Color_Type;
success         : Boolean;

 
begin
        -- application initialize - create toplevel widget
 
        dpy := Xt.Display ( Xt.Widget_Type ( toplevel) );
 
        screen_num := X_Lib.Screen_Number_Of_Screen (
                        X_Lib.Default_Screen_Of_Display ( dpy ) );
 
        X_Lib.Match_Visual_Info ( success,
                dpy, screen_num, X_Lib.Depth_Type ( 8),
                X_Lib.Pseudo_Color,
                Visual_Info );
 
        if ( success ) then
                colormap := X_Lib.Create_Colormap (
                        dpy,
                        X_Lib.Default_Root_Window ( dpy ),
                        Visual_Info.Visual.all,
                        X_Lib.All_Of_Them );
         end if;
 
        X_Lib.Alloc_Color_Cells (
                success,
                dpy,
                colormap,
                False,
                plane_masks ( 1..0 ),
                pixel_cells );
 
        al ( 0 ) := ( Xm_String.NColormap_Ptr,
                Manipulate_Colormap.To_Avt ( colormap ) );
 
        Xt.Set_Values ( Xt.Widget_Type ( toplevel ),
                        al ( 0..0 ) );
 
        color.pixel := X_Lib.Colormap_Index_Type ( pixel_cells ( 4 ) );
        color.Do_Red := True;
        color.Do_Green := True;
        color.Do_Blue := True;
        color.Red := X_Lib.Color_Intensity_Unsigned_Short_Subtype (
                        65535 );
        color.Green := X_Lib.Color_Intensity_Unsigned_Short_Subtype (
                        0 );
        color.Blue := X_Lib.Color_Intensity_Unsigned_Short_Subtype (
                        0 );
 
        X_Lib.Store_Color (
                dpy,
                colormap,
                color);
 
        color_test.pixel :=  
                X_Lib.Colormap_Index_Type ( pixel_cells ( 4 ) );
 
        -- returns always black color
        X_Lib.Query_Color (
                dpy,
                colormap,
                color1 );
 
        -- realize toplevel and start the event loop
 
end Color;
end Color_Pkg;
 
with Color_Pkg;
procedure Color is
begin
	Color_pkg.Color;
end Color;
 
Note that a new colormap is installed. All it's entries contain the
black color ( r=0, g=0, b=0 ).
 
 
Uliyana Markova
------
Array Systems Computing Inc.
1120 Finch Ave. West, 8th Floor
North York, Ontario, Canada M3J 3H7
Tel.: 416-736-0900 ext 280
e-mail: uliyana@array.ca




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~1997-06-10  0:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-06-03  0:00 Ada and X/Motif markovi
1997-06-04  0:00 ` Martin C. Carlisle
1997-06-04  0:00 ` jim hopper
1997-06-09  0:00 ` Christopher Green
1997-06-10  0:00   ` Uliyana Markova
1997-06-10  0:00   ` Jeff W. Boote

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