Gambas op Programming Language News

Op Programming Language News kondigden ze Gambas 2.6 aan op “http://plnews.org/posts/gambas_26_released_20080512_060951.html” May 12, 2008.
Gambas is er een vast onderwerp in de “http://plnews.org/category/Languages__BASIC/” rubriek BASIC.



Update 2011: de plnews.org website blijkt helaas verdwenen….
links afgekoppeld; citaat uit http://web.archive.org/web/20081216002426/http://plnews.org/category/Languages__BASIC/ hieronder:

PLNews: Programming Language News
News, articles, announcements and information focusing on computer programming languages and their implementations.
[Page 6] Older
December 09, 2008
REALbasic 2008 Release 5 Released
Posted: 2008-12-09 07:28:23
Languages :: BASIC

REALbasic 2008 Release 5 has been released. REALbasic is an object-oriented BASIC dialect and development environment, supporting Windows, Mac OS X, and Linux.

This release includes: support for printing source code in colour, improved auto-complete support, bug fixes, and other changes.
November 27, 2008
Run BASIC v1.01 Released
Posted: 2008-11-27 19:35:01
Languages :: BASIC

Run BASIC v1.01 has been released. Run BASIC is a Web-based BASIC implementation built upon Liberty BASIC.

This release includes a free edition for personal use.
October 31, 2008
Gambas 2.9.0 Released
Posted: 2008-10-31 06:18:40
Languages :: BASIC

Gambas 2.9.0 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: IDE improvements, networking component fixes, Gambas Server Pages, bug fixes, and other changes.
September 23, 2008
REALbasic 2008 Release 4 Released
Posted: 2008-09-23 20:35:37
Languages :: BASIC

REALbasic 2008 Release 4 has been released. REALbasic is an object-oriented BASIC dialect and development environment, supporting Windows, Mac OS X, and Linux.

This release includes: support for tab stops, development environment improvements, new warnings, support for constants in declarations, support for digitally signing applications on Mac OS X, bug fixes, and other changes.
August 30, 2008
Gambas 2.8.2 Released
Posted: 2008-08-30 20:41:21
Languages :: BASIC

Gambas 2.8.2 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: the completion of the Simplified Chinese translation, working bit manipulation functions, IDE improvements, and other changes.
August 25, 2008
Gambas 2.8.1 Released
Posted: 2008-08-25 06:16:59
Languages :: BASIC

Gambas 2.8.1 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes bug fixes.
August 18, 2008
Gambas 2.8 Released
Posted: 2008-08-18 06:20:26
Languages :: BASIC

Gambas 2.8 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: support for compilation using GCC 4.3, IDE improvements, updated translations, bug fixes, and other changes.
July 24, 2008
REALbasic 2008 Release 3.1 Released
Posted: 2008-07-24 06:27:12
Languages :: BASIC

REALbasic 2008 Release 3.1 has been released. REALbasic is an object-oriented BASIC dialect and development environment, supporting Windows, Mac OS X, and Linux.

This release includes bug fixes.
May 12, 2008
Gambas 2.6 Released
Posted: 2008-05-12 06:09:51
Languages :: BASIC

Gambas 2.6 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: IDE improvements and fixes, the correct handling of symbol polymorphism with inheritance depths greater than two, memory leak fixes, bug fixes, and other changes.
April 22, 2008
FreeBASIC 0.18.5 Beta Released
Posted: 2008-04-22 06:11:32
Languages :: BASIC

FreeBASIC 0.18.5 Beta has been released. FreeBASIC is an open-source BASIC compiler offering compatibility with Microsoft QuickBasic, while also adding features such as inline assembly, pointers, unsigned data types, and more.

This release includes: installation changes, bug fixes, and other changes.
April 06, 2008
Gambas 2.5 Released
Posted: 2008-04-06 09:59:31
Languages :: BASIC

Gambas 2.5 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: updated Spanish translations, IDE improvements, and other changes.
March 14, 2008
Gambas 2.3 Released
Posted: 2008-03-14 06:19:12
Languages :: BASIC

Gambas 2.3 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: IDE support for creating Debian and Ubuntu packages for component projects, the opening of device files by the interpreter in non-blocking mode, updates to the MySQL database driver, and other changes.
February 22, 2008
Gambas 2.1 Released
Posted: 2008-02-22 06:19:10
Languages :: BASIC

Gambas 2.1 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: support for 64-bit systems, support for OpenBSD, IDE improvements, bug fixes, and other changes.
January 16, 2008
REALbasic 2008 Release 1 Announced
Posted: 2008-01-16 06:13:45
Languages :: BASIC

REALbasic 2008 Release 1 has been announced. REALbasic is an object-oriented BASIC dialect and development environment, supporting Windows, Mac OS X, and Linux.

This release will include: support for introspection, additional language features and other improvements.
January 14, 2008
BBC BASIC for Windows 5.80a Released
Posted: 2008-01-14 21:42:38
Languages :: BASIC

BBC BASIC for Windows 5.80a has been released. It is a BBC BASIC implementation for Windows systems.

This release includes: improved support for console programs, improved QBasic compatibility, support for high-numbered I/O devices, support for right-to-left printing languages, bug fixes, and other changes.
January 06, 2008
Run BASIC Personal Server v1.0 Released
Posted: 2008-01-06 09:50:56
Languages :: BASIC

Run BASIC Personal Server v1.0 has been released. Run BASIC is a Web-based BASIC implementation built upon Liberty BASIC.
January 04, 2008
FreeBASIC 0.18.3b Released
Posted: 2008-01-04 21:49:49
Languages :: BASIC

FreeBASIC 0.18.3b has been released. FreeBASIC is an open-source BASIC compiler offering compatibility with Microsoft QuickBasic, while also adding features such as inline assembly, pointers, unsigned data types, and more.

This release includes: support for CONST qualifiers, improved QuickBasic compatibility, bug fixes, and other changes.
December 19, 2007
Gambas 2.0 RC2 Released
Posted: 2007-12-19 21:27:29
Languages :: BASIC

Gambas 2.0 RC2 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: improvements to the development environment, support for displaying rich text in GridView cells, and Observer class support for catching events after they have been processed.
November 14, 2007
Gambas 1.9.91 Released
Posted: 2007-11-14 06:21:00
Languages :: BASIC

Gambas 1.9.91 has been released. Gambas is a development environment and BASIC-like language implementation with object-oriented extensions.

This release includes: support for using Gambas as a scripting language, improvements to the IDE icon editor, enhancements to the gb.pdf component, and interpreter support for returning error stacktraces.
October 24, 2007
Visual Basic Language Specification 9.0 (Beta 2) Available
Posted: 2007-10-24 06:25:00
Languages :: BASIC

The Visual Basic Language Specification 9.0 (Beta 2) document is now available. “The Visual Basic Language Specification provides a complete description of the Visual Basic language 9.0.”

Instellingen of configuratiebestand

Gambas heeft een bibliotheek voor het gebruiken van een configuratiebestand, en die krijg je door bij de eigenschappen van het project de gb.settings component aan te duiden.

In code vraag je een waarde zo op:

ME.iBoven = Settings["Venster/Boven", ME.iBoven]
ME.iLinks = Settings["Venster/Links", ME.iLinks]
...

Er zitten herkenbare elementen in de werkwijze van het configuratiebestand, als een herkenbare hoofding en naam=waarde elementen:

...
[Venster]
Boven=13
Links=18
Hoogte=154
Breedte=235
...

Met Settings kan de waarde even gemakkelijk bewaard worden:

..
Settings["Venster/Boven"] = ME.iBoven
...

Je kan waarden ophalen, bewaren, vergeten, terughalen en wegschrijven.

Het gebruik wordt summier omschreven in de gambas Settings documentatie.

Een voorbeeld is de Gambas IDE zelf, met in /home/username/.config/gambas/gambas2.conf zijn instellingen.

Daarin zie je ook arrays in zowel de waarde als de naam:

[FColorChooser]
Geometry=[493,333,294,357]
...
File[1]="/home/username/Data/GambasPrj/Dev/Hello"
File[2]="/home/username/Data/GambasPrj/MyExamples/SimpleCharts"
...

Zo kijk je na waar het staat – steek de code bv onder een button_Click():

PRINT File.Load(Settings.path &/ Application.Name & ".conf")
CATCH
  Message.Error(Error.Text & " fout met config - bestaat niet? ")


De waarde van Settings.path is niet wijzigbaar (tenzij je een eigen settings object maakt).

Het configuratiebestand wordt niet automatisch aangemaakt, dus zal in eerste instantie niet bestaan.
Het moet nochtans niet zelf als leeg bestand gecreëerd worden. (ps: wat als een opgegeven directory nog niet bestaat?)

Met Settings.Save wordt het gemaakt, maar ook dan pas als er iets te bewaren valt, bv na het commando om de instellingen van het huidige venster (ME) te bewaren: Settings.Write(ME).

code onder een button btTest:

PUBLIC SUB btTest_Click()
   Message.Info("settings staan hier: " & Settings.Path)
   Settings.Write(ME)
   Settings.Save()
   CATCH
     Message.Error(Error.Text)
END

Het config bestand bevat daarna dan bv:

[FMain]
Geometry=[0,0,742,798]

Er zijn 2 manieren om instellingen te bewaren:

  • object, automatisch :
    Voor Window objecten kan je instellingen bewaren en opvragen met eenvoudige .Write en .Read
  • eigen parameters: sTeststring = Settings["Factuur/Laatstenummer"] om op te vragen en
    Settings["Factuur/Laatstenummer"] = sTeststring om op te halen.

Eens het bestand bestaat kan je er altijd parameters bij in zetten. In je code:

Settings["Factuur/Laatstenummer"] = "08001234"
Settings["Versie/Versienummer"] = "v1.0"
Settings["Versie/Serienummer"] = "-0001"

.. verandert het laatste factuurnummer en voegt (als het nog niet bestond) een hoofdstuk Versie toe met de parameters Versienummer en Serienummer.

Gambas broncode uitwisselen

Aangezien alles van een gambas programma of gambas project in 1 mapje staat, lijkt het zo eenvoudig als die ene map te kopieren.
Als je niet oplet heb je echter de “verborgen bestanden en – mappen” niet mee.
Die beginnen met een punt zoals .project en .settings en de vertalingen in .lang directory.

Make Archive

Maar Gambas heeft zelf een ingebouwde hulp:
Menu
Project
Make
Source Archive.

Dat maakt een mooi ingepakt broncode pakket in de typische linux-vorm:
tar.gz
dat op een site ter download gezet kan worden (of e-mail, cd,…).

Na download (bewaard als bestand) uitpakken met
tar -xzvf naamvanbestand.tar.gz

Of je kan met Konqueror de bestanden er uit kopieren naar de plaats waar je Gambas projecten staan (Konqueror kan “in” het tar.gz bestand “kijken”).

Objecten in Gambas: Hoe?

Ik probeer een zicht te krijgen op classes en objecten in Gambas. Er is een wel heel beperkt voorbeeld in de GUI aanwezig (Object – by juergen) waar een object met publieke string en integers wordt gemaakt (create) en vernietigd (destroy)
In de IDE wordt met een knop een object gemaakt en een waarde gegeven voor Name:
PUBLIC SUB btnCreateThing_Click()
myThing = NEW ClsThing
myThing.Name = "Dummy-Thing"

De class van het object, ClsThing:
' Gambas class file

PUBLIC Name AS String
PUBLIC X AS Integer
PUBLIC Y AS Integer
PUBLIC ID AS Integer

PUBLIC SUB tellaboutme() AS String

RETURN "I am: " & ME.Name & ", X= " & ME.X & ", Y= " & ME.Y & ", ID= " & ME.ID

END

De methode “tellaboutme” heb ik toegevoegd.

Nog uit te zoeken:
– hoe property initialiseren met een waarde (bv de X en de Y)
– hoe properties alleen leesbaar – niet wijzigbaar maken
(door ze onzichtbaar te maken en method voor uitlezen te gebruiken?)
– hoe zoiets als die ID als een serienummer van het object op een automatische manier laten initialiseren of toekennen bij creatie?
– hoe een verzameling van objecten maken, meer bepaald een array van objecten?
– hoe objecten opslaan (persistance?)

Er zijn volgens de documentatie een aantal speciale methodes vastgelegd:

_init Class initializatie.
_exit Class opkuisen.
_new Object instanciation.
_free Object vrijgeven.
_next Object or class enumeration.
_get Array read operator (lezen).
_put Array write operator (schrijven).
_call Om object of de class te gebruiken als een methode.
_unknown Een onbekende methode of eigenschap aanroepen.

Toegevoegd aan bovenstaand voorbeeld: zichtbaarheid en initialisatie van properties: screenshot en code:

Object, voorbeeld

de class: ClsThing:

' Gambas class file

PUBLIC sName AS String
PUBLIC iX AS Integer
PUBLIC iY AS Integer
PUBLIC iID AS Integer

PRIVATE iZ AS Integer
PRIVATE iSecret AS Integer

PUBLIC SUB _new()
  
  iZ = 5
  iSecret = 7
  iId = 1
  
END


PRIVATE SUB getSecret() AS Integer
  
  RETURN iSecret
  '  seems that the simple return function is not needed in the class as iSecret is reachable in the class
  ' from outside it is needed, but then the function must be public as with the next example of iZ:
  
END


PUBLIC SUB getZ() AS Integer
  
  RETURN iZ
  
END


PUBLIC SUB tellaboutme() AS String
  
  RETURN "I am: " & ME.sName & ", X= " & ME.iX & ", Y= " & ME.iY & ", Z= " & ME.getZ() & ", ID= " & ME.iID & " my secret is: " & iSecret
  
END

PUBLIC SUB increaseme(OPTIONAL i AS Integer)
  
  INC ME.iX
  INC ME.iY
  
END


en de form:FMain


' Gambas class file

PUBLIC myThing AS ClsThing

STATIC PUBLIC SUB Main()
  DIM myForm AS Form
  myForm = NEW FStart
  myForm.Show
END

PUBLIC SUB btCreateThing_Click()
  myThing = NEW ClsThing
  myThing.sName = "Dummy-Thing"
  ' properties reacheable from outside:
  mything.iX = 11
  mything.iY = 22
  mything.iID = 33 ' overwrites initialisation 
  txlbCheckResult.Text = "Created"
  txlbCheckResult.Visible = TRUE
  txlbCheckResult2.Text = ""
END

PUBLIC SUB btCheckThing_Click()
  txlbCheckResult.Text = myThing.sName & ", X= " & myThing.iX & ", Y= " & myThing.iY & ", ID= " & myThing.iID
'  iZ is not visible outside the class: (error: unknown symbol iZ in class ClsThing)
'  txlbCheckResult.Text &= ", Z= " & myThing.iZ
'  get it with a public method:
  txlbCheckResult.Text &= ", Z= " & myThing.getZ()
'  iSecret is not visible outside the class ..
'  txlbCheckResult.Text &= ", Secret = " & myThing.iSecret
'  .. and also the method is not visible (not public):
'  txlbCheckResult.Text &= ", Z= " & myThing.getSecret()
'  no way to get iSecret!  But it might -indirect- show up somehow:
  txlbCheckResult2.Text = myThing.tellaboutme()
CATCH
  Message(Error.Text)
END

PUBLIC SUB btDestroy_Click()
  myThing = NULL
  txlbCheckResult.Visible = FALSE
END



PUBLIC SUB Form_Open()

  

END

PUBLIC SUB btExit_Click()

  ME.Close

END

PUBLIC SUB btPlus_Click()

  myThing.increaseme()

END


Screenshot :

Object, voorbeeld

Probeer even samen te vatten:
Maak een classe:

  1. Maak een Class bij Classes, begint met C bv CProduct
  2. Er zijn automatisch een aantal _ bewerkingen gedefinieerd, zoals _init ( zie Gambas objects documentatie)
  3. Maak private objecten voor gebruik binnen de classe (bv een identity)
  4. Gebruik die waarden door een PUBLIC SUB te maken die de waarde teruggeeft
  5. Maak PUBLIC variabelen die rechtstreeks aangesproken mogen worden van buitenaf, bv een boolean switch “isValid”.
  6. Persisence: schrijf eventueel de database code in een externe Module; bv MData; je kan die dan aanpassen aan de gebruikte database zonder de objecten te wijzigen. Vanuit de classe spreek je die externe module aan; dus ze moet wel bestaan natuurlijk!

Declareer het object van die classe.
bv

PRIVATE hProduct AS CProduct

Maak er een variabele van:
bv

$hProduct = NEW CProduct

Als dat gebeurd is in de FMain kan je die aanspreken van elders met:
bv als name public is in de classe:

FMain.$hProduct.name

Gambas 2.6 op Suse 10.3

Hierbij log van weer een Gambas install (hier algemene uitleg van Gambasdoc zelf: gambas install)

  • Verse install van OpenSuse 10.3 van DVD (Linux User & Developer Issue 75 – geen datum vermeld), Zowat standaard KDE install, met Quanta (KDE Webdev), mc (midnight commander).
  • Yast, Extra bronnen: community, main oss, non-oss, update, packman (Om alle nodige paketten te installeren waar Gambas afhankelijk van is)
  • run Online update (Om alles up to date te maken)
    eerste is yast2 zelf.
    Daarna grote update inclusief kernel update
  • Gambas afhalen; ofwel van een openSuse repository ofwel van gambas.sourceforge.net (momenteel versie gambas2-2.6.0.tar.bz2; komt ook van pas om de broncode te doorzoeken)
  • Hier is een repository: http://download.opensuse.org/repositories/home:/gbvalor/
    ingevuld in Yast in drie delen:
    http://
    download.opensuse.org
    repositories/home:/gbvalor/openSUSE_10.3/
    Repository toegevoegd, ok, key accepteren.
  • Software management, zoek “gambas”, geeft hele lijst gambas2 onderdelen. gambas2 blijkt versie 2.6.0-1.1 te zijn van Sat 10 May 2008 06:51:22 PM CEST (dus nu slechts 7 dagen oud)
    Rechts klik, All in this list, Install
    Bijkomend geselecteerd door Yast:
    libffi42
    libsvg
    lirc
    postgresql
    tv-common
    v4l-tools

    Development, Integrated Environment, Gambas2 (met te grof logo; ik verving het door een download van deze logo gambas2)
  • Gambas start met een klik in het menu; versie 2.6

Eenvoudige grafieken met Gambas2

Article op Linux.com: “Creating simple charts with Gambas 2.0” van 12 december 2007 door Mark Alexander Bain.
Hij volgt een aantal conventies niet, en dat maakt de code moeilijker te lezen:
– Het type van een variabele wordt in Gambas aangegeven door een beginletter (bv iGetal, sNaam, …)
– Hij gebruikt in de namen van de variabelen veel “underscores” om twee delen van een woord te scheiden en die zo leesbaarder te maken. Maar in Gambas heeft die underscore een andere betekenis en wordt met hoofdletters in de woorden gewerkt, hoewel de underscores geen fouten geven in Gambas.
– Omdat er nogal veel met x en y coordinaten gewerkt wordt is het nodig meer betekenisvolle namen te geven.
x_string wordt dan sTitleX ; met 1 letter minder zeg je meer.

Hieronder (een stukje) “vertaalde” broncode:


' Gambas class file

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

  drawChart()
  
END

SUB drawChart()
  
  DIM iOriginX AS Integer
  DIM iOriginY AS Integer
  DIM iMaxX AS Integer
  DIM iMaxY AS Integer
  DIM sTitleX AS String
  DIM sTitleY AS String
  
  'Initialize 
  DrawingArea1.Clear
  draw.Begin(DrawingArea1)
  
  ' Axis titles text
  sTitleX = "Value"
  sTitleY = "Date"
  
  ' Origin
  iOriginX = Len(sTitleX) * 10
  iOriginY = DrawingArea1.ClientH - 30
  
  ' Axis length
  iMaxX = DrawingArea1.Width
  iMaxY = DrawingArea1.Height * -1
  
  ' Axis draw
  draw.Line(iOriginX, iOriginY, iMaxX, iOriginY)
  draw.Line(iOriginX, iOriginY, iOriginX, iMaxY)
  
  ' Axis titles
  draw.Text(sTitleX, 0, iOriginY + iMaxY * 0.90)
  draw.Text(sTitleY, iMaxX * 0.90, iOriginY + 10) 
  
  draw.End
  
END

Vertalen van een project in Gambas

– Kies de eigenschappen van je project Project, Properties, tab Options, en kijk bij Translation. Daar staat of je project vertaalbaar is (verzet naar Yes), en welke de basistaal is (bv English, United Kingdom).
– Indien vertaalbaar kan je bij Project, Translate kiezen (of het vlaggensymbool in de knoppenbalk).

In mijn geval leidde dat tot volgende foutmelding:

Cannot read translation file for language ‘English (U.S.A.)’
File already exists
sh: msgmerge: command not found

De help zegt:
How To Translate A Gambas Project
To translate a project into your own language, open it in the IDE, and click on translate… in the Project menu. (If the IDE complains about msgmerge, make sure you have GNU gettext on your computer)

Ik installeer
Gettext-devel – Tools for Native Language Support (NLS)

Daarna werkt de vertaalfunctie wel en krijg je een venster. Van elke te vertalen stuk tekst wordt getoond uit welke module het afkomstig is, en vanop welk regelnummer.
Links staan de originele teksten, rechts kan je de vertalingen invullen:

Vertalen in Gambas

De taal-onderdelen komen terecht in een subdirectorie in je Gambas project:
.lang

vertaalfiles
Daarin zie je de files met de vertalingen herkenbaar aan hun naam “en_us”, “nl_be” enz, en andere bestanden blijkbaar per module, form …
In de .pot bestanden (zoals FMain.pot) komt bovenaan de hele directory structuur /home/gebruikersnaam/… leesbaar voor; denk daaraan bij verspreiding!

Als je de resultaten wil uitproberen zonder je “eigen” taal te verzetten, kan je de taal over je eigen taal kopieren. Maak eerst een vertaling van bv 1 woord naar de “eigen” taal.
(“eigen” taal = taal ingesteld in je werkomgeving; kan bv Engels zijn, of Nederlands, zie systeemmenu’s)

Veronderstel:
– Taal van de Gambas toepassing: Engels (UK) zie project properties, language, default language.
– Taal van je omgeving (KDE): Engels (US) zie keuze bij installatie van je Linux distributie.
– Taal van de vertaling: Nederlands (BE).

Sluit Gambas en
1. Verwijder en_US.po en en_US.mo.
2. Kopieer nl_BE.po naar en_US.po
3. Kopieer nl_BE.mo naar en_US.mo
Start het programma terug op.

Gambas “2″ op KUbuntu 8.4?

Ondertussen is Gambas doorgedrongen tot de Ubuntu softwareverzameling. In Kmenu, Add/Remove software (“adept installer”), zoek “Gambas”: Gambas 2 aanklikken, installatie bevestigen.
“Installation Complete” (Quit)

Helaas weer de Ubuntu-way: je kan hier niet zien welke versie het exact is. Na installatie krijg ik nog altijd de 1.9.91 versie van Gambas.
Daarom eerst een “uninstall” en dan een “install” vanuit het software management pakket (add/remove software).
Het blijft versie 1.9.91…

Er staat uitleg op http://gambas.gnulinex.org/ubuntu/ hoe de daar vermelde packages te gebruiken:
– wijzigen van de lijst met servers in

/etc/apt/sources.list

bv door een terminal te openen en sudo mc, daar in /etc/apt/ het bestand sources.list zoeken en met F4 (edit) openen

Een lijn toevoegen met (althans voor versie 8.4 “Hardy” – zie de pagina voor andere versies)

deb http://azores.linex.org/gambas-other/ hardy main

Daarna nog altijd op de command prompt:
sudo apt-get update

Uiteindelijk:
sudo apt-get install gambas2

Dat sluit af met
Setting up gambas2 (2.5-1ubuntu1) …

Maar als Gambas gestart wordt geeft die vreemd genoeg versie 1.9!

Ps: het is een KUbuntu na upgrade van 7.10 naar 8.4.