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; >