enumeration evolution from 10.0 to 12.0

In this article I will explain how I extract pragmatically the enumerations differences between Powerbuilder releases using EmbeddingPerl library and the differents pbperlxxx interpreters.

Just run each version of pbperlxxx interpreter from command line :

pbperl100 -MPowerbuilder=":all" -MPowerbuilder::EnumClasses -e "print join $/,map{ $_.':'.$/.'  ' . join $/.'  ', sort keys %{Powerbuilder::EnumClasses::GetItems($_)}} sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums100.txt
pbperl105 -MPowerbuilder=":all" -MPowerbuilder::EnumClasses -e "print join $/,map{ $_.':'.$/.'  ' . join $/.'  ', sort keys %{Powerbuilder::EnumClasses::GetItems($_)}} sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums105.txt
pbperl110 -MPowerbuilder=":all" -MPowerbuilder::EnumClasses -e "print join $/,map{ $_.':'.$/.'  ' . join $/.'  ', sort keys %{Powerbuilder::EnumClasses::GetItems($_)}} sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums110.txt
pbperl115 -MPowerbuilder=":all" -MPowerbuilder::EnumClasses -e "print join $/,map{ $_.':'.$/.'  ' . join $/.'  ', sort keys %{Powerbuilder::EnumClasses::GetItems($_)}} sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums115.txt
pbperl120 -MPowerbuilder=":all" -MPowerbuilder::EnumClasses -e "print join $/,map{ $_.':'.$/.'  ' . join $/.'  ', sort keys %{Powerbuilder::EnumClasses::GetItems($_)}} sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums120.txt
pbperl125 -MPowerbuilder=":all" -MPowerbuilder::EnumClasses -e "print join $/,map{ $_.':'.$/.'  ' . join $/.'  ', sort keys %{Powerbuilder::EnumClasses::GetItems($_)}} sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;" > enums125.txt

Then I compare the results files using a diff tool to extract differences…

my @versions = qw( 100 105 110 115 120 125 );
sub compare{
  my ($a, $b) = @_;
  print "Between $a and $b:\n";  
  my $code = '-MPowerbuilder=":all" -MPowerbuilder::EnumClasses -e "print join $/,map{ $_.\':\'.$/.\'  \' . join $/.\'  \', sort keys %{Powerbuilder::EnumClasses::GetItems($_)}} sort grep{/^[^\d].*/} keys %Powerbuilder::EnumClasses;"';
  `pbperl${a} $code > tmp${a}.txt`;
  `pbperl${b} $code > tmp${b}.txt`;
  print join $/, map{s/^[<]/-/; s/^[>]/+/;$_} grep {/^[<>]/ && !/^[<>] CLASS/} split /\n/, `diff tmp${a}.txt tmp${b}.txt`;
  unlink "tmp${a}.txt";
  unlink "tmp${b}.txt";
  print "\n\n";
  return 0;  #don't mind

And the output was :

Between 100 and 105:
+ argcallingconvention:
+   byreferenceargument
+   byvalueargument
+   readonlyargument
+   varlistargument
+ datetimeformat:
+   dtfcustom
+   dtflongdate
+   dtfshortdate
+   dtftime
+   filetypedoc
+   filetypehtml
+   filetypepdf
+ menustyle:
+   contemporarymenu
+   traditionalmenu
+   datepicker
+   typebyte
+   typelonglong
+ toolbarstyle:
+   contemporarytoolbar
+   traditionaltoolbar
+ webpagingmethod:
+   callback
+   postback
+   xmlclientside

Between 105 and 110:
+ dbnotification:
+   dbdatatruncate
+   dbfailover
+   dbnonotification
+   dbserverdown
+   mlsync
+   mlsynchronization
+   syncparm
+   ulsync
+   wsconnection
+ orientationtype:
+   paperlandscape
+   paperportrait
+   appstarting
+   help
+   hyperlink
+   nopointer
+   bmp
+   jpeg
+   png
+   tiff
+ syncprocesstype:
+   bidirectional
+   downloadonly
+   uploadonly
+   collapsed
+   collapsing
+   expanded
+   expanding
+   treenodeselected
+   treenodeselecting
+   wserror
+ windowanimationstyle:
+   bottomroll
+   bottomslide
+   centeranimation
+   fadeanimation
+   leftroll
+   leftslide
+   noanimation
+   rightroll
+   rightslide
+   toproll
+   topslide

Between 110 and 115:
+ richtexttoolbaractivation:
+   richtexttoolbaractivationalways
+   richtexttoolbaractivationnever
+   richtexttoolbaractivationonedit
+ sqlfunction:
+   sqldbdelete
+   sqldbinsert
+   sqldbothers
+   sqldbprocedure
+   sqldbrpc
+   sqldbselect
+   sqldbupdate

Between 115 and 120:
+ flowdirection:
+   lefttoright
+   righttoleft
+   xlsb
+   xlsx

Between 120 and 125: