Have you looked at the documentation for nativecall? It has a tutorial
example on how to access a c function from a standard library.

I wrote that little bit. It should answer most of your questions.

Richard

On Sat, 15 Sep 2018, 04:52 ToddAndMargo, <toddandma...@zoho.com> wrote:

> Hi Larry and Friends,
>
> Fedora 28
>
> `NativeCall` is a total mystery to me.
>
> I asked the guys on they "C" newsgroup how they
> did it and they only got crabby with me.
>
> Sometimes an example is work a 1000 words. Would you mind
> throwing together an example of how to use NativeCall
> to talk to XGetWindowAttributes?
>
> man XGetWindowAttributes
>
> https://tronche.com/gui/x/xlib/window-information/XGetWindowAttributes.html
>
> The last time I tried this, I had to press Power On Reset
> (POR) on my CPU.  So I stopped trying.
>
> So far, I have managed to get this to work, but more
> complicated than that and it is the magic one finger
> reset:
>
> sub GetXDisplay () is export {
> #`{
>      reference: man XDisplayName
>      char *XDisplayName(char *string);
>      sub display-name(Str:D $name) is native('X11') is
> symbol("XDisplayName") { * }
>
>      reference:
>
> https://tronche.com/gui/x/xlib/event-handling/protocol-errors/XDisplayName.html
>          The XDisplayName() function returns the name of the display
> that XOpenDisplay()
>          would attempt to use. If a NULL string is specified,
> XDisplayName() looks in the
>          environment for the display and returns the display name that
> XOpenDisplay() would
>          attempt to use. This makes it easier to report to the user
> precisely which display
>          the program attempted to open when the initial connection
> attempt failed.
> }
>
>     my $Display;
>     my $NullStr; # Do not initialize this guy!
>
>     # char *XDisplayName(char *string);
>     sub XDisplayName(Str:D $name) is native('X11') returns Str { * };
>
>     $Display = XDisplayName( $NullStr );
>     return $Display;
> }
>
>
> Many thanks,
> -T
>
>
> XGetWindowAttributes:
>
> typedef struct {
>         int x, y;                       /* location of window */
>         int width, height;              /* width and height of window */
>         int border_width;               /* border width of window */
>         int depth;                      /* depth of window */
>         Visual *visual;                 /* the associated visual structure
> */
>         Window root;                    /* root of screen containing
> window */
>         int class;                      /* InputOutput, InputOnly*/
>         int bit_gravity;                /* one of the bit gravity values */
>         int win_gravity;                /* one of the window gravity
> values */
>         int backing_store;              /* NotUseful, WhenMapped, Always */
>         unsigned long backing_planes;   /* planes to be preserved if
> possible */
>         unsigned long backing_pixel;    /* value to be used when restoring
> planes */
>         Bool save_under;                /* boolean, should bits under be
> saved? */
>         Colormap colormap;              /* color map to be associated with
> window */
>         Bool map_installed;             /* boolean, is color map currently
> installed*/
>         int map_state;                  /* IsUnmapped, IsUnviewable,
> IsViewable */
>         long all_event_masks;           /* set of events all people have
> interest in*/
>         long your_event_mask;           /* my event mask */
>         long do_not_propagate_mask;     /* set of events that should not
> propagate */
>         Bool override_redirect;         /* boolean value for
> override-redirect */
>         Screen *screen;                 /* back pointer to correct screen
> */
> } XWindowAttributes;
>

Reply via email to