[Gambas-user] Correct strategy for VB static var conversion to Gambas?

Brian G brian at westwoodsvcs.com
Sun May 30 16:24:31 CEST 2021


In previous reply I forgot to remove the byval ref in the example

> Regarding creating a separate .mod file for each function and the static
> variables.
> Regarding #pragma suggestion
> 
> ----- On May 30, 2021, at 10:56 AM, Christof Thalhofer chrisml at deganius.de
> wrote:
> 
>> Am 30.05.21 um 03:00 schrieb John Anderson:
>> 
>>> 1A:  For every variable that was put into Globals.mod, we have go back
>>> through all source code and replace every instance of myglobalvar with
>>> Globals.myglobalvar.  As per Gambas instructions.
>>> 
>>> IDEA>>> This would be cool:  Somewhere at top of Globals.mod, you have
>>> something like #Pragma SET_DEFAULT_MODULE TRUE  Or use whatever keyword
>>> or environment variable you like. This tells Gambas to search this
>>> "Default  Module" for any unknown objects it can't find a reference to
>>> in the rest of the project. Now I don't have to go thru code updating
>>> all the myglobalvar names to Globals.myglobalvar - If Gambas comes to a
>>> var object name it doesn't know, it will just go look in the Default
>>> ModuleName to check there.  In other words give the system a "path" to
>>> look for object declares.
> In Gambas it is possible to use a module and a 'With' Statement
> 
> so moving all globals to a single file
> if you scan your original source using a gambas collection finding all the
> globals
> second pass replace the global symbols with .symbol
> 
> Have you looked at the gambas eval.highlight component?
> 
> eg.
> 
> after moving BoardWidth to the globals.mod module as
> 
> public BoardWidth as float = 0.0
> 
> every other module gets
> 
> 'begin module
> with globals
> 
> 'in all modules replace global symbols with  . as the first character
> 
> .boardwidth = 56.56
> 
> 
> end with
> end module
> 
>> 
>> Very, very ugly, I'm against that!
>> 
>> What you encounter is that the old code of 1998 is a very slippery mess
>> (as it was written back then) and as you have to refactor it for Gambas
>> you now see all the places where it is a mess. If you want to tweak
>> Gambas to be messy because your old code is an ugly piece of mess I'm
>> strictly against that.
>> 
>>> 2.  Now we go thru VB6 sources and change all "Double" type declares to
>>> "Float".  Really ??  Is there any way we can get Double type defined as
>>> the same as Float type? It looks like keyword is available according to
>>> docs, and that would make it easier for us VB / C guys to avoid
>>> mistakes.  But whatever.
>> 
>> Refactor the code. You can search/replace throughout the whole project
>> with one click.
>> 
>>> 5.  In the new Mod file, change the Sub/Func/Procedure name to "F" for
>>> function, or "S" for Sub.  The module file name is already the original
>>> actual procedure name.
>> 
>> Sub / Function is historic, but internally they act the same AFAIK. A
>> Sub in Gambas also can return a value:
>> 
>> Sub Sth as Boolean
>>    Return True
>> End
>> 
> 
Given this example
 
Function updateSales(ByVal thisSale As Decimal) As Decimal
   Static totalSales As Decimal = 0
   totalSales += thisSale
   Return totalSales
 End Function
 
Being called as updateSales(777.77)
 
 If you create a new .mod file for each function/sub that contains static
 variables
 The mode file gets the name of the function/sub. Again in gambas sub/functions
 are just aliases of sub.
 eg
 
 updateSales.mod
 
 Then the code should end up looking like
 
 'begin module
 
 private totalSales as float = 0            ' from decimal
 
 public sub _call(thisSale As float) as float ' from decimal
     totalSales += thisSale
     Return totalSales
 end
 
 'end module
 
 You will not have to change or update the names of your functions/subs anywhere
 else in your code.
 Simply reconstruct it into a module.
 
 _call is a special name in gambas that is executed when a module is called by
 name.
 
 So now your code does not need to change as far as calling the function.
 it still is called as
 
  updateSales(777.77)
 
 I am not sure how many separate modules gambas can support.
> 
> 
> 
>>> 6.  Now loop thru original VB6 sources and look for any occurrence of
>>> "myFuncName" or" mySubName"...and change to "myFuncName.F" or
>>> "mySubName.S"  This was the easiest way I could think of for name the
>>> new module files in the most practical way.
>> 
>> Without giving it much thought, I don't think that's a good idea.
>> 
>>> 7.  Go thru sources and update myArray(..) to myArray[..].  Any VB6
>>> declare of myArray(0 to n) gets converted to a Gambas declare
>>> myArray[n+1].  Etc.
>>> 
>>> And so on.  I'll have to figure out more as I go.  Perhaps Forms will
>>> have to be manually re-constructed to match as much as possible with the
>>> original VB6 form.
>> 
>> Yes.
>> 
>>> This plan might turn out to be an absolute piece of shit when I get to
>>> the bigger project.  But it looks hopeful for at least the code
>>> sections.  Maybe not so much for forms.
>>> 
>>> The concept is that current VB6 code logic works perfectly, and we want
>>> to preserve as much of that as possible without making huge changes -
>>> and as far as the machine operators are concerned they won't see much
>>> change from a Windows to Linux machine.  99.9% of the time they are
>>> looking at the full screen GUI display anyway, and they really don't
>>> interact with the OS on a desktop or terminal level.  As long as they
>>> can run the machine, and maybe open up a Firefox web browser, use PDF
>>> viewer for help files, or get to LibreOffice for looking at report
>>> spreadsheets, that's all they need.  They don't even need to know there
>>> is no "C:" drive anymore.
>> 
>> If you want to convert such an old VB project to Gambas I doubt very
>> much that you can do it in an automatic way. Such old code was often
>> written in a very bad way, so it is full of architectural errors.
>> 
>> This is not "religious", but the bloody experience of many programmers,
>> and it will prevent you from working well with the code in the future.
>> This is called "technical debt".
>> 
>> When refactoring, you come across these errors and instead of blindly
>> accepting them, in my experience it is better to refactor the code right
>> away and use modern concepts which are supported by Gambas. Otherwise,
>> the technical debt has simply been transformed into a new language, but
>> not eliminated.
>> 
>> If you want to ensure that the code does the same as the old one you can
>> at first write tests which test the behavior. After that and together
>> with the usage of Git you can rewrite and refactor the code and
>> eliminate the technical debt. And this in a very free and effective way,
>> as Gambas allows the programmer to do.
>> 
>> Alles Gute
>> 
>> Christof Thalhofer
>> 
>> --
>> Dies ist keine Signatur
>> 
>> 
>> 
>> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----
> 
> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----


More information about the User mailing list