12 Tips for using Micro Focus COBOL

12 Tips for using Micro Focus COBOL

As it is close to Christmas and I wanted to do something with 12 in the title, I’ve thrown together some useful if not un-ordered list of 12 things tips using Micro Focus COBOL.

Remember I am just a developer and just want to help fellow developers out :-) so…

Merry Christmas!

and here is my list…

  1. Use DLLs/Shared objects rather than .int code
  2. DLLs/Shared objects can be preloaded using:
    01 my-ptr procedure-pointer.
    set my-ptr to entry "sodllname"

    Note; sodllname does not have the extension… let the runtime choose it for you!

  3. Use a good development environment such as Visual Studio or on Unix use Eclipse offering if you have a workstation, otherwise I personally use vim/gvim if terminal access is the only choce.
  4. Remember you have a great choice of platforms from Windows to Linux to a load Unix platforms, so choice is king. (did I say that…)
  5. Try using managed code (.Net) if you want to create WPF/WinForms or use WCF
  6. Interopability is great, so if you see a Java Class, .Net Class, COM object, ‘C’ function or a Web Service… use it! You can even mix unmanaged and managed applications..
  7. Avoid using the following if performance is key, as this really does help our code generator:
    alter
    perform thru
    next sentence
    segments
    go to section-name
    go to paragraph outside the current section
  8. Try to end your routine with a “stop run [returning..]” or “exit program [returning..]” or “goback [returning..]” as this gives our code generators a defined end to the routine, which really does help our code analysis/generator
  9. Use comp-5, integers for speed in calculations or native .Net types in managed
  10. Use comp-x for portability (file formats etc..)
  11. Make your application more robust, use tracing in production systems, either our own CTF tracing or your own or third party… it will save your life one day! Use runtime routines to catch error and log them (CBL_ERROR_PROC), ensure your programs shutdown cleanly always use CBL_EXIT_PROC.
  12. Use the generator directive nocheck if you are happy your code is solid and want to a little more performance. ie: it turns off runtime bounds checking

Further reading:

  • Coding for speed, size and portability
  • Eclipse/COBOL on Unix
  • Newsletter about CTF
  • For CTF_ APIs see CBL_CTF_ see library routines
  • Yes.. its a bit of a mixed list.. but hey it may be of help!

    A Comparison Of .Net COBOL, Visual Basic and C#

    Today my collegues Robert and Alex have finally :-) decided to publish a document that compares Visual Basic, C# and COBOL for .Net under The Creative Commons Attribution-ShareAlike 2.5 License.

    Rather than doing a cut-paste job, here is a quote from alex, along with a link to the “real” article itself.

    Enjoy.

    Alex Turner said:

    A Comparison Of .Net COBOL, Visual Basic and C#

    Introduction

    If you are a COBOL programmer wanting to learn C# or a VB programmer wanting to learn COBOL as a .net language (or any other combination of VB.net, C# and COBOL) then this is a good place to start.

    Background

    If you are a COBOL programmer wanting to learn C# or a VB programmer wanting to learn COBOL as a .net language (or any other combination of VB.net, C# and COBOL) then this is a good place to start.

    It has often been noted that the richness of the COBOL language in its Micro Focus .net implementation is not well known. Robert Sales and I have worked on this document to help bring the language to peoples’ attention and to help people who need to work with COBOL on the .net platform.

    Click here to continue reading the rest of the article…

    Free compiler for non-commercial use.

    If you are interested in trying out some of my examples with a modern COBOL compiler.. let me give you a quote from a friend.

    From: Twitter “Scot Nielsen said: Micro Focus COBOL for .NET and Visual Studio available here FREE for non-commercial.

    The development environment/compiler can be downloaded from the Micro Focus Shop.

    More information can be picked up from the Microsoft Visual Studio Gallery

    Factory Method Pattern in COBOL

    Continuing my series on design patterns for the COBOL, the next one on my list is the “Factory method” pattern.

    The pattern is useful, as it helps you hide the real implementation/creation mechanism of your classes. I you are fond of uml… here is the actual uml (from wikipedia).

    Factory Method Pattern from Wikipedia!

    So… lets see the COBOL code…

           interface-id. "Base".
             method-id. "DoIt".
             end method "DoIt".
           end interface "Base".

           class-id. "Derived1Impl".
           object. implements type "Base".
            method-id. "DoIt" public.
             display "Derived1Impl from DoIt".
            end method "DoIt".
           end object.
           end class "Derived1Impl".

           class-id. "Derived2Impl".
           object. implements type "Base".
            method-id. "DoIt" public.
             display "Derived2Impl from DoIt".
            end method "DoIt".
           end object.
           end class "Derived2Impl".

           class-id. "Factory".
           object.
             method-id. "GetObject".
             linkage section.
             01 obj-base type "Base".
             procedure division using by value oType as binary-long
                   returning obj-base.
             
               evaluate oType
                  when 1
                     set obj-base to new type "Derived1Impl"()
                  when 2
                     set obj-base to new type "Derived2Impl"()
                  when other
                     set obj-base to null
             end method "GetObject".
           end object.
           end class "Factory".


           class-id. "FactoryDemo".

           method-id. "Main" static.
           local-storage section.
           01 obj-factory type "Factory".
           01 base-obj type "Base".

           linkage section.
           01 args string occurs any.
           procedure division using by value args.
              set obj-factory to new type "Factory"()

              set base-obj to obj-factory::"GetObject"(1)
              invoke base-obj::"DoIt"()

              set base-obj to obj-factory::"GetObject"(2)
              invoke base-obj::"DoIt"()

           end method "Main".
           end class "FactoryDemo".

    That was pretty straight forward… not too much pain…

    And finally the code produces…

    d:\> FactoryDemo.exe
    Derived1Impl from DoIt
    Derived2Impl from DoIt
    Hello world

    Time to sign off for today.. but if you would like me to continue the series on code patterns or have a particular pattern you need… drop us a line!

    UK National Lottery Wierdness

    Some people think the UK National Lottery is a bit of a con and the prize money is a bit low.. but surely it can’t be this low!

    2009-12-06_1148

    I think this week I will give it a miss :-)