Hello Gambas users and developers! I'm working on a module for Gambas, fully written in Gambas language, which aims to provide full access to the X Window System's Xlib library through a high-level Gambas-ish interface. I'm in the very beginning, but I've been making progress and so far I've implemented 9% of the features of the C language X interface as described in [1].
However, I'm facing a major problem that needs to be addressed before I get too far. Let's take a look at a particular instance of it. Various Xlib functions accept or return a C 'long' data-type parameter. GCC reports that on my x86 machine 'long' is 4 bytes wide while on my x86_64 machine it's 8 bytes wide instead. AFAIK, Gambas 'Integer' and 'Long' data-type are always 4 and 8 bytes wide, respectively, regardless of architecture. How can I cope with that when declaring external functions and structures? The only solution I could think of is to use Gambas' preprocessor directives, but it isn't practical to put a preprocessor conditional again and again every time I'm declaring something which uses the same C language type: I'd have to do that several hundreds of times! So, I'd suggest to provide absolute C data type equivalents to 'char', 'short', 'int', 'long', 'long long', 'float', 'double' and 'long double', so we could interface smoothly with C libraries and write robust and easy to maintain components for Gambas, entirely in Gambas language. In this case the C compiler would decide what's the wideness of each data type at Gambas' compilation time. One suggestion for their names is: "CChar", "CShort", "CInt", "CLong", "CLongLong", "CFloat", "CDouble" and "CLongDouble". This feature alone would be a great improvement, but not enough. Within C libraries it's a common practice to define conditionally new data types in terms of the native ones. In order to have a complete environment to interface with external libraries inside Gambas, we also need a way to make aliases to native Gambas' data types conditionally. It could well be a preprocessor facility, but that isn't required at all. I'd suggest something that looks like: #If ARCH = "x86" # AliasType("CLong", "XID") #Else # AliasType("CInt", "XID") #Endif #AliasType("XID", "WindowID") #AliasType("XID", "FontID") Thanks in advance. Footnotes: [1] http://www.x.org/releases/X11R7.7/doc/libX11/libX11/libX11.html [2] Like 'Window', 'Font', 'Pixmap', 'Colormap', 'Cursor' and 'GContext'. -- ,= ,-_-. =. Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF] ((_/)o o(\_)) There is no system but GNU; `-'(. .)`-' GNU Linux-Libre is one of its official kernels; \_/ All software must be free as in freedom;
signature.asc
Description: PGP signature
------------------------------------------------------------------------------ Start Your Social Network Today - Download eXo Platform Build your Enterprise Intranet with eXo Platform Software Java Based Open Source Intranet - Social, Extensible, Cloud Ready Get Started Now And Turn Your Intranet Into A Collaboration Platform http://p.sf.net/sfu/ExoPlatform
_______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user