Modernizing your COBOL application by using isCOBOL Compiler code injection
Estimated Reading Time: 2 MinutesIn version 2019 R1 we introduced new compiler configuration variable to inject COBOL code in all controls of a specific type at compile time.
iscobol.compiler.gui.where.defaults=...
This feature simplifies the modernization process for GUI applications and reduces developing efforts.
As an example, when compiling the following screen section controls:
01 s1. 03 ef1 entry-field line 2 col 2 size 10. 03 ef2 entry-field line 2 col 14 size 10. 03 ef3 entry-field line 2 col 26 size 10. 03 pb1 push-button line 5 col 10 size 10 title "Save" exception-value 1.with the following compiler configuration:
iscobol.compiler.gui.push_button.defaults=flat, background-color -14675438 iscobol.compiler.gui.entry_field.defaults=border-color rgb x#dae1e5, \ border-width (0 0 2 0 )the compiler will treat the source code as if it were written as:
01 s1. 03 ef1 entry-field border-color rgb x#dae1e5, border-width (0 0 2 0) line 2 col 2 size 10. 03 ef2 entry-field border-color rgb x#dae1e5, border-width (0 0 2 0) line 2 col 2 size 10. 03 ef3 entry-field border-color rgb x#dae1e5, border-width (0 0 2 0) line 2 col 2 size 10. 03 pb1 push-button flat, background-color -14675438 line 5 col 10 size 10 title "Save" exception-value 1.Code injection also affects controls created with single display statement, so that:
display push-button line 5 col 25 size 10 title "End" exception-value 27 handle in h-pb.becomes:
display push-button flat, background-color -14675438 line 5 col 25 size 10 title "End" exception-value 27 handle in h-pb.With code injection, an entire application can be recompiled without code changes.
Changing the configuration variables can result in a completely different looking application, letting you modernize your screens without altering the source code.
NOTE: Code injection works by inserting the text value of the configuration variables into the source code where controls are declared or created.
That means any syntax errors in the configuration variables will result in compilation errors.
As an example, the following screen is a standard screen with slightly dated looking controls and window:
By compiling with the following compiler configuration:
# Compiler.regexp to remove the 3D and "ERASE" styles when displaying the window iscobol.compiler.regexp="(?i)( 3-D,)" "" \ "(?i)( 3-D)" "" \ "(?i)( ERASE,)" "" \ "(?i)( ERASE)" "" #### code injection for controls #### # add the gradient color on all windows iscobol.compiler.gui.window.defaults= \ gradient-color-1 rgb x#FFFFFF \ gradient-color-2 rgb x#F2F5F9 \ gradient-orientation gradient-northeast-to-southwest # add the transparent style to all labels, check-boxes and radio-buttons iscobol.compiler.gui.label.defaults= transparent iscobol.compiler.gui.check_box.defaults= transparent iscobol.compiler.gui.radio_button.defaults= transparent iscobol.compiler.gui.frame.defaults= transparent # set the white color for all toolbars iscobol.compiler.gui.tool_bar.defaults= background-Color rgb x#FFFFFF \ foreground-Color rgb x#000000 # add the flat style to all push buttons iscobol.compiler.gui.push_button.defaults=flat # add the underline style to all entry-fields iscobol.compiler.gui.entry_field.defaults = border-width (0, 0, 2, 0) \ border-color rgb x#DAE1E5The screen is transformed to this more modern looking screen.