[Gambas-user] BUG Install on mandriva

Benoît Minisini gambas at ...1...
Sun Jul 25 20:25:05 CEST 2010

> Benoît Minisini ha scritto:
> >> Now, the single file that should be a link it's easy to correct. But, a
> >> line saying "link ../component.am" in the middle of a makefile is
> >> different: the makefile is generated by ./configure; where are the
> >> instructions that make configure think to do such a thing? Otherwise, I
> >> can give up for today, and try to download something else next week. I
> >> am reluctant to use svn because I must put my hands onto a production
> >> machine: it's not terrible, but at first, I decided not to do it: to
> >> download a tarball should be trivial.
> > 
> > I see: you must use a svn client to extract the sources.
> > 
> > What you are downloading is an image of the subversion repository, which
> > is the way the subversion server internally stores the data. Useful if
> > you want to duplicate the repository, not useful if you want to compile
> > the sources.
> > 
> > You can do the checkout, and then compress it into a *.tag.gz before
> > bringing it home.
> Well: ignoring as usual all the advices I've received (my head is harder
> than my computer screen), I managed to compile gambas3. Some comments
> follow, and by no mean they have the sole purpose to criticize; instead,
> giving that gambas3 is still open to modifications, may be that some
> idea can be stimulating.
> Me and others got caught in the same pit - building of gambas3.gambas
> succeeds even if some required component is missing. While it is true
> that examining logs or paying attention to the compilation process this
> pit could be avoided, may be that a better-planned compilation process
> could solve more coherently. Just a thought.

Yes, but how? If the compilation of the IDE fails, this is not an error. You 
may want to compile gambas without the IDE.

I have started to collect some warnings so that they are printed at the end of 
the configuration process. Maybe I could add a warning if for sure the IDE 
won't be compiled because some component is missing?

> After having launched gambas3 I went to the preferences to see how much
> I could taylor it to my needs. It seems that the preferred way to set
> preferences is to let the user choose among a few choices. For some
> things like the font size, "Normal, small, smaller" could be enough (but
> not always); 

I don't understand: what is the problem with that configuration?

> when choosing the terminal emulator I see konsole, gnome
> terminal, xfce, xterm. No one of them is installed, in my (strictly
> mine) opinion, they all suck.

No problem, this option is not used anymore! Instead the xdg scripts are used, 
so that the opened terminal is the one associated without your desktop. I 
don't know which terminal will be used on your system then.

> Then I loaded my experimental "Gambas drum machine", where I am
> developing an ALSA interface class. The first run attempt gave me an
> error because, it seems, there is no more support for reading/writing to
> pointers. 
> Is this planned? 

The way for accessing memory has changed in Gambas 3.

1) The old way, like Gambas 2: use the MEMORY keyword to open a stream on a 
memory address.

2) The new way, a bunch of functions to read directly a value at a memory 
address: BytePtr(), ShortPtr(), IntPtr(), and so on.

3) Support for C-like structures with the STRUCT keyword.

Read the wiki about all these keywords and functions for the details.

> This seems to be a back-compatibility break.

Yes it is. But no features disappeared and new ones were added, so logically 
you will see the light sooner or later!

> While searching for help about that, I noticed that there is no help
> around - I will have to get it separately. 

As generating an online help is time-consuming and always out-of-date, I don't 
do it anymore. The help needs internet now. But:

1) This may change in the future, after the first release candidate.

2) You can use a web spider to generate the online help, but it takes a long 
time, there are a lot of pages, even if you download the english pages only.

> Then I thought "ok, let's use
> the new gambas3 capabilities...". But it would be better to have a way
> to write code compatible to both gambas2 and gambas3 (conditional
> compilation?). 

Alas it is more complex than that. Behind most of the syntax changes you have 
an internal feature change. I have just the time to enhance gambas, but hardly 
the time to write a Gambas2 -> Gambas3 translator!

But you can help there: by just taking notes while doing the conversion, we 
will be able to write a document about what to do to convert a Gambas 2 
project to a Gambas 3 project.

> Unfortunately, the CAlsa class is full of pointer
> playing. Anyway, I tried to do a little step ahead. I have a call to
> initialize alsa:
>     int snd_seq_open(snd_seq_t **seqp, const char * name, Int streams,
> Int mode);
> The first parameter requires a pointer to a pointer, and this is why in
> the gambas2 version I used a pointer to read from. But now, I wrote:
>     Private Extern snd_seq_open(ByRef Pseq As Pointer, name As String,
> streams As Integer, mode As Integer) As Integer
> This declaration is later used by:
>       err = snd_seq_open(handle, "default", SND_SEQ_OPEN_DUPLEX, 0)
>         --or--
>       err = snd_seq_open(byref handle, "default", SND_SEQ_OPEN_DUPLEX, 0)
> Both statements die with error #6. This two lines work:
>     ret = VarPtr(handle)
>     err = snd_seq_open(ret, "default", SND_SEQ_OPEN_DUPLEX, 0)
> It seems that "byref" is ignored in external declaration, but no error
> is generated.

Yes, Byref is a non-sense for extern declaration. The compiler should raise an 
error and not ignore it.

Apparently, snd_seq_t is an opaque type to a structure. A pointer to a pointer 
is just a Pointer in Gambas. So your declaration must be:

	Private Extern snd_seq_open(Pseq As Pointer, name As String, streams As
		Integer, mode As Integer) As Integer

> Now alsa is correctly initialized, but the rest of the class relies
> heavily on pointers, and I am not ready to convert all that mess into
> gambas structures (have no information about this topic). 

Read the wiki documentation on structures first.

> Moreover,
> doing so would make the source incompatible with gambas2, and I am not
> sure about alignment problems. The pointer way can be ugly, but still
> versatile.

Variables and structure fields are never packed, but aligned to a memory 
boundary required by its memory length (a Short is stored at an odd address, a 
Integer at an address which is a multiple of four, and so on...). The 
declaration is respected, so you may have holes in your structure, if, for 
example, you declare a Byte and just after an Integer.

The *big* problem is that the compiler may reorder the structure fields, and 
that process is not standardized nor documented. Eventually if that is a big 
problem, there may be a solution in the libffi library that apparently can 
send a structure to a C function by taking that problem into account. But that 
library is far less documented by Gambas, so you see the difficulty. :-)

> What should I do now?

Please read all the documentation about structures, new Gambas functions 
related to extern functions... Then come back with more precise questions!


Benoît Minisini

More information about the User mailing list