*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_PROG                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This file is part of ZSOFTCOPY.                                     *
*&                                                                     *
*& ZSOFTCOPY is free software: you can redistribute it and/or modify   *
*& it under the terms of the GNU General Public License as published   *
*& by the Free Software Foundation, either version 3 of the License,   *
*& or any later version.                                               *
*&                                                                     *
*& ZSOFTCOPY is distributed in the hope that it will be useful,        *
*& but WITHOUT ANY WARRANTY; without even the implied warranty of      *
*& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the       *
*& GNU General Public License for more details.                        *
*&                                                                     *
*& You should have received a copy of the GNU General Public License   *
*& along with ZDOWNLOAD. If not, see <http://www.gnu.org/licenses/>.   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&  Author:     Ruediger von Creytz     ruediger.creytz@globalbit.net  *
*&  Copyright:  globalBIT, LLC          http://www.globalbit.net       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* prog
*-----------------------------------------------------------------------
FORM prog.
*INCL
  PERFORM prog_r3tr_incl.
*PROG
  PERFORM prog_r3tr_prog.

ENDFORM.                    "prog


*-----------------------------------------------------------------------
* prog_r3tr_incl                                Includes
*-----------------------------------------------------------------------
FORM prog_r3tr_incl.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  lt_html TYPE it_string,
  lt_ti TYPE it_textinput,
  lt_ti_box TYPE it_textinput,
  ls_ti TYPE st_textinput,
  l_masterlang TYPE masterlang,
  l_filename TYPE string,
  ls_trdir TYPE trdir,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  l_name TYPE ad_namtext,
  l_text TYPE as4text,
  l_atext TYPE appltxt.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  PERFORM get_tabstrip
    USING 'PROG_R3TR_INCL' space
    CHANGING lt_tabstrip.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'PROG'
      AND subc = 'I'
      AND downloaded = abap_false.

    CLEAR:
    ls_trdir,
    l_atext.

    REFRESH:
    lt_html,
    lt_ti,
    lt_ti_box.

    SELECT SINGLE * FROM trdir INTO ls_trdir
        WHERE name = <ls_ztadir>-progname.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.

*Attributes
*   Title
    CLEAR ls_ti.
    ls_ti-name = txt_title.
    ls_ti-value = <ls_ztadir>-descript.
    ls_ti-value_double_length = abap_true.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti.
*   Original Language
    CLEAR ls_ti.
    ls_ti-name = txt_original_language.
    l_masterlang = ls_trdir-rload.
    IF l_masterlang IS INITIAL.
      l_masterlang = <ls_ztadir>-masterlang.
    ENDIF.
    PERFORM get_spras
      USING
        l_masterlang
      CHANGING
        l_laiso
        l_sptxt.
    ls_ti-value = l_laiso.
    ls_ti-description = l_sptxt.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti.
*   Space
    CLEAR ls_ti.
    ls_ti-space = abap_true.
    APPEND ls_ti TO lt_ti.
*   Created
    CLEAR ls_ti.
    ls_ti-name = txt_created.
    PERFORM get_date
      USING
        ls_trdir-cdat
      CHANGING
        ls_ti-value.
    ls_ti-value_ext = ls_trdir-cnam.
    PERFORM get_user
      USING
        ls_trdir-cnam
      CHANGING
        l_name.
    ls_ti-value_ext_text = l_name.
    ls_ti-has_value_ext = abap_true.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti.
*   Last changed by
    CLEAR ls_ti.
    ls_ti-name = txt_last_changed_by___1.
    PERFORM get_date
      USING
        ls_trdir-udat
      CHANGING
        ls_ti-value.
    ls_ti-value_ext = ls_trdir-unam.
    PERFORM get_user
      USING
        ls_trdir-unam
      CHANGING
        l_name.
    ls_ti-value_ext_text = l_name.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_ti.
*   Status
    CLEAR ls_ti.
    ls_ti-name = txt_status.
    ls_ti-value = txt_active___1.
    APPEND ls_ti TO lt_ti.
*Attributes - Box
*   Type
    CLEAR ls_ti.
    ls_ti-name = txt_type___1.
    PERFORM get_dom_value_text
      USING
        'SUBC'
        ls_trdir-subc
      CHANGING
        ls_ti-value.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Status
    CLEAR ls_ti.
    ls_ti-name = txt_status.
    PERFORM get_dom_value_text
      USING
        'RSTAT'
        ls_trdir-rstat
      CHANGING
        ls_ti-value.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Application
    CLEAR ls_ti.
    ls_ti-name = txt_application.
    SELECT SINGLE atext FROM taplt INTO l_atext
      WHERE appl = ls_trdir-appl
      AND sprsl = sy-langu.
    ls_ti-value = l_atext.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Authorization Group
    CLEAR ls_ti.
    ls_ti-name = txt_authorization_group.
    ls_ti-value = ls_trdir-secu.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Package
    CLEAR ls_ti.
    ls_ti-name = txt_package.
    ls_ti-value = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        l_text.
    ls_ti-description = l_text.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Space
    CLEAR ls_ti.
    ls_ti-space = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Editor lock
    CLEAR ls_ti.
    ls_ti-name = txt_editor_lock.
    ls_ti-value = ls_trdir-edtx.
    ls_ti-flag = abap_true.
    APPEND ls_ti TO lt_ti_box.

*** HTML
    PERFORM html_main_header
      USING
        tpt_fugr_incl
        space "l_name_field
        <ls_ztadir>-progname
        txt_active___1
        space
        space
        'makeDivSize(''SOURCECODE'');'
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*   Attributes
    PERFORM html_add_textinput_subbox
      USING
        lt_ti
        txt_attributes___2
        lt_ti_box
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
*  Source code
    PERFORM add_report_sourcecode
      USING
        <ls_ztadir>-progname
        <ls_ztadir>-progname
        gc_extension_txt
        abap_false
        <ls_ztadir>
        'SOURCECODE'
        abap_true
      CHANGING
        lt_html.
*
    PERFORM html_main_footer
      USING
        lt_html.

    PERFORM download
      USING
        lt_html
        <ls_ztadir>-pgmid
        <ls_ztadir>-object
        <ls_ztadir>-progname
        gc_extension_htm
        abap_true.
    <ls_ztadir>-downloaded = abap_true.
  ENDLOOP.
ENDFORM.                                                    "r3tr_incl


*-----------------------------------------------------------------------
* prog_r3tr_prog                                Programme, Includes
*-----------------------------------------------------------------------
FORM prog_r3tr_prog.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  lt_html TYPE it_string,
  ls_prog_inf TYPE rpy_prog,
  lt_include_tab TYPE STANDARD TABLE OF rpy_repo,
  lt_source_extended TYPE it_abaptxt255,
  ls_source_extended TYPE st_abaptxt255,
  lt_textelements TYPE STANDARD TABLE OF textpool,
  ls_textelements_addons TYPE st_textpool_addons,
  lt_text_symbols_addons TYPE it_textpool_addons,
  lt_selection_texts TYPE STANDARD TABLE OF textpool,
  lt_selection_texts_addons TYPE it_textpool_addons,
  lt_text_symbols TYPE STANDARD TABLE OF textpool,
  lt_list_titles TYPE it_textinput,
  lt_row_titles TYPE it_textinput,
  lt_doc TYPE it_string,
  lt_ti TYPE it_textinput,
  lt_ti_box TYPE it_textinput,
  ls_ti TYPE st_textinput,
  l_masterlang TYPE masterlang,
  l_filename TYPE string,
  lt_varid TYPE STANDARD TABLE OF varid,
  lt_params TYPE STANDARD TABLE OF vanz,
  lt_params_nonv TYPE STANDARD TABLE OF vanz,
  lt_selop TYPE STANDARD TABLE OF vanz,
  lt_selop_nonv TYPE STANDARD TABLE OF vanz,
  lt_objects TYPE STANDARD TABLE OF vanz,
  lt_valutab TYPE STANDARD TABLE OF rsparams,
  lt_variant TYPE it_variant,
  ls_variant TYPE st_variant,
  ls_trdir TYPE trdir,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  l_name TYPE ad_namtext,
  l_text TYPE as4text,
  l_atext TYPE appltxt,
  l_text01 TYPE grouptext,
  l_fu_param(30) TYPE c,
  lt_source TYPE abapsource OCCURS 0.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip,
  <ls_ztadir> TYPE st_ztadir,
  <ls_textelements> TYPE textpool,
  <ls_varid> TYPE varid,
  <ls_vanz> TYPE vanz,
  <ls_valutab> TYPE rsparams,
  <ls_source> LIKE LINE OF lt_source.

  PERFORM get_tabstrip
    USING 'PROG_R3TR_PROG' space
    CHANGING lt_tabstrip.

  SELECT SINGLE parameter FROM fupararef INTO l_fu_param
    WHERE funcname = 'RPY_PROGRAM_READ'
    AND r3state = 'A'
    AND parameter = 'SOURCE_EXTENDED'
    AND paramtype = 'T'.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'PROG'
      AND subc = '1'
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    CLEAR:
    ls_prog_inf,
    ls_trdir,
    ls_variant,
    l_atext.

    REFRESH:
    lt_html,
    lt_include_tab,
    lt_list_titles,
    lt_objects,
    lt_params,
    lt_params_nonv,
    lt_row_titles,
    lt_selection_texts,
    lt_selop,
    lt_selop_nonv,
    lt_source,
    lt_source_extended,
    lt_text_symbols,
    lt_text_symbols_addons,
    lt_textelements,
    lt_ti,
    lt_ti_box,
    lt_valutab,
    lt_variant,
    lt_varid.

    IF l_fu_param = 'SOURCE_EXTENDED'.
      CALL FUNCTION 'RPY_PROGRAM_READ'
        EXPORTING
          language            = sy-langu
          program_name        = <ls_ztadir>-obj_name
          with_includelist    = abap_true
          only_source         = abap_false
          only_texts          = abap_false
          read_latest_version = abap_true
          with_lowercase      = abap_true
        IMPORTING
          prog_inf            = ls_prog_inf
        TABLES
          include_tab         = lt_include_tab
          source_extended     = lt_source_extended
          textelements        = lt_textelements
        EXCEPTIONS
          OTHERS              = 1.
      IF sy-subrc <> 0.
        <ls_ztadir>-subrc = sy-subrc.
        CONTINUE.
      ENDIF.
    ELSE.
      CALL FUNCTION 'RPY_PROGRAM_READ'
        EXPORTING
          language            = sy-langu
          program_name        = <ls_ztadir>-obj_name
          with_includelist    = abap_true
          only_source         = abap_false
          only_texts          = abap_false
          read_latest_version = abap_true
          with_lowercase      = abap_true
        IMPORTING
          prog_inf            = ls_prog_inf
        TABLES
          include_tab         = lt_include_tab
          SOURCE              = lt_source
          textelements        = lt_textelements
        EXCEPTIONS
          OTHERS              = 1.
      IF sy-subrc <> 0.
        <ls_ztadir>-subrc = sy-subrc.
        CONTINUE.
      ENDIF.
      LOOP AT lt_source ASSIGNING <ls_source>.
        ls_source_extended = <ls_source>-line.
        APPEND ls_source_extended TO lt_source_extended.
      ENDLOOP.
    ENDIF.
    SELECT SINGLE * FROM trdir INTO ls_trdir
        WHERE name = <ls_ztadir>-progname.
*Documentation
    PERFORM get_docu
      USING
        'RE'
        <ls_ztadir>-obj_name
        'E'
      CHANGING
        lt_doc.
*Text Symbols
    LOOP AT lt_textelements ASSIGNING <ls_textelements>.
      CASE <ls_textelements>-id.
        WHEN 'H'.
          CLEAR ls_ti.
          ls_ti-value = <ls_textelements>-entry.
          ls_ti-input = abap_true.
          ls_ti-no_name = abap_true.
          APPEND ls_ti TO lt_row_titles.
        WHEN 'I'.
          CLEAR ls_textelements_addons.
          APPEND <ls_textelements> TO lt_text_symbols.
          ls_textelements_addons-strlen = strlen(
            <ls_textelements>-entry
          ).
          APPEND ls_textelements_addons TO lt_text_symbols_addons.
        WHEN 'S'.
          CLEAR ls_textelements_addons.
          IF <ls_textelements>-entry+0(1) = 'D'.
            <ls_textelements>-entry+0(1) = space.
            ls_textelements_addons-dict_ref = abap_true.
          ENDIF.
          CONDENSE <ls_textelements>-entry.
          APPEND ls_textelements_addons
            TO lt_selection_texts_addons.
          APPEND <ls_textelements> TO lt_selection_texts.
        WHEN 'T'.
          CLEAR ls_ti.
          ls_ti-value = <ls_textelements>-entry.
          ls_ti-input = abap_true.
          ls_ti-no_name = abap_true.
          APPEND ls_ti TO lt_list_titles.
      ENDCASE.
    ENDLOOP.
*Attributes
*   Title
    CLEAR ls_ti.
    ls_ti-name = txt_title.
    ls_ti-value = <ls_ztadir>-descript.
    ls_ti-value_double_length = abap_true.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti.
*   Original Language
    CLEAR ls_ti.
    ls_ti-name = txt_original_language.
    l_masterlang = ls_prog_inf-masterlang.
    IF l_masterlang IS INITIAL.
      l_masterlang = <ls_ztadir>-masterlang.
    ENDIF.
    PERFORM get_spras
      USING
        l_masterlang
      CHANGING
        l_laiso
        l_sptxt.
    ls_ti-value = l_laiso.
    ls_ti-description = l_sptxt.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti.
*   Space
    CLEAR ls_ti.
    ls_ti-space = abap_true.
    APPEND ls_ti TO lt_ti.
*   Created
    CLEAR ls_ti.
    ls_ti-name = txt_created.
    PERFORM get_date
      USING
        ls_prog_inf-creat_date
      CHANGING
        ls_ti-value.
    ls_ti-value_ext = ls_prog_inf-creat_user.
    PERFORM get_user
      USING
        ls_prog_inf-creat_user
      CHANGING
        l_name.
    ls_ti-value_ext_text = l_name.
    ls_ti-has_value_ext = abap_true.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti.
*   Last changed by
    CLEAR ls_ti.
    ls_ti-name = txt_last_changed_by___1.
    PERFORM get_date
      USING
        ls_prog_inf-mod_date
      CHANGING
        ls_ti-value.
    ls_ti-value_ext = ls_prog_inf-mod_user.
    PERFORM get_user
      USING
        ls_prog_inf-mod_user
      CHANGING
        l_name.
    ls_ti-value_ext_text = l_name.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_ti.
*   Status
    CLEAR ls_ti.
    ls_ti-name = txt_status.
    ls_ti-value = txt_active___1.
    APPEND ls_ti TO lt_ti.
*Attributes - Box
*   Type
    CLEAR ls_ti.
    ls_ti-name = txt_type___1.
    PERFORM get_dom_value_text
      USING
        'SUBC'
        ls_prog_inf-prog_type
      CHANGING
        ls_ti-value.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Status
    CLEAR ls_ti.
    ls_ti-name = txt_status.
    PERFORM get_dom_value_text
      USING
        'RSTAT'
        ls_prog_inf-status
      CHANGING
        ls_ti-value.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Application
    CLEAR ls_ti.
    ls_ti-name = txt_application.
    SELECT SINGLE atext FROM taplt INTO l_atext
      WHERE appl = ls_prog_inf-appl
      AND sprsl = sy-langu.
    ls_ti-value = l_atext.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Authorization Group
    CLEAR ls_ti.
    CLEAR l_text01.
    ls_ti-name = txt_authorization_group.
    ls_ti-value = ls_prog_inf-auth_group.
    SELECT SINGLE text01 FROM tpgpt INTO l_text01
      WHERE p_group = ls_prog_inf-auth_group
      AND langu = sy-langu.
    ls_ti-description = l_text01.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Package
    CLEAR ls_ti.
    ls_ti-name = txt_package.
    ls_ti-value = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        l_text.
    ls_ti-description = l_text.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Logical database
    CLEAR ls_ti.
    ls_ti-name = txt_logical_database.
    ls_ti-value = ls_prog_inf-dbname.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Selection screen version
    CLEAR ls_ti.
    ls_ti-name = txt_selection_screen_version.
    ls_ti-value = ls_prog_inf-selscreen.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_box.
*   Editor lock
    CLEAR ls_ti.
    ls_ti-name = txt_editor_lock.
    ls_ti-value = ls_trdir-edtx.
    ls_ti-flag = abap_true.
    ls_ti-flag_col = 1.
    APPEND ls_ti TO lt_ti_box.
*   Fixed point arithmetic
    CLEAR ls_ti.
    ls_ti-name = txt_fixed_point_arithmetic.
    ls_ti-value = ls_trdir-fixpt.
    ls_ti-flag = abap_true.
    ls_ti-flag_col = 2.
    APPEND ls_ti TO lt_ti_box.
*   Unicode checks active
    CLEAR ls_ti.
    ls_ti-name = txtt_unicode_checks_active.
    ls_ti-value = ls_trdir-uccheck.
    ls_ti-flag = abap_true.
    ls_ti-flag_col = 1.
    APPEND ls_ti TO lt_ti_box.
*   Start using variant
    CLEAR ls_ti.
    ls_ti-name = txt_start_using_variant.
    ls_ti-value = ls_trdir-sset.
    ls_ti-flag = abap_true.
    ls_ti-flag_col = 2.
    APPEND ls_ti TO lt_ti_box.
*Variants
    IF g_add_report_variants = abap_true.
      SELECT * FROM varid INTO TABLE lt_varid
          WHERE report = <ls_ztadir>-obj_name.
      LOOP AT lt_varid ASSIGNING <ls_varid>.
        READ TABLE gt_varid_broken TRANSPORTING NO FIELDS
            WITH KEY report = <ls_varid>-report
                     vari = <ls_varid>-variant.
        IF sy-subrc = 0.
          CONTINUE.
        ENDIF.
        CALL FUNCTION 'RS_VARIANT_CONTENTS'
          EXPORTING
            report        = <ls_varid>-report
            variant       = <ls_varid>-variant
          TABLES
            l_params      = lt_params
            l_params_nonv = lt_params_nonv
            l_selop       = lt_selop
            l_selop_nonv  = lt_selop_nonv
            valutab       = lt_valutab
            OBJECTS       = lt_objects
          EXCEPTIONS
            OTHERS        = 1.
        IF sy-subrc <> 0.
          CONTINUE.
        ENDIF.
        LOOP AT lt_valutab ASSIGNING <ls_valutab>.
          IF sy-tabix > 100.
            "too many entries may cause a timeout,
            "so better skip the rest...
            EXIT.
          ENDIF.
          CLEAR ls_variant.
          ls_variant-program = <ls_varid>-report.
          ls_variant-variant = <ls_varid>-variant.
          ls_variant-selname = <ls_valutab>-selname.
          PERFORM get_gui_kind
            USING <ls_valutab>-kind
            CHANGING ls_variant-kind.
          PERFORM get_gui_sign
            USING <ls_valutab>-sign
            CHANGING ls_variant-sign.
          PERFORM get_gui_operator
            USING <ls_valutab>-option
            CHANGING ls_variant-option.
          ls_variant-low = <ls_valutab>-low.
          ls_variant-high = <ls_valutab>-high.
          READ TABLE lt_params ASSIGNING <ls_vanz>
              WITH KEY name = <ls_valutab>-selname.
          IF sy-subrc <> 0 OR <ls_vanz>-text IS INITIAL.
            READ TABLE lt_params_nonv ASSIGNING <ls_vanz>
                WITH KEY name = <ls_valutab>-selname.
            IF sy-subrc <> 0 OR <ls_vanz>-text IS INITIAL.
              READ TABLE lt_selop ASSIGNING <ls_vanz>
                  WITH KEY name = <ls_valutab>-selname.
              IF sy-subrc <> 0 OR <ls_vanz>-text IS INITIAL.
                READ TABLE lt_selop_nonv ASSIGNING <ls_vanz>
                    WITH KEY name = <ls_valutab>-selname.
                IF sy-subrc <> 0 OR <ls_vanz>-text IS INITIAL.
                  READ TABLE lt_objects ASSIGNING <ls_vanz>
                      WITH KEY name = <ls_valutab>-selname.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
          IF sy-subrc = 0.
            ls_variant-text = <ls_vanz>-text.
          ENDIF.
          APPEND ls_variant TO lt_variant.
        ENDLOOP.
      ENDLOOP.
    ENDIF.
***Tabstrip
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'LISTTITLE'.
          IF lt_list_titles IS INITIAL
          AND lt_row_titles IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'SELECTIONTEXTS'.
          IF lt_selection_texts IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'TEXTSYMBOLS'.
          IF lt_text_symbols IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'DOC'.
          IF lt_doc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'VARIANT'.
          IF lt_variant IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
            IF g_add_report_variants = abap_false.
              <ls_tabstrip>-hidden = abap_true.
            ENDIF.
          ENDIF.
      ENDCASE.
    ENDLOOP.

*** HTML
    PERFORM html_main_header
      USING
        tpt_prog_repo
        space "l_name_field
        <ls_ztadir>-obj_name
        txt_active___1
        space
        space
        'makeDivSize(''SOURCECODE'');makeDivSize(''DOC'');'
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*  list and row titles
    IF NOT lt_list_titles IS INITIAL
    OR NOT lt_row_titles IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_box_textinput2ver
        USING
          txt_list_header
          lt_list_titles
          txt_column_heading
          lt_row_titles
          'LISTTITLE'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  selection texts
    IF NOT lt_selection_texts IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'PROG_SELEC'
          lt_selection_texts
          lt_selection_texts_addons
          'SELECTIONTEXTS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  text symbols
    IF NOT lt_text_symbols IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'PROG_SYMBO'
          lt_text_symbols
          lt_text_symbols_addons
          'TEXTSYMBOLS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  variants
    IF g_add_report_variants = abap_true
    AND ( NOT lt_variant IS INITIAL
    OR g_empty_tab = gc_empty_tab_display ).
      PERFORM html_add_table
        USING
          'PROG_VARIA'
          lt_variant
          lt_variant
          'VARIANT'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  documentation
    IF NOT lt_doc IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_doc
        USING
          lt_doc
          'DOC'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  attributes
    PERFORM html_add_textinput_subbox
      USING
        lt_ti
        txt_attributes___2
        lt_ti_box
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
*  source code
    PERFORM add_report_sourcecode
      USING
        <ls_ztadir>-obj_name
        <ls_ztadir>-obj_name
        gc_extension_txt
        abap_true
        <ls_ztadir>
        'SOURCECODE'
        abap_true
      CHANGING
        lt_html.
*
    PERFORM html_main_footer
      USING
        lt_html.

    PERFORM download
      USING
        lt_html
        <ls_ztadir>-pgmid
        <ls_ztadir>-object
        <ls_ztadir>-obj_name
        gc_extension_htm
        abap_true.
  ENDLOOP.
ENDFORM.                                                    "r3tr_prog
